photoqt-2.5/000755 001750 001750 00000000000 14165364275 013425 5ustar00luspiluspi000000 000000 photoqt-2.5/misc/000755 001750 001750 00000000000 14165363672 014360 5ustar00luspiluspi000000 000000 photoqt-2.5/misc/settings.db000644 001750 001750 00000260000 14156446706 016525 0ustar00luspiluspi000000 000000 SQLite format 3@ .WH f - r ! ?w FH  fV E3G!indexsqlite_autoindex_thumbnails_1thumbnailsYtablemetadatametadata CREATE TABLE "metadata" ( "name" TEXT UNIQUE, "value" TEXT, "defaultvalue" TEXT, "datatype" TEXT )[tableimageviewimageviewCREATE TABLE "imageview" ( "name" TEXT UNIQUE, "value" TEXT, "defaultvalue" TEXT, "datatype" TEXT ) WtablegeneralgeneralCREATE TABLE "general" ( "name" TEXT UNIQUE, "value" TEXT, "defaultvalue" TEXT, "datatype" TEXT ) [tablefiletypesfiletypes CREATE TABLE "filetypes" ( "name" TEXT UNIQUE, "value" TEXT, "defaultvalue" TEXT, "datatype" TEXT ) 1 Eindexsqlite_autoindex_filetypes_1filetypes YtablemainmenumainmenuCREATE TABLE "mainmenu" ( "name" TEXT UNIQUE, "value" TEXT, "defaultvalue" TEXT, "datatype" TEXT )1Eindexsqlite_autoindex_histogram_1histogram-Aindexsqlite_autoindex_general_1general [tableslideshowslideshow CREATE TABLE "slideshow" ( "name" TEXT UNIQUE, "value" TEXT, "defaultvalue" TEXT, "datatype" TEXT )YtableopenfileopenfileCREATE TABLE "openfile" ( "name" TEXT UNIQUE, "value" TEXT, "defaultvalue" TEXT, "datatype" TEXT )1Eindexsqlite_autoindex_interface_1interface1Eindexsqlite_autoindex_imageview_1imageview[tablehistogramhistogram CREATE TABLE "histogram" ( "name" TEXT UNIQUE, "value" TEXT, "defaultvalue" TEXT, "datatype" TEXT )y/Cindexsqlite_autoindex_openfile_1openfile/Cindexsqlite_autoindex_metadata_1metadata !!]tablethumbnailsthumbnails CREATE TABLE "thumbnails" ( "name" TEXT UNIQUE, "value" TEXT, "defaultvalue" TEXT, "datatype" TEXT )1Eindexsqlite_autoindex_slideshow_1slideshow/Cindexsqlite_autoindex_mainmenu_1mainmenu[tableinterfaceinterfaceCREATE TABLE "interface" ( "name" TEXT UNIQUE, "value" TEXT, "defaultvalue" TEXT, "datatype" TEXT ) %ElementWidth450450int 2 fB"{Y9 k J .  q N *  g E ( m Q 0 2-PopoutChromecast00bool17MouseWheelSensitivity11int0+KeepWindowOnTop00bool/1SaveWindowGeometry00bool.#HotEdgeSize44int$-?NavigateOnEmptyBackground00bool!,9CloseOnEmptyBackground00bool+/RememberLastImage00bool*/PopoutUnavailable00bool)-PopoutFileSaveAs00bool (7PopoutSettingsManager00bool'%PopoutFilter00bool&+PopoutWallpaper00bool%#PopoutImgur00bool$#PopoutAbout00bool#-PopoutFileDelete00bool"-PopoutFileRename00bool"!;PopoutSlideShowControls00bool" ;PopoutSlideShowSettings00bool!9PopoutOpenFileKeepOpen00bool)PopoutOpenFile00bool#PopoutScale00bool+PopoutHistogram00bool)PopoutMetadata00bool)PopoutMainMenu00bool+OverlayColorRed00int/OverlayColorGreen00int-OverlayColorBlue00int/OverlayColorAlpha190190int1BackgroundImageUse00bool3BackgroundImageTile00bool!9BackgroundImageStretch00bool$?BackgroundImageScreenshot00bool#=BackgroundImageScaleCrop00bool5BackgroundImageScale11bool3 BackgroundImagePathstring 7BackgroundImageCenter00bool TrayIcon00int +QuickNavigation00bool -WindowDecoration11bool !WindowMode11bool 1LabelsManageWindow00bool";LabelsHideRotationAngle00bool3LabelsHideZoomLevel00bool";LabelsHideWindowButtons00bool1LabelsHideFilename00bool1LabelsHideFilepath11bool/LabelsHideCounter00bool#;LabelsWindowButtonsSize1010intLanguageenenstring   Version uV; ZoomLevel2020int +UserPlacesWidth300300int/UserPlacesVolumes00bool)UserPlacesUser11bool1UserPlacesStandard11bool!Thumbnails11bool!9ShowHiddenFilesFolders00boolPreview11bool-KeepLastLocation11bool#DefaultViewlistliststring  Versionstring z\<*{T=3BigViewerModeButton11boolZoomSpeed2020int% ARememberZoomRotationMirror00bool- QInterpolationDisableForSmallImages11bool$ 9InterpolationThreshold100100int& 'AnimationTypeopacityopacitystring /AnimationDuration33intCache512512intMargin55int3LeftButtonMoveImage11bool/LoopThroughFolder11bool#FitInWindow00bool1TransparencyMarker00bool3SortImagesAscending11bool-%##SortImagesBynaturalnamenaturalnamestring =[=/IncludeSubFolders00bool&'TypeAnimationopacityopacitystringTime55intShuffle00bool MusicFilestringLoop11bool+ImageTransition44int!HideLabels11bool h{fR9h-MaxNumberThreads44int+ ExcludeOwnCloudstring- ExcludeNextcloudstring) ExcludeDropBoxstring ) ExcludeFolderslist Cache11bool Disable00bool 5FilenameOnlyFontSize1010int %FilenameOnly00boolFontSize77intFilename11boolEdgeBottomBottomstring)CenterOnActive00bool!Visibility00intLiftUp66intSpacing00intSize8080int VersioncolorcolorstringSize300,200300,200size Position100,100100,100pointVisible00bool  |cQ=)oYD3 q R 4  %ElementWidth450450int+FaceTagsEnabled11bool-FaceTagsFontSize1010int3FaceTagsBorderWidth33int03FaceTagsBorderColor#44ff0000#44ff0000string)FaceTagsBorder00bool1FaceTagsVisibility11int%AutoRotation11bool!)ElementOpacity219.3220double)ElementHotEdge11boolTime11boolSoftware11boolSceneType11boolModel11boolMake11boolLocation11bool#LightSource11boolKeywords11bool Iso11bool3 //GpsMapopenstreetmap.orgopenstreetmap.orgstring Gps11bool FNumber11bool FLength11boolFlash11bool%ExposureTime11bool!Dimensions11boolCopyright11bool#ImageNumber11boolFileSize11boolFileType11boolFilename11bool BB=-//VideoThumbnailerffmpegthumbnailerffmpegthumbnailerstring#VideoVolume100100intVideoLoop00bool'VideoAutoplay11bool'ExternalUnrar00bool!PDFQuality150150int -VideoThumbnailer#VideoVolume VideoLoop'VideoAutoplay'ExternalUnrar ! PDFQuality  VersionSize Position  Visible XFn+x3BigViewerModeButton ZoomSpeedARememberZoomRotationMirror &QInterpolationDisableForSmallImages 9InterpolationThreshold 'AnimationType /AnimationDuration Cache Margin3LeftButtonMoveImage/LoopThroughFolder#FitInWindow1TransparencyMarker3SortImagesAscending% SortImagesBy 2 bG/ . Dx`-  u f K y  / _  I  -PopoutChromecast27MouseWheelSensitivity1+KeepWindowOnTop01SaveWindowGeometry/#HotEdgeSize.?NavigateOnEmptyBackground-9CloseOnEmptyBackground,/RememberLastImage+/PopoutUnavailable*-PopoutFileSaveAs)7PopoutSettingsManager(%PopoutFilter'+PopoutWallpaper&#PopoutImgur%#PopoutAbout$-PopoutFileDelete#-PopoutFileRename";PopoutSlideShowControls!;PopoutSlideShowSettings 9PopoutOpenFileKeepOpen)PopoutOpenFile#PopoutScale+PopoutHistogram)PopoutMetadata)PopoutMainMenu+OverlayColorRed/OverlayColorGreen-OverlayColorBlue/OverlayColorAlpha1BackgroundImageUse3BackgroundImageTile9BackgroundImageStretch?BackgroundImageScreenshot=BackgroundImageScaleCrop5BackgroundImageScale3BackgroundImagePath7BackgroundImageCenter TrayIcon +QuickNavigation -WindowDecoration !WindowMode 1LabelsManageWindow ;LabelsHideRotationAngle3LabelsHideZoomLevel;LabelsHideWindowButtons1LabelsHideFilename1LabelsHideFilepath/LabelsHideCounter;LabelsWindowButtonsSize  Language % ElementWidth 33zmDXrg_RB5,"%ElementWidth+FaceTagsEnabled-FaceTagsFontSize3FaceTagsBorderWidth3FaceTagsBorderColor)FaceTagsBorder1FaceTagsVisibility%AutoRotation)ElementOpacity)ElementHotEdgeTime Software SceneType ModelMake Location#LightSource KeywordsIso GpsMap Gps FNumber FLength Flash%ExposureTime!Dimensions Copyright#ImageNumber FileSize FileType  Filename D|fRD ZoomLevel +UserPlacesWidth /UserPlacesVolumes)UserPlacesUser1UserPlacesStandard!Thumbnails9ShowHiddenFilesFolders Preview-KeepLastLocation# DefaultView /IncludeSubFolders'TypeAnimationTime Shuffle MusicFileLoop+ImageTransition ! HideLabels \f6I! r-MaxNumberThreads+ExcludeOwnCloud-ExcludeNextcloud)ExcludeDropBox)ExcludeFolders Cache Disable 5FilenameOnlyFontSize %FilenameOnly FontSize FilenameEdge)CenterOnActive!Visibility LiftUp Spacing Sizephotoqt-2.5/misc/contextmenu.db000644 001750 001750 00000020000 14140666764 017231 0ustar00luspiluspi000000 000000 SQLite format 3@ .S` btableentriesentriesCREATE TABLE "entries" ( "command" TEXT, "desc" TEXT, "close" TEXT ) photoqt-2.5/misc/shortcuts.db000644 001750 001750 00000050000 14156452153 016711 0ustar00luspiluspi000000 000000 SQLite format 3@ %$%.WH _C- Aindexsqlite_autoindex_builtin_1builtin mtablebuiltinbuiltinCREATE TABLE "builtin" ( "category" TEXT, "command" TEXT UNIQUE, "shortcuts" TEXT, "defaultshortcuts" TEXT )j'tableexternalexternalCREATE TABLE "external" ( "command" TEXT, "shortcuts" TEXT, "close" TEXT )  -''EG(  g N 7 z H &  l 1  X C * W!OOnavigation__openEscape,O, Ctrl+O, Right Button+WEEscape,O, Ctrl+O, Right Button+WE3---other__loggingCtrl+Alt+Shift+DCtrl+Alt+Shift+D,% other__chromecast+ other__imgur/*'%%other__imgurAnonymCtrl+Shift+ICtrl+Shift+I)#other__histogramHH(#other__wallpaperWW'other__aboutII(&-other__slideshowQuickShift+SShift+S%#other__slideshowSS$!other__settingsPP#-other__showThumbnailsTT&")other__keepMetaDataShift+EShift+E!)other__showMetaDataEE )other__showMainMenuMM955file__saveAsCtrl+Shift+S, Ctrl+SCtrl+Shift+S, Ctrl+S #file__clipboardCtrl+CCtrl+Cfile__moveCtrl+MCtrl+M'%%file__copyCtrl+Shift+CCtrl+Shift+C/ file__deletePermanentfile__deleteDeleteDeletefile__renameF2F2 !image__tagFacesCtrl+FCtrl+F0)%%image__showFaceTagsCtrl+Shift+FCtrl+Shift+F&)image__playPauseAniShift+PShift+Pimage__scaleCtrl+XCtrl+Ximage__flipVCtrl+VCtrl+Vimage__flipHCtrl+HCtrl+Himage__rotate0Ctrl+0Ctrl+0image__rotateLLLimage__rotateRRR#image__zoomReset00(%image__zoomActual1, Ctrl+11, Ctrl+1s mmimage__zoomOut-, Keypad+-, Ctrl+-, Ctrl+Wheel Down, Wheel Down-, Keypad+-, Ctrl+-, Ctrl+Wheel Down, Wheel Down {{image__zoomIn+, =, Keypad++, Ctrl++, Ctrl+=, Ctrl+Wheel Up, Wheel Up+, =, Keypad++, Ctrl++, Ctrl+=, Ctrl+Wheel Up, Wheel Up' !navigation__quitQ, Ctrl+QQ, Ctrl+Q6 !--navigation__closeRight Button+SESRight Button+SES, !/navigation__quickNavigationCtrl+NCtrl+N!%navigation__viewerModeVV7!!++navigation__goToLastEnd, Ctrl+RightEnd, Ctrl+Right8!#++navigation__goToFirstHome, Ctrl+LeftHome, Ctrl+Left4!'%%navigation__contextMenuRight ButtonRight ButtonS!KKnavigation__prevLeft, Backspace, Right Button+WLeft, Backspace, Right Button+WM!EEnavigation__nextRight, Space, Right Button+ERight, Space, Right Button+E!)navigation__filterImagesFFK - Q _Iido p | QYu^< )  2QC" __logging-%__chromecast, __imgur+'__imgurAnonym*#__histogram)#__wallpaper( __about'-__slideshowQuick&#__slideshow%!__settings$-__showThumbnails#)__keepMetaData")__showMetaData!)__showMainMenu __saveAs#__clipboard __move __copy/__deletePermanent __delete __rename!__tagFaces)__showFaceTags)__playPauseAni __scale __flipV __flipH __rotate0 __rotateL __rotateR#__zoomReset%__zoomActual __zoomOut __zoomIn __quit __close /__quickNavigation %__viewerMode!__goToLast#__goToFirst'__contextMenu __prev __next)__filterImages  __openphotoqt-2.5/misc/misc.qrc000644 001750 001750 00000000305 14140671611 016004 0ustar00luspiluspi000000 000000 imageformats.db settings.db shortcuts.db contextmenu.db photoqt-2.5/misc/imageformats.db000644 001750 001750 00000130000 14140666212 017324 0ustar00luspiluspi000000 000000 SQLite format 3@  .S` R D TPH7K%indexsqlite_autoindex_imageformats_1imageformats+ %%tableimageformatsimageformatsCREATE TABLE "imageformats" ( "endings" TEXT NOT NULL UNIQUE, "mimetypes" TEXT, "description" TEXT, "category" TEXT, "enabled" INTEGER, "qt" INTEGER, "imagemagick" INTEGER, "graphicsmagick" INTEGER, "libraw" INTEGER, "poppler" INTEGER, "xcftools" INTEGER, "devil" INTEGER, "freeimage" INTEGER, "archive" INTEGER, "video" INTEGER, "im_gm_magick" TEXT, "qt_formatname" TEXT )  u3 3  O  a  R   EBz: O2&   { r i G Y b D + ?  R  7 {  s # <  | t {l s  d 3 { iS ]K? N3 ? k  _ 7 / W    /  p * 'vicar,vic,img@%rgbe,hdr,radOjxlzippdfsrw)koa,gg,gig,klaxwdphmmvg cube apnggpr!avif,avifs~ xpm,pm}pic|ico{7zzwebmyvobx ogg,ogvw mov,qtvmkvu flv,f4vtavisasframvq$Mmpeg,3g2,3gp,m2v,m4v,mp4,mpg,mpvptarorarn+cb7,cbr,cbt,cbzmvtfllbmkiffjftxiddshrw2g raw,rwlfpxnemosdmefcmdcberfa#cap,eip,liq`bay_ari^3fr]#wmf,wmz,apm\sid[rgfZrafYpfmXpesW pef,ptxVorfU nef,nrwT#srf,mrw,sr2SmpcRhrzQ  heif,heicP#jxr,hdp,wdpNgvMflifLfl32KffJdngI djvu,djvH+crw,crr,cr2,cr3GbpgFarwEaaiDwpgCwebpB viff,xvAttf?tim>,]sun,ras,sr,im1,im24,im32,im8,rast,rs,scr=rle<rla;!ptiff,ptif:!ps,ps2,ps39 pix,als8 picon7pdb6 pcd,pcds5pam4palm3p72otb1 mtv,pic0 miff,mif/mat.jng-%jbig,jbg,bie, cg3,g3+fpx*%fits,fit,fts)fig(ept'epi&dpx% dic,dcm$dib#dcx"#cut,pal,pic!'Scals,ct1,ct2,ct3,ct4,c4,cal,nif,ras 3dcr,kdc,drf,k25,dcs sct,ch,ctcgm%avs,x,mbfavsart+sfw,alb,pwm,pwpxcf xbm,bmwbmp tiff,tif+tga,icb,vda,vst svg,svgz+rgba,rgb,sgi,bw psd,psb ppm,pnmpng%pict,pct,picpgmpcx pbm ora mng kra -jpeg,jpg,jpe,jif=jpeg2000,j2k,jp2,jpc,jpxicnsgifexr'eps,epsf,epsicur bmp D e In C  V # p +   jxlimage/jxlJPEG XLimgjxl%z )   7z7z file formatpac' +   zipZIP file formatpacS  pdfapplication/pdf,application/x-pdf,application/x-bzpdf,application/x-gzpdfPDF: Adobe Portable Document Formatdoc0 = srwSamsung Raw Image Formatimg.) #   koa,gg,gig,klaKOALA filesimg7 E   xwdX Windows system window dumpimgXWD@ W   phmPortable float map format 16-bit halfimgPHM<#9   mvgimage/x-mvgMagick Vector GraphicsimgMVGN o   cubeCube Color lookup table converted to a HALD imageimgCUBEE ]   apngAPNG: Animated Portable Network GraphicsimgAPNG2 A   gprGoPro GPR Raw Image Formatimg\~!IC  avif,avifsimage/avif,image/avif-sequenceAVIF: AV1 Image File FormatimgavifE}E  xpm,pmimage/x-xpixmap,image/x-xpmiX PixMapimgXPMxpm(| '  picSoftimage PICimgpic`{WG  icoimage/vnd.microsoft.icon,image/x-iconMicrosoft Windows icon formatimgICOico!y  webmWebMvid$x % vobVideo Objectvid"w  ogg,ogvTheoravid0v 7 mov,qtQuickTime File Formatvid 3UD O  $ L K @BYc?*_-p@V,wm_  pgmimage/x-portable-greymap,image/x-portable-anymapPGM: Portable graymap format (gray scale)imgPGMpgm(3 #   palmPalm pixmapimgPALM=2 U   p7Xv Visual Schnauzer thumbnail formatimgP7,1 /   otbOn-the-air BitmapimgOTB40 7   mtv,picMTV ray tracer bitmapimgMTVE/%=   miff,mifimage/x-miffMagick image file formatimgMIFF.. 3   matMATLAB image formatimgMAT;-#7    jngvideo/x-jngJPEG Network GraphicsimgJNG~,%/    jbig,jbg,bieapplication/x-pnfJBIG: Joint Bi-level Image experts Group file interchange format (JBIG)imgJBIG0+ 1   cg3,g3FAX: CCITT Group 3imgFAXC*?+  fpxapplication/vnd.ms-officeFlashPix FormatimgFPXT)%!W    fits,fit,ftsimage/fitsFITS: Flexible Image Transport SystemimgFITS.( 3  figFIG graphics formatimgFIGi'#  eptimage/x-epsAdobe Encapsulated PostScript Interchange format with TIFF previewdocEPTa&9m  epiapplication/postscriptAdobe Encapsulated PostScript Interchange formatdocEPIE%#K   dpximage/x-dpxDigital Moving Picture ExchangeimgDPX}$O    dic,dcmapplication/dicom,image/dicom-rleDigital Imaging and Communications in Medicine (DICOM) imageimgDCM^#=c   dibimage/bmp,image/x-ms-bmpMicrosoft Windows Device-Independent bitmapimgDIBC" ]   dcxZSoft IBM PC multi-page Paintbrush imageimgDCX+!#     cut,pal,picDr. HaloimgCUT} S    cals,ct1,ct2,ct3,ct4,c4,cal,nif,rasCALS: Continuous Acquisition and Life-cycle Support Type 1 imageimgCALSH3 G   dcr,kdc,drf,k25,dcsKodak Cineon Raw Image FormatimgCIN? I   sct,ch,ctScitex Continuous Tone PictureimgSCT5 A  cgmComputer Graphics MetafileimgCGM@%/#   avs,x,mbfavsapplication/x-fptAVS X imageimgAVS- 1   artPFS: 1st PublisherimgART?+ =   sfw,alb,pwm,pwpSeattle File Works imageimgPWP1#  xcfimage/x-xcfGimp XCFimgXCFxcfDC  xbm,bmimage/x-xbitmap,image/x-xbmX BitMapimgXBMxbmB1+  wbmpimage/vnd.wap.wbmpWireless BitmapimgWBMPwbmpZ=I  tiff,tifimage/tiff,image/tiff-fxTIFF: Tagged Image File FormatimgTIFFtif^+?C  tga,icb,vda,vstimage/x-targa,image/x-tgaTGA: Truevision Targa imageimgTGAtgaM'G svg,svgzimage/svg+xmlSVG: Scalable Vector GraphicsimgSVGsvg=+!  rgba,rgb,sgi,bwimage/sgiSGI imagesimgSGIrgbJ?+  psd,psbimage/vnd.adobe.photoshopAdobe PhotoShopimgPSDpsdtkS  ppm,pnmimage/x-portable-pixmap,image/x-portable-anymapPPM: Portable pixmap format (color)imgPNMppmEI  pngimage/pngPNG: Portable Network GraphicsimgPNGpng3% )    pict,pct,picQuickDraw/PICTimgPICTY MC  pcximage/vnd.zbrush.pcx,image/x-pcxPCX: ZSoft PiCture eXchangeimgPCXpcxb ;g  pbmimage/x-portable-anymapPBM: Portable bitmap format (black and white)imgPBMpbm8 -! oraimage/openrasterOpenRasterimgORAoraM #U  mngvideo/x-mngMNG: Multiple-image Network GraphicsimgMNGmng< 3)  kraapplication/x-kritaKrita Documentimgkrai-!q  jpeg,jpg,jpe,jifimage/jpegJPEG: Joint Photographic Experts Group JFIF formatimgJPEGjpegY=G  jpeg2000,j2k,jp2,jpc,jpximage/jp2,image/jpx,image/jpmJPEG-2000imgJP2jp2- -   icnsApple Icon ImageimgicnsGM  gifimage/gifGIF: Graphics Interchange FormatimgGIFgif0# exrimage/x-exrOpenEXRimgEXRexr')E eps,epsf,epsiapplication/postscript,application/eps,application/x-eps,image/eps,image/x-epsEPS: Encapsulated PostScriptdocEPSepsT1U  curimage/x-win-bitmapCUR: Microsoft Windows cursor formatimgCURcurS=G  bmpimage/bmp,image/x-ms-bmpBMP: Microsoft Windows bitmapimgBMPbmp Bg*W L  F  Z W . V}9Np5h,e2n=ZkC>@' ;   vicar,vic,imgVICAR rasterfile formatimgVICARFO% K   rgbe,hdr,radHDR: Radiance RGBE image formatimgHDRhdr&u ) mkvMatroska Videovid't # flv,f4vFlash Videovid.s 9 aviAudio Video Interleavevid/r ;  asfAdvanced Systems Formatimg(q - amvAMV video formatvid9pM  mpeg,3g2,3gp,m2v,m4v,mp4,mpg,mpvMPEGvid'o +   tarTAR file formatpac'n +   rarRAR file formatpac6m+ 1   cb7,cbr,cbt,cbzComic book archivepac,l 5   vtfValve Texture Formatimg)k /   lbmInterlaced Bitmapimg/j ;   iffInterchange File Formatimg+i 3   ftxHeavy Metal: FAKK 2img-h 1    ddsDirectDraw SurfaceimgDDS2g A   rw2Panasonic Raw Image Formatimg2f 9   raw,rwlLeica Raw Image Formatimg1e ?   pxnLogitech Raw Image Formatimg-d 7   mosLeaf Raw Image Formatimg/c ;   mefMamiya Raw Image Formatimg5b G   mdcMinolta/Agfa Raw Image Formatimg.a 9   erfEpson Raw Image Formatimg:`# A   cap,eip,liqPhase One Raw Image Formatimg._ 9   bayCasio Raw Image Formatimg1^ ?   ariARRIFLEX Raw Image Formatimg3] C   3frHasselblad Raw Image Formatimg3\# -   wmf,wmz,apmWindows MetafileimgWMF9[ I  sidMultiresolution seamless imageimgSIDBZ [   rgfLEGO Mindstorms EV3 Robot Graphics FileimgRGF4Y ?    rafFuji CCD Raw Image FormatimgRAF-X 1    pfmPortable Float MapimgPFM3W =   pesEmbrid Embroidery FormatimgPESHV1;    pef,ptximage/x-pentax-pefPentax Raw Image FormatimgPEFUU3[    orfimage/x-olympus-orfOlympus Digital Camera Raw Image FormatimgORFHT _   nef,nrwNikon Digital SLR Camera Raw Image FormatimgNEFBS# K    srf,mrw,sr2Sony (Minolta) Raw Image FormatimgMRWDR _   mpcMagick Persistent Cache image file formatimgMPC/Q 5   hrzSlow-scan televisionimgHRZ_P7]   heif,heicimage/heic,image/heifHEIF: Apple High Efficiency Image FormatimgHEIC*N#     jxr,hdp,wdpJPEG-XRimgJXR-M 3  gvGraph VisualizationimgDOT7L A  flifFree Lossless Image FormatimgFLIFBK W   fl32FilmLight floating point image formatimgFL32'J    fffarbfeldimgFARBFELDBI [    dngAdobe Digital Negative Raw Image FormatimgDNGLH)G   djvu,djvimage/vnd.djvuDjVu digital document format imgDJVUoG+SW    crw,crr,cr2,cr3image/x-canon-crw,image/x-canon-cr2Canon Digital Camera Raw Image FormatimgCR2AFG   bpgimage/bpgBPG: Better Portable GraphicsimgBPGEE a    arwSony Digital Camera Alpha Raw Image FormatimgARW)D )   aaiAAI Dune imageimgAAI5C A   wpgWord Perfect Graphics FileimgWPGHB!G  webpimage/webpWEBP: Google web image formatimgWEBPwebpFA Y   viff,xvKhoros Visualization Image File FormatimgVIFF6?1   ttffont/sfntTrueType font fileimgTTF9> I   timPSX TIM (PlayStation Graphics)imgTIMQ=] )  sun,ras,sr,im1,im24,im32,im8,rast,rs,scrSUN RasterfileimgSUNras=< Q   rleUtah Run length encoded image fileimgRLE4; ?   rlaWavefront RLA File FormatimgRLAA:!!5   ptiff,ptifimage/tiffPyramid encoded TIFFimgPTIFV9!9K  ps,ps2,ps3application/postscriptAdobe Level III PostScript filedocPS?8 M    pix,alsAlias/Wavefront RLE image formatimgPIX87%'   piconimage/x-xpmiPersonal IconimgPICON;6 M   pdbPalm Database ImageViewer FormatimgPDB(5     pcd,pcdsPhoto CDimgPCDm4wG   pamimage/x-portable-arbitrarymap,image/x-portable-pixmapPortable Arbitrary Map formatimgPAMphotoqt-2.5/org.photoqt.PhotoQt.appdata.xml000644 001750 001750 00000011577 14165351553 021447 0ustar00luspiluspi000000 000000 org.photoqt.PhotoQt CC0-1.0 GPL-2.0+ PhotoQt Image Viewer View and manage images

PhotoQt is a fast and simple, good looking, yet powerfull and highly configureable image viewer.

It provides an uncluttered interface and can be extensively tweaked to fit ones needs perfectly. It is possible to set key or mouse shortcuts for almost any one of the features, plus for any external script/command one might want to run.

The many features provided include: thumbnails, slideshow, chromecast, zooming, rotating, flipping, displaying metadata (selection of Exif and IPTC), set-as-wallpaper, simple file management, scaling, face tags (XMP metadata), integration with many image libraries for wide support of image formats, support of touchscreens, and a lot more...

https://photoqt.org/img/appdata/appdataxml1.jpg The main window showing PhotoQt in action https://photoqt.org/img/appdata/appdataxml2.jpg Opening a new file from within PhotoQt https://photoqt.org/img/appdata/appdataxml3.jpg The settings manager, 'interface' tab https://photoqt.org/img/appdata/appdataxml4.jpg The settings manager, 'filetypes' tab https://photoqt.org https://translate.photoqt.org Lukas_at_photoqt.org Lukas Spies https://gitlab.com/luspi/photoqt/issues https://photoqt.org/about https://gitlab.com/luspi/photoqt/issues image photo viewing slideshow thumbnails lightbox picasa exiv2 libraw raw imagemagick devil face tags touchscreen chromecast none none none none none none none none none none none none none none none none none none none none
photoqt-2.5/build/000755 001750 001750 00000000000 14165364271 014520 5ustar00luspiluspi000000 000000 photoqt-2.5/INSTALL000644 001750 001750 00000000047 13233175202 014440 0ustar00luspiluspi000000 000000 See README for detailed instructions. photoqt-2.5/CMake/000755 001750 001750 00000000000 14153175146 014377 5ustar00luspiluspi000000 000000 photoqt-2.5/CMake/FindLibExiv2.cmake000644 001750 001750 00000011233 13766644610 017634 0ustar00luspiluspi000000 000000 #.rst: # FindLibExiv2 # ------------ # # Try to find the Exiv2 library. # # This will define the following variables: # # ``LibExiv2_FOUND`` # System has LibExiv2. # # ``LibExiv2_VERSION`` # The version of LibExiv2. # # ``LibExiv2_INCLUDE_DIRS`` # This should be passed to target_include_directories() if # the target is not used for linking. # # ``LibExiv2_LIBRARIES`` # The LibExiv2 library. # This can be passed to target_link_libraries() instead of # the ``LibExiv2::LibExiv2`` target # # If ``LibExiv2_FOUND`` is TRUE, the following imported target # will be available: # # ``LibExiv2::LibExiv2`` # The Exiv2 library # # Since 5.53.0. # #============================================================================= # Copyright (c) 2018, Christophe Giboudeaux, # Copyright (c) 2010, Alexander Neundorf, # Copyright (c) 2008, Gilles Caulier, # # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #============================================================================= find_package(PkgConfig QUIET) pkg_check_modules(PC_EXIV2 QUIET exiv2) find_path(LibExiv2_INCLUDE_DIRS NAMES exiv2/exif.hpp HINTS ${PC_EXIV2_INCLUDEDIR} ) find_library(LibExiv2_LIBRARIES NAMES exiv2 libexiv2 HINTS ${PC_EXIV2_LIBRARY_DIRS} ) set(LibExiv2_VERSION ${PC_EXIV2_VERSION}) if(NOT LibExiv2_VERSION AND DEFINED LibExiv2_INCLUDE_DIRS) # With exiv >= 0.27, the version #defines are in exv_conf.h instead of version.hpp foreach(_exiv2_version_file "version.hpp" "exv_conf.h") if(EXISTS "${LibExiv2_INCLUDE_DIRS}/exiv2/${_exiv2_version_file}") file(READ "${LibExiv2_INCLUDE_DIRS}/exiv2/${_exiv2_version_file}" _exiv_version_file_content) string(REGEX MATCH "#define EXIV2_MAJOR_VERSION[ ]+\\([0-9]+\\)" EXIV2_MAJOR_VERSION_MATCH ${_exiv_version_file_content}) string(REGEX MATCH "#define EXIV2_MINOR_VERSION[ ]+\\([0-9]+\\)" EXIV2_MINOR_VERSION_MATCH ${_exiv_version_file_content}) string(REGEX MATCH "#define EXIV2_PATCH_VERSION[ ]+\\([0-9]+\\)" EXIV2_PATCH_VERSION_MATCH ${_exiv_version_file_content}) if(EXIV2_MAJOR_VERSION_MATCH) string(REGEX REPLACE ".*_MAJOR_VERSION[ ]+\\((.*)\\)" "\\1" EXIV2_MAJOR_VERSION ${EXIV2_MAJOR_VERSION_MATCH}) string(REGEX REPLACE ".*_MINOR_VERSION[ ]+\\((.*)\\)" "\\1" EXIV2_MINOR_VERSION ${EXIV2_MINOR_VERSION_MATCH}) string(REGEX REPLACE ".*_PATCH_VERSION[ ]+\\((.*)\\)" "\\1" EXIV2_PATCH_VERSION ${EXIV2_PATCH_VERSION_MATCH}) endif() endif() endforeach() set(LibExiv2_VERSION "${EXIV2_MAJOR_VERSION}.${EXIV2_MINOR_VERSION}.${EXIV2_PATCH_VERSION}") endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LibExiv2 FOUND_VAR LibExiv2_FOUND REQUIRED_VARS LibExiv2_LIBRARIES LibExiv2_INCLUDE_DIRS VERSION_VAR LibExiv2_VERSION ) mark_as_advanced(LibExiv2_INCLUDE_DIRS LibExiv2_LIBRARIES) if(LibExiv2_FOUND AND NOT TARGET LibExiv2::LibExiv2) add_library(LibExiv2::LibExiv2 UNKNOWN IMPORTED) set_target_properties(LibExiv2::LibExiv2 PROPERTIES IMPORTED_LOCATION "${LibExiv2_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${LibExiv2_INCLUDE_DIRS}" ) endif() include(FeatureSummary) set_package_properties(LibExiv2 PROPERTIES URL "http://www.exiv2.org" DESCRIPTION "Image metadata support" ) photoqt-2.5/CMake/FindLibRaw.cmake000644 001750 001750 00000001043 13243067201 017347 0ustar00luspiluspi000000 000000 #-*-cmake-*- # # Test for LibRaw sources # # Once loaded this will define # EXIV2_FOUND - system has Exiv2 # EXIV2_INCLUDE_DIR - include directory for Exiv2 # SET(LIBRAW_FOUND "NO") FIND_PATH(LIBRAW_INCLUDE_DIR libraw/libraw.h "${LIBRAW_LOCATION}" "${LIBRAW_LOCATION}/include" /usr/include /usr/include/libraw /opt/local/include /opt/local/include/libraw ) IF(LIBRAW_INCLUDE_DIR) SET(LIBRAW_FOUND "YES") MESSAGE(STATUS "LibRaw found at: ${LIBRAW_INCLUDE_DIR}/libraw") ENDIF(LIBRAW_INCLUDE_DIR) ##### photoqt-2.5/CMake/FindFreeImage.cmake000644 001750 001750 00000005641 14134334414 020026 0ustar00luspiluspi000000 000000 # Find the FreeImage library. # # This module defines # FREEIMAGE_FOUND - True if FREEIMAGE was found. # FREEIMAGE_INCLUDE_DIRS - Include directories for FREEIMAGE headers. # FREEIMAGE_LIBRARIES - Libraries for FREEIMAGE. # # To specify an additional directory to search, set FREEIMAGE_ROOT. # # Copyright (c) 2010, Ewen Cheslack-Postava # Based on FindSQLite3.cmake by: # Copyright (c) 2006, Jaroslaw Staniek, # Extended by Siddhartha Chaudhuri, 2008. # # Redistribution and use is allowed according to the terms of the BSD license. # SET(FREEIMAGE_FOUND FALSE) SET(FREEIMAGE_INCLUDE_DIRS) SET(FREEIMAGE_LIBRARIES) SET(FREEIMAGE_ROOT ${FREEIMAGE_LOCATION}) SET(SEARCH_PATHS ${CMAKE_CURRENT_BINARY_DIR}/include $ENV{ProgramFiles}/freeimage/include $ENV{SystemDrive}/freeimage/include $ENV{ProgramFiles}/freeimage $ENV{SystemDrive}/freeimage ) IF(FREEIMAGE_ROOT) SET(SEARCH_PATHS ${FREEIMAGE_ROOT} ${FREEIMAGE_ROOT}/include ${SEARCH_PATHS} ) ENDIF() FIND_PATH(FREEIMAGE_INCLUDE_DIRS NAMES FreeImagePlus.h PATHS ${SEARCH_PATHS} NO_DEFAULT_PATH) IF(NOT FREEIMAGE_INCLUDE_DIRS) # now look in system locations FIND_PATH(FREEIMAGE_INCLUDE_DIRS NAMES FreeImagePlus.h) ENDIF(NOT FREEIMAGE_INCLUDE_DIRS) SET(FREEIMAGE_LIBRARY_DIRS) IF(FREEIMAGE_ROOT) SET(FREEIMAGE_LIBRARY_DIRS ${FREEIMAGE_ROOT}) IF(EXISTS "${FREEIMAGE_ROOT}/lib") SET(FREEIMAGE_LIBRARY_DIRS ${FREEIMAGE_LIBRARY_DIRS} ${FREEIMAGE_ROOT}/lib) ENDIF() IF(EXISTS "${FREEIMAGE_ROOT}/lib/static") SET(FREEIMAGE_LIBRARY_DIRS ${FREEIMAGE_LIBRARY_DIRS} ${FREEIMAGE_ROOT}/lib/static) ENDIF() ENDIF() # FREEIMAGE # Without system dirs FIND_LIBRARY(FREEIMAGE_LIBRARY NAMES freeimageplus PATHS ${FREEIMAGE_LIBRARY_DIRS} NO_DEFAULT_PATH ) FIND_LIBRARY(FREEIMAGE_C_LIBRARY NAMES freeimage PATHS ${FREEIMAGE_LIBRARY_DIRS} NO_DEFAULT_PATH ) # now look in system locations IF(NOT FREEIMAGE_LIBRARY) FIND_LIBRARY(FREEIMAGE_LIBRARY NAMES freeimageplus) ENDIF(NOT FREEIMAGE_LIBRARY) IF(NOT FREEIMAGE_C_LIBRARY) FIND_LIBRARY(FREEIMAGE_C_LIBRARY NAMES freeimage) ENDIF(NOT FREEIMAGE_C_LIBRARY) SET(FREEIMAGE_LIBRARIES) IF(FREEIMAGE_LIBRARY AND FREEIMAGE_C_LIBRARY) SET(FREEIMAGE_LIBRARIES ${FREEIMAGE_LIBRARY} ${FREEIMAGE_C_LIBRARY}) ELSEIF(FREEIMAGE_LIBRARY) SET(FREEIMAGE_LIBRARIES ${FREEIMAGE_LIBRARY}) ENDIF() IF(FREEIMAGE_INCLUDE_DIRS AND FREEIMAGE_LIBRARIES) SET(FREEIMAGE_FOUND TRUE) IF(NOT FREEIMAGE_FIND_QUIETLY) MESSAGE(STATUS "Found FreeImage: headers at ${FREEIMAGE_INCLUDE_DIRS}, libraries at ${FREEIMAGE_LIBRARY_DIRS} :: ${FREEIMAGE_LIBRARIES}") ENDIF(NOT FREEIMAGE_FIND_QUIETLY) ELSE(FREEIMAGE_INCLUDE_DIRS AND FREEIMAGE_LIBRARIES) SET(FREEIMAGE_FOUND FALSE) IF(FREEIMAGE_FIND_REQUIRED) MESSAGE(STATUS "FreeImage not found") ENDIF(FREEIMAGE_FIND_REQUIRED) ENDIF(FREEIMAGE_INCLUDE_DIRS AND FREEIMAGE_LIBRARIES) MARK_AS_ADVANCED(FREEIMAGE_INCLUDE_DIRS FREEIMAGE_LIBRARIES) photoqt-2.5/CMake/ListFilesCPlusPlus.cmake000644 001750 001750 00000003744 14153175146 021122 0ustar00luspiluspi000000 000000 ##################### #### C++ SOURCES #### ##################### SET(d "cplusplus") SET(photoqt_SOURCES ${photoqt_SOURCES} ${d}/main.cpp ${d}/logger.h ${d}/configfiles.h ${d}/keypresschecker.h ${d}/passon.h) SET(d "cplusplus/settings") SET(photoqt_SOURCES ${photoqt_SOURCES} ${d}/settings.cpp ${d}/imageformats.cpp ${d}/windowgeometry.cpp ${d}/shortcuts.cpp) SET(d "cplusplus/scripts") SET(photoqt_SOURCES ${photoqt_SOURCES} ${d}/handlingfiledialog.cpp ${d}/localisation.h ${d}/imageproperties.cpp) SET(photoqt_SOURCES ${photoqt_SOURCES} ${d}/filewatcher.cpp ${d}/handlinggeneral.cpp ${d}/handlingshortcuts.cpp) SET(photoqt_SOURCES ${photoqt_SOURCES} ${d}/handlingexternal.cpp ${d}/metadata.cpp ${d}/handlingfiledir.cpp ${d}/handlingmanipulation.cpp) SET(photoqt_SOURCES ${photoqt_SOURCES} ${d}/handlingshareimgur.cpp ${d}/replytimeout.h ${d}/simplecrypt.cpp ${d}/handlingwallpaper.cpp) SET(photoqt_SOURCES ${photoqt_SOURCES} ${d}/handlingfacetags.cpp ${d}/handlingchromecast.cpp ${d}/httpserver.cpp) SET(d "cplusplus/imageprovider") SET(photoqt_SOURCES ${photoqt_SOURCES} ${d}/imageproviderfull.cpp ${d}/imageproviderthumb.cpp ${d}/imageprovidericon.cpp ${d}/imageproviderhistogram.cpp ${d}/loadimage.h) SET(d "cplusplus/imageprovider/loader") SET(photoqt_SOURCES ${photoqt_SOURCES} ${d}/errorimage.h ${d}/loadimage_qt.h ${d}/loadimage_xcf.h ${d}/loadimage_poppler.h ${d}/loadimage_raw.h ${d}/loadimage_devil.h) SET(photoqt_SOURCES ${photoqt_SOURCES} ${d}/loadimage_freeimage.h ${d}/loadimage_archive.h ${d}/loadimage_unrar.h ${d}/loadimage_video.h ${d}/helper.h ${d}/loadimage_magick.h) SET(d "cplusplus/singleinstance") SET(photoqt_SOURCES ${photoqt_SOURCES} ${d}/commandlineparser.h ${d}/singleinstance.cpp) SET(d "cplusplus/startup") SET(photoqt_SOURCES ${photoqt_SOURCES} ${d}/startup.cpp ${d}/validate.cpp) SET(d "cplusplus/filefoldermodel") SET(photoqt_SOURCES ${photoqt_SOURCES} ${d}/filefoldermodel.cpp ${d}/filefoldermodelcache.h) SET(d "python") SET(photoqt_SOURCES ${photoqt_SOURCES} ${d}/pqpy.h) photoqt-2.5/CMake/ListFilesResources.cmake000644 001750 001750 00000000632 14145550064 021170 0ustar00luspiluspi000000 000000 # All the qml files SET(photoqt_RESOURCES ${photoqt_RESOURCES} qml/qml.qrc) # Add language resource file SET(photoqt_RESOURCES ${photoqt_RESOURCES} ${CMAKE_CURRENT_BINARY_DIR}/lang.qrc) # And the images SET(photoqt_RESOURCES ${photoqt_RESOURCES} img/img.qrc img/filetypes.qrc) # Any other file (e.g. default imageformats database) SET(photoqt_RESOURCES ${photoqt_RESOURCES} misc/misc.qrc python/python.qrc) photoqt-2.5/CMake/cmake_uninstall.cmake.in000644 001750 001750 00000002160 13233175202 021145 0ustar00luspiluspi000000 000000 if (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") cmake_policy(SET CMP0007 NEW) file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) string(REGEX REPLACE "\n" ";" files "${files}") list(REVERSE files) foreach (file ${files}) message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") if (EXISTS "$ENV{DESTDIR}${file}") execute_process( COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}" OUTPUT_VARIABLE rm_out RESULT_VARIABLE rm_retval ) if(NOT ${rm_retval} EQUAL 0) message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") endif (NOT ${rm_retval} EQUAL 0) else (EXISTS "$ENV{DESTDIR}${file}") message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") endif (EXISTS "$ENV{DESTDIR}${file}") endforeach(file) find_program(XDG xdg-desktop-menu) execute_process(COMMAND ${XDG} uninstall photoqt.desktop) photoqt-2.5/CMake/FindGraphicsMagick.cmake000644 001750 001750 00000003101 14005302106 021031 0ustar00luspiluspi000000 000000 #-*-cmake-*- # # Test for GraphicsMagick libraries, unlike CMake's FindGraphicsMagick.cmake which # tests for GraphicsMagick's binary utilities # # Once loaded this will define # MAGICK++_FOUND - system has GraphicsMagick # MAGICK++_INCLUDE_DIR - include directory for GraphicsMagick # MAGICK++_LIBRARY_DIR - library directory for GraphicsMagick # MAGICK++_LIBRARIES - libraries you need to link to # SET(MAGICK++_FOUND "NO" ) FIND_PATH(TMP_INCLUDE_DIR GraphicsMagick/Magick++.h "${MAGICK_LOCATION}" "${MAGICK_LOCATION}/Magick++" "${MAGICK_LOCATION}/GraphicsMagick" "${MAGICK_LOCATION}/include/" "${MAGICK_LOCATION}/include/Magick++" "${MAGICK_LOCATION}/include/GraphicsMagick" /usr/include/ /usr/include/Magick++ /usr/include/GraphicsMagick /opt/local/include/ /opt/local/include/Magick++ /opt/local/include/GraphicsMagick /usr/local/include /usr/local/include/Magick++ /usr/local/include/GraphicsMagick ) FIND_LIBRARY(Magick++ GraphicsMagick++ PATHS "${MAGICK_LOCATION}/.libs" "${MAGICK_LOCATION}/lib" /opt/local/lib /usr/local/lib DOC "GraphicsMagick Magick++ library" ) SET(MAGICK++_LIBRARIES ${Magick++} ) IF(TMP_INCLUDE_DIR) IF(MAGICK++_LIBRARIES) SET(MAGICK++_FOUND "YES") SET(MAGICK++_INCLUDE_DIR "${TMP_INCLUDE_DIR}/GraphicsMagick") UNSET(TMP_INCLUDE_DIR) MESSAGE(STATUS "GraphicsMagick found at: ${MAGICK++_INCLUDE_DIR}") GET_FILENAME_COMPONENT(MAGICK++_LIBRARY_DIR ${Magick++} PATH) ENDIF(MAGICK++_LIBRARIES) ENDIF(TMP_INCLUDE_DIR) ##### photoqt-2.5/CMake/ListFilesTesting.cmake000644 001750 001750 00000001216 13277000177 020632 0ustar00luspiluspi000000 000000 ##################### #### C++ SOURCES #### ##################### SET(d "cplusplus/testing") SET(photoqt_TESTING ${photoqt_TESTING} ${d}/maintest.cpp ${d}/getanddostufftest.h ${d}/getmetadatatest.h ${d}/simplecrypttest.h) SET(d "cplusplus/scripts") SET(photoqt_TESTING ${photoqt_TESTING} ${d}/getmetadata.cpp) SET(d "cplusplus/scripts/getanddostuff") SET(photoqt_TESTING ${photoqt_TESTING} ${d}/context.cpp ${d}/file.cpp ${d}/manipulation.cpp ${d}/other.cpp) SET(d "cplusplus/simplecrypt") SET(photoqt_TESTING ${photoqt_TESTING} ${d}/simplecrypt.cpp) SET(d "cplusplus/settings") SET(photoqt_TESTING ${photoqt_TESTING} ${d}/slimsettingsreadonly.cpp) photoqt-2.5/CMake/ComposeDesktopFile.cmake000644 001750 001750 00000011744 14153173205 021141 0ustar00luspiluspi000000 000000 function(composeDesktopFile) set(versions 0;1) foreach(version IN LISTS versions) if(${version} EQUAL 0) set(fname "org.photoqt.PhotoQt.desktop") set(suffix "") else() set(fname "org.photoqt.PhotoQt.standalone.desktop") set(suffix " (standalone)") endif() file(WRITE "${fname}" "[Desktop Entry]\n") file(APPEND "${fname}" "Name=PhotoQt${suffix}\n") file(APPEND "${fname}" "Name[ca]=PhotoQt${suffix}\n") file(APPEND "${fname}" "Name[cs]=PhotoQt${suffix}\n") file(APPEND "${fname}" "Name[de]=PhotoQt${suffix}\n") file(APPEND "${fname}" "Name[es]=PhotoQt${suffix}\n") file(APPEND "${fname}" "Name[fr]=PhotoQt${suffix}\n") file(APPEND "${fname}" "Name[nl]=PhotoQt${suffix}\n") file(APPEND "${fname}" "Name[sr]=ФотоQт${suffix}\n") file(APPEND "${fname}" "Name[sr@ijekavian]=ФотоQт${suffix}\n") file(APPEND "${fname}" "Name[sr@ijekavianlatin]=FotoQt${suffix}\n") file(APPEND "${fname}" "Name[sr@latin]=FotoQt${suffix}\n") file(APPEND "${fname}" "GenericName=Image Viewer${suffix}\n") file(APPEND "${fname}" "GenericName[ca]=Visor d'imatges${suffix}\n") file(APPEND "${fname}" "GenericName[cs]=Prohlížeč obrázků${suffix}\n") file(APPEND "${fname}" "GenericName[de]=Bildbetrachter${suffix}\n") file(APPEND "${fname}" "GenericName[es]=Visor de imagenes${suffix}\n") file(APPEND "${fname}" "GenericName[fr]=Visualisateur d'images${suffix}\n") file(APPEND "${fname}" "GenericName[nl]=Afbeeldingen-viewer${suffix}\n") file(APPEND "${fname}" "GenericName[sr]=Приказивач слика${suffix}\n") file(APPEND "${fname}" "GenericName[sr@ijekavian]=Приказивач слика${suffix}\n") file(APPEND "${fname}" "GenericName[sr@ijekavianlatin]=Prikazivač slika${suffix}\n") file(APPEND "${fname}" "GenericName[sr@latin]=Prikazivač slika${suffix}\n") file(APPEND "${fname}" "Comment=View and manage images${suffix}\n") file(APPEND "${fname}" "Comment[ca]=Visualitza i gestiona imatges${suffix}\n") file(APPEND "${fname}" "Comment[cs]=Prohlížet and spravovat obrázky${suffix}\n") file(APPEND "${fname}" "Comment[de]=Betrachte und manage Bilder${suffix}\n") file(APPEND "${fname}" "Comment[es]=Visualizar y gestionar imágenes${suffix}\n") file(APPEND "${fname}" "Comment[fr]=Voir et gérer des images${suffix}\n") file(APPEND "${fname}" "Comment[nl]=Bekijk en beheer afbeeldingen${suffix}\n") file(APPEND "${fname}" "Comment[sr]=Приказује и управља сликама${suffix}\n") file(APPEND "${fname}" "Comment[sr@ijekavian]=Приказује и управља сликама${suffix}\n") file(APPEND "${fname}" "Comment[sr@ijekavianlatin]=Prikazuje i upravlja slikama${suffix}\n") file(APPEND "${fname}" "Comment[sr@latin]=Prikazuje i upravlja slikama${suffix}\n") if(${version} EQUAL 0) file(APPEND "${fname}" "Exec=photoqt %f\n") else() file(APPEND "${fname}" "Exec=photoqt --standalone %f\n") endif() file(APPEND "${fname}" "Icon=photoqt\n") file(APPEND "${fname}" "Type=Application\n") file(APPEND "${fname}" "Terminal=false\n") file(APPEND "${fname}" "Categories=Graphics;Viewer;\n") # add the mimetypes set(MIMETYPE "image/avif;image/avif-sequence;application/x-fpt;image/bmp;image/x-ms-bmp;") set(MIMETYPE "${MIMETYPE}image/bpg;image/x-canon-crw;image/x-canon-cr2;image/x-win-bitmap;application/dicom;") set(MIMETYPE "${MIMETYPE}image/dicom-rle;image/vnd.djvu;image/x-dpx;application/postscript;application/eps;") set(MIMETYPE "${MIMETYPE}application/x-eps;image/eps;image/x-eps;image/x-exr;image/fits;") set(MIMETYPE "${MIMETYPE}application/vnd.ms-office;image/gif;image/heic;image/heif;image/vnd.microsoft.icon;") set(MIMETYPE "${MIMETYPE}image/x-icon;application/x-pnf;video/x-jng;image/jpeg;image/jp2;") set(MIMETYPE "${MIMETYPE}image/jpx;image/jpm;image/jxl;application/x-krita;image/x-miff;") set(MIMETYPE "${MIMETYPE}video/x-mng;image/x-mvg;image/openraster;image/x-olympus-orf;image/x-portable-arbitrarymap;") set(MIMETYPE "${MIMETYPE}image/x-portable-pixmap;image/x-portable-anymap;image/vnd.zbrush.pcx;image/x-pcx;application/pdf;") set(MIMETYPE "${MIMETYPE}application/x-pdf;application/x-bzpdf;application/x-gzpdf;image/x-pentax-pef;image/x-portable-greymap;") set(MIMETYPE "${MIMETYPE}image/x-xpmi;image/png;image/vnd.adobe.photoshop;image/tiff;image/sgi;") set(MIMETYPE "${MIMETYPE}image/svg+xml;image/x-targa;image/x-tga;image/tiff-fx;font/sfnt;") set(MIMETYPE "${MIMETYPE}image/vnd.wap.wbmp;image/webp;image/x-xbitmap;image/x-xbm;image/x-xcf;") set(MIMETYPE "${MIMETYPE}image/x-xpixmap;") file(APPEND "${fname}" "MimeType=${MIMETYPE}") endforeach() endfunction() photoqt-2.5/CMake/ComposeLangResourceFile.cmake000644 001750 001750 00000001117 13766352720 022124 0ustar00luspiluspi000000 000000 function(composeLangResourceFile) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/lang.qrc "\n") file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/lang.qrc " \n") file(GLOB files ${CMAKE_CURRENT_BINARY_DIR}/photoqt_*.ts) foreach(file ${files}) get_filename_component(qmfile ${file} NAME_WE) file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/lang.qrc " ${qmfile}.qm\n") endforeach() file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/lang.qrc " \n") file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/lang.qrc "\n") endfunction() photoqt-2.5/windowsicons.rc000644 001750 001750 00000037136 14134371434 016502 0ustar00luspiluspi000000 000000 IDI_ICON1 ICON DISCARDABLE "windows/icon.ico" 2 ICON DISCARDABLE "img/filetypes/3fr.ico" 3 ICON DISCARDABLE "img/filetypes/7z.ico" 4 ICON DISCARDABLE "img/filetypes/aai.ico" 5 ICON DISCARDABLE "img/filetypes/amv.ico" 6 ICON DISCARDABLE "img/filetypes/apng.ico" 7 ICON DISCARDABLE "img/filetypes/ari.ico" 8 ICON DISCARDABLE "img/filetypes/art.ico" 9 ICON DISCARDABLE "img/filetypes/arw.ico" 10 ICON DISCARDABLE "img/filetypes/asf.ico" 11 ICON DISCARDABLE "img/filetypes/avi.ico" 12 ICON DISCARDABLE "img/filetypes/avif.ico" 13 ICON DISCARDABLE "img/filetypes/avifs.ico" 14 ICON DISCARDABLE "img/filetypes/avs.ico" 15 ICON DISCARDABLE "img/filetypes/x.ico" 16 ICON DISCARDABLE "img/filetypes/mbfavs.ico" 17 ICON DISCARDABLE "img/filetypes/bay.ico" 18 ICON DISCARDABLE "img/filetypes/bmp.ico" 19 ICON DISCARDABLE "img/filetypes/bpg.ico" 20 ICON DISCARDABLE "img/filetypes/cals.ico" 21 ICON DISCARDABLE "img/filetypes/ct1.ico" 22 ICON DISCARDABLE "img/filetypes/ct2.ico" 23 ICON DISCARDABLE "img/filetypes/ct3.ico" 24 ICON DISCARDABLE "img/filetypes/ct4.ico" 25 ICON DISCARDABLE "img/filetypes/c4.ico" 26 ICON DISCARDABLE "img/filetypes/cal.ico" 27 ICON DISCARDABLE "img/filetypes/nif.ico" 28 ICON DISCARDABLE "img/filetypes/ras.ico" 29 ICON DISCARDABLE "img/filetypes/cap.ico" 30 ICON DISCARDABLE "img/filetypes/eip.ico" 31 ICON DISCARDABLE "img/filetypes/liq.ico" 32 ICON DISCARDABLE "img/filetypes/cb7.ico" 33 ICON DISCARDABLE "img/filetypes/cbr.ico" 34 ICON DISCARDABLE "img/filetypes/cbt.ico" 35 ICON DISCARDABLE "img/filetypes/cbz.ico" 36 ICON DISCARDABLE "img/filetypes/cg3.ico" 37 ICON DISCARDABLE "img/filetypes/g3.ico" 38 ICON DISCARDABLE "img/filetypes/cgm.ico" 39 ICON DISCARDABLE "img/filetypes/crw.ico" 40 ICON DISCARDABLE "img/filetypes/crr.ico" 41 ICON DISCARDABLE "img/filetypes/cr2.ico" 42 ICON DISCARDABLE "img/filetypes/cr3.ico" 43 ICON DISCARDABLE "img/filetypes/cube.ico" 44 ICON DISCARDABLE "img/filetypes/cur.ico" 45 ICON DISCARDABLE "img/filetypes/cut.ico" 46 ICON DISCARDABLE "img/filetypes/pal.ico" 47 ICON DISCARDABLE "img/filetypes/pic.ico" 48 ICON DISCARDABLE "img/filetypes/dcr.ico" 49 ICON DISCARDABLE "img/filetypes/kdc.ico" 50 ICON DISCARDABLE "img/filetypes/drf.ico" 51 ICON DISCARDABLE "img/filetypes/k25.ico" 52 ICON DISCARDABLE "img/filetypes/dcs.ico" 53 ICON DISCARDABLE "img/filetypes/dcx.ico" 54 ICON DISCARDABLE "img/filetypes/dds.ico" 55 ICON DISCARDABLE "img/filetypes/dib.ico" 56 ICON DISCARDABLE "img/filetypes/dic.ico" 57 ICON DISCARDABLE "img/filetypes/dcm.ico" 58 ICON DISCARDABLE "img/filetypes/djvu.ico" 59 ICON DISCARDABLE "img/filetypes/djv.ico" 60 ICON DISCARDABLE "img/filetypes/dng.ico" 61 ICON DISCARDABLE "img/filetypes/dpx.ico" 62 ICON DISCARDABLE "img/filetypes/epi.ico" 63 ICON DISCARDABLE "img/filetypes/eps.ico" 64 ICON DISCARDABLE "img/filetypes/epsf.ico" 65 ICON DISCARDABLE "img/filetypes/epsi.ico" 66 ICON DISCARDABLE "img/filetypes/ept.ico" 67 ICON DISCARDABLE "img/filetypes/erf.ico" 68 ICON DISCARDABLE "img/filetypes/exr.ico" 69 ICON DISCARDABLE "img/filetypes/ff.ico" 70 ICON DISCARDABLE "img/filetypes/fig.ico" 71 ICON DISCARDABLE "img/filetypes/fits.ico" 72 ICON DISCARDABLE "img/filetypes/fit.ico" 73 ICON DISCARDABLE "img/filetypes/fts.ico" 74 ICON DISCARDABLE "img/filetypes/fl32.ico" 75 ICON DISCARDABLE "img/filetypes/flif.ico" 76 ICON DISCARDABLE "img/filetypes/flv.ico" 77 ICON DISCARDABLE "img/filetypes/f4v.ico" 78 ICON DISCARDABLE "img/filetypes/fpx.ico" 79 ICON DISCARDABLE "img/filetypes/ftx.ico" 80 ICON DISCARDABLE "img/filetypes/gif.ico" 81 ICON DISCARDABLE "img/filetypes/gpr.ico" 82 ICON DISCARDABLE "img/filetypes/gv.ico" 83 ICON DISCARDABLE "img/filetypes/heif.ico" 84 ICON DISCARDABLE "img/filetypes/heic.ico" 85 ICON DISCARDABLE "img/filetypes/hrz.ico" 86 ICON DISCARDABLE "img/filetypes/icns.ico" 87 ICON DISCARDABLE "img/filetypes/ico.ico" 88 ICON DISCARDABLE "img/filetypes/iff.ico" 89 ICON DISCARDABLE "img/filetypes/jbig.ico" 90 ICON DISCARDABLE "img/filetypes/jbg.ico" 91 ICON DISCARDABLE "img/filetypes/bie.ico" 92 ICON DISCARDABLE "img/filetypes/jng.ico" 93 ICON DISCARDABLE "img/filetypes/jpeg.ico" 94 ICON DISCARDABLE "img/filetypes/jpg.ico" 95 ICON DISCARDABLE "img/filetypes/jpe.ico" 96 ICON DISCARDABLE "img/filetypes/jif.ico" 97 ICON DISCARDABLE "img/filetypes/jpeg2000.ico" 98 ICON DISCARDABLE "img/filetypes/j2k.ico" 99 ICON DISCARDABLE "img/filetypes/jp2.ico" 100 ICON DISCARDABLE "img/filetypes/jpc.ico" 101 ICON DISCARDABLE "img/filetypes/jpx.ico" 102 ICON DISCARDABLE "img/filetypes/jxl.ico" 103 ICON DISCARDABLE "img/filetypes/jxr.ico" 104 ICON DISCARDABLE "img/filetypes/hdp.ico" 105 ICON DISCARDABLE "img/filetypes/wdp.ico" 106 ICON DISCARDABLE "img/filetypes/koa.ico" 107 ICON DISCARDABLE "img/filetypes/gg.ico" 108 ICON DISCARDABLE "img/filetypes/gig.ico" 109 ICON DISCARDABLE "img/filetypes/kla.ico" 110 ICON DISCARDABLE "img/filetypes/kra.ico" 111 ICON DISCARDABLE "img/filetypes/lbm.ico" 112 ICON DISCARDABLE "img/filetypes/mat.ico" 113 ICON DISCARDABLE "img/filetypes/mdc.ico" 114 ICON DISCARDABLE "img/filetypes/mef.ico" 115 ICON DISCARDABLE "img/filetypes/miff.ico" 116 ICON DISCARDABLE "img/filetypes/mif.ico" 117 ICON DISCARDABLE "img/filetypes/mkv.ico" 118 ICON DISCARDABLE "img/filetypes/mng.ico" 119 ICON DISCARDABLE "img/filetypes/mos.ico" 120 ICON DISCARDABLE "img/filetypes/mov.ico" 121 ICON DISCARDABLE "img/filetypes/qt.ico" 122 ICON DISCARDABLE "img/filetypes/mpc.ico" 123 ICON DISCARDABLE "img/filetypes/mpeg.ico" 124 ICON DISCARDABLE "img/filetypes/3g2.ico" 125 ICON DISCARDABLE "img/filetypes/3gp.ico" 126 ICON DISCARDABLE "img/filetypes/m2v.ico" 127 ICON DISCARDABLE "img/filetypes/m4v.ico" 128 ICON DISCARDABLE "img/filetypes/mp4.ico" 129 ICON DISCARDABLE "img/filetypes/mpg.ico" 130 ICON DISCARDABLE "img/filetypes/mpv.ico" 131 ICON DISCARDABLE "img/filetypes/mtv.ico" 132 ICON DISCARDABLE "img/filetypes/pic.ico" 133 ICON DISCARDABLE "img/filetypes/mvg.ico" 134 ICON DISCARDABLE "img/filetypes/nef.ico" 135 ICON DISCARDABLE "img/filetypes/nrw.ico" 136 ICON DISCARDABLE "img/filetypes/ogg.ico" 137 ICON DISCARDABLE "img/filetypes/ogv.ico" 138 ICON DISCARDABLE "img/filetypes/ora.ico" 139 ICON DISCARDABLE "img/filetypes/orf.ico" 140 ICON DISCARDABLE "img/filetypes/otb.ico" 141 ICON DISCARDABLE "img/filetypes/p7.ico" 142 ICON DISCARDABLE "img/filetypes/palm.ico" 143 ICON DISCARDABLE "img/filetypes/pam.ico" 144 ICON DISCARDABLE "img/filetypes/pbm.ico" 145 ICON DISCARDABLE "img/filetypes/pcd.ico" 146 ICON DISCARDABLE "img/filetypes/pcds.ico" 147 ICON DISCARDABLE "img/filetypes/pcx.ico" 148 ICON DISCARDABLE "img/filetypes/pdb.ico" 149 ICON DISCARDABLE "img/filetypes/pdf.ico" 150 ICON DISCARDABLE "img/filetypes/pef.ico" 151 ICON DISCARDABLE "img/filetypes/ptx.ico" 152 ICON DISCARDABLE "img/filetypes/pes.ico" 153 ICON DISCARDABLE "img/filetypes/pfm.ico" 154 ICON DISCARDABLE "img/filetypes/pgm.ico" 155 ICON DISCARDABLE "img/filetypes/phm.ico" 156 ICON DISCARDABLE "img/filetypes/pic.ico" 157 ICON DISCARDABLE "img/filetypes/picon.ico" 158 ICON DISCARDABLE "img/filetypes/pict.ico" 159 ICON DISCARDABLE "img/filetypes/pct.ico" 160 ICON DISCARDABLE "img/filetypes/pic.ico" 161 ICON DISCARDABLE "img/filetypes/pix.ico" 162 ICON DISCARDABLE "img/filetypes/als.ico" 163 ICON DISCARDABLE "img/filetypes/png.ico" 164 ICON DISCARDABLE "img/filetypes/ppm.ico" 165 ICON DISCARDABLE "img/filetypes/pnm.ico" 166 ICON DISCARDABLE "img/filetypes/ps.ico" 167 ICON DISCARDABLE "img/filetypes/ps2.ico" 168 ICON DISCARDABLE "img/filetypes/ps3.ico" 169 ICON DISCARDABLE "img/filetypes/psd.ico" 170 ICON DISCARDABLE "img/filetypes/psb.ico" 171 ICON DISCARDABLE "img/filetypes/ptiff.ico" 172 ICON DISCARDABLE "img/filetypes/ptif.ico" 173 ICON DISCARDABLE "img/filetypes/pxn.ico" 174 ICON DISCARDABLE "img/filetypes/raf.ico" 175 ICON DISCARDABLE "img/filetypes/rar.ico" 176 ICON DISCARDABLE "img/filetypes/raw.ico" 177 ICON DISCARDABLE "img/filetypes/rwl.ico" 178 ICON DISCARDABLE "img/filetypes/rgba.ico" 179 ICON DISCARDABLE "img/filetypes/rgb.ico" 180 ICON DISCARDABLE "img/filetypes/sgi.ico" 181 ICON DISCARDABLE "img/filetypes/bw.ico" 182 ICON DISCARDABLE "img/filetypes/rgbe.ico" 183 ICON DISCARDABLE "img/filetypes/hdr.ico" 184 ICON DISCARDABLE "img/filetypes/rad.ico" 185 ICON DISCARDABLE "img/filetypes/rgf.ico" 186 ICON DISCARDABLE "img/filetypes/rla.ico" 187 ICON DISCARDABLE "img/filetypes/rle.ico" 188 ICON DISCARDABLE "img/filetypes/rw2.ico" 189 ICON DISCARDABLE "img/filetypes/sct.ico" 190 ICON DISCARDABLE "img/filetypes/ch.ico" 191 ICON DISCARDABLE "img/filetypes/ct.ico" 192 ICON DISCARDABLE "img/filetypes/sfw.ico" 193 ICON DISCARDABLE "img/filetypes/alb.ico" 194 ICON DISCARDABLE "img/filetypes/pwm.ico" 195 ICON DISCARDABLE "img/filetypes/pwp.ico" 196 ICON DISCARDABLE "img/filetypes/sid.ico" 197 ICON DISCARDABLE "img/filetypes/srf.ico" 198 ICON DISCARDABLE "img/filetypes/mrw.ico" 199 ICON DISCARDABLE "img/filetypes/sr2.ico" 200 ICON DISCARDABLE "img/filetypes/srw.ico" 201 ICON DISCARDABLE "img/filetypes/sun.ico" 202 ICON DISCARDABLE "img/filetypes/ras.ico" 203 ICON DISCARDABLE "img/filetypes/sr.ico" 204 ICON DISCARDABLE "img/filetypes/im1.ico" 205 ICON DISCARDABLE "img/filetypes/im24.ico" 206 ICON DISCARDABLE "img/filetypes/im32.ico" 207 ICON DISCARDABLE "img/filetypes/im8.ico" 208 ICON DISCARDABLE "img/filetypes/rast.ico" 209 ICON DISCARDABLE "img/filetypes/rs.ico" 210 ICON DISCARDABLE "img/filetypes/scr.ico" 211 ICON DISCARDABLE "img/filetypes/svg.ico" 212 ICON DISCARDABLE "img/filetypes/svgz.ico" 213 ICON DISCARDABLE "img/filetypes/tar.ico" 214 ICON DISCARDABLE "img/filetypes/tga.ico" 215 ICON DISCARDABLE "img/filetypes/icb.ico" 216 ICON DISCARDABLE "img/filetypes/vda.ico" 217 ICON DISCARDABLE "img/filetypes/vst.ico" 218 ICON DISCARDABLE "img/filetypes/tiff.ico" 219 ICON DISCARDABLE "img/filetypes/tif.ico" 220 ICON DISCARDABLE "img/filetypes/tim.ico" 221 ICON DISCARDABLE "img/filetypes/ttf.ico" 222 ICON DISCARDABLE "img/filetypes/vicar.ico" 223 ICON DISCARDABLE "img/filetypes/vic.ico" 224 ICON DISCARDABLE "img/filetypes/img.ico" 225 ICON DISCARDABLE "img/filetypes/viff.ico" 226 ICON DISCARDABLE "img/filetypes/xv.ico" 227 ICON DISCARDABLE "img/filetypes/vob.ico" 228 ICON DISCARDABLE "img/filetypes/vtf.ico" 229 ICON DISCARDABLE "img/filetypes/wbmp.ico" 230 ICON DISCARDABLE "img/filetypes/webm.ico" 231 ICON DISCARDABLE "img/filetypes/webp.ico" 232 ICON DISCARDABLE "img/filetypes/wmf.ico" 233 ICON DISCARDABLE "img/filetypes/wmz.ico" 234 ICON DISCARDABLE "img/filetypes/apm.ico" 235 ICON DISCARDABLE "img/filetypes/wpg.ico" 236 ICON DISCARDABLE "img/filetypes/xbm.ico" 237 ICON DISCARDABLE "img/filetypes/bm.ico" 238 ICON DISCARDABLE "img/filetypes/xcf.ico" 239 ICON DISCARDABLE "img/filetypes/xpm.ico" 240 ICON DISCARDABLE "img/filetypes/pm.ico" 241 ICON DISCARDABLE "img/filetypes/xwd.ico" 242 ICON DISCARDABLE "img/filetypes/zip.ico" 243 ICON DISCARDABLE "img/filetypes/unknown.ico" photoqt-2.5/lang/000755 001750 001750 00000000000 14165363700 014336 5ustar00luspiluspi000000 000000 photoqt-2.5/lang/photoqt_pl_PL.ts000644 001750 001750 00000646323 14165351632 017511 0ustar00luspiluspi000000 000000 MainMenu Settings This is an entry in the main menu on the right. Please keep short! Ustawienia Slideshow This is an entry in the main menu on the right. Please keep short! Pokaz slajdów setup This is an entry in the main menu on the right, used as in: setting up a slideshow. Please keep short! ustawienia quickstart This is an entry in the main menu on the right, used as in: quickstarting a slideshow. Please keep short! szybki start Face tagging mode This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Tryb wykrywania twarzy About PhotoQt This is an entry in the main menu on the right. Please keep short! O programie Quit This is an entry in the main menu on the right. Please keep short! Zamknij Filter images in folder This is an entry in the main menu on the right. Please keep short! Filter images in folder Show/Hide metadata This is an entry in the main menu on the right. Please keep short! Show/Hide metadata Scale image This is an entry in the main menu on the right. Please keep short! Scale image Go to This is an entry in the main menu on the right, used as in: Go To some image. Please keep short! Idź do previous This is an entry in the main menu on the right, used as in: go to previous image. Please keep short! poprzedni next This is an entry in the main menu on the right, used as in: go to next image. Please keep short! następny first This is an entry in the main menu on the right, used as in: go to first image. Please keep short! pierwszy last This is an entry in the main menu on the right, used as in: go to last image. Please keep short! ostatni Zoom This is an entry in the context menu, used as in: Zoom image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Zoom image. Please keep short! Powiększenie reset This is an entry in the context menu, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the context menu, used as in: Reset flip/mirror of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset flip/mirror of image. Please keep short! wyzeruj Rotate This is an entry in the context menu, used as in: Rotate image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image. Please keep short! Obróć Click and drag to resize main menu Kliknij i przeciągnij, aby zmienić rozmiar głównego menu Wallpaper This is an entry in the main menu on the right. Please keep short! Tapeta Open file (browse images) This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Open file (browse images) left This is an entry in the context menu, used as in: Rotate image left. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image left. Please keep short! w lewo right This is an entry in the context menu, used as in: Rotate image right. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image right. Please keep short! w prawo Flip This is an entry in the context menu, used as in: Flip/Mirror image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image. Please keep short! Odbij horizontal This is an entry in the context menu, used as in: Flip/Mirror image horizontally. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image horizontally. Please keep short! poziomo vertical This is an entry in the context menu, used as in: Flip/Mirror image vertically. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image vertically. Please keep short! pionowo File This is an entry in the context menu, used to refer to the current file (specifically the file, not directly the image). Please keep short! ---------- This is an entry in the main menu on the right, used to refer to the current file (specifically the file, not directly the image). Please keep short! Plik rename This is an entry in the context menu, used as in: rename file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: rename file. Please keep short! zmień nazwę copy This is an entry in the context menu, used as in: copy file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: copy file. Please keep short! kopiuj move This is an entry in the context menu, used as in: move file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: move file. Please keep short! przenieś delete This is an entry in the context menu, used as in: delete file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: delete file. Please keep short! usuń Streaming (Chromecast) This is an entry in the context menu, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! ---------- This is an entry in the main menu on the right, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! Streaming (Chromecast) Copy to clipboard This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Copy to clipboard Show/Hide histogram This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Show/Hide histogram Open in default file manager This is an entry in the main menu on the right. Please keep short! Otwórz w domyślnym eksploratorze plików Show log/debug messages This is an entry in the main menu on the right. Please keep short! Show log/debug messages Main Menu This is the heading of the main menu element ---------- Window title Główne menu Click here to go to the online manual for help regarding shortcuts, settings, features, ... Kliknij tu, by przejść do pomocy online dotyczącej skrótów, ustawień, funkcji... PQImageFormats ERROR getting default image formats This is the window title of an error message box Błąd wczytywania domyślnych formatów obrazów I tried hard, but I just cannot open even a read-only version of the database of default image formats. Niestety, ale nie można było otworzyć bazy danych formatów obrazów nawet w wersji Tylko do odczytu. Something went terribly wrong somewhere! Gdzieś wystąpił jakiś krytyczny błąd! I tried hard, but I just cannot open the database of default image formats. Niestety, ale nie można było otworzyć bazy danych domyślnych formatów obrazów. PQMetaData yes This string identifies that flash was fired, stored in image metadata tak no This string identifies that flash was not fired, stored in image metadata nie No flash function This string refers to the absense of a flash, stored in image metadata Brak funkcji lampy błyskowej strobe return light not detected This string refers to a flash mode, stored in image metadata stroboskop nie wykryty strobe return light detected This string refers to a flash mode, stored in image metadata stroboskop wykryty compulsory flash mode This string refers to a flash mode, stored in image metadata obowiązkowa lampa błyskowa auto mode This string refers to a flash mode, stored in image metadata tryb automatyczny red-eye reduction mode This string refers to a flash mode, stored in image metadata tryb redukcji czerwonych oczu return light detected This string refers to a flash mode, stored in image metadata światło zwrotne nie wykryte return light not detected This string refers to a flash mode, stored in image metadata światło zwrotne wykryte Invalid flash This string refers to a flash mode, stored in image metadata Nieprawidłowa lampa błyskowa Standard This string refers to a type of scene, stored in image metadata Standardowy Landscape This string refers to a type of scene, stored in image metadata Poziomo Portrait This string refers to a type of scene, stored in image metadata Pionowo Night Scene This string refers to a type of scene, stored in image metadata Tryb nocny Invalid Scene Type This string refers to a type of scene, stored in image metadata Nieprawidłowy tryb Unknown This string refers to the light source stored in image metadata Nieznane Daylight This string refers to the light source stored in image metadata Światło dzienne Fluorescent This string refers to the light source stored in image metadata Świetlówka Tungsten (incandescent light) This string refers to the light source stored in image metadata Wolfram (żarówka) Flash This string refers to the light source stored in image metadata Lampa błyskowa Fine weather This string refers to the light source stored in image metadata Normalna pogoda Cloudy Weather This string refers to the light source stored in image metadata Zachmurzenie Shade This string refers to the light source stored in image metadata Cień Daylight fluorescent This string refers to the light source stored in image metadata Świetlówka światło dzienne Day white fluorescent This string refers to the light source stored in image metadata Dzienna biała świetlówka Cool white fluorescent This string refers to the light source stored in image metadata Zimna biała świetlówka White fluorescent This string refers to the light source stored in image metadata Biała świetlówka Standard light This string refers to the light source stored in image metadata Światło standardowe Other light source This string refers to the light source stored in image metadata Inne źródło światła Invalid light source This string refers to the light source stored in image metadata Nieprawidłowe źródło światła PQSettings ERROR getting database with default settings This is the window title of an error message box ERROR getting database with default settings I tried hard, but I just cannot open even a read-only version of the settings database. I tried hard, but I just cannot open even a read-only version of the settings database. Something went terribly wrong somewhere! Something went terribly wrong somewhere! ERROR opening database with default settings ERROR opening database with default settings I tried hard, but I just cannot open the database of default settings. I tried hard, but I just cannot open the database of default settings. PQShortcuts ERROR getting database with default shortcuts This is the window title of an error message box ERROR getting database with default shortcuts I tried hard, but I just cannot open even a read-only version of the shortcuts database. I tried hard, but I just cannot open even a read-only version of the shortcuts database. Something went terribly wrong somewhere! Something went terribly wrong somewhere! ERROR opening database with default settings ERROR opening database with default settings I tried hard, but I just cannot open the database of default shortcuts. I tried hard, but I just cannot open the database of default shortcuts. PQStartup SQLite error This is the window title of an error message box SQLite error You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! TabShortcuts about Close Zamknij Current version: Bieżąca wersja: License: Licencja: Open license Wyświetl licencję Website: Strona internetowa: Open website Wyświetl stronę Contact: Kontakt: Send an email Wyślij e-mail About Window title Informacje buttongeneric Ok This is a generic string written on clickable buttons - please keep short! Ok Cancel This is a generic string written on clickable buttons - please keep short! Anuluj Save This is a generic string written on clickable buttons - please keep short! Zapisz Close This is a generic string written on clickable buttons - please keep short! Zamknij commandlineparser Image Viewer Przeglądarka obrazów Image file to open. Plik obrazu do otwarcia. Make PhotoQt ask for a new file. Niech PhotoQt pyta o nowy plik. Shows PhotoQt from system tray. Wyświetlanie PhotoQt w obszarze powiadomień. Hides PhotoQt to system tray. Command line option Minimalizowanie PhotoQt do obszaru powiadomień. Show/Hide PhotoQt. Pokaż/Ukryj PhotoQt. Enable thumbnails. Command line option Włącz miniaturki. Disable thumbnails. Command line option Wyłącz miniaturki. Enable system tray icon. Command line option Włącz ikonę na pasku zadań. Disable system tray icon. Command line option Wyłącz ikonę na pasku zadań. Start PhotoQt hidden to the system tray. Command line option Uruchamianie PhotoQt zminimalizowane do obszaru powiadomień. Open standalone PhotoQt, allows for multiple instances but without remote interaction. Command line option Otwórz autonomiczny klient PhotoQt, umożliwia wykorzystanie wielu instancji, ale bez interakcji zdalnych. Simulate a shortcut sequence Command line option Symulacja sekwencji skrótów Switch on debug messages. Command line option Włącz komunikaty debugowania. Switch off debug messages. Command line option Wyłącz komunikaty debugowania. Export configuration to given filename. Command line option Eksportuj ustawienia do określonego pliku. filename Command line option filename Import configuration from given filename. Command line option Importuj ustawienia z określonego pliku. Check the configuration and correct any detected issues. Command line option Check the configuration and correct any detected issues. Reset default configuration. Command line option Reset default configuration. facetagging Who is this? This question is asked in the face tagger to ask for the name of a tagged face Kto to jest? Enter name Wprowadź imię Click to exit face tagging mode Kliknij, aby opuścić tryb wykrywania twarzy Click to tag faces, changes are saved automatically Kliknij, aby wykryć twarze, zmiany są zapisywane automatycznie File type does not support face tags. Typ pliku nie wspiera wykrywania twarzy. filedialog Backwards Do tyłu Up a level Poziom wyżej Forwards Do przodu List subfolders Podfoldery Enter fullscreen Włącz tryb pełnoekranowy Exit fullscreen Wyłącz tryb pełnoekranowy Close Zamknij Storage devices This is the category title of storage devices to open (like USB keys) in the element for opening files Urządzenia pamięci masowej Detected storage devices on your system Urządzenia pamięci masowej wykryte w Twoim urządzeniu no supported files/folders found nie znaleziono wspieranych plików/folderów Click and drag to favorites Kliknij i przeciągnij do ulubionych # images # obrazów Date: Data: Time: Czas: File size: Rozmiar pliku: File type: Rodzaj pliku: %1 image %1 obraz %1 images %1 obrazów no folder added to favorites yet 'favorites' here refers to the list of favorite folders a user can set in the file dialog nie dodano jeszcze folderu do ulubionych Favorites This is the category title of user-set folders (or favorites) in the file dialog Ulubione Your favorites Twoje ulubione Show entry Pokaż pozycję Hide entry Ukryj pozycję Remove entry Usuń pozycję Hide hidden entries Ukryj ukryte pozycje Show hidden entries Pokaż ukryte pozycje Load this folder Wczytaj ten folder Load this file Wczytaj ten plik Add to Favorites Dodaj do ulubionych Hide hidden files Ukryj ukryte pliki Show hidden files Pokaż ukryte pliki Hide thumbnails Ukryj miniatury Show thumbnails Pokaż miniatury Hide preview Ukryj podgląd Show preview Pokaż podgląd Standard This is the category title of user-set folders (or favorites) in the file dialog Standardowe Some standard locations Kilka standardowych lokalizacji Zoom: Powiększenie: Adjust font size of files and folders Dostosuj rozmiar czcionki dla plików oraz folderów Zoom factor: Poziom powiększenia: Sort by: Sortuj według: Name Nazwa Natural Name Nazwa macierzysta Time modified Data modyfikacji File size Rozmiar pliku File type Rodzaj pliku reverse order odwrotna kolejność Choose by what to sort the files Wybierz sposób sortowania plików All supported images Wszystkie wspierane obrazy Video files Pliki wideo All files Wszystkie pliki Choose which selection of files to show Określ, które pliki chcesz wyświetlić Remember loaded folder between sessions. Zapamiętaj załadowany folder między sesjami. Switch between list and icon view Przełącz pomiędzy widokiem listy lub ikon Hide standard locations Ukryj standardowe lokalizacje Show standard locations Pokaż standardowe lokalizacje Hide favorite locations Ukryj ulubione lokalizacje Show favorite locations Pokaż ulubione lokalizacje Hide storage devices Ukryj urządzenia pamięci masowej Show storage devices Pokaż urządzenia pamięci masowej File dialog Window title Okno dialogowe pliku filemanagement Delete file? Window title Usunąć plik? An error occured, file could not be deleted! Wystąpił błąd, plik nie może zostać usunięty! Move to trash Przenieś do kosza Delete permanently Usuń na zawsze Rename file Window title Zmień nazwę pliku An error occured, file could not be renamed! Wystąpił błąd, nazwa pliku nie może zostać zmieniona! Enter new filename Wprowadź nową nazwę pliku Save file as This is a title, similar to all the 'save as' options in many programs. ---------- Window title Zapisz plik jako An error occured, file could not be saved! Wystąpił błąd i nie można było zapisać pliku! Operation cancelled 'Operation' here is the operation of saving an image in a new format Operacja anulowana Filter formats This is a short hint informing the user that here they can 'filter all the possible file formats' Filtruj formaty New filename Nowa nazwa pliku Choose location and save file Wybierz lokalizację i zapisz plik filter Filter images in current directory Filtruj obrazy w bieżącym katalogu Enter here the terms you want to filter the images by. Separate multiple terms by a space. Wprowadź opcje dla filtrowania obrazów. Oddziel różne określenia stosując odstęp. If you want to filter by file extension, start the term with a dot. Jeśli chcesz użyć filtrowania według typu plików, rozpocznij określenie od kropki. Enter filter term Wprowadź określenie filtra Filter Written on a clickable button - please keep short ---------- Window title Filtruj Remove filter Written on a clickable button - please keep short Usuń filtr histogram Histogram Window title Histogram Loading... As in: Loading the histogram for the current image Wczytywanie... Click-and-drag to move. Used for the histogram. The version refers to the type of histogram that is available (colored and greyscale) Kliknij i przeciągnij, aby przenieść. Right click to switch version. Zmień wersję prawym przyciskiem myszy. imageprovider File failed to load, it does not exist! Błąd wczytywania pliku, plik nie istnieje! imgur Upload to imgur.com Window title Prześlij do imgur.com anonymous Used as in: Upload image as anonymous user anonimowo Obtaining image url... Uzyskiwanie adresu url... This seems to take a long time... Zajmuje to dłużej niż zwykle... There might be a problem with your internet connection or the imgur.com servers. Możliwe, że występuje problem z połączeniem internetowym lub z serwerami imgur.com. An Error occurred while uploading image! Wystąpił błąd podczas przesyłania obrazu! Error code: Kod błędu: You do not seem to be connected to the internet... Wygląda na to, że nie masz połączenia z Internetem... Unable to upload! Nie można przesłać! Access Image Wyświetl obraz Click to open in browser Kliknij, aby otworzyć w przeglądarce internetowej Copy to clipboard Kopiuj do schowka Delete Image Usuń obraz keymouse Alt Refers to a keyboard modifier Alt Ctrl Refers to a keyboard modifier Ctrl Shift Refers to a keyboard modifier Shift Page Up Refers to one of the keys on the keyboard Page Up Page Down Refers to one of the keys on the keyboard Page Down Meta Refers to the key that usually has the Windows symbol on it Klawisz Windows Keypad Refers to the key that triggers the number block on keyboards Numlock Escape Refers to one of the keys on the keyboard Escape Right Refers to one of the arrow keys on the keyboard Strzałka w prawo Left Refers to one of the arrow keys on the keyboard Strzałka w lewo Up Refers to one of the arrow keys on the keyboard Strzałka w górę Down Refers to one of the arrow keys on the keyboard Strzałka w dół Space Refers to one of the keys on the keyboard Spacja Delete Refers to one of the keys on the keyboard Delete Backspace Refers to one of the keys on the keyboard Backspace Home Refers to one of the keys on the keyboard Home End Refers to one of the keys on the keyboard End Insert Refers to one of the keys on the keyboard Insert Tab Refers to one of the keys on the keyboard Tab Return Return refers to the enter key of the number block - please try to make the translations of Return and Enter (the main button) different if possible! Enter numeryczny Enter Enter refers to the main enter key - please try to make the translations of Return (in the number block) and Enter different if possible! Enter Left Button Refers to a mouse button Lewy przycisk myszy Right Button Refers to a mouse button Prawy przycisk myszy Middle Button Refers to a mouse button Środkowy przycisk myszy Wheel Up Refers to the mouse wheel Kółko myszy do przodu Wheel Down Refers to the mouse wheel Kółko myszy do tyłu East Refers to a direction of the mouse when performing a mouse gesture Wschód South Refers to a direction of the mouse when performing a mouse gesture Południe West Refers to a direction of the mouse when performing a mouse gesture Zachód North Refers to a direction of the mouse when performing a mouse gesture Północ logging Logging Window title Logging enable debug messages enable debug messages copy to clipboard copy to clipboard save to file save to file metadata Click and drag to resize meta data Kliknij i przeciągnij, aby zmienić rozmiar metadanych File name Please keep string short! Nazwa pliku Dimensions The dimensions of the loaded image. Please keep string short! Wymiary Image #/# Used as in "Image 3/16". The numbers (position of image in folder) are added on automatically. Please keep string short! Obraz #/# File size Please keep string short! Rozmiar pliku File type Please keep string short! Rodzaj pliku Make Exif image metadata: the make of the camera used to take the photo. Please keep string short! Producent Model Exif image metadata: the model of the camera used to take the photo. Please keep string short! Model Software Exif image metadata: the software used to create the photo. Please keep string short! Oprogramowanie Time Photo was Taken Exif image metadata: when the photo was taken. Please keep string short! Czas zrobienia zdjęcia Exposure Time Exif image metadata: how long the sensor was exposed to the light. Please keep string short! Czas naświetlania Flash Exif image metadata: the flash setting when the photo was taken. Please keep string short! Lampa błyskowa Scene Type Exif image metadata: the specific scene type the camera used for the photo. Please keep string short! Tryb Focal Length Exif image metadata: https://en.wikipedia.org/wiki/Focal_length . Please keep string short! Długość ogniskowej Metadata This is the heading of the metadata element ---------- Window title Metadane No File Loaded Brak załadowanego pliku Click to open GPS position with online map Kliknij, aby wyświetlić lokalizację GPS na mapie online Keep Open Used as in: Keep the metadata element open even if the cursor leaves it Pozostaw otwarte Light Source Exif image metadata: What type of light the camera detected. Please keep string short! Źródło światła Keywords IPTC image metadata: A description of the image by the user/software. Please keep string short! Słowa kluczowe Location IPTC image metadata: The CITY and COUNTRY the imge was taken in. Please keep string short! Lokalizacja Copyright IPTC image metadata. Please keep string short! Prawa autorskie GPS Position Exif image metadata. Please keep string short! Lokalizacja GPS F Number Exif image metadata: https://en.wikipedia.org/wiki/F-number . Please keep string short! Przesłona navigate Click and drag to move Kliknij i przeciągnij, aby przenieść Navigate to previous image in folder Przejdź do poprzedniego obrazu w folderze Navigate to next image in folder Przejdź do następnego obrazu w folderze Show main menu Pokaż menu główne other Open a file to start Otwórz plik, aby rozpocząć Click anywhere to open a file Part of the message shown in the main view before any image is loaded Click anywhere to open a file Move your cursor to: Part of the message shown in the main view before any image is loaded Move your cursor to: RIGHT EDGE for the main menu Part of the message shown in the main view before any image is loaded, first option for where to move cursor to RIGHT EDGE for the main menu LEFT EDGE for the metadata Part of the message shown in the main view before any image is loaded, second option for where to move cursor to LEFT EDGE for the metadata BOTTOM EDGE to show the thumbnails Part of the message shown in the main view before any image is loaded, third option for where to move cursor to BOTTOM EDGE to show the thumbnails (once an image/folder is loaded) Part of the message shown in the main view before any image is loaded (once an image/folder is loaded) No matches found Used as in: No matches found for the currently set filter Nie znaleziono wyników PhotoQt Image Viewer The window title of PhotoQt Przeglądarka obrazów PhotoQt popinpopout Merge into main interface Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface Złącz z oknem głównym Move to its own window Tooltip of small button to show an element in its own window (i.e., not merged into main interface) Odłącz do oddzielnego okna quickinfo Click here to enter fullscreen mode Kliknij tutaj, aby włączyć tryb pełnoekranowy Click here to exit fullscreen mode Kliknij tutaj, aby wyłączyć tryb pełnoekranowy Click here to close PhotoQt Kliknij tutaj, aby zamknąć PhotoQt Page %1 of %2 Used as in: Page 12/34 - please keep as short as possible Strona %1 z %2 File %1 of %2 Used as in: File 12/34 - please keep as short as possible Plik %1 z %2 Connected to: This is followed by the name of the Chromecast streaming device currently connected to Connected to: Copy filename to clipboard Copy filename to clipboard Show counter Pokaż licznik Hide counter Ukryj licznik Show file path Pokaż ścieżkę pliku Hide file path Ukryj ścieżkę pliku Show file name Pokaż nazwę pliku Hide file name Ukryj nazwę pliku Show zoom level Pokaż poziom powiększenia Hide zoom level Ukryj poziom powiększenia Click here to enter viewer mode Kliknij tutaj, aby otworzyć tryb przeglądania Hide central 'viewer mode' button Hide central 'viewer mode' button Click here to exit viewer mode Kliknij tutaj, aby zamknąć tryb przeglądania Filter: Filtr: Show window buttons Pokaż przyciski okna Hide window buttons Ukryj przyciski okna Some info about the current image and directory Kilka informacji o bieżącym obrazie oraz katalogu Show central 'viewer mode' button Show central 'viewer mode' button Click to remove filter Kliknij, aby usunąć flitr scale Scale file Window title Skaluj plik An error occured, file could not be scaled! Wystąpił błąd, nie można skalować pliku! This file format cannot (yet) be scaled with PhotoQt! Ten format pliku nie może (jeszcze) być skalowany przez PhotoQt! New width x height: Nowa szerokość x wysokość: Preserve aspect ratio The aspect ratio refers to the ratio of the width to the height of the image, e.g., 16:9 for most movies Zachowaj proporcje Quality: This refers to the quality to be used to scale the image Jakość: Scale (create new file) Written on a clickable button Skaluj (utwórz nowy plik) Scale (change file in place) Written on a clickable button Skaluj (zamień bieżący plik) De-/Increase width and height by 10% Zmniejsz/Zwiększ szerokość i wysokość o 10% In-/Decrease quality by 5% Zwiększ/Zmniejsz jakość o 5% Select new file Wybierz nowy plik settingsmanager interface settings manager tab title interfejs Tab to control interface settings Zakładka kontroli ustawień interfejsu image view settings manager tab title widok obrazu Tab to control how images are viewed Zakładka kontroli sposobu wyświetlania obrazów thumbnails settings manager tab title miniatury Tab to control the look and behaviour of thumbnails Zakładka kontroli wyglądu oraz zachowania miniatur metadata settings manager tab title metadane Tab to control metadata settings Zakładka kontroli ustawień metadanych file types settings manager tab title typy plików Tab to control which file types PhotoQt should recognize Zakładka kontroli typów plików rozpoznawanych przez PhotoQt shortcuts settings manager tab title skróty Tab to control which shortcuts are set Zakładka kontroli ustawionych skrótów advanced Written on button in setting manager. A click on this button opens a menu with some advanced actions. zaawansowane restore defaults przywróć domyślne import settings importowanie ustawień export settings eksportowanie ustawień disable expert mode wyłącz tryb eksperta enable expert mode włącz tryb eksperta Import of %1. This will replace your current settings with the ones stored in the backup. Importowanie %1. Ustawienia zapisane w kopii zapasowej zastąpią bieżące ustawienia. Do you want to continue? Czy chcesz kontynuować? Save changes and exit Zapisz zmiany i wyjdź Exit and discard changes Wyjdź i odrzuć zmiany Rename File Name of shortcut action Zmień nazwę pliku Delete File Name of shortcut action Usuń plik Filetype settings Ustawienia typu plików These settings govern which file types PhotoQt should recognize and open. Te ustawienia kontrolują, które typy plików mają być rozpoznawane i otwierane przez PhotoQt. Not all file types might be available, depending on your setup and what library support was enabled at compile time Nie wszystkie typy plików mogą być dostępne, w zależności od konfiguracji Twojego systemu oraz od typu wspieranych bibliotek aktywowanych podczas kompilacji Image view settings Ustawienia wyświetlania obrazów These settings affect the viewing of images, how they are shown, in what order, how large a cache to use, etc. Te ustawienia kontrolują widok wyświetlanych obrazów, sposób ich wyświetlania, kolejność, wielkość pamięci podręcznej itd. Some settings are only shown in expert mode. Niektóre ustawienia są dostępne tylko w trybie eksperta. Interface settings Ustawienia interfejsu These settings affect the interface in general, how the application looks like and behaves. This includes the background, some of the labels in the main view, which elements are to be shown in their own window, and others. Te ustawienia mają wpływ na wygląd aplikacji, jej zachowanie oraz na interfejs ogółem. Obejmuje to tło, niektóre z etykiet w widoku głównym, elementy, które mają być wyświetlane w swoim własnym oknie i więcej. Metadata settings Ustawienia metadanych These settings affect the metadata element, what information it should show and some of its behavior. Te ustawienia wpływają na metadane, jakie informacje powinny być w nich zawarte oraz niektóre ich zachowania. Shortcuts Skróty Navigation A shortcuts category: navigation Nawigacja Filter images in folder Name of shortcut action Filtruj obrazy w folderze Next image Name of shortcut action Następny obraz Previous image Name of shortcut action Poprzedni obraz Go to first image Name of shortcut action Name of shortcut action Przejdź do pierwszego zdjęcia Go to last image Name of shortcut action Przejdź do ostatniego zdjęcia Enter viewer mode Name of shortcut action Otwórz tryb przeglądania Show quick navigation buttons Name of shortcut action Wyświetl przyciski szybkiej nawigacji Close window (hides to system tray if enabled) Name of shortcut action Zamknij okno (minimalizuje do paska zadań, jeśli włączone) Quit PhotoQt Name of shortcut action Zamknij PhotoQt Image A shortcuts category: image manipulation Obraz Zoom In Name of shortcut action Powiększ Zoom Out Name of shortcut action Pomniejsz Zoom to Actual Size Name of shortcut action Rozmiar rzeczywisty Reset Zoom Name of shortcut action Wyzeruj powiększenie Rotate Right Name of shortcut action Obróć w prawo Rotate Left Name of shortcut action Obróć w lewo Reset Rotation Name of shortcut action Wyzeruj obrócenie Flip Horizontally Name of shortcut action Odwróć poziomo Flip Vertically Name of shortcut action Odwróć pionowo Scale Image Name of shortcut action Skaluj obraz Play/Pause animation/video Name of shortcut action Odtwórz/Zatrzymaj animację/film Hide/Show face tags (stored in metadata) Name of shortcut action Ukryj/Wyświetl znaczniki twarzy (zachowane w metadanych) Tag faces (stored in metadata) Name of shortcut action Wykrywanie twarzy (zapisywane w metadanych) File A shortcuts category: file management Plik Delete File (without confirmation) Name of shortcut action Usuń plik (bez potwierdzenia) Copy File to a New Location Name of shortcut action Kopiuj plik do nowej lokalizacji Move File to a New Location Name of shortcut action Przenieś plik do nowej lokalizacji Copy Image to Clipboard Name of shortcut action Kopiuj obraz do schowka Other A shortcuts category: other functions Pozostałe Hide/Show main menu Name of shortcut action Ukryj/Wyświetl menu główne Hide/Show metadata Name of shortcut action Ukryj/Pokaż metadane Keep metadata opened Name of shortcut action Pozostaw metadane otwarte Hide/Show thumbnails Name of shortcut action Ukryj/Wyświetl miniatury Show Settings Name of shortcut action Pokaż ustawienia Start Slideshow Name of shortcut action Rozpocznij pokaz slajdów Start Slideshow (Quickstart) Name of shortcut action Rozpocznij pokaz slajdów (Szybki start) About PhotoQt Name of shortcut action Informacje o PhotoQt Set as Wallpaper Name of shortcut action Ustaw jako tło pulpitu Show Histogram Name of shortcut action Pokaż histogram Upload to imgur.com (anonymously) Name of shortcut action Prześlij do imgur.com (anonimowo) Upload to imgur.com user account Name of shortcut action Prześlij do konta użytkownika imgur.com Stream content to Chromecast device Name of shortcut action Stream content to Chromecast device Show log/debug messages Name of shortcut action Show log/debug messages External A shortcuts category: external shortcuts Zewnętrzne %f = filename including path, %u = filename without path, %d = directory containing file Please leave the three placeholders (%f, %u, %d) as is. %f = nazwa pliku razem ze ścieżką, %u = nazwa pliku bez ścieżki, %d = katalog zawierający plik Thumbnails settings Ustawienia miniatur These settings affect the thumbnails shown, by default, along the bottom edge of the screen. This includes their look, behavior, and the user's interaction with them. Te ustawienia kontrolują miniatury, które domyślnie wyświetlane są wzdłuż dolnej krawędzi ekranu. Obejmuje to ich wygląd, zachowanie oraz interakcje użytkownika. Settings Manager Window title Menedżer ustawień Here the shortcuts can be managed. Below you can add a new shortcut for any one of the available actions, both key combinations and mouse gestures are supported. Tutaj możesz zarządzać skrótami. Poniżej możesz dodać nowy skrót klawiszowy, jak i gest myszy dla dowolnej dostępnej czynności. You can also set the same shortcut for multiple actions or multiple times for the same action. All actions for a shortcut will be executed sequentially, allowing a lot more flexibility in using PhotoQt. Możesz również ustawić taki sam skrót dla kilku czynności lub kilka razy dla tej samej czynności. Wszystkie czynności przypisane do skrótu zostaną wywołane po kolei umożliwiając większą elastyczność korzystania z PhotoQt. Open file (browse images) Name of shortcut action Open file (browse images) Save image in another format Name of shortcut action Zapisz obraz w innym formacie Restore defaults As in 'restore the default settings and/or file formats and/or shortcuts'. Please keep short! Przywróć domyślne Here you can restore the default configuration of PhotoQt. You can choose to restore any combination of the following three categories. Tutaj możesz przywrócić domyślną konfigurację PhotoQt. Możesz wybrać dowolną kombinację poniższych trzech kategorii, które chcesz przywrócić. Restore default settings Przywróć ustawienia domyślne Restore default file formats Przywróć domyślne typy plików Restore default shortcuts Przywróć domyślne skróty settingsmanager_filetypes These are some additional settings for opening archives. Kilka dodatkowych ustawień dotyczących otwierania archiwów. use external tool: unrar used as label for checkbox użyj zewnętrznego narzędzia: archiwizator These are some additional settings for showing PDFs. Kilka dodatkowych ustawień dotyczących wyświetlania plików PDF. Quality: the quality setting to be used when loading PDFs Jakość: These are some additional settings for playing videos. Kilka dodatkowych ustawień dotyczących odtwarzania filmów. Autoplay Used as setting for video files (i.e., autoplay videos) Automatyczne odtwarzanie Loop Used as setting for video files (i.e., loop videos) Powtarzanie Select tool for creating video thumbnails Tooltip shown for combobox for selectiong video thumbnailer Wybierz narzędzie do tworzenia miniatur filmów images This is a category of files PhotoQt can recognize: any image format obrazy compressed files This is a category of files PhotoQt can recognize: compressed files like zip, tar, cbr, 7z, etc. pliki skompresowane documents This is a category of files PhotoQt can recognize: documents like pdf, txt, etc. dokumenty videos This is a type of category of files PhotoQt can recognize: videos like mp4, avi, etc. filmy Enable As in: "Enable all formats in the seleted category of file types" Włącz Disable As in: "Disable all formats in the seleted category of file types" Wyłącz Enable everything As in "Enable every single file format PhotoQt can open in any category" Włącz wszystko Currently there are %1 file formats enabled The %1 will be replaced with the number of file formats, please don't forget to add it. Obecnie jest włączone %1 typów plików Search by description or file ending Szukaj według opisu lub rozszerzenia pliku Search by image library or category Szukaj według biblioteki obrazu lub kategorii File endings: Rozszerzenia plików: settingsmanager_imageview animation A settings title referring to the in/out animation of images animacja What type of animation to show, and how fast. This is referring to the in/out animation of images Typ animacji do wyświetlenia oraz jej prędkość. type of animation This is referring to the in/out animation of images typ animacji opacity This is referring to the in/out animation of images przezroczystość along x-axis This is referring to the in/out animation of images wzdłuż osi x along y-axis This is referring to the in/out animation of images wzdłuż osi y no animation This is referring to the in/out animation of images brak animacji long animation This is referring to the in/out animation of images długa animacja fit in window A settings title referring to whether to fit images in window dopasowanie do okna Zoom smaller images to fill the full window width and/or height. Powiększ mniejsze obrazy tak, aby wypełnić całą szerokość i/lub wysokość okna. fit smaller images in window dopasuj mniejsze obrazy do okna interpolation A settings title referring to the type of interpolation to use for small images interpolacja PhotoQt tries to improve the rendering of images that are shown much larger than they are (i.e., zoomed in a lot). For very tiny images that are zoomed in quite a lot, this can result in the loss of too much information in the image. Thus a threshold can be defined here, images that are smaller than this threshold are shown exactly as they are without any smoothing or other attempts to improve them. PhotoQt podejmuje próbę usprawnienia renderowania obrazów wyświetlanych w znacznie większym rozmiarze niż oryginał (np. bardzo powiększone). W przypadku bardzo małych obrazów powiększonych w znacznym stopniu może to oznaczać utratę dużej ilości informacji w obrazie. Można temu zapobiec ustawiając tutaj próg tak, aby obrazy poniżej progu były wyświetlane dokładnie tak, jak oryginał bez jakiegokolwiek wygładzania lub innych prób poprawienia jakości. Do not use any interpolation algorithm for very small images A type of interpolation to use for small images Nie używaj jakiegokolwiek algorytmu interpolacji dla bardzo małych obrazów threshold: The threshold (in pixels) at which to switch interpolation algorithm próg: remember per session A settings title zapamiętaj na sesję By default, PhotoQt resets the zoom, rotation, flipping/mirroring and position when switching to a different image. For certain tasks, for example for comparing two images, it can be helpful to keep these properties. Domyślnie, PhotoQt nie zapamiętuje powiększenia, obrotu, odwrócenia/odbicia oraz położenia podczas przełączania pomiędzy obrazami. Dla określonych zadań, takich jak porównywanie dwóch obrazów, pomocne może być zachowanie tych właściwości. remember zoom, rotation, flip, position zapamiętaj powiększenie, obrót, odbicie, położenie left mouse button A settings title lewy przycisk myszy The left button of the mouse is by default used to move the image around. However, this prevents the left mouse button from being used for shortcuts. Lewy przycisk myszy jest domyślnie używany do przemieszczania obrazu. Zapobiega to jednak używaniu lewego przycisku w skrótach. use left button to move image używaj lewego przycisku myszy do przemieszczania obrazu looping A settings title for looping through images in folder powtarzanie What to do when the end of a folder has been reached: stop or loop back to first image in folder. Zachowanie po osiągnięciu końca folderu: zatrzymanie lub powtarzanie od pierwszego obrazu w folderze. loop through images in folder powtarzaj obrazy w folderze margin A settings title about the margin around the main image margines How much space to show between the main image and the application border. Ilość miejsca odstępu pomiędzy głównym obrazem a ramką aplikacji. none As in: no margin between the main image and the window edges brak pixmap cache A settings title pamięć podręczna pixmap Size of runtime cache for fully loaded images. This cache is cleared when the application quits. Rozmiar pamięci podręcznej dla w pełni wczytanych obrazów. Ta pamięć jest czyszczona po zamknięciu aplikacji. sort images by A settings title sortuj obrazy według Sort all images in a folder by the set property. Sortuj wszystkie obrazy w folderze według określonej właściwości. natural name A criteria for sorting images nazwa macierzysta name A criteria for sorting images nazwa time A criteria for sorting images data size A criteria for sorting images rozmiar type A criteria for sorting images typ ascending Sort images in ascending order rosnąco descending Sort images in descending order malejąco transparency marker A settings title obszary przezroczyste Show checkerboard pattern behind transparent areas of (half-)transparent images. Pokazuj wzór szachownicy w miejscu obszarów przezroczystych w obrazach (pół-)przezroczystych. show checkerboard pattern Setting for how to display images that have transparent areas, whether to show checkerboard pattern in that area or not pokaż wzór szachownicy zoom speed A settings title, the zoom here is the zoom of the main image prędkość powiększania Images are zoomed at a relative speed as specified by this percentage. A higher value means faster zoom. Obrazy są powiększane z prędkością względną do określonej wartości procentowej. Wyższa wartość oznacza szybsze powiększanie. super slow This refers to the zoom speed, the zoom here is the zoom of the main image bardzo wolno very fast This refers to the zoom speed, the zoom here is the zoom of the main image bardzo szybko settingsmanager_interface background A settings title referring to the background of PhotoQt (behind any image/element) tło What type of background is to be shown. The background here refers to the area behind the main image and any element in PhotoQt, the very back. Rodzaj wyświetlanego tła. (half-)transparent background How the background of PhotoQt should be (pół-)przezroczyste tło faked transparency How the background of PhotoQt should be udawana przezroczytość custom background image How the background of PhotoQt should be własny obraz tła Click to select an image Tooltip for a mouse area, a click on which opens a file dialog for selecting an image Kliknij, aby wybrać obraz scale to fit If an image is set as background of PhotoQt this is one way it can be handled. dopasuj scale and crop to fit If an image is set as background of PhotoQt this is one way it can be handled. dopasuj i przytnij stretch to fit If an image is set as background of PhotoQt this is one way it can be handled. rozciągnij center image If an image is set as background of PhotoQt this is one way it can be handled. wyśrodkuj tile image If an image is set as background of PhotoQt this is one way it can be handled. kafelki All Images This is a category in a file dialog for selecting images used as in: All images supported by PhotoQt. Wszystkie obrazy Video This is a category in a file dialog for selecting images used as in: Video files supported by PhotoQt. Flimy empty area around image A settings title pusty obszar wokół obrazu How to handle clicks on empty area around images. Zachowanie po kliknięciu na pustym obszarze wokół obrazów. close on click Used as in: Close PhotoQt on click on empty area around main image zamknij po kliknięciu Close PhotoQt when click occurred on empty area around image Close PhotoQt when click occurred on empty area around image navigate on click Used as in: Close PhotoQt on click on empty area around main image navigate on click Go to next/previous image if click occurred in left/right half of window Go to next/previous image if click occurred in left/right half of window size of 'hot edge' A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) rozmiar 'aktywnej krawędzi' Adjusts the sensitivity of the edges for showing elements like the metadata and main menu elements. Dostosowanie czułości krawędzi wyświetlającej elementy takie jak metadane oraz elementy głównego menu. small used as in: small area mały large used as in: large area duży language A settings title. język Change the language of the application. Wybierz język dla aplikacji. mouse wheel sensitivity A settings title. czułość kółka myszy How sensitive the mouse wheel is for shortcuts, etc. Czułość kółka myszy dla skrótów itp. not sensitive The sensitivity here refers to the sensitivity of the mouse wheel niska czułość very sensitive The sensitivity here refers to the sensitivity of the mouse wheel wysoka czułość overlay color A settings title. kolor nakładki This is the color that is shown on top of any background image/... Ten kolor jest wyświetlany jako tło dla każdego obrazu/... click to change color kliknij, aby zmienić kolor please choose a color wybierz kolor pop out elements A settings title. The popping out that is talked about here refers to the possibility of showing any element in its own window (i.e., popped out). wyskakujące elementy Here you can choose for most elements whether they are to be shown integrated into the main window or in their own, separate window. Tutaj możesz wybrać sposób wyświetlania większości elementów, zarówno zintegrowany z głównym oknem lub w swoim własnym, oddzielnym oknie. File dialog Used as identifying name for one of the elements in the interface Okno dialogowe pliku keep open pozostaw otwarte Settings Manager Used as identifying name for one of the elements in the interface Menedżer ustawień Main Menu Used as identifying name for one of the elements in the interface Główne menu Metadata Used as identifying name for one of the elements in the interface Metadane Histogram Used as identifying name for one of the elements in the interface Histogram Scale Used as identifying name for one of the elements in the interface Rozmiar Slideshow Settings Used as identifying name for one of the elements in the interface Ustawienia pokazu slajdów Slideshow Controls Used as identifying name for one of the elements in the interface Sterowanie pokazem slajdów Rename File Used as identifying name for one of the elements in the interface Zmień nazwę pliku Delete File Used as identifying name for one of the elements in the interface Usuń plik Save File As Used as identifying name for one of the elements in the interface Zapisz plik jako About Used as identifying name for one of the elements in the interface Informacje Imgur Used as identifying name for one of the elements in the interface Imgur Wallpaper Used as identifying name for one of the elements in the interface Tapeta Filter Noun, not a verb. Used as identifying name for one of the elements in the interface Filtr labels A settings title. etykiety The labels are shown along the top edge of the main view. Etykiety wyświetlane są wzdłuż górnej krawędzi głównego okna. show labels checkbox in settings manager wyświetl etykiety counter refers to the image counter (i.e., image #/# in current folder) licznik filepath show filepath in the labels. This is specifically the filePATH and not the filename. ścieżka pliku filename show filename in the labels. This is specifically the fileNAME and not the filepath. nazwa pliku current zoom level bieżący poziom powiększenia current rotation angle bieżący kąt obrotu window buttons the window buttons are some window management buttons like: close window, maximize, fullscreen przyciski okna size of window buttons the size of the window buttons (the buttons shown in the top right corner of the window) rozmiar przycisków okna remember last image A settings title. zapamiętaj ostatni obraz At startup the image loaded at the end of the last session can be automatically reloaded. Po uruchomieniu zostanie automatycznie wczytany obraz wyświetlany pod koniec ostatniej sesji. re-open last loaded image at startup po uruchomieniu ponownie otwórz ostatnio wczytany obraz tray icon A settings title. ikona obszaru powiadomień If a tray icon is to be shown and, if shown, whether to hide it or not. Wyświetlanie ikony w obszarze powiadomień i jeśli włączone, ustawienia ukrywania ikony. no tray icon brak ikony w obszarze powiadomień hide to tray icon zminimalizuj do ikony w obszarze powiadomień show tray icon but don't hide to it pokaż ikonę w obszarze powiadomień, ale nie minimalizuj do niej window management A settings title. zarządzanie oknem Some basic window management properties. Kilka podstawowych właściwości zarządzania oknem. manage window through quick info labels zarządzaj oknem poprzez etykiety paska menu save and restore window geometry zapamiętaj i przywróć wymiary okna keep above other windows zawsze na wierzchu window mode A settings title. w oknie Whether to run PhotoQt in window mode or fullscreen. Uruchamianie PhotoQt w oknie lub pełnym ekranie. run in window mode uruchom w oknie show window decoration pokaż ozdoby okna custom main menu entries A settings title. niestandardowe wpisy głównego menu Add some custom entries in the main menu on the right. Dodaj kilka własnych wpisów do menu głównego po prawej stronie. what string to show in main menu this is the placeholder text inside of a text box telling the user what text they can enter here ciąg znaków do wyświetlenia w głównym menu which command to execute this is the placeholder text inside of a text box telling the user what text they can enter here polecenie do wykonania quit Keep string short! Used on checkbox for contextmenu, refers to option to close PhotoQt after respective command has been executed. wyjdź move entry down contextmenu settings: used as in 'move this entry down in the list of all entries' przenieś wpis w dół move entry up contextmenu settings: used as in 'move this entry up in the list of all entries' przenieś wpis w górę delete entry contextmenu settings: used as in 'delete this entry out of the list of all entries' usuń wpis quick navigation A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) szybka nawigacja Some buttons to help with quick navigation. These can come in handy when, e.g., operating with a touch screen. Kilka przycisków pomagających w szybkiej nawigacji. Mogą się one przydać np. podczas używania ekranu dotykowego. Show quick navigation buttons Pokazuj przyciski szybkiej nawigacji settingsmanager_metadata face tags A settings title. The face tags are labels that can be shown (if available) on faces including their name. znaczniki twarzy Whether to show face tags (stored in metadata info). The face tags are labels that can be shown (if available) on faces including their name. Wyświetlanie znaczników twarzy (zachowanych w matadanych). enable włącz face tags - border A settings title. The face tags are labels that can be shown (if available) on faces including their name. znaczniki twarzy - obramowanie If and what style of border to show around tagged faces. Wyświetlanie i styl obramowania wokół znaczników twarzy. show border The border here is the border around face tags. pokaż obramowanie click to change color kliknij, aby zmienić kolor please choose a color wybierz kolor face tags - font size A settings title. The face tags are labels that can be shown (if available) on faces including their name. znaczniki twarzy - rozmiar czcionki The font size of the name labels. The name labels here are the labels with the name used for the face tags. Rozmiar czcionki dla etykiet z nazwami. face tags - visibility A settings title. The face tags are labels that can be shown (if available) on faces including their name. znaczniki twarzy - widoczność When to show the face tags and for how long. Warunek oraz długość wyświetlenia znaczników twarzy. hybrid mode A mode for showing face tags. tryb hybrydowy always show all A mode for showing face tags. zawsze pokazuj wszystkie show one on hover A mode for showing face tags. pokazuj jedno po wskazaniu show all on hover A mode for showing face tags. pokazuj wszystkie po wskazaniu GPS online map A settings title. sieciowa mapa GPS Which map service to use when a GPS position is clicked. Usługa map używana po kliknięciu na położenie GPS. hot edge A settings title. The hot edge refers to the area along the left edge of PhotoQt where the mouse cursor triggers the visibility of the metadata element. aktywna krawędź Show metadata element when the mouse cursor is close to the window edge Pokaż moduł metadanych, gdy kursor znajdzie się blisko krawędzi okna meta information A settings title. zawartość metadanych Which meta information to extract and display. Rodzaj wczytywanych oraz wyświetlanych metadanych. file name Part of the meta information about the current image. nazwa pliku file type Part of the meta information about the current image. typ pliku file size Part of the meta information about the current image. rozmiar pliku image #/# Part of the meta information about the current image. obraz #/# dimensions Part of the meta information about the current image. wymiary copyright Part of the meta information about the current image. prawa autorskie exposure time Part of the meta information about the current image. czas ekspozycji flash Part of the meta information about the current image. lampa błyskowa focal length Part of the meta information about the current image. długość ogniskowej f-number Part of the meta information about the current image. przesłona GPS position Part of the meta information about the current image. lokalizacja GPS keywords Part of the meta information about the current image. słowa kluczowe light source Part of the meta information about the current image. źródło światła location Part of the meta information about the current image. lokalizacja make Part of the meta information about the current image. producent model Part of the meta information about the current image. model scene type Part of the meta information about the current image. tryb software Part of the meta information about the current image. oprogramowanie time photo was taken Part of the meta information about the current image. czas wykonania zdjęcia opacity A settings title. przezroczystość The opacity of the metadata element. Przezroczystość modułu metadanych. auto-rotation A settings title. automatyczny obrót Automatically rotate images based on metadata information. Automatycznie obracaj obrazy na podstawie informacji z metadanych. settingsmanager_shortcuts quit checkbox in shortcuts settings, used as in: quit PhotoQt. Please keep as short as possible! zamknij Click to change shortcut Kliknij, aby zmienić skrót Click to delete shortcut Kliknij, aby usunąć skrót no shortcut set brak ustawionego skrótu Click to manage shortcut Kliknij, aby zarządzać skrótem add new Used as in 'add new shortcut'. Please keep short! dodaj nowy Add New Shortcut Dodaj nowy skrót Perform a mouse gesture here or press any key combo Wykonaj gest myszy tutaj lub naciśnij dowolną kombinację klawiszy Add new Used on button as in 'add new external shortcut'. Please keep short! Dodaj nowy settingsmanager_thumbnails thumbnail cache A settings title. pamięć podręczna miniatur Thumbnails can be cached (permanently), following the freedesktop.org standard. Miniatury mogą być zapisane (na stałe) w pamięci podręcznej, zgodnie ze standardem freedesktop.org. enable aktywuj keep in center A settings title. Used as in: Keep thumbnail for current main image in center. zachowaj na środku Keep currently active thumbnail in the center of the screen Zachowaj bieżąca miniaturę na środku ekranu center on active thumbnail wyśrodkuj na aktywnej miniaturze disable thumbnails wyłącz miniatury Disable thumbnails in case no thumbnails are desired whatsoever. Wyłącz miniatury, jeśli nie chcesz ich wyświetlać. disable all thumbnails wyłącz wszystkie miniatury filename label A settings title. The filename label here is the one that is written on thumbnails. etykieta nazwy pliku Show the filename on a small label on the thumbnail image. Pokazuj nazwę pliku na małej etykiecie na miniaturze obrazu. font size: rozmiar czcionki: filename-only A settings title. This refers to using only the filename as thumbnail and no actual image. tylko nazwa pliku Show only the filename as thumbnail, no actual image. Pokazuj tylko nazwę pliku jako miniaturę, bez wyświetlania obrazu. lift up A settings title. This refers to the lift up of thumbnail images when active/hovered. podniesienie How many pixels to lift up thumbnails when either hovered or active. Ilość pikseli, o którą będą uniesione miniatury, gdy zostaną wskazane lub są aktywne. position A settings title referring to the position of the thumbnails (upper or lower edge of PhotoQt). położenie Which edge to show the thumbnails on, upper or lower edge. Krawędź górna lub dolna, na której powinny być wyświetlane miniatury. upper edge The upper edge of PhotoQt górna krawędź lower edge The lower edge of PhotoQt dolna krawędź size A settings title referring to the size of the thumbnails. rozmiar How large (or small) the thumbnails should be. Rozmiar wyświetlanych miniatur. spacing A settings title referring to the spacing of thumbnails, i.e., how much empty space to have between each. odstęp How much space to show between the thumbnails. Ilość odstępu pomiędzy wyświetlanymi miniaturami. threads A settings title, as in: How many threads to use to generate thumbnails. ilość wątków How many threads to use to create thumbnails. Too many threads can slow down your computer! Ilość wątków używanych do tworzenia miniatur. Zbyt wiele wykorzystanych wątków może spowolnić Twój komputer! Threads: Ilość wątków: visibility A settings title referring to the visibility of the thumbnails, i.e., if and when to hide them. widoczność If and how to keep thumbnails visible Widoczność i zachowanie miniatur hide when not needed This is talking about the thumbnails. ukryj, gdy nie są potrzebne never hide This is talking about the thumbnails. nigdy nie ukrywaj hide when zoomed in This is talking about the thumbnails. ukryj po powiększeniu exclude folders exclude folders Exclude the specified folders and all of its subfolders from any sort of caching and preloading. Exclude the specified folders and all of its subfolders from any sort of caching and preloading. Do not cache these folders: Do not cache these folders: Add folder Written on a button Add folder One folder per line One folder per line slideshow Click to go to the previous image Kliknij, aby przejść do poprzedniego obrazu Click to pause slideshow Kliknij, aby zatrzymać pokaz slajdów Click to play slideshow Kliknij, aby rozpocząć pokaz slajdów Click to go to the next image Kliknij, aby przejść do następnego obrazu Sound volume: Głośność dźwięku: Click to quit slideshow Kliknij, aby zamknąć pokaz slajdów Slideshow settings Window title Ustawienia pokazu slajdów interval The interval between images in a slideshow przerwa animation This is referring to the in/out animation of images during a slideshow animacja opacity This is referring to the in/out animation of images during slideshows przezroczystość along x-axis This is referring to the in/out animation of images during slideshows wzdłuż osi x along y-axis This is referring to the in/out animation of images during slideshows wzdłuż osi y animation speed The speed of transitioning from one image to another during slideshows prędkość animacji immediately, without animation This refers to a speed of transitioning from one image to another during slideshows natychmiast, bez animacji pretty fast animation This refers to a speed of transitioning from one image to another during slideshows dość szybka animacja not too fast and not too slow This refers to a speed of transitioning from one image to another during slideshows nie za szybka i nie za wolna very slow animation This refers to a speed of transitioning from one image to another during slideshows bardzo wolna animacja current speed This refers to the currently set speed of transitioning from one image to another during slideshows bieżąca prędkość looping powtarzanie loop over all files Loop over all images during slideshows powtarzaj wszystkie pliki shuffle during slideshows shuffle the order of all images losowo shuffle all files during slideshows shuffle the order of all images losowe odtwarzanie plików subfolders also include images in subfolders during slideshows podfoldery include images in subfolders also include images in subfolders during slideshows uwzględnij obrazy w podfolderach quickinfo What to do with the quick info during slideshows szybkie informacje hide quickinfo What to do with the quick info during slideshows ukryj szybkie informacje music The music that is to be played during slideshows dźwięki enable music Enable music to be played during slideshows włącz dźwięki no file selected nie wybrano pliku Click to select music file Kliknij, aby wybrać plik dźwięku Click to change music file Kliknij, aby zmienić plik dźwięku Common music file formats Typowe formaty plików dźwięku All Files Wszystkie pliki Start slideshow Written on a clickable button Rozpocznij pokaz slajdów Slideshow controls Window title Sterowanie pokazem slajdów startup Edit with %1 Used as in 'Edit with [application]'. %1 will be replaced with application name. Edytuj przez %1 Open in %1 Used as in 'Open with [application]'. %1 will be replaced with application name. Otwórz przez %1 streaming Scan for devices Used as tooltip for button that starts a scan for Chromecast streaming devices in the local network Scan for devices Disconnect Written on button, as in 'Disconnect from connected Chromecast streaming device' Disconnect Connect Written on button, as in 'Connect to Chromecast streaming device' Connect searching for devices... status text while searching for chromecast streaming devices in the local network searching for devices... no devices found result of scan for chromecast streaming devices no devices found Streaming (Chromecast) Window title Streaming (Chromecast) thumbnailbar File size: Rozmiar pliku: File type: Typ pliku: unavailable Sorry, but this feature is not yet available on Windows. Niestety, ale ta funkcja nie jest jeszcze dostępna w systemie Windows. Feature unavailable Window title, informing user that the requested feature is currently not available Funkcja niedostępna wallpaper Warning: %1 module not activated Ostrzeżenie: Moduł %1 nie jest aktywny Warning: %1 not found Ostrzeżenie: Nie znaleziono %1 Set to which screens As in: Set wallpaper to which screens Ekrany do ustawienia Screen Used in wallpaper element Ekrany Set to which workspaces Enlightenment desktop environment handles wallpapers per workspace (different from screen) Obszary robocze do ustawienia Workspace: Enlightenment desktop environment handles wallpapers per workspace (different from screen) Obszar roboczy: Choose picture option picture option refers to how to format a pictrue when setting it as wallpaper Wybierz ustawienie obrazu Other Used as in: Other Desktop Environment Pozostałe Tool: Tool refers to a program that can be executed Narzędzie: Click to choose %1 %1 is a placeholder for the name of a desktop environment (plasma, xfce, gnome, etc.) Kliknij, aby wybrać %1 Set as Wallpaper Heading of wallpaper element ---------- Written on clickable button ---------- Window title Ustaw jako tło pulpitu The image will be set to all screens at the same time. Ten obraz zostanie ustawiony dla wszystkich ekranów jednocześnie. photoqt-2.5/lang/photoqt_pt_BR.ts000644 001750 001750 00000647142 14165351632 017511 0ustar00luspiluspi000000 000000 MainMenu Settings This is an entry in the main menu on the right. Please keep short! Configurações Slideshow This is an entry in the main menu on the right. Please keep short! Apresentação de slides setup This is an entry in the main menu on the right, used as in: setting up a slideshow. Please keep short! configuração quickstart This is an entry in the main menu on the right, used as in: quickstarting a slideshow. Please keep short! início rápido Face tagging mode This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Modo marcação facial About PhotoQt This is an entry in the main menu on the right. Please keep short! Sobre o PhotoQt Quit This is an entry in the main menu on the right. Please keep short! Sair Filter images in folder This is an entry in the main menu on the right. Please keep short! Filter images in folder Show/Hide metadata This is an entry in the main menu on the right. Please keep short! Show/Hide metadata Scale image This is an entry in the main menu on the right. Please keep short! Scale image Go to This is an entry in the main menu on the right, used as in: Go To some image. Please keep short! Ir para previous This is an entry in the main menu on the right, used as in: go to previous image. Please keep short! Anterior next This is an entry in the main menu on the right, used as in: go to next image. Please keep short! Avançar first This is an entry in the main menu on the right, used as in: go to first image. Please keep short! Primeiro last This is an entry in the main menu on the right, used as in: go to last image. Please keep short! Último Zoom This is an entry in the context menu, used as in: Zoom image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Zoom image. Please keep short! Zoom reset This is an entry in the context menu, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the context menu, used as in: Reset flip/mirror of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset flip/mirror of image. Please keep short! Redefinir Rotate This is an entry in the context menu, used as in: Rotate image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image. Please keep short! Rotacionar Click and drag to resize main menu Clique e arraste para redimensionar o menu principal Wallpaper This is an entry in the main menu on the right. Please keep short! Papel de parede Open file (browse images) This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Open file (browse images) left This is an entry in the context menu, used as in: Rotate image left. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image left. Please keep short! Esquerda right This is an entry in the context menu, used as in: Rotate image right. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image right. Please keep short! Direita Flip This is an entry in the context menu, used as in: Flip/Mirror image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image. Please keep short! Virar horizontal This is an entry in the context menu, used as in: Flip/Mirror image horizontally. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image horizontally. Please keep short! Horizontal vertical This is an entry in the context menu, used as in: Flip/Mirror image vertically. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image vertically. Please keep short! Vertical File This is an entry in the context menu, used to refer to the current file (specifically the file, not directly the image). Please keep short! ---------- This is an entry in the main menu on the right, used to refer to the current file (specifically the file, not directly the image). Please keep short! Arquivo rename This is an entry in the context menu, used as in: rename file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: rename file. Please keep short! Renomear copy This is an entry in the context menu, used as in: copy file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: copy file. Please keep short! Copiar move This is an entry in the context menu, used as in: move file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: move file. Please keep short! Mover delete This is an entry in the context menu, used as in: delete file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: delete file. Please keep short! Deletar Streaming (Chromecast) This is an entry in the context menu, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! ---------- This is an entry in the main menu on the right, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! Streaming (Chromecast) Copy to clipboard This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Copy to clipboard Show/Hide histogram This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Show/Hide histogram Open in default file manager This is an entry in the main menu on the right. Please keep short! Abrir no gerenciador de arquivos padrão Show log/debug messages This is an entry in the main menu on the right. Please keep short! Show log/debug messages Main Menu This is the heading of the main menu element ---------- Window title Menu principal Click here to go to the online manual for help regarding shortcuts, settings, features, ... Clique aqui para ir ao manual online por ajudar a respeito dos atalhos, configurações, características,... PQImageFormats ERROR getting default image formats This is the window title of an error message box ERRO! Obtendo formato de imagens padrão I tried hard, but I just cannot open even a read-only version of the database of default image formats. I tentei arduamente, porém, eu simplesmente não posso mesmo abrir uma versão somente leitura of banco de dados dos formatos de imagem padrão. Something went terribly wrong somewhere! Alguma deu terrivelmente errado em algum lugar! I tried hard, but I just cannot open the database of default image formats. I tentei arduamente, mas, i simplesmente não posso abrir o banco de dados dos formatos de imagem padrão. PQMetaData yes This string identifies that flash was fired, stored in image metadata Sim no This string identifies that flash was not fired, stored in image metadata Não No flash function This string refers to the absense of a flash, stored in image metadata Sem função flash strobe return light not detected This string refers to a flash mode, stored in image metadata Luz de retorno estroboscópica não detectada strobe return light detected This string refers to a flash mode, stored in image metadata luz de retorno estroboscópia detectada compulsory flash mode This string refers to a flash mode, stored in image metadata modo de flash obrigatório auto mode This string refers to a flash mode, stored in image metadata moto automático red-eye reduction mode This string refers to a flash mode, stored in image metadata modo de redução de olho vermelho return light detected This string refers to a flash mode, stored in image metadata luz de retorno detectada return light not detected This string refers to a flash mode, stored in image metadata luz de returno não detectada Invalid flash This string refers to a flash mode, stored in image metadata flash inválido Standard This string refers to a type of scene, stored in image metadata Padrão Landscape This string refers to a type of scene, stored in image metadata Paisagem Portrait This string refers to a type of scene, stored in image metadata Retrato Night Scene This string refers to a type of scene, stored in image metadata Cena noturna Invalid Scene Type This string refers to a type of scene, stored in image metadata Tipo de cena inválida Unknown This string refers to the light source stored in image metadata Desconhecido Daylight This string refers to the light source stored in image metadata Luz do dia Fluorescent This string refers to the light source stored in image metadata Flurescente Tungsten (incandescent light) This string refers to the light source stored in image metadata Tungstênio (luz incandescente) Flash This string refers to the light source stored in image metadata Flash Fine weather This string refers to the light source stored in image metadata Clima bom Cloudy Weather This string refers to the light source stored in image metadata Clima nublado Shade This string refers to the light source stored in image metadata Sombra Daylight fluorescent This string refers to the light source stored in image metadata Luz do dia fluorescente Day white fluorescent This string refers to the light source stored in image metadata Branco dia fluorescente Cool white fluorescent This string refers to the light source stored in image metadata Branco frio fluorescente White fluorescent This string refers to the light source stored in image metadata Branco fluorescente Standard light This string refers to the light source stored in image metadata Luz padrão Other light source This string refers to the light source stored in image metadata Outra fonte de luz Invalid light source This string refers to the light source stored in image metadata Fonte de luz inválida PQSettings ERROR getting database with default settings This is the window title of an error message box ERROR getting database with default settings I tried hard, but I just cannot open even a read-only version of the settings database. I tried hard, but I just cannot open even a read-only version of the settings database. Something went terribly wrong somewhere! Something went terribly wrong somewhere! ERROR opening database with default settings ERROR opening database with default settings I tried hard, but I just cannot open the database of default settings. I tried hard, but I just cannot open the database of default settings. PQShortcuts ERROR getting database with default shortcuts This is the window title of an error message box ERROR getting database with default shortcuts I tried hard, but I just cannot open even a read-only version of the shortcuts database. I tried hard, but I just cannot open even a read-only version of the shortcuts database. Something went terribly wrong somewhere! Something went terribly wrong somewhere! ERROR opening database with default settings ERROR opening database with default settings I tried hard, but I just cannot open the database of default shortcuts. I tried hard, but I just cannot open the database of default shortcuts. PQStartup SQLite error This is the window title of an error message box SQLite error You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! TabShortcuts about Close Fechar Current version: Versão atual: License: Licença: Open license Licença aberta Website: Site da web: Open website Abri site da web Contact: Contato: Send an email Enviar um email About Window title Sobre buttongeneric Ok This is a generic string written on clickable buttons - please keep short! Ok Cancel This is a generic string written on clickable buttons - please keep short! Cancelar Save This is a generic string written on clickable buttons - please keep short! Salvar Close This is a generic string written on clickable buttons - please keep short! Fechar commandlineparser Image Viewer Visualizador de imagem Image file to open. Arquivo de imagem a abrir. Make PhotoQt ask for a new file. Faça o PhotoQt perguntar por um novo arquivo. Shows PhotoQt from system tray. Mostra o PhotoQt na área de notificações. Hides PhotoQt to system tray. Command line option Oculta PhotoQt na área de notificações. Show/Hide PhotoQt. Mostrar/ocultar PhotoQt. Enable thumbnails. Command line option Habilita miniaturas. Disable thumbnails. Command line option Desabilitar miniaturas. Enable system tray icon. Command line option Habilitar ícone da bandeja do sistema. Disable system tray icon. Command line option Desabilitar o ícone da bandeja do sistema. Start PhotoQt hidden to the system tray. Command line option Iniciar PhotoQt oculto na área de notificações. Open standalone PhotoQt, allows for multiple instances but without remote interaction. Command line option Abrir PhotoQt sozinho, permite múltiplas instâncias, porém, sem interação remota. Simulate a shortcut sequence Command line option Simular a sequência de atalhos Switch on debug messages. Command line option Ligar mensagens de depuração. Switch off debug messages. Command line option Desligar mensagens de depuração. Export configuration to given filename. Command line option Exportar configuração to dados nome de arquivo. filename Command line option nome do arquivo Import configuration from given filename. Command line option Importar configuração de dado nome arquivo. Check the configuration and correct any detected issues. Command line option Check the configuration and correct any detected issues. Reset default configuration. Command line option Reset default configuration. facetagging Who is this? This question is asked in the face tagger to ask for the name of a tagged face Quem é esse? Enter name Digitar nome Click to exit face tagging mode Clique para sair de marcação facial Click to tag faces, changes are saved automatically Clique para marcar rostos, mudanças são salvas automaticamente File type does not support face tags. Tipo de arquivo não suporta tags de rosto. filedialog Backwards Prévio Up a level Subir um nível Forwards Adiante List subfolders lista de subpastas Enter fullscreen Entrar em tela-cheia Exit fullscreen Sair da tela-cheia Close Fechar Storage devices This is the category title of storage devices to open (like USB keys) in the element for opening files Dispositivos de armazenamento Detected storage devices on your system Dispositivos de armazenamento detectados no seu sistema no supported files/folders found Nenhum arquivos/pastas suportados foram encontrados Click and drag to favorites Clique e arraste para os favoritos # images # imagens Date: Data: Time: Tempo: File size: Tamanho do arquivo: File type: Tipo do arquivo: %1 image %1 Imagem %1 images %1 Imagens no folder added to favorites yet 'favorites' here refers to the list of favorite folders a user can set in the file dialog nenhuma pasta adicionada aos favoritos ainda Favorites This is the category title of user-set folders (or favorites) in the file dialog Favoritos Your favorites Seus Favoritos Show entry Mostrar entrada Hide entry Ocultar entrada Remove entry Remover entrada Hide hidden entries Escoder entradas ocultas Show hidden entries Mostrar entradas ocultas Load this folder Carregar esta pasta Load this file Carregar este arquivo Add to Favorites Adicionar aos favoritos Hide hidden files Ocultar arquivos ocultos Show hidden files Mostrar arquivos ocultos Hide thumbnails Esconder miniaturas Show thumbnails Mostrar miniaturas Hide preview Esconder prévia Show preview Mostrar prévia Standard This is the category title of user-set folders (or favorites) in the file dialog Padrão Some standard locations Alguns locais padrão Zoom: Zoom: Adjust font size of files and folders Ajustar tamanho da fonte de arquivos e pastas Zoom factor: Nível de Zoom: Sort by: Ordenar por: Name Nome Natural Name Nome natural Time modified Tempo modificado File size Tamanho do arquivo File type Tipo de arquivo reverse order Ordem reversa Choose by what to sort the files Escolher por qual ordenar os arquivos All supported images Todas as imagens suportadas Video files Arquivos de vídeo All files Todos os arquivos Choose which selection of files to show Escolher qual seleção de arquivos mostrar Remember loaded folder between sessions. Lembrar pasta carregada entre sessões. Switch between list and icon view Alternar entre visão de lista e ícone Hide standard locations Esconder locais padrão Show standard locations Mostrar locais padrão Hide favorite locations Esconder locais favoritos Show favorite locations Mostrar locais favoritos Hide storage devices Ocultar dispositivos de armazenamento Show storage devices Mostrar dispositivos de armazenamento File dialog Window title Arquivo de diálogo filemanagement Delete file? Window title Deletar arquivo? An error occured, file could not be deleted! Um erro ocorreu, arquivo não pode ser deletado! Move to trash Mover para a lixeira Delete permanently Deletar permanentemente Rename file Window title Renomear arquivo An error occured, file could not be renamed! Um erro ocorreu, arquivo não pode ser renomeado! Enter new filename Digitar novo nome de arquivo Save file as This is a title, similar to all the 'save as' options in many programs. ---------- Window title Salvar arquivo como An error occured, file could not be saved! An erro ocorreu, arquivo não pode ser salvo! Operation cancelled 'Operation' here is the operation of saving an image in a new format Operação cancelada Filter formats This is a short hint informing the user that here they can 'filter all the possible file formats' Filtrar formatos New filename Novo nome de arquivo Choose location and save file Escolher local e salvar o arquivo filter Filter images in current directory Filtrar imagens no diretório atual Enter here the terms you want to filter the images by. Separate multiple terms by a space. Digite aqui os termos pleos quais queira filtrar as imagens. Separar múltiplos termos por um espaço. If you want to filter by file extension, start the term with a dot. Se você quer filtrar por extensão de arquivo, inicie o termo com um ponto. Enter filter term Digitar termo do filtro Filter Written on a clickable button - please keep short ---------- Window title Filtrar Remove filter Written on a clickable button - please keep short Remover filtro histogram Histogram Window title Histograma Loading... As in: Loading the histogram for the current image Carregando... Click-and-drag to move. Used for the histogram. The version refers to the type of histogram that is available (colored and greyscale) Clicar e arrastar para mover. Right click to switch version. Clique com o botão direito para alternar a versão. imageprovider File failed to load, it does not exist! Falha ao carregar o arquivo, ele não existe! imgur Upload to imgur.com Window title Enviar para imgur.com anonymous Used as in: Upload image as anonymous user Anônimo Obtaining image url... Obtendo url da imagem... This seems to take a long time... Isto parece levar um tempão... There might be a problem with your internet connection or the imgur.com servers. Pode haver um problema com sua conexão de internet ou com os servidores de imgur.com. An Error occurred while uploading image! Um erro ocorreu no envio da imagem! Error code: código de erro: You do not seem to be connected to the internet... Você não parece estar conectado a internet... Unable to upload! Incapaz de enviar! Access Image Acessar imagem Click to open in browser Clique para abrir no navegador Copy to clipboard Copiar para a Área de transferência Delete Image Deletar imagem keymouse Alt Refers to a keyboard modifier Alt Ctrl Refers to a keyboard modifier Ctrl Shift Refers to a keyboard modifier Shift Page Up Refers to one of the keys on the keyboard Page Up Page Down Refers to one of the keys on the keyboard Page Down Meta Refers to the key that usually has the Windows symbol on it Meta Keypad Refers to the key that triggers the number block on keyboards Teclado numérico Escape Refers to one of the keys on the keyboard Escape Right Refers to one of the arrow keys on the keyboard Direita Left Refers to one of the arrow keys on the keyboard Esquerda Up Refers to one of the arrow keys on the keyboard Cima Down Refers to one of the arrow keys on the keyboard Baixo Space Refers to one of the keys on the keyboard Espaço Delete Refers to one of the keys on the keyboard Deletar Backspace Refers to one of the keys on the keyboard Barra de espaço Home Refers to one of the keys on the keyboard Home End Refers to one of the keys on the keyboard End Insert Refers to one of the keys on the keyboard Inserir Tab Refers to one of the keys on the keyboard Tab Return Return refers to the enter key of the number block - please try to make the translations of Return and Enter (the main button) different if possible! Retornar Enter Enter refers to the main enter key - please try to make the translations of Return (in the number block) and Enter different if possible! Enter Left Button Refers to a mouse button Botão esquerdo Right Button Refers to a mouse button Botão direito Middle Button Refers to a mouse button Botão do meio Wheel Up Refers to the mouse wheel Rolar para cima Wheel Down Refers to the mouse wheel Rolar para baixo East Refers to a direction of the mouse when performing a mouse gesture Leste South Refers to a direction of the mouse when performing a mouse gesture Sul West Refers to a direction of the mouse when performing a mouse gesture Oeste North Refers to a direction of the mouse when performing a mouse gesture Norte logging Logging Window title Logging enable debug messages enable debug messages copy to clipboard copy to clipboard save to file save to file metadata Click and drag to resize meta data Clique e arraste to redimensionar metadados File name Please keep string short! Nome do arquivo Dimensions The dimensions of the loaded image. Please keep string short! Dimensões Image #/# Used as in "Image 3/16". The numbers (position of image in folder) are added on automatically. Please keep string short! Imagem #/# File size Please keep string short! Tamanho do arquivo File type Please keep string short! Tipo do arquivo Make Exif image metadata: the make of the camera used to take the photo. Please keep string short! Criar Model Exif image metadata: the model of the camera used to take the photo. Please keep string short! Model Software Exif image metadata: the software used to create the photo. Please keep string short! Sofware Time Photo was Taken Exif image metadata: when the photo was taken. Please keep string short! O tempo que a foto foi tirada Exposure Time Exif image metadata: how long the sensor was exposed to the light. Please keep string short! Tempo de exposição Flash Exif image metadata: the flash setting when the photo was taken. Please keep string short! Flash Scene Type Exif image metadata: the specific scene type the camera used for the photo. Please keep string short! Tipo de cena Focal Length Exif image metadata: https://en.wikipedia.org/wiki/Focal_length . Please keep string short! Distância focal Metadata This is the heading of the metadata element ---------- Window title Metadados No File Loaded Nenhum arquivo carregado Click to open GPS position with online map Clique para abrir a posição da GPS com mapa online Keep Open Used as in: Keep the metadata element open even if the cursor leaves it Manter aberto Light Source Exif image metadata: What type of light the camera detected. Please keep string short! Fonte de luz Keywords IPTC image metadata: A description of the image by the user/software. Please keep string short! Palavras-chave Location IPTC image metadata: The CITY and COUNTRY the imge was taken in. Please keep string short! Localização Copyright IPTC image metadata. Please keep string short! Direitos atuais GPS Position Exif image metadata. Please keep string short! Posição de GPS F Number Exif image metadata: https://en.wikipedia.org/wiki/F-number . Please keep string short! Número F navigate Click and drag to move Clicar e arrastar para mover Navigate to previous image in folder Navegar para a imagem prévia na pasta Navigate to next image in folder Navegar para a seguinte imagem na pasta Show main menu Mostrar menu principal other Open a file to start Abrir um arquivo para iniciar Click anywhere to open a file Part of the message shown in the main view before any image is loaded Click anywhere to open a file Move your cursor to: Part of the message shown in the main view before any image is loaded Move your cursor to: RIGHT EDGE for the main menu Part of the message shown in the main view before any image is loaded, first option for where to move cursor to RIGHT EDGE for the main menu LEFT EDGE for the metadata Part of the message shown in the main view before any image is loaded, second option for where to move cursor to LEFT EDGE for the metadata BOTTOM EDGE to show the thumbnails Part of the message shown in the main view before any image is loaded, third option for where to move cursor to BOTTOM EDGE to show the thumbnails (once an image/folder is loaded) Part of the message shown in the main view before any image is loaded (once an image/folder is loaded) No matches found Used as in: No matches found for the currently set filter Nenhum resultado encotrado PhotoQt Image Viewer The window title of PhotoQt Visualizador de imagem PhotoQt popinpopout Merge into main interface Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface Mesclar na interface principal Move to its own window Tooltip of small button to show an element in its own window (i.e., not merged into main interface) Mover para sua própria janela quickinfo Click here to enter fullscreen mode Clique aqui para entrar no modo tela cheia Click here to exit fullscreen mode Clique aqui para sair do modo tela cheia Click here to close PhotoQt Clique aqui para fechar o PhotoQt Page %1 of %2 Used as in: Page 12/34 - please keep as short as possible Página %1 de %2 File %1 of %2 Used as in: File 12/34 - please keep as short as possible Arquivo %1 de %2 Connected to: This is followed by the name of the Chromecast streaming device currently connected to Connected to: Copy filename to clipboard Copy filename to clipboard Show counter Mostrar contador Hide counter Esconder contador Show file path Mostrar caminho de arquivo Hide file path Esconder caminho do arquivo Show file name Mostrar caminho do arquivo Hide file name Esconder nome do arquivo Show zoom level Mostrar nível de zoom Hide zoom level Esconder nível de zoom Click here to enter viewer mode Clique aqui para entrar no modo visualizador Hide central 'viewer mode' button Hide central 'viewer mode' button Click here to exit viewer mode Clique aqui para sair do modo visualizador Filter: Filtro: Show window buttons Mostrar botẽs da janela Hide window buttons Esconder botões da janela Some info about the current image and directory Algumas informações sobre imagem e diretório atuais Show central 'viewer mode' button Show central 'viewer mode' button Click to remove filter Clique para remover filtro scale Scale file Window title Arquivo de escala An error occured, file could not be scaled! Um erro ocorreu, arquivo não poder ser escalado! This file format cannot (yet) be scaled with PhotoQt! Este formato de arquivo não pode (ainda) ser escalado com PhotoQt! New width x height: Nova largura x altura: Preserve aspect ratio The aspect ratio refers to the ratio of the width to the height of the image, e.g., 16:9 for most movies Preservar raio de aspecto Quality: This refers to the quality to be used to scale the image Qualidade: Scale (create new file) Written on a clickable button Escalar (criar novo arquivo) Scale (change file in place) Written on a clickable button Escalar (alterar arquivo no local) De-/Increase width and height by 10% Diminuir/Aumentar largura e altura por 10% In-/Decrease quality by 5% Aumentar/Diminuir qualidade por 5% Select new file Selecionar novo arquivo settingsmanager interface settings manager tab title Interface Tab to control interface settings Aba para controlar configurações de interface image view settings manager tab title Visualização de imagem Tab to control how images are viewed Aba para controlar como imagens são visualizadas thumbnails settings manager tab title Miniaturas Tab to control the look and behaviour of thumbnails Aba para controlar o visual e comportamento das miniaturas metadata settings manager tab title Metadados Tab to control metadata settings Aba para controlar configurações de metadados file types settings manager tab title Tipos de arquivos Tab to control which file types PhotoQt should recognize Aba para controlar quais tipos de arquivos o PhotoQt deveria reconhecer shortcuts settings manager tab title Atalhos Tab to control which shortcuts are set Aba para controlar quais atalhos estão definidos advanced Written on button in setting manager. A click on this button opens a menu with some advanced actions. Avançado restore defaults Restaurar padrões import settings Importar configurações export settings Exportar configurações disable expert mode Desabilitar modo avançado enable expert mode Habilitar modo avançado Import of %1. This will replace your current settings with the ones stored in the backup. Importar de %1. Isso substituirá suas configurações atuais com aquelas armazenadas no backup. Do you want to continue? Você quer continuar? Save changes and exit Salvar mudanças e sair Exit and discard changes Sair e descartar mudanças Rename File Name of shortcut action Renomear arquivo Delete File Name of shortcut action Deletar arquivo Filetype settings Configurações de tipo de arquivo These settings govern which file types PhotoQt should recognize and open. Essas configurações governam quais tipos de arquivos PhotoQt deveria reconhecer e abrir. Not all file types might be available, depending on your setup and what library support was enabled at compile time Nem todos os tipos de arquivos estão disponíveis, dependendo da sua configuração e qual suporte de biblioteca estava habilitado na hora de compilação Image view settings Configurações de visualização de imagem These settings affect the viewing of images, how they are shown, in what order, how large a cache to use, etc. Essas configurações afetam a visualização das imagens, como elas são mostradas, em qual ordem, quão grande o cache para usar, etc. Some settings are only shown in expert mode. Algumas configurações são mostradas somente em modo experiente. Interface settings Configurações de interface These settings affect the interface in general, how the application looks like and behaves. This includes the background, some of the labels in the main view, which elements are to be shown in their own window, and others. Essas configurações afetam a interface em geral, como a aplicação aparenta e se comporta. Isso inclui o background, alguns dos rótulos na visão principal, quais elementos estão para ser mostrados in sua própria janela e outras. Metadata settings Configurações de metadados These settings affect the metadata element, what information it should show and some of its behavior. Essas configurações afetam o elemento de metadados, quais informações ele deverá mostrar e algum dos seus comportamentos. Shortcuts Atalhos Navigation A shortcuts category: navigation Navegação Filter images in folder Name of shortcut action Filtrar imagens na pasta Next image Name of shortcut action Imagem seguinte Previous image Name of shortcut action Imagem prévia Go to first image Name of shortcut action Name of shortcut action Ir para primeira imagem Go to last image Name of shortcut action Ir para última imagem Enter viewer mode Name of shortcut action Entrar no modo visualizador Show quick navigation buttons Name of shortcut action Mostrar botões de navegação rápidos Close window (hides to system tray if enabled) Name of shortcut action Fechar janela (ocultar para a bandeja do sistema se habilitado) Quit PhotoQt Name of shortcut action Sair PhotoQt Image A shortcuts category: image manipulation Imagem Zoom In Name of shortcut action Aproximar Zoom Out Name of shortcut action Afastar Zoom to Actual Size Name of shortcut action Dimensionar para o tamanho real Reset Zoom Name of shortcut action Redefinir Zoom Rotate Right Name of shortcut action Girar à Direita Rotate Left Name of shortcut action Girar à Esquerda Reset Rotation Name of shortcut action Redefinir Rotação Flip Horizontally Name of shortcut action Virar Horizontalmente Flip Vertically Name of shortcut action Virar Verticalmente Scale Image Name of shortcut action Dimensionar imagem Play/Pause animation/video Name of shortcut action Reproduzir/Pausar animação/Vídeo Hide/Show face tags (stored in metadata) Name of shortcut action Esconder/Mostrar etiquetas faciais (armazenadas nos metatados) Tag faces (stored in metadata) Name of shortcut action Etiquetas faciais (Armazenadas nos metadados) File A shortcuts category: file management Arquivo Delete File (without confirmation) Name of shortcut action Deletar Arquivo (Sem confirmação) Copy File to a New Location Name of shortcut action Copiar Arquivo para um local novo Move File to a New Location Name of shortcut action Mover arquivo para um local novo Copy Image to Clipboard Name of shortcut action Copiar imagem para área de transferência Other A shortcuts category: other functions Outro Hide/Show main menu Name of shortcut action Esconder/Mostrar menu principal Hide/Show metadata Name of shortcut action Esconder/Mostrar metadado Keep metadata opened Name of shortcut action Manter metadado aberto Hide/Show thumbnails Name of shortcut action Esconder/Mostrar miniaturas Show Settings Name of shortcut action Mostrar configurações Start Slideshow Name of shortcut action Iniciar apresentação de slides Start Slideshow (Quickstart) Name of shortcut action Iniciar apresentação de slides (Início rápido) About PhotoQt Name of shortcut action Sobre PhotoQt Set as Wallpaper Name of shortcut action Definir como papel de parede Show Histogram Name of shortcut action Mostrar Histograma Upload to imgur.com (anonymously) Name of shortcut action Enviar imagem para imgur.com (anonimamente) Upload to imgur.com user account Name of shortcut action Enviar imagem para conta de usuário imgur.com Stream content to Chromecast device Name of shortcut action Stream content to Chromecast device Show log/debug messages Name of shortcut action Show log/debug messages External A shortcuts category: external shortcuts Externo %f = filename including path, %u = filename without path, %d = directory containing file Please leave the three placeholders (%f, %u, %d) as is. %f = nome do arquivo incluindo caminho, %u = nome do arquivo sem caminho, %d = diretório contendo arquivo Thumbnails settings Configurações de miniaturas These settings affect the thumbnails shown, by default, along the bottom edge of the screen. This includes their look, behavior, and the user's interaction with them. Essas configurações afetam miniaturas mostrada, por padrão, ao longo da borda inferior da tela. Isso inclui sua aparência, comportamento, e o usuário%apos;s interação com elas Settings Manager Window title Gerente de configurações Here the shortcuts can be managed. Below you can add a new shortcut for any one of the available actions, both key combinations and mouse gestures are supported. Aqui os atalhos podem ser geridos. Abaixo, você pode adicionar um atalho novo para qualquer uma das ações disponível, ambas combinações de teclas e gestos do mouse são suportados. You can also set the same shortcut for multiple actions or multiple times for the same action. All actions for a shortcut will be executed sequentially, allowing a lot more flexibility in using PhotoQt. Você também pode definir o atalho para múltiplas ações ou múltiplas vezes para a mesma ação. Todas as ações para um atalho serão executadas sequencialmente, permitindo muito mais flexibilidade no uso do PhotoQt. Open file (browse images) Name of shortcut action Open file (browse images) Save image in another format Name of shortcut action Salvar imagem em outro formato Restore defaults As in 'restore the default settings and/or file formats and/or shortcuts'. Please keep short! Restaurar padrões Here you can restore the default configuration of PhotoQt. You can choose to restore any combination of the following three categories. Aqui você pode restaurar a configuração padrão do PhotoQt. Você pode escolher restaurar qualquer combinação das três categorias seguintes. Restore default settings Restaurar configurações padrão Restore default file formats Restaurar formatos de arquivos padrão Restore default shortcuts Restaurar atalhos Padrão settingsmanager_filetypes These are some additional settings for opening archives. Estas são algumas configurações adicionais para abertura de arquivos. use external tool: unrar used as label for checkbox Usar ferramenta externa: unrar These are some additional settings for showing PDFs. Essas são algumas configurações adicionais para mostrar PDFs. Quality: the quality setting to be used when loading PDFs Qualidade: These are some additional settings for playing videos. Essas são algumas configurações adicionais para reproduzir vídeos. Autoplay Used as setting for video files (i.e., autoplay videos) Reprodução automática Loop Used as setting for video files (i.e., loop videos) Repetir Select tool for creating video thumbnails Tooltip shown for combobox for selectiong video thumbnailer Selecionar ferramentar para criar miniaturas de vídeo images This is a category of files PhotoQt can recognize: any image format Imagens compressed files This is a category of files PhotoQt can recognize: compressed files like zip, tar, cbr, 7z, etc. Arquivos comprimidos documents This is a category of files PhotoQt can recognize: documents like pdf, txt, etc. Documentos videos This is a type of category of files PhotoQt can recognize: videos like mp4, avi, etc. Vídeos Enable As in: "Enable all formats in the seleted category of file types" Habilitar Disable As in: "Disable all formats in the seleted category of file types" Desabilitar Enable everything As in "Enable every single file format PhotoQt can open in any category" Habilitar tudo Currently there are %1 file formats enabled The %1 will be replaced with the number of file formats, please don't forget to add it. Atualmente essas são %1 formatos de arquivos habilitados Search by description or file ending Procurar por descrição ou extensão do arquivo Search by image library or category Procurar por biblioteca de imagens ou categoria File endings: Extensão do arquivo: settingsmanager_imageview animation A settings title referring to the in/out animation of images Animação What type of animation to show, and how fast. This is referring to the in/out animation of images Que tipo de animação mostrar, e quão rápido. type of animation This is referring to the in/out animation of images Tipo de animação opacity This is referring to the in/out animation of images Opacidade along x-axis This is referring to the in/out animation of images Ao longo do eixo x along y-axis This is referring to the in/out animation of images Ao longo do eixo y no animation This is referring to the in/out animation of images Sem animação long animation This is referring to the in/out animation of images Animação longa fit in window A settings title referring to whether to fit images in window Encaixar na janela Zoom smaller images to fill the full window width and/or height. Dar zoom in imagens menores para preencher a largura e/ou altura da janela. fit smaller images in window Encaixar imagens menores na janela interpolation A settings title referring to the type of interpolation to use for small images Interpolação PhotoQt tries to improve the rendering of images that are shown much larger than they are (i.e., zoomed in a lot). For very tiny images that are zoomed in quite a lot, this can result in the loss of too much information in the image. Thus a threshold can be defined here, images that are smaller than this threshold are shown exactly as they are without any smoothing or other attempts to improve them. PhotoQt tenta aprimorar a renderização das imagens que são mostradas muito maiores do que elas são (ou seja, aproximadas um monte). Para imagens muito pequenas que são muito aproximadas, isto pode resultar em perda de muita informação na imagem. Portanto, um limite pode ser definido aqui, imagem que são menores do que este limite são mostradas exatamente como são sem qualquer suavização ou outras tentativas de melhorá-las. Do not use any interpolation algorithm for very small images A type of interpolation to use for small images Não use qualquer algoritmo de interpolação para imagens muito pequenas threshold: The threshold (in pixels) at which to switch interpolation algorithm Limite: remember per session A settings title Lembrar por sessão By default, PhotoQt resets the zoom, rotation, flipping/mirroring and position when switching to a different image. For certain tasks, for example for comparing two images, it can be helpful to keep these properties. Por Padrão, o PhotoQt redefine o zoom, rotação, virar/espelhar e posição ao alterar para uma imagem diferente. Para certas tarefas, por exemplo, ao comparar duas imagens, elas podem ser úteis para manter essas propriedades. remember zoom, rotation, flip, position Lembrar zoom, rotação, virar, posição left mouse button A settings title Botão esquerdo do mouse The left button of the mouse is by default used to move the image around. However, this prevents the left mouse button from being used for shortcuts. O botão esquerdo do mouse é por padrão utilizado para mover a imagem ao redor, Contudo, isto preveni o botão esquerdo do mouse de ser usado para atalhos. use left button to move image Usar botão esquerdo para mover imagem looping A settings title for looping through images in folder Repetição What to do when the end of a folder has been reached: stop or loop back to first image in folder. O que fazer quando o final de uma pastar for alcançado: parar ou voltar para primeira imagem na pasta. loop through images in folder Percorrer imagens na pasta margin A settings title about the margin around the main image Margem How much space to show between the main image and the application border. Quanto espaço mostrar entre a imagem principal e a borda do aplicativo. none As in: no margin between the main image and the window edges Nenhum pixmap cache A settings title Cache pixmap Size of runtime cache for fully loaded images. This cache is cleared when the application quits. Tamanho do cache de execução para imagens totalmente carregadas. Esse cache é limpado quando a aplicação fecha. sort images by A settings title Ordenar imagens por Sort all images in a folder by the set property. Ordenar todas imagens em uma pasta pela propriedade de conjunto. natural name A criteria for sorting images Nome natural name A criteria for sorting images Nome time A criteria for sorting images Tempo size A criteria for sorting images Tamanho type A criteria for sorting images Tipo ascending Sort images in ascending order Ascendente descending Sort images in descending order Decrescente transparency marker A settings title Marcador de transparência Show checkerboard pattern behind transparent areas of (half-)transparent images. Mostrar padrão de tabuleiro de damas atrás de áreas transparentes of imagens (semi)transparentes. show checkerboard pattern Setting for how to display images that have transparent areas, whether to show checkerboard pattern in that area or not Mostrar padrão tabuleiro de damas zoom speed A settings title, the zoom here is the zoom of the main image Velocidade do zoom Images are zoomed at a relative speed as specified by this percentage. A higher value means faster zoom. Imagens são aproximadas em uma velocidade relativa como especificado por esta porcentagem. Um valor mais alto significa zoom mais rápido. super slow This refers to the zoom speed, the zoom here is the zoom of the main image Super lento very fast This refers to the zoom speed, the zoom here is the zoom of the main image Muito rápido settingsmanager_interface background A settings title referring to the background of PhotoQt (behind any image/element) Plano de fundo What type of background is to be shown. The background here refers to the area behind the main image and any element in PhotoQt, the very back. Que tipo de plano de fundo é para ser mostrado. (half-)transparent background How the background of PhotoQt should be Plano de fundo (semi)transparente faked transparency How the background of PhotoQt should be Transparência falsa custom background image How the background of PhotoQt should be Imagem de plano de fundo personalizada Click to select an image Tooltip for a mouse area, a click on which opens a file dialog for selecting an image Clique para selecionar uma imagem scale to fit If an image is set as background of PhotoQt this is one way it can be handled. Redimensionar para encaixar scale and crop to fit If an image is set as background of PhotoQt this is one way it can be handled. Redimensionar e cortar para encaixar stretch to fit If an image is set as background of PhotoQt this is one way it can be handled. Esticar para encaixar center image If an image is set as background of PhotoQt this is one way it can be handled. Centralizar imagem tile image If an image is set as background of PhotoQt this is one way it can be handled. Imagem telha All Images This is a category in a file dialog for selecting images used as in: All images supported by PhotoQt. Todas imagens Video This is a category in a file dialog for selecting images used as in: Video files supported by PhotoQt. Vídeo empty area around image A settings title Área vazia em torno da imagem How to handle clicks on empty area around images. Como lidar com cliques sobre áreas vazias em torno de imagens. close on click Used as in: Close PhotoQt on click on empty area around main image Fechar com clique Close PhotoQt when click occurred on empty area around image Close PhotoQt when click occurred on empty area around image navigate on click Used as in: Close PhotoQt on click on empty area around main image navigate on click Go to next/previous image if click occurred in left/right half of window Go to next/previous image if click occurred in left/right half of window size of 'hot edge' A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) Tamanho de %apos;hot edge%apos; Adjusts the sensitivity of the edges for showing elements like the metadata and main menu elements. Ajusta a sensitividade das bordas para mostrar elementos como os metadados e elementos do menu principal. small used as in: small area Pequeno large used as in: large area Grande language A settings title. Idioma Change the language of the application. Mudar o idioma do aplicativo. mouse wheel sensitivity A settings title. Sensitividade da roda do mouse How sensitive the mouse wheel is for shortcuts, etc. Quão sensitivo a roda do mouse é para atalhos, etc. not sensitive The sensitivity here refers to the sensitivity of the mouse wheel Não sensitivo very sensitive The sensitivity here refers to the sensitivity of the mouse wheel Muito sensitivo overlay color A settings title. Cor de sobreposição This is the color that is shown on top of any background image/... Isto é a colo que é mostrada no topo de qualquer imagem de fundo/... click to change color Clique para mudar cor please choose a color Por favor escolha a cor pop out elements A settings title. The popping out that is talked about here refers to the possibility of showing any element in its own window (i.e., popped out). Destacar elementos Here you can choose for most elements whether they are to be shown integrated into the main window or in their own, separate window. Aqui você pode escolher pela maioria do elementos, se eles estão para serem mostrado integrados dentro da janela principal ou em sua própria janela separada. File dialog Used as identifying name for one of the elements in the interface Diálogo de arquivo keep open Manter aberto Settings Manager Used as identifying name for one of the elements in the interface Gerente de configurações Main Menu Used as identifying name for one of the elements in the interface Menu Principal Metadata Used as identifying name for one of the elements in the interface Metadados Histogram Used as identifying name for one of the elements in the interface Histograma Scale Used as identifying name for one of the elements in the interface Escala Slideshow Settings Used as identifying name for one of the elements in the interface Configurações de Apresentação de Slides Slideshow Controls Used as identifying name for one of the elements in the interface Controles de Apresentação de Slides Rename File Used as identifying name for one of the elements in the interface Renomear arquivo Delete File Used as identifying name for one of the elements in the interface Deletar arquivo Save File As Used as identifying name for one of the elements in the interface Salvar arquivo como About Used as identifying name for one of the elements in the interface Sobre Imgur Used as identifying name for one of the elements in the interface imgur Wallpaper Used as identifying name for one of the elements in the interface Papel de parede Filter Noun, not a verb. Used as identifying name for one of the elements in the interface Filtro labels A settings title. Rótulos The labels are shown along the top edge of the main view. Os rótulos são mostrados ao longo da borda superior da visão principal. show labels checkbox in settings manager Mostrar rótulos counter refers to the image counter (i.e., image #/# in current folder) Contador filepath show filepath in the labels. This is specifically the filePATH and not the filename. Caminho do arquivo filename show filename in the labels. This is specifically the fileNAME and not the filepath. Nome do arquivo current zoom level Nível de zoom atual current rotation angle Ângulo de rotação atual window buttons the window buttons are some window management buttons like: close window, maximize, fullscreen Botões da janela size of window buttons the size of the window buttons (the buttons shown in the top right corner of the window) Tamanho do botões da janela remember last image A settings title. Lembrar última imagem At startup the image loaded at the end of the last session can be automatically reloaded. Na inicialização, a imagem carregada no fim da última sessão pode ser carregada automaticamente. re-open last loaded image at startup Reabrir última imagem carregada na inicialização tray icon A settings title. Ícone da bandeja If a tray icon is to be shown and, if shown, whether to hide it or not. Se um ícone da bandeja está para ser mostrado, e, se mostrado, seja para escondê-lo ou não. no tray icon Sem ícone da bandeja hide to tray icon Esconder ícone da bandeja show tray icon but don't hide to it Mostrar ícone da bandeja, porém, não%apos; escondê-lo window management A settings title. Gerenciamento da janela Some basic window management properties. Algumas propriedades básicas de gerenciamento de janelas. manage window through quick info labels Gerenciar janela através de rótulos de inforamações rápidas save and restore window geometry Salvar e restaurar geometria da janela keep above other windows Manter acima de outras janelas window mode A settings title. Modo janela Whether to run PhotoQt in window mode or fullscreen. Seja executar PhotoQt em modo janela ou tela cheia. run in window mode Rodar em modo janela show window decoration Mostrar decoração da janela custom main menu entries A settings title. Entradas do menu principal customizadas Add some custom entries in the main menu on the right. Adicionar algumas entradas customizada no menu principal à direita. what string to show in main menu this is the placeholder text inside of a text box telling the user what text they can enter here Que fragmento mostrar no menu principal which command to execute this is the placeholder text inside of a text box telling the user what text they can enter here Que comando executar quit Keep string short! Used on checkbox for contextmenu, refers to option to close PhotoQt after respective command has been executed. Sair move entry down contextmenu settings: used as in 'move this entry down in the list of all entries' Mover entrada para baixo move entry up contextmenu settings: used as in 'move this entry up in the list of all entries' Mover entrada para cima delete entry contextmenu settings: used as in 'delete this entry out of the list of all entries' Deletar entrada quick navigation A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) Navegação rápida Some buttons to help with quick navigation. These can come in handy when, e.g., operating with a touch screen. Alguns botões para ajudar com navegação rápida. Estes podem vir a ser úteis quando, por exemplo, utilizar com uma tela de toque. Show quick navigation buttons Mostrar botões de navegação rápida settingsmanager_metadata face tags A settings title. The face tags are labels that can be shown (if available) on faces including their name. Etiquetas de rosto Whether to show face tags (stored in metadata info). The face tags are labels that can be shown (if available) on faces including their name. Seja para mostrar etiquetas de rosto (armazenadas em informações de metadados). enable Habilitiar face tags - border A settings title. The face tags are labels that can be shown (if available) on faces including their name. Etiquetas de rosto - borda If and what style of border to show around tagged faces. Se e qual estilo de borda mostrar ao redor de rostos etiquetados. show border The border here is the border around face tags. Mostrar borda click to change color Clique para mudar cor please choose a color Por favor escolha uma cor face tags - font size A settings title. The face tags are labels that can be shown (if available) on faces including their name. Etiquetas de rosto - tamanho da fonte The font size of the name labels. The name labels here are the labels with the name used for the face tags. O tamanho da fonte dos rótulos de nome. face tags - visibility A settings title. The face tags are labels that can be shown (if available) on faces including their name. Etiquetas de rotos - visibilidade When to show the face tags and for how long. Quando mostrar as etiquetas de rosto e por quanto tempo. hybrid mode A mode for showing face tags. Modo híbrido always show all A mode for showing face tags. Sempre mostrar tudo show one on hover A mode for showing face tags. Mostrar um ao passar o mouse por cima show all on hover A mode for showing face tags. Mostrar todos ao passar o mouse por cima GPS online map A settings title. Mapa online de GPS Which map service to use when a GPS position is clicked. Que serviço de mapa usar quando uma posição de GPS é selecionada. hot edge A settings title. The hot edge refers to the area along the left edge of PhotoQt where the mouse cursor triggers the visibility of the metadata element. Borda ativa Show metadata element when the mouse cursor is close to the window edge Mostrar elemento de metadados quando o cursor do mouse está perto a borda da janela meta information A settings title. Meta informação Which meta information to extract and display. Que meta informação extrair e exibir. file name Part of the meta information about the current image. Nome do arquivo file type Part of the meta information about the current image. Tipo do arquivo file size Part of the meta information about the current image. Tamanho do arquivo image #/# Part of the meta information about the current image. Imagem #/# dimensions Part of the meta information about the current image. Dimensões copyright Part of the meta information about the current image. Direito autoral exposure time Part of the meta information about the current image. Tempo de exposição flash Part of the meta information about the current image. Flash focal length Part of the meta information about the current image. Comprimento focal f-number Part of the meta information about the current image. Número f GPS position Part of the meta information about the current image. Posição do GPS keywords Part of the meta information about the current image. Palavras-chave light source Part of the meta information about the current image. Fonte de luz location Part of the meta information about the current image. Localização make Part of the meta information about the current image. Criar model Part of the meta information about the current image. Modelo scene type Part of the meta information about the current image. Tipo de cena software Part of the meta information about the current image. Software time photo was taken Part of the meta information about the current image. Foto do tempo foi tirada opacity A settings title. Opacidade The opacity of the metadata element. A opacidade do elementos dos metatados. auto-rotation A settings title. Auto-rotação Automatically rotate images based on metadata information. Rotacionar automaticamente imagens baseados em informações de metadados. settingsmanager_shortcuts quit checkbox in shortcuts settings, used as in: quit PhotoQt. Please keep as short as possible! Sair Click to change shortcut Clique para mudar atalho Click to delete shortcut Clique para deletar atalho no shortcut set Sem conjunto de atalho Click to manage shortcut Clique para gerenciar atalho add new Used as in 'add new shortcut'. Please keep short! Adicionar novo Add New Shortcut Adicionar novo Atalho Perform a mouse gesture here or press any key combo Executar a movimento de mouse aqui ou pressionar qualquer combinação de teclas Add new Used on button as in 'add new external shortcut'. Please keep short! Adicionar novo settingsmanager_thumbnails thumbnail cache A settings title. cache de miniatura Thumbnails can be cached (permanently), following the freedesktop.org standard. Miniaturas podem ser armazenadas (permanentemente), seguindo o padrão freedesktop.org. enable Habilitar keep in center A settings title. Used as in: Keep thumbnail for current main image in center. Manter no centro Keep currently active thumbnail in the center of the screen Manter miniatura ativa atualmente no centro da tela center on active thumbnail Centralizar na miniatura ativa disable thumbnails Desabilitar miniaturas Disable thumbnails in case no thumbnails are desired whatsoever. Desabilitar miniaturas no caso de miniaturas não serem desejadas de jeito nenhum. disable all thumbnails Desabilitar todas miniaturas filename label A settings title. The filename label here is the one that is written on thumbnails. Rótulo de nome de arquivo Show the filename on a small label on the thumbnail image. Mostrar o novo de arquivo em um rótulo pequeno a imagem de miniatura. font size: Tamanho da fonte: filename-only A settings title. This refers to using only the filename as thumbnail and no actual image. Somente nome arquivo Show only the filename as thumbnail, no actual image. Mostrar somente o nome do arquivo como miniatura, sem imagem atual. lift up A settings title. This refers to the lift up of thumbnail images when active/hovered. Erguer How many pixels to lift up thumbnails when either hovered or active. Quantos pixel para erguer miniaturas quando, ou pairado ou ativo. position A settings title referring to the position of the thumbnails (upper or lower edge of PhotoQt). Posição Which edge to show the thumbnails on, upper or lower edge. Que borda mostrar as miniaturas nas bordas superior e inferior. upper edge The upper edge of PhotoQt Borda superior lower edge The lower edge of PhotoQt Borda inferior size A settings title referring to the size of the thumbnails. Tamanho How large (or small) the thumbnails should be. Quão grande (ou pequeno) as miniaturas deveriam ser. spacing A settings title referring to the spacing of thumbnails, i.e., how much empty space to have between each. Espaçamento How much space to show between the thumbnails. Quanto espaço para mostrar entre as miniaturas. threads A settings title, as in: How many threads to use to generate thumbnails. Tópicos How many threads to use to create thumbnails. Too many threads can slow down your computer! Quantos tópicos usar para criar miniaturas. Muitos tópicos podem desacelerar seu computador! Threads: Tópicos: visibility A settings title referring to the visibility of the thumbnails, i.e., if and when to hide them. Visibilidade If and how to keep thumbnails visible Se e como manter miniaturas visíveis hide when not needed This is talking about the thumbnails. Esconder quando não necessário never hide This is talking about the thumbnails. Nunca esconder hide when zoomed in This is talking about the thumbnails. Esconder quando ampliado exclude folders Excluir pastas Exclude the specified folders and all of its subfolders from any sort of caching and preloading. Excluir as pastas específicas e todas suas subpastas de qualquer tipo de armazenamento e pré-carregamento. Do not cache these folders: Não armazenar essas pastas: Add folder Written on a button Adicionar pasta One folder per line Uma pasta por linha slideshow Click to go to the previous image Clique para ir para a imagem prévia Click to pause slideshow Clique para pausar a apresentação de slides Click to play slideshow Clique para reproduzir apresentação de slides Click to go to the next image Clique para ir para próxima imagem Sound volume: Volume do som: Click to quit slideshow Clique para sair da apresentação de slides Slideshow settings Window title Configurações de apresentação de slides interval The interval between images in a slideshow Intervalo animation This is referring to the in/out animation of images during a slideshow Animação opacity This is referring to the in/out animation of images during slideshows Opacidade along x-axis This is referring to the in/out animation of images during slideshows Ao longo do eixo x along y-axis This is referring to the in/out animation of images during slideshows Ao longo do eixo y animation speed The speed of transitioning from one image to another during slideshows Velocidade de animação immediately, without animation This refers to a speed of transitioning from one image to another during slideshows Imediatamente, sem animação pretty fast animation This refers to a speed of transitioning from one image to another during slideshows Animação muita rápida not too fast and not too slow This refers to a speed of transitioning from one image to another during slideshows Não muito rápido e não muito devagar very slow animation This refers to a speed of transitioning from one image to another during slideshows Animação muita lenta current speed This refers to the currently set speed of transitioning from one image to another during slideshows Velocidade atuaal looping Repetição loop over all files Loop over all images during slideshows Repetir todos os arquivos shuffle during slideshows shuffle the order of all images Embaralhar shuffle all files during slideshows shuffle the order of all images Embaralhar todos os arquivos subfolders also include images in subfolders during slideshows Subpastas include images in subfolders also include images in subfolders during slideshows Incluir imagens nas subpastas quickinfo What to do with the quick info during slideshows Informação rápida hide quickinfo What to do with the quick info during slideshows Esconder informação rápída music The music that is to be played during slideshows Música enable music Enable music to be played during slideshows Habilitar música no file selected Nenhum arquivo selecionado Click to select music file Clique para selecionar o arquivo de música Click to change music file Clique para mudar o arquivo de música Common music file formats Formatos de arquivos musicais comuns All Files Todos os arquivos Start slideshow Written on a clickable button Iniciar apresentação Slideshow controls Window title Controles de apresentação de slides startup Edit with %1 Used as in 'Edit with [application]'. %1 will be replaced with application name. Editar com %1 Open in %1 Used as in 'Open with [application]'. %1 will be replaced with application name. Abrir com %1 streaming Scan for devices Used as tooltip for button that starts a scan for Chromecast streaming devices in the local network Scan for devices Disconnect Written on button, as in 'Disconnect from connected Chromecast streaming device' Disconnect Connect Written on button, as in 'Connect to Chromecast streaming device' Connect searching for devices... status text while searching for chromecast streaming devices in the local network searching for devices... no devices found result of scan for chromecast streaming devices no devices found Streaming (Chromecast) Window title Streaming (Chromecast) thumbnailbar File size: Tamanho do arquivo: File type: Tipo de arquivo: unavailable Sorry, but this feature is not yet available on Windows. Desculpe, mas este recurso ainda não está no Windows. Feature unavailable Window title, informing user that the requested feature is currently not available Recurso indisponível wallpaper Warning: %1 module not activated Aviso: %1 módulo não ativado Warning: %1 not found Aviso: %1 não encontrado Set to which screens As in: Set wallpaper to which screens Configurar para quais telas Screen Used in wallpaper element Tela Set to which workspaces Enlightenment desktop environment handles wallpapers per workspace (different from screen) Configurar para quais áreas de trabalho Workspace: Enlightenment desktop environment handles wallpapers per workspace (different from screen) Área de trabalho: Choose picture option picture option refers to how to format a pictrue when setting it as wallpaper Escolher opção de foto Other Used as in: Other Desktop Environment Outro Tool: Tool refers to a program that can be executed Ferramenta: Click to choose %1 %1 is a placeholder for the name of a desktop environment (plasma, xfce, gnome, etc.) Clique para escolher %1 Set as Wallpaper Heading of wallpaper element ---------- Written on clickable button ---------- Window title Definir como papel de parede The image will be set to all screens at the same time. A imagem será definida para todas delas ao mesmo tempo. photoqt-2.5/lang/photoqt_pt_PT.ts000644 001750 001750 00000644510 14165351632 017525 0ustar00luspiluspi000000 000000 MainMenu Settings This is an entry in the main menu on the right. Please keep short! Definições Slideshow This is an entry in the main menu on the right. Please keep short! Apresentação setup This is an entry in the main menu on the right, used as in: setting up a slideshow. Please keep short! configuração quickstart This is an entry in the main menu on the right, used as in: quickstarting a slideshow. Please keep short! arranque rápido Face tagging mode This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Modo de etiquetas no rosto About PhotoQt This is an entry in the main menu on the right. Please keep short! Acerca de PhotoQt Quit This is an entry in the main menu on the right. Please keep short! Sair Filter images in folder This is an entry in the main menu on the right. Please keep short! Filtrar imagens na pasta Show/Hide metadata This is an entry in the main menu on the right. Please keep short! Mostrar/ocultar meta-dados Scale image This is an entry in the main menu on the right. Please keep short! Ajustar imagem Go to This is an entry in the main menu on the right, used as in: Go To some image. Please keep short! Ir para previous This is an entry in the main menu on the right, used as in: go to previous image. Please keep short! anterior next This is an entry in the main menu on the right, used as in: go to next image. Please keep short! seguinte first This is an entry in the main menu on the right, used as in: go to first image. Please keep short! primeira last This is an entry in the main menu on the right, used as in: go to last image. Please keep short! última Zoom This is an entry in the context menu, used as in: Zoom image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Zoom image. Please keep short! Ampliação reset This is an entry in the context menu, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the context menu, used as in: Reset flip/mirror of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset flip/mirror of image. Please keep short! repor Rotate This is an entry in the context menu, used as in: Rotate image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image. Please keep short! Rotação Click and drag to resize main menu Clique e arraste para redimensionar o menu Wallpaper This is an entry in the main menu on the right. Please keep short! Papel de parede Open file (browse images) This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Abrir ficheiro (explorar imagens) left This is an entry in the context menu, used as in: Rotate image left. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image left. Please keep short! esquerda right This is an entry in the context menu, used as in: Rotate image right. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image right. Please keep short! direita Flip This is an entry in the context menu, used as in: Flip/Mirror image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image. Please keep short! Inversão horizontal This is an entry in the context menu, used as in: Flip/Mirror image horizontally. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image horizontally. Please keep short! horizontal vertical This is an entry in the context menu, used as in: Flip/Mirror image vertically. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image vertically. Please keep short! vertical File This is an entry in the context menu, used to refer to the current file (specifically the file, not directly the image). Please keep short! ---------- This is an entry in the main menu on the right, used to refer to the current file (specifically the file, not directly the image). Please keep short! Ficheiro rename This is an entry in the context menu, used as in: rename file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: rename file. Please keep short! renomear copy This is an entry in the context menu, used as in: copy file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: copy file. Please keep short! copiar move This is an entry in the context menu, used as in: move file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: move file. Please keep short! mover delete This is an entry in the context menu, used as in: delete file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: delete file. Please keep short! apagar Streaming (Chromecast) This is an entry in the context menu, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! ---------- This is an entry in the main menu on the right, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! Streaming (Chromecast) Copy to clipboard This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Copiar para área de transferência Show/Hide histogram This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Mostrar/ocultar histograma Open in default file manager This is an entry in the main menu on the right. Please keep short! Abrir no gestor de ficheiros Show log/debug messages This is an entry in the main menu on the right. Please keep short! Mostrar registos/mensagens de depuração Main Menu This is the heading of the main menu element ---------- Window title Menu principal Click here to go to the online manual for help regarding shortcuts, settings, features, ... Clique aqui para aceder ao manual online e saber mais sobre atalhos, definições, funcionalidades... PQImageFormats ERROR getting default image formats This is the window title of an error message box Erro ao obter os formatos de imagem I tried hard, but I just cannot open even a read-only version of the database of default image formats. A aplicação tentou mas não conseguiu abrir uma versão da base de dados dos formatos padrão (nem mesmo no modo de leitura). Something went terribly wrong somewhere! Ocorreu algo de errado aqui! I tried hard, but I just cannot open the database of default image formats. A aplicação tentou mas não conseguiu abrir uma versão da base de dados dos formatos padrão. PQMetaData yes This string identifies that flash was fired, stored in image metadata sim no This string identifies that flash was not fired, stored in image metadata não No flash function This string refers to the absense of a flash, stored in image metadata Sem função flash strobe return light not detected This string refers to a flash mode, stored in image metadata luz de estroboscópio não detetada strobe return light detected This string refers to a flash mode, stored in image metadata luz de estroboscópio detetada compulsory flash mode This string refers to a flash mode, stored in image metadata modo compulsivo de flash auto mode This string refers to a flash mode, stored in image metadata modo automático red-eye reduction mode This string refers to a flash mode, stored in image metadata redução de olhos vermelhos return light detected This string refers to a flash mode, stored in image metadata luz de retorno detetada return light not detected This string refers to a flash mode, stored in image metadata luz de retorno não detetada Invalid flash This string refers to a flash mode, stored in image metadata Flash inválido Standard This string refers to a type of scene, stored in image metadata Padrão Landscape This string refers to a type of scene, stored in image metadata Paisagem Portrait This string refers to a type of scene, stored in image metadata Retrato Night Scene This string refers to a type of scene, stored in image metadata Cena noturna Invalid Scene Type This string refers to a type of scene, stored in image metadata Tipo de cena inválido Unknown This string refers to the light source stored in image metadata Desconhecido Daylight This string refers to the light source stored in image metadata Luz natural Fluorescent This string refers to the light source stored in image metadata Fluorescente Tungsten (incandescent light) This string refers to the light source stored in image metadata Tungsténio (luz incandescente) Flash This string refers to the light source stored in image metadata Flash Fine weather This string refers to the light source stored in image metadata Céu limpo Cloudy Weather This string refers to the light source stored in image metadata Céu nublado Shade This string refers to the light source stored in image metadata Tempo escuro Daylight fluorescent This string refers to the light source stored in image metadata Luz natural fluorescente Day white fluorescent This string refers to the light source stored in image metadata Luz natural fluorescente Cool white fluorescent This string refers to the light source stored in image metadata Luz branca fria fluorescente White fluorescent This string refers to the light source stored in image metadata Luz branca fluorescente Standard light This string refers to the light source stored in image metadata Luz padrão Other light source This string refers to the light source stored in image metadata Outra fonte de luz Invalid light source This string refers to the light source stored in image metadata Fonte da luz inválida PQSettings ERROR getting database with default settings This is the window title of an error message box Erro ao obter a base de dados das definições I tried hard, but I just cannot open even a read-only version of the settings database. A aplicação tentou mas não conseguiu abrir a base de dados das definições. Something went terribly wrong somewhere! Ocorreu algo de errado aqui! ERROR opening database with default settings Erro ao abrir a base de dados das definições I tried hard, but I just cannot open the database of default settings. A aplicação tentou mas não conseguiu abrir a base de dados das definições. PQShortcuts ERROR getting database with default shortcuts This is the window title of an error message box Erro ao obter a base de dados dos atalhos padrão I tried hard, but I just cannot open even a read-only version of the shortcuts database. A aplicação tentou mas não conseguiu abrir a base de dados dos atalhos. Something went terribly wrong somewhere! Ocorreu algo de errado aqui! ERROR opening database with default settings Erro ao abrir a base de dados das definições padrão I tried hard, but I just cannot open the database of default shortcuts. A aplicação tentou mas não conseguiu abrir a base de dados dos atalhos padrão. PQStartup SQLite error This is the window title of an error message box Erro SQLite You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! Parece que está em falta um controlador SQLite para Qt. Este controlador é necessário para algumas operações tais como a leitura e escrita das definições. Sem este controlador, PhotoQt não irá funcionar! TabShortcuts about Close Fechar Current version: Versão atual: License: Licença: Open license Ver licença Website: Site: Open website Abrir site Contact: Contacto: Send an email Enviar e-mail About Window title Acerca buttongeneric Ok This is a generic string written on clickable buttons - please keep short! Aplicar Cancel This is a generic string written on clickable buttons - please keep short! Cancelar Save This is a generic string written on clickable buttons - please keep short! Guardar Close This is a generic string written on clickable buttons - please keep short! Fechar commandlineparser Image Viewer Visualizador de imagens Image file to open. Ficheiro a abrir Make PhotoQt ask for a new file. Solicita um ficheiro para abrir Shows PhotoQt from system tray. Mostrar PhotoQt na bandeja do sistema. Hides PhotoQt to system tray. Command line option Não mostrar PhotoQt na bandeja do sistema. Show/Hide PhotoQt. Mostrar/Ocultar PhotoQt Enable thumbnails. Command line option Ativar miniaturas Disable thumbnails. Command line option Desativar miniaturas Enable system tray icon. Command line option Ativar ícone na bandeja. Disable system tray icon. Command line option Desativar ícone na bandeja. Start PhotoQt hidden to the system tray. Command line option Iniciar com PhotoQt oculto na bandeja. Open standalone PhotoQt, allows for multiple instances but without remote interaction. Command line option Permite abrir PhotoQt com várias instâncias mas sem interação remota Simulate a shortcut sequence Command line option Simula uma sequência de atalhos Switch on debug messages. Command line option Ativar mensagens de depuração Switch off debug messages. Command line option Desativar mensagens de depuração Export configuration to given filename. Command line option Exportar configuração para um ficheiro filename Command line option nome do ficheiro Import configuration from given filename. Command line option Importar configuração de um ficheiro Check the configuration and correct any detected issues. Command line option Verifique a configuração e corrija os erros detetados. Reset default configuration. Command line option Repor configuração inicial facetagging Who is this? This question is asked in the face tagger to ask for the name of a tagged face Quem é? Enter name Introduza um nome Click to exit face tagging mode Clique para sair deste modo Click to tag faces, changes are saved automatically Clique para etiquetar as faces e as alterações são gravadas automaticamente File type does not support face tags. O tipo de ficheiro não tem suporte a etiquetas de rosto. filedialog Backwards Parar trás Up a level Subir um nível Forwards Para a frente List subfolders Listar sub-pastas Enter fullscreen Ativar ecrã completo Exit fullscreen Desativar ecrã completo Close Fechar Storage devices This is the category title of storage devices to open (like USB keys) in the element for opening files Dispositivos de armazenamento Detected storage devices on your system Detetados dispositivos de armazenamento no supported files/folders found não foram encontrados ficheiros/pastas suportados Click and drag to favorites Clique e arraste para as favoritas # images # imagens Date: Data: Time: Hora: File size: Tamanho do ficheiro: File type: Tipo de ficheiro: %1 image %1 imagem %1 images %1 imagens no folder added to favorites yet 'favorites' here refers to the list of favorite folders a user can set in the file dialog ainda não existem pastas nos favoritos Favorites This is the category title of user-set folders (or favorites) in the file dialog Favoritas Your favorites Pastas favoritas Show entry Mostrar entrada Hide entry Ocultar entrada Remove entry Remover entrada Hide hidden entries Ocultar entradas ocultas Show hidden entries Mostrar entradas ocultas Load this folder Carregar esta pasta Load this file Carregar este ficheiro Add to Favorites Adicionar a Favoritas Hide hidden files Ocultar ficheiros ocultos Show hidden files Mostrar ficheiros ocultos Hide thumbnails Ocultar miniaturas Show thumbnails Mostrar miniaturas Hide preview Ocultar pré-visualização Show preview Mostrar pré-visualização Standard This is the category title of user-set folders (or favorites) in the file dialog Padrão Some standard locations Algumas localizações padrão Zoom: Ampliação: Adjust font size of files and folders Ajustar tamanho o tipo de letra dos ficheiros/pastas Zoom factor: Fator de ampliação: Sort by: Ordenar por: Name Nome Natural Name Nome natural Time modified Data/hora de modificação File size Tamanho do ficheiro File type Tipo de ficheiro reverse order Inverter ordem Choose by what to sort the files Modo de ordenação dos ficheiros All supported images Todos os formatos suportados Video files Ficheiros de vídeo All files Todos os ficheiros Choose which selection of files to show Escolha a seleção de ficheiros a mostrar Remember loaded folder between sessions. Memorizar pastas carregadas entre sessões Switch between list and icon view Comutar entre vista de lista e vista de ícones Hide standard locations Ocultar localizações padrão Show standard locations Mostrar localizações padrão Hide favorite locations Ocultar localizações favoritas Show favorite locations Mostrar localizações favoritas Hide storage devices Ocultar dispositivos de armazenamento Show storage devices Mostrar dispositivos de armazenamento File dialog Window title Diálogo de ficheiro filemanagement Delete file? Window title Apagar ficheiro? An error occured, file could not be deleted! Ocorreu um erro e o ficheiro não foi apagado! Move to trash Mover para o lixo Delete permanently Apagar permanentemente Rename file Window title Mudar nome An error occured, file could not be renamed! Ocorreu um erro e o ficheiro não foi renomeado! Enter new filename Digite o nome do ficheiro Save file as This is a title, similar to all the 'save as' options in many programs. ---------- Window title Guardar ficheiro como An error occured, file could not be saved! Ocorreu um erro e não foi possível guardar o ficheiro. Operation cancelled 'Operation' here is the operation of saving an image in a new format Operação cancelada Filter formats This is a short hint informing the user that here they can 'filter all the possible file formats' Filtrar formatos New filename Novo nome de ficheiro Choose location and save file Escolher localização e guardar ficheiro filter Filter images in current directory Filtrar imagens no diretório atual Enter here the terms you want to filter the images by. Separate multiple terms by a space. Digite aqui os termos para filtrar as imagens. Pode utilizar vários termos desde que separados por espaço. If you want to filter by file extension, start the term with a dot. Se quiser filtrar por tipo de ficheiro, inicie o termo com um ponto (.) Enter filter term Defina o termo para o filtro Filter Written on a clickable button - please keep short ---------- Window title Filtrar Remove filter Written on a clickable button - please keep short Remover filtro histogram Histogram Window title Histograma Loading... As in: Loading the histogram for the current image A carregar... Click-and-drag to move. Used for the histogram. The version refers to the type of histogram that is available (colored and greyscale) Clique e arraste para mover Right click to switch version. Clique com o botão direito para trocar de versão imageprovider File failed to load, it does not exist! O ficheiro não existe! imgur Upload to imgur.com Window title Carregar para Imgur anonymous Used as in: Upload image as anonymous user anónimo Obtaining image url... Obtendo URL da imagem... This seems to take a long time... Parece que está a demorar demasiado tempo... There might be a problem with your internet connection or the imgur.com servers. Pode existir um problema com a sua ligação ou nos servidores imgur.com An Error occurred while uploading image! Ocorreu um erro ao carregar a imagem! Error code: Código de erro: You do not seem to be connected to the internet... Parece que você não tem uma ligação à Internet... Unable to upload! Não foi possível carregar! Access Image Aceder à imagem Click to open in browser Clique para abrir no navegador Copy to clipboard Copiar para área de transferência Delete Image Apagar imagem keymouse Alt Refers to a keyboard modifier Alt Ctrl Refers to a keyboard modifier Ctrl Shift Refers to a keyboard modifier Shift Page Up Refers to one of the keys on the keyboard Page Up Page Down Refers to one of the keys on the keyboard Page Down Meta Refers to the key that usually has the Windows symbol on it Meta Keypad Refers to the key that triggers the number block on keyboards Teclado numérico Escape Refers to one of the keys on the keyboard Esc Right Refers to one of the arrow keys on the keyboard Seta para a direita Left Refers to one of the arrow keys on the keyboard Seta para esquerda Up Refers to one of the arrow keys on the keyboard Seta para cima Down Refers to one of the arrow keys on the keyboard Seta para baixo Space Refers to one of the keys on the keyboard Barra de espaços Delete Refers to one of the keys on the keyboard Del Backspace Refers to one of the keys on the keyboard Backspace Home Refers to one of the keys on the keyboard Home End Refers to one of the keys on the keyboard End Insert Refers to one of the keys on the keyboard Insert Tab Refers to one of the keys on the keyboard Tab Return Return refers to the enter key of the number block - please try to make the translations of Return and Enter (the main button) different if possible! Return Enter Enter refers to the main enter key - please try to make the translations of Return (in the number block) and Enter different if possible! Enter Left Button Refers to a mouse button Botão esquerdo Right Button Refers to a mouse button Botão direito Middle Button Refers to a mouse button Botão do meio Wheel Up Refers to the mouse wheel Roda do rato (cima) Wheel Down Refers to the mouse wheel Roda do rato (baixo) East Refers to a direction of the mouse when performing a mouse gesture Este South Refers to a direction of the mouse when performing a mouse gesture Sul West Refers to a direction of the mouse when performing a mouse gesture Oeste North Refers to a direction of the mouse when performing a mouse gesture Norte logging Logging Window title Registos enable debug messages ativar mensagens de depuração copy to clipboard copiar para a área de transferência save to file guardar para ficheiro metadata Click and drag to resize meta data Clique e arraste para redimensionar os meta-dados File name Please keep string short! Nome do ficheiro Dimensions The dimensions of the loaded image. Please keep string short! Dimensões Image #/# Used as in "Image 3/16". The numbers (position of image in folder) are added on automatically. Please keep string short! Imagem #/# File size Please keep string short! Tamanho do ficheiro File type Please keep string short! Tipo de ficheiro Make Exif image metadata: the make of the camera used to take the photo. Please keep string short! Marca Model Exif image metadata: the model of the camera used to take the photo. Please keep string short! Modelo Software Exif image metadata: the software used to create the photo. Please keep string short! Software Time Photo was Taken Exif image metadata: when the photo was taken. Please keep string short! Data de obtenção da foto Exposure Time Exif image metadata: how long the sensor was exposed to the light. Please keep string short! Tempo de exposição Flash Exif image metadata: the flash setting when the photo was taken. Please keep string short! Flash Scene Type Exif image metadata: the specific scene type the camera used for the photo. Please keep string short! Tipo de cena Focal Length Exif image metadata: https://en.wikipedia.org/wiki/Focal_length . Please keep string short! Distância focal Metadata This is the heading of the metadata element ---------- Window title Meta-dados No File Loaded Nenhum ficheiro carregado Click to open GPS position with online map Clique para abrir a posição GPS no mapa web Keep Open Used as in: Keep the metadata element open even if the cursor leaves it Manter aberta Light Source Exif image metadata: What type of light the camera detected. Please keep string short! Fonte de luz Keywords IPTC image metadata: A description of the image by the user/software. Please keep string short! Palavras-chave Location IPTC image metadata: The CITY and COUNTRY the imge was taken in. Please keep string short! Localização Copyright IPTC image metadata. Please keep string short! Copyright GPS Position Exif image metadata. Please keep string short! Posição GPS F Number Exif image metadata: https://en.wikipedia.org/wiki/F-number . Please keep string short! Número F navigate Click and drag to move Clique e arraste para mover Navigate to previous image in folder Ira para a imagem anterior da pasta Navigate to next image in folder Ir para a imagem seguinte da pasta Show main menu Mostrar menu principal other Open a file to start Abrir um ficheiro Click anywhere to open a file Part of the message shown in the main view before any image is loaded Clique em qualquer lugar para abrir um ficheiro Move your cursor to: Part of the message shown in the main view before any image is loaded Mover o cursor para: RIGHT EDGE for the main menu Part of the message shown in the main view before any image is loaded, first option for where to move cursor to Margem direita do menu principal LEFT EDGE for the metadata Part of the message shown in the main view before any image is loaded, second option for where to move cursor to Margem esquerda do menu principal BOTTOM EDGE to show the thumbnails Part of the message shown in the main view before any image is loaded, third option for where to move cursor to Margem inferior do menu principal (once an image/folder is loaded) Part of the message shown in the main view before any image is loaded (assim que uma imagem/pasta seja aberta) No matches found Used as in: No matches found for the currently set filter Não existem ocorrências PhotoQt Image Viewer The window title of PhotoQt PhotoQt - Visualizador de imagens popinpopout Merge into main interface Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface Unir com a interface principal Move to its own window Tooltip of small button to show an element in its own window (i.e., not merged into main interface) Mover para janela própria quickinfo Click here to enter fullscreen mode Clique aqui para ativar o modo de ecrã completo Click here to exit fullscreen mode Clique aqui para desativar o modo de ecrã completo Click here to close PhotoQt Clique aqui para fechar a aplicação Page %1 of %2 Used as in: Page 12/34 - please keep as short as possible Página %1 de %2 File %1 of %2 Used as in: File 12/34 - please keep as short as possible Ficheiro %1 de %2 Connected to: This is followed by the name of the Chromecast streaming device currently connected to Conectado a: Copy filename to clipboard Copiar nome do ficheiro para a área de transferência Show counter Mostrar contador Hide counter Não mostrar contador Show file path Mostrar caminho Hide file path Ocultar caminho Show file name Mostrar nome do ficheiro Hide file name Ocultar nome do ficheiro Show zoom level Mostrar nível de zoom Hide zoom level Ocultar nível de zoom Click here to enter viewer mode Clique aqui para ativar o modo de visualização Hide central 'viewer mode' button Ocultar botão "Modo de visualização" Click here to exit viewer mode Clique aqui para sair do modo de visualização Filter: Filtrar: Show window buttons Mostrar botões das janelas Hide window buttons Ocultar botões das janelas Some info about the current image and directory Algumas informações acerca da imagem e do diretório Show central 'viewer mode' button Mostrar botão "Modo de visualização" Click to remove filter Clique para remover o filtro scale Scale file Window title Redimensionar ficheiro An error occured, file could not be scaled! Ocorreu um erro e o ficheiro não foi redimensionado! This file format cannot (yet) be scaled with PhotoQt! Este formato de ficheiro não pode (ainda) ser ajustado com PhotoQt! New width x height: Largura x Altura (nova): Preserve aspect ratio The aspect ratio refers to the ratio of the width to the height of the image, e.g., 16:9 for most movies Manter proporção Quality: This refers to the quality to be used to scale the image Qualidade: Scale (create new file) Written on a clickable button Ajustar (para novo ficheiro) Scale (change file in place) Written on a clickable button Ajustar (no ficheiro atual) De-/Increase width and height by 10% Diminuir/alturaumentar largura e altura em 10% In-/Decrease quality by 5% Diminuir/aumentar qualidade em 5% Select new file Selecionar ficheiro settingsmanager interface settings manager tab title interface Tab to control interface settings Separador para controlar as definições de interface image view settings manager tab title vista de imagem Tab to control how images are viewed Separador para controlar a exibição de imagens thumbnails settings manager tab title miniaturas Tab to control the look and behaviour of thumbnails Separador para controlar o aspeto e comportamento das miniaturas metadata settings manager tab title meta-dados Tab to control metadata settings Definições para controlar as definições dos meta-dados file types settings manager tab title tipos de ficheiro Tab to control which file types PhotoQt should recognize Separador para controlar os tipos de ficheiros reconhecidos por PhotoQt shortcuts settings manager tab title atalhos Tab to control which shortcuts are set Separador para controlar os atalhos advanced Written on button in setting manager. A click on this button opens a menu with some advanced actions. avançado restore defaults repor predefinições import settings importar definições export settings exportar definições disable expert mode desativar modo avançado enable expert mode ativar modo avançado Import of %1. This will replace your current settings with the ones stored in the backup. Importação %1. Está prestes a substituir as definições atuais pelas que estão armazenadas no backup. Do you want to continue? Tem a certeza de que deseja continuar? Save changes and exit Guardar alterações e sair Exit and discard changes Sair e descartar alterações Rename File Name of shortcut action Mudar nome do ficheiro Delete File Name of shortcut action Eliminar ficheiro Filetype settings Definições para tipos de ficheiro These settings govern which file types PhotoQt should recognize and open. Estas definições estipulam os tipos de ficheiro que PhotoQt deve reconhecer e abrir. Not all file types might be available, depending on your setup and what library support was enabled at compile time Nem todos os tipos de ficheiros são suportados. O suporte a um tipo de ficheiro depende das bibliotecas utilizadas durante a compilação. Image view settings Definições de exibição These settings affect the viewing of images, how they are shown, in what order, how large a cache to use, etc. Estas definições afetam a visualização de imagens como, por exemplo, modo de exibição, ordem, a cache a usar, etc. Some settings are only shown in expert mode. Algumas das definições apenas estão visíveis no modo avançado. Interface settings Definições de interface These settings affect the interface in general, how the application looks like and behaves. This includes the background, some of the labels in the main view, which elements are to be shown in their own window, and others. Estas definições afetam o aspeto e o comportamento da interface. Aqui encontra definições para o fundo, para os textos na vista principal, para os itens a mostrar e muito mais. Metadata settings Definições de meta-dados These settings affect the metadata element, what information it should show and some of its behavior. Estas definições afetam a exibição de meta-dados nomeadamente quais os dados a mostrar e o seu comportamento. Shortcuts Atalhos Navigation A shortcuts category: navigation Navegação Filter images in folder Name of shortcut action Filtrar imagens na pasta Next image Name of shortcut action Imagem seguinte Previous image Name of shortcut action Imagem anterior Go to first image Name of shortcut action Name of shortcut action Ir para a primeira página Go to last image Name of shortcut action Ir para a última página Enter viewer mode Name of shortcut action Ativar modo de visualização Show quick navigation buttons Name of shortcut action Mostrar botões de navegação rápida Close window (hides to system tray if enabled) Name of shortcut action Fechar janela (ocultar para a bandeja se ativada) Quit PhotoQt Name of shortcut action Sair Image A shortcuts category: image manipulation Imagem Zoom In Name of shortcut action Ampliar Zoom Out Name of shortcut action Reduzir Zoom to Actual Size Name of shortcut action Ajustar ao tamanho real Reset Zoom Name of shortcut action Repor zoom Rotate Right Name of shortcut action Rodar à direita Rotate Left Name of shortcut action Rodar à esquerda Reset Rotation Name of shortcut action Repor rotação Flip Horizontally Name of shortcut action Inverter na horizontal Flip Vertically Name of shortcut action Inverter na vertical Scale Image Name of shortcut action Ajustar imagem Play/Pause animation/video Name of shortcut action Reproduzir/Pausa na animação/vídeo Hide/Show face tags (stored in metadata) Name of shortcut action Mostrar/ocultar etiquetas faciais (dos meta-dados) Tag faces (stored in metadata) Name of shortcut action Reconhecer faces (existentes nos meta-dados) File A shortcuts category: file management Ficheiro Delete File (without confirmation) Name of shortcut action Eliminar ficheiro (sem confirmação) Copy File to a New Location Name of shortcut action Copiar ficheiro para outra localização Move File to a New Location Name of shortcut action Mover ficheiro para outra localização Copy Image to Clipboard Name of shortcut action Copiar para a área de transferência Other A shortcuts category: other functions Outras Hide/Show main menu Name of shortcut action Mostrar/ocultar menu principal Hide/Show metadata Name of shortcut action Ocultar/mostrar meta-dados Keep metadata opened Name of shortcut action Manter meta-dados abertos Hide/Show thumbnails Name of shortcut action Mostrar/ocultar miniaturas Show Settings Name of shortcut action Mostrar definições Start Slideshow Name of shortcut action Iniciar apresentação Start Slideshow (Quickstart) Name of shortcut action Iniciar apresentação (rápida) About PhotoQt Name of shortcut action Acerca de PhotoQt Set as Wallpaper Name of shortcut action Definir como papel de parede Show Histogram Name of shortcut action Mostrar histograma Upload to imgur.com (anonymously) Name of shortcut action Carregar para imgur.com (modo anónimo) Upload to imgur.com user account Name of shortcut action Carregar para imgur.com (conta de utilizador) Stream content to Chromecast device Name of shortcut action Transmitir conteúdo para um dispositivo Chromecast Show log/debug messages Name of shortcut action Mostrar registos/mensagens de depuração External A shortcuts category: external shortcuts Externos %f = filename including path, %u = filename without path, %d = directory containing file Please leave the three placeholders (%f, %u, %d) as is. %f = nome de ficheiro, incluindo caminho, %u = nome de ficheiro, excluindo caminho, %d = diretório que contém o ficheiro Thumbnails settings Definições de miniaturas These settings affect the thumbnails shown, by default, along the bottom edge of the screen. This includes their look, behavior, and the user's interaction with them. Estas definições afetam a exibição das miniaturas assim como a margem inferior do ecrã. Pode configurar o seu aspeto, o seu comportamento e a interação dos utilizadores com as miniaturas. Settings Manager Window title Gestor de definições Here the shortcuts can be managed. Below you can add a new shortcut for any one of the available actions, both key combinations and mouse gestures are supported. Aqui pode fazer a gestão dos atalhos. Abaixo pode adicionar um novo atalho para qualquer uma das ações disponíveis. Pode utilizar gestos do rato ou combinação de teclas. You can also set the same shortcut for multiple actions or multiple times for the same action. All actions for a shortcut will be executed sequentially, allowing a lot more flexibility in using PhotoQt. Também pode definir o mesmo atalho para diversas ações ou diversas vezes para a mesma ação. As ações definidas pelo atalho serão executadas sequencialmente, permitindo assim mais flexibilidade na aplicação. Open file (browse images) Name of shortcut action Abrir ficheiro (explorar imagens) Save image in another format Name of shortcut action Guardar imagem em outro formato Restore defaults As in 'restore the default settings and/or file formats and/or shortcuts'. Please keep short! Repor predefinições Here you can restore the default configuration of PhotoQt. You can choose to restore any combination of the following three categories. Aqui pode restaurar a configuração padrão da aplicação. Pode optar por restaurar qualquer combinação das três categorias mostradas. Restore default settings Repor definições padrão Restore default file formats Repor formato de ficheiros Restore default shortcuts Repor atalhos padrão settingsmanager_filetypes These are some additional settings for opening archives. Estas são algumas definições extra para a abertura de arquivos. use external tool: unrar used as label for checkbox utilizar ferramenta externa: unrar These are some additional settings for showing PDFs. Estas são algumas definições extra para a exibição de PDF. Quality: the quality setting to be used when loading PDFs Qualidade: These are some additional settings for playing videos. Estas são algumas definições extra para a reprodução de vídeos. Autoplay Used as setting for video files (i.e., autoplay videos) Reprodução automática Loop Used as setting for video files (i.e., loop videos) Repetição Select tool for creating video thumbnails Tooltip shown for combobox for selectiong video thumbnailer Selecione a ferramentas para criar as miniaturas dos vídeos images This is a category of files PhotoQt can recognize: any image format imagens compressed files This is a category of files PhotoQt can recognize: compressed files like zip, tar, cbr, 7z, etc. ficheiros comprimidos documents This is a category of files PhotoQt can recognize: documents like pdf, txt, etc. documentos videos This is a type of category of files PhotoQt can recognize: videos like mp4, avi, etc. vídeos Enable As in: "Enable all formats in the seleted category of file types" Ativar Disable As in: "Disable all formats in the seleted category of file types" Desativar Enable everything As in "Enable every single file format PhotoQt can open in any category" Ativar tudo Currently there are %1 file formats enabled The %1 will be replaced with the number of file formats, please don't forget to add it. Atualmente, estão ativos %1 formatos Search by description or file ending Pesquisar por descrição ou extensão Search by image library or category Pesquisar por biblioteca de imagem ou categoria File endings: Extensão de ficheiro: settingsmanager_imageview animation A settings title referring to the in/out animation of images animação What type of animation to show, and how fast. This is referring to the in/out animation of images O tipo de animações a mostrar e a sua velocidade. type of animation This is referring to the in/out animation of images tipo de animação opacity This is referring to the in/out animation of images opacidade along x-axis This is referring to the in/out animation of images ao longo do eixo X along y-axis This is referring to the in/out animation of images ao longo do eixo Y no animation This is referring to the in/out animation of images sem animação long animation This is referring to the in/out animation of images animação longa fit in window A settings title referring to whether to fit images in window ajustar à janela Zoom smaller images to fill the full window width and/or height. Ajustar imagens pequenas à largura e à altura da janela. fit smaller images in window ajustar imagens pequenas à janela interpolation A settings title referring to the type of interpolation to use for small images interpolação PhotoQt tries to improve the rendering of images that are shown much larger than they are (i.e., zoomed in a lot). For very tiny images that are zoomed in quite a lot, this can result in the loss of too much information in the image. Thus a threshold can be defined here, images that are smaller than this threshold are shown exactly as they are without any smoothing or other attempts to improve them. O PhotoQt tenta melhorar a renderização de imagens que são mostradas muito maiores do realmente são (ou seja, muito ampliadas). Para imagens muito pequenas que são muito ampliadas, pode resultar na perda de demasiada informação na imagem. Assim, pode definir aqui um limite e as imagens inferiores a este limite serão mostradas exatamente como são sem qualquer suavização ou outras tentativas de melhoria. Do not use any interpolation algorithm for very small images A type of interpolation to use for small images Não utilizar algoritmo de interpolação para imagens muito pequenas threshold: The threshold (in pixels) at which to switch interpolation algorithm limite: remember per session A settings title memorizar por sessão By default, PhotoQt resets the zoom, rotation, flipping/mirroring and position when switching to a different image. For certain tasks, for example for comparing two images, it can be helpful to keep these properties. Por definição, PhotoQt restaura a ampliação, a rotação, a inversão e a posição de cada imagem. Para algumas tarefas como, por exemplo, a comparação entre duas imagens, pode ser útil manter estas propriedades. remember zoom, rotation, flip, position manter ampliação, rotação, inversão e posição left mouse button A settings title botão esquerdo do rato The left button of the mouse is by default used to move the image around. However, this prevents the left mouse button from being used for shortcuts. Por definição, o botão esquerdo do rato é utilizado para mover a imagem. Contudo, isto impede a utilização do botão esquerdo do rato como atalho. use left button to move image utilizar botão esquerdo para mover a imagem looping A settings title for looping through images in folder repetição What to do when the end of a folder has been reached: stop or loop back to first image in folder. O que fazer ao atingir a última imagem da pasta: parar ou voltar a mostrar as imagens desde o início. loop through images in folder repetir imagens da pasta margin A settings title about the margin around the main image margem How much space to show between the main image and the application border. Espaço a deixar entre a imagem principal e a margem da aplicação. none As in: no margin between the main image and the window edges sem margem pixmap cache A settings title cache pixmap Size of runtime cache for fully loaded images. This cache is cleared when the application quits. Tamanho de cache de execução para imagens carregadas. Esta cache é limpa ao sair da aplicação. sort images by A settings title ordenar imagens por Sort all images in a folder by the set property. Ordenar imagens de uma pasta de acordo com um critério. natural name A criteria for sorting images nome natural name A criteria for sorting images nome time A criteria for sorting images data/hora size A criteria for sorting images tamanho type A criteria for sorting images tipo ascending Sort images in ascending order ascendente descending Sort images in descending order descendente transparency marker A settings title marcador de transparência Show checkerboard pattern behind transparent areas of (half-)transparent images. Mostrar padrão em xadrez atrás das áreas transparentes das imagens semi-transparentes. show checkerboard pattern Setting for how to display images that have transparent areas, whether to show checkerboard pattern in that area or not mostrar padrão em xadrez zoom speed A settings title, the zoom here is the zoom of the main image velocidade de ampliação Images are zoomed at a relative speed as specified by this percentage. A higher value means faster zoom. As imagens as ampliadas/reduzidas de acordo com a velocidade aqui definida. Valores mais altos implicam mais velocidade. super slow This refers to the zoom speed, the zoom here is the zoom of the main image muito lenta very fast This refers to the zoom speed, the zoom here is the zoom of the main image muito rápida settingsmanager_interface background A settings title referring to the background of PhotoQt (behind any image/element) fundo What type of background is to be shown. The background here refers to the area behind the main image and any element in PhotoQt, the very back. O tipo de fundo a mostrar. (half-)transparent background How the background of PhotoQt should be fundo semi-transparente faked transparency How the background of PhotoQt should be transparência fictícia custom background image How the background of PhotoQt should be imagem personalizada Click to select an image Tooltip for a mouse area, a click on which opens a file dialog for selecting an image Clica aqui para selecionar uma imagem scale to fit If an image is set as background of PhotoQt this is one way it can be handled. ajustar para caber scale and crop to fit If an image is set as background of PhotoQt this is one way it can be handled. ajustar e recortar para caber stretch to fit If an image is set as background of PhotoQt this is one way it can be handled. esticar para caber center image If an image is set as background of PhotoQt this is one way it can be handled. centrar imagem tile image If an image is set as background of PhotoQt this is one way it can be handled. imagem em mosaico All Images This is a category in a file dialog for selecting images used as in: All images supported by PhotoQt. Todas as imagens Video This is a category in a file dialog for selecting images used as in: Video files supported by PhotoQt. Vídeo empty area around image A settings title área vazia em redor da imagem How to handle clicks on empty area around images. Como gerir os cliques na área vazia em redor das imagens. close on click Used as in: Close PhotoQt on click on empty area around main image fechar ao clicar Close PhotoQt when click occurred on empty area around image Fechar PhotoQt ao clicar em qualquer área vazia ao redor da imagem navigate on click Used as in: Close PhotoQt on click on empty area around main image navegar com clique Go to next/previous image if click occurred in left/right half of window Ir para a imagem seguinte/anterior ao clicar na parte esquerda/direita da janela size of 'hot edge' A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) tamanho da 'margem de ativação' Adjusts the sensitivity of the edges for showing elements like the metadata and main menu elements. Ajuste das margens para exibição de alguns itens tais como meta-dados e menu principal. small used as in: small area pequena large used as in: large area grande language A settings title. idioma Change the language of the application. Alterar idioma da aplicação. mouse wheel sensitivity A settings title. sensibilidade da roda do rato How sensitive the mouse wheel is for shortcuts, etc. A sensibilidade da roda do rato para atalhos e outras opções. not sensitive The sensitivity here refers to the sensitivity of the mouse wheel pouco sensível very sensitive The sensitivity here refers to the sensitivity of the mouse wheel muito sensível overlay color A settings title. cor de sobreposição This is the color that is shown on top of any background image/... Esta é a cor mostrada por cima de qualquer imagem de fundo. click to change color clique para alterar a cor please choose a color escolha uma cor pop out elements A settings title. The popping out that is talked about here refers to the possibility of showing any element in its own window (i.e., popped out). itens em janela própria Here you can choose for most elements whether they are to be shown integrated into the main window or in their own, separate window. Aqui pode escolher, para a maioria dos itens, se estes serão integrados na janela principal ou na sua própria janela. File dialog Used as identifying name for one of the elements in the interface Caixa de diálogo keep open manter aberta Settings Manager Used as identifying name for one of the elements in the interface Gestor de definições Main Menu Used as identifying name for one of the elements in the interface Menu principal Metadata Used as identifying name for one of the elements in the interface Meta-dados Histogram Used as identifying name for one of the elements in the interface Histograma Scale Used as identifying name for one of the elements in the interface Escala Slideshow Settings Used as identifying name for one of the elements in the interface Definições de apresentações Slideshow Controls Used as identifying name for one of the elements in the interface Controlos para apresentações Rename File Used as identifying name for one of the elements in the interface Mudar nome Delete File Used as identifying name for one of the elements in the interface Eliminar ficheiro Save File As Used as identifying name for one of the elements in the interface Guardar ficheiro como About Used as identifying name for one of the elements in the interface Acerca Imgur Used as identifying name for one of the elements in the interface Imgur Wallpaper Used as identifying name for one of the elements in the interface Papel de parede Filter Noun, not a verb. Used as identifying name for one of the elements in the interface Filtro labels A settings title. etiquetas The labels are shown along the top edge of the main view. Asa etiquetas são mostradas na parte superior da vista principal. show labels checkbox in settings manager mostrar etiquetas counter refers to the image counter (i.e., image #/# in current folder) contador filepath show filepath in the labels. This is specifically the filePATH and not the filename. caminho do ficheiro filename show filename in the labels. This is specifically the fileNAME and not the filepath. nome do ficheiro current zoom level nível de zoom current rotation angle ângulo de rotação atual window buttons the window buttons are some window management buttons like: close window, maximize, fullscreen botões das janelas size of window buttons the size of the window buttons (the buttons shown in the top right corner of the window) tamanho dos botões das janelas remember last image A settings title. memorizar última imagem At startup the image loaded at the end of the last session can be automatically reloaded. Aqui pode optar se a última imagem visualizada antes de fechar a aplicação deve ser recarregada ao iniciar. re-open last loaded image at startup reabrir última imagem visualizada tray icon A settings title. ícone na bandeja If a tray icon is to be shown and, if shown, whether to hide it or not. Aqui pode escolher mostrar ou não o ícone na bandeja e, se mostrado, se deve ou não ser ocultado. no tray icon sem ícone na bandeja hide to tray icon ocultar na bandeja show tray icon but don't hide to it mostrar ícone mas não ocultar window management A settings title. gestão de janelas Some basic window management properties. Algumas propriedades para gestão de janelas. manage window through quick info labels gerir janelas através da informação rápida save and restore window geometry guardar e restaurar geometria da janela keep above other windows manter à frente das outras janelas window mode A settings title. modo de janela Whether to run PhotoQt in window mode or fullscreen. Se PhotoQt deve ser executado no modo de janela ou no modo de ecrã completo. run in window mode executar no modo de janela show window decoration mostrar decoração de janelas custom main menu entries A settings title. entradas personalizadas no menu Add some custom entries in the main menu on the right. Adicione algumas entradas personalizadas para o menu à direita. what string to show in main menu this is the placeholder text inside of a text box telling the user what text they can enter here o texto mostrado no menu principal which command to execute this is the placeholder text inside of a text box telling the user what text they can enter here o comando a ser executado quit Keep string short! Used on checkbox for contextmenu, refers to option to close PhotoQt after respective command has been executed. sair move entry down contextmenu settings: used as in 'move this entry down in the list of all entries' mover para baixo move entry up contextmenu settings: used as in 'move this entry up in the list of all entries' mover para cima delete entry contextmenu settings: used as in 'delete this entry out of the list of all entries' remover entrada quick navigation A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) navegação rápida Some buttons to help with quick navigation. These can come in handy when, e.g., operating with a touch screen. Alguns botões para ajudar com a navegação rápida. Podem ser úteis quando, por exemplo, utiliza um ecrã de toque. Show quick navigation buttons Mostrar botões de navegação rápida settingsmanager_metadata face tags A settings title. The face tags are labels that can be shown (if available) on faces including their name. etiquetas de rosto Whether to show face tags (stored in metadata info). The face tags are labels that can be shown (if available) on faces including their name. Se as etiquetas de rosto devem ou não ser mostradas (dos meta-dados). enable ativar face tags - border A settings title. The face tags are labels that can be shown (if available) on faces including their name. etiquetas de rosto - contorno If and what style of border to show around tagged faces. Opção para mostrar um contorno para as faces e o estilo a utilizar. show border The border here is the border around face tags. mostrar contorno click to change color clique para alterar a cor please choose a color escolha uma cor face tags - font size A settings title. The face tags are labels that can be shown (if available) on faces including their name. etiquetas de rosto - tamanho do texto The font size of the name labels. The name labels here are the labels with the name used for the face tags. O tamanho do texto para as etiquetas de rosto. face tags - visibility A settings title. The face tags are labels that can be shown (if available) on faces including their name. etiquetas de rosto - visibilidade When to show the face tags and for how long. Opção para mostrar as etiquetas e, se mostradas, durante quanto tempo. hybrid mode A mode for showing face tags. modo híbrido always show all A mode for showing face tags. mostrar sempre todas show one on hover A mode for showing face tags. mostrar apenas ao passar com o rato show all on hover A mode for showing face tags. mostrar todas as passar com o rato GPS online map A settings title. mapa para GPS Which map service to use when a GPS position is clicked. O serviço a utilizar ao clicar na posição GPS da imagem. hot edge A settings title. The hot edge refers to the area along the left edge of PhotoQt where the mouse cursor triggers the visibility of the metadata element. margem de ativação Show metadata element when the mouse cursor is close to the window edge Mostrar meta-dados se o cursor do rato estiver perto da margem da janela. meta information A settings title. meta-informação Which meta information to extract and display. Aqui pode escolher os meta-dados a extrair e mostrar. file name Part of the meta information about the current image. nome do ficheiro file type Part of the meta information about the current image. tipo de ficheiro file size Part of the meta information about the current image. tamanho do ficheiro image #/# Part of the meta information about the current image. imagem #/# dimensions Part of the meta information about the current image. dimensões copyright Part of the meta information about the current image. copyright exposure time Part of the meta information about the current image. tempo de exposição flash Part of the meta information about the current image. flash focal length Part of the meta information about the current image. distância focal f-number Part of the meta information about the current image. número F GPS position Part of the meta information about the current image. posição GPS keywords Part of the meta information about the current image. palavras-chave light source Part of the meta information about the current image. fonte de luz location Part of the meta information about the current image. localização make Part of the meta information about the current image. marca model Part of the meta information about the current image. modelo scene type Part of the meta information about the current image. tipo de cena software Part of the meta information about the current image. software time photo was taken Part of the meta information about the current image. data de obtenção da foto opacity A settings title. opacidade The opacity of the metadata element. A opacidade dos meta-dados. auto-rotation A settings title. rotação automática Automatically rotate images based on metadata information. Rodar imagens tendo por base as informações existentes nos meta-dados. settingsmanager_shortcuts quit checkbox in shortcuts settings, used as in: quit PhotoQt. Please keep as short as possible! sair Click to change shortcut Clique para alterar o atalho Click to delete shortcut Clique para eliminar o atalho no shortcut set nenhum atalho definido Click to manage shortcut Clique para gerir o atalho add new Used as in 'add new shortcut'. Please keep short! adicionar novo Add New Shortcut Adicionar atalho Perform a mouse gesture here or press any key combo Execute aqui um gesto do rato ou uma combinação de teclas Add new Used on button as in 'add new external shortcut'. Please keep short! Adicionar novo settingsmanager_thumbnails thumbnail cache A settings title. cache de miniaturas Thumbnails can be cached (permanently), following the freedesktop.org standard. As miniaturas pode ser colocadas em cache (permanentemente), seguindo o protocolo freedesktop.org. enable ativar keep in center A settings title. Used as in: Keep thumbnail for current main image in center. manter no centro Keep currently active thumbnail in the center of the screen Manter miniatura ativa no centro do ecrã center on active thumbnail centrar na miniatura ativa disable thumbnails desativar miniaturas Disable thumbnails in case no thumbnails are desired whatsoever. Aqui pode desativar a exibição de miniaturas. disable all thumbnails desativar todas as miniaturas filename label A settings title. The filename label here is the one that is written on thumbnails. texto do nome de ficheiro Show the filename on a small label on the thumbnail image. Mostrar nome do ficheiro através de um pequeno texto na miniatura. font size: tamanho do texto: filename-only A settings title. This refers to using only the filename as thumbnail and no actual image. apenas nome do ficheiro Show only the filename as thumbnail, no actual image. Mostrar apenas o nome do ficheiro como miniatura. lift up A settings title. This refers to the lift up of thumbnail images when active/hovered. ampliar miniaturas How many pixels to lift up thumbnails when either hovered or active. Valor, em pixeis, para a ampliação da miniatura ativa. position A settings title referring to the position of the thumbnails (upper or lower edge of PhotoQt). posição Which edge to show the thumbnails on, upper or lower edge. Aqui pode definir o local para o posicionamento da miniatura (cima ou baixo). upper edge The upper edge of PhotoQt margem superior lower edge The lower edge of PhotoQt margem inferior size A settings title referring to the size of the thumbnails. tamanho How large (or small) the thumbnails should be. Aqui pode definir o tamanho das miniaturas. spacing A settings title referring to the spacing of thumbnails, i.e., how much empty space to have between each. espaço How much space to show between the thumbnails. Aqui pode definir o espaço a deixar entre as miniaturas. threads A settings title, as in: How many threads to use to generate thumbnails. processos How many threads to use to create thumbnails. Too many threads can slow down your computer! O número de processos para criar as miniaturas. Tenha em atenção que um valor alto diminui o desempenho do computador! Threads: Processos: visibility A settings title referring to the visibility of the thumbnails, i.e., if and when to hide them. visibilidade If and how to keep thumbnails visible Durante quanto tempo as miniaturas são visíveis hide when not needed This is talking about the thumbnails. ocultar se não forem necessárias never hide This is talking about the thumbnails. nunca ocultar hide when zoomed in This is talking about the thumbnails. ocultar ao ampliar exclude folders excluir pastas Exclude the specified folders and all of its subfolders from any sort of caching and preloading. Excluir as pastas especificadas de qualquer tipo de colocação em cache ou pré-carregamento. Do not cache these folders: Não colocar estas pastas em cache: Add folder Written on a button Adicionar pasta One folder per line Uma pasta por linha slideshow Click to go to the previous image Clique para aceder à imagem anterior Click to pause slideshow Clique para parar a apresentação Click to play slideshow Clique para retomar a apresentação Click to go to the next image Clique para aceder à imagem seguinte Sound volume: Volume: Click to quit slideshow Clique para sair da apresentação Slideshow settings Window title Definições da apresentação interval The interval between images in a slideshow intervalo animation This is referring to the in/out animation of images during a slideshow animação opacity This is referring to the in/out animation of images during slideshows opacidade along x-axis This is referring to the in/out animation of images during slideshows ao longo do eixo X along y-axis This is referring to the in/out animation of images during slideshows ao longo do eixo Y animation speed The speed of transitioning from one image to another during slideshows velocidade da animação immediately, without animation This refers to a speed of transitioning from one image to another during slideshows imediatamente, sem animação pretty fast animation This refers to a speed of transitioning from one image to another during slideshows animação rápida not too fast and not too slow This refers to a speed of transitioning from one image to another during slideshows animação média very slow animation This refers to a speed of transitioning from one image to another during slideshows animação lenta current speed This refers to the currently set speed of transitioning from one image to another during slideshows velocidade atual looping repetição loop over all files Loop over all images during slideshows repetir todas as imagens shuffle during slideshows shuffle the order of all images baralhar shuffle all files during slideshows shuffle the order of all images baralhar todos os ficheiros subfolders also include images in subfolders during slideshows subpastas include images in subfolders also include images in subfolders during slideshows incluir imagens das subpastas quickinfo What to do with the quick info during slideshows informação rápida hide quickinfo What to do with the quick info during slideshows ocultar informação rápida music The music that is to be played during slideshows música enable music Enable music to be played during slideshows ativar música no file selected nenhum ficheiro selecionado Click to select music file Clique para escolher o ficheiro de áudio Click to change music file Clique para alterar o ficheiro de áudio Common music file formats Formatos de áudio mais usados All Files Todos os ficheiros Start slideshow Written on a clickable button Iniciar apresentação Slideshow controls Window title Controlos para apresentações startup Edit with %1 Used as in 'Edit with [application]'. %1 will be replaced with application name. Editar com %1 Open in %1 Used as in 'Open with [application]'. %1 will be replaced with application name. Abrir com %1 streaming Scan for devices Used as tooltip for button that starts a scan for Chromecast streaming devices in the local network Procurar dispositivos Disconnect Written on button, as in 'Disconnect from connected Chromecast streaming device' Desconectar Connect Written on button, as in 'Connect to Chromecast streaming device' Conectar searching for devices... status text while searching for chromecast streaming devices in the local network a procurar dispositivos... no devices found result of scan for chromecast streaming devices não foram encontrados dispositivos Streaming (Chromecast) Window title Streaming (Chromecast) thumbnailbar File size: Tamanho do ficheiro: File type: Tipo de ficheiro: unavailable Sorry, but this feature is not yet available on Windows. Esta funcionalidade ainda não está disponível em sistemas Windows. Feature unavailable Window title, informing user that the requested feature is currently not available Funcionalidade indisponível wallpaper Warning: %1 module not activated Aviso: módulo %1 não ativado Warning: %1 not found Aviso: %1 não encontrado Set to which screens As in: Set wallpaper to which screens Definir os ecrãs Screen Used in wallpaper element Ecrã Set to which workspaces Enlightenment desktop environment handles wallpapers per workspace (different from screen) Definir as áreas de trabalho Workspace: Enlightenment desktop environment handles wallpapers per workspace (different from screen) Área de trabalho: Choose picture option picture option refers to how to format a pictrue when setting it as wallpaper Escolha a opção da imagem Other Used as in: Other Desktop Environment Outros Tool: Tool refers to a program that can be executed Ferramenta: Click to choose %1 %1 is a placeholder for the name of a desktop environment (plasma, xfce, gnome, etc.) Clique para escolher %1 Set as Wallpaper Heading of wallpaper element ---------- Written on clickable button ---------- Window title Definir como papel de parede The image will be set to all screens at the same time. Esta imagem será utilizada em todos os ecrãs disponíveis. photoqt-2.5/lang/photoqt_uk_UA.ts000644 001750 001750 00000666741 14165351632 017515 0ustar00luspiluspi000000 000000 MainMenu Settings This is an entry in the main menu on the right. Please keep short! Налаштування Slideshow This is an entry in the main menu on the right. Please keep short! Слайд-шоу setup This is an entry in the main menu on the right, used as in: setting up a slideshow. Please keep short! налаштування quickstart This is an entry in the main menu on the right, used as in: quickstarting a slideshow. Please keep short! швидкий старт Face tagging mode This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Режим позначення обличчя About PhotoQt This is an entry in the main menu on the right. Please keep short! Про PhotoQt Quit This is an entry in the main menu on the right. Please keep short! Вихід Filter images in folder This is an entry in the main menu on the right. Please keep short! Filter images in folder Show/Hide metadata This is an entry in the main menu on the right. Please keep short! Show/Hide metadata Scale image This is an entry in the main menu on the right. Please keep short! Scale image Go to This is an entry in the main menu on the right, used as in: Go To some image. Please keep short! Йти до previous This is an entry in the main menu on the right, used as in: go to previous image. Please keep short! попереднього next This is an entry in the main menu on the right, used as in: go to next image. Please keep short! наступного first This is an entry in the main menu on the right, used as in: go to first image. Please keep short! першого last This is an entry in the main menu on the right, used as in: go to last image. Please keep short! останнього Zoom This is an entry in the context menu, used as in: Zoom image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Zoom image. Please keep short! Зум reset This is an entry in the context menu, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the context menu, used as in: Reset flip/mirror of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset flip/mirror of image. Please keep short! скинути Rotate This is an entry in the context menu, used as in: Rotate image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image. Please keep short! Обернути Click and drag to resize main menu Головне меню зміни розміру Wallpaper This is an entry in the main menu on the right. Please keep short! Wallpaper Open file (browse images) This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Open file (browse images) left This is an entry in the context menu, used as in: Rotate image left. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image left. Please keep short! ліворуч right This is an entry in the context menu, used as in: Rotate image right. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image right. Please keep short! праворуч Flip This is an entry in the context menu, used as in: Flip/Mirror image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image. Please keep short! Перевернути horizontal This is an entry in the context menu, used as in: Flip/Mirror image horizontally. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image horizontally. Please keep short! горизонтально vertical This is an entry in the context menu, used as in: Flip/Mirror image vertically. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image vertically. Please keep short! вертикально File This is an entry in the context menu, used to refer to the current file (specifically the file, not directly the image). Please keep short! ---------- This is an entry in the main menu on the right, used to refer to the current file (specifically the file, not directly the image). Please keep short! Файл rename This is an entry in the context menu, used as in: rename file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: rename file. Please keep short! перейменувати copy This is an entry in the context menu, used as in: copy file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: copy file. Please keep short! копіювати move This is an entry in the context menu, used as in: move file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: move file. Please keep short! перемістити delete This is an entry in the context menu, used as in: delete file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: delete file. Please keep short! видалити Streaming (Chromecast) This is an entry in the context menu, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! ---------- This is an entry in the main menu on the right, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! Streaming (Chromecast) Copy to clipboard This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Copy to clipboard Show/Hide histogram This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Show/Hide histogram Open in default file manager This is an entry in the main menu on the right. Please keep short! Відкрити у типовому файловому менеджері Show log/debug messages This is an entry in the main menu on the right. Please keep short! Show log/debug messages Main Menu This is the heading of the main menu element ---------- Window title Головне меню Click here to go to the online manual for help regarding shortcuts, settings, features, ... Натисніть тут, щоб перейти до онлайн-посібника з довідки щодо піктограм, налаштувань, функцій... PQImageFormats ERROR getting default image formats This is the window title of an error message box ПОМИЛКА отримання стандартних форматів зображення I tried hard, but I just cannot open even a read-only version of the database of default image formats. I tried hard, but I just cannot open even a read-only version of the database of default image formats. Something went terribly wrong somewhere! Десь щось пішло не так! I tried hard, but I just cannot open the database of default image formats. I tried hard, but I just cannot open the database of default image formats. PQMetaData yes This string identifies that flash was fired, stored in image metadata так no This string identifies that flash was not fired, stored in image metadata ні No flash function This string refers to the absense of a flash, stored in image metadata No flash function strobe return light not detected This string refers to a flash mode, stored in image metadata strobe return light not detected strobe return light detected This string refers to a flash mode, stored in image metadata strobe return light detected compulsory flash mode This string refers to a flash mode, stored in image metadata compulsory flash mode auto mode This string refers to a flash mode, stored in image metadata auto mode red-eye reduction mode This string refers to a flash mode, stored in image metadata red-eye reduction mode return light detected This string refers to a flash mode, stored in image metadata return light detected return light not detected This string refers to a flash mode, stored in image metadata return light not detected Invalid flash This string refers to a flash mode, stored in image metadata Invalid flash Standard This string refers to a type of scene, stored in image metadata Standard Landscape This string refers to a type of scene, stored in image metadata Landscape Portrait This string refers to a type of scene, stored in image metadata Portrait Night Scene This string refers to a type of scene, stored in image metadata Night Scene Invalid Scene Type This string refers to a type of scene, stored in image metadata Invalid Scene Type Unknown This string refers to the light source stored in image metadata Unknown Daylight This string refers to the light source stored in image metadata Daylight Fluorescent This string refers to the light source stored in image metadata Fluorescent Tungsten (incandescent light) This string refers to the light source stored in image metadata Tungsten (incandescent light) Flash This string refers to the light source stored in image metadata Flash Fine weather This string refers to the light source stored in image metadata Fine weather Cloudy Weather This string refers to the light source stored in image metadata Cloudy Weather Shade This string refers to the light source stored in image metadata Shade Daylight fluorescent This string refers to the light source stored in image metadata Daylight fluorescent Day white fluorescent This string refers to the light source stored in image metadata Day white fluorescent Cool white fluorescent This string refers to the light source stored in image metadata Cool white fluorescent White fluorescent This string refers to the light source stored in image metadata White fluorescent Standard light This string refers to the light source stored in image metadata Standard light Other light source This string refers to the light source stored in image metadata Other light source Invalid light source This string refers to the light source stored in image metadata Invalid light source PQSettings ERROR getting database with default settings This is the window title of an error message box ERROR getting database with default settings I tried hard, but I just cannot open even a read-only version of the settings database. I tried hard, but I just cannot open even a read-only version of the settings database. Something went terribly wrong somewhere! Something went terribly wrong somewhere! ERROR opening database with default settings ERROR opening database with default settings I tried hard, but I just cannot open the database of default settings. I tried hard, but I just cannot open the database of default settings. PQShortcuts ERROR getting database with default shortcuts This is the window title of an error message box ERROR getting database with default shortcuts I tried hard, but I just cannot open even a read-only version of the shortcuts database. I tried hard, but I just cannot open even a read-only version of the shortcuts database. Something went terribly wrong somewhere! Something went terribly wrong somewhere! ERROR opening database with default settings ERROR opening database with default settings I tried hard, but I just cannot open the database of default shortcuts. I tried hard, but I just cannot open the database of default shortcuts. PQStartup SQLite error This is the window title of an error message box SQLite error You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! TabShortcuts about Close Закрити Current version: Current version: License: License: Open license Open license Website: Website: Open website Open website Contact: Contact: Send an email Send an email About Window title About buttongeneric Ok This is a generic string written on clickable buttons - please keep short! Ok Cancel This is a generic string written on clickable buttons - please keep short! Cancel Save This is a generic string written on clickable buttons - please keep short! Save Close This is a generic string written on clickable buttons - please keep short! Close commandlineparser Image Viewer Image Viewer Image file to open. Image file to open. Make PhotoQt ask for a new file. Make PhotoQt ask for a new file. Shows PhotoQt from system tray. Shows PhotoQt from system tray. Hides PhotoQt to system tray. Command line option Hides PhotoQt to system tray. Show/Hide PhotoQt. Show/Hide PhotoQt. Enable thumbnails. Command line option Enable thumbnails. Disable thumbnails. Command line option Disable thumbnails. Enable system tray icon. Command line option Enable system tray icon. Disable system tray icon. Command line option Disable system tray icon. Start PhotoQt hidden to the system tray. Command line option Start PhotoQt hidden to the system tray. Open standalone PhotoQt, allows for multiple instances but without remote interaction. Command line option Open standalone PhotoQt, allows for multiple instances but without remote interaction. Simulate a shortcut sequence Command line option Simulate a shortcut sequence Switch on debug messages. Command line option Switch on debug messages. Switch off debug messages. Command line option Switch off debug messages. Export configuration to given filename. Command line option Export configuration to given filename. filename Command line option filename Import configuration from given filename. Command line option Import configuration from given filename. Check the configuration and correct any detected issues. Command line option Check the configuration and correct any detected issues. Reset default configuration. Command line option Reset default configuration. facetagging Who is this? This question is asked in the face tagger to ask for the name of a tagged face Who is this? Enter name Enter name Click to exit face tagging mode Click to exit face tagging mode Click to tag faces, changes are saved automatically Click to tag faces, changes are saved automatically File type does not support face tags. File type does not support face tags. filedialog Backwards Backwards Up a level Up a level Forwards Forwards List subfolders List subfolders Enter fullscreen Enter fullscreen Exit fullscreen Exit fullscreen Close Close Storage devices This is the category title of storage devices to open (like USB keys) in the element for opening files Storage devices Detected storage devices on your system Detected storage devices on your system no supported files/folders found no supported files/folders found Click and drag to favorites Click and drag to favorites # images # images Date: Date: Time: Time: File size: File size: File type: File type: %1 image %1 image %1 images %1 images no folder added to favorites yet 'favorites' here refers to the list of favorite folders a user can set in the file dialog no folder added to favorites yet Favorites This is the category title of user-set folders (or favorites) in the file dialog Favorites Your favorites Your favorites Show entry Show entry Hide entry Hide entry Remove entry Remove entry Hide hidden entries Hide hidden entries Show hidden entries Show hidden entries Load this folder Load this folder Load this file Load this file Add to Favorites Add to Favorites Hide hidden files Hide hidden files Show hidden files Show hidden files Hide thumbnails Hide thumbnails Show thumbnails Show thumbnails Hide preview Hide preview Show preview Show preview Standard This is the category title of user-set folders (or favorites) in the file dialog Standard Some standard locations Some standard locations Zoom: Zoom: Adjust font size of files and folders Adjust font size of files and folders Zoom factor: Zoom factor: Sort by: Sort by: Name Name Natural Name Natural Name Time modified Time modified File size File size File type File type reverse order reverse order Choose by what to sort the files Choose by what to sort the files All supported images All supported images Video files Video files All files All files Choose which selection of files to show Choose which selection of files to show Remember loaded folder between sessions. Remember loaded folder between sessions. Switch between list and icon view Switch between list and icon view Hide standard locations Hide standard locations Show standard locations Show standard locations Hide favorite locations Hide favorite locations Show favorite locations Show favorite locations Hide storage devices Hide storage devices Show storage devices Show storage devices File dialog Window title File dialog filemanagement Delete file? Window title Delete file? An error occured, file could not be deleted! An error occured, file could not be deleted! Move to trash Move to trash Delete permanently Delete permanently Rename file Window title Rename file An error occured, file could not be renamed! An error occured, file could not be renamed! Enter new filename Enter new filename Save file as This is a title, similar to all the 'save as' options in many programs. ---------- Window title Save file as An error occured, file could not be saved! An error occured, file could not be saved! Operation cancelled 'Operation' here is the operation of saving an image in a new format Operation cancelled Filter formats This is a short hint informing the user that here they can 'filter all the possible file formats' Filter formats New filename New filename Choose location and save file Choose location and save file filter Filter images in current directory Filter images in current directory Enter here the terms you want to filter the images by. Separate multiple terms by a space. Enter here the terms you want to filter the images by. Separate multiple terms by a space. If you want to filter by file extension, start the term with a dot. If you want to filter by file extension, start the term with a dot. Enter filter term Enter filter term Filter Written on a clickable button - please keep short ---------- Window title Filter Remove filter Written on a clickable button - please keep short Remove filter histogram Histogram Window title Histogram Loading... As in: Loading the histogram for the current image Loading... Click-and-drag to move. Used for the histogram. The version refers to the type of histogram that is available (colored and greyscale) Click-and-drag to move. Right click to switch version. Right click to switch version. imageprovider File failed to load, it does not exist! File failed to load, it does not exist! imgur Upload to imgur.com Window title Upload to imgur.com anonymous Used as in: Upload image as anonymous user anonymous Obtaining image url... Obtaining image url... This seems to take a long time... This seems to take a long time... There might be a problem with your internet connection or the imgur.com servers. There might be a problem with your internet connection or the imgur.com servers. An Error occurred while uploading image! An Error occurred while uploading image! Error code: Error code: You do not seem to be connected to the internet... You do not seem to be connected to the internet... Unable to upload! Unable to upload! Access Image Access Image Click to open in browser Click to open in browser Copy to clipboard Copy to clipboard Delete Image Delete Image keymouse Alt Refers to a keyboard modifier Alt Ctrl Refers to a keyboard modifier Ctrl Shift Refers to a keyboard modifier Shift Page Up Refers to one of the keys on the keyboard Page Up Page Down Refers to one of the keys on the keyboard Page Down Meta Refers to the key that usually has the Windows symbol on it Meta Keypad Refers to the key that triggers the number block on keyboards Keypad Escape Refers to one of the keys on the keyboard Escape Right Refers to one of the arrow keys on the keyboard Right Left Refers to one of the arrow keys on the keyboard Left Up Refers to one of the arrow keys on the keyboard Up Down Refers to one of the arrow keys on the keyboard Down Space Refers to one of the keys on the keyboard Space Delete Refers to one of the keys on the keyboard Delete Backspace Refers to one of the keys on the keyboard Backspace Home Refers to one of the keys on the keyboard Home End Refers to one of the keys on the keyboard End Insert Refers to one of the keys on the keyboard Insert Tab Refers to one of the keys on the keyboard Tab Return Return refers to the enter key of the number block - please try to make the translations of Return and Enter (the main button) different if possible! Return Enter Enter refers to the main enter key - please try to make the translations of Return (in the number block) and Enter different if possible! Enter Left Button Refers to a mouse button Left Button Right Button Refers to a mouse button Right Button Middle Button Refers to a mouse button Middle Button Wheel Up Refers to the mouse wheel Wheel Up Wheel Down Refers to the mouse wheel Wheel Down East Refers to a direction of the mouse when performing a mouse gesture East South Refers to a direction of the mouse when performing a mouse gesture South West Refers to a direction of the mouse when performing a mouse gesture West North Refers to a direction of the mouse when performing a mouse gesture North logging Logging Window title Logging enable debug messages enable debug messages copy to clipboard copy to clipboard save to file save to file metadata Click and drag to resize meta data Click and drag to resize meta data File name Please keep string short! File name Dimensions The dimensions of the loaded image. Please keep string short! Розміри Image #/# Used as in "Image 3/16". The numbers (position of image in folder) are added on automatically. Please keep string short! Image #/# File size Please keep string short! File size File type Please keep string short! File type Make Exif image metadata: the make of the camera used to take the photo. Please keep string short! Виробник Model Exif image metadata: the model of the camera used to take the photo. Please keep string short! Модель Software Exif image metadata: the software used to create the photo. Please keep string short! Програмне забезпечення Time Photo was Taken Exif image metadata: when the photo was taken. Please keep string short! Час зйомки Exposure Time Exif image metadata: how long the sensor was exposed to the light. Please keep string short! Час експозиції Flash Exif image metadata: the flash setting when the photo was taken. Please keep string short! Спалах Scene Type Exif image metadata: the specific scene type the camera used for the photo. Please keep string short! Тип сцени Focal Length Exif image metadata: https://en.wikipedia.org/wiki/Focal_length . Please keep string short! Фокусна відстань Metadata This is the heading of the metadata element ---------- Window title Metadata No File Loaded No File Loaded Click to open GPS position with online map Click to open GPS position with online map Keep Open Used as in: Keep the metadata element open even if the cursor leaves it Keep Open Light Source Exif image metadata: What type of light the camera detected. Please keep string short! Джерело освітлення Keywords IPTC image metadata: A description of the image by the user/software. Please keep string short! Ключові слова Location IPTC image metadata: The CITY and COUNTRY the imge was taken in. Please keep string short! Розташування Copyright IPTC image metadata. Please keep string short! Авторське право GPS Position Exif image metadata. Please keep string short! Місцезнаходження за GPS F Number Exif image metadata: https://en.wikipedia.org/wiki/F-number . Please keep string short! Діафрагма navigate Click and drag to move Click and drag to move Navigate to previous image in folder Navigate to previous image in folder Navigate to next image in folder Navigate to next image in folder Show main menu Show main menu other Open a file to start Open a file to start Click anywhere to open a file Part of the message shown in the main view before any image is loaded Click anywhere to open a file Move your cursor to: Part of the message shown in the main view before any image is loaded Move your cursor to: RIGHT EDGE for the main menu Part of the message shown in the main view before any image is loaded, first option for where to move cursor to RIGHT EDGE for the main menu LEFT EDGE for the metadata Part of the message shown in the main view before any image is loaded, second option for where to move cursor to LEFT EDGE for the metadata BOTTOM EDGE to show the thumbnails Part of the message shown in the main view before any image is loaded, third option for where to move cursor to BOTTOM EDGE to show the thumbnails (once an image/folder is loaded) Part of the message shown in the main view before any image is loaded (once an image/folder is loaded) No matches found Used as in: No matches found for the currently set filter No matches found PhotoQt Image Viewer The window title of PhotoQt PhotoQt Image Viewer popinpopout Merge into main interface Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface Merge into main interface Move to its own window Tooltip of small button to show an element in its own window (i.e., not merged into main interface) Move to its own window quickinfo Click here to enter fullscreen mode Click here to enter fullscreen mode Click here to exit fullscreen mode Click here to exit fullscreen mode Click here to close PhotoQt Click here to close PhotoQt Page %1 of %2 Used as in: Page 12/34 - please keep as short as possible Page %1 of %2 File %1 of %2 Used as in: File 12/34 - please keep as short as possible File %1 of %2 Connected to: This is followed by the name of the Chromecast streaming device currently connected to Connected to: Copy filename to clipboard Copy filename to clipboard Show counter Show counter Hide counter Hide counter Show file path Show file path Hide file path Hide file path Show file name Show file name Hide file name Hide file name Show zoom level Show zoom level Hide zoom level Hide zoom level Click here to enter viewer mode Click here to enter viewer mode Hide central 'viewer mode' button Hide central 'viewer mode' button Click here to exit viewer mode Click here to exit viewer mode Filter: Filter: Show window buttons Show window buttons Hide window buttons Hide window buttons Some info about the current image and directory Some info about the current image and directory Show central 'viewer mode' button Show central 'viewer mode' button Click to remove filter Click to remove filter scale Scale file Window title Scale file An error occured, file could not be scaled! An error occured, file could not be scaled! This file format cannot (yet) be scaled with PhotoQt! This file format cannot (yet) be scaled with PhotoQt! New width x height: New width x height: Preserve aspect ratio The aspect ratio refers to the ratio of the width to the height of the image, e.g., 16:9 for most movies Preserve aspect ratio Quality: This refers to the quality to be used to scale the image Quality: Scale (create new file) Written on a clickable button Scale (create new file) Scale (change file in place) Written on a clickable button Scale (change file in place) De-/Increase width and height by 10% De-/Increase width and height by 10% In-/Decrease quality by 5% In-/Decrease quality by 5% Select new file Select new file settingsmanager interface settings manager tab title interface Tab to control interface settings Tab to control interface settings image view settings manager tab title image view Tab to control how images are viewed Tab to control how images are viewed thumbnails settings manager tab title thumbnails Tab to control the look and behaviour of thumbnails Tab to control the look and behaviour of thumbnails metadata settings manager tab title metadata Tab to control metadata settings Tab to control metadata settings file types settings manager tab title file types Tab to control which file types PhotoQt should recognize Tab to control which file types PhotoQt should recognize shortcuts settings manager tab title shortcuts Tab to control which shortcuts are set Tab to control which shortcuts are set advanced Written on button in setting manager. A click on this button opens a menu with some advanced actions. advanced restore defaults restore defaults import settings import settings export settings export settings disable expert mode disable expert mode enable expert mode enable expert mode Import of %1. This will replace your current settings with the ones stored in the backup. Import of %1. This will replace your current settings with the ones stored in the backup. Do you want to continue? Do you want to continue? Save changes and exit Save changes and exit Exit and discard changes Exit and discard changes Rename File Name of shortcut action Rename File Delete File Name of shortcut action Delete File Filetype settings Filetype settings These settings govern which file types PhotoQt should recognize and open. These settings govern which file types PhotoQt should recognize and open. Not all file types might be available, depending on your setup and what library support was enabled at compile time Not all file types might be available, depending on your setup and what library support was enabled at compile time Image view settings Image view settings These settings affect the viewing of images, how they are shown, in what order, how large a cache to use, etc. These settings affect the viewing of images, how they are shown, in what order, how large a cache to use, etc. Some settings are only shown in expert mode. Some settings are only shown in expert mode. Interface settings Interface settings These settings affect the interface in general, how the application looks like and behaves. This includes the background, some of the labels in the main view, which elements are to be shown in their own window, and others. These settings affect the interface in general, how the application looks like and behaves. This includes the background, some of the labels in the main view, which elements are to be shown in their own window, and others. Metadata settings Metadata settings These settings affect the metadata element, what information it should show and some of its behavior. These settings affect the metadata element, what information it should show and some of its behavior. Shortcuts Shortcuts Navigation A shortcuts category: navigation Navigation Filter images in folder Name of shortcut action Filter images in folder Next image Name of shortcut action Next image Previous image Name of shortcut action Previous image Go to first image Name of shortcut action Name of shortcut action Go to first image Go to last image Name of shortcut action Go to last image Enter viewer mode Name of shortcut action Enter viewer mode Show quick navigation buttons Name of shortcut action Show quick navigation buttons Close window (hides to system tray if enabled) Name of shortcut action Close window (hides to system tray if enabled) Quit PhotoQt Name of shortcut action Quit PhotoQt Image A shortcuts category: image manipulation Image Zoom In Name of shortcut action Zoom In Zoom Out Name of shortcut action Zoom Out Zoom to Actual Size Name of shortcut action Zoom to Actual Size Reset Zoom Name of shortcut action Reset Zoom Rotate Right Name of shortcut action Rotate Right Rotate Left Name of shortcut action Rotate Left Reset Rotation Name of shortcut action Reset Rotation Flip Horizontally Name of shortcut action Flip Horizontally Flip Vertically Name of shortcut action Flip Vertically Scale Image Name of shortcut action Scale Image Play/Pause animation/video Name of shortcut action Play/Pause animation/video Hide/Show face tags (stored in metadata) Name of shortcut action Hide/Show face tags (stored in metadata) Tag faces (stored in metadata) Name of shortcut action Tag faces (stored in metadata) File A shortcuts category: file management File Delete File (without confirmation) Name of shortcut action Delete File (without confirmation) Copy File to a New Location Name of shortcut action Copy File to a New Location Move File to a New Location Name of shortcut action Move File to a New Location Copy Image to Clipboard Name of shortcut action Copy Image to Clipboard Other A shortcuts category: other functions Other Hide/Show main menu Name of shortcut action Hide/Show main menu Hide/Show metadata Name of shortcut action Hide/Show metadata Keep metadata opened Name of shortcut action Keep metadata opened Hide/Show thumbnails Name of shortcut action Hide/Show thumbnails Show Settings Name of shortcut action Show Settings Start Slideshow Name of shortcut action Start Slideshow Start Slideshow (Quickstart) Name of shortcut action Start Slideshow (Quickstart) About PhotoQt Name of shortcut action About PhotoQt Set as Wallpaper Name of shortcut action Set as Wallpaper Show Histogram Name of shortcut action Show Histogram Upload to imgur.com (anonymously) Name of shortcut action Upload to imgur.com (anonymously) Upload to imgur.com user account Name of shortcut action Upload to imgur.com user account Stream content to Chromecast device Name of shortcut action Stream content to Chromecast device Show log/debug messages Name of shortcut action Show log/debug messages External A shortcuts category: external shortcuts External %f = filename including path, %u = filename without path, %d = directory containing file Please leave the three placeholders (%f, %u, %d) as is. %f = filename including path, %u = filename without path, %d = directory containing file Thumbnails settings Thumbnails settings These settings affect the thumbnails shown, by default, along the bottom edge of the screen. This includes their look, behavior, and the user's interaction with them. These settings affect the thumbnails shown, by default, along the bottom edge of the screen. This includes their look, behavior, and the user's interaction with them. Settings Manager Window title Settings Manager Here the shortcuts can be managed. Below you can add a new shortcut for any one of the available actions, both key combinations and mouse gestures are supported. Here the shortcuts can be managed. Below you can add a new shortcut for any one of the available actions, both key combinations and mouse gestures are supported. You can also set the same shortcut for multiple actions or multiple times for the same action. All actions for a shortcut will be executed sequentially, allowing a lot more flexibility in using PhotoQt. You can also set the same shortcut for multiple actions or multiple times for the same action. All actions for a shortcut will be executed sequentially, allowing a lot more flexibility in using PhotoQt. Open file (browse images) Name of shortcut action Open file (browse images) Save image in another format Name of shortcut action Save image in another format Restore defaults As in 'restore the default settings and/or file formats and/or shortcuts'. Please keep short! Restore defaults Here you can restore the default configuration of PhotoQt. You can choose to restore any combination of the following three categories. Here you can restore the default configuration of PhotoQt. You can choose to restore any combination of the following three categories. Restore default settings Restore default settings Restore default file formats Restore default file formats Restore default shortcuts Restore default shortcuts settingsmanager_filetypes These are some additional settings for opening archives. These are some additional settings for opening archives. use external tool: unrar used as label for checkbox use external tool: unrar These are some additional settings for showing PDFs. These are some additional settings for showing PDFs. Quality: the quality setting to be used when loading PDFs Quality: These are some additional settings for playing videos. These are some additional settings for playing videos. Autoplay Used as setting for video files (i.e., autoplay videos) Autoplay Loop Used as setting for video files (i.e., loop videos) Loop Select tool for creating video thumbnails Tooltip shown for combobox for selectiong video thumbnailer Select tool for creating video thumbnails images This is a category of files PhotoQt can recognize: any image format images compressed files This is a category of files PhotoQt can recognize: compressed files like zip, tar, cbr, 7z, etc. compressed files documents This is a category of files PhotoQt can recognize: documents like pdf, txt, etc. documents videos This is a type of category of files PhotoQt can recognize: videos like mp4, avi, etc. videos Enable As in: "Enable all formats in the seleted category of file types" Enable Disable As in: "Disable all formats in the seleted category of file types" Disable Enable everything As in "Enable every single file format PhotoQt can open in any category" Enable everything Currently there are %1 file formats enabled The %1 will be replaced with the number of file formats, please don't forget to add it. Currently there are %1 file formats enabled Search by description or file ending Search by description or file ending Search by image library or category Search by image library or category File endings: File endings: settingsmanager_imageview animation A settings title referring to the in/out animation of images animation What type of animation to show, and how fast. This is referring to the in/out animation of images What type of animation to show, and how fast. type of animation This is referring to the in/out animation of images type of animation opacity This is referring to the in/out animation of images opacity along x-axis This is referring to the in/out animation of images along x-axis along y-axis This is referring to the in/out animation of images along y-axis no animation This is referring to the in/out animation of images no animation long animation This is referring to the in/out animation of images long animation fit in window A settings title referring to whether to fit images in window fit in window Zoom smaller images to fill the full window width and/or height. Zoom smaller images to fill the full window width and/or height. fit smaller images in window fit smaller images in window interpolation A settings title referring to the type of interpolation to use for small images interpolation PhotoQt tries to improve the rendering of images that are shown much larger than they are (i.e., zoomed in a lot). For very tiny images that are zoomed in quite a lot, this can result in the loss of too much information in the image. Thus a threshold can be defined here, images that are smaller than this threshold are shown exactly as they are without any smoothing or other attempts to improve them. PhotoQt tries to improve the rendering of images that are shown much larger than they are (i.e., zoomed in a lot). For very tiny images that are zoomed in quite a lot, this can result in the loss of too much information in the image. Thus a threshold can be defined here, images that are smaller than this threshold are shown exactly as they are without any smoothing or other attempts to improve them. Do not use any interpolation algorithm for very small images A type of interpolation to use for small images Do not use any interpolation algorithm for very small images threshold: The threshold (in pixels) at which to switch interpolation algorithm threshold: remember per session A settings title remember per session By default, PhotoQt resets the zoom, rotation, flipping/mirroring and position when switching to a different image. For certain tasks, for example for comparing two images, it can be helpful to keep these properties. By default, PhotoQt resets the zoom, rotation, flipping/mirroring and position when switching to a different image. For certain tasks, for example for comparing two images, it can be helpful to keep these properties. remember zoom, rotation, flip, position remember zoom, rotation, flip, position left mouse button A settings title left mouse button The left button of the mouse is by default used to move the image around. However, this prevents the left mouse button from being used for shortcuts. The left button of the mouse is by default used to move the image around. However, this prevents the left mouse button from being used for shortcuts. use left button to move image use left button to move image looping A settings title for looping through images in folder looping What to do when the end of a folder has been reached: stop or loop back to first image in folder. What to do when the end of a folder has been reached: stop or loop back to first image in folder. loop through images in folder loop through images in folder margin A settings title about the margin around the main image margin How much space to show between the main image and the application border. How much space to show between the main image and the application border. none As in: no margin between the main image and the window edges none pixmap cache A settings title pixmap cache Size of runtime cache for fully loaded images. This cache is cleared when the application quits. Size of runtime cache for fully loaded images. This cache is cleared when the application quits. sort images by A settings title sort images by Sort all images in a folder by the set property. Sort all images in a folder by the set property. natural name A criteria for sorting images natural name name A criteria for sorting images name time A criteria for sorting images time size A criteria for sorting images size type A criteria for sorting images type ascending Sort images in ascending order ascending descending Sort images in descending order descending transparency marker A settings title transparency marker Show checkerboard pattern behind transparent areas of (half-)transparent images. Show checkerboard pattern behind transparent areas of (half-)transparent images. show checkerboard pattern Setting for how to display images that have transparent areas, whether to show checkerboard pattern in that area or not show checkerboard pattern zoom speed A settings title, the zoom here is the zoom of the main image zoom speed Images are zoomed at a relative speed as specified by this percentage. A higher value means faster zoom. Images are zoomed at a relative speed as specified by this percentage. A higher value means faster zoom. super slow This refers to the zoom speed, the zoom here is the zoom of the main image super slow very fast This refers to the zoom speed, the zoom here is the zoom of the main image very fast settingsmanager_interface background A settings title referring to the background of PhotoQt (behind any image/element) background What type of background is to be shown. The background here refers to the area behind the main image and any element in PhotoQt, the very back. What type of background is to be shown. (half-)transparent background How the background of PhotoQt should be (half-)transparent background faked transparency How the background of PhotoQt should be faked transparency custom background image How the background of PhotoQt should be custom background image Click to select an image Tooltip for a mouse area, a click on which opens a file dialog for selecting an image Click to select an image scale to fit If an image is set as background of PhotoQt this is one way it can be handled. scale to fit scale and crop to fit If an image is set as background of PhotoQt this is one way it can be handled. scale and crop to fit stretch to fit If an image is set as background of PhotoQt this is one way it can be handled. stretch to fit center image If an image is set as background of PhotoQt this is one way it can be handled. center image tile image If an image is set as background of PhotoQt this is one way it can be handled. tile image All Images This is a category in a file dialog for selecting images used as in: All images supported by PhotoQt. All Images Video This is a category in a file dialog for selecting images used as in: Video files supported by PhotoQt. Video empty area around image A settings title empty area around image How to handle clicks on empty area around images. How to handle clicks on empty area around images. close on click Used as in: Close PhotoQt on click on empty area around main image close on click Close PhotoQt when click occurred on empty area around image Close PhotoQt when click occurred on empty area around image navigate on click Used as in: Close PhotoQt on click on empty area around main image navigate on click Go to next/previous image if click occurred in left/right half of window Go to next/previous image if click occurred in left/right half of window size of 'hot edge' A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) size of 'hot edge' Adjusts the sensitivity of the edges for showing elements like the metadata and main menu elements. Adjusts the sensitivity of the edges for showing elements like the metadata and main menu elements. small used as in: small area small large used as in: large area large language A settings title. language Change the language of the application. Change the language of the application. mouse wheel sensitivity A settings title. mouse wheel sensitivity How sensitive the mouse wheel is for shortcuts, etc. How sensitive the mouse wheel is for shortcuts, etc. not sensitive The sensitivity here refers to the sensitivity of the mouse wheel not sensitive very sensitive The sensitivity here refers to the sensitivity of the mouse wheel very sensitive overlay color A settings title. overlay color This is the color that is shown on top of any background image/... This is the color that is shown on top of any background image/... click to change color click to change color please choose a color please choose a color pop out elements A settings title. The popping out that is talked about here refers to the possibility of showing any element in its own window (i.e., popped out). pop out elements Here you can choose for most elements whether they are to be shown integrated into the main window or in their own, separate window. Here you can choose for most elements whether they are to be shown integrated into the main window or in their own, separate window. File dialog Used as identifying name for one of the elements in the interface File dialog keep open keep open Settings Manager Used as identifying name for one of the elements in the interface Settings Manager Main Menu Used as identifying name for one of the elements in the interface Main Menu Metadata Used as identifying name for one of the elements in the interface Metadata Histogram Used as identifying name for one of the elements in the interface Histogram Scale Used as identifying name for one of the elements in the interface Scale Slideshow Settings Used as identifying name for one of the elements in the interface Slideshow Settings Slideshow Controls Used as identifying name for one of the elements in the interface Slideshow Controls Rename File Used as identifying name for one of the elements in the interface Rename File Delete File Used as identifying name for one of the elements in the interface Delete File Save File As Used as identifying name for one of the elements in the interface Save File As About Used as identifying name for one of the elements in the interface About Imgur Used as identifying name for one of the elements in the interface Imgur Wallpaper Used as identifying name for one of the elements in the interface Wallpaper Filter Noun, not a verb. Used as identifying name for one of the elements in the interface Filter labels A settings title. labels The labels are shown along the top edge of the main view. The labels are shown along the top edge of the main view. show labels checkbox in settings manager show labels counter refers to the image counter (i.e., image #/# in current folder) counter filepath show filepath in the labels. This is specifically the filePATH and not the filename. filepath filename show filename in the labels. This is specifically the fileNAME and not the filepath. filename current zoom level current zoom level current rotation angle current rotation angle window buttons the window buttons are some window management buttons like: close window, maximize, fullscreen window buttons size of window buttons the size of the window buttons (the buttons shown in the top right corner of the window) size of window buttons remember last image A settings title. remember last image At startup the image loaded at the end of the last session can be automatically reloaded. At startup the image loaded at the end of the last session can be automatically reloaded. re-open last loaded image at startup re-open last loaded image at startup tray icon A settings title. tray icon If a tray icon is to be shown and, if shown, whether to hide it or not. If a tray icon is to be shown and, if shown, whether to hide it or not. no tray icon no tray icon hide to tray icon hide to tray icon show tray icon but don't hide to it show tray icon but don't hide to it window management A settings title. window management Some basic window management properties. Some basic window management properties. manage window through quick info labels manage window through quick info labels save and restore window geometry save and restore window geometry keep above other windows keep above other windows window mode A settings title. window mode Whether to run PhotoQt in window mode or fullscreen. Whether to run PhotoQt in window mode or fullscreen. run in window mode run in window mode show window decoration show window decoration custom main menu entries A settings title. custom main menu entries Add some custom entries in the main menu on the right. Add some custom entries in the main menu on the right. what string to show in main menu this is the placeholder text inside of a text box telling the user what text they can enter here what string to show in main menu which command to execute this is the placeholder text inside of a text box telling the user what text they can enter here which command to execute quit Keep string short! Used on checkbox for contextmenu, refers to option to close PhotoQt after respective command has been executed. quit move entry down contextmenu settings: used as in 'move this entry down in the list of all entries' move entry down move entry up contextmenu settings: used as in 'move this entry up in the list of all entries' move entry up delete entry contextmenu settings: used as in 'delete this entry out of the list of all entries' delete entry quick navigation A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) quick navigation Some buttons to help with quick navigation. These can come in handy when, e.g., operating with a touch screen. Some buttons to help with quick navigation. These can come in handy when, e.g., operating with a touch screen. Show quick navigation buttons Show quick navigation buttons settingsmanager_metadata face tags A settings title. The face tags are labels that can be shown (if available) on faces including their name. face tags Whether to show face tags (stored in metadata info). The face tags are labels that can be shown (if available) on faces including their name. Whether to show face tags (stored in metadata info). enable enable face tags - border A settings title. The face tags are labels that can be shown (if available) on faces including their name. face tags - border If and what style of border to show around tagged faces. If and what style of border to show around tagged faces. show border The border here is the border around face tags. show border click to change color click to change color please choose a color please choose a color face tags - font size A settings title. The face tags are labels that can be shown (if available) on faces including their name. face tags - font size The font size of the name labels. The name labels here are the labels with the name used for the face tags. The font size of the name labels. face tags - visibility A settings title. The face tags are labels that can be shown (if available) on faces including their name. face tags - visibility When to show the face tags and for how long. When to show the face tags and for how long. hybrid mode A mode for showing face tags. hybrid mode always show all A mode for showing face tags. always show all show one on hover A mode for showing face tags. show one on hover show all on hover A mode for showing face tags. show all on hover GPS online map A settings title. GPS online map Which map service to use when a GPS position is clicked. Which map service to use when a GPS position is clicked. hot edge A settings title. The hot edge refers to the area along the left edge of PhotoQt where the mouse cursor triggers the visibility of the metadata element. hot edge Show metadata element when the mouse cursor is close to the window edge Show metadata element when the mouse cursor is close to the window edge meta information A settings title. meta information Which meta information to extract and display. Which meta information to extract and display. file name Part of the meta information about the current image. file name file type Part of the meta information about the current image. file type file size Part of the meta information about the current image. file size image #/# Part of the meta information about the current image. image #/# dimensions Part of the meta information about the current image. dimensions copyright Part of the meta information about the current image. copyright exposure time Part of the meta information about the current image. exposure time flash Part of the meta information about the current image. flash focal length Part of the meta information about the current image. focal length f-number Part of the meta information about the current image. f-number GPS position Part of the meta information about the current image. GPS position keywords Part of the meta information about the current image. keywords light source Part of the meta information about the current image. light source location Part of the meta information about the current image. location make Part of the meta information about the current image. make model Part of the meta information about the current image. model scene type Part of the meta information about the current image. scene type software Part of the meta information about the current image. software time photo was taken Part of the meta information about the current image. time photo was taken opacity A settings title. opacity The opacity of the metadata element. The opacity of the metadata element. auto-rotation A settings title. auto-rotation Automatically rotate images based on metadata information. Automatically rotate images based on metadata information. settingsmanager_shortcuts quit checkbox in shortcuts settings, used as in: quit PhotoQt. Please keep as short as possible! quit Click to change shortcut Click to change shortcut Click to delete shortcut Click to delete shortcut no shortcut set no shortcut set Click to manage shortcut Click to manage shortcut add new Used as in 'add new shortcut'. Please keep short! add new Add New Shortcut Add New Shortcut Perform a mouse gesture here or press any key combo Perform a mouse gesture here or press any key combo Add new Used on button as in 'add new external shortcut'. Please keep short! Add new settingsmanager_thumbnails thumbnail cache A settings title. thumbnail cache Thumbnails can be cached (permanently), following the freedesktop.org standard. Thumbnails can be cached (permanently), following the freedesktop.org standard. enable enable keep in center A settings title. Used as in: Keep thumbnail for current main image in center. keep in center Keep currently active thumbnail in the center of the screen Keep currently active thumbnail in the center of the screen center on active thumbnail center on active thumbnail disable thumbnails disable thumbnails Disable thumbnails in case no thumbnails are desired whatsoever. Disable thumbnails in case no thumbnails are desired whatsoever. disable all thumbnails disable all thumbnails filename label A settings title. The filename label here is the one that is written on thumbnails. filename label Show the filename on a small label on the thumbnail image. Show the filename on a small label on the thumbnail image. font size: font size: filename-only A settings title. This refers to using only the filename as thumbnail and no actual image. filename-only Show only the filename as thumbnail, no actual image. Show only the filename as thumbnail, no actual image. lift up A settings title. This refers to the lift up of thumbnail images when active/hovered. lift up How many pixels to lift up thumbnails when either hovered or active. How many pixels to lift up thumbnails when either hovered or active. position A settings title referring to the position of the thumbnails (upper or lower edge of PhotoQt). position Which edge to show the thumbnails on, upper or lower edge. Which edge to show the thumbnails on, upper or lower edge. upper edge The upper edge of PhotoQt upper edge lower edge The lower edge of PhotoQt lower edge size A settings title referring to the size of the thumbnails. size How large (or small) the thumbnails should be. How large (or small) the thumbnails should be. spacing A settings title referring to the spacing of thumbnails, i.e., how much empty space to have between each. spacing How much space to show between the thumbnails. How much space to show between the thumbnails. threads A settings title, as in: How many threads to use to generate thumbnails. threads How many threads to use to create thumbnails. Too many threads can slow down your computer! How many threads to use to create thumbnails. Too many threads can slow down your computer! Threads: Threads: visibility A settings title referring to the visibility of the thumbnails, i.e., if and when to hide them. visibility If and how to keep thumbnails visible If and how to keep thumbnails visible hide when not needed This is talking about the thumbnails. hide when not needed never hide This is talking about the thumbnails. never hide hide when zoomed in This is talking about the thumbnails. hide when zoomed in exclude folders exclude folders Exclude the specified folders and all of its subfolders from any sort of caching and preloading. Exclude the specified folders and all of its subfolders from any sort of caching and preloading. Do not cache these folders: Do not cache these folders: Add folder Written on a button Add folder One folder per line One folder per line slideshow Click to go to the previous image Click to go to the previous image Click to pause slideshow Click to pause slideshow Click to play slideshow Click to play slideshow Click to go to the next image Click to go to the next image Sound volume: Sound volume: Click to quit slideshow Click to quit slideshow Slideshow settings Window title Slideshow settings interval The interval between images in a slideshow interval animation This is referring to the in/out animation of images during a slideshow animation opacity This is referring to the in/out animation of images during slideshows opacity along x-axis This is referring to the in/out animation of images during slideshows along x-axis along y-axis This is referring to the in/out animation of images during slideshows along y-axis animation speed The speed of transitioning from one image to another during slideshows animation speed immediately, without animation This refers to a speed of transitioning from one image to another during slideshows immediately, without animation pretty fast animation This refers to a speed of transitioning from one image to another during slideshows pretty fast animation not too fast and not too slow This refers to a speed of transitioning from one image to another during slideshows not too fast and not too slow very slow animation This refers to a speed of transitioning from one image to another during slideshows very slow animation current speed This refers to the currently set speed of transitioning from one image to another during slideshows current speed looping looping loop over all files Loop over all images during slideshows loop over all files shuffle during slideshows shuffle the order of all images shuffle shuffle all files during slideshows shuffle the order of all images shuffle all files subfolders also include images in subfolders during slideshows subfolders include images in subfolders also include images in subfolders during slideshows include images in subfolders quickinfo What to do with the quick info during slideshows quickinfo hide quickinfo What to do with the quick info during slideshows hide quickinfo music The music that is to be played during slideshows music enable music Enable music to be played during slideshows enable music no file selected no file selected Click to select music file Click to select music file Click to change music file Click to change music file Common music file formats Common music file formats All Files All Files Start slideshow Written on a clickable button Start slideshow Slideshow controls Window title Slideshow controls startup Edit with %1 Used as in 'Edit with [application]'. %1 will be replaced with application name. Edit with %1 Open in %1 Used as in 'Open with [application]'. %1 will be replaced with application name. Open in %1 streaming Scan for devices Used as tooltip for button that starts a scan for Chromecast streaming devices in the local network Scan for devices Disconnect Written on button, as in 'Disconnect from connected Chromecast streaming device' Disconnect Connect Written on button, as in 'Connect to Chromecast streaming device' Connect searching for devices... status text while searching for chromecast streaming devices in the local network searching for devices... no devices found result of scan for chromecast streaming devices no devices found Streaming (Chromecast) Window title Streaming (Chromecast) thumbnailbar File size: File size: File type: File type: unavailable Sorry, but this feature is not yet available on Windows. Sorry, but this feature is not yet available on Windows. Feature unavailable Window title, informing user that the requested feature is currently not available Feature unavailable wallpaper Warning: %1 module not activated Warning: %1 module not activated Warning: %1 not found Warning: %1 not found Set to which screens As in: Set wallpaper to which screens Set to which screens Screen Used in wallpaper element Screen Set to which workspaces Enlightenment desktop environment handles wallpapers per workspace (different from screen) Set to which workspaces Workspace: Enlightenment desktop environment handles wallpapers per workspace (different from screen) Workspace: Choose picture option picture option refers to how to format a pictrue when setting it as wallpaper Choose picture option Other Used as in: Other Desktop Environment Other Tool: Tool refers to a program that can be executed Tool: Click to choose %1 %1 is a placeholder for the name of a desktop environment (plasma, xfce, gnome, etc.) Click to choose %1 Set as Wallpaper Heading of wallpaper element ---------- Written on clickable button ---------- Window title Set as Wallpaper The image will be set to all screens at the same time. The image will be set to all screens at the same time. photoqt-2.5/lang/photoqt_lt_LT.ts000644 001750 001750 00000650317 14165351632 017517 0ustar00luspiluspi000000 000000 MainMenu Settings This is an entry in the main menu on the right. Please keep short! Nustatymai Slideshow This is an entry in the main menu on the right. Please keep short! Skaidrių rodymas setup This is an entry in the main menu on the right, used as in: setting up a slideshow. Please keep short! nustatyti quickstart This is an entry in the main menu on the right, used as in: quickstarting a slideshow. Please keep short! greitasis paleidimas Face tagging mode This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Veidų žymėjimo veiksena About PhotoQt This is an entry in the main menu on the right. Please keep short! Apie PhotoQt Quit This is an entry in the main menu on the right. Please keep short! Išeiti Filter images in folder This is an entry in the main menu on the right. Please keep short! Filter images in folder Show/Hide metadata This is an entry in the main menu on the right. Please keep short! Show/Hide metadata Scale image This is an entry in the main menu on the right. Please keep short! Scale image Go to This is an entry in the main menu on the right, used as in: Go To some image. Please keep short! Pereiti į previous This is an entry in the main menu on the right, used as in: go to previous image. Please keep short! ankstesnį next This is an entry in the main menu on the right, used as in: go to next image. Please keep short! kitą first This is an entry in the main menu on the right, used as in: go to first image. Please keep short! pirmą last This is an entry in the main menu on the right, used as in: go to last image. Please keep short! paskutinį Zoom This is an entry in the context menu, used as in: Zoom image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Zoom image. Please keep short! Mastelis reset This is an entry in the context menu, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the context menu, used as in: Reset flip/mirror of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset flip/mirror of image. Please keep short! atstatyti Rotate This is an entry in the context menu, used as in: Rotate image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image. Please keep short! Pasukti Click and drag to resize main menu Spustelėkite ir tempkite norėdami keisti pagrindinio meniu dydį Wallpaper This is an entry in the main menu on the right. Please keep short! Darbalaukio fonas Open file (browse images) This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Open file (browse images) left This is an entry in the context menu, used as in: Rotate image left. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image left. Please keep short! kairėn right This is an entry in the context menu, used as in: Rotate image right. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image right. Please keep short! dešinėn Flip This is an entry in the context menu, used as in: Flip/Mirror image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image. Please keep short! Apversti horizontal This is an entry in the context menu, used as in: Flip/Mirror image horizontally. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image horizontally. Please keep short! horizonaliai vertical This is an entry in the context menu, used as in: Flip/Mirror image vertically. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image vertically. Please keep short! vertikaliai File This is an entry in the context menu, used to refer to the current file (specifically the file, not directly the image). Please keep short! ---------- This is an entry in the main menu on the right, used to refer to the current file (specifically the file, not directly the image). Please keep short! Failas rename This is an entry in the context menu, used as in: rename file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: rename file. Please keep short! pervadinti copy This is an entry in the context menu, used as in: copy file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: copy file. Please keep short! kopijuoti move This is an entry in the context menu, used as in: move file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: move file. Please keep short! perkelti delete This is an entry in the context menu, used as in: delete file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: delete file. Please keep short! ištrinti Streaming (Chromecast) This is an entry in the context menu, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! ---------- This is an entry in the main menu on the right, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! Streaming (Chromecast) Copy to clipboard This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Copy to clipboard Show/Hide histogram This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Show/Hide histogram Open in default file manager This is an entry in the main menu on the right. Please keep short! Atverti numatytoje failų tvarkytuvėje Show log/debug messages This is an entry in the main menu on the right. Please keep short! Show log/debug messages Main Menu This is the heading of the main menu element ---------- Window title Pagrindinis meniu Click here to go to the online manual for help regarding shortcuts, settings, features, ... Spustelėkite čia, norėdami pereiti į internetinį žinyną, kuriame pateikiama informacija apie sparčiuosius klavišus, nustatymus, ypatybes, ... PQImageFormats ERROR getting default image formats This is the window title of an error message box KLAIDA gaunant numatytuosius paveikslų formatus I tried hard, but I just cannot open even a read-only version of the database of default image formats. I tried hard, but I just cannot open even a read-only version of the database of default image formats. Something went terribly wrong somewhere! Something went terribly wrong somewhere! I tried hard, but I just cannot open the database of default image formats. I tried hard, but I just cannot open the database of default image formats. PQMetaData yes This string identifies that flash was fired, stored in image metadata taip no This string identifies that flash was not fired, stored in image metadata ne No flash function This string refers to the absense of a flash, stored in image metadata Nėra blykstės funkcijos strobe return light not detected This string refers to a flash mode, stored in image metadata stroboskopo grįžtamoji šviesa neaptikta strobe return light detected This string refers to a flash mode, stored in image metadata stroboskopo grįžtamoji šviesa aptikta compulsory flash mode This string refers to a flash mode, stored in image metadata priverstinės blykstės veiksena auto mode This string refers to a flash mode, stored in image metadata automatinė veiksena red-eye reduction mode This string refers to a flash mode, stored in image metadata raudonų akių mažinimo režimas return light detected This string refers to a flash mode, stored in image metadata grįžtamoji šviesa aptikta return light not detected This string refers to a flash mode, stored in image metadata grįžtamoji šviesa neaptikta Invalid flash This string refers to a flash mode, stored in image metadata Netaisyklinga blykstė Standard This string refers to a type of scene, stored in image metadata Standartinis Landscape This string refers to a type of scene, stored in image metadata Kraštovaizdis Portrait This string refers to a type of scene, stored in image metadata Portretas Night Scene This string refers to a type of scene, stored in image metadata Nakties režimas Invalid Scene Type This string refers to a type of scene, stored in image metadata Netaisyklingas režimas Unknown This string refers to the light source stored in image metadata Nežinoma Daylight This string refers to the light source stored in image metadata Dienos šviesa Fluorescent This string refers to the light source stored in image metadata Fluorescencinis Tungsten (incandescent light) This string refers to the light source stored in image metadata Volframas (kaitrinė lempa) Flash This string refers to the light source stored in image metadata Blykstė Fine weather This string refers to the light source stored in image metadata Geri orai Cloudy Weather This string refers to the light source stored in image metadata Debesuoti orai Shade This string refers to the light source stored in image metadata Šešėlis Daylight fluorescent This string refers to the light source stored in image metadata Dienos šviesos fluorescencinis Day white fluorescent This string refers to the light source stored in image metadata Dienos baltas fluorescencinis Cool white fluorescent This string refers to the light source stored in image metadata Šaltai baltas fluorescencinis White fluorescent This string refers to the light source stored in image metadata Baltas fluorescencinis Standard light This string refers to the light source stored in image metadata Įprastas apšvietimas Other light source This string refers to the light source stored in image metadata Kitas šviesos šaltinis Invalid light source This string refers to the light source stored in image metadata Netaisyklingas šviesos šaltinis PQSettings ERROR getting database with default settings This is the window title of an error message box ERROR getting database with default settings I tried hard, but I just cannot open even a read-only version of the settings database. I tried hard, but I just cannot open even a read-only version of the settings database. Something went terribly wrong somewhere! Something went terribly wrong somewhere! ERROR opening database with default settings ERROR opening database with default settings I tried hard, but I just cannot open the database of default settings. I tried hard, but I just cannot open the database of default settings. PQShortcuts ERROR getting database with default shortcuts This is the window title of an error message box ERROR getting database with default shortcuts I tried hard, but I just cannot open even a read-only version of the shortcuts database. I tried hard, but I just cannot open even a read-only version of the shortcuts database. Something went terribly wrong somewhere! Something went terribly wrong somewhere! ERROR opening database with default settings ERROR opening database with default settings I tried hard, but I just cannot open the database of default shortcuts. I tried hard, but I just cannot open the database of default shortcuts. PQStartup SQLite error This is the window title of an error message box SQLite klaida You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! TabShortcuts about Close Užverti Current version: Dabartinė versija: License: Licencija: Open license Atverti licenciją Website: Internetinė svetainė: Open website Atverti internetinę svetainę Contact: Susisiekite: Send an email Siųsti el. laišką About Window title Apie buttongeneric Ok This is a generic string written on clickable buttons - please keep short! Gerai Cancel This is a generic string written on clickable buttons - please keep short! Atsisakyti Save This is a generic string written on clickable buttons - please keep short! Įrašyti Close This is a generic string written on clickable buttons - please keep short! Užverti commandlineparser Image Viewer Paveikslų žiūryklė Image file to open. Paveikslo failas, kurį atverti. Make PhotoQt ask for a new file. Priversti PhotoQt prašyti naujo failo. Shows PhotoQt from system tray. Parodo PhotoQt iš sistemos dėklo. Hides PhotoQt to system tray. Command line option Paslepia PhotoQt į sistemos dėklą. Show/Hide PhotoQt. Rodyti/slėpti PhotoQt. Enable thumbnails. Command line option Įjungti miniatiūras. Disable thumbnails. Command line option Išjungti miniatiūras. Enable system tray icon. Command line option Įjungti sistemos dėklo piktogramą. Disable system tray icon. Command line option Išjungti sistemos dėklo piktogramą. Start PhotoQt hidden to the system tray. Command line option Paleidžia PhotoQt paslėptą į sistemos dėklą. Open standalone PhotoQt, allows for multiple instances but without remote interaction. Command line option Atverti atskirą PhotoQt, leidžia kelis egzempliorius, bet be nuotolinės sąveikos. Simulate a shortcut sequence Command line option Simuliuoti sparčiųjų klavišų seką Switch on debug messages. Command line option Įjungti derinimo pranešimus. Switch off debug messages. Command line option Išjungti derinimo pranešimus. Export configuration to given filename. Command line option Eksportuoti konfigūraciją į nurodytą failo pavadinimą. filename Command line option filename Import configuration from given filename. Command line option Importuoti konfigūraciją iš nurodyto failo pavadinimo. Check the configuration and correct any detected issues. Command line option Check the configuration and correct any detected issues. Reset default configuration. Command line option Reset default configuration. facetagging Who is this? This question is asked in the face tagger to ask for the name of a tagged face Kas tai? Enter name Įveskite vardą Click to exit face tagging mode Spustelėkite norėdami išeiti iš veidų žymėjimo veiksenos Click to tag faces, changes are saved automatically Spustelėkite norėdami žymėti veidus, pakeitimai įrašomi automatiškai File type does not support face tags. File type does not support face tags. filedialog Backwards Atgal Up a level Up a level Forwards Pirmyn List subfolders Išvardyti poaplankius Enter fullscreen Enter fullscreen Exit fullscreen Išeiti iš viso ekrano Close Užverti Storage devices This is the category title of storage devices to open (like USB keys) in the element for opening files Atminties įrenginiai Detected storage devices on your system Jūsų sistemoje aptikti atminties įrenginiai no supported files/folders found nerasta palaikomų failų/aplankų Click and drag to favorites Spustelėkite ir tempkite į mėgstamas # images # pav. Date: Data: Time: Laikas: File size: Failo dydis: File type: Failo tipas: %1 image %1 pav. %1 images %1 pav. no folder added to favorites yet 'favorites' here refers to the list of favorite folders a user can set in the file dialog no folder added to favorites yet Favorites This is the category title of user-set folders (or favorites) in the file dialog Mėgstamos Your favorites Jūsų mėgstamos Show entry Rodyti įrašą Hide entry Slėpti įrašą Remove entry Šalinti įrašą Hide hidden entries Slėpti paslėptus įrašus Show hidden entries Rodyti paslėptus įrašus Load this folder Įkelti šį aplanką Load this file Įkelti šį failą Add to Favorites Pridėti prie mėgstamų Hide hidden files Slėpti paslėptus failus Show hidden files Rodyti paslėptus failus Hide thumbnails Slėpti miniatiūras Show thumbnails Rodyti miniatiūras Hide preview Slėpti peržiūrą Show preview Rodyti peržiūrą Standard This is the category title of user-set folders (or favorites) in the file dialog Standartinės Some standard locations Kai kurios standartinės vietos Zoom: Mastelis: Adjust font size of files and folders Reguliuoti failų ir aplankų šrifto dydį Zoom factor: Mastelio faktorius: Sort by: Rikiuoti pagal: Name Pavadinimas Natural Name Natūralus pavadinimas Time modified Modifikavimo laikas File size Failo dydis File type Failo tipas reverse order atvirkštinė tvarka Choose by what to sort the files Pasirinkite kokia tvarka rikiuoti failus All supported images Visi palaikomi paveikslai Video files Vaizdo įrašų failai All files Visi failai Choose which selection of files to show Pasirinkite kokius failus rodyti Remember loaded folder between sessions. Prisiminti įkeltą aplanką tarp seansų. Switch between list and icon view Perjungti tarp sąrašo ir piktogramų rodinio Hide standard locations Slėpti standartines vietas Show standard locations Rodyti standartines vietas Hide favorite locations Slėpti mėgstamas vietas Show favorite locations Rodyti mėgstamas vietas Hide storage devices Slėpti atminties įrenginius Show storage devices Rodyti atminties įrenginius File dialog Window title Failo dialogas filemanagement Delete file? Window title Ištrinti failą? An error occured, file could not be deleted! Įvyko klaida, nepavyko ištrinti failo! Move to trash Perkelti į šiukšlinę Delete permanently Ištrinti visam laikui Rename file Window title Pervadinti failą An error occured, file could not be renamed! Įvyko klaida, nepavyko pervadinti failo! Enter new filename Įveskite naują failo pavadinimą Save file as This is a title, similar to all the 'save as' options in many programs. ---------- Window title Įrašyti failą kaip An error occured, file could not be saved! Įvyko klaida, nepavyko įrašyti failo! Operation cancelled 'Operation' here is the operation of saving an image in a new format Operacijos atsisakyta Filter formats This is a short hint informing the user that here they can 'filter all the possible file formats' Filtruoti formatus New filename Naujas failo pavadinimas Choose location and save file Pasirinkti vietą ir įrašyti failą filter Filter images in current directory Filtruoti paveikslus esamame kataloge Enter here the terms you want to filter the images by. Separate multiple terms by a space. Čia įveskite terminus, pagal kuriuos norite filtruoti paveikslus. Kiekvieną terminą atskirkite tarpu. If you want to filter by file extension, start the term with a dot. Jei norite filtruoti pagal failo prievardį, termino pradžioje parašykite tašką. Enter filter term Įveskite filtravimo terminus Filter Written on a clickable button - please keep short ---------- Window title Filtruoti Remove filter Written on a clickable button - please keep short Šalinti filtrą histogram Histogram Window title Histograma Loading... As in: Loading the histogram for the current image Įkeliama... Click-and-drag to move. Used for the histogram. The version refers to the type of histogram that is available (colored and greyscale) Tempkite norėdami perkelti. Right click to switch version. Spustelėkite dešiniuoju mygtuku norėdami perjungti versiją. imageprovider File failed to load, it does not exist! Nepavyko įkelti failo, jo nėra! imgur Upload to imgur.com Window title Įkelti į imgur.com anonymous Used as in: Upload image as anonymous user anonimiškai Obtaining image url... Gaunamas paveikslo url... This seems to take a long time... Atrodo, kad tai ilgai užtruko... There might be a problem with your internet connection or the imgur.com servers. Gali būti, kad yra problemų su jūsų interneto ryšiu arba imgur.com serveriais. An Error occurred while uploading image! Įkeliant paveikslą įvyko klaida! Error code: Klaidos kodas: You do not seem to be connected to the internet... Atrodo, kad nesate prisijungę prie interneto... Unable to upload! Nepavyko įkelti! Access Image Pasiekti paveikslą Click to open in browser Spustelėkite norėdami atverti naršyklėje Copy to clipboard Kopijuoti į iškarpinę Delete Image Ištrinti paveikslą keymouse Alt Refers to a keyboard modifier Alt Ctrl Refers to a keyboard modifier Vald Shift Refers to a keyboard modifier Lyg2 Page Up Refers to one of the keys on the keyboard Psl ↑ Page Down Refers to one of the keys on the keyboard Psl ↓ Meta Refers to the key that usually has the Windows symbol on it Meta Keypad Refers to the key that triggers the number block on keyboards Pagalb. klaviat. Escape Refers to one of the keys on the keyboard Gr Right Refers to one of the arrow keys on the keyboard Dešinėn Left Refers to one of the arrow keys on the keyboard Kairėn Up Refers to one of the arrow keys on the keyboard Aukštyn Down Refers to one of the arrow keys on the keyboard Žemyn Space Refers to one of the keys on the keyboard Tarpas Delete Refers to one of the keys on the keyboard Šal Backspace Refers to one of the keys on the keyboard Naik Home Refers to one of the keys on the keyboard Prad End Refers to one of the keys on the keyboard Pab Insert Refers to one of the keys on the keyboard Įterpti Tab Refers to one of the keys on the keyboard Tab Return Return refers to the enter key of the number block - please try to make the translations of Return and Enter (the main button) different if possible! Įvesti (pagalb. klav.) Enter Enter refers to the main enter key - please try to make the translations of Return (in the number block) and Enter different if possible! Įvesti Left Button Refers to a mouse button Kairys mygtukas Right Button Refers to a mouse button Dešinys mygtukas Middle Button Refers to a mouse button Vidurinis mygtukas Wheel Up Refers to the mouse wheel Ratuku aukštyn Wheel Down Refers to the mouse wheel Ratuku žemyn East Refers to a direction of the mouse when performing a mouse gesture Rytai South Refers to a direction of the mouse when performing a mouse gesture Pietūs West Refers to a direction of the mouse when performing a mouse gesture Vakarai North Refers to a direction of the mouse when performing a mouse gesture Šiaurė logging Logging Window title Registravimas enable debug messages enable debug messages copy to clipboard kopijuoti į iškarpinę save to file įrašyti į failą metadata Click and drag to resize meta data Spustelėkite ir tempkite norėdami keisti metaduomenų dydį File name Please keep string short! Failo pavadinimas Dimensions The dimensions of the loaded image. Please keep string short! Matmenys Image #/# Used as in "Image 3/16". The numbers (position of image in folder) are added on automatically. Please keep string short! Paveikslas #/# File size Please keep string short! Failo dydis File type Please keep string short! Failo tipas Make Exif image metadata: the make of the camera used to take the photo. Please keep string short! Gamintojas Model Exif image metadata: the model of the camera used to take the photo. Please keep string short! Modelis Software Exif image metadata: the software used to create the photo. Please keep string short! Programinė įranga Time Photo was Taken Exif image metadata: when the photo was taken. Please keep string short! Fotografavimo laikas Exposure Time Exif image metadata: how long the sensor was exposed to the light. Please keep string short! Išlaikymas Flash Exif image metadata: the flash setting when the photo was taken. Please keep string short! Blykstė Scene Type Exif image metadata: the specific scene type the camera used for the photo. Please keep string short! Režimas Focal Length Exif image metadata: https://en.wikipedia.org/wiki/Focal_length . Please keep string short! Židinio nuotolis Metadata This is the heading of the metadata element ---------- Window title Metaduomenys No File Loaded Neįkeltas joks failas Click to open GPS position with online map Spustelėkite norėdami internetiniame žemėlapyje atverti GPS poziciją Keep Open Used as in: Keep the metadata element open even if the cursor leaves it Palikti atvertą Light Source Exif image metadata: What type of light the camera detected. Please keep string short! Šviesos šaltinis Keywords IPTC image metadata: A description of the image by the user/software. Please keep string short! Raktažodžiai Location IPTC image metadata: The CITY and COUNTRY the imge was taken in. Please keep string short! Vieta Copyright IPTC image metadata. Please keep string short! Autorių teisės GPS Position Exif image metadata. Please keep string short! GPS pozicija F Number Exif image metadata: https://en.wikipedia.org/wiki/F-number . Please keep string short! F skaičius navigate Click and drag to move Tempkite norėdami perkelti Navigate to previous image in folder Naršyti į ankstesnį paveikslą aplanke Navigate to next image in folder Naršyti į kitą paveikslą aplanke Show main menu Rodyti pagrindinį meniu other Open a file to start Norėdami pradėti, atverkite failą Click anywhere to open a file Part of the message shown in the main view before any image is loaded Click anywhere to open a file Move your cursor to: Part of the message shown in the main view before any image is loaded Move your cursor to: RIGHT EDGE for the main menu Part of the message shown in the main view before any image is loaded, first option for where to move cursor to RIGHT EDGE for the main menu LEFT EDGE for the metadata Part of the message shown in the main view before any image is loaded, second option for where to move cursor to LEFT EDGE for the metadata BOTTOM EDGE to show the thumbnails Part of the message shown in the main view before any image is loaded, third option for where to move cursor to BOTTOM EDGE to show the thumbnails (once an image/folder is loaded) Part of the message shown in the main view before any image is loaded (once an image/folder is loaded) No matches found Used as in: No matches found for the currently set filter Atitikmenų nerasta PhotoQt Image Viewer The window title of PhotoQt PhotoQt paveikslų žiūryklė popinpopout Merge into main interface Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface Sulieti su pagrindine sąsaja Move to its own window Tooltip of small button to show an element in its own window (i.e., not merged into main interface) Perkelti į atskirą langą quickinfo Click here to enter fullscreen mode Click here to enter fullscreen mode Click here to exit fullscreen mode Click here to exit fullscreen mode Click here to close PhotoQt Spustelėkite čia norėdami užverti PhotoQt Page %1 of %2 Used as in: Page 12/34 - please keep as short as possible Puslapis %1 iš %2 File %1 of %2 Used as in: File 12/34 - please keep as short as possible Failas %1 iš %2 Connected to: This is followed by the name of the Chromecast streaming device currently connected to Connected to: Copy filename to clipboard Copy filename to clipboard Show counter Rodyti skaitiklį Hide counter Slėpti skaitiklį Show file path Rodyti failo kelią Hide file path Slėpti failo kelią Show file name Rodyti failo pavadinimą Hide file name Slėpti failo pavadinimą Show zoom level Rodyti mastelio lygį Hide zoom level Slėpti mastelio lygį Click here to enter viewer mode Click here to enter viewer mode Hide central 'viewer mode' button Hide central 'viewer mode' button Click here to exit viewer mode Click here to exit viewer mode Filter: Filtras: Show window buttons Rodyti lango mygtukus Hide window buttons Slėpti lango mygtukus Some info about the current image and directory Kai kuri informacija apie dabartinį paveikslą ir katalogą Show central 'viewer mode' button Show central 'viewer mode' button Click to remove filter Spustelėkite norėdami pašalinti filtrą scale Scale file Window title Keisti failo mastelį An error occured, file could not be scaled! Įvyko klaida, nepavyko pakeisti failo mastelio! This file format cannot (yet) be scaled with PhotoQt! Šio failo formato mastelis (kol kas) negali būti keičiamas naudojant PhotoQt! New width x height: Naujas plotis x aukštis: Preserve aspect ratio The aspect ratio refers to the ratio of the width to the height of the image, e.g., 16:9 for most movies Išlaikyti proporcijas Quality: This refers to the quality to be used to scale the image Kokybė: Scale (create new file) Written on a clickable button Keisti mastelį (sukurti naują failą) Scale (change file in place) Written on a clickable button Keisti mastelį (keisti esamą failą) De-/Increase width and height by 10% 10% sumažinti/padidinti plotį ir aukštį In-/Decrease quality by 5% 5% padidinti/sumažinti kokybę Select new file Pasirinkti naują failą settingsmanager interface settings manager tab title Sąsaja Tab to control interface settings Kortelė, skirta valdyti sąsajos nustatymus image view settings manager tab title Paveikslų rodymas Tab to control how images are viewed Kortelė, skirta valdyti paveikslų rodinį thumbnails settings manager tab title Miniatiūros Tab to control the look and behaviour of thumbnails Kortelė, skirta valdyti miniatiūrų išvaizdą bei elgseną metadata settings manager tab title Metaduomenys Tab to control metadata settings Kortelė, skirta valdyti metaduomenų nustatymus file types settings manager tab title Failo tipai Tab to control which file types PhotoQt should recognize Kortelė, skirta valdyti kuriuos failo tipus PhotoQt turėtų atpažinti shortcuts settings manager tab title Spartieji klavišai Tab to control which shortcuts are set Kortelė, skirta valdyti nustatytus sparčiuosius klavišus advanced Written on button in setting manager. A click on this button opens a menu with some advanced actions. Išplėstiniai restore defaults restore defaults import settings Importuoti nustatymus export settings Eksportuoti nustatymus disable expert mode Išjungti eksperto veikseną enable expert mode Įjungti eksperto veikseną Import of %1. This will replace your current settings with the ones stored in the backup. %1 importavimas. Tai pakeis jūsų dabartinius nustatymus tais, kurie yra atsarginėje kopijoje. Do you want to continue? Ar norite tęsti? Save changes and exit Įrašyti pakeitimus ir išeiti Exit and discard changes Išeiti ir atmesti pakeitimus Rename File Name of shortcut action Pervadinti failą Delete File Name of shortcut action Ištrinti failą Filetype settings Failo tipo nustatymai These settings govern which file types PhotoQt should recognize and open. Šie nustatymai valdo tai, kuriuos failo tipus PhotoQt turėtų atpažinti ir atverti. Not all file types might be available, depending on your setup and what library support was enabled at compile time Priklausomai nuo jūsų sąrankos ir bibliotekų palaikymo įgalinimo kompiliavimo metu, gali būti prieinami ne visi failų tipai Image view settings Paveikslų rodymo nustatymai These settings affect the viewing of images, how they are shown, in what order, how large a cache to use, etc. Šie nustatymai paveikia paveikslų atvaizdavimą: kaip bus rodomi paveikslai, kokia tvarka, kokio dydžio podėlis bus naudojamas ir t.t. Some settings are only shown in expert mode. Kai kurie nustatymai yra rodomi tik eksperto veiksenoje. Interface settings Sąsajos nustatymai These settings affect the interface in general, how the application looks like and behaves. This includes the background, some of the labels in the main view, which elements are to be shown in their own window, and others. Šie nustatymai bendrai paveikia programą: kaip programa atrodys ir veiks. Į tai įeina: fonas, kai kurios pagrindinio rodinio etiketės, kokie elementai bus rodomi atskiruose languose ir kita. Metadata settings Metaduomenų nustatymai These settings affect the metadata element, what information it should show and some of its behavior. Šie nustatymai paveikia metaduomenų elementą, jame rodomą informaciją bei kai kurią jo elgseną. Shortcuts Spartieji klavišai Navigation A shortcuts category: navigation Naršymas Filter images in folder Name of shortcut action Filtruoti paveikslus aplanke Next image Name of shortcut action Kitas paveikslas Previous image Name of shortcut action Ankstesnis paveikslas Go to first image Name of shortcut action Name of shortcut action Pereiti į pirmą paveikslą Go to last image Name of shortcut action Pereiti į paskutinį paveikslą Enter viewer mode Name of shortcut action Enter viewer mode Show quick navigation buttons Name of shortcut action Show quick navigation buttons Close window (hides to system tray if enabled) Name of shortcut action Close window (hides to system tray if enabled) Quit PhotoQt Name of shortcut action Išeiti iš PhotoQt Image A shortcuts category: image manipulation Paveikslas Zoom In Name of shortcut action Didinti Zoom Out Name of shortcut action Mažinti Zoom to Actual Size Name of shortcut action Originalus dydis Reset Zoom Name of shortcut action Atstatyti mastelį Rotate Right Name of shortcut action Pasukti dešinėn Rotate Left Name of shortcut action Pasukti kairėn Reset Rotation Name of shortcut action Atstatyti pasukimą Flip Horizontally Name of shortcut action Apversti horizontaliai Flip Vertically Name of shortcut action Apversti vertikaliai Scale Image Name of shortcut action Keisti paveikslo mastelį Play/Pause animation/video Name of shortcut action Atkurti/pristabdyti animaciją/vaizdo įrašą Hide/Show face tags (stored in metadata) Name of shortcut action Hide/Show face tags (stored in metadata) Tag faces (stored in metadata) Name of shortcut action Žymėti veidus (laikoma metaduomenyse) File A shortcuts category: file management Failas Delete File (without confirmation) Name of shortcut action Ištrinti failą (be patvirtinimo) Copy File to a New Location Name of shortcut action Kopijuoti failą į naują vietą Move File to a New Location Name of shortcut action Perkelti failą į naują vietą Copy Image to Clipboard Name of shortcut action Kopijuoti paveikslą į iškarpinę Other A shortcuts category: other functions Kita Hide/Show main menu Name of shortcut action Slėpti/Rodyti pagrindinį meniu Hide/Show metadata Name of shortcut action Slėpti/rodyti metaduomenis Keep metadata opened Name of shortcut action Palikti metaduomenis atvertus Hide/Show thumbnails Name of shortcut action Slėpti/Rodyti miniatiūras Show Settings Name of shortcut action Rodyti nustatymus Start Slideshow Name of shortcut action Pradėti skaidrių rodymą Start Slideshow (Quickstart) Name of shortcut action Pradėti skaidrių rodymą (Greitasis paleidimas) About PhotoQt Name of shortcut action Apie PhotoQt Set as Wallpaper Name of shortcut action Nustatyti kaip darbalaukio foną Show Histogram Name of shortcut action Rodyti histogramą Upload to imgur.com (anonymously) Name of shortcut action Išsiųsti į imgur.com (anonimiškai) Upload to imgur.com user account Name of shortcut action Įkelti į imgur.com naudotojo paskyrą Stream content to Chromecast device Name of shortcut action Stream content to Chromecast device Show log/debug messages Name of shortcut action Show log/debug messages External A shortcuts category: external shortcuts Išoriniai %f = filename including path, %u = filename without path, %d = directory containing file Please leave the three placeholders (%f, %u, %d) as is. %f = failo pavadinimas su keliu, %u = failo pavadinimas be kelio, %d = failo vidinis katalogas Thumbnails settings Miniatiūrų nustatymai These settings affect the thumbnails shown, by default, along the bottom edge of the screen. This includes their look, behavior, and the user's interaction with them. Šie nustatymai paveikia pagal numatymą ekrano apatiniame krašte rodomas miniatiūras. Į juos įeina: miniatiūrų išvaizda, elgsena ir naudotojo sąveika su jomis. Settings Manager Window title Nustatymų tvarkytuvė Here the shortcuts can be managed. Below you can add a new shortcut for any one of the available actions, both key combinations and mouse gestures are supported. Here the shortcuts can be managed. Below you can add a new shortcut for any one of the available actions, both key combinations and mouse gestures are supported. You can also set the same shortcut for multiple actions or multiple times for the same action. All actions for a shortcut will be executed sequentially, allowing a lot more flexibility in using PhotoQt. You can also set the same shortcut for multiple actions or multiple times for the same action. All actions for a shortcut will be executed sequentially, allowing a lot more flexibility in using PhotoQt. Open file (browse images) Name of shortcut action Open file (browse images) Save image in another format Name of shortcut action Įrašyti paveikslą kitu formatu Restore defaults As in 'restore the default settings and/or file formats and/or shortcuts'. Please keep short! Atkurti numatytuosius Here you can restore the default configuration of PhotoQt. You can choose to restore any combination of the following three categories. Here you can restore the default configuration of PhotoQt. You can choose to restore any combination of the following three categories. Restore default settings Restore default settings Restore default file formats Restore default file formats Restore default shortcuts Restore default shortcuts settingsmanager_filetypes These are some additional settings for opening archives. These are some additional settings for opening archives. use external tool: unrar used as label for checkbox naudoti išorinį įrankį: unrar These are some additional settings for showing PDFs. Čia yra kai kurie papildomi PDF dokumentų atvaizdavimo nustatymai. Quality: the quality setting to be used when loading PDFs Kokybė: These are some additional settings for playing videos. Čia yra kai kurie papildomi vaizdo įrašų atkūrimo nustatymai. Autoplay Used as setting for video files (i.e., autoplay videos) Automatinis atkūrimas Loop Used as setting for video files (i.e., loop videos) Cikliškai kartoti Select tool for creating video thumbnails Tooltip shown for combobox for selectiong video thumbnailer Pasirinkti įrankį, skirtą kurti miniatiūras vaizdo įrašams images This is a category of files PhotoQt can recognize: any image format paveikslai compressed files This is a category of files PhotoQt can recognize: compressed files like zip, tar, cbr, 7z, etc. suglaudinti failai documents This is a category of files PhotoQt can recognize: documents like pdf, txt, etc. dokumentai videos This is a type of category of files PhotoQt can recognize: videos like mp4, avi, etc. vaizdo įrašai Enable As in: "Enable all formats in the seleted category of file types" Įjungti Disable As in: "Disable all formats in the seleted category of file types" Išjungti Enable everything As in "Enable every single file format PhotoQt can open in any category" Įjungti visus Currently there are %1 file formats enabled The %1 will be replaced with the number of file formats, please don't forget to add it. Šiuo metu yra įjungta failo formatų: %1 Search by description or file ending Ieškoti pagal aprašą ar failo prievardį Search by image library or category Search by image library or category File endings: Failo prievardžiai: settingsmanager_imageview animation A settings title referring to the in/out animation of images animacija What type of animation to show, and how fast. This is referring to the in/out animation of images Kokio tipo animaciją rodyti ir kaip greitai. type of animation This is referring to the in/out animation of images animacijos tipas opacity This is referring to the in/out animation of images nepermatomumas along x-axis This is referring to the in/out animation of images palei x ašį along y-axis This is referring to the in/out animation of images palei y ašį no animation This is referring to the in/out animation of images jokios animacijos long animation This is referring to the in/out animation of images ilga animacija fit in window A settings title referring to whether to fit images in window priderinti prie lango Zoom smaller images to fill the full window width and/or height. Keisti mažesnių paveikslų mastelį taip, kad jie užpildytų visą lango plotį ir/ar aukštį. fit smaller images in window priderinti mažesnius paveikslus prie lango interpolation A settings title referring to the type of interpolation to use for small images interpoliacija PhotoQt tries to improve the rendering of images that are shown much larger than they are (i.e., zoomed in a lot). For very tiny images that are zoomed in quite a lot, this can result in the loss of too much information in the image. Thus a threshold can be defined here, images that are smaller than this threshold are shown exactly as they are without any smoothing or other attempts to improve them. PhotoQt bando pagerinti paveikslų, kurie rodomi žymiai didesni negu jie yra (t.y. būna padidinti kelis kartus), atvaizdavimą. Labai maži paveikslai, kurie yra labai padidinami to pasekoje gali prarasti per daug informacijos. Štai kodėl čia gali būti apibrėžtas slenkstis. Paveikslai, kurie mažesni nei šis slenkstis, bus rodomi tokie, kokie yra, jų neglodinant ir niekaip kitaip nebandant jų pagerinti. Do not use any interpolation algorithm for very small images A type of interpolation to use for small images Labai mažiems paveikslams nenaudoti interpoliacijos algoritmo threshold: The threshold (in pixels) at which to switch interpolation algorithm slenkstis: remember per session A settings title prisiminti tarp seansų By default, PhotoQt resets the zoom, rotation, flipping/mirroring and position when switching to a different image. For certain tasks, for example for comparing two images, it can be helpful to keep these properties. Pagal numatymą, perjungiant į kitą paveikslą, PhotoQt atstato paveikslo mastelio lygį, pasukimą, apvertimą ir poziciją. Tam tikroms užduotims, pavyzdžiui, dviejų paveikslų palyginimui, gali būti naudinga šias savybes išlaikyti. remember zoom, rotation, flip, position prisiminti mastelį, pasukimą, apvertimą, poziciją left mouse button A settings title kairys pelės mygtukas The left button of the mouse is by default used to move the image around. However, this prevents the left mouse button from being used for shortcuts. Kairysis pelės mygtukas pagal numatymą naudojamas paveikslo perkėlimui. Vis dėlto, tai neleidžia naudoti kairiojo pelės mygtuko sparčiuosiuose klavišuose. use left button to move image naudoti kairį pelės mygtuką norint perkelti paveikslą looping A settings title for looping through images in folder ciklinis kartojimas What to do when the end of a folder has been reached: stop or loop back to first image in folder. Ką daryti, kai buvo pasiekta aplanko pabaiga: stabdyti ar vėl pradėti nuo pirmo aplanke esančio paveikslo. loop through images in folder rodyti paveikslus aplanke ciklu margin A settings title about the margin around the main image paraštė How much space to show between the main image and the application border. Koks turėtų būti tarpas tarp pagrindinio paveikslo ir programos rėmelio. none As in: no margin between the main image and the window edges nėra pixmap cache A settings title paveikslų žemėlapio podėlis Size of runtime cache for fully loaded images. This cache is cleared when the application quits. Pilnai įkeltų paveikslų podėlio dydis. Šis podėlis yra išvalomas, kai programa baigia savo darbą. sort images by A settings title rikiuoti paveikslus pagal Sort all images in a folder by the set property. Rikiuoti visus paveikslus aplanke pagal nustatytą savybę. natural name A criteria for sorting images natūralus pavadinimas name A criteria for sorting images pavadinimas time A criteria for sorting images laikas size A criteria for sorting images dydis type A criteria for sorting images tipas ascending Sort images in ascending order didėjančiai descending Sort images in descending order mažėjančiai transparency marker A settings title permatomumo ženklintojas Show checkerboard pattern behind transparent areas of (half-)transparent images. Už (pusiau) permatomų paveikslų permatomų sričių rodyti šachmatų lentos šabloną. show checkerboard pattern Setting for how to display images that have transparent areas, whether to show checkerboard pattern in that area or not rodyti šachmatų lentos šabloną zoom speed A settings title, the zoom here is the zoom of the main image mastelio keitimo greitis Images are zoomed at a relative speed as specified by this percentage. A higher value means faster zoom. Paveikslų mastelis keičiamas santykiniu greičiu, nurodytu šia procentine reikšme. Didesnė reikšmė reiškia greitesnį mastelio keitimą. super slow This refers to the zoom speed, the zoom here is the zoom of the main image labai lėtas very fast This refers to the zoom speed, the zoom here is the zoom of the main image labai greitas settingsmanager_interface background A settings title referring to the background of PhotoQt (behind any image/element) fonas What type of background is to be shown. The background here refers to the area behind the main image and any element in PhotoQt, the very back. Kokio tipo bus rodomas fonas. (half-)transparent background How the background of PhotoQt should be (pusiau) permatomas fonas faked transparency How the background of PhotoQt should be netikras permatomumas custom background image How the background of PhotoQt should be tinkintas fono paveikslas Click to select an image Tooltip for a mouse area, a click on which opens a file dialog for selecting an image Spustelėkite norėdami pasirinkti paveikslą scale to fit If an image is set as background of PhotoQt this is one way it can be handled. keisti mastelį, kad tilptų scale and crop to fit If an image is set as background of PhotoQt this is one way it can be handled. keisti mastelį ir apkirpti, kad tilptų stretch to fit If an image is set as background of PhotoQt this is one way it can be handled. ištempti, kad tilptų center image If an image is set as background of PhotoQt this is one way it can be handled. centruoti paveikslą tile image If an image is set as background of PhotoQt this is one way it can be handled. iškloti paveikslą All Images This is a category in a file dialog for selecting images used as in: All images supported by PhotoQt. Visi paveikslai Video This is a category in a file dialog for selecting images used as in: Video files supported by PhotoQt. Vaizdo įrašai empty area around image A settings title tuščia sritis aplink paveikslą How to handle clicks on empty area around images. Ką daryti spustelėjus ant aplink paveikslus esančios tuščios srities. close on click Used as in: Close PhotoQt on click on empty area around main image spustelėjus, užverti Close PhotoQt when click occurred on empty area around image Close PhotoQt when click occurred on empty area around image navigate on click Used as in: Close PhotoQt on click on empty area around main image navigate on click Go to next/previous image if click occurred in left/right half of window Go to next/previous image if click occurred in left/right half of window size of 'hot edge' A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) „karštojo krašto“ dydis Adjusts the sensitivity of the edges for showing elements like the metadata and main menu elements. Reguliuoja kraštų jautrumą, skirtą rodyti tokius elementus kaip metaduomenys bei pagrindinio meniu elementai. small used as in: small area mažas large used as in: large area didelis language A settings title. kalba Change the language of the application. Keisti programos kalbą. mouse wheel sensitivity A settings title. pelės ratuko jautrumas How sensitive the mouse wheel is for shortcuts, etc. Kokio jautrumo bus pelės ratukas sparčiuosiuose klavišuose bei kitur. not sensitive The sensitivity here refers to the sensitivity of the mouse wheel nejautrus very sensitive The sensitivity here refers to the sensitivity of the mouse wheel labai jautrus overlay color A settings title. perdangos spalva This is the color that is shown on top of any background image/... Tai yra spalva, kuri bus rodoma virš bet kokio foninio paveikslo/... click to change color spustelėkite norėdami pakeisti spalvą please choose a color pasirinkite spalvą pop out elements A settings title. The popping out that is talked about here refers to the possibility of showing any element in its own window (i.e., popped out). iškylantieji elementai Here you can choose for most elements whether they are to be shown integrated into the main window or in their own, separate window. Čia daugeliui elementų galite pasirinkti ar jie bus rodomi integruoti į pagrindinį langą, ar savo atskiruose languose. File dialog Used as identifying name for one of the elements in the interface Failo dialogas keep open palikti atvertą Settings Manager Used as identifying name for one of the elements in the interface Nustatymų tvarkytuvė Main Menu Used as identifying name for one of the elements in the interface Pagrindinis meniu Metadata Used as identifying name for one of the elements in the interface Metaduomenys Histogram Used as identifying name for one of the elements in the interface Histograma Scale Used as identifying name for one of the elements in the interface Mastelio keitimas Slideshow Settings Used as identifying name for one of the elements in the interface Skaidrių rodymo nustatymai Slideshow Controls Used as identifying name for one of the elements in the interface Skaidrių rodymo valdikliai Rename File Used as identifying name for one of the elements in the interface Pervadinti failą Delete File Used as identifying name for one of the elements in the interface Ištrinti failą Save File As Used as identifying name for one of the elements in the interface Įrašyti failą kaip About Used as identifying name for one of the elements in the interface Apie Imgur Used as identifying name for one of the elements in the interface Imgur Wallpaper Used as identifying name for one of the elements in the interface Darbalaukio fonas Filter Noun, not a verb. Used as identifying name for one of the elements in the interface Filtras labels A settings title. labels The labels are shown along the top edge of the main view. The labels are shown along the top edge of the main view. show labels checkbox in settings manager show labels counter refers to the image counter (i.e., image #/# in current folder) skaitiklis filepath show filepath in the labels. This is specifically the filePATH and not the filename. failo kelias filename show filename in the labels. This is specifically the fileNAME and not the filepath. failo pavadinimas current zoom level dabartinis mastelio lygis current rotation angle current rotation angle window buttons the window buttons are some window management buttons like: close window, maximize, fullscreen lango mygtukai size of window buttons the size of the window buttons (the buttons shown in the top right corner of the window) lango mygtukų dydis remember last image A settings title. prisiminti paskutinį paveikslą At startup the image loaded at the end of the last session can be automatically reloaded. Paleidimo metu gali būti automatiškai iš naujo įkeltas paskutinio seanso pabaigoje įkeltas paveikslas. re-open last loaded image at startup paleidimo metu iš naujo atverti paskutinį įkeltą paveikslą tray icon A settings title. dėklo piktograma If a tray icon is to be shown and, if shown, whether to hide it or not. Ar turėtų būti rodoma dėklo piktograma ir jei taip, tai ar ją slėpti, ar ne. no tray icon be dėklo piktogramos hide to tray icon slėpti į dėklo piktogramą show tray icon but don't hide to it rodyti dėklo piktogramą, bet neslėpti programos į ją window management A settings title. lango tvarkymas Some basic window management properties. Pagrindinės lango tvarkymo savybės. manage window through quick info labels tvarkyti langą per sparčiosios informacijos etiketes save and restore window geometry įrašyti ir atkurti lango geometriją keep above other windows laikyti virš kitų langų window mode A settings title. lango veiksena Whether to run PhotoQt in window mode or fullscreen. Ar paleisti PhotoQt lango veiksenoje, ar visame ekrane. run in window mode paleisti lango veiksenoje show window decoration rodyti lango dekoracijas custom main menu entries A settings title. tinkinti pagrindinio meniu įrašai Add some custom entries in the main menu on the right. Pridėti kai kuriuos tinkintus įrašus pagrindiniame meniu, dešinėje. what string to show in main menu this is the placeholder text inside of a text box telling the user what text they can enter here kokią eilutę rodyti pagrindiniame meniu which command to execute this is the placeholder text inside of a text box telling the user what text they can enter here kurią komandą vykdyti quit Keep string short! Used on checkbox for contextmenu, refers to option to close PhotoQt after respective command has been executed. išeiti move entry down contextmenu settings: used as in 'move this entry down in the list of all entries' nuleisti įrašą move entry up contextmenu settings: used as in 'move this entry up in the list of all entries' pakelti įrašą delete entry contextmenu settings: used as in 'delete this entry out of the list of all entries' ištrinti įrašą quick navigation A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) quick navigation Some buttons to help with quick navigation. These can come in handy when, e.g., operating with a touch screen. Some buttons to help with quick navigation. These can come in handy when, e.g., operating with a touch screen. Show quick navigation buttons Show quick navigation buttons settingsmanager_metadata face tags A settings title. The face tags are labels that can be shown (if available) on faces including their name. veidų žymės Whether to show face tags (stored in metadata info). The face tags are labels that can be shown (if available) on faces including their name. Ar rodyti veidų žymes (laikomas metaduomenų informacijoje). enable įjungti face tags - border A settings title. The face tags are labels that can be shown (if available) on faces including their name. veidų žymės - rėmelis If and what style of border to show around tagged faces. Ar aplink pažymėtus veidus rodyti rėmelį ir kokio stiliaus. show border The border here is the border around face tags. rodyti rėmelį click to change color spustelėkite norėdami pakeisti spalvą please choose a color pasirinkite spalvą face tags - font size A settings title. The face tags are labels that can be shown (if available) on faces including their name. veidų žymės - šrifto dydis The font size of the name labels. The name labels here are the labels with the name used for the face tags. Vardų etikečių šrifto dydis. face tags - visibility A settings title. The face tags are labels that can be shown (if available) on faces including their name. veidų žymės - matomumas When to show the face tags and for how long. Kada ir kaip ilgai rodyti veidų žymes. hybrid mode A mode for showing face tags. hibridinė veiksena always show all A mode for showing face tags. visada rodyti visas show one on hover A mode for showing face tags. užvedus pelę rodyti vieną show all on hover A mode for showing face tags. užvedus pelę rodyti visas GPS online map A settings title. GPS internetinis žemėlapis Which map service to use when a GPS position is clicked. Kurią žemėlapių paslaugą naudoti, kai spustelėjama ant GPS pozicijos. hot edge A settings title. The hot edge refers to the area along the left edge of PhotoQt where the mouse cursor triggers the visibility of the metadata element. karštasis kraštas Show metadata element when the mouse cursor is close to the window edge Rodyti metaduomenų elementą, kai pelės žymeklis yra šalia lango krašto meta information A settings title. metainformacija Which meta information to extract and display. Kurią metainformaciją išskleisti ir rodyti. file name Part of the meta information about the current image. failo pavadinimas file type Part of the meta information about the current image. failo tipas file size Part of the meta information about the current image. failo dydis image #/# Part of the meta information about the current image. paveikslas #/# dimensions Part of the meta information about the current image. matmenys copyright Part of the meta information about the current image. autorių teisės exposure time Part of the meta information about the current image. išlaikymas flash Part of the meta information about the current image. blykstė focal length Part of the meta information about the current image. židinio nuotolis f-number Part of the meta information about the current image. f skaičius GPS position Part of the meta information about the current image. GPS pozicija keywords Part of the meta information about the current image. raktažodžiai light source Part of the meta information about the current image. šviesos šaltinis location Part of the meta information about the current image. vieta make Part of the meta information about the current image. gamintojas model Part of the meta information about the current image. modelis scene type Part of the meta information about the current image. režimas software Part of the meta information about the current image. programinė įranga time photo was taken Part of the meta information about the current image. fotografavimo laikas opacity A settings title. nepermatomumas The opacity of the metadata element. Metaduomenų elemento nepermatomumas. auto-rotation A settings title. automatinis pasukimas Automatically rotate images based on metadata information. Automatiškai pasukti paveikslus remiantis metaduomenų informacija. settingsmanager_shortcuts quit checkbox in shortcuts settings, used as in: quit PhotoQt. Please keep as short as possible! išeiti Click to change shortcut Click to change shortcut Click to delete shortcut Spustelėkite norėdami ištrinti spartųjį klavišą no shortcut set no shortcut set Click to manage shortcut Click to manage shortcut add new Used as in 'add new shortcut'. Please keep short! pridėti naują Add New Shortcut Add New Shortcut Perform a mouse gesture here or press any key combo Atlikite čia gestą pele arba paspauskite bet kokią klavišų kombinaciją Add new Used on button as in 'add new external shortcut'. Please keep short! Pridėti naują settingsmanager_thumbnails thumbnail cache A settings title. miniatiūrų podėlis Thumbnails can be cached (permanently), following the freedesktop.org standard. Miniatiūros gali būti laikomos podėlyje (visam laikui), pagal freedesktop.org standartą. enable įjungti keep in center A settings title. Used as in: Keep thumbnail for current main image in center. išlaikyti centre Keep currently active thumbnail in the center of the screen Išlaikyti esamu metu aktyvią miniatiūrą ekrano centre center on active thumbnail centruoti ties aktyvia miniatiūra disable thumbnails išjungti miniatiūras Disable thumbnails in case no thumbnails are desired whatsoever. Išjungti miniatiūras, jeigu jos iš viso nepageidaujamos. disable all thumbnails išjungti visas miniatiūras filename label A settings title. The filename label here is the one that is written on thumbnails. Failo pavadinimo etiketė Show the filename on a small label on the thumbnail image. Paveikslo miniatiūroje, ant mažos etiketės, rodyti failo pavadinimą. font size: šrifto dydis: filename-only A settings title. This refers to using only the filename as thumbnail and no actual image. tik failo pavadinimas Show only the filename as thumbnail, no actual image. Rodyti miniatiūrą tik kaip failo pavadinimą, o ne tikrą paveikslą. lift up A settings title. This refers to the lift up of thumbnail images when active/hovered. pakelti How many pixels to lift up thumbnails when either hovered or active. Užvedus pelę ant miniatiūrų ar jas aktyvavus, kiek pikselių jas pakelti. position A settings title referring to the position of the thumbnails (upper or lower edge of PhotoQt). pozicija Which edge to show the thumbnails on, upper or lower edge. Kuriame krašte rodyti miniatiūras, viršutiniame ar apatiniame. upper edge The upper edge of PhotoQt viršutinis kraštas lower edge The lower edge of PhotoQt apatinis kraštas size A settings title referring to the size of the thumbnails. dydis How large (or small) the thumbnails should be. Kokio dydžio turėtų būti miniatiūros. spacing A settings title referring to the spacing of thumbnails, i.e., how much empty space to have between each. tarpai How much space to show between the thumbnails. Kokie tarpai turėtų būti rodomi tarp miniatiūrų. threads A settings title, as in: How many threads to use to generate thumbnails. gijos How many threads to use to create thumbnails. Too many threads can slow down your computer! Kiek gijų naudoti miniatiūrų kūrimui. Per didelis gijų skaičius gali sulėtinti kompiuterio darbą! Threads: Gijų: visibility A settings title referring to the visibility of the thumbnails, i.e., if and when to hide them. matomumas If and how to keep thumbnails visible Ar laikyti miniatiūras matomas ir kaip tai daryti hide when not needed This is talking about the thumbnails. slėpti, kai nebereikalingos never hide This is talking about the thumbnails. niekada neslėpti hide when zoomed in This is talking about the thumbnails. slėpti padidinus paveikslą exclude folders exclude folders Exclude the specified folders and all of its subfolders from any sort of caching and preloading. Exclude the specified folders and all of its subfolders from any sort of caching and preloading. Do not cache these folders: Do not cache these folders: Add folder Written on a button Pridėti aplanką One folder per line Po vieną aplanką eilutėje slideshow Click to go to the previous image Spustelėkite norėdami pereiti prie ankstesnio paveikslo Click to pause slideshow Spustelėkite norėdami pristabdyti skaidrių rodymą Click to play slideshow Spustelėkite norėdami paleisti skaidrių rodymą Click to go to the next image Spustelėkite norėdami pereiti prie kito paveikslo Sound volume: Garso garsis: Click to quit slideshow Spustelėkite norėdami baigti skaidrių rodymą Slideshow settings Window title Skaidrių rodymo nustatymai interval The interval between images in a slideshow intervalas animation This is referring to the in/out animation of images during a slideshow animacija opacity This is referring to the in/out animation of images during slideshows nepermatomumas along x-axis This is referring to the in/out animation of images during slideshows palei x ašį along y-axis This is referring to the in/out animation of images during slideshows palei y ašį animation speed The speed of transitioning from one image to another during slideshows animacijos greitis immediately, without animation This refers to a speed of transitioning from one image to another during slideshows nedelsiant, be animacijos pretty fast animation This refers to a speed of transitioning from one image to another during slideshows gan greita animacija not too fast and not too slow This refers to a speed of transitioning from one image to another during slideshows ne per greita ir ne per lėta very slow animation This refers to a speed of transitioning from one image to another during slideshows labai lėta animacija current speed This refers to the currently set speed of transitioning from one image to another during slideshows dabartinis greitis looping ciklinis kartojimas loop over all files Loop over all images during slideshows rodyti paveikslus ciklu shuffle during slideshows shuffle the order of all images maišyti shuffle all files during slideshows shuffle the order of all images maišyti visus failus subfolders also include images in subfolders during slideshows poaplankiai include images in subfolders also include images in subfolders during slideshows įtraukti paveikslus iš poaplankių quickinfo What to do with the quick info during slideshows sparčioji informacija hide quickinfo What to do with the quick info during slideshows slėpti sparčiąją informaciją music The music that is to be played during slideshows muzika enable music Enable music to be played during slideshows įjungti muziką no file selected nepasirinktas joks failas Click to select music file Spustelėkite norėdami pasirinkti muzikinį failą Click to change music file Spustelėkite norėdami pakeisti muzikinį failą Common music file formats Paplitę muzikinių failų formatai All Files Visi failai Start slideshow Written on a clickable button Pradėti skaidrių rodymą Slideshow controls Window title Skaidrių rodymo valdikliai startup Edit with %1 Used as in 'Edit with [application]'. %1 will be replaced with application name. Taisyti naudojant %1 Open in %1 Used as in 'Open with [application]'. %1 will be replaced with application name. Atverti naudojant %1 streaming Scan for devices Used as tooltip for button that starts a scan for Chromecast streaming devices in the local network Scan for devices Disconnect Written on button, as in 'Disconnect from connected Chromecast streaming device' Atsijungti Connect Written on button, as in 'Connect to Chromecast streaming device' Prisijungti searching for devices... status text while searching for chromecast streaming devices in the local network ieškoma įrenginių... no devices found result of scan for chromecast streaming devices nerasta jokių įrenginių Streaming (Chromecast) Window title Transliavimas (Chromecast) thumbnailbar File size: Failo dydis: File type: Failo tipas: unavailable Sorry, but this feature is not yet available on Windows. Atleiskite, bet ši ypatybė kol kas nėra palaikoma „Windows“ platformoje. Feature unavailable Window title, informing user that the requested feature is currently not available Ypatybė neprieinama wallpaper Warning: %1 module not activated Įspėjimas: Modulis %1 nėra aktyvuotas Warning: %1 not found Įspėjimas: %1 nerasta Set to which screens As in: Set wallpaper to which screens Nustatykite kuriems ekranams Screen Used in wallpaper element Ekranas Set to which workspaces Enlightenment desktop environment handles wallpapers per workspace (different from screen) Nustatykite kurioms darbo sritims Workspace: Enlightenment desktop environment handles wallpapers per workspace (different from screen) Darbo sritis: Choose picture option picture option refers to how to format a pictrue when setting it as wallpaper Pasirinkite paveikslo parinktį Other Used as in: Other Desktop Environment Kita Tool: Tool refers to a program that can be executed Įrankis: Click to choose %1 %1 is a placeholder for the name of a desktop environment (plasma, xfce, gnome, etc.) Spustelėkite norėdami pasirinkti %1 Set as Wallpaper Heading of wallpaper element ---------- Written on clickable button ---------- Window title Nustatyti kaip darbalaukio foną The image will be set to all screens at the same time. The image will be set to all screens at the same time. photoqt-2.5/lang/photoqt_de_DE.ts000644 001750 001750 00000647044 14165351632 017444 0ustar00luspiluspi000000 000000 MainMenu Settings This is an entry in the main menu on the right. Please keep short! Einstellungen Slideshow This is an entry in the main menu on the right. Please keep short! Diaschau setup This is an entry in the main menu on the right, used as in: setting up a slideshow. Please keep short! einrichten quickstart This is an entry in the main menu on the right, used as in: quickstarting a slideshow. Please keep short! Schnellstart Face tagging mode This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Gesichter markieren About PhotoQt This is an entry in the main menu on the right. Please keep short! Über PhotoQt Quit This is an entry in the main menu on the right. Please keep short! Beenden Filter images in folder This is an entry in the main menu on the right. Please keep short! Bilder im Ordner filtern Show/Hide metadata This is an entry in the main menu on the right. Please keep short! Metadaten anzeigen/verbergen Scale image This is an entry in the main menu on the right. Please keep short! Bild skalieren Go to This is an entry in the main menu on the right, used as in: Go To some image. Please keep short! Gehe zu previous This is an entry in the main menu on the right, used as in: go to previous image. Please keep short! vorheriges next This is an entry in the main menu on the right, used as in: go to next image. Please keep short! nächstes first This is an entry in the main menu on the right, used as in: go to first image. Please keep short! erstes last This is an entry in the main menu on the right, used as in: go to last image. Please keep short! letztes Zoom This is an entry in the context menu, used as in: Zoom image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Zoom image. Please keep short! Zoom reset This is an entry in the context menu, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the context menu, used as in: Reset flip/mirror of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset flip/mirror of image. Please keep short! zurücksetzen Rotate This is an entry in the context menu, used as in: Rotate image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image. Please keep short! Drehen Click and drag to resize main menu Klicken und ziehen, um die Größe des Hauptmenüs zu ändern Wallpaper This is an entry in the main menu on the right. Please keep short! Hintergrundbild Open file (browse images) This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Datei öffnen (Bilder durchsuchen) left This is an entry in the context menu, used as in: Rotate image left. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image left. Please keep short! links right This is an entry in the context menu, used as in: Rotate image right. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image right. Please keep short! rechts Flip This is an entry in the context menu, used as in: Flip/Mirror image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image. Please keep short! Spiegeln horizontal This is an entry in the context menu, used as in: Flip/Mirror image horizontally. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image horizontally. Please keep short! horizontal vertical This is an entry in the context menu, used as in: Flip/Mirror image vertically. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image vertically. Please keep short! vertikal File This is an entry in the context menu, used to refer to the current file (specifically the file, not directly the image). Please keep short! ---------- This is an entry in the main menu on the right, used to refer to the current file (specifically the file, not directly the image). Please keep short! Datei rename This is an entry in the context menu, used as in: rename file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: rename file. Please keep short! umbenennen copy This is an entry in the context menu, used as in: copy file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: copy file. Please keep short! kopieren move This is an entry in the context menu, used as in: move file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: move file. Please keep short! verschieben delete This is an entry in the context menu, used as in: delete file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: delete file. Please keep short! löschen Streaming (Chromecast) This is an entry in the context menu, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! ---------- This is an entry in the main menu on the right, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! Streaming (Chromecast) Copy to clipboard This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! In die Zwischenablage kopieren Show/Hide histogram This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Zeige/Verstecke Histogramm Open in default file manager This is an entry in the main menu on the right. Please keep short! Im Dateimanager öffnen Show log/debug messages This is an entry in the main menu on the right. Please keep short! Protokoll- und Debugmeldungen anzeigen Main Menu This is the heading of the main menu element ---------- Window title Hauptmenü Click here to go to the online manual for help regarding shortcuts, settings, features, ... Klicke hier, um zu dem Online-Handbuch für mehr Informationen bezüglich Kurzbefehle, Einstellungen, etc. zu gehen... PQImageFormats ERROR getting default image formats This is the window title of an error message box FEHLER beim Erhalten der voreingestellten Bildformate I tried hard, but I just cannot open even a read-only version of the database of default image formats. Ich habe alles versucht, aber noch nicht einmal eine schreibgeschützte Datenbank der voreingestellten Bildformate kann geladen werden. Something went terribly wrong somewhere! Irgendetwas ist schrecklich schief gelaufen! I tried hard, but I just cannot open the database of default image formats. Ich habe alles versucht, aber die Datenbank mit den voreingestellten Bildformaten kann einfach nicht geladen werden. PQMetaData yes This string identifies that flash was fired, stored in image metadata ja no This string identifies that flash was not fired, stored in image metadata nein No flash function This string refers to the absense of a flash, stored in image metadata Keine Blitzfunktion strobe return light not detected This string refers to a flash mode, stored in image metadata Stroboskop-Lichtreflexion nicht erkannt strobe return light detected This string refers to a flash mode, stored in image metadata Stroboskop-Lichtreflexion erkannt compulsory flash mode This string refers to a flash mode, stored in image metadata obligatorischer Blitzmodus auto mode This string refers to a flash mode, stored in image metadata automatisch red-eye reduction mode This string refers to a flash mode, stored in image metadata Rote-Augen-Reduktionsmodus return light detected This string refers to a flash mode, stored in image metadata Lichtreflexion erkannt return light not detected This string refers to a flash mode, stored in image metadata Lichtreflexion nicht erkannt Invalid flash This string refers to a flash mode, stored in image metadata Ungültiger Blitz Standard This string refers to a type of scene, stored in image metadata Standard Landscape This string refers to a type of scene, stored in image metadata Querformat Portrait This string refers to a type of scene, stored in image metadata Hochformat Night Scene This string refers to a type of scene, stored in image metadata Nachtszene Invalid Scene Type This string refers to a type of scene, stored in image metadata Ungültiger Szenentyp Unknown This string refers to the light source stored in image metadata Unbekannt Daylight This string refers to the light source stored in image metadata Tageslicht Fluorescent This string refers to the light source stored in image metadata Fluoreszierend Tungsten (incandescent light) This string refers to the light source stored in image metadata Tungsten (Glühbirne) Flash This string refers to the light source stored in image metadata Blitz Fine weather This string refers to the light source stored in image metadata Heiteres Wetter Cloudy Weather This string refers to the light source stored in image metadata Bewölktes Wetter Shade This string refers to the light source stored in image metadata Schatten Daylight fluorescent This string refers to the light source stored in image metadata Fluoreszierendes Tageslicht Day white fluorescent This string refers to the light source stored in image metadata Weißes fluoreszierendes Tageslicht Cool white fluorescent This string refers to the light source stored in image metadata Weißes fluoreszierendes kaltes Licht White fluorescent This string refers to the light source stored in image metadata Weißes fluoreszierendes Licht Standard light This string refers to the light source stored in image metadata Standard Licht Other light source This string refers to the light source stored in image metadata Andere Lichtquelle Invalid light source This string refers to the light source stored in image metadata Ungültige Lichtquelle PQSettings ERROR getting database with default settings This is the window title of an error message box FEHLER beim Abrufen der Datenbank mit Standardeinstellungen I tried hard, but I just cannot open even a read-only version of the settings database. Ich habe alles versucht, aber ich kann nicht einmal eine schreibgeschützte Version der Einstellungsdatenbank öffnen. Something went terribly wrong somewhere! Irgendetwas ist schrecklich schief gelaufen! ERROR opening database with default settings FEHLER beim Öffnen der Datenbank mit Standardeinstellungen I tried hard, but I just cannot open the database of default settings. Ich habe alles versucht, aber die Datenbank mit den Standardeinstellungen kann einfach nicht geladen werden. PQShortcuts ERROR getting database with default shortcuts This is the window title of an error message box FEHLER beim Abrufen der Datenbank mit Standard-Kurzbefehlen I tried hard, but I just cannot open even a read-only version of the shortcuts database. Ich habe alles versucht, aber ich kann nicht einmal eine schreibgeschützte Version der Datenbank für die Kurzbefehle öffnen. Something went terribly wrong somewhere! Irgendetwas ist schrecklich schief gelaufen! ERROR opening database with default settings FEHLER beim Öffnen der Datenbank mit Standardeinstellungen I tried hard, but I just cannot open the database of default shortcuts. Ich habe alles versucht, aber die Datenbank mit den voreingestellten Kurzbefehlen kann einfach nicht geladen werden. PQStartup SQLite error This is the window title of an error message box SQLite Fehler You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! Der Qt Treiber für SQLite scheint zu fehlen. Dieser wird benötigt für ein paar verschiedene Dinge, z. B. das Lesen und Schreiben der Einstellungen. Ohne ihn kann PhotoQt nicht funktionieren! TabShortcuts about Close Schließen Current version: Version: License: Lizenz: Open license Lizenz öffnen Website: Webseite: Open website Webseite öffnen Contact: Kontakt: Send an email Sende eine E-Mail About Window title Über buttongeneric Ok This is a generic string written on clickable buttons - please keep short! OK Cancel This is a generic string written on clickable buttons - please keep short! Abbrechen Save This is a generic string written on clickable buttons - please keep short! Speichern Close This is a generic string written on clickable buttons - please keep short! Schließen commandlineparser Image Viewer Bildbetrachter Image file to open. Zu öffnendes Bild. Make PhotoQt ask for a new file. PhotoQt zwingen nach einer neuen Datei zu fragen. Shows PhotoQt from system tray. Zeigt PhotoQt aus der Systemleiste an. Hides PhotoQt to system tray. Command line option Versteckt PhotoQt in die Systemleiste. Show/Hide PhotoQt. PhotoQt zeigen/verstecken. Enable thumbnails. Command line option Miniaturbilder aktivieren. Disable thumbnails. Command line option Miniaturbilder deaktivieren. Enable system tray icon. Command line option Symbol in der Systemleiste anzeigen. Disable system tray icon. Command line option Symbol in der Systemleiste verstecken. Start PhotoQt hidden to the system tray. Command line option PhotoQt versteckt in der Systemleiste starten. Open standalone PhotoQt, allows for multiple instances but without remote interaction. Command line option PhotoQt standalone starten, dies erlaubt mehrere Instanzen gleichzeitig aber ohne externe Interaktion. Simulate a shortcut sequence Command line option Einen Kurzbefehl simulieren Switch on debug messages. Command line option Debugmeldungen einschalten. Switch off debug messages. Command line option Debugmeldungen ausschalten. Export configuration to given filename. Command line option Konfiguration in angegebene Datei exportieren. filename Command line option Dateiname Import configuration from given filename. Command line option Konfiguration von angegebener Datei importieren. Check the configuration and correct any detected issues. Command line option Prüft die Konfiguration und korrigiert alle gefundenen Probleme. Reset default configuration. Command line option Konfiguration auf Standardwerte zurücksetzen. facetagging Who is this? This question is asked in the face tagger to ask for the name of a tagged face Wer ist das? Enter name Namen eingeben Click to exit face tagging mode Klicken, um den Modus zum Markieren von Gesichtern zu verlassen Click to tag faces, changes are saved automatically Klicken, um Gesichter zu markieren, Änderungen werden automatisch gespeichert File type does not support face tags. Dateityp unterstützt das Markieren von Gesichtern nicht. filedialog Backwards Zurück Up a level Eine Ebene nach oben Forwards Vorwärts List subfolders Unterordner auflisten Enter fullscreen Vollbildmodus aktivieren Exit fullscreen Vollbildmodus beenden Close Schließen Storage devices This is the category title of storage devices to open (like USB keys) in the element for opening files Speichermedien Detected storage devices on your system Erkannte Speichergeräte auf deinem System no supported files/folders found keine unterstützten Dateien/Ordner gefunden Click and drag to favorites Klicke und ziehe zu Favoriten # images # Bilder Date: Datum: Time: Zeit: File size: Dateigröße: File type: Dateityp: %1 image %1 Bild %1 images %1 Bilder no folder added to favorites yet 'favorites' here refers to the list of favorite folders a user can set in the file dialog noch kein Ordner zu den Favoriten hinzugefügt Favorites This is the category title of user-set folders (or favorites) in the file dialog Favoriten Your favorites Deine Favoriten Show entry Eintrag anzeigen Hide entry Eintrag verstecken Remove entry Eintrag entfernen Hide hidden entries Versteckte Einträge verbergen Show hidden entries Versteckte Einträge anzeigen Load this folder Diesen Ordner laden Load this file Diese Datei laden Add to Favorites Zu den Favoriten hinzufügen Hide hidden files Versteckte Dateien verbergen Show hidden files Versteckte Dateien anzeigen Hide thumbnails Miniaturbilder ausblenden Show thumbnails Miniaturbilder zeigen Hide preview Vorschau verstecken Show preview Vorschau anzeigen Standard This is the category title of user-set folders (or favorites) in the file dialog Standard Some standard locations Einige Standardorte Zoom: Zoom: Adjust font size of files and folders Schriftgröße für Dateien und Ordner anpassen Zoom factor: Zoomfaktor: Sort by: Sortieren nach: Name Name Natural Name Natürlicher Name Time modified Bearbeitungszeit File size Dateigröße File type Dateityp reverse order Reihenfolge umkehren Choose by what to sort the files Wie die Dateien sortiert werden sollen All supported images Alle unterstützten Bilder Video files Videodateien All files Alle Dateien Choose which selection of files to show Wähle welche Dateien angezeigt werden sollen Remember loaded folder between sessions. Geladenen Ordner zwischen den Sitzungen speichern. Switch between list and icon view Zwischen Listen- und Symbolansicht wechseln Hide standard locations Standardorte ausblenden Show standard locations Standardorte anzeigen Hide favorite locations Favoriten ausblenden Show favorite locations Favoriten anzeigen Hide storage devices Speichergeräte ausblenden Show storage devices Speichergeräte anzeigen File dialog Window title Dateidialog filemanagement Delete file? Window title Datei löschen? An error occured, file could not be deleted! Ein Fehler ist aufgetreten, die Datei konnte nicht gelöscht werden! Move to trash In den Papierkorb verschieben Delete permanently Dauerhaft löschen Rename file Window title Datei umbenennen An error occured, file could not be renamed! Ein Fehler ist aufgetreten, die Datei konnte nicht umbenannt werden! Enter new filename Neuen Dateiname eingeben Save file as This is a title, similar to all the 'save as' options in many programs. ---------- Window title Datei speichern als An error occured, file could not be saved! Ein Fehler ist aufgetreten, die Datei konnte nicht gespeichert werden! Operation cancelled 'Operation' here is the operation of saving an image in a new format Vorgang abgebrochen Filter formats This is a short hint informing the user that here they can 'filter all the possible file formats' Formate filtern New filename Neuer Dateiname Choose location and save file Ort auswählen und Datei speichern filter Filter images in current directory Bilder im aktuellen Verzeichnis filtern Enter here the terms you want to filter the images by. Separate multiple terms by a space. Gib hier die Begriffe ein, nach denen die Bilder gefiltert werden sollen. Trenne mehrere Begriffe durch ein Leerzeichen. If you want to filter by file extension, start the term with a dot. Wenn nach Dateierweiterung gefiltert werden soll, starte den Begriff mit einem Punkt. Enter filter term Filterbegriff eingeben Filter Written on a clickable button - please keep short ---------- Window title Filter Remove filter Written on a clickable button - please keep short Filter entfernen histogram Histogram Window title Histogramm Loading... As in: Loading the histogram for the current image Lade... Click-and-drag to move. Used for the histogram. The version refers to the type of histogram that is available (colored and greyscale) Zum Verschieben klicken und ziehen. Right click to switch version. Rechtsklick, um Version zu wechseln. imageprovider File failed to load, it does not exist! Laden der Datei fehlgeschlagen, sie existiert nicht! imgur Upload to imgur.com Window title Hochladen auf imgur.com anonymous Used as in: Upload image as anonymous user anonym Obtaining image url... Bild-URL wird abgerufen... This seems to take a long time... Dies scheint eine lange Zeit zu dauern... There might be a problem with your internet connection or the imgur.com servers. Es könnte ein Problem mit deiner Internetverbindung oder den imgur.com-Servern geben. An Error occurred while uploading image! Beim Hochladen des Bildes ist ein Fehler aufgetreten! Error code: Fehlercode: You do not seem to be connected to the internet... Du scheinst nicht mit dem Internet verbunden zu sein... Unable to upload! Hochladen nicht möglich! Access Image Bild aufrufen Click to open in browser Zum Öffnen im Browser klicken Copy to clipboard In die Zwischenablage kopieren Delete Image Bild löschen keymouse Alt Refers to a keyboard modifier Alt Ctrl Refers to a keyboard modifier Strg Shift Refers to a keyboard modifier Umschalt Page Up Refers to one of the keys on the keyboard Bild Hoch Page Down Refers to one of the keys on the keyboard Bild Runter Meta Refers to the key that usually has the Windows symbol on it Meta Keypad Refers to the key that triggers the number block on keyboards Ziffernblock Escape Refers to one of the keys on the keyboard Esc Right Refers to one of the arrow keys on the keyboard Rechts Left Refers to one of the arrow keys on the keyboard Links Up Refers to one of the arrow keys on the keyboard Hoch Down Refers to one of the arrow keys on the keyboard Runter Space Refers to one of the keys on the keyboard Leertaste Delete Refers to one of the keys on the keyboard Löschen Backspace Refers to one of the keys on the keyboard Rücktaste Home Refers to one of the keys on the keyboard Pos 1 End Refers to one of the keys on the keyboard Ende Insert Refers to one of the keys on the keyboard Einfg Tab Refers to one of the keys on the keyboard Tab Return Return refers to the enter key of the number block - please try to make the translations of Return and Enter (the main button) different if possible! Enter Enter Enter refers to the main enter key - please try to make the translations of Return (in the number block) and Enter different if possible! Eingabe Left Button Refers to a mouse button Linke Taste Right Button Refers to a mouse button Rechte Taste Middle Button Refers to a mouse button Mittlere Taste Wheel Up Refers to the mouse wheel Mausrad hoch Wheel Down Refers to the mouse wheel Mausrad runter East Refers to a direction of the mouse when performing a mouse gesture Osten South Refers to a direction of the mouse when performing a mouse gesture Süden West Refers to a direction of the mouse when performing a mouse gesture Westen North Refers to a direction of the mouse when performing a mouse gesture Norden logging Logging Window title Protokollierung enable debug messages Debugmeldungen aktivieren copy to clipboard in die Zwischenablage kopieren save to file In Datei speichern metadata Click and drag to resize meta data Klicken und ziehen, um die Größe der Metadaten zu ändern File name Please keep string short! Dateiname Dimensions The dimensions of the loaded image. Please keep string short! Bildgröße Image #/# Used as in "Image 3/16". The numbers (position of image in folder) are added on automatically. Please keep string short! Bild #/# File size Please keep string short! Dateigröße File type Please keep string short! Dateityp Make Exif image metadata: the make of the camera used to take the photo. Please keep string short! Hersteller Model Exif image metadata: the model of the camera used to take the photo. Please keep string short! Modell Software Exif image metadata: the software used to create the photo. Please keep string short! Software Time Photo was Taken Exif image metadata: when the photo was taken. Please keep string short! Aufnahmezeit Exposure Time Exif image metadata: how long the sensor was exposed to the light. Please keep string short! Belichtungszeit Flash Exif image metadata: the flash setting when the photo was taken. Please keep string short! Blitz Scene Type Exif image metadata: the specific scene type the camera used for the photo. Please keep string short! Szenenart Focal Length Exif image metadata: https://en.wikipedia.org/wiki/Focal_length . Please keep string short! Brennweite Metadata This is the heading of the metadata element ---------- Window title Metadaten No File Loaded Keine Datei geladen Click to open GPS position with online map Klicken, um GPS-Position mit Online-Karte zu öffnen Keep Open Used as in: Keep the metadata element open even if the cursor leaves it Offen halten Light Source Exif image metadata: What type of light the camera detected. Please keep string short! Lichtquelle Keywords IPTC image metadata: A description of the image by the user/software. Please keep string short! Schlüsselwörter Location IPTC image metadata: The CITY and COUNTRY the imge was taken in. Please keep string short! Ort Copyright IPTC image metadata. Please keep string short! Urheberrecht GPS Position Exif image metadata. Please keep string short! GPS-Position F Number Exif image metadata: https://en.wikipedia.org/wiki/F-number . Please keep string short! Blende navigate Click and drag to move Zum Verschieben klicken und ziehen Navigate to previous image in folder Vorhergehendes Bild im Ordner anzeigen Navigate to next image in folder Nächstes Bild im Ordner anzeigen Show main menu Hauptmenü anzeigen other Open a file to start Öffne eine Datei zum Starten Click anywhere to open a file Part of the message shown in the main view before any image is loaded Zum Öffnen einer Datei irgendwo klicken Move your cursor to: Part of the message shown in the main view before any image is loaded Bewege deinen Cursor zum: RIGHT EDGE for the main menu Part of the message shown in the main view before any image is loaded, first option for where to move cursor to RECHTEN RAND für das Hauptmenü LEFT EDGE for the metadata Part of the message shown in the main view before any image is loaded, second option for where to move cursor to LINKEN RAND für die Metadaten BOTTOM EDGE to show the thumbnails Part of the message shown in the main view before any image is loaded, third option for where to move cursor to UNTEREM RAND um die Vorschaubilder zu zeigen (once an image/folder is loaded) Part of the message shown in the main view before any image is loaded (sobald ein Bild/Ordner geladen ist) No matches found Used as in: No matches found for the currently set filter Keine Treffer gefunden PhotoQt Image Viewer The window title of PhotoQt PhotoQt Bildbetrachter popinpopout Merge into main interface Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface In das Hauptfenster integrieren Move to its own window Tooltip of small button to show an element in its own window (i.e., not merged into main interface) In eigenem Fenster anzeigen quickinfo Click here to enter fullscreen mode Hier klicken, um den Vollbildmodus zu aktivieren Click here to exit fullscreen mode Hier klicken, um den Vollbildmodus zu beenden Click here to close PhotoQt Hier klicken, um die PhotoQt zu schließen Page %1 of %2 Used as in: Page 12/34 - please keep as short as possible Seite %1 von %2 File %1 of %2 Used as in: File 12/34 - please keep as short as possible Datei %1 von %2 Connected to: This is followed by the name of the Chromecast streaming device currently connected to Verbunden mit: Copy filename to clipboard Dateiname in Zwischenablage kopieren Show counter Zähler anzeigen Hide counter Zähler ausblenden Show file path Dateipfad anzeigen Hide file path Dateipfad ausblenden Show file name Dateinamen anzeigen Hide file name Dateinamen ausblenden Show zoom level Zoomfaktor anzeigen Hide zoom level Zoomfaktor ausblenden Click here to enter viewer mode Hier klicken, um den Anschaumodus zu aktivieren Hide central 'viewer mode' button Verstecke den zentralen Knopf für den 'Anschaumodus' Click here to exit viewer mode Hier klicken, um den Anschaumodus zu beenden Filter: Filter: Show window buttons Fensterknöpfe anzeigen Hide window buttons Fensterknöpfe verstecken Some info about the current image and directory Einige Informationen zum aktuellen Bild und Verzeichnis Show central 'viewer mode' button Zeige den zentralen Knopf für den 'Anschaumodus' Click to remove filter Klicke, um den Filter zu entfernen scale Scale file Window title Datei skalieren An error occured, file could not be scaled! Ein Fehler ist aufgetreten, die Datei konnte nicht skaliert werden! This file format cannot (yet) be scaled with PhotoQt! Dieses Dateiformat kann (noch) nicht mit PhotoQt skaliert werden! New width x height: Neue Breite x Höhe: Preserve aspect ratio The aspect ratio refers to the ratio of the width to the height of the image, e.g., 16:9 for most movies Seitenverhältnis beibehalten Quality: This refers to the quality to be used to scale the image Qualität: Scale (create new file) Written on a clickable button Skalieren (neue Datei erstellen) Scale (change file in place) Written on a clickable button Skalieren (Original-Datei ändern) De-/Increase width and height by 10% Breite und Höhe um 10% erhöhen/erniedrigen In-/Decrease quality by 5% Qualität um 5% erhöhen/erniedrigen Select new file Neue Datei auswählen settingsmanager interface settings manager tab title Benutzeroberfläche Tab to control interface settings Tab um die Einstellungen der Oberfläche zu kontrollieren image view settings manager tab title Bildansicht Tab to control how images are viewed Tab um zu kontrollieren, wie Bilder angezeigt werden thumbnails settings manager tab title Miniaturbilder Tab to control the look and behaviour of thumbnails Tab um das Aussehen und das Verhalten der Miniaturbilder zu kontrollieren metadata settings manager tab title Metadaten Tab to control metadata settings Tab um die Einstellungen der Metadaten zu kontrollieren file types settings manager tab title Dateitypen Tab to control which file types PhotoQt should recognize Tab um zu kontrollieren, welche Dateitypen PhotoQt erkennen soll shortcuts settings manager tab title Kurzbefehle Tab to control which shortcuts are set Tab um die Kurzbefehle zu kontrollieren advanced Written on button in setting manager. A click on this button opens a menu with some advanced actions. erweitert restore defaults Standardeinstellungen import settings Einstellungen importieren export settings Einstellungen exportieren disable expert mode Expertenmodus ausschalten enable expert mode Expertenmodus einschalten Import of %1. This will replace your current settings with the ones stored in the backup. Importieren von %1. Dies wird deine aktuellen Einstellungen durch die im Backup gespeicherten ersetzen. Do you want to continue? Möchtest du fortfahren? Save changes and exit Änderungen speichern und schließen Exit and discard changes Schließen und Änderungen verwerfen Rename File Name of shortcut action Datei umbenennen Delete File Name of shortcut action Datei löschen Filetype settings Dateityp-Einstellungen These settings govern which file types PhotoQt should recognize and open. Diese Einstellungen regeln welche Dateitypen PhotoQt erkennen und öffnen soll. Not all file types might be available, depending on your setup and what library support was enabled at compile time Abhängig von deinem Setup und abhängig von welche Bibliotheksunterstützung beim Kompilieren aktiviert wurde sind möglicherweise nicht alle Dateitypen verfügbar Image view settings Bildeinstellungen These settings affect the viewing of images, how they are shown, in what order, how large a cache to use, etc. Diese Einstellungen beeinflussen die Ansicht von Bildern, wie sie angezeigt werden, in welcher Reihenfolge, wie groß der Zwischenspeicher sein soll, usw. Some settings are only shown in expert mode. Einige Einstellungen werden nur im Expertenmodus angezeigt. Interface settings Einstellungen der Oberfläche These settings affect the interface in general, how the application looks like and behaves. This includes the background, some of the labels in the main view, which elements are to be shown in their own window, and others. Diese Einstellungen beeinflussen die Benutzeroberfläche im Allgemeinen, wie die Anwendung aussieht und sich verhält. Dazu gehören der Hintergrund, einige der Beschriftungen in der Hauptansicht, welche Elemente in ihrem eigenen Fenster angezeigt werden sollen, und andere. Metadata settings Einstellungen für die Metadaten These settings affect the metadata element, what information it should show and some of its behavior. Diese Einstellungen beeinflussen das Element für die Metadaten, welche Informationen es zeigen soll und sein Verhalten. Shortcuts Kurzbefehle Navigation A shortcuts category: navigation Navigation Filter images in folder Name of shortcut action Bilder im Ordner filtern Next image Name of shortcut action Nächstes Bild Previous image Name of shortcut action Vorheriges Bild Go to first image Name of shortcut action Name of shortcut action Gehe zum ersten Bild Go to last image Name of shortcut action Gehe zum letzten Bild Enter viewer mode Name of shortcut action Anschaumodus aktivieren Show quick navigation buttons Name of shortcut action Zeige Knöpfe für die schnelle Navigation Close window (hides to system tray if enabled) Name of shortcut action Fenster schließen (versteckt in der Systemleiste wenn aktiviert) Quit PhotoQt Name of shortcut action PhotoQt beenden Image A shortcuts category: image manipulation Bild Zoom In Name of shortcut action Hineinzoomen Zoom Out Name of shortcut action Herauszoomen Zoom to Actual Size Name of shortcut action Zoom auf tatsächliche Größe Reset Zoom Name of shortcut action Zoom zurücksetzen Rotate Right Name of shortcut action Nach Rechts drehen Rotate Left Name of shortcut action Nach Links drehen Reset Rotation Name of shortcut action Drehung zurücksetzen Flip Horizontally Name of shortcut action Horizontal spiegeln Flip Vertically Name of shortcut action Vertikal spiegeln Scale Image Name of shortcut action Bild skalieren Play/Pause animation/video Name of shortcut action Animation/Video abspielen/pausieren Hide/Show face tags (stored in metadata) Name of shortcut action Markierungen für Gesichter anzeigen/verstecken (in den Metadaten gespeichert) Tag faces (stored in metadata) Name of shortcut action Gesichter markieren (in Metadaten gespeichert) File A shortcuts category: file management Datei Delete File (without confirmation) Name of shortcut action Datei löschen (ohne Bestätigung) Copy File to a New Location Name of shortcut action Datei an einen neuen Ort kopieren Move File to a New Location Name of shortcut action Datei an einen neuen Ort verschieben Copy Image to Clipboard Name of shortcut action Bild in Zwischenablage kopieren Other A shortcuts category: other functions Andere Hide/Show main menu Name of shortcut action Hauptmenü anzeigen/verstecken Hide/Show metadata Name of shortcut action Metadaten verstecken/anzeigen Keep metadata opened Name of shortcut action Metadaten offen halten Hide/Show thumbnails Name of shortcut action Miniaturbilder anzeigen/verstecken Show Settings Name of shortcut action Einstellungen anzeigen Start Slideshow Name of shortcut action Diaschau starten Start Slideshow (Quickstart) Name of shortcut action Diaschau starten (Schnellstart) About PhotoQt Name of shortcut action Über PhotoQt Set as Wallpaper Name of shortcut action Als Hintergrundbild festlegen Show Histogram Name of shortcut action Zeige Histogramm Upload to imgur.com (anonymously) Name of shortcut action Auf imgur.com hochladen (anonym) Upload to imgur.com user account Name of shortcut action Zu Benutzerkonto auf imgur.com hochladen Stream content to Chromecast device Name of shortcut action Inhalt auf Chromecast-Gerät übertragen Show log/debug messages Name of shortcut action Protokoll- und Debugmeldungen anzeigen External A shortcuts category: external shortcuts Extern %f = filename including path, %u = filename without path, %d = directory containing file Please leave the three placeholders (%f, %u, %d) as is. %f = Dateiname inklusive Pfad, %u = Dateiname ohne Pfad, %d = Verzeichnis der Datei Thumbnails settings Miniaturbilder-Einstellungen These settings affect the thumbnails shown, by default, along the bottom edge of the screen. This includes their look, behavior, and the user's interaction with them. Diese Einstellungen beeinflussen die Miniaturbilder, die standardmäßig am unteren Rand des Bildschirms angezeigt werden. Dies beinhaltet ihr Aussehen, ihr Verhalten und die Interaktion des Benutzers's mit ihnen. Settings Manager Window title Einstellungsmanager Here the shortcuts can be managed. Below you can add a new shortcut for any one of the available actions, both key combinations and mouse gestures are supported. Hier können die Kurzbefehle verwaltet werden. Unten können neue Kurzbefehle für die verfügbaren Aktionen hinzugefügt werden. Es werden sowohl Tastenkombinationen als auch Mausgesten unterstützt. You can also set the same shortcut for multiple actions or multiple times for the same action. All actions for a shortcut will be executed sequentially, allowing a lot more flexibility in using PhotoQt. Der gleiche Kurzbefehl kann für mehrere Aktionen oder auch mehrmals für die gleiche Aktion gesetzt werden. Alle Aktionen für einen Kurzbefehl werden nacheinander ausgeführt, was viel mehr Flexibilität in der Nutzung PhotoQt's ermöglicht. Open file (browse images) Name of shortcut action Datei öffnen (Bilder durchsuchen) Save image in another format Name of shortcut action Bild in einem anderen Format speichern Restore defaults As in 'restore the default settings and/or file formats and/or shortcuts'. Please keep short! Standardeinstellungen Here you can restore the default configuration of PhotoQt. You can choose to restore any combination of the following three categories. Hier können die Standardeinstellungen von PhotoQt wiederhergestellt werden. Es kann eine beliebige Kombination der drei folgenden Kategorien ausgewählt werden. Restore default settings Einstellungen auf Standard zurücksetzen Restore default file formats Dateiformate auf Standard zurücksetzen Restore default shortcuts Kurzbefehle auf Standard zurücksetzen settingsmanager_filetypes These are some additional settings for opening archives. Dies sind einige zusätzliche Einstellungen für das Öffnen von Archiven. use external tool: unrar used as label for checkbox externes Werkzeug verwenden: unrar These are some additional settings for showing PDFs. Dies sind einige zusätzliche Einstellungen für das Anzeigen von PDFs. Quality: the quality setting to be used when loading PDFs Qualität: These are some additional settings for playing videos. Dies sind einige zusätzliche Einstellungen für das Abspielen von Videos. Autoplay Used as setting for video files (i.e., autoplay videos) Autoplay Loop Used as setting for video files (i.e., loop videos) Wiederholen Select tool for creating video thumbnails Tooltip shown for combobox for selectiong video thumbnailer Werkzeug zum Erstellen von Vorschaubildern für Videos auswählen images This is a category of files PhotoQt can recognize: any image format Bilder compressed files This is a category of files PhotoQt can recognize: compressed files like zip, tar, cbr, 7z, etc. Komprimierte Dateien documents This is a category of files PhotoQt can recognize: documents like pdf, txt, etc. Dokumente videos This is a type of category of files PhotoQt can recognize: videos like mp4, avi, etc. Videos Enable As in: "Enable all formats in the seleted category of file types" Aktivieren Disable As in: "Disable all formats in the seleted category of file types" Deaktivieren Enable everything As in "Enable every single file format PhotoQt can open in any category" Alles aktivieren Currently there are %1 file formats enabled The %1 will be replaced with the number of file formats, please don't forget to add it. Momentan sind %1 Dateiformate aktiviert Search by description or file ending Suche nach Beschreibung oder Dateiendung Search by image library or category Suche nach Bildbibliothek oder Kategorie File endings: Dateiendungen: settingsmanager_imageview animation A settings title referring to the in/out animation of images Animation What type of animation to show, and how fast. This is referring to the in/out animation of images Welche Art von Animation zu zeigen, und wie schnell. type of animation This is referring to the in/out animation of images Art der Animation opacity This is referring to the in/out animation of images Deckkraft along x-axis This is referring to the in/out animation of images entlang der x-Achse along y-axis This is referring to the in/out animation of images entlang der y-Achse no animation This is referring to the in/out animation of images keine Animation long animation This is referring to the in/out animation of images lange Animation fit in window A settings title referring to whether to fit images in window An Fenstergröße anpassen Zoom smaller images to fill the full window width and/or height. Vergrößere kleinere Bilder, um die volle Fensterbreite und/oder Fensterhöhe zu füllen. fit smaller images in window kleinere Bilder im Fenster anpassen interpolation A settings title referring to the type of interpolation to use for small images Interpolation PhotoQt tries to improve the rendering of images that are shown much larger than they are (i.e., zoomed in a lot). For very tiny images that are zoomed in quite a lot, this can result in the loss of too much information in the image. Thus a threshold can be defined here, images that are smaller than this threshold are shown exactly as they are without any smoothing or other attempts to improve them. PhotoQt versucht die Darstellung von Bildern zu verbessern, die viel größer dargestellt werden als sie sind (z.B. bei hohem Zoom). Für sehr kleine Bilder, die stark vergrößert dargestellt werden, kann dies zu einem Verlust von zu viel Informationen führen. Daher kann hier ein Schwellenwert definiert werden: Bilder, die kleiner als dieser Schwellenwert sind, werden unverändert angezeigt, ohne jegliche Versuche, ihre Darstellung zu verbessern. Do not use any interpolation algorithm for very small images A type of interpolation to use for small images Sehr kleine Bilder nicht interpolieren threshold: The threshold (in pixels) at which to switch interpolation algorithm Schwellenwert: remember per session A settings title pro Sitzung speichern By default, PhotoQt resets the zoom, rotation, flipping/mirroring and position when switching to a different image. For certain tasks, for example for comparing two images, it can be helpful to keep these properties. Standardmäßig setzt PhotoQt beim Wechseln auf ein anderes Bild den Zoom, die Drehung, das Spiegeln und die Position zurück. Bei bestimmten Aufgaben, zum Beispiel beim Vergleich zweier Bilder, kann es hilfreich sein, diese Eigenschaften beizubehalten. remember zoom, rotation, flip, position an Zoom, Drehen, spiegeln, Position erinnern left mouse button A settings title Linke Maustaste The left button of the mouse is by default used to move the image around. However, this prevents the left mouse button from being used for shortcuts. Die linke Maustaste wird standardmäßig dazu verwendet das Bild zu bewegen. Dies verhindert jedoch die Verwendung der linken Maustaste für Kurzbefehle. use left button to move image mit linker Maustaste das Bild bewegen looping A settings title for looping through images in folder Wiederholen What to do when the end of a folder has been reached: stop or loop back to first image in folder. Was zu tun ist, wenn das Ende eines Ordners erreicht wurde: Stoppen oder zurück zum ersten Bild im Ordner. loop through images in folder Bilder im Ordner wiederholen margin A settings title about the margin around the main image Rand How much space to show between the main image and the application border. Wie viel Abstand zwischen dem Hauptbild und dem Anwendungsrahmen angezeigt werden soll. none As in: no margin between the main image and the window edges kein pixmap cache A settings title Zwischenspeicher für Bilder Size of runtime cache for fully loaded images. This cache is cleared when the application quits. Größe des Laufzeit-Zwischenspeichers für geladene Bilder. Dieser Zwischenspeicher wird gelöscht, wenn die Anwendung beendet wird. sort images by A settings title sortiere Bilder nach Sort all images in a folder by the set property. Sortiere alle Bilder in einem Ordner nach der festgelegten Eigenschaft. natural name A criteria for sorting images natürlicher Name name A criteria for sorting images Name time A criteria for sorting images Zeit size A criteria for sorting images Größe type A criteria for sorting images Typ ascending Sort images in ascending order aufsteigend descending Sort images in descending order absteigend transparency marker A settings title Markierung der Transparenz Show checkerboard pattern behind transparent areas of (half-)transparent images. Schachbrettmuster hinter transparenten Bereichen (halb-)transparenter Bilder anzeigen. show checkerboard pattern Setting for how to display images that have transparent areas, whether to show checkerboard pattern in that area or not Schachbrettmuster zeigen zoom speed A settings title, the zoom here is the zoom of the main image Zoomgeschwindigkeit Images are zoomed at a relative speed as specified by this percentage. A higher value means faster zoom. Bilder werden mit einer relativen Geschwindigkeit gezoomt, wie in diesem Prozentsatz angegeben. Ein höherer Wert bedeutet schnelleren Zoom. super slow This refers to the zoom speed, the zoom here is the zoom of the main image super langsam very fast This refers to the zoom speed, the zoom here is the zoom of the main image sehr schnell settingsmanager_interface background A settings title referring to the background of PhotoQt (behind any image/element) Hintergrund What type of background is to be shown. The background here refers to the area behind the main image and any element in PhotoQt, the very back. Welche Art von Hintergrund angezeigt werden soll. (half-)transparent background How the background of PhotoQt should be (halb-)transparenter Hintergrund faked transparency How the background of PhotoQt should be falsche Transparenz custom background image How the background of PhotoQt should be benutzerdefiniertes Hintergrundbild Click to select an image Tooltip for a mouse area, a click on which opens a file dialog for selecting an image Klicken um das Bild auszuwählen scale to fit If an image is set as background of PhotoQt this is one way it can be handled. Skaliert scale and crop to fit If an image is set as background of PhotoQt this is one way it can be handled. Skaliert und beschnitten stretch to fit If an image is set as background of PhotoQt this is one way it can be handled. An Fenster anpassen center image If an image is set as background of PhotoQt this is one way it can be handled. Zentriert tile image If an image is set as background of PhotoQt this is one way it can be handled. Gekachelt All Images This is a category in a file dialog for selecting images used as in: All images supported by PhotoQt. Alle Bilder Video This is a category in a file dialog for selecting images used as in: Video files supported by PhotoQt. Video empty area around image A settings title leerer Bereich um Bild How to handle clicks on empty area around images. Wie mit Klicks auf den leeren Bereich um die Bilder umzugehen ist. close on click Used as in: Close PhotoQt on click on empty area around main image beim Klicken schließen Close PhotoQt when click occurred on empty area around image PhotoQt schließen, wenn auf einen leeren Bereich um das Bild geklickt wurde navigate on click Used as in: Close PhotoQt on click on empty area around main image navigieren bei Klick Go to next/previous image if click occurred in left/right half of window Gehe zum nächsten/vorherigen Bild, wenn im linken/rechten Teil des Fensters geklickt wurde size of 'hot edge' A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) Größe der 'heißen Kante' Adjusts the sensitivity of the edges for showing elements like the metadata and main menu elements. Passt die Empfindlichkeit der Kanten an, mit welcher die Elemente für z. B. die Metadaten und das Hauptmenü anzuzeigen sind. small used as in: small area klein large used as in: large area groß language A settings title. Sprache Change the language of the application. Ändere die Sprache der Anwendung. mouse wheel sensitivity A settings title. Mausradempfindlichkeit How sensitive the mouse wheel is for shortcuts, etc. Wie empfindlich das Mausrad ist für Kurzbefehle und anderes. not sensitive The sensitivity here refers to the sensitivity of the mouse wheel unempfindlich very sensitive The sensitivity here refers to the sensitivity of the mouse wheel sehr empfindlich overlay color A settings title. Überlagerungsfarbe This is the color that is shown on top of any background image/... Dies ist die Farbe, die über dem Hintergrundbild/... angezeigt wird. click to change color klicken, um die Farbe zu ändern please choose a color Bitte eine Farbe wählen pop out elements A settings title. The popping out that is talked about here refers to the possibility of showing any element in its own window (i.e., popped out). Pop-out-Elemente Here you can choose for most elements whether they are to be shown integrated into the main window or in their own, separate window. Hier kann für die meisten Elemente ausgewählt werden, ob sie in das Hauptfenster integriert oder in einem eigenen, separaten Fenster angezeigt werden sollen. File dialog Used as identifying name for one of the elements in the interface Dateidialog keep open offen halten Settings Manager Used as identifying name for one of the elements in the interface Einstellungsmanager Main Menu Used as identifying name for one of the elements in the interface Hauptmenü Metadata Used as identifying name for one of the elements in the interface Metadaten Histogram Used as identifying name for one of the elements in the interface Histogramm Scale Used as identifying name for one of the elements in the interface Skalieren Slideshow Settings Used as identifying name for one of the elements in the interface Diaschau - Einstellungen Slideshow Controls Used as identifying name for one of the elements in the interface Diaschau - Steuerelemente Rename File Used as identifying name for one of the elements in the interface Datei umbenennen Delete File Used as identifying name for one of the elements in the interface Datei löschen Save File As Used as identifying name for one of the elements in the interface Datei speichern als About Used as identifying name for one of the elements in the interface Über Imgur Used as identifying name for one of the elements in the interface Imgur Wallpaper Used as identifying name for one of the elements in the interface Hintergrundbild Filter Noun, not a verb. Used as identifying name for one of the elements in the interface Filter labels A settings title. Labels The labels are shown along the top edge of the main view. Die Labels werden am oberen Rand der Hauptansicht angezeigt. show labels checkbox in settings manager Labels anzeigen counter refers to the image counter (i.e., image #/# in current folder) Zähler filepath show filepath in the labels. This is specifically the filePATH and not the filename. Dateipfad filename show filename in the labels. This is specifically the fileNAME and not the filepath. Dateiname current zoom level aktuelle Zoomstufe current rotation angle aktueller Drehwinkel window buttons the window buttons are some window management buttons like: close window, maximize, fullscreen Fensterknöpfe size of window buttons the size of the window buttons (the buttons shown in the top right corner of the window) Größe der Fensterknöpfe remember last image A settings title. letztes Bild merken At startup the image loaded at the end of the last session can be automatically reloaded. Beim Start kann das am Ende der letzten Sitzung geladene Bild automatisch neu geladen werden. re-open last loaded image at startup zuletzt geladenes Bild beim Start erneut öffnen tray icon A settings title. Symbol in der Systemleiste If a tray icon is to be shown and, if shown, whether to hide it or not. Falls ein Symbol in der Systemleiste angezeigt werden soll, und wenn ja, ob die Anwendung sich dahin verstecken soll beim Schließen oder nicht. no tray icon kein Symbol in der Systemleiste hide to tray icon in die Systemleiste verstecken show tray icon but don't hide to it Symbol anzeigen aber nicht dahin verstecken window management A settings title. Fensterverwaltung Some basic window management properties. Einige einfache Eigenschaften der Fensterverwaltung. manage window through quick info labels Fenster mit Schnellinfo-Labels verwalten save and restore window geometry Fenstergeometrie speichern und wiederherstellen keep above other windows über anderen Fenstern halten window mode A settings title. Fenstermodus Whether to run PhotoQt in window mode or fullscreen. Ob PhotoQt im Fenstermodus oder Vollbild ausgeführt werden soll. run in window mode im Fenstermodus ausführen show window decoration Fensterdekoration zeigen custom main menu entries A settings title. eigene Einträge im Hauptmenü Add some custom entries in the main menu on the right. Benutzerdefinierte Einträge in das Hauptmenü auf der rechten Seite hinzufügen. what string to show in main menu this is the placeholder text inside of a text box telling the user what text they can enter here welcher Text im Hauptmenü angezeigt werden soll which command to execute this is the placeholder text inside of a text box telling the user what text they can enter here welcher Befehl ausgeführt werden soll quit Keep string short! Used on checkbox for contextmenu, refers to option to close PhotoQt after respective command has been executed. beenden move entry down contextmenu settings: used as in 'move this entry down in the list of all entries' Eintrag nach unten verschieben move entry up contextmenu settings: used as in 'move this entry up in the list of all entries' Eintrag nach oben verschieben delete entry contextmenu settings: used as in 'delete this entry out of the list of all entries' Eintrag löschen quick navigation A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) Schnelle Navigation Some buttons to help with quick navigation. These can come in handy when, e.g., operating with a touch screen. Einige Knöpfe zur schnellen Navigation. Diese können hilfreich sein, wenn z.B. mit einem Touchscreen gearbeitet wird. Show quick navigation buttons Zeige Knöpfe für die schnelle Navigation settingsmanager_metadata face tags A settings title. The face tags are labels that can be shown (if available) on faces including their name. Gesichter Whether to show face tags (stored in metadata info). The face tags are labels that can be shown (if available) on faces including their name. Ob Gesichtsmarkierungen angezeigt werden sollen (in Metadaten gespeichert). enable aktivieren face tags - border A settings title. The face tags are labels that can be shown (if available) on faces including their name. Gesichert - Rahmen If and what style of border to show around tagged faces. Ob und wie ein Rahmen um markierte Gesichter gezeigt werden soll. show border The border here is the border around face tags. Rahmen anzeigen click to change color klicke, um die Farbe zu ändern please choose a color bitte eine Farbe wählen face tags - font size A settings title. The face tags are labels that can be shown (if available) on faces including their name. Gesichter - Schriftgröße The font size of the name labels. The name labels here are the labels with the name used for the face tags. Die Schriftgröße der Namensbeschriftungen. face tags - visibility A settings title. The face tags are labels that can be shown (if available) on faces including their name. Gesichter - Sichtbarkeit When to show the face tags and for how long. Wann und wie lange die Markierungen der Gesichter angezeigt werden sollen. hybrid mode A mode for showing face tags. Hybrid-Modus always show all A mode for showing face tags. immer alle anzeigen show one on hover A mode for showing face tags. zeige Eine beim Überfahren show all on hover A mode for showing face tags. zeige Alle beim Überfahren GPS online map A settings title. GPS Onlinekarte Which map service to use when a GPS position is clicked. Welcher Kartendienst verwendet werden soll, wenn eine GPS-Position angeklickt wird. hot edge A settings title. The hot edge refers to the area along the left edge of PhotoQt where the mouse cursor triggers the visibility of the metadata element. heiße Kante Show metadata element when the mouse cursor is close to the window edge Element für die Metadaten anzeigen, wenn der Mauszeiger sich nahe der Fensterkante befindet meta information A settings title. Metadaten Which meta information to extract and display. Welche Metadaten zu extrahieren und anzuzeigen. file name Part of the meta information about the current image. Dateiname file type Part of the meta information about the current image. Dateityp file size Part of the meta information about the current image. Dateigröße image #/# Part of the meta information about the current image. Bild #/# dimensions Part of the meta information about the current image. Bildgröße copyright Part of the meta information about the current image. Copyright exposure time Part of the meta information about the current image. Belichtungszeit flash Part of the meta information about the current image. Blitz focal length Part of the meta information about the current image. Brennweite f-number Part of the meta information about the current image. Blendenzahl GPS position Part of the meta information about the current image. GPS-Position keywords Part of the meta information about the current image. Schlüsselwörter light source Part of the meta information about the current image. Lichtquelle location Part of the meta information about the current image. Standort make Part of the meta information about the current image. Hersteller model Part of the meta information about the current image. Modell scene type Part of the meta information about the current image. Szenenart software Part of the meta information about the current image. Software time photo was taken Part of the meta information about the current image. Aufnahmezeit opacity A settings title. Deckkraft The opacity of the metadata element. Die Deckkraft des Elements für die Metadaten. auto-rotation A settings title. automatische Drehung Automatically rotate images based on metadata information. Bilder auf Basis von Metadaten automatisch drehen. settingsmanager_shortcuts quit checkbox in shortcuts settings, used as in: quit PhotoQt. Please keep as short as possible! beenden Click to change shortcut Klicken, um Kurzbefehl zu ändern Click to delete shortcut Klicken, um Kurzbefehl zu löschen no shortcut set kein Kurzbefehl gesetzt Click to manage shortcut Klicke, um Kurzbefehl zu verwalten add new Used as in 'add new shortcut'. Please keep short! Neuen hinzufügen Add New Shortcut Neuen Kurzbefehl hinzufügen Perform a mouse gesture here or press any key combo Führe hier eine Mausgeste aus oder drücke eine beliebige Tastenkombination Add new Used on button as in 'add new external shortcut'. Please keep short! Neuen hinzufügen settingsmanager_thumbnails thumbnail cache A settings title. Zwischenspeicherung Thumbnails can be cached (permanently), following the freedesktop.org standard. Miniaturbilder können (dauerhaft) zwischengespeichert werden, dem Standard von freedesktop.org entsprechend. enable aktivieren keep in center A settings title. Used as in: Keep thumbnail for current main image in center. in der Mitte halten Keep currently active thumbnail in the center of the screen Aktuelles Miniaturbild in der Mitte des Bildschirms halten center on active thumbnail aktuelles Miniaturbild in der Mitte halten disable thumbnails Miniaturbilder deaktivieren Disable thumbnails in case no thumbnails are desired whatsoever. Miniaturbilder deaktivieren falls keine erwünscht sind. disable all thumbnails alle Miniaturbilder deaktivieren filename label A settings title. The filename label here is the one that is written on thumbnails. Dateinamenbeschriftung Show the filename on a small label on the thumbnail image. Den Dateinamen als Beschriftung auf dem Miniaturbild anzeigen. font size: Schriftgröße: filename-only A settings title. This refers to using only the filename as thumbnail and no actual image. nur den Dateinamen Show only the filename as thumbnail, no actual image. Zeige nur den Dateinamen als Miniaturbild, nicht das eigentliche Bild. lift up A settings title. This refers to the lift up of thumbnail images when active/hovered. Anheben How many pixels to lift up thumbnails when either hovered or active. Wie viele Pixel ein Miniaturbild angehoben werden sollen falls der Mauszeiger sich darüber befindet oder es aktiv ist. position A settings title referring to the position of the thumbnails (upper or lower edge of PhotoQt). Position Which edge to show the thumbnails on, upper or lower edge. An welcher Bildschirmkante die Miniaturbilder angezeigt werden sollen, oben oder unten. upper edge The upper edge of PhotoQt obere Bildschirmkante lower edge The lower edge of PhotoQt untere Bildschirmkante size A settings title referring to the size of the thumbnails. Größe How large (or small) the thumbnails should be. Wie groß (oder klein) die Miniaturbilder sein sollen. spacing A settings title referring to the spacing of thumbnails, i.e., how much empty space to have between each. Abstand How much space to show between the thumbnails. Wie viel Platz zwischen den Miniaturbildern angezeigt werden soll. threads A settings title, as in: How many threads to use to generate thumbnails. Threads How many threads to use to create thumbnails. Too many threads can slow down your computer! Wie viele Threads zum Erstellen von Miniaturbildern verwendet werden sollen. Zu viele Threads können den Computer verlangsamen! Threads: Threads: visibility A settings title referring to the visibility of the thumbnails, i.e., if and when to hide them. Sichtbarkeit If and how to keep thumbnails visible Wenn und wie die Miniaturbilder sichtbar gehalten werden sollen hide when not needed This is talking about the thumbnails. verstecken wenn nicht benötigt never hide This is talking about the thumbnails. nie verstecken hide when zoomed in This is talking about the thumbnails. verstecken wenn gezoomt exclude folders ausgeschlossene Verzeichnisse Exclude the specified folders and all of its subfolders from any sort of caching and preloading. Die angegebenen Ordner und alle Unterordner von jeder Art des Zwischenspeicherns und des Vorladens ausschließen. Do not cache these folders: Diese Ordner nicht zwischenspeichern: Add folder Written on a button Ordner hinzufügen One folder per line Ein Ordner pro Zeile slideshow Click to go to the previous image Klicken, um zum vorherigen Bild zu gehen Click to pause slideshow Klicken, um die Diaschau zu pausieren Click to play slideshow Klicken, um die Diaschau zu starten Click to go to the next image Klicke, um zum nächsten Bild zu gehen Sound volume: Lautstärke: Click to quit slideshow Klicken, um die Diaschau zu beenden Slideshow settings Window title Einstellungen für die Diaschau interval The interval between images in a slideshow Zeitintervall animation This is referring to the in/out animation of images during a slideshow Animation opacity This is referring to the in/out animation of images during slideshows Deckkraft along x-axis This is referring to the in/out animation of images during slideshows entlang der x-Achse along y-axis This is referring to the in/out animation of images during slideshows entlang der y-Achse animation speed The speed of transitioning from one image to another during slideshows Animationsgeschwindigkeit immediately, without animation This refers to a speed of transitioning from one image to another during slideshows sofort, ohne Animation pretty fast animation This refers to a speed of transitioning from one image to another during slideshows ziemlich schnelle Animation not too fast and not too slow This refers to a speed of transitioning from one image to another during slideshows nicht zu schnell und nicht zu langsam very slow animation This refers to a speed of transitioning from one image to another during slideshows sehr langsame Animation current speed This refers to the currently set speed of transitioning from one image to another during slideshows aktuelle Geschwindigkeit looping Wiederholen loop over all files Loop over all images during slideshows alle Dateien in Dauerschleife durchlaufen shuffle during slideshows shuffle the order of all images Zufallswiedergabe shuffle all files during slideshows shuffle the order of all images alle Dateien mischen subfolders also include images in subfolders during slideshows Unterordner include images in subfolders also include images in subfolders during slideshows Bilder aus den Unterordnern mit einbeziehen quickinfo What to do with the quick info during slideshows Schnellinfo hide quickinfo What to do with the quick info during slideshows Schnellinfo verbergen music The music that is to be played during slideshows Musik enable music Enable music to be played during slideshows Musik aktivieren no file selected keine Datei ausgewählt Click to select music file Klicken, um Musikdatei auszuwählen Click to change music file Klicken, um Musikdatei zu ändern Common music file formats Verbreitete Musikdateiformate All Files Alle Dateien Start slideshow Written on a clickable button Diaschau starten Slideshow controls Window title Diaschau - Steuerelemente startup Edit with %1 Used as in 'Edit with [application]'. %1 will be replaced with application name. Mit %1 bearbeiten Open in %1 Used as in 'Open with [application]'. %1 will be replaced with application name. Mit %1 öffnen streaming Scan for devices Used as tooltip for button that starts a scan for Chromecast streaming devices in the local network Nach Geräten suchen Disconnect Written on button, as in 'Disconnect from connected Chromecast streaming device' Trennen Connect Written on button, as in 'Connect to Chromecast streaming device' Verbinden searching for devices... status text while searching for chromecast streaming devices in the local network Geräte werden gesucht... no devices found result of scan for chromecast streaming devices keine Geräte gefunden Streaming (Chromecast) Window title Streaming (Chromecast) thumbnailbar File size: Dateigröße: File type: Dateityp: unavailable Sorry, but this feature is not yet available on Windows. Leider ist diese Funktion noch nicht unter Windows verfügbar. Feature unavailable Window title, informing user that the requested feature is currently not available Funktion nicht verfügbar wallpaper Warning: %1 module not activated Warnung: Modul %1 nicht aktiviert Warning: %1 not found Warnung: %1 nicht gefunden Set to which screens As in: Set wallpaper to which screens Für welche Bildschirme setzen Screen Used in wallpaper element Bildschirm Set to which workspaces Enlightenment desktop environment handles wallpapers per workspace (different from screen) Für welche Arbeitsflächen setzen Workspace: Enlightenment desktop environment handles wallpapers per workspace (different from screen) Arbeitsfläche: Choose picture option picture option refers to how to format a pictrue when setting it as wallpaper Bildoption auswählen Other Used as in: Other Desktop Environment Andere Tool: Tool refers to a program that can be executed Werkzeug: Click to choose %1 %1 is a placeholder for the name of a desktop environment (plasma, xfce, gnome, etc.) Klicken, um %1 auszuwählen Set as Wallpaper Heading of wallpaper element ---------- Written on clickable button ---------- Window title Als Hintergrund setzen The image will be set to all screens at the same time. Das Bild wird auf alle Bildschirme gleichzeitig gesetzt. photoqt-2.5/lang/photoqt_ru_RU.ts000644 001750 001750 00000667037 14165351632 017544 0ustar00luspiluspi000000 000000 MainMenu Settings This is an entry in the main menu on the right. Please keep short! Настройки Slideshow This is an entry in the main menu on the right. Please keep short! Слайдшоу setup This is an entry in the main menu on the right, used as in: setting up a slideshow. Please keep short! настроить quickstart This is an entry in the main menu on the right, used as in: quickstarting a slideshow. Please keep short! быстрый запуск Face tagging mode This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Режим маркировки лиц About PhotoQt This is an entry in the main menu on the right. Please keep short! О PhotoQt Quit This is an entry in the main menu on the right. Please keep short! Выход Filter images in folder This is an entry in the main menu on the right. Please keep short! Filter images in folder Show/Hide metadata This is an entry in the main menu on the right. Please keep short! Show/Hide metadata Scale image This is an entry in the main menu on the right. Please keep short! Scale image Go to This is an entry in the main menu on the right, used as in: Go To some image. Please keep short! Вперед previous This is an entry in the main menu on the right, used as in: go to previous image. Please keep short! предыдущее next This is an entry in the main menu on the right, used as in: go to next image. Please keep short! следующее first This is an entry in the main menu on the right, used as in: go to first image. Please keep short! первый last This is an entry in the main menu on the right, used as in: go to last image. Please keep short! последний Zoom This is an entry in the context menu, used as in: Zoom image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Zoom image. Please keep short! Увеличение масштаба изображения reset This is an entry in the context menu, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the context menu, used as in: Reset flip/mirror of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset flip/mirror of image. Please keep short! сброс Rotate This is an entry in the context menu, used as in: Rotate image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image. Please keep short! Вращение Click and drag to resize main menu Click and drag to resize main menu Wallpaper This is an entry in the main menu on the right. Please keep short! Wallpaper Open file (browse images) This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Open file (browse images) left This is an entry in the context menu, used as in: Rotate image left. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image left. Please keep short! влево right This is an entry in the context menu, used as in: Rotate image right. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image right. Please keep short! вправо Flip This is an entry in the context menu, used as in: Flip/Mirror image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image. Please keep short! перевернуть horizontal This is an entry in the context menu, used as in: Flip/Mirror image horizontally. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image horizontally. Please keep short! горизонтально vertical This is an entry in the context menu, used as in: Flip/Mirror image vertically. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image vertically. Please keep short! вертикально File This is an entry in the context menu, used to refer to the current file (specifically the file, not directly the image). Please keep short! ---------- This is an entry in the main menu on the right, used to refer to the current file (specifically the file, not directly the image). Please keep short! Файл rename This is an entry in the context menu, used as in: rename file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: rename file. Please keep short! переименовать copy This is an entry in the context menu, used as in: copy file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: copy file. Please keep short! копировать move This is an entry in the context menu, used as in: move file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: move file. Please keep short! переместить delete This is an entry in the context menu, used as in: delete file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: delete file. Please keep short! удалить Streaming (Chromecast) This is an entry in the context menu, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! ---------- This is an entry in the main menu on the right, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! Streaming (Chromecast) Copy to clipboard This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Copy to clipboard Show/Hide histogram This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Show/Hide histogram Open in default file manager This is an entry in the main menu on the right. Please keep short! Открыть в файловом менеджере по умолчанию Show log/debug messages This is an entry in the main menu on the right. Please keep short! Show log/debug messages Main Menu This is the heading of the main menu element ---------- Window title Главное меню Click here to go to the online manual for help regarding shortcuts, settings, features, ... Нажмите здесь, чтобы перейти к онлайн-руководству о помощи по комбинациям клавиш, настройкам, функциям, ... PQImageFormats ERROR getting default image formats This is the window title of an error message box ERROR getting default image formats I tried hard, but I just cannot open even a read-only version of the database of default image formats. I tried hard, but I just cannot open even a read-only version of the database of default image formats. Something went terribly wrong somewhere! Something went terribly wrong somewhere! I tried hard, but I just cannot open the database of default image formats. I tried hard, but I just cannot open the database of default image formats. PQMetaData yes This string identifies that flash was fired, stored in image metadata yes no This string identifies that flash was not fired, stored in image metadata no No flash function This string refers to the absense of a flash, stored in image metadata No flash function strobe return light not detected This string refers to a flash mode, stored in image metadata strobe return light not detected strobe return light detected This string refers to a flash mode, stored in image metadata strobe return light detected compulsory flash mode This string refers to a flash mode, stored in image metadata compulsory flash mode auto mode This string refers to a flash mode, stored in image metadata auto mode red-eye reduction mode This string refers to a flash mode, stored in image metadata red-eye reduction mode return light detected This string refers to a flash mode, stored in image metadata return light detected return light not detected This string refers to a flash mode, stored in image metadata return light not detected Invalid flash This string refers to a flash mode, stored in image metadata Invalid flash Standard This string refers to a type of scene, stored in image metadata Standard Landscape This string refers to a type of scene, stored in image metadata Landscape Portrait This string refers to a type of scene, stored in image metadata Portrait Night Scene This string refers to a type of scene, stored in image metadata Night Scene Invalid Scene Type This string refers to a type of scene, stored in image metadata Invalid Scene Type Unknown This string refers to the light source stored in image metadata Unknown Daylight This string refers to the light source stored in image metadata Daylight Fluorescent This string refers to the light source stored in image metadata Fluorescent Tungsten (incandescent light) This string refers to the light source stored in image metadata Tungsten (incandescent light) Flash This string refers to the light source stored in image metadata Flash Fine weather This string refers to the light source stored in image metadata Fine weather Cloudy Weather This string refers to the light source stored in image metadata Cloudy Weather Shade This string refers to the light source stored in image metadata Shade Daylight fluorescent This string refers to the light source stored in image metadata Daylight fluorescent Day white fluorescent This string refers to the light source stored in image metadata Day white fluorescent Cool white fluorescent This string refers to the light source stored in image metadata Cool white fluorescent White fluorescent This string refers to the light source stored in image metadata White fluorescent Standard light This string refers to the light source stored in image metadata Standard light Other light source This string refers to the light source stored in image metadata Other light source Invalid light source This string refers to the light source stored in image metadata Invalid light source PQSettings ERROR getting database with default settings This is the window title of an error message box ERROR getting database with default settings I tried hard, but I just cannot open even a read-only version of the settings database. I tried hard, but I just cannot open even a read-only version of the settings database. Something went terribly wrong somewhere! Something went terribly wrong somewhere! ERROR opening database with default settings ERROR opening database with default settings I tried hard, but I just cannot open the database of default settings. I tried hard, but I just cannot open the database of default settings. PQShortcuts ERROR getting database with default shortcuts This is the window title of an error message box ERROR getting database with default shortcuts I tried hard, but I just cannot open even a read-only version of the shortcuts database. I tried hard, but I just cannot open even a read-only version of the shortcuts database. Something went terribly wrong somewhere! Something went terribly wrong somewhere! ERROR opening database with default settings ERROR opening database with default settings I tried hard, but I just cannot open the database of default shortcuts. I tried hard, but I just cannot open the database of default shortcuts. PQStartup SQLite error This is the window title of an error message box SQLite error You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! TabShortcuts about Close Close Current version: Current version: License: License: Open license Open license Website: Website: Open website Open website Contact: Contact: Send an email Send an email About Window title About buttongeneric Ok This is a generic string written on clickable buttons - please keep short! Ok Cancel This is a generic string written on clickable buttons - please keep short! Cancel Save This is a generic string written on clickable buttons - please keep short! Save Close This is a generic string written on clickable buttons - please keep short! Close commandlineparser Image Viewer Image Viewer Image file to open. Image file to open. Make PhotoQt ask for a new file. Make PhotoQt ask for a new file. Shows PhotoQt from system tray. Shows PhotoQt from system tray. Hides PhotoQt to system tray. Command line option Hides PhotoQt to system tray. Show/Hide PhotoQt. Show/Hide PhotoQt. Enable thumbnails. Command line option Enable thumbnails. Disable thumbnails. Command line option Disable thumbnails. Enable system tray icon. Command line option Enable system tray icon. Disable system tray icon. Command line option Disable system tray icon. Start PhotoQt hidden to the system tray. Command line option Start PhotoQt hidden to the system tray. Open standalone PhotoQt, allows for multiple instances but without remote interaction. Command line option Open standalone PhotoQt, allows for multiple instances but without remote interaction. Simulate a shortcut sequence Command line option Simulate a shortcut sequence Switch on debug messages. Command line option Switch on debug messages. Switch off debug messages. Command line option Switch off debug messages. Export configuration to given filename. Command line option Export configuration to given filename. filename Command line option filename Import configuration from given filename. Command line option Import configuration from given filename. Check the configuration and correct any detected issues. Command line option Check the configuration and correct any detected issues. Reset default configuration. Command line option Reset default configuration. facetagging Who is this? This question is asked in the face tagger to ask for the name of a tagged face Who is this? Enter name Enter name Click to exit face tagging mode Click to exit face tagging mode Click to tag faces, changes are saved automatically Click to tag faces, changes are saved automatically File type does not support face tags. File type does not support face tags. filedialog Backwards Backwards Up a level Up a level Forwards Forwards List subfolders List subfolders Enter fullscreen Enter fullscreen Exit fullscreen Exit fullscreen Close Close Storage devices This is the category title of storage devices to open (like USB keys) in the element for opening files Storage devices Detected storage devices on your system Detected storage devices on your system no supported files/folders found no supported files/folders found Click and drag to favorites Click and drag to favorites # images # images Date: Date: Time: Time: File size: File size: File type: File type: %1 image %1 image %1 images %1 images no folder added to favorites yet 'favorites' here refers to the list of favorite folders a user can set in the file dialog no folder added to favorites yet Favorites This is the category title of user-set folders (or favorites) in the file dialog Favorites Your favorites Your favorites Show entry Show entry Hide entry Hide entry Remove entry Remove entry Hide hidden entries Hide hidden entries Show hidden entries Show hidden entries Load this folder Load this folder Load this file Load this file Add to Favorites Add to Favorites Hide hidden files Hide hidden files Show hidden files Show hidden files Hide thumbnails Hide thumbnails Show thumbnails Show thumbnails Hide preview Hide preview Show preview Show preview Standard This is the category title of user-set folders (or favorites) in the file dialog Standard Some standard locations Some standard locations Zoom: Zoom: Adjust font size of files and folders Adjust font size of files and folders Zoom factor: Zoom factor: Sort by: Sort by: Name Name Natural Name Natural Name Time modified Time modified File size File size File type File type reverse order reverse order Choose by what to sort the files Choose by what to sort the files All supported images All supported images Video files Video files All files All files Choose which selection of files to show Choose which selection of files to show Remember loaded folder between sessions. Remember loaded folder between sessions. Switch between list and icon view Switch between list and icon view Hide standard locations Hide standard locations Show standard locations Show standard locations Hide favorite locations Hide favorite locations Show favorite locations Show favorite locations Hide storage devices Hide storage devices Show storage devices Show storage devices File dialog Window title File dialog filemanagement Delete file? Window title Delete file? An error occured, file could not be deleted! An error occured, file could not be deleted! Move to trash Move to trash Delete permanently Delete permanently Rename file Window title Rename file An error occured, file could not be renamed! An error occured, file could not be renamed! Enter new filename Enter new filename Save file as This is a title, similar to all the 'save as' options in many programs. ---------- Window title Save file as An error occured, file could not be saved! An error occured, file could not be saved! Operation cancelled 'Operation' here is the operation of saving an image in a new format Operation cancelled Filter formats This is a short hint informing the user that here they can 'filter all the possible file formats' Filter formats New filename New filename Choose location and save file Choose location and save file filter Filter images in current directory Filter images in current directory Enter here the terms you want to filter the images by. Separate multiple terms by a space. Enter here the terms you want to filter the images by. Separate multiple terms by a space. If you want to filter by file extension, start the term with a dot. If you want to filter by file extension, start the term with a dot. Enter filter term Enter filter term Filter Written on a clickable button - please keep short ---------- Window title Filter Remove filter Written on a clickable button - please keep short Remove filter histogram Histogram Window title Histogram Loading... As in: Loading the histogram for the current image Loading... Click-and-drag to move. Used for the histogram. The version refers to the type of histogram that is available (colored and greyscale) Click-and-drag to move. Right click to switch version. Right click to switch version. imageprovider File failed to load, it does not exist! File failed to load, it does not exist! imgur Upload to imgur.com Window title Upload to imgur.com anonymous Used as in: Upload image as anonymous user anonymous Obtaining image url... Obtaining image url... This seems to take a long time... This seems to take a long time... There might be a problem with your internet connection or the imgur.com servers. There might be a problem with your internet connection or the imgur.com servers. An Error occurred while uploading image! An Error occurred while uploading image! Error code: Error code: You do not seem to be connected to the internet... You do not seem to be connected to the internet... Unable to upload! Unable to upload! Access Image Access Image Click to open in browser Click to open in browser Copy to clipboard Copy to clipboard Delete Image Delete Image keymouse Alt Refers to a keyboard modifier Alt Ctrl Refers to a keyboard modifier Ctrl Shift Refers to a keyboard modifier Shift Page Up Refers to one of the keys on the keyboard Page Up Page Down Refers to one of the keys on the keyboard Page Down Meta Refers to the key that usually has the Windows symbol on it Meta Keypad Refers to the key that triggers the number block on keyboards Keypad Escape Refers to one of the keys on the keyboard Escape Right Refers to one of the arrow keys on the keyboard Right Left Refers to one of the arrow keys on the keyboard Left Up Refers to one of the arrow keys on the keyboard Up Down Refers to one of the arrow keys on the keyboard Down Space Refers to one of the keys on the keyboard Space Delete Refers to one of the keys on the keyboard Delete Backspace Refers to one of the keys on the keyboard Backspace Home Refers to one of the keys on the keyboard Home End Refers to one of the keys on the keyboard End Insert Refers to one of the keys on the keyboard Insert Tab Refers to one of the keys on the keyboard Tab Return Return refers to the enter key of the number block - please try to make the translations of Return and Enter (the main button) different if possible! Return Enter Enter refers to the main enter key - please try to make the translations of Return (in the number block) and Enter different if possible! Enter Left Button Refers to a mouse button Left Button Right Button Refers to a mouse button Right Button Middle Button Refers to a mouse button Middle Button Wheel Up Refers to the mouse wheel Wheel Up Wheel Down Refers to the mouse wheel Wheel Down East Refers to a direction of the mouse when performing a mouse gesture East South Refers to a direction of the mouse when performing a mouse gesture South West Refers to a direction of the mouse when performing a mouse gesture West North Refers to a direction of the mouse when performing a mouse gesture North logging Logging Window title Logging enable debug messages enable debug messages copy to clipboard copy to clipboard save to file save to file metadata Click and drag to resize meta data Click and drag to resize meta data File name Please keep string short! File name Dimensions The dimensions of the loaded image. Please keep string short! Размеры Image #/# Used as in "Image 3/16". The numbers (position of image in folder) are added on automatically. Please keep string short! Image #/# File size Please keep string short! File size File type Please keep string short! File type Make Exif image metadata: the make of the camera used to take the photo. Please keep string short! Создать Model Exif image metadata: the model of the camera used to take the photo. Please keep string short! Модель Software Exif image metadata: the software used to create the photo. Please keep string short! Программное обеспечение Time Photo was Taken Exif image metadata: when the photo was taken. Please keep string short! Время создания фотографии Exposure Time Exif image metadata: how long the sensor was exposed to the light. Please keep string short! Время выдержки Flash Exif image metadata: the flash setting when the photo was taken. Please keep string short! Вспышка Scene Type Exif image metadata: the specific scene type the camera used for the photo. Please keep string short! Тип сцены Focal Length Exif image metadata: https://en.wikipedia.org/wiki/Focal_length . Please keep string short! Фокусное расстояние Metadata This is the heading of the metadata element ---------- Window title Metadata No File Loaded No File Loaded Click to open GPS position with online map Click to open GPS position with online map Keep Open Used as in: Keep the metadata element open even if the cursor leaves it Keep Open Light Source Exif image metadata: What type of light the camera detected. Please keep string short! Источник света Keywords IPTC image metadata: A description of the image by the user/software. Please keep string short! Ключевые слова Location IPTC image metadata: The CITY and COUNTRY the imge was taken in. Please keep string short! Место нахождения Copyright IPTC image metadata. Please keep string short! Авторские права GPS Position Exif image metadata. Please keep string short! GPS Позиция F Number Exif image metadata: https://en.wikipedia.org/wiki/F-number . Please keep string short! F номер navigate Click and drag to move Click and drag to move Navigate to previous image in folder Navigate to previous image in folder Navigate to next image in folder Navigate to next image in folder Show main menu Show main menu other Open a file to start Open a file to start Click anywhere to open a file Part of the message shown in the main view before any image is loaded Click anywhere to open a file Move your cursor to: Part of the message shown in the main view before any image is loaded Move your cursor to: RIGHT EDGE for the main menu Part of the message shown in the main view before any image is loaded, first option for where to move cursor to RIGHT EDGE for the main menu LEFT EDGE for the metadata Part of the message shown in the main view before any image is loaded, second option for where to move cursor to LEFT EDGE for the metadata BOTTOM EDGE to show the thumbnails Part of the message shown in the main view before any image is loaded, third option for where to move cursor to BOTTOM EDGE to show the thumbnails (once an image/folder is loaded) Part of the message shown in the main view before any image is loaded (once an image/folder is loaded) No matches found Used as in: No matches found for the currently set filter No matches found PhotoQt Image Viewer The window title of PhotoQt PhotoQt Image Viewer popinpopout Merge into main interface Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface Merge into main interface Move to its own window Tooltip of small button to show an element in its own window (i.e., not merged into main interface) Move to its own window quickinfo Click here to enter fullscreen mode Click here to enter fullscreen mode Click here to exit fullscreen mode Click here to exit fullscreen mode Click here to close PhotoQt Click here to close PhotoQt Page %1 of %2 Used as in: Page 12/34 - please keep as short as possible Page %1 of %2 File %1 of %2 Used as in: File 12/34 - please keep as short as possible File %1 of %2 Connected to: This is followed by the name of the Chromecast streaming device currently connected to Connected to: Copy filename to clipboard Copy filename to clipboard Show counter Show counter Hide counter Hide counter Show file path Show file path Hide file path Hide file path Show file name Show file name Hide file name Hide file name Show zoom level Show zoom level Hide zoom level Hide zoom level Click here to enter viewer mode Click here to enter viewer mode Hide central 'viewer mode' button Hide central 'viewer mode' button Click here to exit viewer mode Click here to exit viewer mode Filter: Filter: Show window buttons Show window buttons Hide window buttons Hide window buttons Some info about the current image and directory Some info about the current image and directory Show central 'viewer mode' button Show central 'viewer mode' button Click to remove filter Click to remove filter scale Scale file Window title Scale file An error occured, file could not be scaled! An error occured, file could not be scaled! This file format cannot (yet) be scaled with PhotoQt! This file format cannot (yet) be scaled with PhotoQt! New width x height: New width x height: Preserve aspect ratio The aspect ratio refers to the ratio of the width to the height of the image, e.g., 16:9 for most movies Preserve aspect ratio Quality: This refers to the quality to be used to scale the image Quality: Scale (create new file) Written on a clickable button Scale (create new file) Scale (change file in place) Written on a clickable button Scale (change file in place) De-/Increase width and height by 10% De-/Increase width and height by 10% In-/Decrease quality by 5% In-/Decrease quality by 5% Select new file Select new file settingsmanager interface settings manager tab title interface Tab to control interface settings Tab to control interface settings image view settings manager tab title image view Tab to control how images are viewed Tab to control how images are viewed thumbnails settings manager tab title thumbnails Tab to control the look and behaviour of thumbnails Tab to control the look and behaviour of thumbnails metadata settings manager tab title metadata Tab to control metadata settings Tab to control metadata settings file types settings manager tab title file types Tab to control which file types PhotoQt should recognize Tab to control which file types PhotoQt should recognize shortcuts settings manager tab title shortcuts Tab to control which shortcuts are set Tab to control which shortcuts are set advanced Written on button in setting manager. A click on this button opens a menu with some advanced actions. advanced restore defaults restore defaults import settings import settings export settings export settings disable expert mode disable expert mode enable expert mode enable expert mode Import of %1. This will replace your current settings with the ones stored in the backup. Import of %1. This will replace your current settings with the ones stored in the backup. Do you want to continue? Do you want to continue? Save changes and exit Save changes and exit Exit and discard changes Exit and discard changes Rename File Name of shortcut action Rename File Delete File Name of shortcut action Delete File Filetype settings Filetype settings These settings govern which file types PhotoQt should recognize and open. These settings govern which file types PhotoQt should recognize and open. Not all file types might be available, depending on your setup and what library support was enabled at compile time Not all file types might be available, depending on your setup and what library support was enabled at compile time Image view settings Image view settings These settings affect the viewing of images, how they are shown, in what order, how large a cache to use, etc. These settings affect the viewing of images, how they are shown, in what order, how large a cache to use, etc. Some settings are only shown in expert mode. Some settings are only shown in expert mode. Interface settings Interface settings These settings affect the interface in general, how the application looks like and behaves. This includes the background, some of the labels in the main view, which elements are to be shown in their own window, and others. These settings affect the interface in general, how the application looks like and behaves. This includes the background, some of the labels in the main view, which elements are to be shown in their own window, and others. Metadata settings Metadata settings These settings affect the metadata element, what information it should show and some of its behavior. These settings affect the metadata element, what information it should show and some of its behavior. Shortcuts Shortcuts Navigation A shortcuts category: navigation Navigation Filter images in folder Name of shortcut action Filter images in folder Next image Name of shortcut action Next image Previous image Name of shortcut action Previous image Go to first image Name of shortcut action Name of shortcut action Go to first image Go to last image Name of shortcut action Go to last image Enter viewer mode Name of shortcut action Enter viewer mode Show quick navigation buttons Name of shortcut action Show quick navigation buttons Close window (hides to system tray if enabled) Name of shortcut action Close window (hides to system tray if enabled) Quit PhotoQt Name of shortcut action Quit PhotoQt Image A shortcuts category: image manipulation Image Zoom In Name of shortcut action Zoom In Zoom Out Name of shortcut action Zoom Out Zoom to Actual Size Name of shortcut action Zoom to Actual Size Reset Zoom Name of shortcut action Reset Zoom Rotate Right Name of shortcut action Rotate Right Rotate Left Name of shortcut action Rotate Left Reset Rotation Name of shortcut action Reset Rotation Flip Horizontally Name of shortcut action Flip Horizontally Flip Vertically Name of shortcut action Flip Vertically Scale Image Name of shortcut action Scale Image Play/Pause animation/video Name of shortcut action Play/Pause animation/video Hide/Show face tags (stored in metadata) Name of shortcut action Hide/Show face tags (stored in metadata) Tag faces (stored in metadata) Name of shortcut action Tag faces (stored in metadata) File A shortcuts category: file management File Delete File (without confirmation) Name of shortcut action Delete File (without confirmation) Copy File to a New Location Name of shortcut action Copy File to a New Location Move File to a New Location Name of shortcut action Move File to a New Location Copy Image to Clipboard Name of shortcut action Copy Image to Clipboard Other A shortcuts category: other functions Other Hide/Show main menu Name of shortcut action Hide/Show main menu Hide/Show metadata Name of shortcut action Hide/Show metadata Keep metadata opened Name of shortcut action Keep metadata opened Hide/Show thumbnails Name of shortcut action Hide/Show thumbnails Show Settings Name of shortcut action Show Settings Start Slideshow Name of shortcut action Start Slideshow Start Slideshow (Quickstart) Name of shortcut action Start Slideshow (Quickstart) About PhotoQt Name of shortcut action About PhotoQt Set as Wallpaper Name of shortcut action Set as Wallpaper Show Histogram Name of shortcut action Show Histogram Upload to imgur.com (anonymously) Name of shortcut action Upload to imgur.com (anonymously) Upload to imgur.com user account Name of shortcut action Upload to imgur.com user account Stream content to Chromecast device Name of shortcut action Stream content to Chromecast device Show log/debug messages Name of shortcut action Show log/debug messages External A shortcuts category: external shortcuts External %f = filename including path, %u = filename without path, %d = directory containing file Please leave the three placeholders (%f, %u, %d) as is. %f = filename including path, %u = filename without path, %d = directory containing file Thumbnails settings Thumbnails settings These settings affect the thumbnails shown, by default, along the bottom edge of the screen. This includes their look, behavior, and the user's interaction with them. These settings affect the thumbnails shown, by default, along the bottom edge of the screen. This includes their look, behavior, and the user's interaction with them. Settings Manager Window title Settings Manager Here the shortcuts can be managed. Below you can add a new shortcut for any one of the available actions, both key combinations and mouse gestures are supported. Here the shortcuts can be managed. Below you can add a new shortcut for any one of the available actions, both key combinations and mouse gestures are supported. You can also set the same shortcut for multiple actions or multiple times for the same action. All actions for a shortcut will be executed sequentially, allowing a lot more flexibility in using PhotoQt. You can also set the same shortcut for multiple actions or multiple times for the same action. All actions for a shortcut will be executed sequentially, allowing a lot more flexibility in using PhotoQt. Open file (browse images) Name of shortcut action Open file (browse images) Save image in another format Name of shortcut action Save image in another format Restore defaults As in 'restore the default settings and/or file formats and/or shortcuts'. Please keep short! Restore defaults Here you can restore the default configuration of PhotoQt. You can choose to restore any combination of the following three categories. Here you can restore the default configuration of PhotoQt. You can choose to restore any combination of the following three categories. Restore default settings Restore default settings Restore default file formats Restore default file formats Restore default shortcuts Restore default shortcuts settingsmanager_filetypes These are some additional settings for opening archives. These are some additional settings for opening archives. use external tool: unrar used as label for checkbox use external tool: unrar These are some additional settings for showing PDFs. These are some additional settings for showing PDFs. Quality: the quality setting to be used when loading PDFs Quality: These are some additional settings for playing videos. These are some additional settings for playing videos. Autoplay Used as setting for video files (i.e., autoplay videos) Autoplay Loop Used as setting for video files (i.e., loop videos) Loop Select tool for creating video thumbnails Tooltip shown for combobox for selectiong video thumbnailer Select tool for creating video thumbnails images This is a category of files PhotoQt can recognize: any image format images compressed files This is a category of files PhotoQt can recognize: compressed files like zip, tar, cbr, 7z, etc. compressed files documents This is a category of files PhotoQt can recognize: documents like pdf, txt, etc. documents videos This is a type of category of files PhotoQt can recognize: videos like mp4, avi, etc. videos Enable As in: "Enable all formats in the seleted category of file types" Enable Disable As in: "Disable all formats in the seleted category of file types" Disable Enable everything As in "Enable every single file format PhotoQt can open in any category" Enable everything Currently there are %1 file formats enabled The %1 will be replaced with the number of file formats, please don't forget to add it. Currently there are %1 file formats enabled Search by description or file ending Search by description or file ending Search by image library or category Search by image library or category File endings: File endings: settingsmanager_imageview animation A settings title referring to the in/out animation of images animation What type of animation to show, and how fast. This is referring to the in/out animation of images What type of animation to show, and how fast. type of animation This is referring to the in/out animation of images type of animation opacity This is referring to the in/out animation of images opacity along x-axis This is referring to the in/out animation of images along x-axis along y-axis This is referring to the in/out animation of images along y-axis no animation This is referring to the in/out animation of images no animation long animation This is referring to the in/out animation of images long animation fit in window A settings title referring to whether to fit images in window fit in window Zoom smaller images to fill the full window width and/or height. Zoom smaller images to fill the full window width and/or height. fit smaller images in window fit smaller images in window interpolation A settings title referring to the type of interpolation to use for small images interpolation PhotoQt tries to improve the rendering of images that are shown much larger than they are (i.e., zoomed in a lot). For very tiny images that are zoomed in quite a lot, this can result in the loss of too much information in the image. Thus a threshold can be defined here, images that are smaller than this threshold are shown exactly as they are without any smoothing or other attempts to improve them. PhotoQt tries to improve the rendering of images that are shown much larger than they are (i.e., zoomed in a lot). For very tiny images that are zoomed in quite a lot, this can result in the loss of too much information in the image. Thus a threshold can be defined here, images that are smaller than this threshold are shown exactly as they are without any smoothing or other attempts to improve them. Do not use any interpolation algorithm for very small images A type of interpolation to use for small images Do not use any interpolation algorithm for very small images threshold: The threshold (in pixels) at which to switch interpolation algorithm threshold: remember per session A settings title remember per session By default, PhotoQt resets the zoom, rotation, flipping/mirroring and position when switching to a different image. For certain tasks, for example for comparing two images, it can be helpful to keep these properties. By default, PhotoQt resets the zoom, rotation, flipping/mirroring and position when switching to a different image. For certain tasks, for example for comparing two images, it can be helpful to keep these properties. remember zoom, rotation, flip, position remember zoom, rotation, flip, position left mouse button A settings title left mouse button The left button of the mouse is by default used to move the image around. However, this prevents the left mouse button from being used for shortcuts. The left button of the mouse is by default used to move the image around. However, this prevents the left mouse button from being used for shortcuts. use left button to move image use left button to move image looping A settings title for looping through images in folder looping What to do when the end of a folder has been reached: stop or loop back to first image in folder. What to do when the end of a folder has been reached: stop or loop back to first image in folder. loop through images in folder loop through images in folder margin A settings title about the margin around the main image margin How much space to show between the main image and the application border. How much space to show between the main image and the application border. none As in: no margin between the main image and the window edges none pixmap cache A settings title pixmap cache Size of runtime cache for fully loaded images. This cache is cleared when the application quits. Size of runtime cache for fully loaded images. This cache is cleared when the application quits. sort images by A settings title sort images by Sort all images in a folder by the set property. Sort all images in a folder by the set property. natural name A criteria for sorting images natural name name A criteria for sorting images name time A criteria for sorting images time size A criteria for sorting images size type A criteria for sorting images type ascending Sort images in ascending order ascending descending Sort images in descending order descending transparency marker A settings title transparency marker Show checkerboard pattern behind transparent areas of (half-)transparent images. Show checkerboard pattern behind transparent areas of (half-)transparent images. show checkerboard pattern Setting for how to display images that have transparent areas, whether to show checkerboard pattern in that area or not show checkerboard pattern zoom speed A settings title, the zoom here is the zoom of the main image zoom speed Images are zoomed at a relative speed as specified by this percentage. A higher value means faster zoom. Images are zoomed at a relative speed as specified by this percentage. A higher value means faster zoom. super slow This refers to the zoom speed, the zoom here is the zoom of the main image super slow very fast This refers to the zoom speed, the zoom here is the zoom of the main image very fast settingsmanager_interface background A settings title referring to the background of PhotoQt (behind any image/element) background What type of background is to be shown. The background here refers to the area behind the main image and any element in PhotoQt, the very back. What type of background is to be shown. (half-)transparent background How the background of PhotoQt should be (half-)transparent background faked transparency How the background of PhotoQt should be faked transparency custom background image How the background of PhotoQt should be custom background image Click to select an image Tooltip for a mouse area, a click on which opens a file dialog for selecting an image Click to select an image scale to fit If an image is set as background of PhotoQt this is one way it can be handled. scale to fit scale and crop to fit If an image is set as background of PhotoQt this is one way it can be handled. scale and crop to fit stretch to fit If an image is set as background of PhotoQt this is one way it can be handled. stretch to fit center image If an image is set as background of PhotoQt this is one way it can be handled. center image tile image If an image is set as background of PhotoQt this is one way it can be handled. tile image All Images This is a category in a file dialog for selecting images used as in: All images supported by PhotoQt. All Images Video This is a category in a file dialog for selecting images used as in: Video files supported by PhotoQt. Video empty area around image A settings title empty area around image How to handle clicks on empty area around images. How to handle clicks on empty area around images. close on click Used as in: Close PhotoQt on click on empty area around main image close on click Close PhotoQt when click occurred on empty area around image Close PhotoQt when click occurred on empty area around image navigate on click Used as in: Close PhotoQt on click on empty area around main image navigate on click Go to next/previous image if click occurred in left/right half of window Go to next/previous image if click occurred in left/right half of window size of 'hot edge' A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) size of 'hot edge' Adjusts the sensitivity of the edges for showing elements like the metadata and main menu elements. Adjusts the sensitivity of the edges for showing elements like the metadata and main menu elements. small used as in: small area small large used as in: large area large language A settings title. language Change the language of the application. Change the language of the application. mouse wheel sensitivity A settings title. mouse wheel sensitivity How sensitive the mouse wheel is for shortcuts, etc. How sensitive the mouse wheel is for shortcuts, etc. not sensitive The sensitivity here refers to the sensitivity of the mouse wheel not sensitive very sensitive The sensitivity here refers to the sensitivity of the mouse wheel very sensitive overlay color A settings title. overlay color This is the color that is shown on top of any background image/... This is the color that is shown on top of any background image/... click to change color click to change color please choose a color please choose a color pop out elements A settings title. The popping out that is talked about here refers to the possibility of showing any element in its own window (i.e., popped out). pop out elements Here you can choose for most elements whether they are to be shown integrated into the main window or in their own, separate window. Here you can choose for most elements whether they are to be shown integrated into the main window or in their own, separate window. File dialog Used as identifying name for one of the elements in the interface File dialog keep open keep open Settings Manager Used as identifying name for one of the elements in the interface Settings Manager Main Menu Used as identifying name for one of the elements in the interface Main Menu Metadata Used as identifying name for one of the elements in the interface Metadata Histogram Used as identifying name for one of the elements in the interface Histogram Scale Used as identifying name for one of the elements in the interface Scale Slideshow Settings Used as identifying name for one of the elements in the interface Slideshow Settings Slideshow Controls Used as identifying name for one of the elements in the interface Slideshow Controls Rename File Used as identifying name for one of the elements in the interface Rename File Delete File Used as identifying name for one of the elements in the interface Delete File Save File As Used as identifying name for one of the elements in the interface Save File As About Used as identifying name for one of the elements in the interface About Imgur Used as identifying name for one of the elements in the interface Imgur Wallpaper Used as identifying name for one of the elements in the interface Wallpaper Filter Noun, not a verb. Used as identifying name for one of the elements in the interface Filter labels A settings title. labels The labels are shown along the top edge of the main view. The labels are shown along the top edge of the main view. show labels checkbox in settings manager show labels counter refers to the image counter (i.e., image #/# in current folder) counter filepath show filepath in the labels. This is specifically the filePATH and not the filename. filepath filename show filename in the labels. This is specifically the fileNAME and not the filepath. filename current zoom level current zoom level current rotation angle current rotation angle window buttons the window buttons are some window management buttons like: close window, maximize, fullscreen window buttons size of window buttons the size of the window buttons (the buttons shown in the top right corner of the window) size of window buttons remember last image A settings title. remember last image At startup the image loaded at the end of the last session can be automatically reloaded. At startup the image loaded at the end of the last session can be automatically reloaded. re-open last loaded image at startup re-open last loaded image at startup tray icon A settings title. tray icon If a tray icon is to be shown and, if shown, whether to hide it or not. If a tray icon is to be shown and, if shown, whether to hide it or not. no tray icon no tray icon hide to tray icon hide to tray icon show tray icon but don't hide to it show tray icon but don't hide to it window management A settings title. window management Some basic window management properties. Some basic window management properties. manage window through quick info labels manage window through quick info labels save and restore window geometry save and restore window geometry keep above other windows keep above other windows window mode A settings title. window mode Whether to run PhotoQt in window mode or fullscreen. Whether to run PhotoQt in window mode or fullscreen. run in window mode run in window mode show window decoration show window decoration custom main menu entries A settings title. custom main menu entries Add some custom entries in the main menu on the right. Add some custom entries in the main menu on the right. what string to show in main menu this is the placeholder text inside of a text box telling the user what text they can enter here what string to show in main menu which command to execute this is the placeholder text inside of a text box telling the user what text they can enter here which command to execute quit Keep string short! Used on checkbox for contextmenu, refers to option to close PhotoQt after respective command has been executed. quit move entry down contextmenu settings: used as in 'move this entry down in the list of all entries' move entry down move entry up contextmenu settings: used as in 'move this entry up in the list of all entries' move entry up delete entry contextmenu settings: used as in 'delete this entry out of the list of all entries' delete entry quick navigation A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) quick navigation Some buttons to help with quick navigation. These can come in handy when, e.g., operating with a touch screen. Some buttons to help with quick navigation. These can come in handy when, e.g., operating with a touch screen. Show quick navigation buttons Show quick navigation buttons settingsmanager_metadata face tags A settings title. The face tags are labels that can be shown (if available) on faces including their name. face tags Whether to show face tags (stored in metadata info). The face tags are labels that can be shown (if available) on faces including their name. Whether to show face tags (stored in metadata info). enable enable face tags - border A settings title. The face tags are labels that can be shown (if available) on faces including their name. face tags - border If and what style of border to show around tagged faces. If and what style of border to show around tagged faces. show border The border here is the border around face tags. show border click to change color click to change color please choose a color please choose a color face tags - font size A settings title. The face tags are labels that can be shown (if available) on faces including their name. face tags - font size The font size of the name labels. The name labels here are the labels with the name used for the face tags. The font size of the name labels. face tags - visibility A settings title. The face tags are labels that can be shown (if available) on faces including their name. face tags - visibility When to show the face tags and for how long. When to show the face tags and for how long. hybrid mode A mode for showing face tags. hybrid mode always show all A mode for showing face tags. always show all show one on hover A mode for showing face tags. show one on hover show all on hover A mode for showing face tags. show all on hover GPS online map A settings title. GPS online map Which map service to use when a GPS position is clicked. Which map service to use when a GPS position is clicked. hot edge A settings title. The hot edge refers to the area along the left edge of PhotoQt where the mouse cursor triggers the visibility of the metadata element. hot edge Show metadata element when the mouse cursor is close to the window edge Show metadata element when the mouse cursor is close to the window edge meta information A settings title. meta information Which meta information to extract and display. Which meta information to extract and display. file name Part of the meta information about the current image. file name file type Part of the meta information about the current image. file type file size Part of the meta information about the current image. file size image #/# Part of the meta information about the current image. image #/# dimensions Part of the meta information about the current image. dimensions copyright Part of the meta information about the current image. copyright exposure time Part of the meta information about the current image. exposure time flash Part of the meta information about the current image. flash focal length Part of the meta information about the current image. focal length f-number Part of the meta information about the current image. f-number GPS position Part of the meta information about the current image. GPS position keywords Part of the meta information about the current image. keywords light source Part of the meta information about the current image. light source location Part of the meta information about the current image. location make Part of the meta information about the current image. make model Part of the meta information about the current image. model scene type Part of the meta information about the current image. scene type software Part of the meta information about the current image. software time photo was taken Part of the meta information about the current image. time photo was taken opacity A settings title. opacity The opacity of the metadata element. The opacity of the metadata element. auto-rotation A settings title. auto-rotation Automatically rotate images based on metadata information. Automatically rotate images based on metadata information. settingsmanager_shortcuts quit checkbox in shortcuts settings, used as in: quit PhotoQt. Please keep as short as possible! quit Click to change shortcut Click to change shortcut Click to delete shortcut Click to delete shortcut no shortcut set no shortcut set Click to manage shortcut Click to manage shortcut add new Used as in 'add new shortcut'. Please keep short! add new Add New Shortcut Add New Shortcut Perform a mouse gesture here or press any key combo Perform a mouse gesture here or press any key combo Add new Used on button as in 'add new external shortcut'. Please keep short! Add new settingsmanager_thumbnails thumbnail cache A settings title. thumbnail cache Thumbnails can be cached (permanently), following the freedesktop.org standard. Thumbnails can be cached (permanently), following the freedesktop.org standard. enable enable keep in center A settings title. Used as in: Keep thumbnail for current main image in center. keep in center Keep currently active thumbnail in the center of the screen Keep currently active thumbnail in the center of the screen center on active thumbnail center on active thumbnail disable thumbnails disable thumbnails Disable thumbnails in case no thumbnails are desired whatsoever. Disable thumbnails in case no thumbnails are desired whatsoever. disable all thumbnails disable all thumbnails filename label A settings title. The filename label here is the one that is written on thumbnails. filename label Show the filename on a small label on the thumbnail image. Show the filename on a small label on the thumbnail image. font size: font size: filename-only A settings title. This refers to using only the filename as thumbnail and no actual image. filename-only Show only the filename as thumbnail, no actual image. Show only the filename as thumbnail, no actual image. lift up A settings title. This refers to the lift up of thumbnail images when active/hovered. lift up How many pixels to lift up thumbnails when either hovered or active. How many pixels to lift up thumbnails when either hovered or active. position A settings title referring to the position of the thumbnails (upper or lower edge of PhotoQt). position Which edge to show the thumbnails on, upper or lower edge. Which edge to show the thumbnails on, upper or lower edge. upper edge The upper edge of PhotoQt upper edge lower edge The lower edge of PhotoQt lower edge size A settings title referring to the size of the thumbnails. size How large (or small) the thumbnails should be. How large (or small) the thumbnails should be. spacing A settings title referring to the spacing of thumbnails, i.e., how much empty space to have between each. spacing How much space to show between the thumbnails. How much space to show between the thumbnails. threads A settings title, as in: How many threads to use to generate thumbnails. threads How many threads to use to create thumbnails. Too many threads can slow down your computer! How many threads to use to create thumbnails. Too many threads can slow down your computer! Threads: Threads: visibility A settings title referring to the visibility of the thumbnails, i.e., if and when to hide them. visibility If and how to keep thumbnails visible If and how to keep thumbnails visible hide when not needed This is talking about the thumbnails. hide when not needed never hide This is talking about the thumbnails. never hide hide when zoomed in This is talking about the thumbnails. hide when zoomed in exclude folders exclude folders Exclude the specified folders and all of its subfolders from any sort of caching and preloading. Exclude the specified folders and all of its subfolders from any sort of caching and preloading. Do not cache these folders: Do not cache these folders: Add folder Written on a button Add folder One folder per line One folder per line slideshow Click to go to the previous image Click to go to the previous image Click to pause slideshow Click to pause slideshow Click to play slideshow Click to play slideshow Click to go to the next image Click to go to the next image Sound volume: Sound volume: Click to quit slideshow Click to quit slideshow Slideshow settings Window title Slideshow settings interval The interval between images in a slideshow interval animation This is referring to the in/out animation of images during a slideshow animation opacity This is referring to the in/out animation of images during slideshows opacity along x-axis This is referring to the in/out animation of images during slideshows along x-axis along y-axis This is referring to the in/out animation of images during slideshows along y-axis animation speed The speed of transitioning from one image to another during slideshows animation speed immediately, without animation This refers to a speed of transitioning from one image to another during slideshows immediately, without animation pretty fast animation This refers to a speed of transitioning from one image to another during slideshows pretty fast animation not too fast and not too slow This refers to a speed of transitioning from one image to another during slideshows not too fast and not too slow very slow animation This refers to a speed of transitioning from one image to another during slideshows very slow animation current speed This refers to the currently set speed of transitioning from one image to another during slideshows current speed looping looping loop over all files Loop over all images during slideshows loop over all files shuffle during slideshows shuffle the order of all images shuffle shuffle all files during slideshows shuffle the order of all images shuffle all files subfolders also include images in subfolders during slideshows subfolders include images in subfolders also include images in subfolders during slideshows include images in subfolders quickinfo What to do with the quick info during slideshows quickinfo hide quickinfo What to do with the quick info during slideshows hide quickinfo music The music that is to be played during slideshows music enable music Enable music to be played during slideshows enable music no file selected no file selected Click to select music file Click to select music file Click to change music file Click to change music file Common music file formats Common music file formats All Files All Files Start slideshow Written on a clickable button Start slideshow Slideshow controls Window title Slideshow controls startup Edit with %1 Used as in 'Edit with [application]'. %1 will be replaced with application name. Edit with %1 Open in %1 Used as in 'Open with [application]'. %1 will be replaced with application name. Open in %1 streaming Scan for devices Used as tooltip for button that starts a scan for Chromecast streaming devices in the local network Scan for devices Disconnect Written on button, as in 'Disconnect from connected Chromecast streaming device' Disconnect Connect Written on button, as in 'Connect to Chromecast streaming device' Connect searching for devices... status text while searching for chromecast streaming devices in the local network searching for devices... no devices found result of scan for chromecast streaming devices no devices found Streaming (Chromecast) Window title Streaming (Chromecast) thumbnailbar File size: File size: File type: File type: unavailable Sorry, but this feature is not yet available on Windows. Sorry, but this feature is not yet available on Windows. Feature unavailable Window title, informing user that the requested feature is currently not available Feature unavailable wallpaper Warning: %1 module not activated Warning: %1 module not activated Warning: %1 not found Warning: %1 not found Set to which screens As in: Set wallpaper to which screens Set to which screens Screen Used in wallpaper element Screen Set to which workspaces Enlightenment desktop environment handles wallpapers per workspace (different from screen) Set to which workspaces Workspace: Enlightenment desktop environment handles wallpapers per workspace (different from screen) Workspace: Choose picture option picture option refers to how to format a pictrue when setting it as wallpaper Choose picture option Other Used as in: Other Desktop Environment Other Tool: Tool refers to a program that can be executed Tool: Click to choose %1 %1 is a placeholder for the name of a desktop environment (plasma, xfce, gnome, etc.) Click to choose %1 Set as Wallpaper Heading of wallpaper element ---------- Written on clickable button ---------- Window title Set as Wallpaper The image will be set to all screens at the same time. The image will be set to all screens at the same time. photoqt-2.5/lang/photoqt_ca_ES.ts000644 001750 001750 00000667127 14165351632 017462 0ustar00luspiluspi000000 000000 MainMenu Settings This is an entry in the main menu on the right. Please keep short! Settings Slideshow This is an entry in the main menu on the right. Please keep short! Slideshow setup This is an entry in the main menu on the right, used as in: setting up a slideshow. Please keep short! setup quickstart This is an entry in the main menu on the right, used as in: quickstarting a slideshow. Please keep short! quickstart Face tagging mode This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Face tagging mode About PhotoQt This is an entry in the main menu on the right. Please keep short! About PhotoQt Quit This is an entry in the main menu on the right. Please keep short! Quit Filter images in folder This is an entry in the main menu on the right. Please keep short! Filter images in folder Show/Hide metadata This is an entry in the main menu on the right. Please keep short! Show/Hide metadata Scale image This is an entry in the main menu on the right. Please keep short! Scale image Go to This is an entry in the main menu on the right, used as in: Go To some image. Please keep short! Go to previous This is an entry in the main menu on the right, used as in: go to previous image. Please keep short! previous next This is an entry in the main menu on the right, used as in: go to next image. Please keep short! next first This is an entry in the main menu on the right, used as in: go to first image. Please keep short! first last This is an entry in the main menu on the right, used as in: go to last image. Please keep short! last Zoom This is an entry in the context menu, used as in: Zoom image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Zoom image. Please keep short! Zoom reset This is an entry in the context menu, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the context menu, used as in: Reset flip/mirror of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset flip/mirror of image. Please keep short! reset Rotate This is an entry in the context menu, used as in: Rotate image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image. Please keep short! Rotate Click and drag to resize main menu Click and drag to resize main menu Wallpaper This is an entry in the main menu on the right. Please keep short! Wallpaper Open file (browse images) This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Open file (browse images) left This is an entry in the context menu, used as in: Rotate image left. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image left. Please keep short! left right This is an entry in the context menu, used as in: Rotate image right. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image right. Please keep short! right Flip This is an entry in the context menu, used as in: Flip/Mirror image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image. Please keep short! Flip horizontal This is an entry in the context menu, used as in: Flip/Mirror image horizontally. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image horizontally. Please keep short! horizontal vertical This is an entry in the context menu, used as in: Flip/Mirror image vertically. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image vertically. Please keep short! vertical File This is an entry in the context menu, used to refer to the current file (specifically the file, not directly the image). Please keep short! ---------- This is an entry in the main menu on the right, used to refer to the current file (specifically the file, not directly the image). Please keep short! File rename This is an entry in the context menu, used as in: rename file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: rename file. Please keep short! rename copy This is an entry in the context menu, used as in: copy file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: copy file. Please keep short! copy move This is an entry in the context menu, used as in: move file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: move file. Please keep short! move delete This is an entry in the context menu, used as in: delete file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: delete file. Please keep short! delete Streaming (Chromecast) This is an entry in the context menu, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! ---------- This is an entry in the main menu on the right, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! Streaming (Chromecast) Copy to clipboard This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Copy to clipboard Show/Hide histogram This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Show/Hide histogram Open in default file manager This is an entry in the main menu on the right. Please keep short! Open in default file manager Show log/debug messages This is an entry in the main menu on the right. Please keep short! Show log/debug messages Main Menu This is the heading of the main menu element ---------- Window title Main Menu Click here to go to the online manual for help regarding shortcuts, settings, features, ... Click here to go to the online manual for help regarding shortcuts, settings, features, ... PQImageFormats ERROR getting default image formats This is the window title of an error message box ERROR getting default image formats I tried hard, but I just cannot open even a read-only version of the database of default image formats. I tried hard, but I just cannot open even a read-only version of the database of default image formats. Something went terribly wrong somewhere! Something went terribly wrong somewhere! I tried hard, but I just cannot open the database of default image formats. I tried hard, but I just cannot open the database of default image formats. PQMetaData yes This string identifies that flash was fired, stored in image metadata yes no This string identifies that flash was not fired, stored in image metadata no No flash function This string refers to the absense of a flash, stored in image metadata No flash function strobe return light not detected This string refers to a flash mode, stored in image metadata strobe return light not detected strobe return light detected This string refers to a flash mode, stored in image metadata strobe return light detected compulsory flash mode This string refers to a flash mode, stored in image metadata compulsory flash mode auto mode This string refers to a flash mode, stored in image metadata auto mode red-eye reduction mode This string refers to a flash mode, stored in image metadata red-eye reduction mode return light detected This string refers to a flash mode, stored in image metadata return light detected return light not detected This string refers to a flash mode, stored in image metadata return light not detected Invalid flash This string refers to a flash mode, stored in image metadata Invalid flash Standard This string refers to a type of scene, stored in image metadata Standard Landscape This string refers to a type of scene, stored in image metadata Landscape Portrait This string refers to a type of scene, stored in image metadata Portrait Night Scene This string refers to a type of scene, stored in image metadata Night Scene Invalid Scene Type This string refers to a type of scene, stored in image metadata Invalid Scene Type Unknown This string refers to the light source stored in image metadata Unknown Daylight This string refers to the light source stored in image metadata Daylight Fluorescent This string refers to the light source stored in image metadata Fluorescent Tungsten (incandescent light) This string refers to the light source stored in image metadata Tungsten (incandescent light) Flash This string refers to the light source stored in image metadata Flash Fine weather This string refers to the light source stored in image metadata Fine weather Cloudy Weather This string refers to the light source stored in image metadata Cloudy Weather Shade This string refers to the light source stored in image metadata Shade Daylight fluorescent This string refers to the light source stored in image metadata Daylight fluorescent Day white fluorescent This string refers to the light source stored in image metadata Day white fluorescent Cool white fluorescent This string refers to the light source stored in image metadata Cool white fluorescent White fluorescent This string refers to the light source stored in image metadata White fluorescent Standard light This string refers to the light source stored in image metadata Standard light Other light source This string refers to the light source stored in image metadata Other light source Invalid light source This string refers to the light source stored in image metadata Invalid light source PQSettings ERROR getting database with default settings This is the window title of an error message box ERROR getting database with default settings I tried hard, but I just cannot open even a read-only version of the settings database. I tried hard, but I just cannot open even a read-only version of the settings database. Something went terribly wrong somewhere! Something went terribly wrong somewhere! ERROR opening database with default settings ERROR opening database with default settings I tried hard, but I just cannot open the database of default settings. I tried hard, but I just cannot open the database of default settings. PQShortcuts ERROR getting database with default shortcuts This is the window title of an error message box ERROR getting database with default shortcuts I tried hard, but I just cannot open even a read-only version of the shortcuts database. I tried hard, but I just cannot open even a read-only version of the shortcuts database. Something went terribly wrong somewhere! Something went terribly wrong somewhere! ERROR opening database with default settings ERROR opening database with default settings I tried hard, but I just cannot open the database of default shortcuts. I tried hard, but I just cannot open the database of default shortcuts. PQStartup SQLite error This is the window title of an error message box SQLite error You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! TabShortcuts about Close Close Current version: Current version: License: License: Open license Open license Website: Website: Open website Open website Contact: Contact: Send an email Send an email About Window title About buttongeneric Ok This is a generic string written on clickable buttons - please keep short! Ok Cancel This is a generic string written on clickable buttons - please keep short! Cancel Save This is a generic string written on clickable buttons - please keep short! Save Close This is a generic string written on clickable buttons - please keep short! Close commandlineparser Image Viewer Image Viewer Image file to open. Image file to open. Make PhotoQt ask for a new file. Make PhotoQt ask for a new file. Shows PhotoQt from system tray. Shows PhotoQt from system tray. Hides PhotoQt to system tray. Command line option Hides PhotoQt to system tray. Show/Hide PhotoQt. Show/Hide PhotoQt. Enable thumbnails. Command line option Enable thumbnails. Disable thumbnails. Command line option Disable thumbnails. Enable system tray icon. Command line option Enable system tray icon. Disable system tray icon. Command line option Disable system tray icon. Start PhotoQt hidden to the system tray. Command line option Start PhotoQt hidden to the system tray. Open standalone PhotoQt, allows for multiple instances but without remote interaction. Command line option Open standalone PhotoQt, allows for multiple instances but without remote interaction. Simulate a shortcut sequence Command line option Simulate a shortcut sequence Switch on debug messages. Command line option Switch on debug messages. Switch off debug messages. Command line option Switch off debug messages. Export configuration to given filename. Command line option Export configuration to given filename. filename Command line option filename Import configuration from given filename. Command line option Import configuration from given filename. Check the configuration and correct any detected issues. Command line option Check the configuration and correct any detected issues. Reset default configuration. Command line option Reset default configuration. facetagging Who is this? This question is asked in the face tagger to ask for the name of a tagged face Who is this? Enter name Enter name Click to exit face tagging mode Click to exit face tagging mode Click to tag faces, changes are saved automatically Click to tag faces, changes are saved automatically File type does not support face tags. File type does not support face tags. filedialog Backwards Backwards Up a level Up a level Forwards Forwards List subfolders List subfolders Enter fullscreen Enter fullscreen Exit fullscreen Exit fullscreen Close Close Storage devices This is the category title of storage devices to open (like USB keys) in the element for opening files Storage devices Detected storage devices on your system Detected storage devices on your system no supported files/folders found no supported files/folders found Click and drag to favorites Click and drag to favorites # images # images Date: Date: Time: Time: File size: File size: File type: File type: %1 image %1 image %1 images %1 images no folder added to favorites yet 'favorites' here refers to the list of favorite folders a user can set in the file dialog no folder added to favorites yet Favorites This is the category title of user-set folders (or favorites) in the file dialog Favorites Your favorites Your favorites Show entry Show entry Hide entry Hide entry Remove entry Remove entry Hide hidden entries Hide hidden entries Show hidden entries Show hidden entries Load this folder Load this folder Load this file Load this file Add to Favorites Add to Favorites Hide hidden files Hide hidden files Show hidden files Show hidden files Hide thumbnails Hide thumbnails Show thumbnails Show thumbnails Hide preview Hide preview Show preview Show preview Standard This is the category title of user-set folders (or favorites) in the file dialog Standard Some standard locations Some standard locations Zoom: Zoom: Adjust font size of files and folders Adjust font size of files and folders Zoom factor: Zoom factor: Sort by: Sort by: Name Name Natural Name Natural Name Time modified Time modified File size File size File type File type reverse order reverse order Choose by what to sort the files Choose by what to sort the files All supported images All supported images Video files Video files All files All files Choose which selection of files to show Choose which selection of files to show Remember loaded folder between sessions. Remember loaded folder between sessions. Switch between list and icon view Switch between list and icon view Hide standard locations Hide standard locations Show standard locations Show standard locations Hide favorite locations Hide favorite locations Show favorite locations Show favorite locations Hide storage devices Hide storage devices Show storage devices Show storage devices File dialog Window title File dialog filemanagement Delete file? Window title Delete file? An error occured, file could not be deleted! An error occured, file could not be deleted! Move to trash Move to trash Delete permanently Delete permanently Rename file Window title Rename file An error occured, file could not be renamed! An error occured, file could not be renamed! Enter new filename Enter new filename Save file as This is a title, similar to all the 'save as' options in many programs. ---------- Window title Save file as An error occured, file could not be saved! An error occured, file could not be saved! Operation cancelled 'Operation' here is the operation of saving an image in a new format Operation cancelled Filter formats This is a short hint informing the user that here they can 'filter all the possible file formats' Filter formats New filename New filename Choose location and save file Choose location and save file filter Filter images in current directory Filter images in current directory Enter here the terms you want to filter the images by. Separate multiple terms by a space. Enter here the terms you want to filter the images by. Separate multiple terms by a space. If you want to filter by file extension, start the term with a dot. If you want to filter by file extension, start the term with a dot. Enter filter term Enter filter term Filter Written on a clickable button - please keep short ---------- Window title Filter Remove filter Written on a clickable button - please keep short Remove filter histogram Histogram Window title Histogram Loading... As in: Loading the histogram for the current image Loading... Click-and-drag to move. Used for the histogram. The version refers to the type of histogram that is available (colored and greyscale) Click-and-drag to move. Right click to switch version. Right click to switch version. imageprovider File failed to load, it does not exist! File failed to load, it does not exist! imgur Upload to imgur.com Window title Upload to imgur.com anonymous Used as in: Upload image as anonymous user anonymous Obtaining image url... Obtaining image url... This seems to take a long time... This seems to take a long time... There might be a problem with your internet connection or the imgur.com servers. There might be a problem with your internet connection or the imgur.com servers. An Error occurred while uploading image! An Error occurred while uploading image! Error code: Error code: You do not seem to be connected to the internet... You do not seem to be connected to the internet... Unable to upload! Unable to upload! Access Image Access Image Click to open in browser Click to open in browser Copy to clipboard Copy to clipboard Delete Image Delete Image keymouse Alt Refers to a keyboard modifier Alt Ctrl Refers to a keyboard modifier Ctrl Shift Refers to a keyboard modifier Shift Page Up Refers to one of the keys on the keyboard Page Up Page Down Refers to one of the keys on the keyboard Page Down Meta Refers to the key that usually has the Windows symbol on it Meta Keypad Refers to the key that triggers the number block on keyboards Keypad Escape Refers to one of the keys on the keyboard Escape Right Refers to one of the arrow keys on the keyboard Right Left Refers to one of the arrow keys on the keyboard Left Up Refers to one of the arrow keys on the keyboard Up Down Refers to one of the arrow keys on the keyboard Down Space Refers to one of the keys on the keyboard Space Delete Refers to one of the keys on the keyboard Delete Backspace Refers to one of the keys on the keyboard Backspace Home Refers to one of the keys on the keyboard Home End Refers to one of the keys on the keyboard End Insert Refers to one of the keys on the keyboard Insert Tab Refers to one of the keys on the keyboard Tab Return Return refers to the enter key of the number block - please try to make the translations of Return and Enter (the main button) different if possible! Return Enter Enter refers to the main enter key - please try to make the translations of Return (in the number block) and Enter different if possible! Enter Left Button Refers to a mouse button Left Button Right Button Refers to a mouse button Right Button Middle Button Refers to a mouse button Middle Button Wheel Up Refers to the mouse wheel Wheel Up Wheel Down Refers to the mouse wheel Wheel Down East Refers to a direction of the mouse when performing a mouse gesture East South Refers to a direction of the mouse when performing a mouse gesture South West Refers to a direction of the mouse when performing a mouse gesture West North Refers to a direction of the mouse when performing a mouse gesture North logging Logging Window title Logging enable debug messages enable debug messages copy to clipboard copy to clipboard save to file save to file metadata Click and drag to resize meta data Click and drag to resize meta data File name Please keep string short! File name Dimensions The dimensions of the loaded image. Please keep string short! Dimensions Image #/# Used as in "Image 3/16". The numbers (position of image in folder) are added on automatically. Please keep string short! Image #/# File size Please keep string short! File size File type Please keep string short! File type Make Exif image metadata: the make of the camera used to take the photo. Please keep string short! Make Model Exif image metadata: the model of the camera used to take the photo. Please keep string short! Model Software Exif image metadata: the software used to create the photo. Please keep string short! Software Time Photo was Taken Exif image metadata: when the photo was taken. Please keep string short! Time Photo was Taken Exposure Time Exif image metadata: how long the sensor was exposed to the light. Please keep string short! Exposure Time Flash Exif image metadata: the flash setting when the photo was taken. Please keep string short! Flash Scene Type Exif image metadata: the specific scene type the camera used for the photo. Please keep string short! Scene Type Focal Length Exif image metadata: https://en.wikipedia.org/wiki/Focal_length . Please keep string short! Focal Length Metadata This is the heading of the metadata element ---------- Window title Metadata No File Loaded No File Loaded Click to open GPS position with online map Click to open GPS position with online map Keep Open Used as in: Keep the metadata element open even if the cursor leaves it Keep Open Light Source Exif image metadata: What type of light the camera detected. Please keep string short! Light Source Keywords IPTC image metadata: A description of the image by the user/software. Please keep string short! Keywords Location IPTC image metadata: The CITY and COUNTRY the imge was taken in. Please keep string short! Location Copyright IPTC image metadata. Please keep string short! Copyright GPS Position Exif image metadata. Please keep string short! GPS Position F Number Exif image metadata: https://en.wikipedia.org/wiki/F-number . Please keep string short! F Number navigate Click and drag to move Click and drag to move Navigate to previous image in folder Navigate to previous image in folder Navigate to next image in folder Navigate to next image in folder Show main menu Show main menu other Open a file to start Open a file to start Click anywhere to open a file Part of the message shown in the main view before any image is loaded Click anywhere to open a file Move your cursor to: Part of the message shown in the main view before any image is loaded Move your cursor to: RIGHT EDGE for the main menu Part of the message shown in the main view before any image is loaded, first option for where to move cursor to RIGHT EDGE for the main menu LEFT EDGE for the metadata Part of the message shown in the main view before any image is loaded, second option for where to move cursor to LEFT EDGE for the metadata BOTTOM EDGE to show the thumbnails Part of the message shown in the main view before any image is loaded, third option for where to move cursor to BOTTOM EDGE to show the thumbnails (once an image/folder is loaded) Part of the message shown in the main view before any image is loaded (once an image/folder is loaded) No matches found Used as in: No matches found for the currently set filter No matches found PhotoQt Image Viewer The window title of PhotoQt PhotoQt Image Viewer popinpopout Merge into main interface Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface Merge into main interface Move to its own window Tooltip of small button to show an element in its own window (i.e., not merged into main interface) Move to its own window quickinfo Click here to enter fullscreen mode Click here to enter fullscreen mode Click here to exit fullscreen mode Click here to exit fullscreen mode Click here to close PhotoQt Click here to close PhotoQt Page %1 of %2 Used as in: Page 12/34 - please keep as short as possible Page %1 of %2 File %1 of %2 Used as in: File 12/34 - please keep as short as possible File %1 of %2 Connected to: This is followed by the name of the Chromecast streaming device currently connected to Connected to: Copy filename to clipboard Copy filename to clipboard Show counter Show counter Hide counter Hide counter Show file path Show file path Hide file path Hide file path Show file name Show file name Hide file name Hide file name Show zoom level Show zoom level Hide zoom level Hide zoom level Click here to enter viewer mode Click here to enter viewer mode Hide central 'viewer mode' button Hide central 'viewer mode' button Click here to exit viewer mode Click here to exit viewer mode Filter: Filter: Show window buttons Show window buttons Hide window buttons Hide window buttons Some info about the current image and directory Some info about the current image and directory Show central 'viewer mode' button Show central 'viewer mode' button Click to remove filter Click to remove filter scale Scale file Window title Scale file An error occured, file could not be scaled! An error occured, file could not be scaled! This file format cannot (yet) be scaled with PhotoQt! This file format cannot (yet) be scaled with PhotoQt! New width x height: New width x height: Preserve aspect ratio The aspect ratio refers to the ratio of the width to the height of the image, e.g., 16:9 for most movies Preserve aspect ratio Quality: This refers to the quality to be used to scale the image Quality: Scale (create new file) Written on a clickable button Scale (create new file) Scale (change file in place) Written on a clickable button Scale (change file in place) De-/Increase width and height by 10% De-/Increase width and height by 10% In-/Decrease quality by 5% In-/Decrease quality by 5% Select new file Select new file settingsmanager interface settings manager tab title interface Tab to control interface settings Tab to control interface settings image view settings manager tab title image view Tab to control how images are viewed Tab to control how images are viewed thumbnails settings manager tab title thumbnails Tab to control the look and behaviour of thumbnails Tab to control the look and behaviour of thumbnails metadata settings manager tab title metadata Tab to control metadata settings Tab to control metadata settings file types settings manager tab title file types Tab to control which file types PhotoQt should recognize Tab to control which file types PhotoQt should recognize shortcuts settings manager tab title shortcuts Tab to control which shortcuts are set Tab to control which shortcuts are set advanced Written on button in setting manager. A click on this button opens a menu with some advanced actions. advanced restore defaults restore defaults import settings import settings export settings export settings disable expert mode disable expert mode enable expert mode enable expert mode Import of %1. This will replace your current settings with the ones stored in the backup. Import of %1. This will replace your current settings with the ones stored in the backup. Do you want to continue? Do you want to continue? Save changes and exit Save changes and exit Exit and discard changes Exit and discard changes Rename File Name of shortcut action Rename File Delete File Name of shortcut action Delete File Filetype settings Filetype settings These settings govern which file types PhotoQt should recognize and open. These settings govern which file types PhotoQt should recognize and open. Not all file types might be available, depending on your setup and what library support was enabled at compile time Not all file types might be available, depending on your setup and what library support was enabled at compile time Image view settings Image view settings These settings affect the viewing of images, how they are shown, in what order, how large a cache to use, etc. These settings affect the viewing of images, how they are shown, in what order, how large a cache to use, etc. Some settings are only shown in expert mode. Some settings are only shown in expert mode. Interface settings Interface settings These settings affect the interface in general, how the application looks like and behaves. This includes the background, some of the labels in the main view, which elements are to be shown in their own window, and others. These settings affect the interface in general, how the application looks like and behaves. This includes the background, some of the labels in the main view, which elements are to be shown in their own window, and others. Metadata settings Metadata settings These settings affect the metadata element, what information it should show and some of its behavior. These settings affect the metadata element, what information it should show and some of its behavior. Shortcuts Shortcuts Navigation A shortcuts category: navigation Navigation Filter images in folder Name of shortcut action Filter images in folder Next image Name of shortcut action Next image Previous image Name of shortcut action Previous image Go to first image Name of shortcut action Name of shortcut action Go to first image Go to last image Name of shortcut action Go to last image Enter viewer mode Name of shortcut action Enter viewer mode Show quick navigation buttons Name of shortcut action Show quick navigation buttons Close window (hides to system tray if enabled) Name of shortcut action Close window (hides to system tray if enabled) Quit PhotoQt Name of shortcut action Quit PhotoQt Image A shortcuts category: image manipulation Image Zoom In Name of shortcut action Zoom In Zoom Out Name of shortcut action Zoom Out Zoom to Actual Size Name of shortcut action Zoom to Actual Size Reset Zoom Name of shortcut action Reset Zoom Rotate Right Name of shortcut action Rotate Right Rotate Left Name of shortcut action Rotate Left Reset Rotation Name of shortcut action Reset Rotation Flip Horizontally Name of shortcut action Flip Horizontally Flip Vertically Name of shortcut action Flip Vertically Scale Image Name of shortcut action Scale Image Play/Pause animation/video Name of shortcut action Play/Pause animation/video Hide/Show face tags (stored in metadata) Name of shortcut action Hide/Show face tags (stored in metadata) Tag faces (stored in metadata) Name of shortcut action Tag faces (stored in metadata) File A shortcuts category: file management File Delete File (without confirmation) Name of shortcut action Delete File (without confirmation) Copy File to a New Location Name of shortcut action Copy File to a New Location Move File to a New Location Name of shortcut action Move File to a New Location Copy Image to Clipboard Name of shortcut action Copy Image to Clipboard Other A shortcuts category: other functions Other Hide/Show main menu Name of shortcut action Hide/Show main menu Hide/Show metadata Name of shortcut action Hide/Show metadata Keep metadata opened Name of shortcut action Keep metadata opened Hide/Show thumbnails Name of shortcut action Hide/Show thumbnails Show Settings Name of shortcut action Show Settings Start Slideshow Name of shortcut action Start Slideshow Start Slideshow (Quickstart) Name of shortcut action Start Slideshow (Quickstart) About PhotoQt Name of shortcut action About PhotoQt Set as Wallpaper Name of shortcut action Set as Wallpaper Show Histogram Name of shortcut action Show Histogram Upload to imgur.com (anonymously) Name of shortcut action Upload to imgur.com (anonymously) Upload to imgur.com user account Name of shortcut action Upload to imgur.com user account Stream content to Chromecast device Name of shortcut action Stream content to Chromecast device Show log/debug messages Name of shortcut action Show log/debug messages External A shortcuts category: external shortcuts External %f = filename including path, %u = filename without path, %d = directory containing file Please leave the three placeholders (%f, %u, %d) as is. %f = filename including path, %u = filename without path, %d = directory containing file Thumbnails settings Thumbnails settings These settings affect the thumbnails shown, by default, along the bottom edge of the screen. This includes their look, behavior, and the user's interaction with them. These settings affect the thumbnails shown, by default, along the bottom edge of the screen. This includes their look, behavior, and the user's interaction with them. Settings Manager Window title Settings Manager Here the shortcuts can be managed. Below you can add a new shortcut for any one of the available actions, both key combinations and mouse gestures are supported. Here the shortcuts can be managed. Below you can add a new shortcut for any one of the available actions, both key combinations and mouse gestures are supported. You can also set the same shortcut for multiple actions or multiple times for the same action. All actions for a shortcut will be executed sequentially, allowing a lot more flexibility in using PhotoQt. You can also set the same shortcut for multiple actions or multiple times for the same action. All actions for a shortcut will be executed sequentially, allowing a lot more flexibility in using PhotoQt. Open file (browse images) Name of shortcut action Open file (browse images) Save image in another format Name of shortcut action Save image in another format Restore defaults As in 'restore the default settings and/or file formats and/or shortcuts'. Please keep short! Restore defaults Here you can restore the default configuration of PhotoQt. You can choose to restore any combination of the following three categories. Here you can restore the default configuration of PhotoQt. You can choose to restore any combination of the following three categories. Restore default settings Restore default settings Restore default file formats Restore default file formats Restore default shortcuts Restore default shortcuts settingsmanager_filetypes These are some additional settings for opening archives. These are some additional settings for opening archives. use external tool: unrar used as label for checkbox use external tool: unrar These are some additional settings for showing PDFs. These are some additional settings for showing PDFs. Quality: the quality setting to be used when loading PDFs Quality: These are some additional settings for playing videos. These are some additional settings for playing videos. Autoplay Used as setting for video files (i.e., autoplay videos) Autoplay Loop Used as setting for video files (i.e., loop videos) Loop Select tool for creating video thumbnails Tooltip shown for combobox for selectiong video thumbnailer Select tool for creating video thumbnails images This is a category of files PhotoQt can recognize: any image format images compressed files This is a category of files PhotoQt can recognize: compressed files like zip, tar, cbr, 7z, etc. compressed files documents This is a category of files PhotoQt can recognize: documents like pdf, txt, etc. documents videos This is a type of category of files PhotoQt can recognize: videos like mp4, avi, etc. videos Enable As in: "Enable all formats in the seleted category of file types" Enable Disable As in: "Disable all formats in the seleted category of file types" Disable Enable everything As in "Enable every single file format PhotoQt can open in any category" Enable everything Currently there are %1 file formats enabled The %1 will be replaced with the number of file formats, please don't forget to add it. Currently there are %1 file formats enabled Search by description or file ending Search by description or file ending Search by image library or category Search by image library or category File endings: File endings: settingsmanager_imageview animation A settings title referring to the in/out animation of images animation What type of animation to show, and how fast. This is referring to the in/out animation of images What type of animation to show, and how fast. type of animation This is referring to the in/out animation of images type of animation opacity This is referring to the in/out animation of images opacity along x-axis This is referring to the in/out animation of images along x-axis along y-axis This is referring to the in/out animation of images along y-axis no animation This is referring to the in/out animation of images no animation long animation This is referring to the in/out animation of images long animation fit in window A settings title referring to whether to fit images in window fit in window Zoom smaller images to fill the full window width and/or height. Zoom smaller images to fill the full window width and/or height. fit smaller images in window fit smaller images in window interpolation A settings title referring to the type of interpolation to use for small images interpolation PhotoQt tries to improve the rendering of images that are shown much larger than they are (i.e., zoomed in a lot). For very tiny images that are zoomed in quite a lot, this can result in the loss of too much information in the image. Thus a threshold can be defined here, images that are smaller than this threshold are shown exactly as they are without any smoothing or other attempts to improve them. PhotoQt tries to improve the rendering of images that are shown much larger than they are (i.e., zoomed in a lot). For very tiny images that are zoomed in quite a lot, this can result in the loss of too much information in the image. Thus a threshold can be defined here, images that are smaller than this threshold are shown exactly as they are without any smoothing or other attempts to improve them. Do not use any interpolation algorithm for very small images A type of interpolation to use for small images Do not use any interpolation algorithm for very small images threshold: The threshold (in pixels) at which to switch interpolation algorithm threshold: remember per session A settings title remember per session By default, PhotoQt resets the zoom, rotation, flipping/mirroring and position when switching to a different image. For certain tasks, for example for comparing two images, it can be helpful to keep these properties. By default, PhotoQt resets the zoom, rotation, flipping/mirroring and position when switching to a different image. For certain tasks, for example for comparing two images, it can be helpful to keep these properties. remember zoom, rotation, flip, position remember zoom, rotation, flip, position left mouse button A settings title left mouse button The left button of the mouse is by default used to move the image around. However, this prevents the left mouse button from being used for shortcuts. The left button of the mouse is by default used to move the image around. However, this prevents the left mouse button from being used for shortcuts. use left button to move image use left button to move image looping A settings title for looping through images in folder looping What to do when the end of a folder has been reached: stop or loop back to first image in folder. What to do when the end of a folder has been reached: stop or loop back to first image in folder. loop through images in folder loop through images in folder margin A settings title about the margin around the main image margin How much space to show between the main image and the application border. How much space to show between the main image and the application border. none As in: no margin between the main image and the window edges none pixmap cache A settings title pixmap cache Size of runtime cache for fully loaded images. This cache is cleared when the application quits. Size of runtime cache for fully loaded images. This cache is cleared when the application quits. sort images by A settings title sort images by Sort all images in a folder by the set property. Sort all images in a folder by the set property. natural name A criteria for sorting images natural name name A criteria for sorting images name time A criteria for sorting images time size A criteria for sorting images size type A criteria for sorting images type ascending Sort images in ascending order ascending descending Sort images in descending order descending transparency marker A settings title transparency marker Show checkerboard pattern behind transparent areas of (half-)transparent images. Show checkerboard pattern behind transparent areas of (half-)transparent images. show checkerboard pattern Setting for how to display images that have transparent areas, whether to show checkerboard pattern in that area or not show checkerboard pattern zoom speed A settings title, the zoom here is the zoom of the main image zoom speed Images are zoomed at a relative speed as specified by this percentage. A higher value means faster zoom. Images are zoomed at a relative speed as specified by this percentage. A higher value means faster zoom. super slow This refers to the zoom speed, the zoom here is the zoom of the main image super slow very fast This refers to the zoom speed, the zoom here is the zoom of the main image very fast settingsmanager_interface background A settings title referring to the background of PhotoQt (behind any image/element) background What type of background is to be shown. The background here refers to the area behind the main image and any element in PhotoQt, the very back. What type of background is to be shown. (half-)transparent background How the background of PhotoQt should be (half-)transparent background faked transparency How the background of PhotoQt should be faked transparency custom background image How the background of PhotoQt should be custom background image Click to select an image Tooltip for a mouse area, a click on which opens a file dialog for selecting an image Click to select an image scale to fit If an image is set as background of PhotoQt this is one way it can be handled. scale to fit scale and crop to fit If an image is set as background of PhotoQt this is one way it can be handled. scale and crop to fit stretch to fit If an image is set as background of PhotoQt this is one way it can be handled. stretch to fit center image If an image is set as background of PhotoQt this is one way it can be handled. center image tile image If an image is set as background of PhotoQt this is one way it can be handled. tile image All Images This is a category in a file dialog for selecting images used as in: All images supported by PhotoQt. All Images Video This is a category in a file dialog for selecting images used as in: Video files supported by PhotoQt. Video empty area around image A settings title empty area around image How to handle clicks on empty area around images. How to handle clicks on empty area around images. close on click Used as in: Close PhotoQt on click on empty area around main image close on click Close PhotoQt when click occurred on empty area around image Close PhotoQt when click occurred on empty area around image navigate on click Used as in: Close PhotoQt on click on empty area around main image navigate on click Go to next/previous image if click occurred in left/right half of window Go to next/previous image if click occurred in left/right half of window size of 'hot edge' A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) size of 'hot edge' Adjusts the sensitivity of the edges for showing elements like the metadata and main menu elements. Adjusts the sensitivity of the edges for showing elements like the metadata and main menu elements. small used as in: small area small large used as in: large area large language A settings title. language Change the language of the application. Change the language of the application. mouse wheel sensitivity A settings title. mouse wheel sensitivity How sensitive the mouse wheel is for shortcuts, etc. How sensitive the mouse wheel is for shortcuts, etc. not sensitive The sensitivity here refers to the sensitivity of the mouse wheel not sensitive very sensitive The sensitivity here refers to the sensitivity of the mouse wheel very sensitive overlay color A settings title. overlay color This is the color that is shown on top of any background image/... This is the color that is shown on top of any background image/... click to change color click to change color please choose a color please choose a color pop out elements A settings title. The popping out that is talked about here refers to the possibility of showing any element in its own window (i.e., popped out). pop out elements Here you can choose for most elements whether they are to be shown integrated into the main window or in their own, separate window. Here you can choose for most elements whether they are to be shown integrated into the main window or in their own, separate window. File dialog Used as identifying name for one of the elements in the interface File dialog keep open keep open Settings Manager Used as identifying name for one of the elements in the interface Settings Manager Main Menu Used as identifying name for one of the elements in the interface Main Menu Metadata Used as identifying name for one of the elements in the interface Metadata Histogram Used as identifying name for one of the elements in the interface Histogram Scale Used as identifying name for one of the elements in the interface Scale Slideshow Settings Used as identifying name for one of the elements in the interface Slideshow Settings Slideshow Controls Used as identifying name for one of the elements in the interface Slideshow Controls Rename File Used as identifying name for one of the elements in the interface Rename File Delete File Used as identifying name for one of the elements in the interface Delete File Save File As Used as identifying name for one of the elements in the interface Save File As About Used as identifying name for one of the elements in the interface About Imgur Used as identifying name for one of the elements in the interface Imgur Wallpaper Used as identifying name for one of the elements in the interface Wallpaper Filter Noun, not a verb. Used as identifying name for one of the elements in the interface Filter labels A settings title. labels The labels are shown along the top edge of the main view. The labels are shown along the top edge of the main view. show labels checkbox in settings manager show labels counter refers to the image counter (i.e., image #/# in current folder) counter filepath show filepath in the labels. This is specifically the filePATH and not the filename. filepath filename show filename in the labels. This is specifically the fileNAME and not the filepath. filename current zoom level current zoom level current rotation angle current rotation angle window buttons the window buttons are some window management buttons like: close window, maximize, fullscreen window buttons size of window buttons the size of the window buttons (the buttons shown in the top right corner of the window) size of window buttons remember last image A settings title. remember last image At startup the image loaded at the end of the last session can be automatically reloaded. At startup the image loaded at the end of the last session can be automatically reloaded. re-open last loaded image at startup re-open last loaded image at startup tray icon A settings title. tray icon If a tray icon is to be shown and, if shown, whether to hide it or not. If a tray icon is to be shown and, if shown, whether to hide it or not. no tray icon no tray icon hide to tray icon hide to tray icon show tray icon but don't hide to it show tray icon but don't hide to it window management A settings title. window management Some basic window management properties. Some basic window management properties. manage window through quick info labels manage window through quick info labels save and restore window geometry save and restore window geometry keep above other windows keep above other windows window mode A settings title. window mode Whether to run PhotoQt in window mode or fullscreen. Whether to run PhotoQt in window mode or fullscreen. run in window mode run in window mode show window decoration show window decoration custom main menu entries A settings title. custom main menu entries Add some custom entries in the main menu on the right. Add some custom entries in the main menu on the right. what string to show in main menu this is the placeholder text inside of a text box telling the user what text they can enter here what string to show in main menu which command to execute this is the placeholder text inside of a text box telling the user what text they can enter here which command to execute quit Keep string short! Used on checkbox for contextmenu, refers to option to close PhotoQt after respective command has been executed. quit move entry down contextmenu settings: used as in 'move this entry down in the list of all entries' move entry down move entry up contextmenu settings: used as in 'move this entry up in the list of all entries' move entry up delete entry contextmenu settings: used as in 'delete this entry out of the list of all entries' delete entry quick navigation A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) quick navigation Some buttons to help with quick navigation. These can come in handy when, e.g., operating with a touch screen. Some buttons to help with quick navigation. These can come in handy when, e.g., operating with a touch screen. Show quick navigation buttons Show quick navigation buttons settingsmanager_metadata face tags A settings title. The face tags are labels that can be shown (if available) on faces including their name. face tags Whether to show face tags (stored in metadata info). The face tags are labels that can be shown (if available) on faces including their name. Whether to show face tags (stored in metadata info). enable enable face tags - border A settings title. The face tags are labels that can be shown (if available) on faces including their name. face tags - border If and what style of border to show around tagged faces. If and what style of border to show around tagged faces. show border The border here is the border around face tags. show border click to change color click to change color please choose a color please choose a color face tags - font size A settings title. The face tags are labels that can be shown (if available) on faces including their name. face tags - font size The font size of the name labels. The name labels here are the labels with the name used for the face tags. The font size of the name labels. face tags - visibility A settings title. The face tags are labels that can be shown (if available) on faces including their name. face tags - visibility When to show the face tags and for how long. When to show the face tags and for how long. hybrid mode A mode for showing face tags. hybrid mode always show all A mode for showing face tags. always show all show one on hover A mode for showing face tags. show one on hover show all on hover A mode for showing face tags. show all on hover GPS online map A settings title. GPS online map Which map service to use when a GPS position is clicked. Which map service to use when a GPS position is clicked. hot edge A settings title. The hot edge refers to the area along the left edge of PhotoQt where the mouse cursor triggers the visibility of the metadata element. hot edge Show metadata element when the mouse cursor is close to the window edge Show metadata element when the mouse cursor is close to the window edge meta information A settings title. meta information Which meta information to extract and display. Which meta information to extract and display. file name Part of the meta information about the current image. file name file type Part of the meta information about the current image. file type file size Part of the meta information about the current image. file size image #/# Part of the meta information about the current image. image #/# dimensions Part of the meta information about the current image. dimensions copyright Part of the meta information about the current image. copyright exposure time Part of the meta information about the current image. exposure time flash Part of the meta information about the current image. flash focal length Part of the meta information about the current image. focal length f-number Part of the meta information about the current image. f-number GPS position Part of the meta information about the current image. GPS position keywords Part of the meta information about the current image. keywords light source Part of the meta information about the current image. light source location Part of the meta information about the current image. location make Part of the meta information about the current image. make model Part of the meta information about the current image. model scene type Part of the meta information about the current image. scene type software Part of the meta information about the current image. software time photo was taken Part of the meta information about the current image. time photo was taken opacity A settings title. opacity The opacity of the metadata element. The opacity of the metadata element. auto-rotation A settings title. auto-rotation Automatically rotate images based on metadata information. Automatically rotate images based on metadata information. settingsmanager_shortcuts quit checkbox in shortcuts settings, used as in: quit PhotoQt. Please keep as short as possible! quit Click to change shortcut Click to change shortcut Click to delete shortcut Click to delete shortcut no shortcut set no shortcut set Click to manage shortcut Click to manage shortcut add new Used as in 'add new shortcut'. Please keep short! add new Add New Shortcut Add New Shortcut Perform a mouse gesture here or press any key combo Perform a mouse gesture here or press any key combo Add new Used on button as in 'add new external shortcut'. Please keep short! Add new settingsmanager_thumbnails thumbnail cache A settings title. thumbnail cache Thumbnails can be cached (permanently), following the freedesktop.org standard. Thumbnails can be cached (permanently), following the freedesktop.org standard. enable enable keep in center A settings title. Used as in: Keep thumbnail for current main image in center. keep in center Keep currently active thumbnail in the center of the screen Keep currently active thumbnail in the center of the screen center on active thumbnail center on active thumbnail disable thumbnails disable thumbnails Disable thumbnails in case no thumbnails are desired whatsoever. Disable thumbnails in case no thumbnails are desired whatsoever. disable all thumbnails disable all thumbnails filename label A settings title. The filename label here is the one that is written on thumbnails. filename label Show the filename on a small label on the thumbnail image. Show the filename on a small label on the thumbnail image. font size: font size: filename-only A settings title. This refers to using only the filename as thumbnail and no actual image. filename-only Show only the filename as thumbnail, no actual image. Show only the filename as thumbnail, no actual image. lift up A settings title. This refers to the lift up of thumbnail images when active/hovered. lift up How many pixels to lift up thumbnails when either hovered or active. How many pixels to lift up thumbnails when either hovered or active. position A settings title referring to the position of the thumbnails (upper or lower edge of PhotoQt). position Which edge to show the thumbnails on, upper or lower edge. Which edge to show the thumbnails on, upper or lower edge. upper edge The upper edge of PhotoQt upper edge lower edge The lower edge of PhotoQt lower edge size A settings title referring to the size of the thumbnails. size How large (or small) the thumbnails should be. How large (or small) the thumbnails should be. spacing A settings title referring to the spacing of thumbnails, i.e., how much empty space to have between each. spacing How much space to show between the thumbnails. How much space to show between the thumbnails. threads A settings title, as in: How many threads to use to generate thumbnails. threads How many threads to use to create thumbnails. Too many threads can slow down your computer! How many threads to use to create thumbnails. Too many threads can slow down your computer! Threads: Threads: visibility A settings title referring to the visibility of the thumbnails, i.e., if and when to hide them. visibility If and how to keep thumbnails visible If and how to keep thumbnails visible hide when not needed This is talking about the thumbnails. hide when not needed never hide This is talking about the thumbnails. never hide hide when zoomed in This is talking about the thumbnails. hide when zoomed in exclude folders exclude folders Exclude the specified folders and all of its subfolders from any sort of caching and preloading. Exclude the specified folders and all of its subfolders from any sort of caching and preloading. Do not cache these folders: Do not cache these folders: Add folder Written on a button Add folder One folder per line One folder per line slideshow Click to go to the previous image Click to go to the previous image Click to pause slideshow Click to pause slideshow Click to play slideshow Click to play slideshow Click to go to the next image Click to go to the next image Sound volume: Sound volume: Click to quit slideshow Click to quit slideshow Slideshow settings Window title Slideshow settings interval The interval between images in a slideshow interval animation This is referring to the in/out animation of images during a slideshow animation opacity This is referring to the in/out animation of images during slideshows opacity along x-axis This is referring to the in/out animation of images during slideshows along x-axis along y-axis This is referring to the in/out animation of images during slideshows along y-axis animation speed The speed of transitioning from one image to another during slideshows animation speed immediately, without animation This refers to a speed of transitioning from one image to another during slideshows immediately, without animation pretty fast animation This refers to a speed of transitioning from one image to another during slideshows pretty fast animation not too fast and not too slow This refers to a speed of transitioning from one image to another during slideshows not too fast and not too slow very slow animation This refers to a speed of transitioning from one image to another during slideshows very slow animation current speed This refers to the currently set speed of transitioning from one image to another during slideshows current speed looping looping loop over all files Loop over all images during slideshows loop over all files shuffle during slideshows shuffle the order of all images shuffle shuffle all files during slideshows shuffle the order of all images shuffle all files subfolders also include images in subfolders during slideshows subfolders include images in subfolders also include images in subfolders during slideshows include images in subfolders quickinfo What to do with the quick info during slideshows quickinfo hide quickinfo What to do with the quick info during slideshows hide quickinfo music The music that is to be played during slideshows music enable music Enable music to be played during slideshows enable music no file selected no file selected Click to select music file Click to select music file Click to change music file Click to change music file Common music file formats Common music file formats All Files All Files Start slideshow Written on a clickable button Start slideshow Slideshow controls Window title Slideshow controls startup Edit with %1 Used as in 'Edit with [application]'. %1 will be replaced with application name. Edit with %1 Open in %1 Used as in 'Open with [application]'. %1 will be replaced with application name. Open in %1 streaming Scan for devices Used as tooltip for button that starts a scan for Chromecast streaming devices in the local network Scan for devices Disconnect Written on button, as in 'Disconnect from connected Chromecast streaming device' Disconnect Connect Written on button, as in 'Connect to Chromecast streaming device' Connect searching for devices... status text while searching for chromecast streaming devices in the local network searching for devices... no devices found result of scan for chromecast streaming devices no devices found Streaming (Chromecast) Window title Streaming (Chromecast) thumbnailbar File size: File size: File type: File type: unavailable Sorry, but this feature is not yet available on Windows. Sorry, but this feature is not yet available on Windows. Feature unavailable Window title, informing user that the requested feature is currently not available Feature unavailable wallpaper Warning: %1 module not activated Warning: %1 module not activated Warning: %1 not found Warning: %1 not found Set to which screens As in: Set wallpaper to which screens Set to which screens Screen Used in wallpaper element Screen Set to which workspaces Enlightenment desktop environment handles wallpapers per workspace (different from screen) Set to which workspaces Workspace: Enlightenment desktop environment handles wallpapers per workspace (different from screen) Workspace: Choose picture option picture option refers to how to format a pictrue when setting it as wallpaper Choose picture option Other Used as in: Other Desktop Environment Other Tool: Tool refers to a program that can be executed Tool: Click to choose %1 %1 is a placeholder for the name of a desktop environment (plasma, xfce, gnome, etc.) Click to choose %1 Set as Wallpaper Heading of wallpaper element ---------- Written on clickable button ---------- Window title Set as Wallpaper The image will be set to all screens at the same time. The image will be set to all screens at the same time. photoqt-2.5/lang/photoqt_es_ES.ts000644 001750 001750 00000650566 14165351632 017505 0ustar00luspiluspi000000 000000 MainMenu Settings This is an entry in the main menu on the right. Please keep short! Preferencias Slideshow This is an entry in the main menu on the right. Please keep short! Diapositiva setup This is an entry in the main menu on the right, used as in: setting up a slideshow. Please keep short! Configurar quickstart This is an entry in the main menu on the right, used as in: quickstarting a slideshow. Please keep short! Inicio rápido Face tagging mode This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Modo de etiquetado facial About PhotoQt This is an entry in the main menu on the right. Please keep short! Acerca de PhotoQt Quit This is an entry in the main menu on the right. Please keep short! Salir Filter images in folder This is an entry in the main menu on the right. Please keep short! Filtrar imágenes en la carpeta Show/Hide metadata This is an entry in the main menu on the right. Please keep short! Mostrar/Ocultar metadatos Scale image This is an entry in the main menu on the right. Please keep short! Escalar imagen Go to This is an entry in the main menu on the right, used as in: Go To some image. Please keep short! Ir a previous This is an entry in the main menu on the right, used as in: go to previous image. Please keep short! anterior next This is an entry in the main menu on the right, used as in: go to next image. Please keep short! siguiente first This is an entry in the main menu on the right, used as in: go to first image. Please keep short! primero last This is an entry in the main menu on the right, used as in: go to last image. Please keep short! último Zoom This is an entry in the context menu, used as in: Zoom image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Zoom image. Please keep short! Aumentar/Disminuir reset This is an entry in the context menu, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the context menu, used as in: Reset flip/mirror of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset rotation of image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Reset flip/mirror of image. Please keep short! Reestablecer Rotate This is an entry in the context menu, used as in: Rotate image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image. Please keep short! Girar Click and drag to resize main menu Haga clic y arrastre para redimensionar el menú principal Wallpaper This is an entry in the main menu on the right. Please keep short! Fondo de pantalla Open file (browse images) This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Abrir archivo (navegar imágenes) left This is an entry in the context menu, used as in: Rotate image left. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image left. Please keep short! izquierda right This is an entry in the context menu, used as in: Rotate image right. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Rotate image right. Please keep short! derecha Flip This is an entry in the context menu, used as in: Flip/Mirror image. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image. Please keep short! Voltear horizontal This is an entry in the context menu, used as in: Flip/Mirror image horizontally. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image horizontally. Please keep short! Horizontal vertical This is an entry in the context menu, used as in: Flip/Mirror image vertically. Please keep short! ---------- This is an entry in the main menu on the right, used as in: Flip/Mirror image vertically. Please keep short! vertical File This is an entry in the context menu, used to refer to the current file (specifically the file, not directly the image). Please keep short! ---------- This is an entry in the main menu on the right, used to refer to the current file (specifically the file, not directly the image). Please keep short! Archivo rename This is an entry in the context menu, used as in: rename file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: rename file. Please keep short! renombrar copy This is an entry in the context menu, used as in: copy file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: copy file. Please keep short! copiar move This is an entry in the context menu, used as in: move file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: move file. Please keep short! mover delete This is an entry in the context menu, used as in: delete file. Please keep short! ---------- This is an entry in the main menu on the right, used as in: delete file. Please keep short! Eliminar Streaming (Chromecast) This is an entry in the context menu, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! ---------- This is an entry in the main menu on the right, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! Transmitiendo (Chromecast) Copy to clipboard This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Copiar al portapapeles Show/Hide histogram This is an entry in the context menu. Please keep short! ---------- This is an entry in the main menu on the right. Please keep short! Mostrar/Ocultar histograma Open in default file manager This is an entry in the main menu on the right. Please keep short! Abrir en el gestor de archivos predeterminado Show log/debug messages This is an entry in the main menu on the right. Please keep short! Mostrar mensajes de bitácora/depuración Main Menu This is the heading of the main menu element ---------- Window title Menú principal Click here to go to the online manual for help regarding shortcuts, settings, features, ... Haga clic aquí para ir al manual en línea para obtener ayuda acerca de los atajos, ajustes, características, ... PQImageFormats ERROR getting default image formats This is the window title of an error message box ERROR intentando obtener los formatos de imagen por omisión I tried hard, but I just cannot open even a read-only version of the database of default image formats. Lo intenté mucho, pero simplemente no puedo abrir ni siquiera una versión de solo lectura de la base de datos de los formatos de imagen predeterminados. Something went terribly wrong somewhere! ¡Algo salió terriblemente mal en algún lugar! I tried hard, but I just cannot open the database of default image formats. Lo intenté mucho, pero simplemente no puedo abrir la base de datos de los formatos de imagen predeterminados. PQMetaData yes This string identifies that flash was fired, stored in image metadata no This string identifies that flash was not fired, stored in image metadata no No flash function This string refers to the absense of a flash, stored in image metadata No hay función de flash strobe return light not detected This string refers to a flash mode, stored in image metadata El estroboscopio indicó que no se detectó luz strobe return light detected This string refers to a flash mode, stored in image metadata El estroboscopio detectó luz compulsory flash mode This string refers to a flash mode, stored in image metadata modo de flash obligatorio auto mode This string refers to a flash mode, stored in image metadata Automático red-eye reduction mode This string refers to a flash mode, stored in image metadata modo de reducción de ojos rojos return light detected This string refers to a flash mode, stored in image metadata luz de retorno detectada return light not detected This string refers to a flash mode, stored in image metadata luz de retorno no detectada Invalid flash This string refers to a flash mode, stored in image metadata Flash no válido Standard This string refers to a type of scene, stored in image metadata Estándar Landscape This string refers to a type of scene, stored in image metadata Horizontal Portrait This string refers to a type of scene, stored in image metadata Vertical Night Scene This string refers to a type of scene, stored in image metadata Escena nocturna Invalid Scene Type This string refers to a type of scene, stored in image metadata Tipo de escena no válido Unknown This string refers to the light source stored in image metadata Desconocido Daylight This string refers to the light source stored in image metadata Luz natural Fluorescent This string refers to the light source stored in image metadata Fluorescente Tungsten (incandescent light) This string refers to the light source stored in image metadata Tungsteno (luz incandescente) Flash This string refers to the light source stored in image metadata Flash Fine weather This string refers to the light source stored in image metadata Buen clima Cloudy Weather This string refers to the light source stored in image metadata Clima nublado Shade This string refers to the light source stored in image metadata Sombreado Daylight fluorescent This string refers to the light source stored in image metadata Fluorescente de día Day white fluorescent This string refers to the light source stored in image metadata Fluorescente blanca de día Cool white fluorescent This string refers to the light source stored in image metadata Fluorescente blanca fría White fluorescent This string refers to the light source stored in image metadata Fluorescente blanca Standard light This string refers to the light source stored in image metadata Luz estándar Other light source This string refers to the light source stored in image metadata Otra fuente de luz Invalid light source This string refers to the light source stored in image metadata Fuente de luz no válida PQSettings ERROR getting database with default settings This is the window title of an error message box ERROR al obtener la base de datos con las preferencias predeterminadas I tried hard, but I just cannot open even a read-only version of the settings database. Lo intenté mucho, pero simplemente no puedo abrir ni siquiera una versión de solo lectura de la base de datos de preferencias. Something went terribly wrong somewhere! ¡Algo fue terriblemente mal en algún lado! ERROR opening database with default settings ERROR al abrir la base de datos con las preferencias predeterminadas I tried hard, but I just cannot open the database of default settings. Lo intenté mucho, pero simplemente no puedo abrir la base de datos de preferencias predeterminadas. PQShortcuts ERROR getting database with default shortcuts This is the window title of an error message box ERROR al obtener la base de datos con los atajos predeterminados I tried hard, but I just cannot open even a read-only version of the shortcuts database. Lo intenté mucho, pero simplemente no puedo abrir ni siquiera una versión de solo lectura de la base de datos de atajos. Something went terribly wrong somewhere! ¡Algo salió terriblemente mal en algún lugar! ERROR opening database with default settings ERROR al abrir la base de datos con las preferencias predeterminadas I tried hard, but I just cannot open the database of default shortcuts. Lo intenté mucho, pero simplemente no puedo abrir la base de datos de atajos predeterminados. PQStartup SQLite error This is the window title of an error message box Error de SQLite You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function! Al parecer te hace falta el controlador de SQLite para Qt. Esto es necesario para algunas cuantas cosas, como lo es leer y escribir las preferencias. ¡Sin esto, PhotoQt no podrá funcionar! TabShortcuts about Close Cerrar Current version: Versión actual: License: Licencia: Open license Licencia Abierta Website: Sitio Web: Open website Abrir sitio web Contact: Contacto: Send an email Envíar un correo About Window title Acerca de buttongeneric Ok This is a generic string written on clickable buttons - please keep short! Aceptar Cancel This is a generic string written on clickable buttons - please keep short! Cancelar Save This is a generic string written on clickable buttons - please keep short! Guardar Close This is a generic string written on clickable buttons - please keep short! Cerrar commandlineparser Image Viewer Visor de imágenes Image file to open. Archivo de imagen a abrir. Make PhotoQt ask for a new file. Hacer que PhotoQt solicite un nuevo archivo. Shows PhotoQt from system tray. Muestra PhotoQt desde la bandera del sistema. Hides PhotoQt to system tray. Command line option Oculta PhotoQt a la bandera del sistema. Show/Hide PhotoQt. Mostrar/Ocultar PhotoQt. Enable thumbnails. Command line option Habilitar miniaturas. Disable thumbnails. Command line option Deshabilitar miniaturas. Enable system tray icon. Command line option Habilitar icono de la bandeja del sistema. Disable system tray icon. Command line option Deshabilitar icono de la bandeja del sistema. Start PhotoQt hidden to the system tray. Command line option Iniciar PhotoQt oculto en la bandeja del sistema. Open standalone PhotoQt, allows for multiple instances but without remote interaction. Command line option Abrir PhotoQt en modo independiente, permite abrir múltiples instancias pero sin interacción remota. Simulate a shortcut sequence Command line option Simular secuencia de atajo Switch on debug messages. Command line option Activar los mensajes de depuración. Switch off debug messages. Command line option Desactivar los mensajes de depuración. Export configuration to given filename. Command line option Exportar configuración a un archivo. filename Command line option nombre de archivo Import configuration from given filename. Command line option Importar configuración a partir de un archivo. Check the configuration and correct any detected issues. Command line option Revisar la configuración y corregir cualquier problema detectado. Reset default configuration. Command line option Restablecer a configuración por omisión. facetagging Who is this? This question is asked in the face tagger to ask for the name of a tagged face ¿Quién es? Enter name Introducir nombre Click to exit face tagging mode Clic para salir del modo de etiquetado de caras Click to tag faces, changes are saved automatically Clic para etiquetar caras, los cambios se guardan automáticamente File type does not support face tags. El tipo de archivo no soporta etiquetas de caras. filedialog Backwards Hacia atrás Up a level Subir un nivel Forwards Hacia adelante List subfolders Listar subcarpetas Enter fullscreen Entrar en pantalla completa Exit fullscreen Salir de pantalla completa Close Cerrar Storage devices This is the category title of storage devices to open (like USB keys) in the element for opening files Dispositivos de almacenamiento Detected storage devices on your system Dispositivos de almacenamiento detectados en su sistema no supported files/folders found no se encontraron archivos/carpetas soportados Click and drag to favorites Clic y arrastrar a favoritos # images # imágenes Date: Fecha: Time: Hora: File size: Tamaño de archivo: File type: Tipo de archivo: %1 image %1 imagen %1 images %1 imágenes no folder added to favorites yet 'favorites' here refers to the list of favorite folders a user can set in the file dialog aún no se ha añadido ninguna carpeta a favoritos Favorites This is the category title of user-set folders (or favorites) in the file dialog Favoritos Your favorites Tus favoritos Show entry Mostrar entrada Hide entry Ocultar entrada Remove entry Eliminar entrada Hide hidden entries No mostrar las entradas ocultas Show hidden entries Mostrar las entradas ocultas Load this folder Cargar esta carpeta Load this file Cargar este archivo Add to Favorites Agregar a favoritos Hide hidden files No mostrar archivos ocultos Show hidden files Mostrar archivos ocultos Hide thumbnails Ocultar miniaturas Show thumbnails Mostrar miniaturas Hide preview Ocultar previsualización Show preview Mostrar previsualización Standard This is the category title of user-set folders (or favorites) in the file dialog Estándar Some standard locations Algunas ubicaciones estándar Zoom: Acercamiento: Adjust font size of files and folders Ajustar tamaño de tipografía de archivos y carpetas Zoom factor: Factor de acercamiento: Sort by: Ordenar por: Name Nombre Natural Name Nombre natural Time modified Modificado File size Tamaño de archivo File type Tipo de archivo reverse order invertir orden Choose by what to sort the files Seleccionar por cuál propiedad se desea ordenar los archivos All supported images Todas las imágenes soportadas Video files Archivos de vídeo All files Todos los archivos Choose which selection of files to show Elegir que selección de archivos mostrar Remember loaded folder between sessions. Recordar la carpeta cargada entre sesiones. Switch between list and icon view Cambiar entre vista de lista e iconos Hide standard locations Ocultar ubicaciones estándar Show standard locations Mostrar ubicaciones estándar Hide favorite locations Ocultar ubicaciones favoritas Show favorite locations Mostrar ubicaciones favoritas Hide storage devices Ocultar dispositivos de almacenamiento Show storage devices Mostrar dispositivos de almacenamiento File dialog Window title Dialogo de archivo filemanagement Delete file? Window title ¿Eliminar el archivo? An error occured, file could not be deleted! ¡Ocurrió un error, el archivo no pudo ser eliminado! Move to trash Mover a la basura Delete permanently Eliminar permanentemente Rename file Window title Renombrar archivo An error occured, file could not be renamed! ¡Ocurrió un error, no se pudo cambiar el nombre del archivo! Enter new filename Introduzca un nuevo nombre para el archivo Save file as This is a title, similar to all the 'save as' options in many programs. ---------- Window title Guardar archivo como An error occured, file could not be saved! ¡Ocurrió un error, no se pudo guardar el archivo! Operation cancelled 'Operation' here is the operation of saving an image in a new format Operación cancelada Filter formats This is a short hint informing the user that here they can 'filter all the possible file formats' Filtrar formatos New filename Nuevo nombre de archivo Choose location and save file Elegir una ubicación y guardar el archivo filter Filter images in current directory Filtrar imágenes en el directorio actual Enter here the terms you want to filter the images by. Separate multiple terms by a space. Introduzca aquí los términos por los que desea filtrar las imágenes. Separe múltiples términos con un espacio. If you want to filter by file extension, start the term with a dot. Si deseas filtrar por extensión de archivo, inicie el término con un punto. Enter filter term Introduzca término para filtrar Filter Written on a clickable button - please keep short ---------- Window title Filtrar Remove filter Written on a clickable button - please keep short Eliminar filtro histogram Histogram Window title Histograma Loading... As in: Loading the histogram for the current image Cargando... Click-and-drag to move. Used for the histogram. The version refers to the type of histogram that is available (colored and greyscale) Clic y arrastrar para mover. Right click to switch version. Clic derecho para cambiar versión. imageprovider File failed to load, it does not exist! ¡Error al cargar, no existe el archivo! imgur Upload to imgur.com Window title Subir a imgur.com anonymous Used as in: Upload image as anonymous user anónimo Obtaining image url... Obteniendo url de la imagen... This seems to take a long time... Parece que esto tomará mucho tiempo... There might be a problem with your internet connection or the imgur.com servers. Puede que haya un problema con su conexión a internet o con los servidores de imgur.com. An Error occurred while uploading image! ¡Ha ocurrido un error mientras se subía la imagen! Error code: Código de error: You do not seem to be connected to the internet... No parece haber conexión con internet... Unable to upload! ¡No se puede subir el archivo! Access Image Acceder a imagen Click to open in browser Clic para abrir en el navegador Copy to clipboard Copiar al portapapeles Delete Image Eliminar imagen keymouse Alt Refers to a keyboard modifier Alt Ctrl Refers to a keyboard modifier Ctrl Shift Refers to a keyboard modifier Mayús Page Up Refers to one of the keys on the keyboard Re Pág Page Down Refers to one of the keys on the keyboard Av Pág Meta Refers to the key that usually has the Windows symbol on it Meta Keypad Refers to the key that triggers the number block on keyboards Teclado numérico Escape Refers to one of the keys on the keyboard ESC Right Refers to one of the arrow keys on the keyboard Derecha Left Refers to one of the arrow keys on the keyboard Izquierda Up Refers to one of the arrow keys on the keyboard Arriba Down Refers to one of the arrow keys on the keyboard Abajo Space Refers to one of the keys on the keyboard Espacio Delete Refers to one of the keys on the keyboard Suprimir Backspace Refers to one of the keys on the keyboard Retroceso Home Refers to one of the keys on the keyboard Inicio End Refers to one of the keys on the keyboard Fin Insert Refers to one of the keys on the keyboard Insert Tab Refers to one of the keys on the keyboard Tab Return Return refers to the enter key of the number block - please try to make the translations of Return and Enter (the main button) different if possible! Intro Enter Enter refers to the main enter key - please try to make the translations of Return (in the number block) and Enter different if possible! Intro Left Button Refers to a mouse button Botón izquierdo Right Button Refers to a mouse button Botón derecho Middle Button Refers to a mouse button Botón medio Wheel Up Refers to the mouse wheel Rueda hacia arriba Wheel Down Refers to the mouse wheel Rueda hacia abajo East Refers to a direction of the mouse when performing a mouse gesture Este South Refers to a direction of the mouse when performing a mouse gesture Sur West Refers to a direction of the mouse when performing a mouse gesture Oeste North Refers to a direction of the mouse when performing a mouse gesture Norte logging Logging Window title Bitácora enable debug messages habilitar mensajes de depuración copy to clipboard copiar al portapapeles save to file guardar en archivo metadata Click and drag to resize meta data Clic y arrastrar para cambiar tamaño de metadatos File name Please keep string short! Nombre del archivo Dimensions The dimensions of the loaded image. Please keep string short! Dimensiones Image #/# Used as in "Image 3/16". The numbers (position of image in folder) are added on automatically. Please keep string short! Imagen #/# File size Please keep string short! Tamaño del archivo File type Please keep string short! Tipo de archivo Make Exif image metadata: the make of the camera used to take the photo. Please keep string short! Fabricante Model Exif image metadata: the model of the camera used to take the photo. Please keep string short! Modelo Software Exif image metadata: the software used to create the photo. Please keep string short! Software Time Photo was Taken Exif image metadata: when the photo was taken. Please keep string short! Hora en la que se tomó la foto Exposure Time Exif image metadata: how long the sensor was exposed to the light. Please keep string short! Tiempo de exposición Flash Exif image metadata: the flash setting when the photo was taken. Please keep string short! Flash Scene Type Exif image metadata: the specific scene type the camera used for the photo. Please keep string short! Tipo de escena Focal Length Exif image metadata: https://en.wikipedia.org/wiki/Focal_length . Please keep string short! Distancia focal Metadata This is the heading of the metadata element ---------- Window title Metadatos No File Loaded No se ha cargado ningún archivo Click to open GPS position with online map Clic para abrir la posición GPS con un mapa en línea Keep Open Used as in: Keep the metadata element open even if the cursor leaves it Mantener abierto Light Source Exif image metadata: What type of light the camera detected. Please keep string short! Fuente de luz Keywords IPTC image metadata: A description of the image by the user/software. Please keep string short! Palabras Claves Location IPTC image metadata: The CITY and COUNTRY the imge was taken in. Please keep string short! Ubicación Copyright IPTC image metadata. Please keep string short! Copyright GPS Position Exif image metadata. Please keep string short! Posición del GPS F Number Exif image metadata: https://en.wikipedia.org/wiki/F-number . Please keep string short! Número f navigate Click and drag to move Clic y arrastrar para mover Navigate to previous image in folder Navegar a la imagen anterior en la carpeta Navigate to next image in folder Navegar a la siguiente imagen en la carpeta Show main menu Mostrar menú principal other Open a file to start Abrir un archivo para comenzar Click anywhere to open a file Part of the message shown in the main view before any image is loaded Clic donde sea para abrir un archivo Move your cursor to: Part of the message shown in the main view before any image is loaded Mover cursor a: RIGHT EDGE for the main menu Part of the message shown in the main view before any image is loaded, first option for where to move cursor to BORDE DERECHO para el menú principal LEFT EDGE for the metadata Part of the message shown in the main view before any image is loaded, second option for where to move cursor to BORDE IZQUIERDO para los metadatos BOTTOM EDGE to show the thumbnails Part of the message shown in the main view before any image is loaded, third option for where to move cursor to BORDE INFERIOR para mostrar las miniaturas (once an image/folder is loaded) Part of the message shown in the main view before any image is loaded (una vez que una imagen/carpeta está cargada) No matches found Used as in: No matches found for the currently set filter No se encontraron coincidencias PhotoQt Image Viewer The window title of PhotoQt Visor de imágenes PhotoQt popinpopout Merge into main interface Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface Combinar dentro de la interfaz principal Move to its own window Tooltip of small button to show an element in its own window (i.e., not merged into main interface) Mover a su propia ventana quickinfo Click here to enter fullscreen mode Clic aquí para entrar en modo de pantalla completa Click here to exit fullscreen mode Clic aquí para salir de modo de pantalla completa Click here to close PhotoQt Haga clic aquí para cerrar PhotoQt Page %1 of %2 Used as in: Page 12/34 - please keep as short as possible Página %1 de %2 File %1 of %2 Used as in: File 12/34 - please keep as short as possible Archivo %1 de %2 Connected to: This is followed by the name of the Chromecast streaming device currently connected to Conectado a: Copy filename to clipboard Copiar nombre de archivo al portapapeles Show counter Mostrar contador Hide counter Ocultar contador Show file path Mostrar el nombre de archivo Hide file path Ocultar el nombre de archivo Show file name Mostrar el nombre de archivo Hide file name Ocultar el nombre de archivo Show zoom level Mostrar nivel de acercamiento Hide zoom level Ocultar nivel de acercamiento Click here to enter viewer mode Clic aquí para entrar en modo visor Hide central 'viewer mode' button Ocultar botón central de 'modo visor' Click here to exit viewer mode Clic aquí para salir del modo visor Filter: Filtrar: Show window buttons Mostrar botones de ventana Hide window buttons Ocultar botones de ventana Some info about the current image and directory Algo de información acerca de la imagen y directorio actuales Show central 'viewer mode' button Mostrar botón central de 'modo visor' Click to remove filter Clic para remover el filtro scale Scale file Window title Escalar archivo An error occured, file could not be scaled! ¡Ocurrió un error, el archivo no pudo ser escalado! This file format cannot (yet) be scaled with PhotoQt! ¡Este formato de archivo no puede ser escalado (aún) con PhotoQt! New width x height: Nueva altura x anchura: Preserve aspect ratio The aspect ratio refers to the ratio of the width to the height of the image, e.g., 16:9 for most movies Preservar la relación de aspecto Quality: This refers to the quality to be used to scale the image Calidad: Scale (create new file) Written on a clickable button Escalar (crear nuevo archivo) Scale (change file in place) Written on a clickable button Escalar (sobrescribir el archivo) De-/Increase width and height by 10% Reducir/aumentar anchura y altura en 10% In-/Decrease quality by 5% Aumentar/reducir la calidad en 5% Select new file Seleccione un nuevo archivo settingsmanager interface settings manager tab title interfaz Tab to control interface settings Pestaña para controlar los ajustes de la interfaz image view settings manager tab title visualización de imágenes Tab to control how images are viewed Pestaña para controlar como se deben visualizar las imágenes thumbnails settings manager tab title miniaturas Tab to control the look and behaviour of thumbnails Pestaña para controlar la apariencia y comportamiento de las miniaturas metadata settings manager tab title metadatos Tab to control metadata settings Pestaña para controlar los ajustes de metadatos file types settings manager tab title tipos de archivo Tab to control which file types PhotoQt should recognize Pestaña para controlar que tipos de archivo deben ser reconocidos por PhotoQt shortcuts settings manager tab title Atajos Tab to control which shortcuts are set Pestaña para controlar que atajos de teclado se deben establecer advanced Written on button in setting manager. A click on this button opens a menu with some advanced actions. avanzado restore defaults restaurar predeterminados import settings importar ajustes export settings exportar ajustes disable expert mode desactivar modo experto enable expert mode activar modo experto Import of %1. This will replace your current settings with the ones stored in the backup. Importar %1. Esto reemplazará sus ajustes actuales con los que están almacenados en la copia de seguridad. Do you want to continue? ¿Desea continuar? Save changes and exit Guardar cambios y salir Exit and discard changes Salir y descartar cambios Rename File Name of shortcut action Cambiar nombre de archivo Delete File Name of shortcut action Eliminar archivo Filetype settings Ajustes de tipo de archivo These settings govern which file types PhotoQt should recognize and open. Estos ajustes gobiernan que tipos de archivo deberían ser reconocidos y abiertos por PhotoQt. Not all file types might be available, depending on your setup and what library support was enabled at compile time No todos los tipos de archivo podrían estar disponibles dependiendo de su configuración y de que soporte de librerías fue habilitado durante la compilación del programa Image view settings Ajustes de vista de imagen These settings affect the viewing of images, how they are shown, in what order, how large a cache to use, etc. Estos ajustes afectan la visualización de imágenes, el como deben ser mostradas, en que orden, que tan grande será la caché a utilizarse, etc. Some settings are only shown in expert mode. Algunos ajustes solo se muestran en modo experto. Interface settings Ajustes de interfaz These settings affect the interface in general, how the application looks like and behaves. This includes the background, some of the labels in the main view, which elements are to be shown in their own window, and others. Estos ajustes afectan la interfaz de usuario en general, el como se ve y se comporta la aplicación. Esto incluye el fondo, algunas etiquetas de la vista principal, que elementos deben ser mostrados en su propia ventana, entre otros. Metadata settings Ajustes de metadatos These settings affect the metadata element, what information it should show and some of its behavior. Estos ajustes afectan el elemento de metadatos, que información debería mostrarse y algunos de sus comportamientos. Shortcuts Atajos Navigation A shortcuts category: navigation Navegación Filter images in folder Name of shortcut action Filtrar las imágenes de la carpeta Next image Name of shortcut action Imagen siguiente Previous image Name of shortcut action Imagen anterior Go to first image Name of shortcut action Name of shortcut action Ir a la primera imagen Go to last image Name of shortcut action Ir a la última imagen Enter viewer mode Name of shortcut action Entrar en modo visor Show quick navigation buttons Name of shortcut action Mostrar botones de navegación rápida Close window (hides to system tray if enabled) Name of shortcut action Cerrar ventana (ocultar a la bandeja del sistema si está habilitado) Quit PhotoQt Name of shortcut action Salir de PhotoQt Image A shortcuts category: image manipulation Imagen Zoom In Name of shortcut action Acercar Zoom Out Name of shortcut action Alejar Zoom to Actual Size Name of shortcut action Ajustar al tamaño real Reset Zoom Name of shortcut action Restablecer acercamiento Rotate Right Name of shortcut action Girar a la derecha Rotate Left Name of shortcut action Girar a la izquierda Reset Rotation Name of shortcut action Reiniciar rotación Flip Horizontally Name of shortcut action Voltear horizontalmente Flip Vertically Name of shortcut action Voltear verticalmente Scale Image Name of shortcut action Escalar imagen Play/Pause animation/video Name of shortcut action Reproducir/Pausar animación/video Hide/Show face tags (stored in metadata) Name of shortcut action Ocultar/Mostrar etiquetas de cara (almacenadas en metadatos) Tag faces (stored in metadata) Name of shortcut action Etiquetar caras (almacenadas en los metadatos) File A shortcuts category: file management Archivo Delete File (without confirmation) Name of shortcut action Eliminar archivo (sin confirmación) Copy File to a New Location Name of shortcut action Copiar un archivo a una nueva ubicación Move File to a New Location Name of shortcut action Mover un archivo a una nueva ubicación Copy Image to Clipboard Name of shortcut action Copiar imagen al portapapeles Other A shortcuts category: other functions Otros Hide/Show main menu Name of shortcut action Ocultar/Mostrar menú principal Hide/Show metadata Name of shortcut action Ocultar/Mostrar metadatos Keep metadata opened Name of shortcut action Mantener los metadatos abiertos Hide/Show thumbnails Name of shortcut action Ocultar/Mostrar miniaturas Show Settings Name of shortcut action Mostrar ajustes Start Slideshow Name of shortcut action Iniciar presentación Start Slideshow (Quickstart) Name of shortcut action Iniciar presentación (rápido) About PhotoQt Name of shortcut action Acerca de PhotoQt Set as Wallpaper Name of shortcut action Establecer como fondo de pantalla Show Histogram Name of shortcut action Mostrar histograma Upload to imgur.com (anonymously) Name of shortcut action Subir a imgur.com (anónimamente) Upload to imgur.com user account Name of shortcut action Subir a imgur.com con cuenta de usuario Stream content to Chromecast device Name of shortcut action Transmitir contenido al dispositivo Chromecast Show log/debug messages Name of shortcut action Mostrar mensajes de bitácora/depuración External A shortcuts category: external shortcuts Externos %f = filename including path, %u = filename without path, %d = directory containing file Please leave the three placeholders (%f, %u, %d) as is. %f = nombre del archivo incluyendo la ruta, %u = nombre de archivo sin ruta, %d = directorio que contiene el archivo Thumbnails settings Ajustes de miniaturas These settings affect the thumbnails shown, by default, along the bottom edge of the screen. This includes their look, behavior, and the user's interaction with them. Estos ajustes afectan las miniaturas mostradas, por omisión, estas se encuentran a lo largo de borde inferior de la pantalla. Esto incluye el como se ven, su comportamiento y su interacción con el usuario. Settings Manager Window title Gestor de ajustes Here the shortcuts can be managed. Below you can add a new shortcut for any one of the available actions, both key combinations and mouse gestures are supported. Aquí se pueden gestionar los atajos. A continuación puede añadir un nuevo acceso directo para cualquiera de las acciones disponibles, tanto las combinaciones de teclas como los gestos del ratón están soportados. You can also set the same shortcut for multiple actions or multiple times for the same action. All actions for a shortcut will be executed sequentially, allowing a lot more flexibility in using PhotoQt. También puede establecer el mismo acceso directo para múltiples acciones o múltiples veces para la misma acción. Todas las acciones para un atajo se ejecutarán secuencialmente, permitiendo mucha más flexibilidad en el uso de Photo Qt. Open file (browse images) Name of shortcut action Abrir archivo (navegar imágenes) Save image in another format Name of shortcut action Guardar imagen en otro formato Restore defaults As in 'restore the default settings and/or file formats and/or shortcuts'. Please keep short! Restaurar predeterminados Here you can restore the default configuration of PhotoQt. You can choose to restore any combination of the following three categories. Aquí puede restaurar la configuración predeterminada de PhotoQt. Puede elegir restaurar cualquier combinación de las siguientes tres categorías. Restore default settings Restaurar ajustes predeterminados Restore default file formats Restaurar formatos de archivo predeterminados Restore default shortcuts Restaurar atajos predeterminados settingsmanager_filetypes These are some additional settings for opening archives. Estos son algunos ajustes adicionales para la apertura de archivos. use external tool: unrar used as label for checkbox usar herramienta externa: unrar These are some additional settings for showing PDFs. Estos son algunos ajustes adicionales para mostrar archivos PDF. Quality: the quality setting to be used when loading PDFs Calidad: These are some additional settings for playing videos. Estos son algunos ajustes adicionales para la reproducción de videos. Autoplay Used as setting for video files (i.e., autoplay videos) Autorreproducir Loop Used as setting for video files (i.e., loop videos) Ciclar Select tool for creating video thumbnails Tooltip shown for combobox for selectiong video thumbnailer Seleccione una herramienta apara la creación de miniaturas de video images This is a category of files PhotoQt can recognize: any image format imágenes compressed files This is a category of files PhotoQt can recognize: compressed files like zip, tar, cbr, 7z, etc. archivos comprimidos documents This is a category of files PhotoQt can recognize: documents like pdf, txt, etc. documentos videos This is a type of category of files PhotoQt can recognize: videos like mp4, avi, etc. videos Enable As in: "Enable all formats in the seleted category of file types" habilitar Disable As in: "Disable all formats in the seleted category of file types" deshabilitar Enable everything As in "Enable every single file format PhotoQt can open in any category" habilitar todos Currently there are %1 file formats enabled The %1 will be replaced with the number of file formats, please don't forget to add it. Actualmente hay %1 archivos de formato habilitados Search by description or file ending Buscar por descripción o por extensión de archivo Search by image library or category Buscar por librería de imágenes o por categoría File endings: Extensiones de archivo: settingsmanager_imageview animation A settings title referring to the in/out animation of images animación What type of animation to show, and how fast. This is referring to the in/out animation of images Que tipo de animación mostrar y a que velocidad. type of animation This is referring to the in/out animation of images tipo de animación opacity This is referring to the in/out animation of images desvanecer along x-axis This is referring to the in/out animation of images a lo largo del eje X along y-axis This is referring to the in/out animation of images a lo largo del eje Y no animation This is referring to the in/out animation of images sin animación long animation This is referring to the in/out animation of images animación larga fit in window A settings title referring to whether to fit images in window ajustar a la ventana Zoom smaller images to fill the full window width and/or height. Acercar imágenes pequeñas para que llenen el ancho y/o largo de la ventana. fit smaller images in window ajustar imágenes pequeñas en la ventana interpolation A settings title referring to the type of interpolation to use for small images interpolación PhotoQt tries to improve the rendering of images that are shown much larger than they are (i.e., zoomed in a lot). For very tiny images that are zoomed in quite a lot, this can result in the loss of too much information in the image. Thus a threshold can be defined here, images that are smaller than this threshold are shown exactly as they are without any smoothing or other attempts to improve them. PhotoQt intenta mejorar el renderizado de las imágenes que sean mostradas en un tamaño mayor al que tienen realmente (por ejemplo al acercarse mucho). Para imágenes muy pequeñas a las que se les haga mucho acercamiento, esto puede resultar en perdida de mucha información de la imagen. Aquí se puede definir un umbral de tal modo que aquellas imágenes que sean más pequeñas que dicho umbral sean mostradas exactamente como son, sin ningún suavizado u otros intentos por mejorarla. Do not use any interpolation algorithm for very small images A type of interpolation to use for small images No usar ningún algoritmo de interpolación para imágenes muy pequeñas threshold: The threshold (in pixels) at which to switch interpolation algorithm umbral: remember per session A settings title recordar por cada sesión By default, PhotoQt resets the zoom, rotation, flipping/mirroring and position when switching to a different image. For certain tasks, for example for comparing two images, it can be helpful to keep these properties. Por omisión, PhotoQt reinicia el acercamiento, rotación, volteo/espejado y posición cuando se cambia a una imagen distinta. Para ciertas tareas, por ejemplo el comparar dos imágenes, puede resultar útil recordar esas propiedades. remember zoom, rotation, flip, position recordar acercamiento, rotación, volteo, posición left mouse button A settings title Botón izquierdo del ratón The left button of the mouse is by default used to move the image around. However, this prevents the left mouse button from being used for shortcuts. Por omisión se usa el botón izquierdo del ratón para mover la imagen en la pantalla. Sin embargo esto evita que el botón izquierdo del ratón pueda ser usado en atajos. use left button to move image usar botón izquierdo para mover imagen looping A settings title for looping through images in folder ciclar What to do when the end of a folder has been reached: stop or loop back to first image in folder. Qué hacer cuando se llega al final de la carpeta: detenerse o ciclar de regreso a la primera imagen en la carpeta. loop through images in folder ciclar a través de las imágenes en la carpeta margin A settings title about the margin around the main image margen How much space to show between the main image and the application border. Cuanto espacio mostrar entre la imagen principal y el borde de la aplicación. none As in: no margin between the main image and the window edges ninguno pixmap cache A settings title caché de pixmaps Size of runtime cache for fully loaded images. This cache is cleared when the application quits. Tamaño de la caché en tiempo de ejecución para las imágenes totalmente cargadas. Esta caché es limpiada cuando se sale de la aplicación. sort images by A settings title ordenar imágenes por Sort all images in a folder by the set property. Ordena todas las imágenes en una carpeta por la propiedad establecida. natural name A criteria for sorting images nombre natural name A criteria for sorting images nombre time A criteria for sorting images hora size A criteria for sorting images tamaño type A criteria for sorting images tipo ascending Sort images in ascending order ascendente descending Sort images in descending order descendente transparency marker A settings title marcador de transparencia Show checkerboard pattern behind transparent areas of (half-)transparent images. Muestra un patrón de tablero de ajedrez detrás de las áreas transparentes en las imágenes con (semi-)transparencia. show checkerboard pattern Setting for how to display images that have transparent areas, whether to show checkerboard pattern in that area or not mostrar patrón de tablero de ajedrez zoom speed A settings title, the zoom here is the zoom of the main image velocidad de acercamiento Images are zoomed at a relative speed as specified by this percentage. A higher value means faster zoom. Las imágenes son acercadas a una velocidad relativa especificada por este porcentaje. Un valor más alto significa un acercamiento más rápido. super slow This refers to the zoom speed, the zoom here is the zoom of the main image super lento very fast This refers to the zoom speed, the zoom here is the zoom of the main image muy rápido settingsmanager_interface background A settings title referring to the background of PhotoQt (behind any image/element) fondo What type of background is to be shown. The background here refers to the area behind the main image and any element in PhotoQt, the very back. Qué tipo de fondo debe mostrarse. (half-)transparent background How the background of PhotoQt should be fondo (semi-)transparente faked transparency How the background of PhotoQt should be transparencia falsa custom background image How the background of PhotoQt should be imagen de fondo personalizada Click to select an image Tooltip for a mouse area, a click on which opens a file dialog for selecting an image clic para seleccionar una imagen scale to fit If an image is set as background of PhotoQt this is one way it can be handled. escalar scale and crop to fit If an image is set as background of PhotoQt this is one way it can be handled. escalar y recortar stretch to fit If an image is set as background of PhotoQt this is one way it can be handled. estirar center image If an image is set as background of PhotoQt this is one way it can be handled. centrar la imagen tile image If an image is set as background of PhotoQt this is one way it can be handled. repetir la imagen en mosaico All Images This is a category in a file dialog for selecting images used as in: All images supported by PhotoQt. Todas las imágenes Video This is a category in a file dialog for selecting images used as in: Video files supported by PhotoQt. Video empty area around image A settings title área alrededor de la imagen How to handle clicks on empty area around images. Como manejar los clics en el área vacía alrededor de las imágenes. close on click Used as in: Close PhotoQt on click on empty area around main image cerrar al hacer clic Close PhotoQt when click occurred on empty area around image Cerrar PhotoQt cuando se hace clic en el área vacía alrededor de la imagen navigate on click Used as in: Close PhotoQt on click on empty area around main image navegar al hacer clic Go to next/previous image if click occurred in left/right half of window Ir a la imagen siguiente/anterior si se hace clic en la mitad izquierda/derecha de la ventana size of 'hot edge' A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) tamaño del 'borde activo' Adjusts the sensitivity of the edges for showing elements like the metadata and main menu elements. Ajusta la sensibilidad de los bordes para mostrar elementos de la interfaz como el de metadatos o el menú principal. small used as in: small area pequeña large used as in: large area grande language A settings title. idioma Change the language of the application. Cambiar el idioma de la aplicación. mouse wheel sensitivity A settings title. sens. de la rueda del ratón How sensitive the mouse wheel is for shortcuts, etc. Qué tan sensible debe ser la rueda del ratón para activar atajos, etc. not sensitive The sensitivity here refers to the sensitivity of the mouse wheel nada sensible very sensitive The sensitivity here refers to the sensitivity of the mouse wheel muy sensible overlay color A settings title. color sobrepuesto This is the color that is shown on top of any background image/... Este es el color que se mostrará encima de cualquier imagen de fondo. click to change color clic para cambiar color please choose a color por favor elija un color pop out elements A settings title. The popping out that is talked about here refers to the possibility of showing any element in its own window (i.e., popped out). desacoplar elementos Here you can choose for most elements whether they are to be shown integrated into the main window or in their own, separate window. Aquí puedes elegir, para la mayoría de los elementos de la interfaz, si se deberán mostrar integrados dentro de la ventana principal o en una ventana separada. File dialog Used as identifying name for one of the elements in the interface Dialogo de archivo keep open mantener abierto Settings Manager Used as identifying name for one of the elements in the interface Gestor de ajustes Main Menu Used as identifying name for one of the elements in the interface Menú principal Metadata Used as identifying name for one of the elements in the interface Metadatos Histogram Used as identifying name for one of the elements in the interface Histograma Scale Used as identifying name for one of the elements in the interface Escalar Slideshow Settings Used as identifying name for one of the elements in the interface Ajustes de la presentación Slideshow Controls Used as identifying name for one of the elements in the interface Controles de la presentación Rename File Used as identifying name for one of the elements in the interface Cambiar nombre de archivo Delete File Used as identifying name for one of the elements in the interface Eliminar archivo Save File As Used as identifying name for one of the elements in the interface Guardar archivo como About Used as identifying name for one of the elements in the interface Acerca de Imgur Used as identifying name for one of the elements in the interface Imgur Wallpaper Used as identifying name for one of the elements in the interface Fondo de pantalla Filter Noun, not a verb. Used as identifying name for one of the elements in the interface Filtro labels A settings title. etiquetas The labels are shown along the top edge of the main view. Las etiquetas son mostradas a lo largo de borde superior de la vista principal. show labels checkbox in settings manager mostrar etiquetas counter refers to the image counter (i.e., image #/# in current folder) contador filepath show filepath in the labels. This is specifically the filePATH and not the filename. ruta del archivo filename show filename in the labels. This is specifically the fileNAME and not the filepath. nombre del archivo current zoom level nivel de acercamiento actual current rotation angle ángulo de rotación actual window buttons the window buttons are some window management buttons like: close window, maximize, fullscreen botones de ventana size of window buttons the size of the window buttons (the buttons shown in the top right corner of the window) tamaño de los botones de ventana remember last image A settings title. recordar la última imagen At startup the image loaded at the end of the last session can be automatically reloaded. Al inicio de programa se puede volver a cargar la imagen cargada al final de la sesión anterior de forma automática. re-open last loaded image at startup reabrir la última imagen al inicio tray icon A settings title. icono de la bandeja del sistema If a tray icon is to be shown and, if shown, whether to hide it or not. Si se mostrará un ícono en la bandeja del sistema y, de ser así, el ocultar el programa dentro de este o no. no tray icon sin icono en la bandeja hide to tray icon ocultar en el icono de la bandeja show tray icon but don't hide to it mostrar el icono de la bandeja pero no esconder el programa en el window management A settings title. gestión de ventanas Some basic window management properties. Algunas propiedades básicas de la gestión de ventanas. manage window through quick info labels gestionar la ventana a través de las etiquetas de información rápida save and restore window geometry guardar y restaurar la geometría de la ventana keep above other windows mantener sobre las demás ventanas window mode A settings title. modo ventana Whether to run PhotoQt in window mode or fullscreen. Si PhotoQt debe ejecutarse en modo ventana o en modo pantalla completa. run in window mode ejecutar en modo ventana show window decoration mostrar decoración de la ventana custom main menu entries A settings title. entradas personalizadas Add some custom entries in the main menu on the right. Agrega algunas entradas personalizadas en el menú principal de la derecha. what string to show in main menu this is the placeholder text inside of a text box telling the user what text they can enter here cuál cadena de texto mostrar en el menú principal which command to execute this is the placeholder text inside of a text box telling the user what text they can enter here cuál comando ejecutar quit Keep string short! Used on checkbox for contextmenu, refers to option to close PhotoQt after respective command has been executed. salir move entry down contextmenu settings: used as in 'move this entry down in the list of all entries' mover entrada abajo move entry up contextmenu settings: used as in 'move this entry up in the list of all entries' mover entrada arriba delete entry contextmenu settings: used as in 'delete this entry out of the list of all entries' borrar entrada quick navigation A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) navegación rápida Some buttons to help with quick navigation. These can come in handy when, e.g., operating with a touch screen. Algunos botones para ayudar con la navegación rápida. Pueden resultar de utilidad cuando, por ejemplo, se está operando con una pantalla táctil. Show quick navigation buttons Mostrar botones de navegación rápida settingsmanager_metadata face tags A settings title. The face tags are labels that can be shown (if available) on faces including their name. etiquetas de caras Whether to show face tags (stored in metadata info). The face tags are labels that can be shown (if available) on faces including their name. El sí se deben mostrar etiquetas de caras (almacenadas en la información de los metadatos). enable habilitar face tags - border A settings title. The face tags are labels that can be shown (if available) on faces including their name. etiquetas de caras - borde If and what style of border to show around tagged faces. Si deseas que se muestren bordes alrededor de las caras etiquetadas y con qué estilo. show border The border here is the border around face tags. mostrar borde click to change color clic para cambiar de color please choose a color por favor elija un color face tags - font size A settings title. The face tags are labels that can be shown (if available) on faces including their name. etiquetas de caras - tamaño The font size of the name labels. The name labels here are the labels with the name used for the face tags. El tamaño de tipografía de las etiquetas de nombre. face tags - visibility A settings title. The face tags are labels that can be shown (if available) on faces including their name. etiquetas de caras - visibilidad When to show the face tags and for how long. Cuando mostrar etiquetas de caras y durante cuanto tiempo. hybrid mode A mode for showing face tags. modo híbrido always show all A mode for showing face tags. siempre mostrar todas show one on hover A mode for showing face tags. mostrar una al pasar el ratón show all on hover A mode for showing face tags. mostrar todas al pasar el ratón GPS online map A settings title. Mapa en línea del GPS Which map service to use when a GPS position is clicked. Cuál servicio de mapas se debe usar cuando se da clic en una posición GPS. hot edge A settings title. The hot edge refers to the area along the left edge of PhotoQt where the mouse cursor triggers the visibility of the metadata element. borde activo Show metadata element when the mouse cursor is close to the window edge Mostrar el elemento de metadatos cuando el cursor del ratón se encuentre cerca del borde de la ventana meta information A settings title. información de metadatos Which meta information to extract and display. Cuál información de los metadatos se debe extraer y mostrar. file name Part of the meta information about the current image. nombre del archivo file type Part of the meta information about the current image. tipo del archivo file size Part of the meta information about the current image. tamaño del archivo image #/# Part of the meta information about the current image. imagen #/# dimensions Part of the meta information about the current image. dimensiones copyright Part of the meta information about the current image. copyright exposure time Part of the meta information about the current image. tiempo de exposición flash Part of the meta information about the current image. flash focal length Part of the meta information about the current image. distancia focal f-number Part of the meta information about the current image. número f GPS position Part of the meta information about the current image. posición del GPS keywords Part of the meta information about the current image. palabras clave light source Part of the meta information about the current image. fuente de luz location Part of the meta information about the current image. ubicación make Part of the meta information about the current image. fabricante model Part of the meta information about the current image. modelo scene type Part of the meta information about the current image. tipo de escena software Part of the meta information about the current image. software time photo was taken Part of the meta information about the current image. hora en que fue tomada la foto opacity A settings title. opacidad The opacity of the metadata element. La opacidad del elemento metadatos. auto-rotation A settings title. auto-rotación Automatically rotate images based on metadata information. Gira de manera automática las imágenes basándose en la información de los metadatos. settingsmanager_shortcuts quit checkbox in shortcuts settings, used as in: quit PhotoQt. Please keep as short as possible! salir Click to change shortcut Clic para cambiar atajo Click to delete shortcut clic para borrar atajo no shortcut set no se ha establecido atajo Click to manage shortcut Clic para gestionar el atajo add new Used as in 'add new shortcut'. Please keep short! agregar nuevo Add New Shortcut Agregar atajo nuevo Perform a mouse gesture here or press any key combo Realiza un gesto del ratón aquí o presiona cualquier combinación de teclas Add new Used on button as in 'add new external shortcut'. Please keep short! Agregar nuevo settingsmanager_thumbnails thumbnail cache A settings title. caché de miniaturas Thumbnails can be cached (permanently), following the freedesktop.org standard. Las miniaturas pueden ser almacenadas en caché (de forma permanente), siguiendo el estándar freedesktop.org. enable habilitar keep in center A settings title. Used as in: Keep thumbnail for current main image in center. mantener en el centro Keep currently active thumbnail in the center of the screen mantener la miniatura activa en el centro de la pantalla center on active thumbnail centrar en la miniatura activa disable thumbnails deshabilitar miniaturas Disable thumbnails in case no thumbnails are desired whatsoever. Deshabilitar las miniaturas en caso de que no se desee ninguna miniatura. disable all thumbnails deshabilitar todas las miniaturas filename label A settings title. The filename label here is the one that is written on thumbnails. etiqueta de nombre Show the filename on a small label on the thumbnail image. Mostrar el nombre del archivo en una etiqueta pequeña sobre la miniatura de la imagen. font size: tamaño de tipografía: filename-only A settings title. This refers to using only the filename as thumbnail and no actual image. solo nombre de archivo Show only the filename as thumbnail, no actual image. Mostrar solo el nombre del archivo como miniatura en lugar de la imagen. lift up A settings title. This refers to the lift up of thumbnail images when active/hovered. alzar How many pixels to lift up thumbnails when either hovered or active. Cuantos pixeles debe alzarse la miniatura cuando se pasa sobre esta o esta activa. position A settings title referring to the position of the thumbnails (upper or lower edge of PhotoQt). posición Which edge to show the thumbnails on, upper or lower edge. En cuál borde se deben mostrar las miniaturas, si en el superior o el inferior. upper edge The upper edge of PhotoQt borde superior lower edge The lower edge of PhotoQt borde inferior size A settings title referring to the size of the thumbnails. tamaño How large (or small) the thumbnails should be. Qué tan grandes (o pequeñas) deben ser las miniaturas. spacing A settings title referring to the spacing of thumbnails, i.e., how much empty space to have between each. espaciado How much space to show between the thumbnails. Cuanta separación mostrar entre las miniaturas. threads A settings title, as in: How many threads to use to generate thumbnails. hilos How many threads to use to create thumbnails. Too many threads can slow down your computer! Cuantos hilos de procesamiento se deben usar para crear las miniaturas. ¡Usar demasiados hilos podrían poner lenta su computadora! Threads: Hilos: visibility A settings title referring to the visibility of the thumbnails, i.e., if and when to hide them. visibilidad If and how to keep thumbnails visible El sí se deben mantener las miniaturas visibles y cómo hide when not needed This is talking about the thumbnails. ocultar cuando no se necesiten never hide This is talking about the thumbnails. nunca ocultar hide when zoomed in This is talking about the thumbnails. ocultar cuando hay un acercamiento exclude folders excluir carpetas Exclude the specified folders and all of its subfolders from any sort of caching and preloading. Excluir las carpetas especificadas y todas sus subcarpetas de cualquier tipo de almacenamiento en caché y precarga. Do not cache these folders: No guardar en caché estas carpetas: Add folder Written on a button Agregar carpeta One folder per line Una carpeta por línea slideshow Click to go to the previous image Clic para ir a la imagen anterior Click to pause slideshow Clic para pausar la presentación Click to play slideshow Clic para reproducir la presentación Click to go to the next image Clic para ir a la siguiente imagen Sound volume: Volumen del sonido: Click to quit slideshow Clic para salir de la presentación Slideshow settings Window title Ajustes de la presentación interval The interval between images in a slideshow intervalo animation This is referring to the in/out animation of images during a slideshow animación opacity This is referring to the in/out animation of images during slideshows desvanecer along x-axis This is referring to the in/out animation of images during slideshows Deslizar en el eje X along y-axis This is referring to the in/out animation of images during slideshows Deslizar en el eje Y animation speed The speed of transitioning from one image to another during slideshows velocidad de animación immediately, without animation This refers to a speed of transitioning from one image to another during slideshows inmediatamente, sin animación pretty fast animation This refers to a speed of transitioning from one image to another during slideshows animación bastante rápida not too fast and not too slow This refers to a speed of transitioning from one image to another during slideshows ni muy rápido, ni muy lento very slow animation This refers to a speed of transitioning from one image to another during slideshows animación muy lenta current speed This refers to the currently set speed of transitioning from one image to another during slideshows velocidad actual looping ciclar loop over all files Loop over all images during slideshows ciclar todas las imágenes shuffle during slideshows shuffle the order of all images Orden aleatorio shuffle all files during slideshows shuffle the order of all images Usar orden aleatorio para todos los archivos subfolders also include images in subfolders during slideshows subcarpetas include images in subfolders also include images in subfolders during slideshows incluir imágenes en las subcarpetas quickinfo What to do with the quick info during slideshows información rápida hide quickinfo What to do with the quick info during slideshows ocultar información rápida music The music that is to be played during slideshows música enable music Enable music to be played during slideshows habilitar música no file selected no se ha seleccionado archivo Click to select music file Click para seleccionar archivo de música Click to change music file Click para cambiar archivo de música Common music file formats Formatos de archivo de música comunes All Files Todos los archivos Start slideshow Written on a clickable button Iniciar presentación Slideshow controls Window title Controles de la presentación startup Edit with %1 Used as in 'Edit with [application]'. %1 will be replaced with application name. Editar con %1 Open in %1 Used as in 'Open with [application]'. %1 will be replaced with application name. Abrir en %1 streaming Scan for devices Used as tooltip for button that starts a scan for Chromecast streaming devices in the local network Escaneando dispositivos Disconnect Written on button, as in 'Disconnect from connected Chromecast streaming device' Desconectar Connect Written on button, as in 'Connect to Chromecast streaming device' Conectar searching for devices... status text while searching for chromecast streaming devices in the local network buscando dispositivos... no devices found result of scan for chromecast streaming devices no se encontraron dispositivos Streaming (Chromecast) Window title Transmitiendo (Chromecast) thumbnailbar File size: Tamaño del archivo: File type: Tipo del archivo: unavailable Sorry, but this feature is not yet available on Windows. Lo sentimos, pero esta característica aún no está disponible en Windows. Feature unavailable Window title, informing user that the requested feature is currently not available Característica no disponible wallpaper Warning: %1 module not activated Advertencia: el módulo %1 no fue activado Warning: %1 not found Advertencia: no se encontró %1 Set to which screens As in: Set wallpaper to which screens En cuáles pantallas establecer Screen Used in wallpaper element Pantalla Set to which workspaces Enlightenment desktop environment handles wallpapers per workspace (different from screen) En cuáles espacios de trabajo establecer Workspace: Enlightenment desktop environment handles wallpapers per workspace (different from screen) Espacio de trabajo: Choose picture option picture option refers to how to format a pictrue when setting it as wallpaper Elija opción de imagen Other Used as in: Other Desktop Environment Otro Tool: Tool refers to a program that can be executed Herramienta: Click to choose %1 %1 is a placeholder for the name of a desktop environment (plasma, xfce, gnome, etc.) Clic para seleccionar %1 Set as Wallpaper Heading of wallpaper element ---------- Written on clickable button ---------- Window title Establecer como fondo de pantalla The image will be set to all screens at the same time. La imagen se establecerá en todas las pantallas al mismo tiempo. photoqt-2.5/python/000755 001750 001750 00000000000 14164671105 014736 5ustar00luspiluspi000000 000000 photoqt-2.5/python/python.qrc000644 001750 001750 00000000134 14145550064 016763 0ustar00luspiluspi000000 000000 chromecast.py photoqt-2.5/python/pqpy.h000644 001750 001750 00000005236 14164671105 016106 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQPY_H #define PQPY_H #include #include #include #include #include "../cplusplus/logger.h" class PQPyObject { private: PyObject *p; public: PQPyObject() : p(NULL) { } PQPyObject(PyObject* _p) : p(_p) { } ~PQPyObject() { Py_XDECREF(p); p = nullptr; } std::list asList() { size_t len = PyList_Size(p); std::list ret; for(size_t i = 0; i < len; ++i) ret.push_back(PyUnicode_AsUTF8(PyList_GET_ITEM(p,i))); return ret; } PyObject* get() { return p; } PyObject* operator=(PyObject* p2) { p = p2; return p; } operator PyObject*() { return p; } static bool catchEx(QString loc) { PyObject *check = PyErr_Occurred(); if(check != NULL) { LOG << CURDATE << loc.toStdString() << ": Python error:" << NL; PyErr_Print(); PyErr_Clear(); return true; } return false; } }; Q_DECLARE_METATYPE(PQPyObject) #endif photoqt-2.5/python/chromecast.py000644 001750 001750 00000004605 14164671072 017450 0ustar00luspiluspi000000 000000 ########################################################################## ## ## ## Copyright (C) 2011-2022 Lukas Spies ## ## Contact: https://photoqt.org ## ## ## ## This file is part of PhotoQt. ## ## ## ## PhotoQt 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. ## ## ## ## PhotoQt 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 PhotoQt. If not, see . ## ## ## ########################################################################## import pychromecast import time def getAvailable(): services, browser = pychromecast.discovery.discover_chromecasts() return [len(services), services] def getNamesIps(services): names = [] ips = [] for s in services: names.append(s.friendly_name) ips.append(s.host) return [names, ips] def connectTo(friendlyname): chromecasts, browser = pychromecast.get_listed_chromecasts(friendly_names=[friendlyname]) if len(chromecasts) == 0: return [] cast = chromecasts[0] cast.wait() mc = cast.media_controller return [cast, browser, mc] # UNTESTED def disconnectFrom(cast, browser): cast.quit_app() pychromecast.discovery.stop_discovery(browser) def streamOnDevice(ip, port, mc): mc.play_media(f"http://{ip}:{port}/{time.time()}", "image/jpg") mc.block_until_active() photoqt-2.5/qml/000755 001750 001750 00000000000 14164673376 014222 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/qml.qrc000644 001750 001750 00000021140 14156033064 015501 0ustar00luspiluspi000000 000000 mainwindow.qml mainwindow/PQImage.qml mainwindow/image/PQImageAnimated.qml mainwindow/image/PQImageNormal.qml elements/PQSlider.qml elements/PQCheckbox.qml elements/PQButton.qml elements/PQMenu.qml elements/PQMouseArea.qml elements/PQToolTip.qml elements/PQComboBox.qml elements/PQScrollBar.qml PQLoader.qml PQVariables.qml shortcuts/PQMouseShortcuts.qml shortcuts/handleshortcuts.js shortcuts/PQKeyShortcuts.qml mainwindow/PQThumbnailBar.qml filedialog/parts/PQBreadCrumbs.qml filedialog/parts/PQDevices.qml filedialog/parts/PQFileView.qml filedialog/parts/PQPlaces.qml filedialog/parts/PQPreview.qml filedialog/parts/PQRightClickMenu.qml filedialog/parts/PQStandard.qml filedialog/parts/PQTweaks.qml filedialog/PQFileDialog.qml filedialog/PQFileDialogPopout.qml menumeta/PQMainMenu.qml menumeta/PQMainMenuPopout.qml menumeta/PQMetaData.qml menumeta/PQMetaDataPopout.qml mainwindow/image/PQMovie.qml histogram/PQHistogram.qml histogram/PQHistogramPopout.qml slideshow/PQSlideShowSettings.qml slideshow/PQSlideShowSettingsPopout.qml elements/PQSpinBox.qml slideshow/PQSlideShowControls.qml slideshow/PQSlideShowControlsPopout.qml filemanagement/PQRename.qml filemanagement/PQRenamePopout.qml elements/PQLineEdit.qml filemanagement/PQDelete.qml filemanagement/PQDeletePopout.qml scale/PQScale.qml scale/PQScalePopout.qml about/PQAbout.qml about/PQAboutPopout.qml imgur/PQImgur.qml imgur/PQImgurPopout.qml elements/PQProgress.qml wallpaper/PQWallpaper.qml wallpaper/PQWallpaperPopout.qml wallpaper/ele/PQPlasma.qml wallpaper/ele/PQGnome.qml elements/PQRadioButton.qml wallpaper/ele/PQXfce.qml wallpaper/ele/PQEnlightenment.qml wallpaper/ele/PQOther.qml filter/PQFilter.qml filter/PQFilterPopout.qml mainwindow/image/PQFaceTracker.qml mainwindow/image/PQFaceTagger.qml mainwindow/PQMessage.qml shortcuts/PQKeyMouseStrings.qml settingsmanager/PQSettingsManager.qml elements/PQTabButton.qml settingsmanager/PQSettingsManagerPopout.qml settingsmanager/tabs/PQTabImageView.qml settingsmanager/tabs/PQTabInterface.qml settingsmanager/tabs/PQTabMetadata.qml settingsmanager/tabs/PQTabThumbnails.qml elements/PQSetting.qml settingsmanager/tabs/interface/PQBackground.qml settingsmanager/tabs/interface/PQClickOnEmpty.qml settingsmanager/tabs/interface/PQHotEdgeWidth.qml settingsmanager/tabs/interface/PQLanguage.qml settingsmanager/tabs/interface/PQMouseWheel.qml settingsmanager/tabs/interface/PQOverlayColor.qml settingsmanager/tabs/interface/PQPopout.qml settingsmanager/tabs/interface/PQStartupLoadLast.qml settingsmanager/tabs/interface/PQTrayIcon.qml settingsmanager/tabs/interface/PQWindowManagement.qml settingsmanager/tabs/interface/PQWindowMode.qml settingsmanager/tabs/imageview/PQAnimation.qml settingsmanager/tabs/imageview/PQFitInWindow.qml settingsmanager/tabs/imageview/PQInterpolation.qml settingsmanager/tabs/imageview/PQKeep.qml settingsmanager/tabs/imageview/PQLeftButton.qml settingsmanager/tabs/imageview/PQLoop.qml settingsmanager/tabs/imageview/PQMargin.qml settingsmanager/tabs/imageview/PQPixmapCache.qml settingsmanager/tabs/imageview/PQSort.qml settingsmanager/tabs/imageview/PQTransparencyMarker.qml settingsmanager/tabs/imageview/PQZoomSpeed.qml settingsmanager/tabs/thumbnails/PQCache.qml settingsmanager/tabs/thumbnails/PQCenter.qml settingsmanager/tabs/thumbnails/PQDisable.qml settingsmanager/tabs/thumbnails/PQLiftUp.qml settingsmanager/tabs/thumbnails/PQPosition.qml settingsmanager/tabs/thumbnails/PQSize.qml settingsmanager/tabs/thumbnails/PQSpacing.qml settingsmanager/tabs/thumbnails/PQThreads.qml settingsmanager/tabs/thumbnails/PQVisible.qml settingsmanager/tabs/thumbnails/PQFilenameLabel.qml settingsmanager/tabs/thumbnails/PQFilenameOnly.qml elements/PQTile.qml settingsmanager/tabs/metadata/PQGPSMap.qml settingsmanager/tabs/metadata/PQHotEdge.qml settingsmanager/tabs/metadata/PQMetaData.qml settingsmanager/tabs/metadata/PQOpacity.qml settingsmanager/tabs/metadata/PQRotation.qml settingsmanager/tabs/metadata/PQFaceTags.qml settingsmanager/tabs/metadata/PQFaceTagsVisibility.qml settingsmanager/tabs/metadata/PQFaceTagsFontSize.qml settingsmanager/tabs/metadata/PQFaceTagsBorder.qml elements/PQHorizontalLine.qml settingsmanager/tabs/PQTabShortcuts.qml settingsmanager/tabs/PQTabFileTypes.qml settingsmanager/tabs/shortcuts/PQContainer.qml shortcuts/mouseshortcuts.js filemanagement/PQCopyMove.qml mainwindow/PQLoading.qml settingsmanager/tabs/interface/PQContextMenu.qml settingsmanager/tabs/filetypes/PQVideo.qml settingsmanager/tabs/filetypes/PQPoppler.qml settingsmanager/tabs/filetypes/PQLibArchive.qml settingsmanager/tabs/filetypes/PQFileTypes.qml filemanagement/PQSaveAs.qml filemanagement/PQSaveAsPopout.qml unavailable/PQUnavailable.qml unavailable/PQUnavailablePopout.qml mainwindow/PQWindowButtons.qml PQModel.qml mainwindow/PQLabels.qml mainwindow/PQNavigation.qml settingsmanager/tabs/interface/PQNavigation.qml settingsmanager/tabs/interface/PQLabels.qml mainwindow/image/PQFaceTagsUnsupported.qml PQTrayIcon.qml PQCmdReceived.qml settingsmanager/tabs/shortcuts/PQExternalContainer.qml settingsmanager/tabs/shortcuts/PQExternalShortcutTile.qml settingsmanager/tabs/shortcuts/PQNewShortcut.qml settingsmanager/tabs/shortcuts/PQShortcutTile.qml settingsmanager/PQRestoreDefaults.qml mainwindow/PQContextMenu.qml settingsmanager/tabs/thumbnails/PQExcludeFolders.qml elements/PQTextArea.qml startup/PQStartupUpdate.qml startup/PQStartupFreshInstall.qml chromecast/PQChromecast.qml chromecast/PQChromecastPopout.qml logging/PQLogging.qml photoqt-2.5/qml/PQTrayIcon.qml000644 001750 001750 00000004430 14164673357 016726 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import Qt.labs.platform 1.0 SystemTrayIcon { id: trayicon visible: PQSettings.interfaceTrayIcon>0 iconSource: "/other/icon.png" menu: Menu { id: mn MenuItem { text: "Hide/Show PhotoQt" onTriggered: { PQSettings.interfaceTrayIcon = 1 toplevel.visible = !toplevel.visible } } MenuItem { text: "Quit PhotoQt" onTriggered: { toplevel.quitPhotoQt() } } Component.onCompleted: mn.visible = false } onActivated: { PQSettings.interfaceTrayIcon = 1 toplevel.visible = !toplevel.visible } } photoqt-2.5/qml/filter/000755 001750 001750 00000000000 14164672062 015476 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/filter/PQFilter.qml000644 001750 001750 00000022517 14164672062 017706 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Dialogs 1.2 import QtGraphicalEffects 1.0 import "../elements" //import "../loadfiles.js" as LoadFiles import "../shortcuts/handleshortcuts.js" as HandleShortcuts Item { id: filter_top width: parentWidth height: parentHeight property int parentWidth: toplevel.width property int parentHeight: toplevel.height opacity: 0 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } visible: opacity!=0 enabled: visible Item { id: dummyitem width: 0 height: 0 } ShaderEffectSource { id: effectSource sourceItem: PQSettings.interfacePopoutFilter ? dummyitem : imageitem anchors.fill: parent sourceRect: Qt.rect(parent.x,parent.y,parent.width,parent.height) } FastBlur { id: blur anchors.fill: effectSource source: effectSource radius: 32 } Rectangle { anchors.fill: parent color: "#ee000000" PQMouseArea { anchors.fill: parent hoverEnabled: true enabled: !PQSettings.interfacePopoutFilter onClicked: button_cancel.clicked() } Item { id: insidecont y: ((parent.height-height)/2) width: parent.width height: childrenRect.height clip: true PQMouseArea { anchors.fill: parent hoverEnabled: true } Column { spacing: 20 Text { id: heading x: (insidecont.width-width)/2 color: "white" font.pointSize: 20 font.bold: true text: em.pty+qsTranslate("filter", "Filter images in current directory") } Text { id: description1 x: 10 width: insidecont.width-20 horizontalAlignment: Text.AlignHCenter wrapMode: Text.WordWrap color: "white" font.pointSize: 12 text: em.pty+qsTranslate("filter", "Enter here the terms you want to filter the images by. Separate multiple terms by a space.") } Text { id: description2 x: 10 width: insidecont.width-20 horizontalAlignment: Text.AlignHCenter wrapMode: Text.WordWrap color: "white" font.pointSize: 12 text: em.pty+qsTranslate("filter", "If you want to filter by file extension, start the term with a dot.") } PQLineEdit { id: filteredit x: (insidecont.width-width)/2 width: 300 height: 40 placeholderText: em.pty+qsTranslate("filter", "Enter filter term") } Item { id: butcont x: 0 width: insidecont.width height: childrenRect.height Row { spacing: 5 x: (parent.width-width)/2 PQButton { id: button_ok //: Written on a clickable button - please keep short text: em.pty+qsTranslate("filter", "Filter") onClicked: { filter_top.opacity = 0 variables.visibleItem = "" if(filteredit.text == "") removeFilter() else setFilter(filteredit.text) } } PQButton { id: button_cancel text: genericStringCancel onClicked: { filter_top.opacity = 0 variables.visibleItem = "" } } PQButton { scale: 0.8 id: button_removefilter //: Written on a clickable button - please keep short text: em.pty+qsTranslate("filter", "Remove filter") renderType: Text.QtRendering onClicked: { filter_top.opacity = 0 variables.visibleItem = "" removeFilter() } } } } } } Connections { target: loader onFilterPassOn: { if(what == "show") { if(filefoldermodel.current == -1 && !filefoldermodel.filterCurrentlyActive) return opacity = 1 variables.visibleItem = "filter" filteredit.setFocus() } else if(what == "hide") { button_cancel.clicked() } else if(what == "removeFilter") { removeFilter() } else if(what == "keyevent") { if(param[0] == Qt.Key_Escape) button_cancel.clicked() else if(param[0] == Qt.Key_Enter || param[0] == Qt.Key_Return) button_ok.clicked() } } } } Image { x: 5 y: 5 width: 15 height: 15 source: "/popin.png" opacity: popinmouse.containsMouse ? 1 : 0.4 Behavior on opacity { NumberAnimation { duration: 200 } } PQMouseArea { id: popinmouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: PQSettings.interfacePopoutFilter ? //: Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface em.pty+qsTranslate("popinpopout", "Merge into main interface") : //: Tooltip of small button to show an element in its own window (i.e., not merged into main interface) em.pty+qsTranslate("popinpopout", "Move to its own window") onClicked: { if(PQSettings.interfacePopoutFilter) filter_window.storeGeometry() button_cancel.clicked() PQSettings.interfacePopoutFilter = !PQSettings.interfacePopoutFilter HandleShortcuts.executeInternalFunction("__filterImages") } } } function setFilter(term) { var fileNameFilter = [] var fileEndingFilter = [] // filter out search terms and search suffixes var spl = filteredit.text.split(" ") for(var iSpl = 0; iSpl < spl.length; ++iSpl) { if(spl[iSpl][0] == ".") fileEndingFilter.push(spl[iSpl].slice(1)) else { fileNameFilter.push(spl[iSpl]) } } filefoldermodel.nameFilters = fileEndingFilter filefoldermodel.filenameFilters = fileNameFilter } function removeFilter() { filteredit.text = "" filefoldermodel.nameFilters = [] filefoldermodel.filenameFilters = [] } } photoqt-2.5/qml/filter/PQFilterPopout.qml000644 001750 001750 00000007207 14164672055 021116 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: filter_window //: Window title title: em.pty+qsTranslate("filter", "Filter") Component.onCompleted: { filter_window.setX(windowgeometry.filterWindowGeometry.x) filter_window.setY(windowgeometry.filterWindowGeometry.y) filter_window.setWidth(windowgeometry.filterWindowGeometry.width) filter_window.setHeight(windowgeometry.filterWindowGeometry.height) } minimumWidth: 200 minimumHeight: 300 modality: Qt.ApplicationModal objectName: "filterpopout" onClosing: { storeGeometry() if(variables.visibleItem == "filter") variables.visibleItem = "" } visible: PQSettings.interfacePopoutFilter&&curloader.item.opacity==1 flags: Qt.WindowStaysOnTopHint Connections { target: PQSettings onInterfacePopoutFilterChanged: { if(!PQSettings.interfacePopoutFilter) filter_window.visible = Qt.binding(function() { return PQSettings.interfacePopoutFilter&&curloader.item.opacity==1; }) } } color: "#88000000" Loader { id: curloader source: "PQFilter.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return filter_window.width }) item.parentHeight = Qt.binding(function() { return filter_window.height }) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(filter_window.objectName) } function storeGeometry() { windowgeometry.filterWindowGeometry = Qt.rect(filter_window.x, filter_window.y, filter_window.width, filter_window.height) windowgeometry.filterWindowMaximized = (filter_window.visibility==Window.Maximized) } } photoqt-2.5/qml/unavailable/000755 001750 001750 00000000000 14164673273 016501 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/unavailable/PQUnavailable.qml000644 001750 001750 00000010146 14164673273 021702 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtGraphicalEffects 1.0 import "../elements" Item { id: unavailable_top width: parentWidth height: parentHeight property int parentWidth: toplevel.width property int parentHeight: toplevel.height opacity: 0 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } visible: opacity!=0 enabled: visible PQMouseArea { anchors.fill: parent onClicked: buttonClose.clicked() } PQMouseArea { anchors.fill: contcol anchors.margins: -50 } Item { id: dummyitem width: 0 height: 0 } ShaderEffectSource { id: effectSource sourceItem: PQSettings.interfacePopoutUnavailable ? dummyitem : imageitem anchors.fill: parent sourceRect: Qt.rect(parent.x,parent.y,parent.width,parent.height) } FastBlur { id: blur anchors.fill: effectSource source: effectSource radius: 32 } Rectangle { anchors.fill: parent color: "#ee000000" } Column { id: contcol x: (parent.width-width)/2 y: (parent.height-height)/2 width: Math.min(600, parent.width-50) height: childrenRect.height spacing: 10 Text { width: parent.width horizontalAlignment: Text.AlignHCenter color: "white" font.bold: true font.pointSize: 25 text: em.pty+qsTranslate("unavailable", "Sorry, but this feature is not yet available on Windows.") wrapMode: Text.WrapAtWordBoundaryOrAnywhere } Item { width: 1; height: 50 } PQButton { id: buttonClose x: (parent.width-width)/2 text: genericStringClose scale: 1.5 renderType: Text.QtRendering onClicked: { if(variables.visibleItem == "unavailable") { unavailable_top.opacity = 0 variables.visibleItem = "" } } } } Connections { target: loader onUnavailablePassOn: { if(what == "show") { unavailable_top.opacity = 1 variables.visibleItem = "unavailable" } else if(what == "hide") { buttonClose.clicked() } else if(what == "keyevent") { if(param[0] == Qt.Key_Escape) buttonClose.clicked() } } } } photoqt-2.5/qml/unavailable/PQUnavailablePopout.qml000644 001750 001750 00000011163 14164673270 023106 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: unavailable_window //: Window title, informing user that the requested feature is currently not available title: em.pty+qsTranslate("unavailable", "Feature unavailable") Component.onCompleted: { unavailable_window.setX(windowgeometry.unavailableWindowGeometry.x) unavailable_window.setY(windowgeometry.unavailableWindowGeometry.y) unavailable_window.setWidth(windowgeometry.unavailableWindowGeometry.width) unavailable_window.setHeight(windowgeometry.unavailableWindowGeometry.height) } modality: Qt.ApplicationModal objectName: "unavailablepopout" onClosing: { storeGeometry() if(variables.visibleItem == "unavailablepopout") variables.visibleItem = "" } visible: false flags: Qt.WindowStaysOnTopHint color: "#ee000000" Column { id: contcol x: (parent.width-width)/2 y: (parent.height-height)/2 width: parent.width-50 height: childrenRect.height spacing: 10 Text { width: parent.width horizontalAlignment: Text.AlignHCenter color: "white" font.bold: true font.pointSize: 20 text: em.pty+qsTranslate("unavailable", "Sorry, but this feature is not yet available on Windows.") wrapMode: Text.WrapAtWordBoundaryOrAnywhere } Item { width: 1; height: 50 } PQButton { id: buttonClose x: (parent.width-width)/2 text: genericStringClose scale: 1.5 onClicked: { if(variables.visibleItem == "unavailablepopout") { unavailable_window.visible = false variables.visibleItem = "" } } } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(unavailable_window.objectName) } Connections { target: loader onUnavailablePopoutPassOn: { if(what == "show" && variables.visibleItem == "") { unavailable_window.visible = true variables.visibleItem = "unavailablepopout" } else if(what == "keyevent") { if(param[0] == Qt.Key_Escape || param[0] == Qt.Key_Enter || param[0] == Qt.Key_Return) { unavailable_window.visible = false variables.visibleItem = "" } } } } function storeGeometry() { windowgeometry.unavailableWindowGeometry = Qt.rect(unavailable_window.x, unavailable_window.y, unavailable_window.width, unavailable_window.height) windowgeometry.unavailableWindowMaximized = (unavailable_window.visibility==Window.Maximized) } } photoqt-2.5/qml/PQVariables.qml000644 001750 001750 00000006046 14164673354 017110 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "shortcuts/handleshortcuts.js" as HandleShortcuts Item { property string visibleItem: "" property real currentZoomLevel: 1 property real currentRotationAngle: 0 property real currentPaintedZoomLevel: 1 property string openCurrentDirectory: PQSettings.openfileKeepLastLocation ? handlingFileDialog.getLastLocation() : handlingFileDir.getHomeDir() property point mousePos: Qt.point(-1, -1) property int metaDataWidthWhenKeptOpen: 0 property bool slideShowActive: false property bool faceTaggingActive: false property var zoomRotationMirror: ({}) property bool settingsManagerExpertMode: false property bool videoControlsVisible: false property bool chromecastConnected: false property string chromecastName: "" Connections { target: PQSettings onInterfacePopoutMainMenuChanged: loader.ensureItIsReady("mainmenu") onInterfacePopoutMetadataChanged: loader.ensureItIsReady("metadata") onInterfacePopoutHistogramChanged: loader.ensureItIsReady("histogram") onInterfacePopoutSlideShowSettingsChanged: { if(variables.visibleItem == "slideshowsettings") { loader.ensureItIsReady("slideshowsettings") loader.show("slideshowsettings") } } } Connections { target: PQKeyPressMouseChecker onReceivedMouseMove: { mousePos = pos } } } photoqt-2.5/qml/menumeta/000755 001750 001750 00000000000 14164673463 016032 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/menumeta/PQMetaData.qml000644 001750 001750 00000036517 14164672275 020502 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../elements" Rectangle { id: metadata_top color: Qt.rgba(0, 0, 0, PQSettings.metadataElementOpacity/256) Behavior on color { ColorAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } border.color: "#55bbbbbb" border.width: 1 property int parentWidth: toplevel.width property int parentHeight: toplevel.height width: (PQSettings.interfacePopoutMetadata ? parentWidth : PQSettings.metadataElementWidth) height: parentHeight+2 x: -1 y: -1 opacity: 0 visible: opacity!=0 Behavior on opacity { NumberAnimation { duration: PQSettings.interfacePopoutMetadata ? 0 : PQSettings.imageviewAnimationDuration*100 } } property bool resizePressed: false Connections { target: variables onMousePosChanged: { if(PQSettings.interfacePopoutMetadata || (keepopen.checked && metadata_top.visible)) return if(metadata_top.visible && !resizePressed && variables.mousePos.x > width+5) metadata_top.opacity = 0 else if(!metadata_top.visible && variables.mousePos.x < (2*PQSettings.interfaceHotEdgeSize+5) && PQSettings.metadataElementHotEdge && !variables.faceTaggingActive) metadata_top.opacity = 1 } } Component.onCompleted: { if(PQSettings.interfacePopoutMetadata) metadata_top.opacity = 1 } MouseArea { anchors.fill: parent hoverEnabled: true acceptedButtons: Qt.RightButton|Qt.MiddleButton|Qt.LeftButton PQMouseArea { anchors { right: parent.right top: parent.top bottom: parent.bottom } width: 5 cursorShape: Qt.SizeHorCursor enabled: !PQSettings.interfacePopoutMetadata tooltip: em.pty+qsTranslate("metadata", "Click and drag to resize meta data") property int oldMouseX onPressed: { metadata_top.resizePressed = true oldMouseX = mouse.x } onReleased: { metadata_top.resizePressed = false PQSettings.metadataElementWidth = metadata_top.width } onPositionChanged: { if (pressed) { var w = metadata_top.width + (mouse.x-oldMouseX) if(w < 2*toplevel.width/3) metadata_top.width = w } } } } property var allMetaData: [ //: Please keep string short! em.pty+qsTranslate("metadata", "File name"), handlingGeneral.escapeHTML(handlingFileDir.getFileNameFromFullPath(filefoldermodel.currentFilePath)), PQSettings.metadataFilename, //: The dimensions of the loaded image. Please keep string short! em.pty+qsTranslate("metadata", "Dimensions"), cppmetadata.dimensions, PQSettings.metadataDimensions, //: Used as in "Image 3/16". The numbers (position of image in folder) are added on automatically. Please keep string short! em.pty+qsTranslate("metadata", "Image #/#"), ((filefoldermodel.current+1)+"/"+filefoldermodel.countMainView), PQSettings.metadataImageNumber, //: Please keep string short! em.pty+qsTranslate("metadata", "File size"), cppmetadata.fileSize, PQSettings.metadataFileSize, //: Please keep string short! em.pty+qsTranslate("metadata", "File type"), (filefoldermodel.current==-1 ? "" : handlingFileDir.getFileType(filefoldermodel.entriesMainView[filefoldermodel.current])), PQSettings.metadataFileType, "", "", true, //: Exif image metadata: the make of the camera used to take the photo. Please keep string short! em.pty+qsTranslate("metadata", "Make"), cppmetadata.exifImageMake, PQSettings.metadataMake, //: Exif image metadata: the model of the camera used to take the photo. Please keep string short! em.pty+qsTranslate("metadata", "Model"), cppmetadata.exifImageModel, PQSettings.metadataModel, //: Exif image metadata: the software used to create the photo. Please keep string short! em.pty+qsTranslate("metadata", "Software"), cppmetadata.exifImageSoftware, PQSettings.metadataSoftware, "", "", true, //: Exif image metadata: when the photo was taken. Please keep string short! em.pty+qsTranslate("metadata", "Time Photo was Taken"), cppmetadata.exifPhotoDateTimeOriginal, PQSettings.metadataTime, //: Exif image metadata: how long the sensor was exposed to the light. Please keep string short! em.pty+qsTranslate("metadata", "Exposure Time"), cppmetadata.exifPhotoExposureTime, PQSettings.metadataExposureTime, //: Exif image metadata: the flash setting when the photo was taken. Please keep string short! em.pty+qsTranslate("metadata", "Flash"), cppmetadata.exifPhotoFlash, PQSettings.metadataFlash, "ISO", cppmetadata.exifPhotoISOSpeedRatings, PQSettings.metadataIso, //: Exif image metadata: the specific scene type the camera used for the photo. Please keep string short! em.pty+qsTranslate("metadata", "Scene Type"), cppmetadata.exifPhotoSceneCaptureType, PQSettings.metadataSceneType, //: Exif image metadata: https://en.wikipedia.org/wiki/Focal_length . Please keep string short! em.pty+qsTranslate("metadata", "Focal Length"), cppmetadata.exifPhotoFocalLength, PQSettings.metadataFLength, //: Exif image metadata: https://en.wikipedia.org/wiki/F-number . Please keep string short! em.pty+qsTranslate("metadata", "F Number"), cppmetadata.exifPhotoFNumber, PQSettings.metadataFNumber, //: Exif image metadata: What type of light the camera detected. Please keep string short! em.pty+qsTranslate("metadata", "Light Source"), cppmetadata.exifPhotoLightSource, PQSettings.metadataLightSource, "","", true, //: IPTC image metadata: A description of the image by the user/software. Please keep string short! em.pty+qsTranslate("metadata", "Keywords"), cppmetadata.iptcApplication2Keywords, PQSettings.metadataKeywords, //: IPTC image metadata: The CITY and COUNTRY the imge was taken in. Please keep string short! em.pty+qsTranslate("metadata", "Location"), cppmetadata.iptcLocation, PQSettings.metadataLocation, //: IPTC image metadata. Please keep string short! em.pty+qsTranslate("metadata", "Copyright"), cppmetadata.iptcApplication2Copyright, PQSettings.metadataCopyright, "","", true, //: Exif image metadata. Please keep string short! em.pty+qsTranslate("metadata", "GPS Position"), cppmetadata.exifGPS, PQSettings.metadataGps ] // HEADING OF RECTANGLE Text { id: heading anchors { top: parent.top left: parent.left right: parent.right topMargin: 10 } horizontalAlignment: Qt.AlignHCenter color: "#ffffff" font.pointSize: 15 font.bold: true //: This is the heading of the metadata element text: em.pty+qsTranslate("metadata", "Metadata") } Rectangle { id: separatorTop anchors { top: heading.bottom left: parent.left right: parent.right topMargin: 10 } color: "#cccccc" height: 1 } // Label at first start-up Text { anchors { top: separatorTop.bottom left: parent.left right: parent.right bottom: separatorBottom.bottom margins: 10 } visible: filefoldermodel.current==-1 horizontalAlignment: Qt.AlignHCenter verticalAlignment: Qt.AlignVCenter color: "#888888" font.bold: true font.pointSize: 18 wrapMode: Text.WordWrap text: em.pty+qsTranslate("metadata", "No File Loaded") } ListView { id: view anchors { top: separatorTop.bottom left: parent.left right: parent.right bottom: separatorBottom.top margins: 10 } visible: filefoldermodel.current!==-1 ScrollBar.vertical: PQScrollBar { id: scroll } model: allMetaData.length/3 delegate: Item { width: parent.width height: ((allMetaData[3*index+1] !== "" && allMetaData[3*index+2]) || (allMetaData[3*index]===""&&allMetaData[3*index+1]==="")) ? val.height : 0 Text { id: val; visible: (allMetaData[3*index+1] !== "" && allMetaData[3*index+2]) || (allMetaData[3*index]===""&&allMetaData[3*index+1]==="") color: "#ffffff" lineHeight: ((allMetaData[3*index] == "" ? 0.8 : 1.3)) textFormat: Text.RichText width: parent.width wrapMode: Text.WordWrap text: (allMetaData[3*index] !== "") ? ("" + allMetaData[3*index] + ": " + allMetaData[3*index +1]) : "" } PQMouseArea { anchors.fill: parent hoverEnabled: true tooltip: (index==((allMetaData.length/3) -1)) ? em.pty+qsTranslate("metadata", "Click to open GPS position with online map") : ((visible&&allMetaData[3*index]!="") ? "" + allMetaData[3*index] + "
" + allMetaData[3*index+1] : "") cursorShape: index==(allMetaData.length/3 -1) ? Qt.PointingHandCursor : Qt.ArrowCursor onClicked: { if(index == allMetaData.length/3 -1) { if(PQSettings.metadataGpsMap == "bing.com/maps") Qt.openUrlExternally("http://www.bing.com/maps/?sty=r&q=" + allMetaData[3*index+1] + "&obox=1") else if(PQSettings.metadataGpsMap == "maps.google.com") Qt.openUrlExternally("http://maps.google.com/maps?t=h&q=" + allMetaData[3*index+1]) else { // For openstreetmap.org, we need to convert the GPS location into decimal format var one = allMetaData[3*index+1].split(", ")[0] var one_dec = 1*one.split("°")[0] + (1*(one.split("°")[1].split("'")[0]))/60 + (1*(one.split("'")[1].split("''")[0]))/3600 if(one.indexOf("S") !== -1) one_dec *= -1; var two = allMetaData[3*index+1].split(", ")[1] var two_dec = 1*two.split("°")[0] + (1*(two.split("°")[1].split("'")[0]))/60 + (1*(two.split("'")[1].split("''")[0]))/3600 if(two.indexOf("W") !== -1) two_dec *= -1; Qt.openUrlExternally("http://www.openstreetmap.org/#map=15/" + "" + one_dec + "/" + two_dec) } } } } } } Rectangle { id: separatorBottom anchors { bottom: keepopen.top left: parent.left right: parent.right bottomMargin: 5 } height: PQSettings.interfacePopoutMetadata ? 0 : 1 color: "#cccccc" } PQCheckbox { id: keepopen visible: !PQSettings.interfacePopoutMetadata anchors { right: parent.right bottom: parent.bottom rightMargin: 5 bottomMargin: 5 } onCheckedChanged: variables.metaDataWidthWhenKeptOpen = (checked ? metadata_top.width : 0) //: Used as in: Keep the metadata element open even if the cursor leaves it text: PQSettings.interfacePopoutMetadata ? "" : (em.pty+qsTranslate("metadata", "Keep Open")) } Image { x: 5 y: 5 width: 15 height: 15 source: "/popin.png" opacity: popinmouse.containsMouse ? 1 : 0.4 Behavior on opacity { NumberAnimation { duration: 200 } } PQMouseArea { id: popinmouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: PQSettings.interfacePopoutAbout ? //: Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface em.pty+qsTranslate("popinpopout", "Merge into main interface") : //: Tooltip of small button to show an element in its own window (i.e., not merged into main interface) em.pty+qsTranslate("popinpopout", "Move to its own window") onClicked: { if(PQSettings.interfacePopoutMetadata==0) { keepopen.checked = false variables.metaDataWidthWhenKeptOpen = 0 } else metadata_window.storeGeometry() PQSettings.interfacePopoutMetadata = !PQSettings.interfacePopoutMetadata } } } Connections { target: loader onMetadataPassOn: { if(what == "toggleKeepOpen") toggleKeepOpen() else if(what == "toggle") { toggle() } } } function toggle() { if(PQSettings.interfacePopoutMetadata) return keepopen.checked = false if(metadata_top.opacity == 1) metadata_top.opacity = 0 else metadata_top.opacity = 1 } function toggleKeepOpen() { if(PQSettings.interfacePopoutMetadata) return keepopen.checked = !keepopen.checked if(metadata_top.opacity == 1 && !keepopen.checked) metadata_top.opacity = 0 else if(keepopen.checked) metadata_top.opacity = 1 } } photoqt-2.5/qml/menumeta/PQMetaDataPopout.qml000644 001750 001750 00000006640 14164672304 021674 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: metadata_window //: Window title title: em.pty+qsTranslate("metadata", "Metadata") Component.onCompleted: { metadata_window.x = windowgeometry.metaDataWindowGeometry.x metadata_window.y = windowgeometry.metaDataWindowGeometry.y metadata_window.width = windowgeometry.metaDataWindowGeometry.width metadata_window.height = windowgeometry.metaDataWindowGeometry.height } minimumWidth: 100 minimumHeight: 600 modality: Qt.NonModal objectName: "metadatapopout" onClosing: { storeGeometry() PQSettings.interfacePopoutMetadata = false } Connections { target: toplevel onClosing: { storeGeometry() } } visible: PQSettings.interfacePopoutMetadata flags: Qt.WindowStaysOnTopHint color: "#88000000" Loader { source: "PQMetaData.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return metadata_window.width }) item.parentHeight = Qt.binding(function() { return metadata_window.height }) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(metadata_window.objectName) } function storeGeometry() { windowgeometry.metaDataWindowGeometry = Qt.rect(metadata_window.x, metadata_window.y, metadata_window.width, metadata_window.height) windowgeometry.metaDataWindowMaximized = (metadata_window.visibility==Window.Maximized) } } photoqt-2.5/qml/menumeta/PQMainMenu.qml000644 001750 001750 00000050156 14164673463 020526 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../elements" import "../shortcuts/handleshortcuts.js" as HandleShortcuts Rectangle { id: mainmenu_top color: "#ee000000" property int parentWidth: toplevel.width property int parentHeight: toplevel.height width: (PQSettings.interfacePopoutMainMenu ? parentWidth : PQSettings.mainmenuElementWidth) height: parentHeight+2 x: parentWidth-width+1 y: -1 border.color: "#55bbbbbb" border.width: 1 opacity: 0 visible: opacity != 0 Behavior on opacity { NumberAnimation { duration: PQSettings.interfacePopoutMainMenu ? 0 : PQSettings.imageviewAnimationDuration*100 } } property bool resizePressed: false Connections { target: variables onMousePosChanged: { if(PQSettings.interfacePopoutMainMenu) return if(mainmenu_top.visible && !resizePressed && variables.mousePos.x < toplevel.width-width-5) mainmenu_top.opacity = 0 else if(!mainmenu_top.visible && !variables.slideShowActive && !variables.faceTaggingActive && variables.mousePos.x > toplevel.width-(2*PQSettings.interfaceHotEdgeSize+5)) mainmenu_top.opacity = 1 } onSlideShowActiveChanged: { if(variables.slideShowActive) mainmenu_top.opacity = 0 } onFaceTaggingActiveChanged: { if(variables.faceTaggingActive) mainmenu_top.opacity = 0 } } Component.onCompleted: { if(PQSettings.interfacePopoutMainMenu) mainmenu_top.opacity = 1 readExternalContextmenu() } MouseArea { anchors.fill: parent; hoverEnabled: true acceptedButtons: Qt.RightButton|Qt.MiddleButton|Qt.LeftButton PQMouseArea { anchors { left: parent.left top: parent.top bottom: parent.bottom } width: 5 enabled: !PQSettings.interfacePopoutMainMenu hoverEnabled: true cursorShape: Qt.SizeHorCursor tooltip: em.pty+qsTranslate("MainMenu", "Click and drag to resize main menu") property int oldMouseX onPressed: { mainmenu_top.resizePressed = true oldMouseX = mouse.x } onReleased: { mainmenu_top.resizePressed = false PQSettings.mainmenuElementWidth = mainmenu_top.width } onPositionChanged: { if (pressed) { var w = mainmenu_top.width + (oldMouseX-mouse.x) if(w < 2*toplevel.width/3) mainmenu_top.width = w } } } } property var allitems_static: [ [["heading","",""]], //: This is an entry in the main menu on the right. Please keep short! [["__open", "open", em.pty+qsTranslate("MainMenu", "Open file (browse images)"), "hide"]], //: This is an entry in the main menu on the right. Please keep short! [["__settings", "settings", em.pty+qsTranslate("MainMenu", "Settings"), "hide"]], //: This is an entry in the main menu on the right. Please keep short! [["__about", "about", em.pty+qsTranslate("MainMenu", "About PhotoQt"), "hide"]], //: This is an entry in the main menu on the right. Please keep short! [["__quit", "quit", em.pty+qsTranslate("MainMenu", "Quit"), "hide"]], [["heading","",""]], //: This is an entry in the main menu on the right. Please keep short! [["slideshow","slideshow",em.pty+qsTranslate("MainMenu", "Slideshow")], //: This is an entry in the main menu on the right, used as in: setting up a slideshow. Please keep short! ["__slideshow","",em.pty+qsTranslate("MainMenu", "setup"), "hide"], //: This is an entry in the main menu on the right, used as in: quickstarting a slideshow. Please keep short! ["__slideshowQuick","",em.pty+qsTranslate("MainMenu", "quickstart"), "hide"]], //: This is an entry in the main menu on the right. Please keep short! [["__filterImages", "filter", em.pty+qsTranslate("MainMenu", "Filter images in folder"), "hide"]], //: This is an entry in the main menu on the right, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! [["__chromecast", "chromecast", em.pty+qsTranslate("MainMenu", "Streaming (Chromecast)"), "hide"]], //: This is an entry in the main menu on the right. Please keep short! [["__defaultFileManager","open",em.pty+qsTranslate("MainMenu", "Open in default file manager"), "donthide"]], [["heading","",""]], //: This is an entry in the main menu on the right. Please keep short! [["__wallpaper", "settings", em.pty+qsTranslate("MainMenu", "Wallpaper"), "hide"]], //: This is an entry in the main menu on the right. Please keep short! [["__showMetaData", "metadata", em.pty+qsTranslate("MainMenu", "Show/Hide metadata"), "donthide"]], //: This is an entry in the main menu on the right. Please keep short! [["__histogram", "histogram", em.pty+qsTranslate("MainMenu", "Show/Hide histogram"), "donthide"]], //: This is an entry in the main menu on the right. Please keep short! [["__tagFaces", "faces", em.pty+qsTranslate("MainMenu", "Face tagging mode"), "hide"]], //: This is an entry in the main menu on the right. Please keep short! [["__clipboard", "clipboard", em.pty+qsTranslate("MainMenu", "Copy to clipboard"), "hide"]], //: This is an entry in the main menu on the right. Please keep short! [["__scale","scale",em.pty+qsTranslate("MainMenu", "Scale image"), "hide"]], [["heading","",""]], //: This is an entry in the main menu on the right, used as in: Go To some image. Please keep short! [["","goto",em.pty+qsTranslate("MainMenu", "Go to")], //: This is an entry in the main menu on the right, used as in: go to previous image. Please keep short! ["__prev","",em.pty+qsTranslate("MainMenu", "previous"), "donthide"], //: This is an entry in the main menu on the right, used as in: go to next image. Please keep short! ["__next","",em.pty+qsTranslate("MainMenu", "next"), "donthide"], //: This is an entry in the main menu on the right, used as in: go to first image. Please keep short! ["__goToFirst","",em.pty+qsTranslate("MainMenu", "first"), "donthide"], //: This is an entry in the main menu on the right, used as in: go to last image. Please keep short! ["__goToLast","",em.pty+qsTranslate("MainMenu", "last"), "donthide"]], //: This is an entry in the main menu on the right, used as in: Zoom image. Please keep short! [["zoom","zoom",em.pty+qsTranslate("MainMenu", "Zoom")], ["__zoomIn","","+", "donthide"], ["__zoomOut","","-", "donthide"], ["__zoomReset","","0", "donthide"], ["__zoomActual","","1:1", "donthide"]], //: This is an entry in the main menu on the right, used as in: Rotate image. Please keep short! [["rotate","rotate",em.pty+qsTranslate("MainMenu", "Rotate")], //: This is an entry in the main menu on the right, used as in: Rotate image left. Please keep short! ["__rotateL","",em.pty+qsTranslate("MainMenu", "left"), "donthide"], //: This is an entry in the main menu on the right, used as in: Rotate image right. Please keep short! ["__rotateR","",em.pty+qsTranslate("MainMenu", "right"), "donthide"], //: This is an entry in the main menu on the right, used as in: Reset rotation of image. Please keep short! ["__rotate0","",em.pty+qsTranslate("MainMenu", "reset"), "donthide"]], //: This is an entry in the main menu on the right, used as in: Flip/Mirror image. Please keep short! [["flip","flip",em.pty+qsTranslate("MainMenu", "Flip")], //: This is an entry in the main menu on the right, used as in: Flip/Mirror image horizontally. Please keep short! ["__flipH","",em.pty+qsTranslate("MainMenu", "horizontal"), "donthide"], //: This is an entry in the main menu on the right, used as in: Flip/Mirror image vertically. Please keep short! ["__flipV","",em.pty+qsTranslate("MainMenu", "vertical"), "donthide"], //: This is an entry in the main menu on the right, used as in: Reset flip/mirror of image. Please keep short! ["__flipReset","",em.pty+qsTranslate("MainMenu", "reset"), "donthide"]], //: This is an entry in the main menu on the right, used to refer to the current file (specifically the file, not directly the image). Please keep short! [["","copy",em.pty+qsTranslate("MainMenu", "File")], //: This is an entry in the main menu on the right, used as in: rename file. Please keep short! ["__rename","",em.pty+qsTranslate("MainMenu", "rename"), "hide"], //: This is an entry in the main menu on the right, used as in: copy file. Please keep short! ["__copy","",em.pty+qsTranslate("MainMenu", "copy"), "hide"], //: This is an entry in the main menu on the right, used as in: move file. Please keep short! ["__move","",em.pty+qsTranslate("MainMenu", "move"), "hide"], //: This is an entry in the main menu on the right, used as in: delete file. Please keep short! ["__delete","",em.pty+qsTranslate("MainMenu", "delete"), "hide"]], [["heading","",""]], //: This is an entry in the main menu on the right. Please keep short! [["__logging", "logging", em.pty+qsTranslate("MainMenu", "Show log/debug messages"), "hide"]] ] property var allitems_external: [] property var allitems: allitems_static.concat(allitems_external) Text { id: heading y: 10 x: (parent.width-width)/2 font.pointSize: 15 color: "white" font.bold: true //: This is the heading of the main menu element text: em.pty+qsTranslate("MainMenu", "Main Menu") } Rectangle { id: spacingbelowheader x: 5 y: heading.y+heading.height+10 height: 1 width: parent.width-10 color: "#88ffffff" } ListView { id: mainlistview x: 10 y: spacingbelowheader.y + spacingbelowheader.height+10 height: parent.height-y-(helptext.height+5) width: parent.width-scroll.width model: allitems.length delegate: maindeleg clip: true orientation: ListView.Vertical ScrollBar.vertical: PQScrollBar { id: scroll } } Component { id: maindeleg ListView { id: subview property int mainindex: index height: visible ? (allitems[mainindex][0][0]=="heading" ? 15 : 30) : 0 width: childrenRect.width interactive: false orientation: Qt.Horizontal spacing: 5 visible: allitems[mainindex][0][1] != "chromecast" || handlingGeneral.isChromecastEnabled() model: allitems[mainindex].length delegate: Row { spacing: 5 Text { id: sep lineHeight: 1.5 color: "#cccccc" visible: allitems[subview.mainindex].length > 1 && index > 1 font.bold: true font.pointSize: 11 text: "/" } Image { y: 2.5 width: ((source!="" || allitems[subview.mainindex][index][0]==="heading") ? val.height*0.5 : 0) height: val.height*0.5 sourceSize.width: width sourceSize.height: height source: allitems[subview.mainindex][index][1]==="" ? "" : (allitems[subview.mainindex][index][0].slice(0,8)=="_:_EX_:_" ? handlingExternal.getIconPathFromTheme(allitems[subview.mainindex][index][1]) : "/mainmenu/" + allitems[subview.mainindex][index][1] + ".png") opacity: allitems[subview.mainindex][index][0] !== "hide" ? 1 : 0.5 visible: (source!="" || allitems[subview.mainindex][index][0]==="heading") } Text { id: val; color: (allitems[subview.mainindex][index][0]==="heading") ? "white" : "#cccccc" lineHeight: 1.5 font.capitalization: (allitems[subview.mainindex][index][0]==="heading") ? Font.SmallCaps : Font.MixedCase opacity: enabled ? 1 : 0.5 font.pointSize: 11 font.bold: true enabled: ((allitems[subview.mainindex][index][0] !== "__close" && allitems[subview.mainindex][index][0] !=="heading" && (allitems[subview.mainindex].length === 1 || index > 0))) // The spaces guarantee a bit of space betwene icon and text text: allitems[subview.mainindex][index][2] + ((allitems[subview.mainindex].length > 1 && index == 0) ? ":" : "") MouseArea { anchors.fill: parent hoverEnabled: true cursorShape: (allitems[subview.mainindex][index][0]!=="heading" && (allitems[subview.mainindex].length === 1 || index > 0)) ? Qt.PointingHandCursor : Qt.ArrowCursor onEntered: { if(allitems[subview.mainindex][index][0]!=="heading" && (allitems[subview.mainindex].length === 1 || index > 0)) val.color = "#ffffff" } onExited: { if(allitems[subview.mainindex][index][0]!=="heading" && (allitems[subview.mainindex].length === 1 || index > 0)) val.color = "#cccccc" } onClicked: { if(allitems[subview.mainindex][index][0]!=="heading" && (allitems[subview.mainindex].length === 1 || index > 0)) { if(allitems[subview.mainindex][index][3] === "hide" && !PQSettings.interfacePopoutMainMenu) mainmenu_top.opacity = 0 var cmd = allitems[subview.mainindex][index][0] var close = 0 if(cmd.slice(0,8) === "_:_EX_:_") { if(filefoldermodel.current != -1 && filefoldermodel.countMainView > 0) { handlingExternal.executeExternal(cmd.substring(8), filefoldermodel.currentFilePath) if(allitems[subview.mainindex][index][3] === "close") toplevel.closePhotoQt() } return } HandleShortcuts.executeInternalFunction(cmd) } } } } } } } Rectangle { anchors { bottom: helptext.top left: parent.left right: parent.right } height: 1 color: "#22ffffff" } Text { id: helptext anchors { left: parent.left right: parent.right bottom: parent.bottom } height: 100 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter color: "grey" wrapMode: Text.WordWrap text: em.pty+qsTranslate("MainMenu", "Click here to go to the online manual for help regarding shortcuts, settings, features, ...") PQMouseArea { anchors.fill: parent tooltip: "https://photoqt.org/man" cursorShape: Qt.PointingHandCursor onClicked: Qt.openUrlExternally("https://photoqt.org/man") } } // visible when popped out Item { x: 5 y: 5 width: 25 height: 25 Image { anchors.fill: parent anchors.margins: 5 source: "/popin.png" opacity: popinmouse.containsMouse ? 1 : 0.4 Behavior on opacity { NumberAnimation { duration: 200 } } PQMouseArea { id: popinmouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: PQSettings.interfacePopoutMainMenu //: Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface ? em.pty+qsTranslate("popinpopout", "Merge into main interface") //: Tooltip of small button to show an element in its own window (i.e., not merged into main interface) : em.pty+qsTranslate("popinpopout", "Move to its own window") onClicked: { if(PQSettings.interfacePopoutMainMenu) mainmenu_window.storeGeometry() PQSettings.interfacePopoutMainMenu = !PQSettings.interfacePopoutMainMenu } } } } Connections { target: filewatcher onContextmenuChanged: { readExternalContextmenu() } } Connections { target: loader onMainmenuPassOn: { if(what == "toggle") toggle() } } function readExternalContextmenu() { var tmpentries = handlingExternal.getContextMenuEntries() var entries = [[["heading","",""]]] for(var i = 0; i < tmpentries.length; ++i) { entries.push([tmpentries[i]]) } allitems_external = entries } function toggle() { if(PQSettings.interfacePopoutMainMenu) return if(mainmenu_top.opacity == 1) mainmenu_top.opacity = 0 else mainmenu_top.opacity = 1 } } photoqt-2.5/qml/menumeta/PQMainMenuPopout.qml000644 001750 001750 00000006641 14164672312 021725 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: mainmenu_window //: Window title title: em.pty+qsTranslate("MainMenu", "Main Menu") Component.onCompleted: { mainmenu_window.x = windowgeometry.mainMenuWindowGeometry.x mainmenu_window.y = windowgeometry.mainMenuWindowGeometry.y mainmenu_window.width = windowgeometry.mainMenuWindowGeometry.width mainmenu_window.height = windowgeometry.mainMenuWindowGeometry.height } minimumWidth: 100 minimumHeight: 600 modality: Qt.NonModal objectName: "mainmenupopout" onClosing: { storeGeometry() PQSettings.interfacePopoutMainMenu = false } Connections { target: toplevel onClosing: { storeGeometry() } } visible: PQSettings.interfacePopoutMainMenu flags: Qt.WindowStaysOnTopHint color: "#88000000" Loader { source: "PQMainMenu.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return mainmenu_window.width }) item.parentHeight = Qt.binding(function() { return mainmenu_window.height }) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(mainmenu_window.objectName) } function storeGeometry() { windowgeometry.mainMenuWindowGeometry = Qt.rect(mainmenu_window.x, mainmenu_window.y, mainmenu_window.width, mainmenu_window.height) windowgeometry.mainMenuWindowMaximized = (mainmenu_window.visibility==Window.Maximized) } } photoqt-2.5/qml/slideshow/000755 001750 001750 00000000000 14164673244 016215 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/slideshow/PQSlideShowControlsPopout.qml000644 001750 001750 00000007331 14164673241 024026 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: slideshowcontrols_window //: Window title title: em.pty+qsTranslate("slideshow", "Slideshow controls") Component.onCompleted: { slideshowcontrols_window.x = windowgeometry.slideshowControlsWindowGeometry.x slideshowcontrols_window.y = windowgeometry.slideshowControlsWindowGeometry.y slideshowcontrols_window.width = windowgeometry.slideshowControlsWindowGeometry.width slideshowcontrols_window.height = windowgeometry.slideshowControlsWindowGeometry.height } minimumWidth: 200 minimumHeight: 200 modality: Qt.NonModal objectName: "slideshowcontrolspopout" onClosing: { windowgeometry.slideshowControlsWindowGeometry = Qt.rect(slideshowcontrols_window.x, slideshowcontrols_window.y, slideshowcontrols_window.width, slideshowcontrols_window.height) windowgeometry.slideshowControlsWindowMaximized = (slideshowcontrols_window.visibility==Window.Maximized) loader.passOn("slideshowcontrols", "quit", undefined) if(variables.visibleItem == "slideshowcontrols") variables.visibleItem = "" } visible: PQSettings.interfacePopoutSlideShowControls flags: Qt.WindowStaysOnTopHint color: "#88000000" Loader { source: "PQSlideShowControls.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return slideshowcontrols_window.width }) item.parentHeight = Qt.binding(function() { return slideshowcontrols_window.height }) slideshowcontrols_window.minimumHeight = item.childrenRect.height slideshowcontrols_window.minimumWidth = item.childrenRect.width } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(slideshowcontrols_window.objectName) } } photoqt-2.5/qml/slideshow/PQSlideShowSettings.qml000644 001750 001750 00000053551 14164673234 022623 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import Qt.labs.platform 1.0 import QtGraphicalEffects 1.0 import "../elements" import "../shortcuts/handleshortcuts.js" as HandleShortcuts Item { id: slideshowsettings_top width: parentWidth height: parentHeight property int parentWidth: toplevel.width property int parentHeight: toplevel.height opacity: PQSettings.interfacePopoutSlideShowSettings ? 1 : 0 Behavior on opacity { NumberAnimation { duration: PQSettings.interfacePopoutSlideShowSettings ? 0 : PQSettings.imageviewAnimationDuration*100 } } visible: opacity!=0 enabled: visible Item { id: dummyitem width: 0 height: 0 } ShaderEffectSource { id: effectSource sourceItem: PQSettings.interfacePopoutSlideShowSettings ? dummyitem : imageitem anchors.fill: parent sourceRect: Qt.rect(parent.x,parent.y,parent.width,parent.height) } FastBlur { id: blur anchors.fill: effectSource source: effectSource radius: 32 } Rectangle { anchors.fill: parent color: "#ee000000" PQMouseArea { anchors.fill: parent hoverEnabled: true enabled: !PQSettings.interfacePopoutSlideShowSettings onClicked: button_cancel.clicked() } Text { id: heading y: insidecont.y-height width: parent.width text: em.pty+qsTranslate("slideshow", "Slideshow settings") font.pointSize: 25 font.bold: true color: "white" horizontalAlignment: Text.AlignHCenter } PQMouseArea { anchors.fill: insidecont anchors.margins: -50 hoverEnabled: true } Item { id: insidecont x: ((parent.width-width)/2) y: ((parent.height-height)/2) width: childrenRect.width height: childrenRect.height clip: true Column { id: col property int leftcolwidth: 100 spacing: 15 Item { width: 1 height: 20 } Row { spacing: 15 height: childrenRect.height Text { id: interval_txt color: "white" font.pointSize: 15 font.bold: true //: The interval between images in a slideshow text: em.pty+qsTranslate("slideshow", "interval") + ":" horizontalAlignment: Text.AlignRight Component.onCompleted: { if(width > col.leftcolwidth) col.leftcolwidth = width width = Qt.binding(function() { return col.leftcolwidth; }) } } PQSlider { id: interval_slider y: (interval_txt.height-height)/2 from: 1 to: 300 toolTipSuffix: "s" } Text { y: (interval_txt.height-height)/2 color: "white" text: interval_slider.value+"s" } } Row { spacing: 15 height: childrenRect.height Text { id: animtype_txt color: "white" font.pointSize: 15 font.bold: true //: This is referring to the in/out animation of images during a slideshow text: em.pty+qsTranslate("slideshow", "animation") + ":" horizontalAlignment: Text.AlignRight Component.onCompleted: { if(width > col.leftcolwidth) col.leftcolwidth = width width = Qt.binding(function() { return col.leftcolwidth; }) } } PQComboBox { id: animtype_combo //: This is referring to the in/out animation of images during slideshows model: [em.pty+qsTranslate("slideshow", "opacity"), //: This is referring to the in/out animation of images during slideshows em.pty+qsTranslate("slideshow", "along x-axis"), //: This is referring to the in/out animation of images during slideshows em.pty+qsTranslate("slideshow", "along y-axis")] } } Row { spacing: 15 height: childrenRect.height Text { id: trans_txt verticalAlignment: Text.AlignTop color: "white" font.pointSize: 15 font.bold: true //: The speed of transitioning from one image to another during slideshows text: em.pty+qsTranslate("slideshow", "animation speed") + ":" horizontalAlignment: Text.AlignRight Component.onCompleted: { if(width > col.leftcolwidth) col.leftcolwidth = width width = Qt.binding(function() { return col.leftcolwidth; }) } } Column { spacing: 10 PQSlider { id: transition_slider height: trans_txt.height from: 0 to: 15 tooltip: (value == 15 ? //: This refers to a speed of transitioning from one image to another during slideshows em.pty+qsTranslate("slideshow", "immediately, without animation") : (value > 9 ? //: This refers to a speed of transitioning from one image to another during slideshows em.pty+qsTranslate("slideshow", "pretty fast animation") : (value > 4 ? //: This refers to a speed of transitioning from one image to another during slideshows em.pty+qsTranslate("slideshow", "not too fast and not too slow") : //: This refers to a speed of transitioning from one image to another during slideshows em.pty+qsTranslate("slideshow", "very slow animation")))) } Text { id: transspeed_txt color: "white" //: This refers to the currently set speed of transitioning from one image to another during slideshows text: em.pty+qsTranslate("slideshow", "current speed") + ": " + transition_slider.tooltip + "" } } } Row { spacing: 15 height: childrenRect.height Text { id: loop_txt color: "white" font.pointSize: 15 font.bold: true text: em.pty+qsTranslate("slideshow", "looping") + ":" horizontalAlignment: Text.AlignRight Component.onCompleted: { if(width > col.leftcolwidth) col.leftcolwidth = width width = Qt.binding(function() { return col.leftcolwidth; }) } } PQCheckbox { id: loop_check y: (loop_txt.height-height)/2 //: Loop over all images during slideshows text: em.pty+qsTranslate("slideshow", "loop over all files") } } Row { spacing: 15 height: childrenRect.height Text { id: shuffle_txt color: "white" font.pointSize: 15 font.bold: true //: during slideshows shuffle the order of all images text: em.pty+qsTranslate("slideshow", "shuffle") + ":" horizontalAlignment: Text.AlignRight Component.onCompleted: { if(width > col.leftcolwidth) col.leftcolwidth = width width = Qt.binding(function() { return col.leftcolwidth; }) } } PQCheckbox { id: shuffle_check y: (shuffle_txt.height-height)/2 //: during slideshows shuffle the order of all images text: em.pty+qsTranslate("slideshow", "shuffle all files") } } Row { spacing: 15 height: childrenRect.height Text { id: subfolders_txt color: "white" font.pointSize: 15 font.bold: true //: also include images in subfolders during slideshows text: em.pty+qsTranslate("slideshow", "subfolders") + ":" horizontalAlignment: Text.AlignRight Component.onCompleted: { if(width > col.leftcolwidth) col.leftcolwidth = width width = Qt.binding(function() { return col.leftcolwidth; }) } } PQCheckbox { id: subfolders_check y: (shuffle_txt.height-height)/2 //: also include images in subfolders during slideshows text: em.pty+qsTranslate("slideshow", "include images in subfolders") } } Row { spacing: 15 height: childrenRect.height Text { id: quick_txt y: (loop_txt-height)/2 verticalAlignment: Text.AlignTop color: "white" font.pointSize: 15 font.bold: true //: What to do with the quick info during slideshows text: em.pty+qsTranslate("slideshow", "quickinfo") + ":" horizontalAlignment: Text.AlignRight Component.onCompleted: { if(width > col.leftcolwidth) col.leftcolwidth = width width = Qt.binding(function() { return col.leftcolwidth; }) } } PQCheckbox { id: quick_check y: (quick_txt.height-height)/2 //: What to do with the quick info during slideshows text: em.pty+qsTranslate("slideshow", "hide quickinfo") } } Row { spacing: 15 height: childrenRect.height Text { id: music_txt verticalAlignment: Text.AlignTop color: "white" font.pointSize: 15 font.bold: true //: The music that is to be played during slideshows text: em.pty+qsTranslate("slideshow", "music") + ":" horizontalAlignment: Text.AlignRight Component.onCompleted: { if(width > col.leftcolwidth) col.leftcolwidth = width width = Qt.binding(function() { return col.leftcolwidth; }) } } Column { spacing: 10 PQCheckbox { id: music_check height: music_txt.height //: Enable music to be played during slideshows text: em.pty+qsTranslate("slideshow", "enable music") } PQButton { id: music_button enabled: music_check.checked property string musicfile: "" text: musicfile=="" ? "[" + em.pty+qsTranslate("slideshow", "no file selected") + "]" : handlingFileDir.getFileNameFromFullPath(musicfile) tooltip: (musicfile=="" ? em.pty+qsTranslate("slideshow", "Click to select music file") : (""+musicfile+"

" + em.pty+qsTranslate("slideshow", "Click to change music file"))) onClicked: { fileDialog.visible = true } } FileDialog { id: fileDialog currentFile: music_button.musicfile=="" ? "" : music_button.musicfile folder: (music_button.musicfile == "" ? "file://"+handlingFileDir.getHomeDir() : "file://"+handlingFileDir.getFilePathFromFullPath(music_button.musicfile)) modality: Qt.ApplicationModal nameFilters: [em.pty+qsTranslate("slideshow", "Common music file formats") + " (aac *.flac *.mp3 *.ogg *.oga *.wav *.wma)", em.pty+qsTranslate("slideshow", "All Files") + " (*.*)"] onAccepted: { if(fileDialog.file != "") music_button.musicfile = handlingFileDir.cleanPath(fileDialog.file) } } } } Item { width: 1 height: 5 } } } Row { id: button_row spacing: 5 y: insidecont.y+insidecont.height x: (parent.width-width)/2 height: button_start.height+20 PQButton { id: button_start y: 5 //: Written on a clickable button text: em.pty+qsTranslate("slideshow", "Start slideshow") onClicked: { PQSettings.slideshowTime = interval_slider.value PQSettings.slideshowTypeAnimation = (animtype_combo.currentIndex==0 ? "opacity" : (animtype_combo.currentIndex==1 ? "x" : "y")) PQSettings.slideshowImageTransition = transition_slider.value PQSettings.slideshowLoop = loop_check.checked PQSettings.slideshowShuffle = shuffle_check.checked PQSettings.slideshowHideLabels = quick_check.checked PQSettings.slideshowMusicFile = (music_check.checked&&music_button.musicfile!="" ? music_button.musicfile : "") PQSettings.slideshowIncludeSubFolders = subfolders_check.checked if(PQSettings.interfacePopoutSlideShowSettings) { slideshow_window.visible = false } else { slideshowsettings_top.opacity = 0 variables.visibleItem = "" } loader.ensureItIsReady("slideshowcontrols") loader.passOn("slideshowcontrols", "start", undefined) } } PQButton { id: button_cancel y: 5 text: genericStringCancel onClicked: { if(PQSettings.interfacePopoutSlideShowSettings) { slideshow_window.visible = false } else { slideshowsettings_top.opacity = 0 variables.visibleItem = "" } } } } Image { x: 5 y: 5 width: 15 height: 15 source: "/popin.png" opacity: popinmouse.containsMouse ? 1 : 0.4 Behavior on opacity { NumberAnimation { duration: 200 } } PQMouseArea { id: popinmouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: PQSettings.interfacePopoutSlideShowSettings ? //: Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface em.pty+qsTranslate("popinpopout", "Merge into main interface") : //: Tooltip of small button to show an element in its own window (i.e., not merged into main interface) em.pty+qsTranslate("popinpopout", "Move to its own window") onClicked: { if(PQSettings.interfacePopoutSlideShowSettings) slideshow_window.storeGeometry() button_cancel.clicked() PQSettings.interfacePopoutSlideShowSettings = !PQSettings.interfacePopoutSlideShowSettings HandleShortcuts.executeInternalFunction("__slideshow") } } } Connections { target: loader onSlideshowPassOn: { if(what == "show") { if(PQSettings.interfacePopoutSlideShowSettings) { slideshow_window.visible = true } else { if(filefoldermodel.current == -1) return opacity = 1 variables.visibleItem = "slideshowsettings" } interval_slider.value = PQSettings.slideshowTime animtype_combo.currentIndex = (PQSettings.slideshowTypeAnimation=="opacity" ? 0 : (PQSettings.slideshowTypeAnimation=="x" ? 1 : 2)) transition_slider.value = PQSettings.slideshowImageTransition loop_check.checked = PQSettings.slideshowLoop shuffle_check.checked = PQSettings.slideshowShuffle quick_check.checked = PQSettings.slideshowHideLabels music_check.checked = (PQSettings.slideshowMusicFile!="") music_button.musicfile = PQSettings.slideshowMusicFile subfolders_check.checked = PQSettings.slideshowIncludeSubFolders } else if(what == "hide") { button_cancel.clicked() } else if(what == "keyevent") { if(param[0] == Qt.Key_Escape) button_cancel.clicked() else if(param[0] == Qt.Key_Enter || param[0] == Qt.Key_Return) button_start.clicked() } } } } } photoqt-2.5/qml/slideshow/PQSlideShowControls.qml000644 001750 001750 00000036401 14164673244 022622 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtMultimedia 5.5 import "../elements" Rectangle { id: controls_top color: "#cc000000" border.width: 1 border.color: "#88aaaaaa" x: PQSettings.interfacePopoutSlideShowControls ? 0 : (variables.metaDataWidthWhenKeptOpen-1) y: PQSettings.interfacePopoutSlideShowControls ? 0 : -1 width: PQSettings.interfacePopoutSlideShowControls ? parentWidth : (parentWidth+2-variables.metaDataWidthWhenKeptOpen) height: PQSettings.interfacePopoutSlideShowControls ? parentHeight : 75 property int parentWidth: toplevel.width property int parentHeight: toplevel.height opacity: PQSettings.interfacePopoutSlideShowControls ? 1 : 0 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } visible: (opacity != 0) enabled: visible property string backupAnimType: "" property var backupAllImagesInFolder: [] MouseArea { id: controlsbgmousearea anchors.fill: parent hoverEnabled: true } property bool running: false onRunningChanged: { if(running) { imageitem.playAnim() switcher.restart() hideBarAfterTimeout.restart() if(slideshowmusic.source != "") slideshowmusic.play() } else { imageitem.pauseAnim() controls_top.opacity = 1 slideshowmusic.pause() } } property var shuffledIndices: [] property int shuffledCurrentIndex: -1 Item { id: playplausenextprev x: PQSettings.interfacePopoutSlideShowControls ? (parent.width-width)/2 : 10 y: PQSettings.interfacePopoutSlideShowControls ? 20 : 0 width: childrenRect.width height: childrenRect.height Row { Image { id: prev y: 20 width: PQSettings.interfacePopoutSlideShowControls ? 80 : controls_top.height-2*y height: PQSettings.interfacePopoutSlideShowControls ? 80 : controls_top.height-2*y source: "/slideshow/prev.png" PQMouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true tooltip: em.pty+qsTranslate("slideshow", "Click to go to the previous image") onClicked: { switcher.restart() loadPrevImage() } } } Image { id: playpause y: 10 width: PQSettings.interfacePopoutSlideShowControls ? 120 : controls_top.height-2*y height: PQSettings.interfacePopoutSlideShowControls ? 120 : controls_top.height-2*y source: (controls_top.running ? "/slideshow/pause.png" : "/slideshow/play.png") PQMouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true tooltip: (controls_top.running ? em.pty+qsTranslate("slideshow", "Click to pause slideshow") : em.pty+qsTranslate("slideshow", "Click to play slideshow")) onClicked: controls_top.running = !controls_top.running } } Image { id: next y: 20 width: PQSettings.interfacePopoutSlideShowControls ? 80 : controls_top.height-2*y height: PQSettings.interfacePopoutSlideShowControls ? 80 : controls_top.height-2*y source: "/slideshow/next.png" PQMouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true tooltip: em.pty+qsTranslate("slideshow", "Click to go to the next image") onClicked: { switcher.restart() loadNextImage() } } } } } Item { id: volumecont visible: slideshowmusic.source!="" x: (parent.width-width)/2 y: PQSettings.interfacePopoutSlideShowControls ? (playplausenextprev.y+playplausenextprev.height+50) : ((parent.height-height)/2) width: childrenRect.width height: childrenRect.height Row { Image { id: volumeicon width: 40 height: 40 source: volumeslider.value==0 ? "/slideshow/speaker_mute.png" : (volumeslider.value <= 40 ? "/slideshow/speaker_low.png" : (volumeslider.value <= 80 ? "/slideshow/speaker_medium.png" : "/slideshow/speaker_high.png")) } PQSlider { id: volumeslider width: 200 height: 20 toolTipPrefix: em.pty+qsTranslate("slideshow", "Sound volume:") + " " toolTipSuffix: "%" value: 80 y: 10 from: 0 to: 100 } } } Image { id: quit x: PQSettings.interfacePopoutSlideShowControls ? (parent.width-width)/2 : (parent.width-width-15) y: PQSettings.interfacePopoutSlideShowControls ? (volumecont.visible ? (volumecont.y+volumecont.height+50) : (playplausenextprev.y+playplausenextprev.height+50)) : 10 width: PQSettings.interfacePopoutSlideShowControls ? 75 : (parent.height-2*y) height: PQSettings.interfacePopoutSlideShowControls ? 75 : (parent.height-2*y) source: "/slideshow/quit.png" PQMouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true tooltip: em.pty+qsTranslate("slideshow", "Click to quit slideshow") onClicked: quitSlideShow() } } // Audio element Audio { id: slideshowmusic volume: volumeslider.value/100.0 onError: console.error("AUDIO ERROR:",errorString,"-",source) loops: Audio.Infinite } Connections { target: variables onMousePosChanged: { if(!variables.slideShowActive || !controls_top.running || PQSettings.interfacePopoutSlideShowControls) return if(controls_top.visible && variables.mousePos.y > controls_top.height+5) controls_top.opacity = 0 else if(!controls_top.visible && variables.mousePos.y < (2*PQSettings.interfaceHotEdgeSize+5)) controls_top.opacity = 1 } } Connections { target: loader onSlideshowControlsPassOn: { if(what == "start") startSlideShow() else if(what == "quit") quitSlideShow() else if(what == "keyevent") { if(param[0] == Qt.Key_Space || param[0] == Qt.Key_Enter || param[0] == Qt.Key_Return) controls_top.running = !controls_top.running else if(param[0] == Qt.Key_Right) { loadNextImage() if(controls_top.running) switcher.restart() } else if(param[0] == Qt.Key_Left) { loadPrevImage() if(controls_top.running) switcher.restart() } else if(param[0] == Qt.Key_Minus) { var val = 1 if(param[1] & Qt.AltModifier) val = 5 volumeslider.value = Math.max(0, volumeslider.value-val) }else if(param[0] == Qt.Key_Plus || param[0] == Qt.Key_Equal) { var val = 1 if(param[1] & Qt.AltModifier) val = 5 volumeslider.value = Math.min(100, volumeslider.value+val) } else if(param[0] == Qt.Key_Escape || param[0] == Qt.Key_Q) quitSlideShow() } } } Timer { id: hideBarAfterTimeout interval: 1000 repeat: false onTriggered: { if(controls_top.visible && variables.mousePos.y > controls_top.height+5 && controls_top.running && !PQSettings.interfacePopoutSlideShowControls) controls_top.opacity = 0 } } Timer { id: switcher interval: imageitem.getCurrentVideoLength()==-1 ? Math.max(1000, Math.min(300*1000, PQSettings.slideshowTime*1000)) : imageitem.getCurrentVideoLength() repeat: true running: variables.slideShowActive&&controls_top.running onTriggered: loadNextImage() } Component.onDestruction: { if(variables.slideShowActive = true) quitSlideShow() } function startSlideShow() { variables.visibleItem = "slideshowcontrols" variables.slideShowActive = true imageitem.zoomReset() imageitem.rotateReset() backupAnimType = PQSettings.imageviewAnimationType PQSettings.imageviewAnimationType = PQSettings.slideshowTypeAnimation var sortby = 1 if(PQSettings.imageviewSortImagesBy == "name") sortby = 0 else if(PQSettings.imageviewSortImagesBy == "time") sortby = 2 else if(PQSettings.imageviewSortImagesBy == "size") sortby = 3 else if(PQSettings.imageviewSortImagesBy == "type") sortby = 4 if(PQSettings.slideshowIncludeSubFolders) { filefoldermodel.includeFilesInSubFolders = true filefoldermodel.forceReloadMainView() } if(PQSettings.slideshowShuffle) { controls_top.shuffledIndices = [] for(var k = 0; k < filefoldermodel.countMainView; ++k) if(k !== filefoldermodel.current) { controls_top.shuffledIndices.push(k) } shuffle(controls_top.shuffledIndices) controls_top.shuffledIndices.push(filefoldermodel.current) controls_top.shuffledCurrentIndex = -1 } controls_top.running = true imageitem.restartAnim() controls_top.opacity = 1 if(PQSettings.interfacePopoutSlideShowControls) slideshowcontrols_window.visible = true hideBarAfterTimeout.start() if(PQSettings.slideshowMusicFile != "") { slideshowmusic.source = "file://" + PQSettings.slideshowMusicFile slideshowmusic.play() } else slideshowmusic.source = "" } function quitSlideShow() { slideshowmusic.stop() PQSettings.imageviewAnimationType = backupAnimType if(PQSettings.slideshowIncludeSubFolders) filefoldermodel.includeFilesInSubFolders = false variables.visibleItem = "" variables.slideShowActive = false if(PQSettings.interfacePopoutSlideShowControls) slideshowcontrols_window.visible = false else controls_top.opacity = 0 } function loadNextImage() { if(!PQSettings.slideshowShuffle) { if(filefoldermodel.current < filefoldermodel.countMainView-1) ++filefoldermodel.current else if(PQSettings.slideshowLoop) filefoldermodel.current = 0 else quitSlideShow() } else { if(controls_top.shuffledCurrentIndex < controls_top.shuffledIndices.length-1) { ++controls_top.shuffledCurrentIndex filefoldermodel.current = controls_top.shuffledIndices[controls_top.shuffledCurrentIndex] } else if(PQSettings.slideshowLoop) { controls_top.shuffledCurrentIndex = 0 filefoldermodel.current = controls_top.shuffledIndices[controls_top.shuffledCurrentIndex] } else quitSlideShow() } } function loadPrevImage() { if(!PQSettings.slideshowShuffle) { if(filefoldermodel.current > 0) { --filefoldermodel.current } else if(PQSettings.slideshowLoop) { filefoldermodel.current = filefoldermodel.countMainView-1 } } else { if(controls_top.shuffledCurrentIndex > 0) { --controls_top.shuffledCurrentIndex filefoldermodel.current = controls_top.shuffledIndices[controls_top.shuffledCurrentIndex] } else if(PQSettings.slideshowLoop) { controls_top.shuffledCurrentIndex = controls_top.shuffledIndices.length-1 filefoldermodel.current = controls_top.shuffledIndices[controls_top.shuffledCurrentIndex] } } } /***************************************/ // The Fisher–Yates shuffle algorithm // Code found at http://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array-in-javascript // (adapted from http://bost.ocks.org/mike/shuffle/) function shuffle(array) { var counter = array.length, temp, index; // While there are elements in the array while (counter > 0) { // Pick a random index index = Math.floor(Math.random() * counter); // Decrease counter by 1 counter--; // And swap the last element with it temp = array[counter]; array[counter] = array[index]; array[index] = temp; } return array; } } photoqt-2.5/qml/slideshow/PQSlideShowSettingsPopout.qml000644 001750 001750 00000007436 14164673227 024035 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: slideshow_window //: Window title title: em.pty+qsTranslate("slideshow", "Slideshow settings") Component.onCompleted: { slideshow_window.setX(windowgeometry.slideshowWindowGeometry.x) slideshow_window.setY(windowgeometry.slideshowWindowGeometry.y) slideshow_window.setWidth(windowgeometry.slideshowWindowGeometry.width) slideshow_window.setHeight(windowgeometry.slideshowWindowGeometry.height) } minimumWidth: 200 minimumHeight: 300 modality: Qt.ApplicationModal objectName: "slideshowsettingspopout" onClosing: { storeGeometry() if(variables.visibleItem == "slideshowsettings") variables.visibleItem = "" } visible: PQSettings.interfacePopoutSlideShowSettings&&curloader.item.opacity==1 flags: Qt.WindowStaysOnTopHint Connections { target: PQSettings onInterfacePopoutSlideShowSettingsChanged: { if(!PQSettings.interfacePopoutSlideShowSettings) slideshow_window.visible = Qt.binding(function() { return PQSettings.interfacePopoutSlideShowSettings&&curloader.item.opacity==1; }) } } color: "#88000000" Loader { id: curloader source: "PQSlideShowSettings.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return slideshow_window.width }) item.parentHeight = Qt.binding(function() { return slideshow_window.height }) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(slideshow_window.objectName) } function storeGeometry() { windowgeometry.slideshowWindowGeometry = Qt.rect(slideshow_window.x, slideshow_window.y, slideshow_window.width, slideshow_window.height) windowgeometry.slideshowWindowMaximized = (slideshow_window.visibility==Window.Maximized) } } photoqt-2.5/qml/chromecast/000755 001750 001750 00000000000 14164671525 016344 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/chromecast/PQChromecast.qml000644 001750 001750 00000031667 14164671525 021425 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../elements" import QtGraphicalEffects 1.0 Item { id: chromecast_top width: parentWidth height: parentHeight property int parentWidth: toplevel.width property int parentHeight: toplevel.height opacity: PQSettings.interfacePopoutChromecast ? 1 : 0 Behavior on opacity { NumberAnimation { duration: PQSettings.interfacePopoutChromecast ? 0 : PQSettings.imageviewAnimationDuration*100 } } visible: opacity!=0 enabled: visible property bool iAmScanning: false property var chromecastData: [] Item { id: dummyitem width: 0 height: 0 } ShaderEffectSource { id: effectSource sourceItem: PQSettings.interfacePopoutChromecast ? dummyitem : imageitem anchors.fill: parent sourceRect: Qt.rect(parent.x,parent.y,parent.width,parent.height) } FastBlur { id: blur anchors.fill: effectSource source: effectSource radius: 32 } Rectangle { anchors.fill: parent color: "#ee000000" PQMouseArea { anchors.fill: parent hoverEnabled: true enabled: !PQSettings.interfacePopoutChromecast onClicked: button_cancel.clicked() } Text { id: heading y: insidecont.y-height-10 width: parent.width text: "Chromecast" font.pointSize: 25 font.bold: true color: "white" horizontalAlignment: Text.AlignHCenter } PQMouseArea { anchors.fill: insidecont anchors.margins: -50 hoverEnabled: true } Item { id: insidecont x: ((parent.width-width)/2) y: ((parent.height-height)/2) width: 500 height: 300 clip: true Item { x: (insidecont.width-width)/2 id: scanbut width: 40 height: 40 PQMouseArea { id: refreshmousearea anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor //: Used as tooltip for button that starts a scan for Chromecast streaming devices in the local network tooltip: em.pty+qsTranslate("streaming", "Scan for devices") onClicked: refresh() } Image { anchors.fill: parent mipmap: true source: "/streaming/refresh.png" RotationAnimation on rotation { loops: Animation.Infinite running: iAmScanning from: 0 to: 360 duration: 1500 } } } Rectangle { id: devlistrect anchors.fill: parent anchors.topMargin: scanbut.height+10 anchors.bottomMargin: 5 color: "transparent" border.width: 1 border.color: "#aaaaaa" ListView { id: devs orientation: ListView.Vertical anchors.fill: parent anchors.margins: 1 clip: true model: chromecastData.length/2 delegate: Rectangle { id: deleg width: parent.width height: 50 property bool hovering: false color: hovering ? "#22ffffff" : "transparent" Behavior on color { ColorAnimation { duration: 200 } } Row { width: parent.width spacing: 10 Item { width: 1 height: 1 } Text { y: (deleg.height-height)/2 id: txt1 text: chromecastData[2*index] font.pointSize: 15 color: "white" font.bold: true } Text { id: txt2 y: (deleg.height-height)/2 text: chromecastData[2*index+1] font.pointSize: 12 font.italic: true color: "#aaaaaa" } } PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor onEntered: { deleg.hovering = true connectbut.mouseOver = true } onExited: { deleg.hovering = false connectbut.mouseOver = false } onClicked: connectbut.clicked() } PQButton { id: connectbut x: parent.width-width-10 y: (deleg.height-height)/2 text: ((variables.chromecastConnected && variables.chromecastName==chromecastData[2*index]) ? //: Written on button, as in 'Disconnect from connected Chromecast streaming device' em.pty+qsTranslate("streaming", "Disconnect") : //: Written on button, as in 'Connect to Chromecast streaming device' em.pty+qsTranslate("streaming", "Connect")) enabled: !iAmScanning onMouseOverChanged: deleg.hovering = mouseOver onClicked: { if(enabled) connectChromecast(chromecastData[2*index]) } } Rectangle { y: parent.height-1 visible: index. ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: chromecast_window //: Window title title: em.pty+qsTranslate("streaming", "Streaming (Chromecast)") Component.onCompleted: { chromecast_window.setX(windowgeometry.slideshowWindowGeometry.x) chromecast_window.setY(windowgeometry.slideshowWindowGeometry.y) chromecast_window.setWidth(windowgeometry.slideshowWindowGeometry.width) chromecast_window.setHeight(windowgeometry.slideshowWindowGeometry.height) } minimumWidth: 200 minimumHeight: 300 modality: Qt.ApplicationModal objectName: "chromecastpopout" onClosing: { storeGeometry() if(variables.visibleItem == "chromecast") variables.visibleItem = "" } visible: PQSettings.interfacePopoutChromecast&&curloader.item.opacity==1 flags: Qt.WindowStaysOnTopHint Connections { target: PQSettings onInterfacePopoutChromecastChanged: { if(!PQSettings.interfacePopoutChromecast) chromecast_window.visible = Qt.binding(function() { return PQSettings.interfacePopoutChromecast&&curloader.item.opacity==1; }) } } color: "#88000000" Loader { id: curloader source: "PQChromecast.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return chromecast_window.width }) item.parentHeight = Qt.binding(function() { return chromecast_window.height }) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(chromecast_window.objectName) } function storeGeometry() { windowgeometry.chromecastWindowGeometry = Qt.rect(chromecast_window.x, chromecast_window.y, chromecast_window.width, chromecast_window.height) windowgeometry.chromecastWindowMaximized = (chromecast_window.visibility==Window.Maximized) } } photoqt-2.5/qml/scale/000755 001750 001750 00000000000 14164672331 015277 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/scale/PQScalePopout.qml000644 001750 001750 00000007164 14164672331 020521 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: scale_window //: Window title title: em.pty+qsTranslate("scale", "Scale file") Component.onCompleted: { scale_window.setX(windowgeometry.scaleWindowGeometry.x) scale_window.setY(windowgeometry.scaleWindowGeometry.y) scale_window.setWidth(windowgeometry.scaleWindowGeometry.width) scale_window.setHeight(windowgeometry.scaleWindowGeometry.height) } minimumWidth: 500 minimumHeight: 500 modality: Qt.ApplicationModal objectName: "scalepopout" onClosing: { storeGeometry() if(variables.visibleItem == "filerename") variables.visibleItem = "" } visible: PQSettings.interfacePopoutScale&&curloader.item.opacity==1 flags: Qt.WindowStaysOnTopHint Connections { target: PQSettings onInterfacePopoutScaleChanged: { if(!PQSettings.interfacePopoutScale) scale_window.visible = Qt.binding(function() { return PQSettings.interfacePopoutScale&&curloader.item.opacity==1; }) } } color: "#88000000" Loader { id: curloader source: "PQScale.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return scale_window.width }) item.parentHeight = Qt.binding(function() { return scale_window.height }) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(scale_window.objectName) } function storeGeometry() { windowgeometry.scaleWindowGeometry = Qt.rect(scale_window.x, scale_window.y, scale_window.width, scale_window.height) windowgeometry.scaleWindowMaximized = (scale_window.visibility==Window.Maximized) } } photoqt-2.5/qml/scale/PQScale.qml000644 001750 001750 00000037221 14164672324 017311 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Dialogs 1.2 import QtGraphicalEffects 1.0 import "../elements" import "../shortcuts/handleshortcuts.js" as HandleShortcuts Item { id: scale_top width: parentWidth height: parentHeight property int parentWidth: toplevel.width property int parentHeight: toplevel.height opacity: 0 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } visible: opacity!=0 enabled: visible Item { id: dummyitem width: 0 height: 0 } ShaderEffectSource { id: effectSource sourceItem: PQSettings.interfacePopoutScale ? dummyitem : imageitem anchors.fill: parent sourceRect: Qt.rect(parent.x,parent.y,parent.width,parent.height) } FastBlur { id: blur anchors.fill: effectSource source: effectSource radius: 32 } Rectangle { anchors.fill: parent color: "#ee000000" PQMouseArea { anchors.fill: parent hoverEnabled: true enabled: !PQSettings.interfacePopoutScale onClicked: button_cancel.clicked() } Item { id: insidecont x: ((parent.width-width)/2) y: ((parent.height-height)/2) width: parent.width height: childrenRect.height clip: true PQMouseArea { anchors.fill: parent hoverEnabled: true } Column { spacing: 10 Text { id: heading x: (insidecont.width-width)/2 color: "white" font.pointSize: 30 font.bold: true text: em.pty+qsTranslate("scale", "Scale file") } Text { id: error x: (insidecont.width-width)/2 color: "red" visible: false font.pointSize: 15 horizontalAlignment: Qt.AlignHCenter text: em.pty+qsTranslate("scale", "An error occured, file could not be scaled!") } Text { id: unsupported x: (insidecont.width-width)/2 color: "red" visible: false font.pointSize: 15 horizontalAlignment: Qt.AlignHCenter text: em.pty+qsTranslate("scale", "This file format cannot (yet) be scaled with PhotoQt!") } Item { width: 1 height: 1 } Text { x: (insidecont.width-width)/2 color: "white" text: em.pty+qsTranslate("scale", "New width x height:") + " " + Math.round(newwidth.value) + " x " + Math.round(newheight.value) font.pointSize: 12 } PQSlider { x: (insidecont.width-width)/2 id: newwidth stepSize: 50 property int origVal: 0 property real ratio: newheight.origVal/origVal onMoved: { if(preserveaspect.checked) newheight.value = value*ratio } } PQSlider { x: (insidecont.width-width)/2 id: newheight stepSize: 50 property int origVal: 0 property real ratio: origVal/newwidth.origVal onMoved: { if(preserveaspect.checked) newwidth.value = value/ratio } } Row { x: (insidecont.width-width)/2 spacing: 5 PQButton { text: "0.25x" onClicked: { newwidth.value = newwidth.origVal*0.25 newheight.value = newheight.origVal*0.25 } } PQButton { text: "0.5x" onClicked: { newwidth.value = newwidth.origVal*0.5 newheight.value = newheight.origVal*0.5 } } PQButton { text: "0.75x" onClicked: { newwidth.value = newwidth.origVal*0.75 newheight.value = newheight.origVal*0.75 } } PQButton { text: "1x" onClicked: { newwidth.value = newwidth.origVal newheight.value = newheight.origVal } } PQButton { text: "1.5x" onClicked: { newwidth.value = newwidth.origVal*1.5 newheight.value = newheight.origVal*1.5 } } } PQCheckbox { id: preserveaspect x: (insidecont.width-width)/2 //: The aspect ratio refers to the ratio of the width to the height of the image, e.g., 16:9 for most movies text: em.pty+qsTranslate("scale", "Preserve aspect ratio") checked: true } Row { x: (insidecont.width-width)/2 Text { y: (quality.height-height)/2 color: "white" font.pointSize: 12 //: This refers to the quality to be used to scale the image text: em.pty+qsTranslate("scale", "Quality:") } PQSlider { id: quality from: 0 to: 100 value: 80 toolTipSuffix: "%" } } Item { width: 1 height: 1 } Item { id: butcont x: 0 width: insidecont.width height: childrenRect.height Row { spacing: 5 x: (parent.width-width)/2 PQButton { id: button_scalenew //: Written on a clickable button text: em.pty+qsTranslate("scale", "Scale (create new file)") enabled: (newwidth.value>0 && newheight.value>0 && !unsupported.visible) onClicked: { if(newwidth.value == 0 || newheight.value == 0 || unsupported.visible) return if(!handlingManipulation.scaleImage(filefoldermodel.currentFilePath, false, Qt.size(newwidth.value, newheight.value), quality.value)) { error.visible = true return } var cur = filefoldermodel.currentFilePath var dir = handlingFileDir.getFilePathFromFullPath(cur) var bas = handlingFileDir.getBaseName(cur, false) var suf = handlingFileDir.getSuffix(cur, false) filefoldermodel.setAsCurrent(dir + "/" + bas + "_" + Math.round(newwidth.value)+"x"+Math.round(newheight.value)+"."+suf) scale_top.opacity = 0 variables.visibleItem = "" } } PQButton { id: button_scaleinplace //: Written on a clickable button text: em.pty+qsTranslate("scale", "Scale (change file in place)") enabled: (newwidth.value>0 && newheight.value>0 && !unsupported.visible) onClicked: { if(newwidth.value == 0 || newheight.value == 0 || unsupported.visible) return if(!handlingManipulation.scaleImage(filefoldermodel.currentFilePath, true, Qt.size(newwidth.value, newheight.value), quality.value)) { error.visible = true return } scale_top.opacity = 0 variables.visibleItem = "" } } PQButton { id: button_cancel text: genericStringCancel onClicked: { scale_top.opacity = 0 variables.visibleItem = "" } } } } Item { width: 1 height: 1 } Text { x: (parent.width-width)/2 font.pointSize: 8 font.bold: true color: "white" textFormat: Text.RichText text: "
" + keymousestrings.translateShortcut("Enter") + "=" + em.pty+qsTranslate("scale", "Scale (create new file)") + "
" + keymousestrings.translateShortcut("Shift+Enter") + "=" + em.pty+qsTranslate("scale", "Scale (change file in place)") + "
" + keymousestrings.translateShortcut("Left") + "/" + keymousestrings.translateShortcut("Right") + "=" + em.pty+qsTranslate("scale", "De-/Increase width and height by 10%") + "
+/-=" + em.pty+qsTranslate("scale", "In-/Decrease quality by 5%") + "
" } } } Image { x: 5 y: 5 width: 15 height: 15 source: "/popin.png" opacity: popinmouse.containsMouse ? 1 : 0.4 Behavior on opacity { NumberAnimation { duration: 200 } } PQMouseArea { id: popinmouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: PQSettings.interfacePopoutScale ? //: Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface em.pty+qsTranslate("popinpopout", "Merge into main interface") : //: Tooltip of small button to show an element in its own window (i.e., not merged into main interface) em.pty+qsTranslate("popinpopout", "Move to its own window") onClicked: { if(PQSettings.interfacePopoutScale) scale_window.storeGeometry() button_cancel.clicked() PQSettings.interfacePopoutScale = !PQSettings.interfacePopoutScale HandleShortcuts.executeInternalFunction("__scale") } } } Connections { target: loader onScalePassOn: { if(what == "show") { if(filefoldermodel.current == -1) return unsupported.visible = !handlingManipulation.canThisBeScaled(filefoldermodel.currentFilePath) var s = handlingManipulation.getCurrentImageResolution(filefoldermodel.currentFilePath) newwidth.to = s.width*1.5 newheight.to = s.height*1.5 newwidth.value = s.width newheight.value = s.height newwidth.origVal = s.width newheight.origVal = s.height quality.value = 80 opacity = 1 error.visible = false variables.visibleItem = "scale" } else if(what == "hide") { button_cancel.clicked() } else if(what == "keyevent") { if(param[0] == Qt.Key_Escape) button_cancel.clicked() else if(param[0] == Qt.Key_Enter || param[0] == Qt.Key_Return) { if(param[1] & Qt.ShiftModifier) button_scaleinplace.clicked() else button_scalenew.clicked() } else if(param[0] == Qt.Key_Left) { newwidth.value -= newwidth.origVal*0.1 newheight.value -= newheight.origVal*0.1 } else if(param[0] == Qt.Key_Right) { newwidth.value += newwidth.origVal*0.1 newheight.value += newheight.origVal*0.1 } else if(param[0] == Qt.Key_Plus || param[0] == Qt.Key_Equal) quality.value += 5 else if(param[0] == Qt.Key_Minus) quality.value -= 5 } } } } } photoqt-2.5/qml/shortcuts/000755 001750 001750 00000000000 14164673214 016247 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/shortcuts/PQMouseShortcuts.qml000644 001750 001750 00000016303 14164673120 022231 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "./handleshortcuts.js" as HandleShortcuts Item { anchors.fill: parent MouseArea { anchors.fill: parent acceptedButtons: Qt.LeftButton|Qt.RightButton|Qt.MiddleButton hoverEnabled: true cursorShape: emptymessage.visible ? Qt.PointingHandCursor : Qt.ArrowCursor property int angleDeltaX: 0 property int angleDeltaY: 0 onWheel: { if(variables.visibleItem!="") return var combo = "" if(wheel.modifiers & Qt.ControlModifier) combo += "Ctrl+"; if(wheel.modifiers & Qt.AltModifier) combo += "Alt+"; if(wheel.modifiers & Qt.ShiftModifier) combo += "Shift+"; if(wheel.modifiers & Qt.MetaModifier) combo += "Meta+"; if(wheel.modifiers & Qt.KeypadModifier) combo += "Keypad+"; if(wheel.buttons & Qt.LeftButton) combo += "Left Button" if(wheel.buttons & Qt.MiddleButton) combo += "Middle Button" if(wheel.buttons & Qt.RightButton) combo += "Right Button" angleDeltaX += wheel.angleDelta.x angleDeltaY += wheel.angleDelta.y var threshold = Math.max(10, (PQSettings.interfaceMouseWheelSensitivity-1)*120) if(Math.abs(angleDeltaX) <= threshold && Math.abs(angleDeltaY) <= threshold) return; if(angleDeltaY > threshold) { if(angleDeltaX < -threshold) combo += "Wheel Up Left" else if(angleDeltaX > threshold) combo += "Wheel Up Right" else combo += "Wheel Up" } else if(angleDeltaY < -threshold) { if(angleDeltaX < -threshold) combo += "Wheel Down Left" else if(angleDeltaX > threshold) combo += "Wheel Down Right" else combo += "Wheel Down" } else { if(angleDeltaX < -threshold) combo += "Wheel Left" else if(angleDeltaX > threshold) combo += "Wheel Right" } HandleShortcuts.checkComboForShortcut(combo, Qt.point(angleDeltaX, angleDeltaY)) angleDeltaX = 0 angleDeltaY = 0 } property var path: [] property point prevPos: Qt.point(-1,-1) property string lastDirection: "" property var modifiers: [] property var buttons: [] property bool pressed: false onPressed: { prevPos = Qt.point(mouse.x, mouse.y) lastDirection = "" path = [] modifiers = [] buttons = [] if(variables.visibleItem=="") pressed = true if(mouse.buttons & Qt.LeftButton) buttons.push("Left Button") if(mouse.buttons & Qt.MiddleButton) buttons.push("Middle Button") if(mouse.buttons & Qt.RightButton) buttons.push("Right Button") if(mouse.modifiers & Qt.ControlModifier) modifiers.push("Ctrl") if(mouse.modifiers & Qt.AltModifier) modifiers.push("Alt") if(mouse.modifiers & Qt.ShiftModifier) modifiers.push("Shift") if(mouse.modifiers & Qt.MetaModifier) modifiers.push("Meta") if(mouse.modifiers & Qt.KeypadModifier) modifiers.push("Keypad") } onPositionChanged: { var threshold = 50 if(pressed) { var dx = prevPos.x-mouse.x var dy = prevPos.y-mouse.y if(dx > threshold) { if(lastDirection != "W") { lastDirection = "W" path.push("W") } prevPos = Qt.point(mouse.x, mouse.y) } else if(dx < -threshold) { if(lastDirection != "E") { lastDirection = "E" path.push("E") } prevPos = Qt.point(mouse.x, mouse.y) } else if(dy > threshold) { if(lastDirection != "N") { lastDirection = "N" path.push("N") } prevPos = Qt.point(mouse.x, mouse.y) } else if(dy < -threshold) { if(lastDirection != "S") { lastDirection = "S" path.push("S") } prevPos = Qt.point(mouse.x, mouse.y) } } } onReleased: { if(variables.visibleItem!="") return var combo = modifiers.join("+") if(combo != "") combo += "+" combo += buttons.join("+") if(path.length > 0) combo += "+" combo += path.join("") pressed = false // click outside of container if(combo == "Left Button" && PQSettings.interfaceCloseOnEmptyBackground) { toplevel.close() return } // a click on the empty background when no image is loaded shows filedialog if(emptymessage.visible && combo == "Left Button") loader.show("filedialog") else HandleShortcuts.checkComboForShortcut(combo) } } } photoqt-2.5/qml/shortcuts/mouseshortcuts.js000644 001750 001750 00000006565 14164673210 021724 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ function analyseMouseGestureUpdate(current, before) { var threshold = 50 var dx = current.x-before.x var dy = current.y-before.y var distance = Math.sqrt(Math.pow(dx,2)+Math.pow(dy,2)); var angle = (Math.atan2(dy, dx)/Math.PI)*180 angle = (angle+360)%360; if(distance > threshold) { if(angle <= 45 || angle > 315) return "E" else if(angle > 45 && angle <= 135) return "S" else if(angle > 135 && angle <= 225) return "W" else if(angle > 225 && angle <= 315) return "N" } return "" } function analyseMouseModifiers(modifiers) { var ret = [] if(modifiers & Qt.ControlModifier) ret.push("Ctrl"); if(modifiers & Qt.AltModifier) ret.push("Alt"); if(modifiers & Qt.ShiftModifier) ret.push("Shift"); if(modifiers & Qt.MetaModifier) ret.push("Meta"); if(modifiers & Qt.KeypadModifier) ret.push("Keypad"); return ret } function analyseMouseWheelAction(currentCombo, angleDelta, modifiers, ignoreModifiers) { var combo = "" if(ignoreModifiers == undefined || ignoreModifiers == false) { if(modifiers & Qt.ControlModifier) combo += "Ctrl+"; if(modifiers & Qt.AltModifier) combo += "Alt+"; if(modifiers & Qt.ShiftModifier) combo += "Shift+"; if(modifiers & Qt.MetaModifier) combo += "Meta+"; if(modifiers & Qt.KeypadModifier) combo += "Keypad+"; } if(angleDelta.y < 0) combo += "Wheel Up" else if(angleDelta.y > 0) combo += "Wheel Down" else // at the end of a wheel move there usually is a wheel event with angleDelta being zero // we want to ignore that return currentCombo return combo } photoqt-2.5/qml/shortcuts/PQKeyMouseStrings.qml000644 001750 001750 00000016370 14164673202 022342 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 Item { // KEY STRINGS readonly property var dictKeys: { //: Refers to a keyboard modifier "alt" : em.pty+qsTranslate("keymouse", "Alt"), //: Refers to a keyboard modifier "ctrl" : em.pty+qsTranslate("keymouse", "Ctrl"), //: Refers to a keyboard modifier "shift" : em.pty+qsTranslate("keymouse", "Shift"), //: Refers to one of the keys on the keyboard "page up" : em.pty+qsTranslate("keymouse", "Page Up"), //: Refers to one of the keys on the keyboard "page down" : em.pty+qsTranslate("keymouse", "Page Down"), //: Refers to the key that usually has the Windows symbol on it "meta" : em.pty+qsTranslate("keymouse", "Meta"), //: Refers to the key that triggers the number block on keyboards "keypad" : em.pty+qsTranslate("keymouse", "Keypad"), //: Refers to one of the keys on the keyboard "escape" : em.pty+qsTranslate("keymouse", "Escape"), //: Refers to one of the arrow keys on the keyboard "right" : em.pty+qsTranslate("keymouse", "Right"), //: Refers to one of the arrow keys on the keyboard "left" : em.pty+qsTranslate("keymouse", "Left"), //: Refers to one of the arrow keys on the keyboard "up" : em.pty+qsTranslate("keymouse", "Up"), //: Refers to one of the arrow keys on the keyboard "down" : em.pty+qsTranslate("keymouse", "Down"), //: Refers to one of the keys on the keyboard "space" : em.pty+qsTranslate("keymouse", "Space"), //: Refers to one of the keys on the keyboard "delete" : em.pty+qsTranslate("keymouse", "Delete"), //: Refers to one of the keys on the keyboard "backspace" : em.pty+qsTranslate("keymouse", "Backspace"), //: Refers to one of the keys on the keyboard "home" : em.pty+qsTranslate("keymouse", "Home"), //: Refers to one of the keys on the keyboard "end" : em.pty+qsTranslate("keymouse", "End"), //: Refers to one of the keys on the keyboard "insert" : em.pty+qsTranslate("keymouse", "Insert"), //: Refers to one of the keys on the keyboard "tab" : em.pty+qsTranslate("keymouse", "Tab"), //: Return refers to the enter key of the number block - please try to make the translations of Return and Enter (the main button) //: different if possible! "return" : em.pty+qsTranslate("keymouse", "Return"), //: Enter refers to the main enter key - please try to make the translations of Return (in the number block) and Enter //: different if possible! "enter" : em.pty+qsTranslate("keymouse", "Enter"), } // MOUSE STRINGS readonly property var dictMouse: { //: Refers to a mouse button "left button" : em.pty+qsTranslate("keymouse", "Left Button"), //: Refers to a mouse button "right button" : em.pty+qsTranslate("keymouse", "Right Button"), //: Refers to a mouse button "middle button" : em.pty+qsTranslate("keymouse", "Middle Button"), //: Refers to the mouse wheel "wheel up" : em.pty+qsTranslate("keymouse", "Wheel Up"), //: Refers to the mouse wheel "wheel down" : em.pty+qsTranslate("keymouse", "Wheel Down"), //: Refers to a direction of the mouse when performing a mouse gesture "east" : em.pty+qsTranslate("keymouse", "East"), //: Refers to a direction of the mouse when performing a mouse gesture "south" : em.pty+qsTranslate("keymouse", "South"), //: Refers to a direction of the mouse when performing a mouse gesture "west" : em.pty+qsTranslate("keymouse", "West"), //: Refers to a direction of the mouse when performing a mouse gesture "north" : em.pty+qsTranslate("keymouse", "North"), } function get(combo) { var tmp = combo.toLowerCase().trim() if(tmp in dictKeys) return dictKeys[tmp] if(tmp in dictMouse) return dictMouse[tmp] return combo } function translateShortcut(combo, mouse) { var comboSave = combo combo = combo.replace("++","+PLUS") if(combo === "+") combo = "PLUS" var parts = combo.split("+") var ret = "" for(var i in parts) { if(ret != "") ret += " + " if(parts[i] === "") continue if(parts[i] === "PLUS") ret += "+" else ret += get(parts[i]) } var comboLC = combo.toLowerCase() if((comboLC.indexOf("left button") > -1 && comboLC.indexOf("left button") !== comboLC.length-11) || (comboLC.indexOf("right button") > -1 && comboLC.indexOf("right button") !== comboLC.length-12) || (mouse != undefined && mouse == true)) { var p = ret.split("+") var lastItem = p[p.length-1] ret = "" for(var j = 0; j < p.length-1; ++j) { if(j > 0) ret += " + " ret += p[j] } for(var k = 0; k < lastItem.length; ++k) { if(lastItem[k] === "E") ret += "➡" else if(lastItem[k] === "S") ret += "⬇" else if(lastItem[k] === "W") ret += "⬅" else if(lastItem[k] === "N") ret += "⬆" } if(ret.endsWith("-")) ret = ret.slice(0,-1) } return ret } function translateShortcutList(combos, mouse) { var ret = [] for(var i in combos) ret.push(translateShortcut(combos[i], mouse)) return ret } } photoqt-2.5/qml/shortcuts/PQKeyShortcuts.qml000644 001750 001750 00000005376 14164673164 021711 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQml 2.0 import "./handleshortcuts.js" as HandleShortcuts Item { id: keyshortcuts_top anchors.fill: parent focus: true Connections { target: PQKeyPressMouseChecker onReceivedKeyPress: { contextmenu.hideMenu() if(variables.visibleItem != "") loader.passKeyEvent(variables.visibleItem, key, modifiers) else { var combo = "" if(modifiers & Qt.ControlModifier) combo += "Ctrl+"; if(modifiers & Qt.AltModifier) combo += "Alt+"; if(modifiers & Qt.ShiftModifier) combo += "Shift+"; if(modifiers & Qt.MetaModifier) combo += "Meta+"; if(modifiers & Qt.KeypadModifier) combo += "Keypad+"; // this seems to be the id when a modifier but no key is pressed... ignore key in that case if(key != 16777249) combo += handlingShortcuts.convertKeyCodeToText(key) HandleShortcuts.checkComboForShortcut(combo) } } } } photoqt-2.5/qml/shortcuts/handleshortcuts.js000644 001750 001750 00000014525 14164673214 022026 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ function checkComboForShortcut(combo, wheelDelta) { // if in viewer mode, pressing 'Escape' exits viewer mode if(combo == "Escape" && (filefoldermodel.isPQT || filefoldermodel.isARC)) { labels.exitViewerMode() return } if(combo == "Escape" && contextmenu.visible) { contextmenu.hideMenu() return } whatToDoWithFoundShortcut(PQShortcuts.getCommandForShortcut(combo), wheelDelta) } function executeInternalFunction(func) { whatToDoWithFoundShortcut(["",func]) } function whatToDoWithFoundShortcut(sh, wheelDelta) { var close = sh[0] var cmd = sh[1] if(cmd === "__quit") toplevel.quitPhotoQt() else if(cmd === "__close") toplevel.closePhotoQt() else if(cmd === "__settings") loader.show("settingsmanager") else if(cmd === "__next") imageitem.loadNextImage() else if(cmd === "__prev") imageitem.loadPrevImage() else if(cmd == "__contextMenu") contextmenu.showMenu() else if(cmd === "__about") loader.show("about") else if(cmd === "__slideshow") loader.show("slideshowsettings") else if(cmd === "__filterImages") loader.show("filter") else if(cmd === "__slideshowQuick") { loader.ensureItIsReady("slideshowcontrols") loader.passOn("slideshowcontrols", "start", undefined) } else if(cmd === "__open") loader.show("filedialog") else if(cmd === "__zoomIn") imageitem.zoomIn(wheelDelta) else if(cmd === "__zoomOut") imageitem.zoomOut(wheelDelta) else if(cmd === "__zoomReset") imageitem.zoomReset() else if(cmd === "__zoomActual") imageitem.zoomActual() else if(cmd === "__rotateL") imageitem.rotate(-90) else if(cmd === "__rotateR") imageitem.rotate(90) else if(cmd === "__rotate0") imageitem.rotateReset() else if(cmd === "__flipH") imageitem.mirrorH() else if(cmd === "__flipV") imageitem.mirrorV() else if(cmd === "__flipReset") imageitem.mirrorReset() else if(cmd === "__rename") loader.show("filerename") else if(cmd === "__delete") loader.show("filedelete") else if(cmd === "__copy") { loader.ensureItIsReady("copymove") loader.passOn("copymove", "copy", undefined) } else if(cmd === "__move") { loader.ensureItIsReady("copymove") loader.passOn("copymove", "move", undefined) } else if(cmd === "__deletePermanent") { if(filefoldermodel.current != -1) handlingFileDir.deleteFile(filefoldermodel.currentFilePath, true) } else if(cmd === "__deleteTrash") { if(filefoldermodel.current != -1) handlingFileDir.deleteFile(filefoldermodel.currentFilePath, false) } else if(cmd === "__saveAs") loader.show("filesaveas") else if(cmd === "__showMetaData") loader.metadataPassOn("toggle", undefined) else if(cmd === "__keepMetaData") loader.metadataPassOn("toggleKeepOpen", undefined) else if(cmd === "__showMainMenu") loader.mainmenuPassOn("toggle", undefined) else if(cmd === "__showThumbnails") thumbnails.toggle() else if(cmd === "__quickNavigation") { loader.ensureItIsReady("quicknavigation") PQSettings.interfaceQuickNavigation = !PQSettings.interfaceQuickNavigation } else if(cmd === "__goToFirst") imageitem.loadFirstImage() else if(cmd === "__goToLast") imageitem.loadLastImage() else if(cmd === "__viewerMode") labels.toggleViewerMode() else if(cmd === "__showFaceTags") PQSettings.metadataFaceTagsEnabled = !PQSettings.metadataFaceTagsEnabled else if(cmd === "__wallpaper") loader.show("wallpaper") else if(cmd === "__scale") loader.show("scale") else if(cmd === "__playPauseAni") imageitem.playPauseAnimation() else if(cmd === "__imgur") loader.show("imgur") else if(cmd === "__imgurAnonym") loader.show("imguranonym") else if(cmd === "__defaultFileManager") handlingExternal.openInDefaultFileManager(filefoldermodel.currentFilePath) else if(cmd === "__histogram") { loader.ensureItIsReady("histogram") PQSettings.histogramVisible = !PQSettings.histogramVisible } else if(cmd === "__clipboard") handlingExternal.copyToClipboard(filefoldermodel.currentFilePath) else if(cmd === "__tagFaces") loader.passOn("facetagger", "start", undefined) else if(cmd === "__chromecast") { if(handlingGeneral.isChromecastEnabled()) loader.show("chromecast") } else if(cmd === "__logging") loader.show("logging") else { handlingExternal.executeExternal(cmd, filefoldermodel.currentFilePath) if(close === "1") toplevel.closePhotoQt() } } photoqt-2.5/qml/mainwindow.qml000644 001750 001750 00000040525 14164673376 017117 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import PQHandlingFileDialog 1.0 import PQHandlingGeneral 1.0 import PQHandlingShortcuts 1.0 import PQHandlingFileDir 1.0 import PQHandlingManipulation 1.0 import PQLocalisation 1.0 import PQImageProperties 1.0 import PQFileWatcher 1.0 import PQWindowGeometry 1.0 import PQCppMetaData 1.0 import PQHandlingShareImgur 1.0 import PQHandlingWallpaper 1.0 import PQHandlingFaceTags 1.0 import PQHandlingExternal 1.0 import PQHandlingChromecast 1.0 import "./mainwindow" import "./shortcuts" import "./menumeta" import "./histogram" import "./slideshow" import "./settingsmanager" Window { id: toplevel visibility: Window.Hidden flags: PQSettings.interfaceWindowDecoration ? (PQSettings.interfaceKeepWindowOnTop ? (Qt.Window|Qt.WindowStaysOnTopHint) : Qt.Window) : (PQSettings.interfaceKeepWindowOnTop ? (Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint) : Qt.FramelessWindowHint) minimumWidth: 600 minimumHeight: 400 color: "#00000000" Image { id: bgimage anchors.fill: parent source: PQSettings.interfaceBackgroundImageScreenshot ? ("image://full/" + handlingFileDir.getTempDir() + "/photoqt_screenshot_0.jpg") : (PQSettings.interfaceBackgroundImageUse ? ("image://full/"+PQSettings.interfaceBackgroundImagePath) : "") fillMode: PQSettings.interfaceBackgroundImageScale ? Image.PreserveAspectFit : PQSettings.interfaceBackgroundImageScaleCrop ? Image.PreserveAspectCrop : PQSettings.interfaceBackgroundImageStretch ? Image.Stretch : PQSettings.interfaceBackgroundImageCenter ? Image.Pad : Image.Tile Rectangle { anchors.fill: parent color: Qt.rgba(PQSettings.interfaceOverlayColorRed/256.0, PQSettings.interfaceOverlayColorGreen/256.0, PQSettings.interfaceOverlayColorBlue/256.0, PQSettings.interfaceOverlayColorAlpha/256.0) Item { id: emptymessage x: (parent.width-width)/2 y: (parent.height-height)/2 width: parent.width-arrleft.width-arrright.width-40 height: col.height visible: filefoldermodel.current==-1&&!filefoldermodel.filterCurrentlyActive Column { id: col spacing: 5 Text { id: openmessage width: emptymessage.width //: Part of the message shown in the main view before any image is loaded text: em.pty+qsTranslate("other", "Click anywhere to open a file") font.pointSize: 50 font.bold: true color: "#c0c0c0" wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter } Text { width: emptymessage.width //: Part of the message shown in the main view before any image is loaded text: em.pty+qsTranslate("other", "Move your cursor to:") font.pointSize: 30 font.bold: true color: "#c0c0c0" wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter } Text { width: emptymessage.width //: Part of the message shown in the main view before any image is loaded, first option for where to move cursor to text: ">> " + em.pty+qsTranslate("other", "RIGHT EDGE for the main menu") font.pointSize: 20 font.bold: true color: "#c0c0c0" wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter } Text { width: emptymessage.width //: Part of the message shown in the main view before any image is loaded, second option for where to move cursor to text: ">> " + em.pty+qsTranslate("other", "LEFT EDGE for the metadata") font.pointSize: 20 font.bold: true color: "#c0c0c0" wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter } Column { Text { width: emptymessage.width //: Part of the message shown in the main view before any image is loaded, third option for where to move cursor to text: ">> " + em.pty+qsTranslate("other", "BOTTOM EDGE to show the thumbnails") font.pointSize: 20 font.bold: true color: "#c0c0c0" wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter } Text { width: emptymessage.width //: Part of the message shown in the main view before any image is loaded text: em.pty+qsTranslate("other", "(once an image/folder is loaded)") font.pointSize: 20 font.bold: true color: "#c0c0c0" wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter } } } } Image { id: arrright visible: emptymessage.visible anchors.right: parent.right anchors.rightMargin: 10 opacity: 0.5 y: (parent.height-height)/2 width: 100 height: 100 source: "/mainwindow/rightarrow.png" } Image { id: arrleft visible: emptymessage.visible anchors.left: parent.left anchors.leftMargin: 10 opacity: 0.5 y: (parent.height-height)/2 width: 100 height: 100 source: "/mainwindow/leftarrow.png" } Image { id: arrdown visible: emptymessage.visible anchors.bottom: parent.bottom anchors.bottomMargin: 10 opacity: 0.5 x: (parent.width-width)/2 width: 100 height: 100 source: "/mainwindow/leftarrow.png" rotation: -90 } Text { id: filtermessage anchors.centerIn: parent //: Used as in: No matches found for the currently set filter text: em.pty+qsTranslate("other", "No matches found") visible: filefoldermodel.current==-1&&filefoldermodel.filterCurrentlyActive font.pointSize: 50 font.bold: true color: "#bb808080" } } } //: The window title of PhotoQt title: (filefoldermodel.currentFilePath=="" ? "" : (handlingFileDir.getFileNameFromFullPath(filefoldermodel.currentFilePath) + " | "))+ em.pty+qsTranslate("other", "PhotoQt Image Viewer") onClosing: { handleBeforeClosing() if(PQSettings.interfaceTrayIcon == 1) { close.accepted = false toplevel.visible = false } else { close.accepted = true Qt.quit() handlingchromecast.cancelScanForChromecast() } } Component.onCompleted: { start() } PQTrayIcon { id: trayicon } PQVariables { id: variables } PQCmdReceived { id: cmdreceived } PQLoader { id: loader } // this needs to come BEFORE some of the following items // otherwise they will not be able to receive mouse events at all PQMouseShortcuts { id: mouseshortcuts } PQImage { id: imageitem } PQLabels { id: labels } PQMessage { id: message } PQWindowButtons { id: windowbuttons } PQThumbnailBar { id: thumbnails } PQContextMenu { id: contextmenu } PQModel { id: filefoldermodel } Loader { id: histogram } Loader { id: mainmenu } Loader { id: metadata } Loader { id: quicknavigation } Loader { id: slideshowsettings } Loader { id: slideshowcontrols } Loader { id: filedialog } Loader { id: filerename } Loader { id: filedelete } Loader { id: copymove } Loader { id: filesaveas } Loader { id: scaleimage } Loader { id: about } Loader { id: imgur } Loader { id: wallpaper } Loader { id: filter } Loader { id: settingsmanager } Loader { id: unavailable } Loader { id: unavailablepopout } Loader { id: logging } Loader { id: chromecast } PQImageProperties { id: imageproperties } PQFileWatcher { id: filewatcher } PQHandlingFileDialog { id: handlingFileDialog } PQHandlingGeneral { id: handlingGeneral } PQHandlingShortcuts { id: handlingShortcuts } PQHandlingFileDir { id: handlingFileDir } PQHandlingManipulation { id: handlingManipulation } PQHandlingShareImgur { id: handlingShareImgur } PQHandlingWallpaper { id: handlingWallpaper } PQHandlingFaceTags { id: handlingFaceTags } PQHandlingExternal { id: handlingExternal } PQHandlingChromecast { id: handlingchromecast } PQWindowGeometry { id: windowgeometry } PQCppMetaData { id: cppmetadata } PQKeyShortcuts { id: shortcuts } PQKeyMouseStrings { id: keymousestrings } // Localisation handler, allows for runtime switches of languages PQLocalisation { id : em Component.onCompleted: em.setLanguage(PQSettings.interfaceLanguage) } Connections { target: PQSettings onInterfaceLanguageChanged: em.setLanguage(PQSettings.interfaceLanguage) onInterfaceWindowModeChanged: { if(PQSettings.interfaceWindowMode) toplevel.visibility = Window.Maximized else toplevel.visibility = Window.FullScreen } } Connections { target: filefoldermodel onCurrentFilePathChanged: { cppmetadata.updateMetadata(filefoldermodel.currentFilePath) } } function start() { if(PQSettings.interfaceWindowMode) { if(PQSettings.interfaceSaveWindowGeometry) visibility = Window.Windowed else if(PQSettings.interfacePopoutMainMenu == 1 && PQSettings.interfacePopoutMetadata == 1 && PQSettings.interfacePopoutHistogram == 1 && PQSettings.interfacePopoutScale == 1 && PQSettings.interfacePopoutOpenFile == 1 && PQSettings.interfacePopoutSlideShowSettings == 1 && PQSettings.interfacePopoutSlideShowControls == 1 && PQSettings.interfacePopoutFileRename == 1 && PQSettings.interfacePopoutFileDelete == 1 && PQSettings.interfacePopoutAbout == 1 && PQSettings.interfacePopoutImgur == 1 && PQSettings.interfacePopoutWallpaper == 1 && PQSettings.interfacePopoutFilter == 1 && PQSettings.interfacePopoutSettingsManager == 1 && PQSettings.interfacePopoutFileSaveAs == 1) visibility = Window.Windowed else visibility = Window.Maximized } else visibility = Window.FullScreen if(PQSettings.interfaceSaveWindowGeometry) { if(windowgeometry.mainWindowMaximized) toplevel.visibility = Window.Maximized else { toplevel.setX(windowgeometry.mainWindowGeometry.x) toplevel.setY(windowgeometry.mainWindowGeometry.y) toplevel.setWidth(windowgeometry.mainWindowGeometry.width) toplevel.setHeight(windowgeometry.mainWindowGeometry.height) } } loader.ensureItIsReady("mainmenu") loader.ensureItIsReady("metadata") if(PQSettings.histogramVisible) loader.ensureItIsReady("histogram") if(PQSettings.interfaceQuickNavigation) loader.ensureItIsReady("quicknavigation") var filenameToLoad = handlingGeneral.getLastLoadedImage() if(PQPassOn.getFilePath() != "" || (PQSettings.interfaceRememberLastImage && filenameToLoad != "")) { if(PQPassOn.getFilePath() != "") filenameToLoad = PQPassOn.getFilePath() var folderToLoad = handlingFileDir.getFilePathFromFullPath(filenameToLoad) if(handlingFileDir.isDir(filenameToLoad)) { loader.show("filedialog") filefoldermodel.folderFileDialog = filenameToLoad } else { filefoldermodel.setFileNameOnceReloaded = filenameToLoad filefoldermodel.fileInFolderMainView = filenameToLoad filefoldermodel.folderFileDialog = folderToLoad } } else { if(PQSettings.openfileKeepLastLocation) filefoldermodel.folderFileDialog = handlingFileDialog.getLastLocation() else filefoldermodel.folderFileDialog = handlingFileDir.getHomeDir() } } function handleBeforeClosing() { if(variables.chromecastConnected) handlingchromecast.disconnectFromDevice() if(variables.slideShowActive) loader.passOn("slideshowcontrols", "quit", undefined) if(PQSettings.interfaceSaveWindowGeometry) { windowgeometry.mainWindowMaximized = (visibility==Window.Maximized) windowgeometry.mainWindowGeometry = Qt.rect(toplevel.x, toplevel.y, toplevel.width, toplevel.height) } if(filefoldermodel.current > -1 && PQSettings.interfaceRememberLastImage) handlingGeneral.setLastLoadedImage(filefoldermodel.currentFilePath) else handlingGeneral.deleteLastLoadedImage() handlingGeneral.cleanUpScreenshotsTakenAtStartup() } function quitPhotoQt() { handleBeforeClosing() Qt.quit() } function closePhotoQt() { close() } } photoqt-2.5/qml/about/000755 001750 001750 00000000000 14164671502 015321 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/about/PQAbout.qml000644 001750 001750 00000020562 14164671502 017354 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtGraphicalEffects 1.0 import "../elements" import "../shortcuts/handleshortcuts.js" as HandleShortcuts Item { id: about_top width: parentWidth height: parentHeight property int parentWidth: toplevel.width property int parentHeight: toplevel.height opacity: 0 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } visible: opacity!=0 enabled: visible Item { id: dummyitem width: 0 height: 0 } ShaderEffectSource { id: effectSource sourceItem: PQSettings.interfacePopoutAbout ? dummyitem : imageitem anchors.fill: parent sourceRect: Qt.rect(parent.x,parent.y,parent.width,parent.height) } FastBlur { id: blur anchors.fill: effectSource source: effectSource radius: 32 } Rectangle { anchors.fill: parent color: "#ee000000" PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: PQSettings.interfacePopoutAbout ? Qt.ArrowCursor : Qt.PointingHandCursor tooltip: em.pty+qsTranslate("about", "Close") enabled: !PQSettings.interfacePopoutAbout onClicked: button_close.clicked() } PQMouseArea { anchors.fill: insidecont anchors.margins: -50 hoverEnabled: true } Item { id: insidecont x: ((parent.width-width)/2) y: ((parent.height-height)/2) width: childrenRect.width height: childrenRect.height Column { spacing: 10 Item { width: 1 height: 5 } Image { source: "qrc:/other/logo.png" } Text { x: (parent.width-width)/2 color: "white" font.pointSize: 15 property date currentDate: new Date() text: "© 2011-" + Qt.formatDateTime(new Date(), "yyyy") + " Lukas Spies" textFormat: Text.RichText } Text { x: (parent.width-width)/2 color: "white" font.pointSize: 12 text: em.pty+qsTranslate("about", "Current version:") + " " + handlingGeneral.getVersion() } Text { x: (parent.width-width)/2 color: "white" font.pointSize: 12 text: em.pty+qsTranslate("about", "License:") + " GPL 2+" PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: em.pty+qsTranslate("about", "Open license") onClicked: Qt.openUrlExternally("http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt") } } Item { width: 1 height: 1 } Text { x: (parent.width-width)/2 color: "white" font.pointSize: 12 text: em.pty+qsTranslate("about", "Website:") + " https://photoqt.org" PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: em.pty+qsTranslate("about", "Open website") onClicked: Qt.openUrlExternally("https://photoqt.org") } } Text { x: (parent.width-width)/2 color: "white" font.pointSize: 12 text: em.pty+qsTranslate("about", "Contact:") + " Lukas@photoqt.org" PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: em.pty+qsTranslate("about", "Send an email") onClicked: Qt.openUrlExternally("mailto:Lukas@photoqt.org") } } Item { width: 1 height: 5 } PQButton { id: button_close x: (parent.width-width)/2 y: parent.height-height-10 text: em.pty+qsTranslate("about", "Close") tooltip: text onClicked: { about_top.opacity = 0 variables.visibleItem = "" } } Item { width: 1 height: 5 } } } Connections { target: loader onAboutPassOn: { if(what == "show") { opacity = 1 variables.visibleItem = "about" } else if(what == "hide") { button_close.clicked() } else if(what == "keyevent") { if(param[0] == Qt.Key_Escape) button_close.clicked() } } } } Image { x: 5 y: 5 width: 15 height: 15 source: "/popin.png" opacity: popinmouse.containsMouse ? 1 : 0.4 Behavior on opacity { NumberAnimation { duration: 200 } } PQMouseArea { id: popinmouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: PQSettings.interfacePopoutAbout ? //: Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface em.pty+qsTranslate("popinpopout", "Merge into main interface") : //: Tooltip of small button to show an element in its own window (i.e., not merged into main interface) em.pty+qsTranslate("popinpopout", "Move to its own window") onClicked: { if(PQSettings.interfacePopoutAbout) about_window.storeGeometry() button_close.clicked() PQSettings.interfacePopoutAbout = !PQSettings.interfacePopoutAbout HandleShortcuts.executeInternalFunction("__about") } } } } photoqt-2.5/qml/about/PQAboutPopout.qml000644 001750 001750 00000007152 14164671471 020570 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: about_window //: Window title title: em.pty+qsTranslate("about", "About") Component.onCompleted: { about_window.setX(windowgeometry.aboutWindowGeometry.x) about_window.setY(windowgeometry.aboutWindowGeometry.y) about_window.setWidth(windowgeometry.aboutWindowGeometry.width) about_window.setHeight(windowgeometry.aboutWindowGeometry.height) } minimumWidth: 300 minimumHeight: 200 modality: Qt.ApplicationModal objectName: "aboutpopout" onClosing: { storeGeometry() if(variables.visibleItem == "about") variables.visibleItem = "" } visible: PQSettings.interfacePopoutAbout&&curloader.item.opacity==1 flags: Qt.WindowStaysOnTopHint Connections { target: PQSettings onInterfacePopoutAboutChanged: { if(!PQSettings.interfacePopoutAbout) about_window.visible = Qt.binding(function() { return PQSettings.interfacePopoutAbout&&curloader.item.opacity==1; }) } } color: "#88000000" Loader { id: curloader source: "PQAbout.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return about_window.width }) item.parentHeight = Qt.binding(function() { return about_window.height }) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(about_window.objectName) } function storeGeometry() { windowgeometry.aboutWindowGeometry = Qt.rect(about_window.x, about_window.y, about_window.width, about_window.height) windowgeometry.aboutWindowMaximized = (about_window.visibility==Window.Maximized) } } photoqt-2.5/qml/filemanagement/000755 001750 001750 00000000000 14164672044 017165 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/filemanagement/PQCopyMove.qml000644 001750 001750 00000003723 14164672027 021710 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 Item { Connections { target: loader onCopyMoveFilePassOn: { if(filefoldermodel.current == -1) return if(what == "move") handlingFileDir.moveFile(filefoldermodel.currentFilePath) else if(what == "copy") handlingFileDir.copyFile(filefoldermodel.currentFilePath) } } } photoqt-2.5/qml/filemanagement/PQDelete.qml000644 001750 001750 00000022206 14164672044 021345 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Dialogs 1.2 import QtGraphicalEffects 1.0 import "../elements" import "../shortcuts/handleshortcuts.js" as HandleShortcuts Item { id: delete_top width: parentWidth height: parentHeight property int parentWidth: toplevel.width property int parentHeight: toplevel.height opacity: 0 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } visible: opacity!=0 enabled: visible Item { id: dummyitem width: 0 height: 0 } ShaderEffectSource { id: effectSource sourceItem: PQSettings.interfacePopoutFileDelete ? dummyitem : imageitem anchors.fill: parent sourceRect: Qt.rect(parent.x,parent.y,parent.width,parent.height) } FastBlur { id: blur anchors.fill: effectSource source: effectSource radius: 32 } Rectangle { anchors.fill: parent color: "#ee000000" PQMouseArea { anchors.fill: parent hoverEnabled: true onClicked: button_cancel.clicked() } Item { id: insidecont x: ((parent.width-width)/2) y: ((parent.height-height)/2) width: parent.width height: childrenRect.height clip: true PQMouseArea { anchors.fill: parent hoverEnabled: true } Column { spacing: 10 Text { id: heading x: (insidecont.width-width)/2 color: "white" font.pointSize: 20 font.bold: true text: em.pty+qsTranslate("filemanagement", "Delete file?") } Text { id: filename x: (insidecont.width-width)/2 color: "grey" font.pointSize: 15 text: "this_is_the_filename.jpg" } Text { id: error x: (insidecont.width-width)/2 color: "red" visible: false font.pointSize: 15 horizontalAlignment: Qt.AlignHCenter text: em.pty+qsTranslate("filemanagement", "An error occured, file could not be deleted!") } Item { id: butcont x: 0 width: insidecont.width height: childrenRect.height Row { spacing: 5 x: (parent.width-width)/2 PQButton { id: button_trash text: em.pty+qsTranslate("filemanagement", "Move to trash") onClicked: { if(!handlingFileDir.deleteFile(filefoldermodel.currentFilePath, false)) { error.visible = true return } filefoldermodel.removeEntryMainView(filefoldermodel.current) delete_top.opacity = 0 variables.visibleItem = "" } } PQButton { id: button_permanent text: em.pty+qsTranslate("filemanagement", "Delete permanently") onClicked: { if(!handlingFileDir.deleteFile(filefoldermodel.currentFilePath, true)) { error.visible = true return } filefoldermodel.removeEntryMainView(filefoldermodel.current) delete_top.opacity = 0 variables.visibleItem = "" } } PQButton { id: button_cancel text: genericStringCancel onClicked: { delete_top.opacity = 0 variables.visibleItem = "" } } } } Item { width: 1 height: 1 } Text { x: (parent.width-width)/2 font.pointSize: 8 font.bold: true color: "white" textFormat: Text.RichText text: "
" + keymousestrings.translateShortcut("Enter") + "=" + em.pty+qsTranslate("filemanagement", "Move to trash") + "
" + keymousestrings.translateShortcut("Shift+Enter") + "=" + em.pty+qsTranslate("filemanagement", "Delete permanently") + "
" } } } Connections { target: loader onFileDeletePassOn: { if(what == "show") { if(filefoldermodel.current == -1) return opacity = 1 error.visible = false variables.visibleItem = "filedelete" filename.text = handlingFileDir.getFileNameFromFullPath(filefoldermodel.currentFilePath) } else if(what == "hide") { button_cancel.clicked() } else if(what == "keyevent") { if(param[0] == Qt.Key_Escape) button_cancel.clicked() else if(param[0] == Qt.Key_Enter || param[0] == Qt.Key_Return) { if(param[1] & Qt.ShiftModifier) button_permanent.clicked() else button_trash.clicked() } } } } } Image { x: 5 y: 5 width: 15 height: 15 source: "/popin.png" opacity: popinmouse.containsMouse ? 1 : 0.4 Behavior on opacity { NumberAnimation { duration: 200 } } PQMouseArea { id: popinmouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: PQSettings.interfacePopoutFileDelete ? //: Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface em.pty+qsTranslate("popinpopout", "Merge into main interface") : //: Tooltip of small button to show an element in its own window (i.e., not merged into main interface) em.pty+qsTranslate("popinpopout", "Move to its own window") onClicked: { if(PQSettings.interfacePopoutFileDelete) delete_window.storeGeometry() button_cancel.clicked() PQSettings.interfacePopoutFileDelete = !PQSettings.interfacePopoutFileDelete HandleShortcuts.executeInternalFunction("__delete") } } } } photoqt-2.5/qml/filemanagement/PQDeletePopout.qml000644 001750 001750 00000007301 14164672023 022550 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: delete_window //: Window title title: em.pty+qsTranslate("filemanagement", "Delete file?") Component.onCompleted: { delete_window.setX(windowgeometry.fileDeleteWindowGeometry.x) delete_window.setY(windowgeometry.fileDeleteWindowGeometry.y) delete_window.setWidth(windowgeometry.fileDeleteWindowGeometry.width) delete_window.setHeight(windowgeometry.fileDeleteWindowGeometry.height) } minimumWidth: 200 minimumHeight: 300 modality: Qt.ApplicationModal objectName: "deletepopout" onClosing: { storeGeometry() if(variables.visibleItem == "filedelete") variables.visibleItem = "" } visible: PQSettings.interfacePopoutFileDelete&&curloader.item.opacity==1 flags: Qt.WindowStaysOnTopHint Connections { target: PQSettings onInterfacePopoutFileDeleteChanged: { if(!PQSettings.interfacePopoutFileDelete) delete_window.visible = Qt.binding(function() { return PQSettings.interfacePopoutFileDelete&&curloader.item.opacity==1; }) } } color: "#88000000" Loader { id: curloader source: "PQDelete.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return delete_window.width }) item.parentHeight = Qt.binding(function() { return delete_window.height }) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(delete_window.objectName) } function storeGeometry() { windowgeometry.fileDeleteWindowGeometry = Qt.rect(delete_window.x, delete_window.y, delete_window.width, delete_window.height) windowgeometry.fileDeleteWindowMaximized = (delete_window.visibility==Window.Maximized) } } photoqt-2.5/qml/filemanagement/PQSaveAs.qml000644 001750 001750 00000033714 14164672034 021332 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import QtGraphicalEffects 1.0 import "../elements" import "../shortcuts/handleshortcuts.js" as HandleShortcuts Item { id: saveas_top width: parentWidth height: parentHeight property int parentWidth: toplevel.width property int parentHeight: toplevel.height opacity: 0 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } visible: opacity!=0 enabled: visible Item { id: dummyitem width: 0 height: 0 } ShaderEffectSource { id: effectSource sourceItem: PQSettings.interfacePopoutFileSaveAs ? dummyitem : imageitem anchors.fill: parent sourceRect: Qt.rect(parent.x,parent.y,parent.width,parent.height) } FastBlur { id: blur anchors.fill: effectSource source: effectSource radius: 32 } Rectangle { anchors.fill: parent color: "#ee000000" PQMouseArea { anchors.fill: parent hoverEnabled: true onClicked: button_cancel.clicked() } Item { id: insidecont x: ((parent.width-width)/2) y: ((parent.height-height)/2) width: parent.width height: childrenRect.height clip: true PQMouseArea { anchors.fill: parent hoverEnabled: true } Column { spacing: 10 Text { id: heading x: (insidecont.width-width)/2 color: "white" font.pointSize: 20 font.bold: true //: This is a title, similar to all the 'save as' options in many programs. text: em.pty+qsTranslate("filemanagement", "Save file as") } Text { id: filename x: (insidecont.width-width)/2 color: "grey" font.pointSize: 15 text: "this_is_the_filename.jpg" } Item { width: 1 height: 1 } Text { id: error x: (insidecont.width-width)/2 color: "red" visible: false font.pointSize: 15 horizontalAlignment: Qt.AlignHCenter text: em.pty+qsTranslate("filemanagement", "An error occured, file could not be saved!") } Text { id: abort x: (insidecont.width-width)/2 color: "orange" visible: false font.pointSize: 15 horizontalAlignment: Qt.AlignHCenter //: 'Operation' here is the operation of saving an image in a new format text: em.pty+qsTranslate("filemanagement", "Operation cancelled") } PQLineEdit { id: formatsfilter x: (insidecont.width-width)/2 width: formatsflick.width //: This is a short hint informing the user that here they can 'filter all the possible file formats' placeholderText: em.pty+qsTranslate("filemanagement", "Filter formats") } Rectangle { x: (insidecont.width-width)/2 width: Math.min(saveas_top.width*0.5, 500) height: 300 color: "#44000000" border.width: 1 border.color: "#66ffffff" Flickable { id: formatsflick anchors.fill: parent anchors.margins: 1 anchors.rightMargin: 0 clip: true ListView { id: formatsview anchors.fill: parent anchors.leftMargin: -1 anchors.rightMargin: -1 ScrollBar.vertical: PQScrollBar { id: scroll } model: data.length property var data: [] property int currentHover: -1 onCurrentIndexChanged: { if(currentIndex == -1) return var newSuffix = data[currentIndex][1].split(",")[0] newfilename.text = handlingFileDir.replaceSuffix(newfilename.text, newSuffix) newfilename.forceActiveFocus() } Component.onCompleted: { data = PQImageFormats.getWriteableFormats() currentIndex = -1 } delegate: Rectangle { width: formatsview.width height: visible ? (formatsname.height+10) : 0 color: formatsview.currentIndex==index ? "#88777777" : (formatsview.currentHover==index ? "#88444444" : "#88222222") border.width: 1 border.color: "black" visible: formatsfilter.text=="" || formatsview.data[index][1].toLowerCase().indexOf(formatsfilter.text.toLowerCase())!=-1 || formatsview.data[index][2].toLowerCase().indexOf(formatsfilter.text.toLowerCase())!=-1 Text { id: formatsname x: 5 y: 5 width: parent.width-10 color: "white" text: formatsview.data[index][2] } PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: "" + formatsview.data[index][2] + "
*." + formatsview.data[index][1].split(",").join(", *.") onEntered: formatsview.currentHover = index onClicked: formatsview.currentIndex = index onWheel: { var newy = formatsview.contentY - wheel.angleDelta.y // set new contentY, but don't move beyond top/bottom end of view formatsview.contentY = Math.max(0, Math.min(newy, formatsview.contentHeight-formatsview.height)) } } } } } } Row { x: (insidecont.width-width)/2 spacing: 5 Text { id: newfilename_label y: (newfilename.height-height)/2 text: em.pty+qsTranslate("filemanagement", "New filename") + ":" color: "white" } PQLineEdit { id: newfilename width: formatsflick.width-newfilename_label.width-5 placeholderText: em.pty+qsTranslate("filemanagement", "New filename") } } Item { id: butcont x: 0 width: insidecont.width height: childrenRect.height Row { spacing: 5 x: (parent.width-width)/2 PQButton { id: button_ok text: em.pty+qsTranslate("filemanagement", "Choose location and save file") border.width: 1 border.color: "black" enabled: formatsview.currentIndex != -1 onClicked: { var stat = handlingManipulation.chooseLocationAndConvertImage(filefoldermodel.currentFilePath, newfilename.text, formatsview.data[formatsview.currentIndex][1]) if(stat == -1) { abort.visible = true hideErrorAbort.restart() } else if(stat == 1) { saveas_top.opacity = 0 variables.visibleItem = "" } else { error.visible = true hideErrorAbort.restart() } } } PQButton { scale: 0.8 id: button_cancel text: genericStringCancel border.width: 1 border.color: "black" renderType: Text.QtRendering onClicked: { saveas_top.opacity = 0 variables.visibleItem = "" } } } } } } Connections { target: loader onFileSaveAsPassOn: { if(what == "show") { if(filefoldermodel.current == -1) return opacity = 1 error.visible = false abort.visible = false variables.visibleItem = "filesaveas" filename.text = handlingFileDir.getFileNameFromFullPath(filefoldermodel.currentFilePath) newfilename.text = filename.text formatsfilter.forceActiveFocus() formatsview.currentIndex = -1 } else if(what == "hide") { button_cancel.clicked() } else if(what == "keyevent") { if(param[0] == Qt.Key_Escape) button_cancel.clicked() else if(param[0] == Qt.Key_Enter || param[0] == Qt.Key_Return) button_ok.clicked() } } } } Timer { id: hideErrorAbort interval: 3000 repeat: false running: false onTriggered: { error.visible = false abort.visible = false } } Image { x: 5 y: 5 width: 15 height: 15 source: "/popin.png" opacity: popinmouse.containsMouse ? 1 : 0.4 Behavior on opacity { NumberAnimation { duration: 200 } } PQMouseArea { id: popinmouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: PQSettings.interfacePopoutFileSaveAs ? //: Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface em.pty+qsTranslate("popinpopout", "Merge into main interface") : //: Tooltip of small button to show an element in its own window (i.e., not merged into main interface) em.pty+qsTranslate("popinpopout", "Move to its own window") onClicked: { if(PQSettings.interfacePopoutFileSaveAs) saveas_window.storeGeometry() button_cancel.clicked() PQSettings.interfacePopoutFileSaveAs= !PQSettings.interfacePopoutFileSaveAs HandleShortcuts.executeInternalFunction("__saveAs") } } } } photoqt-2.5/qml/filemanagement/PQRename.qml000644 001750 001750 00000020603 14164672040 021345 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Dialogs 1.2 import QtGraphicalEffects 1.0 import "../elements" import "../shortcuts/handleshortcuts.js" as HandleShortcuts Item { id: rename_top width: parentWidth height: parentHeight property int parentWidth: toplevel.width property int parentHeight: toplevel.height opacity: 0 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } visible: opacity!=0 enabled: visible Item { id: dummyitem width: 0 height: 0 } ShaderEffectSource { id: effectSource sourceItem: PQSettings.interfacePopoutFileRename ? dummyitem : imageitem anchors.fill: parent sourceRect: Qt.rect(parent.x,parent.y,parent.width,parent.height) } FastBlur { id: blur anchors.fill: effectSource source: effectSource radius: 32 } Rectangle { anchors.fill: parent color: "#ee000000" PQMouseArea { anchors.fill: parent hoverEnabled: true onClicked: button_cancel.clicked() } Item { id: insidecont x: ((parent.width-width)/2) y: ((parent.height-height)/2) width: parent.width height: childrenRect.height clip: true PQMouseArea { anchors.fill: parent hoverEnabled: true } Column { spacing: 10 Text { id: heading x: (insidecont.width-width)/2 color: "white" font.pointSize: 20 font.bold: true text: em.pty+qsTranslate("filemanagement", "Rename file") } Text { id: filename x: (insidecont.width-width)/2 color: "grey" font.pointSize: 15 text: "this_is_the_old_filename.jpg" } Text { id: error x: (insidecont.width-width)/2 color: "red" visible: false font.pointSize: 15 horizontalAlignment: Qt.AlignHCenter text: em.pty+qsTranslate("filemanagement", "An error occured, file could not be renamed!") } PQLineEdit { id: filenameedit x: (insidecont.width-width)/2 width: 300 height: 40 placeholderText: em.pty+qsTranslate("filemanagement", "Enter new filename") } Item { id: butcont x: 0 width: insidecont.width height: childrenRect.height Row { spacing: 5 x: (parent.width-width)/2 PQButton { id: button_ok text: em.pty+qsTranslate("filemanagement", "Rename file") enabled: filenameedit.text!="" onClicked: { if(filenameedit.text == "") return var cur = filefoldermodel.currentFilePath var dir = handlingFileDir.getFilePathFromFullPath(cur) var suf = handlingFileDir.getSuffix(cur) if(!handlingFileDir.renameFile(dir, filename.text, filenameedit.text+"."+suf)) { error.visible = true return } error.visible = false filefoldermodel.setFileNameOnceReloaded = dir + "/" + filenameedit.text+"."+suf rename_top.opacity = 0 variables.visibleItem = "" } } PQButton { id: button_cancel text: genericStringCancel onClicked: { rename_top.opacity = 0 variables.visibleItem = "" } } } } } } Connections { target: loader onFileRenamePassOn: { if(what == "show") { if(filefoldermodel.current == -1) return opacity = 1 error.visible = false variables.visibleItem = "filerename" filename.text = handlingFileDir.getFileNameFromFullPath(filefoldermodel.currentFilePath) filenameedit.text = handlingFileDir.getBaseName(filefoldermodel.currentFilePath) filenameedit.setFocus() } else if(what == "hide") { button_cancel.clicked() } else if(what == "keyevent") { if(param[0] == Qt.Key_Escape) button_cancel.clicked() else if(param[0] == Qt.Key_Enter || param[0] == Qt.Key_Return) button_ok.clicked() } } } } Image { x: 5 y: 5 width: 15 height: 15 source: "/popin.png" opacity: popinmouse.containsMouse ? 1 : 0.4 Behavior on opacity { NumberAnimation { duration: 200 } } PQMouseArea { id: popinmouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: PQSettings.interfacePopoutFileRename ? //: Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface em.pty+qsTranslate("popinpopout", "Merge into main interface") : //: Tooltip of small button to show an element in its own window (i.e., not merged into main interface) em.pty+qsTranslate("popinpopout", "Move to its own window") onClicked: { if(PQSettings.interfacePopoutFileRename) rename_window.storeGeometry() button_cancel.clicked() PQSettings.interfacePopoutFileRename = !PQSettings.interfacePopoutFileRename HandleShortcuts.executeInternalFunction("__rename") } } } } photoqt-2.5/qml/filemanagement/PQRenamePopout.qml000644 001750 001750 00000007300 14164672017 022557 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: rename_window //: Window title title: em.pty+qsTranslate("filemanagement", "Rename file") Component.onCompleted: { rename_window.setX(windowgeometry.fileRenameWindowGeometry.x) rename_window.setY(windowgeometry.fileRenameWindowGeometry.y) rename_window.setWidth(windowgeometry.fileRenameWindowGeometry.width) rename_window.setHeight(windowgeometry.fileRenameWindowGeometry.height) } minimumWidth: 200 minimumHeight: 300 modality: Qt.ApplicationModal objectName: "renamepopout" onClosing: { storeGeometry() if(variables.visibleItem == "filerename") variables.visibleItem = "" } visible: PQSettings.interfacePopoutFileRename&&curloader.item.opacity==1 flags: Qt.WindowStaysOnTopHint Connections { target: PQSettings onInterfacePopoutFileRenameChanged: { if(!PQSettings.interfacePopoutFileRename) rename_window.visible = Qt.binding(function() { return PQSettings.interfacePopoutFileRename&&curloader.item.opacity==1; }) } } color: "#88000000" Loader { id: curloader source: "PQRename.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return rename_window.width }) item.parentHeight = Qt.binding(function() { return rename_window.height }) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(rename_window.objectName) } function storeGeometry() { windowgeometry.fileRenameWindowGeometry = Qt.rect(rename_window.x, rename_window.y, rename_window.width, rename_window.height) windowgeometry.fileRenameWindowMaximized = (rename_window.visibility==Window.Maximized) } } photoqt-2.5/qml/filemanagement/PQSaveAsPopout.qml000644 001750 001750 00000007301 14164672010 022524 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: saveas_window //: Window title title: em.pty+qsTranslate("filemanagement", "Save file as") Component.onCompleted: { saveas_window.setX(windowgeometry.fileSaveAsWindowGeometry.x) saveas_window.setY(windowgeometry.fileSaveAsWindowGeometry.y) saveas_window.setWidth(windowgeometry.fileSaveAsWindowGeometry.width) saveas_window.setHeight(windowgeometry.fileSaveAsWindowGeometry.height) } minimumWidth: 200 minimumHeight: 300 modality: Qt.ApplicationModal objectName: "saveaspopout" onClosing: { storeGeometry() if(variables.visibleItem == "filesaveas") variables.visibleItem = "" } visible: PQSettings.interfacePopoutFileSaveAs&&curloader.item.opacity==1 flags: Qt.WindowStaysOnTopHint Connections { target: PQSettings onInterfacePopoutFileSaveAsChanged: { if(!PQSettings.interfacePopoutFileSaveAs) saveas_window.visible = Qt.binding(function() { return PQSettings.interfacePopoutFileSaveAs&&curloader.item.opacity==1; }) } } color: "#88000000" Loader { id: curloader source: "PQSaveAs.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return saveas_window.width }) item.parentHeight = Qt.binding(function() { return saveas_window.height }) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(saveas_window.objectName) } function storeGeometry() { windowgeometry.fileSaveAsWindowGeometry = Qt.rect(saveas_window.x, saveas_window.y, saveas_window.width, saveas_window.height) windowgeometry.fileSaveAsWindowMaximized = (saveas_window.visibility==Window.Maximized) } } photoqt-2.5/qml/mainwindow/000755 001750 001750 00000000000 14164672265 016372 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/mainwindow/PQNavigation.qml000644 001750 001750 00000013510 14164672223 021437 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../elements" Rectangle { id: nav_top x: variables.metaDataWidthWhenKeptOpen + 100 y: PQSettings.thumbnailsEdge=="Bottom" ? 100 : parent.height-height-100 Behavior on x { NumberAnimation { duration: 200 } } width: row.width height: row.height opacity: PQSettings.interfaceQuickNavigation ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 200 } } visible: opacity>0 color: "#bb000000" radius: 10 PQMouseArea { anchors.fill: parent drag.target: parent drag.minimumX: 0 drag.maximumX: toplevel.width-nav_top.width drag.minimumY: 0 drag.maximumY: toplevel.height-nav_top.height hoverEnabled: true tooltip: em.pty+qsTranslate("navigate", "Click and drag to move") } Row { id: row spacing: 10 Item { width: 1 height: 1 } Image { width: 50 height: width source: "/mainwindow/leftarrow.png" enabled: filefoldermodel.countMainView>0 opacity: enabled ? 1 : 0.5 Behavior on opacity { NumberAnimation { duration: 200 } } PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor drag.target: nav_top drag.minimumX: 0 drag.maximumX: toplevel.width-nav_top.width drag.minimumY: 0 drag.maximumY: toplevel.height-nav_top.height tooltip: em.pty+qsTranslate("navigate", "Navigate to previous image in folder") onClicked: imageitem.loadPrevImage() } } Image { width: 50 height: width source: "/mainwindow/rightarrow.png" enabled: filefoldermodel.countMainView>0 opacity: enabled ? 1 : 0.5 Behavior on opacity { NumberAnimation { duration: 200 } } PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor drag.target: nav_top drag.minimumX: 0 drag.maximumX: toplevel.width-nav_top.width drag.minimumY: 0 drag.maximumY: toplevel.height-nav_top.height tooltip: em.pty+qsTranslate("navigate", "Navigate to next image in folder") onClicked: imageitem.loadNextImage() } } Item { width: 1 height: 1 } Image { width: 50 height: width source: "/mainwindow/menu.png" PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor drag.target: nav_top drag.minimumX: 0 drag.maximumX: toplevel.width-nav_top.width drag.minimumY: 0 drag.maximumY: toplevel.height-nav_top.height tooltip: em.pty+qsTranslate("navigate", "Show main menu") onClicked: loader.passOn("mainmenu", "toggle", undefined) } } Item { width: 1 height: 1 } } // this makes sure that a change in the window geometry does not leeds to the element being outside the visible area Connections { target: toplevel onWidthChanged: { if(nav_top.x < 0) nav_top.x = 0 else if(nav_top.x > toplevel.width-nav_top.width) nav_top.x = toplevel.width-nav_top.width } onHeightChanged: { if(nav_top.y < 0) nav_top.y = 0 else if(nav_top.y > toplevel.height-nav_top.height) nav_top.y = toplevel.height-nav_top.height } } Connections { target: loader onQuickNavigationPassOn: { if(what == "toggle") toggle() } } } photoqt-2.5/qml/mainwindow/PQWindowButtons.qml000644 001750 001750 00000014446 14164672217 022202 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import "../elements" Item { x: parent.width-width-5 y: 5 width: row.width height: row.height // these are always visible on top of everything, according to the conditions below z: 999 visible: !(variables.slideShowActive&&PQSettings.slideshowHideLabels) && !PQSettings.interfaceLabelsHideWindowButtons && opacity==1 opacity: variables.visibleItem=="filedialog" ? 0 : 1 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } // clicks between buttons has no effect anywhere PQMouseArea { anchors.fill: parent hoverEnabled: true } Row { id: row spacing: 10 Image { width: 3*PQSettings.interfaceLabelsWindowButtonsSize height: 3*PQSettings.interfaceLabelsWindowButtonsSize source: PQSettings.interfaceWindowMode ? "/mainwindow/fullscreen_on.png" : "/mainwindow/fullscreen_off.png" opacity: fullscreen_mouse.containsMouse ? 0.8 : 0.2 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } PQMouseArea { id: fullscreen_mouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: (PQSettings.interfaceWindowMode ? em.pty+qsTranslate("quickinfo", "Click here to enter fullscreen mode") : em.pty+qsTranslate("quickinfo", "Click here to exit fullscreen mode")) acceptedButtons: Qt.LeftButton|Qt.RightButton onClicked: { if(mouse.button == Qt.LeftButton) PQSettings.interfaceWindowMode = !PQSettings.interfaceWindowMode else { var pos = parent.mapFromItem(parent.parent, mouse.x, mouse.y) rightclickmenu.popup(Qt.point(parent.x+pos.x, parent.y+pos.y)) } } } } Image { width: 3*PQSettings.interfaceLabelsWindowButtonsSize height: 3*PQSettings.interfaceLabelsWindowButtonsSize source: "/mainwindow/close.png" visible: (toplevel.visibility==Window.FullScreen) || (!PQSettings.interfaceWindowDecoration) PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: em.pty+qsTranslate("quickinfo", "Click here to close PhotoQt") acceptedButtons: Qt.LeftButton|Qt.RightButton onClicked: { if(mouse.button == Qt.LeftButton) toplevel.close() else { var pos = parent.mapFromItem(parent.parent, mouse.x, mouse.y) rightclickmenu.popup(Qt.point(parent.x+pos.x, parent.y+pos.y)) } } } } } PQMenu { id: rightclickmenu model: [(PQSettings.interfaceLabelsHideCounter ? em.pty+qsTranslate("quickinfo", "Show counter") : em.pty+qsTranslate("quickinfo", "Hide counter")), (PQSettings.interfaceLabelsHideFilepath ? em.pty+qsTranslate("quickinfo", "Show file path") : em.pty+qsTranslate("quickinfo", "Hide file path")), (PQSettings.interfaceLabelsHideFilename ? em.pty+qsTranslate("quickinfo", "Show file name") : em.pty+qsTranslate("quickinfo", "Hide file name")), (PQSettings.interfaceLabelsHideZoomLevel ? em.pty+qsTranslate("quickinfo", "Show zoom level") : em.pty+qsTranslate("quickinfo", "Hide zoom level")), (PQSettings.interfaceLabelsHideWindowButtons ? em.pty+qsTranslate("quickinfo", "Show window buttons") : em.pty+qsTranslate("quickinfo", "Hide window buttons")) ] onTriggered: { if(index == 0) PQSettings.interfaceLabelsHideCounter = !PQSettings.interfaceLabelsHideCounter else if(index == 1) PQSettings.interfaceLabelsHideFilepath = !PQSettings.interfaceLabelsHideFilepath else if(index == 2) PQSettings.interfaceLabelsHideFilename = !PQSettings.interfaceLabelsHideFilename else if(index == 3) PQSettings.interfaceLabelsHideZoomLevel = !PQSettings.interfaceLabelsHideZoomLevel else if(index == 4) PQSettings.interfaceLabelsHideWindowButtons = !PQSettings.interfaceLabelsHideWindowButtons } } } photoqt-2.5/qml/mainwindow/PQImage.qml000644 001750 001750 00000037171 14164672234 020375 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtGraphicalEffects 1.0 import "./image/" import "../elements" Item { id: container anchors.fill: parent anchors.leftMargin: PQSettings.imageviewMargin+ variables.metaDataWidthWhenKeptOpen Behavior on anchors.leftMargin { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } // ThumbnailsVisibility // 0 = on demand // 1 = always // 2 = except when zoomed anchors.bottomMargin: ((PQSettings.thumbnailsVisibility==1 || PQSettings.thumbnailsVisibility==2) && PQSettings.thumbnailsEdge!="Top" && !PQSettings.thumbnailsDisable && !variables.slideShowActive & !variables.faceTaggingActive) ? PQSettings.imageviewMargin+thumbnails.height : PQSettings.imageviewMargin Behavior on anchors.bottomMargin { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } anchors.topMargin: ((PQSettings.thumbnailsVisibility==1 || PQSettings.thumbnailsVisibility==2) && PQSettings.thumbnailsEdge=="Top" && !PQSettings.thumbnailsDisable && !variables.slideShowActive && !variables.faceTaggingActive) ? PQSettings.imageviewMargin+thumbnails.height : PQSettings.imageviewMargin Behavior on anchors.topMargin { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } anchors.rightMargin: PQSettings.imageviewMargin signal zoomIn(var wheelDelta) signal zoomOut(var wheelDelta) signal zoomReset() signal zoomActual() signal rotate(var deg) signal rotateReset() signal mirrorH() signal mirrorV() signal mirrorReset() signal playPauseAnim() signal playAnim() signal pauseAnim() signal restartAnim() signal hideAllImages() // emitted inside of PQImageNormal/Animated whenever its status changed to Image.Reader signal newImageLoaded(var id) // id property string imageLatestAdded: "" // currently shown index property int currentlyShownIndex: -1 property int currentVideoLength: -1 Repeater { id: repeat anchors.fill: parent model: ListModel { id: image_model } delegate: Item { id: deleg property int imageStatus: Image.Loading Loader { id: imageloader property alias imageStatus: deleg.imageStatus } property string uniqueid: handlingGeneral.getUniqueId() onImageStatusChanged: { if(imageStatus == Image.Ready) { loadingtimer.stop() loadingindicator.visible = false if(variables.chromecastConnected) handlingchromecast.streamOnDevice(src) } if(imageStatus == Image.Ready && container.imageLatestAdded==deleg.uniqueid) { hideShowAni.showing = true hideShowAni.imageIndex = imageIndex hideShowAni.startAni() container.newImageLoaded(deleg.uniqueid) } } Component.onCompleted: { container.imageLatestAdded = deleg.uniqueid loadingindicator.visible = false loadingtimer.restart() if(PQImageFormats.getEnabledFormatsVideo().indexOf(handlingFileDir.getSuffix(src))>-1) { imageloader.source = "image/PQMovie.qml" variables.videoControlsVisible = true } else if(imageproperties.isAnimated(src)) { imageloader.source = "image/PQImageAnimated.qml" variables.videoControlsVisible = false } else { imageloader.source = "image/PQImageNormal.qml" variables.videoControlsVisible = false } } Connections { target: container onHideAllImages: { hideShowAni.showing = false hideShowAni.startAni() } onNewImageLoaded: { if(id != deleg.uniqueid) { if(hideShowAni.running) { if(hideShowAni.showing) hideShowAni.continueToDeleteAfterShowing = true } else { if(deleg.imageStatus == Image.Ready) { hideShowAni.showing = false // store pos/zoom/rotation/mirror, can be restored when setting enabled imageloader.item.storePosRotZoomMirror() hideShowAni.startAni() } else { for(var i = image_model.count-2; i >= 0; --i) image_model.remove(i) } } } } } PropertyAnimation { id: hideShowAni target: deleg property: PQSettings.imageviewAnimationType duration: PQSettings.imageviewAnimationDuration*100 property bool showing: true property bool continueToDeleteAfterShowing: false alwaysRunToEnd: true property int imageIndex: -1 function startAni() { var hideshow = "" if(showing) { if(imageIndex >= container.currentlyShownIndex) hideshow = "left" else hideshow = "right" container.currentlyShownIndex = imageIndex } else { if(imageIndex >= container.currentlyShownIndex) hideshow = "right" else hideshow = "left" } if(showing) { if(PQSettings.imageviewAnimationType == "x") { if(hideshow == "left") { from = container.width to = PQSettings.imageviewMargin } else { from = -container.width to = PQSettings.imageviewMargin } } else if(PQSettings.imageviewAnimationType == "y") { if(hideshow == "left") { from = container.height to = PQSettings.imageviewMargin } else { from = -container.height to = PQSettings.imageviewMargin } // we default to opacity } else { from = 0 to = 1 } } else { if(PQSettings.imageviewAnimationType == "x") { if(hideshow == "left") { from = deleg.x to = -container.width } else { from = deleg.x to = container.width } } else if(PQSettings.imageviewAnimationType == "y") { if(hideshow == "left") { from = deleg.x to = -container.height } else { from = deleg.x to = container.height } // we default to opacity } else { from = 1 to = 0 } } start() } onStopped: { if(!showing) { for(var i = image_model.count-2; i >= 0; --i) image_model.remove(i) } else if(continueToDeleteAfterShowing) { showing = false startAni() } } } } } // a big button in middle of screen to enter 'viewer mode' Rectangle { id: viewermodebut x: (parent.width-width)/2 y: (parent.height-height)/2 width: 300 height: 300 color: "#cc000000" radius: 10 opacity: viewermodemouse.containsMouse||viewermodebutmousehide.containsMouse ? 1 : 0.5 Behavior on opacity { NumberAnimation { duration: 300 } } property bool viewermodeavailable: ( imageproperties.isPopplerDocument(filefoldermodel.currentFilePath) && (imageproperties.getDocumentPages(filefoldermodel.currentFilePath)>1 || filefoldermodel.isPQT)) || (imageproperties.isArchive(filefoldermodel.currentFilePath)) property bool notinside: true visible: PQSettings.imageviewBigViewerModeButton && viewermodeavailable && notinside Connections { target: filefoldermodel onIsPQTChanged: { if(!filefoldermodel.isPQT && !filefoldermodel.isARC) viewermodebut.notinside = true } onIsARCChanged: { if(!filefoldermodel.isPQT && !filefoldermodel.isARC) viewermodebut.notinside = true } } PropertyAnimation { id: hidebut1 target: viewermodebut properties: "width,height" from: 300 to: Math.min(container.width, container.height) duration: 400 } PropertyAnimation { id: hidebut2 target: viewermodebut property: "opacity" from: 1 to: 0 duration: 400 onStopped: { viewermodemouse.enabled = true viewermodebut.notinside = false viewermodebut.width = 300 viewermodebut.height = 300 viewermodebut.opacity = Qt.binding(function() { if(viewermodemouse.containsMouse || viewermodebutmousehide.containsMouse) return 1; return 0.5; }) } } Image { anchors.fill: parent anchors.margins: 40 source: "/image/viewermode.png" } PQMouseArea { id: viewermodemouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: em.pty+qsTranslate("quickinfo", "Click here to enter viewer mode") onClicked: { viewermodemouse.enabled = false hidebut1.start() hidebut2.start() labels.enterViewerMode() } } Image { x: parent.width-width+10 y: -10 width: 30 height: 30 opacity: viewermodebutmousehide.containsMouse ? 0.5 : 0.25 Behavior on opacity { NumberAnimation { duration: 300 } } source: "/other/histogramclose.png" PQMouseArea { id: viewermodebutmousehide anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: em.pty+qsTranslate("quickinfo", "Hide central 'viewer mode' button") onClicked: PQSettings.imageviewBigViewerModeButton = false } } } Timer { id: loadingtimer interval: 500 running: false repeat: false onTriggered: loadingindicator.visible = true } PQLoading { id: loadingindicator } PQFaceTagsUnsupported { id: facetagsunsupported anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter } Connections { target: filefoldermodel onCurrentFilePathChanged: loadNewFile() } Connections { target: filewatcher onCurrentFileChanged: loadNewFile() } function loadNewFile() { variables.currentRotationAngle = 0 if(filefoldermodel.current > -1 && filefoldermodel.current < filefoldermodel.countMainView) { var src = handlingFileDir.cleanPath(filefoldermodel.currentFilePath) image_model.append({"src" : src, "imageIndex" : filefoldermodel.current}) filewatcher.setCurrentFile(src) } else if(filefoldermodel.current == -1 || filefoldermodel.countMainView == 0) { hideAllImages() filewatcher.setCurrentFile("") } } function loadNextImage() { if(filefoldermodel.countMainView == 0) return if(filefoldermodel.current < filefoldermodel.countMainView-1) ++filefoldermodel.current else if(filefoldermodel.current == filefoldermodel.countMainView-1 && PQSettings.imageviewLoopThroughFolder) filefoldermodel.current = 0 } function loadPrevImage() { if(filefoldermodel.countMainView == 0) return if(filefoldermodel.current > 0) --filefoldermodel.current else if(filefoldermodel.current == 0 && PQSettings.imageviewLoopThroughFolder) filefoldermodel.current = filefoldermodel.countMainView-1 } function loadFirstImage() { if(filefoldermodel.countMainView == 0) return filefoldermodel.current = 0 } function loadLastImage() { if(filefoldermodel.countMainView == 0) return filefoldermodel.current = filefoldermodel.countMainView-1 } function playPauseAnimation() { container.playPauseAnim() } function getCurrentVideoLength() { return currentVideoLength } } photoqt-2.5/qml/mainwindow/PQContextMenu.qml000644 001750 001750 00000037426 14164672265 021633 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Window 2.2 import "../elements" import "../shortcuts/handleshortcuts.js" as HandleShortcuts Window { id: context_top width: mainlistview.width+20 height: mainlistview.height+20 visible: false modality: Qt.NonModal flags: Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint color: "#dd000000" property var allitems_static: [ //: This is an entry in the context menu. Please keep short! [["__open", "open", em.pty+qsTranslate("MainMenu", "Open file (browse images)"), "hide"]], [["separator", "", "", ""]], //: This is an entry in the context menu, used as in: Zoom image. Please keep short! [["zoom","zoom",em.pty+qsTranslate("MainMenu", "Zoom")], ["__zoomIn","","+", "donthide"], ["__zoomOut","","-", "donthide"], ["__zoomReset","","0", "donthide"], ["__zoomActual","","1:1", "donthide"]], //: This is an entry in the context menu, used as in: Rotate image. Please keep short! [["rotate","rotate",em.pty+qsTranslate("MainMenu", "Rotate")], //: This is an entry in the context menu, used as in: Rotate image left. Please keep short! ["__rotateL","",em.pty+qsTranslate("MainMenu", "left"), "donthide"], //: This is an entry in the context menu, used as in: Rotate image right. Please keep short! ["__rotateR","",em.pty+qsTranslate("MainMenu", "right"), "donthide"], //: This is an entry in the context menu, used as in: Reset rotation of image. Please keep short! ["__rotate0","",em.pty+qsTranslate("MainMenu", "reset"), "donthide"]], //: This is an entry in the context menu, used as in: Flip/Mirror image. Please keep short! [["flip","flip",em.pty+qsTranslate("MainMenu", "Flip")], //: This is an entry in the context menu, used as in: Flip/Mirror image horizontally. Please keep short! ["__flipH","",em.pty+qsTranslate("MainMenu", "horizontal"), "donthide"], //: This is an entry in the context menu, used as in: Flip/Mirror image vertically. Please keep short! ["__flipV","",em.pty+qsTranslate("MainMenu", "vertical"), "donthide"], //: This is an entry in the context menu, used as in: Reset flip/mirror of image. Please keep short! ["__flipReset","",em.pty+qsTranslate("MainMenu", "reset"), "donthide"]], //: This is an entry in the context menu, used to refer to the current file (specifically the file, not directly the image). Please keep short! [["","copy",em.pty+qsTranslate("MainMenu", "File")], //: This is an entry in the context menu, used as in: rename file. Please keep short! ["__rename","",em.pty+qsTranslate("MainMenu", "rename"), "hide"], //: This is an entry in the context menu, used as in: copy file. Please keep short! ["__copy","",em.pty+qsTranslate("MainMenu", "copy"), "hide"], //: This is an entry in the context menu, used as in: move file. Please keep short! ["__move","",em.pty+qsTranslate("MainMenu", "move"), "hide"], //: This is an entry in the context menu, used as in: delete file. Please keep short! ["__delete","",em.pty+qsTranslate("MainMenu", "delete"), "hide"]], [["separator", "", "", ""]], //: This is an entry in the context menu, 'streaming' as in stream PhotoQt to Chromecast devices. Please keep short! [["__chromecast", "chromecast", em.pty+qsTranslate("MainMenu", "Streaming (Chromecast)"), "hide"]], // having 'chromecast' as third entry allows us to also hide this seperator if chromecast is disabled and the above item is hidden [["separator", "", "chromecast", ""]], //: This is an entry in the context menu. Please keep short! [["__clipboard", "clipboard", em.pty+qsTranslate("MainMenu", "Copy to clipboard"), "hide"]], //: This is an entry in the context menu. Please keep short! [["__histogram", "histogram", em.pty+qsTranslate("MainMenu", "Show/Hide histogram"), "donthide"]], //: This is an entry in the context menu. Please keep short! [["__tagFaces", "faces", em.pty+qsTranslate("MainMenu", "Face tagging mode"), "hide"]] ] property var allitems_external: [] property var allitems: allitems_static.concat(allitems_external) property bool containsMouse: false MouseArea { id: backmouse anchors.fill: parent acceptedButtons: Qt.RightButton|Qt.LeftButton|Qt.MiddleButton hoverEnabled: true onEntered: context_top.containsMouse = true onExited: context_top.containsMouse = false } Item { id: keycatcher anchors.fill: parent Keys.onPressed: keycatcherhide.start() } Timer { id: keycatcherhide interval: 50 repeat: false onTriggered: hideMenu() } ListView { id: mainlistview x: 10 y: 10 height: childrenRect.height width: maxrowwidth model: allitems.length delegate: maindeleg clip: true property int maxrowwidth: 0 orientation: ListView.Vertical } Component { id: maindeleg Row { id: deleg_top spacing: 5 property int mainindex: index visible: (allitems[mainindex][0][1] != "chromecast" && allitems[mainindex][0][2] != "chromecast") || handlingGeneral.isChromecastEnabled() Repeater { model: allitems[mainindex].length Item { property bool separator: allitems[deleg_top.mainindex][index][0] == "separator" width: separator ? mainlistview.maxrowwidth : childrenRect.width height: visible ? (separator ? 10 : childrenRect.height) : 0 Rectangle { width: separator ? parent.width : -deleg_top.spacing height: 1 color: separator ? "#aaaaaa" : "transparent" } Component.onCompleted: { if(width > mainlistview.maxrowwidth && !separator) mainlistview.maxrowwidth = width } onWidthChanged: { if(width > mainlistview.maxrowwidth && !separator) mainlistview.maxrowwidth = width } Row { spacing: 5 visible: !parent.separator width: childrenRect.width height: separator ? 0 : childrenRect.height Text { id: sep lineHeight: 1.5 color: "#cccccc" visible: allitems[deleg_top.mainindex][index].length > 1 && index > 1 font.bold: true font.pointSize: 11 text: "/" } Image { y: 2.5 width: ((source!="" || allitems[deleg_top.mainindex][index][0]==="separator") ? val.height*0.5 : 0) height: val.height*0.5 sourceSize.width: width sourceSize.height: height source: allitems[deleg_top.mainindex][index][1]==="" ? "" : (allitems[deleg_top.mainindex][index][0].slice(0,8)=="_:_EX_:_" ? handlingExternal.getIconPathFromTheme(allitems[deleg_top.mainindex][index][1]) : "/mainmenu/" + allitems[deleg_top.mainindex][index][1] + ".png") opacity: allitems[deleg_top.mainindex][index][0] !== "hide" ? 1 : 0.5 visible: (source!="" || allitems[deleg_top.mainindex][index][0]==="separator") } Text { id: val; color: (allitems[deleg_top.mainindex][index][0]==="separator") ? "white" : "#cccccc" lineHeight: 1.5 font.capitalization: (allitems[deleg_top.mainindex][index][0]==="separator") ? Font.SmallCaps : Font.MixedCase opacity: enabled ? 1 : 0.5 font.pointSize: 11 font.bold: true enabled: ((allitems[deleg_top.mainindex][index][0] !== "__close" && allitems[deleg_top.mainindex][index][0] !=="separator" && (allitems[deleg_top.mainindex].length === 1 || index > 0))) // The spaces guarantee a bit of space betwene icon and text text: allitems[deleg_top.mainindex][index][2] + ((allitems[deleg_top.mainindex].length > 1 && index == 0) ? ":" : "") MouseArea { anchors.fill: parent hoverEnabled: true cursorShape: (allitems[deleg_top.mainindex][index][0]!=="separator" && (allitems[deleg_top.mainindex].length === 1 || index > 0)) ? Qt.PointingHandCursor : Qt.ArrowCursor onEntered: { context_top.containsMouse = true if(allitems[deleg_top.mainindex][index][0]!=="separator" && (allitems[deleg_top.mainindex].length === 1 || index > 0)) val.color = "#ffffff" } onExited: { context_top.containsMouse = false if(allitems[deleg_top.mainindex][index][0]!=="separator" && (allitems[deleg_top.mainindex].length === 1 || index > 0)) val.color = "#cccccc" } onClicked: { if(allitems[deleg_top.mainindex][index][0]!=="separator" && (allitems[deleg_top.mainindex].length === 1 || index > 0)) { if(allitems[deleg_top.mainindex][index][3] === "hide" && !PQSettings.interfacePopoutMainMenu) context_top.hideMenu() var cmd = allitems[deleg_top.mainindex][index][0] var close = 0 if(cmd.slice(0,8) === "_:_EX_:_") { if(filefoldermodel.current != -1 && filefoldermodel.countMainView > 0) { handlingExternal.executeExternal(cmd.substring(8), filefoldermodel.currentFilePath) if(allitems[deleg_top.mainindex][index][3] === "close") toplevel.closePhotoQt() } return } HandleShortcuts.executeInternalFunction(cmd) } } } } } } } Component.onCompleted: { if(width > mainlistview.maxrowwidth) mainlistview.maxrowwidth = width } onWidthChanged: { if(width > mainlistview.maxrowwidth) mainlistview.maxrowwidth = width } } } Component.onCompleted: readExternalContextmenu() Connections { target: PQSettings onInterfaceLanguageChanged: mainlistview.maxrowwidth = 0 } Connections { target: PQKeyPressMouseChecker onReceivedMouseButtonPress: { if(!context_top.containsMouse) hideMenu() } } Connections { target: filewatcher onContextmenuChanged: { readExternalContextmenu() } } function readExternalContextmenu() { var tmpentries = handlingExternal.getContextMenuEntries() var entries = [[["separator", "", "", ""]]] for(var i = 0; i < tmpentries.length; ++i) { tmpentries[i][3] = "hide" // the context menu is hidden when one of these entries is selected entries.push([tmpentries[i]]) } // no external entries (only the separator in the list) if(entries.length == 1) entries = [] allitems_external = entries } function showMenu() { if(context_top.visible) return // this makes sure the context menu is fully visible AND shown on the screen the click appeared on. // if we don't enforce the latter, the context menu might appear on another screen if click happened close to the boundary between the screens // first we find the current screen geometry var curscreenX = toplevel.screen.virtualX var curscreenY = toplevel.screen.virtualY var curscreenW = toplevel.screen.width var curscreenH = toplevel.screen.height // compute the x/y for the menu x = curscreenX + Math.min(toplevel.x-curscreenX+variables.mousePos.x, curscreenW-width) y = curscreenY + Math.min(toplevel.y-curscreenY+variables.mousePos.y, curscreenH-height) // show menu context_top.show() // force active focus to catch any key press keycatcher.forceActiveFocus() } function hideMenu() { if(!context_top.visible) return context_top.hide() } } photoqt-2.5/qml/mainwindow/image/000755 001750 001750 00000000000 14164672173 017452 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/mainwindow/image/PQFaceTagsUnsupported.qml000644 001750 001750 00000005226 14164672155 024361 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../elements" Rectangle { id: facetagsunsupported_top visible: opacity>0 opacity: 0 Behavior on opacity { NumberAnimation { id: opacity_timer; duration: 100 } } onOpacityChanged: { if(opacity > 0.9) fadeout.restart() } width: txt.width+40 height: txt.height+40 border.width: 10 border.color: "#888888" radius: 10 color: "#000000" function show() { fadeout.stop() opacity_timer.duration = 100 facetagsunsupported_top.opacity = 1 if(facetagsunsupported_top.opacity > 0.9) fadeout.restart() } Text { id: txt x: 20 y: 20 text: em.pty+qsTranslate("facetagging", "File type does not support face tags.") color: "white" font.pointSize: 20 wrapMode: Text.WordWrap } Timer { id: fadeout interval: 2000 repeat: false running: false onTriggered: { opacity_timer.duration = 500 facetagsunsupported_top.opacity = 0 } } } photoqt-2.5/qml/mainwindow/image/PQFaceTagger.qml000644 001750 001750 00000027173 14164672173 022430 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../elements" Item { id: facetagger_top property string filename: "" property var faceTags: [] property var deletedFaceTagsIds: [] signal hasBeenUpdated() visible: false // mouse area to tag new faces PQMouseArea { anchors.fill: parent hoverEnabled: false onClicked: { if(newtag.visible) { if(newtag.width/facetagger_top.scale < 10 || newtag.height/facetagger_top.scale < 10) { newtag.visible = false return } namecont.opacity = 1 nameedit.text = "" nameedit.setFocus() } else { var p = facetagger_top.mapFromItem(theimage, mouse.x, mouse.y) if(p.x < 0 || p.x > facetagger_top.width || p.y < 0 || p.y > facetagger_top.height) return newtag.setX = p.x newtag.x = p.x newtag.setY = p.y newtag.y = p.y newtag.setWidth = 0 newtag.setHeight = 0 updateNewtagPos() newtag.visible = true } } } Repeater { id: repeat // this makes it easy for the model to be refreshed // easier than when using faceTags.length/6 as model model: ListModel { id: repeatermodel } delegate: Item { id: deleg x: facetagger_top.width*faceTags[6*index+1] y: facetagger_top.height*faceTags[6*index+2] width: facetagger_top.width*faceTags[6*index+3] height: facetagger_top.height*faceTags[6*index+4] property bool hovered: false // mark tags, change to red when hovered (for deletion) Rectangle { anchors.fill: parent color: hovered ? "#88ff0000" : "#88000000" Behavior on color { ColorAnimation { duration: 150 } } border.width: 3 border.color: "#44ff0000" Text { anchors.fill: parent horizontalAlignment: Qt.AlignHCenter verticalAlignment: Qt.AlignVCenter color: "white" font.bold: true font.pointSize: 12 text: "x" opacity: hovered ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 150 } } } } // This is the background of the text (semi-transparent black rectangle) Rectangle { x: (parent.width-width)/2 y: parent.height width: faceLabel.width+8 height: faceLabel.height+8 color: "#bb000000" // This holds the person's name Text { id: faceLabel x: 4 y: 4 font.pointSize: PQSettings.metadataFaceTagsFontSize/facetagger_top.scale color: "white" text: " "+faceTags[6*index+5]+" " } } // delete this tag // this works as new tags are set using the global mouse events below PQMouseArea { anchors.fill: parent enabled: !newtag.visible hoverEnabled: true cursorShape: Qt.PointingHandCursor onEntered: parent.hovered = true onExited: parent.hovered = false onClicked: deleteFaceTag(faceTags[6*index]) } } } // mark a new tag Rectangle { id: newtag visible: false color: "#8800ff00" border.color: "#ccff0000" border.width: 2 // we use set* to allow for negative width/height (requires computation, see below) property int setX: -1 property int setY: -1 property int setWidth: -1 property int setHeight: -1 } // enter new name Rectangle { id: namecont anchors.fill: parent color: "#cc000000" scale: 1/parent.scale opacity: 0 Behavior on opacity { NumberAnimation { duration: 200 } } visible: opacity>0 Column { y: (parent.height-height)/2 width: parent.width height: childrenRect.height spacing: 10 // heading Text { x: (parent.width-width)/2 color: "white" font.pointSize: 15 font.bold: true //: This question is asked in the face tagger to ask for the name of a tagged face text: em.pty+qsTranslate("facetagging", "Who is this?") } // edit name PQLineEdit { id: nameedit x: (parent.width-width)/2 placeholderText: em.pty+qsTranslate("facetagging", "Enter name") } // buttons to save/cancel Row { x: (parent.width-width)/2 width: childrenRect.width spacing: 10 PQButton { id: savename text: genericStringSave onClicked: { addFaceTag() newtag.visible = false namecont.opacity = 0 } } PQButton { id: cancelname text: genericStringCancel onClicked: { namecont.opacity = 0 newtag.visible = false } } } } } // react to mouse movements Connections { target: variables onMousePosChanged: { if(newtag.visible && !namecont.visible) { var p = facetagger_top.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y) var newWidth = p.x-newtag.setX var newHeight = p.y-newtag.setY if(newtag.setX+newWidth > facetagger_top.width) newWidth = facetagger_top.width-newtag.setX newtag.setWidth = newWidth if(newtag.setY+newHeight > facetagger_top.height) newHeight = facetagger_top.height-newtag.setY newtag.setHeight = newHeight updateNewtagPos() } } } Connections { target: loader onFaceTaggerPassOn: { if(what == "start") { // start tagger if(variables.visibleItem == "" && handlingFaceTags.canWriteXmpTags(facetagger_top.filename)) { variables.visibleItem = "facetagger" variables.faceTaggingActive = true imageitem.zoomReset() imageitem.rotateReset() imageitem.mirrorReset() facetagger_top.visible = true facetagger_top.deletedFaceTagsIds = [] facetagger_top.faceTags = handlingFaceTags.getFaceTags(facetagger_top.filename) refreshModel() } else facetagsunsupported.show() } else if(what == "stop") { variables.visibleItem = "" variables.faceTaggingActive = false facetagger_top.visible = false } else if(what == "keyevent") { if(param[0] == Qt.Key_Escape) { if(namecont.visible) { cancelname.clicked() } else if(newtag.visible) { newtag.visible = false } else { variables.visibleItem = "" variables.faceTaggingActive = false facetagger_top.visible = false } } else if(param[0] == Qt.Key_Enter || param[0] == Qt.Key_Return) savename.clicked() } } } function updateNewtagPos() { if(newtag.setWidth >= 0) { newtag.x = newtag.setX newtag.width = newtag.setWidth } else { if(newtag.setX+newtag.setWidth >= 0) { newtag.x = newtag.setX+newtag.setWidth newtag.width = newtag.setX-newtag.x } else { newtag.x = 0 newtag.width = newtag.setX-newtag.x } } if(newtag.setHeight >= 0) { newtag.y = newtag.setY newtag.height = newtag.setHeight } else { if(newtag.setY+newtag.setHeight >= 0) { newtag.y = newtag.setY+newtag.setHeight newtag.height = newtag.setY-newtag.y } else { newtag.y = 0 newtag.height = newtag.setY-newtag.y } } } function addFaceTag() { faceTags.push(faceTags.length/6 +1) faceTags.push(newtag.x/facetagger_top.width) faceTags.push(newtag.y/facetagger_top.height) faceTags.push(newtag.width/facetagger_top.width) faceTags.push(newtag.height/facetagger_top.height) faceTags.push(nameedit.text) handlingFaceTags.setFaceTags(facetagger_top.filename, facetagger_top.faceTags) refreshModel() facetagger_top.hasBeenUpdated() } function deleteFaceTag(number) { for(var i = 0; i < faceTags.length/6; ++i) { if(faceTags[6*i] == number) { faceTags.splice(6*i, 6) break } } handlingFaceTags.setFaceTags(facetagger_top.filename, facetagger_top.faceTags) refreshModel() facetagger_top.hasBeenUpdated() } function refreshModel() { repeatermodel.clear() for(var i = 0; i < faceTags.length/6; ++i) repeatermodel.append({"index" : i}) } } photoqt-2.5/qml/mainwindow/image/PQFaceTracker.qml000644 001750 001750 00000013107 14164672167 022605 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 Item { id: facetracker_top property string filename: "" property var faceTags: [] property int indexOfLabelHovered: -1 Repeater { id: repeat model: ListModel { id: repeatermodel } delegate: Item { id: deleg x: facetracker_top.width*faceTags[6*index+1] y: facetracker_top.height*faceTags[6*index+2] width: facetracker_top.width*faceTags[6*index+3] height: facetracker_top.height*faceTags[6*index+4] property bool labelMouseHovered: false property bool fullMouseHovered: false visible: opacity>0 // PQSettings.metadataFaceTagsVisibility: // 0 = Hybrid // 1 = show all always // 2 = show one on hover // 3 = show all on hover opacity: (((PQSettings.metadataFaceTagsVisibility==0 && fullMouseHovered && (indexOfLabelHovered == index || indexOfLabelHovered == -1)) || PQSettings.metadataFaceTagsVisibility==1 || (PQSettings.metadataFaceTagsVisibility==2 && labelMouseHovered) || (PQSettings.metadataFaceTagsVisibility==3 && fullMouseHovered)) && PQSettings.metadataFaceTagsEnabled) ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 200 } } Rectangle { visible: PQSettings.metadataFaceTagsBorder anchors.fill: parent color: "transparent" border.width: PQSettings.metadataFaceTagsBorderWidth/facetracker_top.scale border.color: PQSettings.metadataFaceTagsBorderColor } // This is the background of the text (semi-transparent black rectangle) Rectangle { x: (parent.width-width)/2 y: parent.height width: faceLabel.width+8 height: faceLabel.height+8 color: "#bb000000" // This holds the person's name Text { id: faceLabel x: 4 y: 4 font.pointSize: PQSettings.metadataFaceTagsFontSize/facetracker_top.scale color: "white" renderType: Text.QtRendering text: " "+faceTags[6*index+5]+" " } } Connections { target: variables onMousePosChanged: deleg.handleMouseMove() } function handleMouseMove() { var p = deleg.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y) deleg.labelMouseHovered = !(p.x < 0 || p.x > deleg.width || p.y < 0 || p.y > deleg.height) if(deleg.labelMouseHovered) facetracker_top.indexOfLabelHovered = index else if(!deleg.labelMouseHovered && facetracker_top.indexOfLabelHovered == index) facetracker_top.indexOfLabelHovered = -1 p = facetracker_top.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y) deleg.fullMouseHovered = !(p.x < 0 || p.x > facetracker_top.width || p.y < 0 || p.y > facetracker_top.height) } } } Component.onCompleted: { faceTags = (PQSettings.metadataFaceTagsVisibility!=0 ? handlingFaceTags.getFaceTags(filename) : []) refreshModel() } Connections { target: PQSettings onMetadataFaceTagsVisibilityChanged: { faceTags = (PQSettings.metadataFaceTagsVisibility!=0 ? handlingFaceTags.getFaceTags(filename) : []) refreshModel() } } function updateData() { faceTags = (PQSettings.metadataFaceTagsVisibility!=0 ? handlingFaceTags.getFaceTags(filename) : []) refreshModel() } function refreshModel() { repeatermodel.clear() for(var i = 0; i < faceTags.length/6; ++i) repeatermodel.append({"index" : i}) } } photoqt-2.5/qml/mainwindow/image/PQImageNormal.qml000644 001750 001750 00000046152 14164672163 022630 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 Item { id: cont x: useStoredData ? variables.zoomRotationMirror[src][4].x : 0 y: useStoredData ? variables.zoomRotationMirror[src][4].y : 0 width: container.width height: container.height property real defaultScale: 1.0 property bool useStoredData: PQSettings.imageviewRememberZoomRotationMirror && src in variables.zoomRotationMirror // large images can cause flickering when transitioning before scale is reset // this makes that invisible // this is set to true *after* proper scale has been set visible: false property bool reloadingImage: false Image { id: theimage property real curX: useStoredData ? variables.zoomRotationMirror[src][0].x : 0 property real curY: useStoredData ? variables.zoomRotationMirror[src][0].y : 0 x: curX y: curY width: sourceSize.width height: sourceSize.height fillMode: Image.Pad clip: true cache: false asynchronous: true autoTransform: false source: "image://full/" + src mirror: useStoredData ? variables.zoomRotationMirror[src][3] : false smooth: (!PQSettings.imageviewInterpolationDisableForSmallImages || width > PQSettings.imageviewInterpolationThreshold || height > PQSettings.imageviewInterpolationThreshold) mipmap: (scale < defaultScale || (scale < 0.8 && defaultScale < 0.8)) && (!PQSettings.imageviewInterpolationDisableForSmallImages || width > PQSettings.imageviewInterpolationThreshold || height > PQSettings.imageviewInterpolationThreshold) Repeater { model: defaultScale < 0.8 ? 5 : 0 delegate: Image { id: subimg property real threshold: 1.0-index*0.2 anchors.fill: source == "" ? undefined : theimage cache: false antialiasing: false asynchronous: true smooth: theimage.smooth mipmap: theimage.scale < defaultScale*threshold mirror: theimage.mirror source: "" // we add 1% to width/height to make sure all details are captured when scaled down // not adding anything can lead to images appearing to be (very) slightly blurry // adding too much leads to artefacts from scaling sourceSize.width: theimage.width*(defaultScale*(threshold+0.01)) sourceSize.height: theimage.height*(defaultScale*(threshold+0.01)) visible: (defaultScale < 0.8 || index > 1) && theimage.scale < defaultScale*threshold*1.0001 onVisibleChanged: { if(visible && source == "" && PQSettings.imageviewCache > 0 && !rotani.running) source = parent.source } // when the image has changed, we also need to make sure to reload these images property string tmpsrc: "" Connections { target: cont onReloadingImageChanged: { if(reloadingImage) { tmpsrc = subimg.source subimg.source = "" } else subimg.source = tmpsrc } } } } rotation: useStoredData ? variables.zoomRotationMirror[src][1] : 0 property real rotateTo: 0.0 onRotateToChanged: { rotation = rotateTo if(theimage.curScale == defaultScale && curX == 0 && curY == 0) { reset(true, false) } } onRotationChanged: { if(!rotani.running) rotateTo = rotation variables.currentRotationAngle = rotation } property real curScale: useStoredData ? variables.zoomRotationMirror[src][2] : 1 scale: curScale onScaleChanged: { variables.currentZoomLevel = theimage.scale*100 variables.currentPaintedZoomLevel = theimage.scale } onStatusChanged: { if(source == "") return cont.parent.imageStatus = status if(status == Image.Ready) { if(reloadingImage) { loadingindicator.forceStop() reloadingImage = false } else theimage_load.restart() } } Behavior on x { NumberAnimation { id: xani; duration: PQSettings.imageviewAnimationDuration*100 } } Behavior on y { NumberAnimation { id: yani; duration: PQSettings.imageviewAnimationDuration*100 } } Behavior on rotation { NumberAnimation { id: rotani; duration: PQSettings.imageviewAnimationDuration*100 } } // its duration it set to proper value after image has been loaded properly (in reset()) Behavior on scale { NumberAnimation { id: scaleani; duration: PQSettings.imageviewAnimationDuration*100 } } Image { anchors.fill: parent z: -1 smooth: false visible: PQSettings.imageviewTransparencyMarker source: PQSettings.imageviewTransparencyMarker ? "qrc:/image/checkerboard.png" : "" sourceSize.width: Math.max(20, Math.min((parent.height/50), (parent.width/50))) fillMode: Image.Tile } Timer { id: theimage_load interval: 0 repeat: false running: false onTriggered: { if(!useStoredData) { xani.duration = 0 yani.duration = 0 scaleani.duration = 0 reset(true, true) xani.duration = PQSettings.imageviewAnimationDuration*100 yani.duration = PQSettings.imageviewAnimationDuration*100 scaleani.duration = PQSettings.imageviewAnimationDuration*100 } cont.visible = true } } } MouseArea { x: -cont.x y: -cont.y width: container.width height: container.height hoverEnabled: false onPressed: { if(PQSettings.interfaceCloseOnEmptyBackground) toplevel.close() else if(PQSettings.interfaceNavigateOnEmptyBackground) { if(mouse.x < width/2) imageitem.loadPrevImage() else imageitem.loadNextImage() } } } PinchArea { id: pincharea anchors.fill: theimage scale: theimage.scale rotation: theimage.rotation // the actual scale factor from a pinch event is the initial scale multiplied by Pinch.scale property real initialScale onPinchStarted: { initialScale = theimage.curScale contextmenu.hideMenu() } onPinchUpdated: { // disable animations for the pinching xani.duration = 0 yani.duration = 0 scaleani.duration = 0 // pinchto the center position of the pinch performZoom(theimage.mapFromItem(pincharea, pinch.center), undefined, false, false, true, (initialScale*pinch.scale)/theimage.curScale) // re-enable animations after the pinching xani.duration = PQSettings.imageviewAnimationDuration*100 yani.duration = PQSettings.imageviewAnimationDuration*100 scaleani.duration = PQSettings.imageviewAnimationDuration*100 } MouseArea { id: mousearea enabled: PQSettings.imageviewLeftButtonMoveImage&&!facetagger.visible&&!variables.slideShowActive anchors.fill: parent drag.target: theimage hoverEnabled: false // important, otherwise the mouse pos will not be caught globally! onPressAndHold: { variables.mousePos = mousearea.mapToItem(bgimage, Qt.point(mouse.x, mouse.y)) contextmenu.showMenu() } onClicked: contextmenu.hideMenu() onReleased: { theimage.curX = theimage.x theimage.curY = theimage.y theimage.x = Qt.binding(function() { return theimage.curX }) theimage.y = Qt.binding(function() { return theimage.curY }) } Connections { target: variables onMousePosChanged: { hidecursor.restart() mousearea.cursorShape = Qt.ArrowCursor } onVisibleItemChanged: { if(variables.visibleItem != "") { hidecursor.stop() mousearea.cursorShape = Qt.ArrowCursor } else { hidecursor.restart() mousearea.cursorShape = Qt.ArrowCursor } } } Timer { id: hidecursor interval: 1000 repeat: false running: true onTriggered: mousearea.cursorShape = Qt.BlankCursor } } } PQFaceTracker { id: facetracker anchors.fill: theimage scale: theimage.scale rotation: theimage.rotation filename: src visible: !facetagger.visible Connections { target: facetagger onHasBeenUpdated: facetracker.updateData() } } PQFaceTagger { id: facetagger anchors.fill: theimage scale: theimage.scale rotation: theimage.rotation filename: src } Connections { target: toplevel onWidthChanged: { widthHeightChanged.interval = 10 widthHeightChanged.start() } onHeightChanged: { widthHeightChanged.interval = 10 widthHeightChanged.start() } } Connections { target: container onWidthChanged: { widthHeightChanged.interval = PQSettings.imageviewAnimationDuration*100 widthHeightChanged.start() } onHeightChanged: { widthHeightChanged.interval = PQSettings.imageviewAnimationDuration*100 widthHeightChanged.start() } } Timer { id: widthHeightChanged interval: 10 repeat: false running: false onTriggered: { if(!useStoredData) { if(theimage.curX == 0 && theimage.curY == 0 && theimage.curScale == defaultScale) reset(true, true) else if(theimage.curX == 0 && theimage.curY) reset(false, true) } } } Connections { target: container onZoomIn: { // zoom to local mouse position // if wheelDelta is undefined, then the zoom happened from a key shortcut // in that case we zoom to the screen center if(wheelDelta != undefined) performZoom(theimage.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y), undefined, true, false, false) else performZoom(theimage.mapFromItem(bgimage, toplevel.width/2, toplevel.height/2), undefined, true, false, false) } onZoomOut: { // zoom to local mouse position // if wheelDelta is undefined, then the zoom happened from a key shortcut // in that case we zoom to the screen center if(wheelDelta != undefined) performZoom(theimage.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y), undefined, false, false, false) else performZoom(theimage.mapFromItem(bgimage, toplevel.width/2, toplevel.height/2), undefined, false, false, false) } onZoomReset: { reset(true, true) } onZoomActual: { if(variables.currentZoomLevel == 100) return // zoom to center of screen performZoom(theimage.mapFromItem(bgimage, toplevel.width/2, toplevel.height/2), undefined, false, true, false) } onRotate: { theimage.rotateTo += deg } onRotateReset: { var old = theimage.rotateTo%360 if(old > 0) { if(old <= 180) theimage.rotateTo -= old else theimage.rotateTo += 360-old } else if(old < 0) { if(old >= -180) theimage.rotateTo -= old else theimage.rotateTo -= (old+360) } } onMirrorH: { var old = theimage.mirror theimage.mirror = !old } onMirrorV: { var old = theimage.mirror theimage.mirror = !old rotani.duration = 0 theimage.rotateTo += 180 rotani.duration = PQSettings.imageviewAnimationDuration*100 } onMirrorReset: { theimage.mirror = false } } function performZoom(pos, wheelDelta, zoom_in, zoom_actual, zoom_pinch, zoom_pinchfactor) { // adjust for transformOrigin being Center and not TopLeft // for some reason (bug?), setting the transformOrigin causes some slight blurriness pos.x -= theimage.width/2 pos.y -= theimage.height/2 if(wheelDelta != undefined) { if(wheelDelta.y > 12) wheelDelta.y = 12 else if(wheelDelta.y < -12) wheelDelta.y = -12 } // figure out zoom factor var zoomfactor // a PINCH occured if(zoom_pinch) zoomfactor = zoom_pinchfactor // zoom to ACTUAL SIZE else if(zoom_actual) zoomfactor = 1/theimage.curScale // zoom IN/OUT else { if(wheelDelta == undefined) { if(zoom_in) zoomfactor = Math.max(1.01, Math.min(1.3, 1+PQSettings.imageviewZoomSpeed*0.01)) else zoomfactor = 1/Math.max(1.01, Math.min(1.3, 1+PQSettings.imageviewZoomSpeed*0.01)) } else { if(zoom_in) zoomfactor = Math.max(1.01, Math.min(1.3, 1+Math.abs(wheelDelta.y/(101-PQSettings.imageviewZoomSpeed)))) else zoomfactor = 1/Math.max(1.01, Math.min(1.3, 1+Math.abs(wheelDelta.y/(101-PQSettings.imageviewZoomSpeed)))) } } // update x/y position of image var realX = pos.x * theimage.curScale var realY = pos.y * theimage.curScale // no rotation if(theimage.rotateTo%360 == 0) { theimage.curX += (1-zoomfactor)*realX theimage.curY += (1-zoomfactor)*realY // rotated by 90 degrees } else if(theimage.rotateTo%360 == 90 || theimage.rotateTo%360 == -270) { theimage.curX -= (1-zoomfactor)*realY theimage.curY += (1-zoomfactor)*realX // rotated by 180 degrees } else if(Math.abs(theimage.rotateTo%360) == 180) { theimage.curX -= (1-zoomfactor)*realX theimage.curY -= (1-zoomfactor)*realY // rotated by 270 degrees } else if(theimage.rotateTo%360 == 270 || theimage.rotateTo%360 == -90) { theimage.curX += (1-zoomfactor)*realY theimage.curY -= (1-zoomfactor)*realX } else console.log("ERROR: unknown rotation step:", theimage.rotateTo) // update scale factor theimage.curScale *= zoomfactor } function reset(scaling, position) { var sc1 = 1.0 var sc2 = 1.0 if(Math.abs(theimage.rotateTo%180) == 90) { sc1 = (container.width-2*PQSettings.imageviewMargin)/theimage.height sc2 = (container.height-2*PQSettings.imageviewMargin)/theimage.width } else { sc1 = (container.width-2*PQSettings.imageviewMargin)/theimage.width sc2 = (container.height-2*PQSettings.imageviewMargin)/theimage.height } var useThisScale = 1.0 if((PQSettings.imageviewFitInWindow && ((Math.abs(theimage.rotateTo%180) == 0 && theimage.width < container.width && theimage.height < container.height) || (Math.abs(theimage.rotateTo%180) == 90 && theimage.height < container.width && theimage.width > container.height))) || ((Math.abs(theimage.rotateTo%180) != 90 && (theimage.width > container.width || theimage.height > container.height)) || (Math.abs(theimage.rotateTo%180) == 90 && (theimage.height > container.width || theimage.width > container.height)))) { useThisScale = Math.min(sc1, sc2) } if(position) { theimage.curX = 0 theimage.curY = 0 if(Math.abs(theimage.rotateTo%180) == 0) { cont.x = PQSettings.imageviewMargin + Math.floor(-(theimage.width*(1-sc1))/2) cont.y = PQSettings.imageviewMargin + Math.floor(-(theimage.height*(1-sc2))/2) } } if(scaling) { defaultScale = useThisScale theimage.curScale = useThisScale variables.currentZoomLevel = useThisScale*100 variables.currentPaintedZoomLevel = useThisScale } } function storePosRotZoomMirror() { variables.zoomRotationMirror[src] = [Qt.point(theimage.curX, theimage.curY), theimage.rotation, theimage.curScale, theimage.mirror, Qt.point(cont.x, cont.y)] } } photoqt-2.5/qml/mainwindow/image/PQImageAnimated.qml000644 001750 001750 00000042525 14164672151 023117 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 Item { id: cont x: useStoredData ? variables.zoomRotationMirror[src][4].x : 0 y: useStoredData ? variables.zoomRotationMirror[src][4].y : 0 width: container.width height: container.height property real defaultScale: 1.0 property bool useStoredData: PQSettings.imageviewRememberZoomRotationMirror && src in variables.zoomRotationMirror // large images can cause flickering when transitioning before scale is reset // this makes that invisible // this is set to true *after* proper scale has been set visible: false property bool reloadingImage: false AnimatedImage { id: theimage property real curX: useStoredData ? variables.zoomRotationMirror[src][0].x : 0 property real curY: useStoredData ? variables.zoomRotationMirror[src][0].y : 0 x: curX y: curY width: sourceSize.width height: sourceSize.height fillMode: Image.Pad clip: true cache: false asynchronous: true source: "file:///" + src mirror: useStoredData ? variables.zoomRotationMirror[src][3] : false smooth: (!PQSettings.imageviewInterpolationDisableForSmallImages || width > PQSettings.imageviewInterpolationThreshold || height > PQSettings.imageviewInterpolationThreshold) mipmap: (scale < defaultScale || (scale < 0.8 && defaultScale < 0.8)) && (!PQSettings.imageviewInterpolationDisableForSmallImages || width > PQSettings.imageviewInterpolationThreshold || height > PQSettings.imageviewInterpolationThreshold) rotation: useStoredData ? variables.zoomRotationMirror[src][1] : 0 property real rotateTo: 0.0 onRotateToChanged: { rotation = rotateTo if(theimage.curScale == defaultScale && curX == 0 && curY == 0) { reset(true, false) } } onRotationChanged: { if(!rotani.running) rotateTo = rotation variables.currentRotationAngle = rotation } property real curScale: useStoredData ? variables.zoomRotationMirror[src][2] : 1 scale: curScale onScaleChanged: { variables.currentZoomLevel = theimage.scale*100 variables.currentPaintedZoomLevel = theimage.scale } onStatusChanged: { if(source == "") return cont.parent.imageStatus = status if(status == Image.Ready) { if(reloadingImage) { loadingindicator.forceStop() reloadingImage = false } else theimage_load.restart() } } Behavior on x { NumberAnimation { id: xani; duration: PQSettings.imageviewAnimationDuration*100 } } Behavior on y { NumberAnimation { id: yani; duration: PQSettings.imageviewAnimationDuration*100 } } Behavior on rotation { NumberAnimation { id: rotani; duration: PQSettings.imageviewAnimationDuration*100 } } // its duration it set to proper value after image has been loaded properly (in reset()) Behavior on scale { NumberAnimation { id: scaleani; duration: PQSettings.imageviewAnimationDuration*100 } } Image { anchors.fill: parent z: -1 smooth: false visible: PQSettings.imageviewTransparencyMarker source: PQSettings.imageviewTransparencyMarker ? "qrc:/image/checkerboard.png" : "" sourceSize.width: Math.max(20, Math.min((parent.height/50), (parent.width/50))) fillMode: Image.Tile } Timer { id: theimage_load interval: 0 repeat: false running: false onTriggered: { if(!useStoredData) { xani.duration = 0 yani.duration = 0 scaleani.duration = 0 reset(true, true) xani.duration = PQSettings.imageviewAnimationDuration*100 yani.duration = PQSettings.imageviewAnimationDuration*100 scaleani.duration = PQSettings.imageviewAnimationDuration*100 } cont.visible = true } } } MouseArea { x: -cont.x y: -cont.y width: container.width height: container.height hoverEnabled: false onPressed: { if(PQSettings.interfaceCloseOnEmptyBackground) toplevel.close() else if(PQSettings.interfaceNavigateOnEmptyBackground) { if(mouse.x < width/2) imageitem.loadPrevImage() else imageitem.loadNextImage() } } } PinchArea { id: pincharea anchors.fill: theimage scale: theimage.scale rotation: theimage.rotation // the actual scale factor from a pinch event is the initial scale multiplied by Pinch.scale property real initialScale onPinchStarted: { initialScale = theimage.curScale contextmenu.hideMenu() } onPinchUpdated: { // disable animations for the pinching xani.duration = 0 yani.duration = 0 scaleani.duration = 0 // pinchto the center position of the pinch performZoom(theimage.mapFromItem(pincharea, pinch.center), undefined, false, false, true, (initialScale*pinch.scale)/theimage.curScale) // re-enable animations after the pinching xani.duration = PQSettings.imageviewAnimationDuration*100 yani.duration = PQSettings.imageviewAnimationDuration*100 scaleani.duration = PQSettings.imageviewAnimationDuration*100 } MouseArea { id: mousearea enabled: PQSettings.imageviewLeftButtonMoveImage&&!facetagger.visible&&!variables.slideShowActive anchors.fill: parent drag.target: theimage hoverEnabled: false // important, otherwise the mouse pos will not be caught globally! onPressAndHold: { variables.mousePos = mousearea.mapToItem(bgimage, Qt.point(mouse.x, mouse.y)) contextmenu.showMenu() } onClicked: contextmenu.hideMenu() onReleased: { theimage.curX = theimage.x theimage.curY = theimage.y theimage.x = Qt.binding(function() { return theimage.curX }) theimage.y = Qt.binding(function() { return theimage.curY }) } Connections { target: variables onMousePosChanged: { hidecursor.restart() mousearea.cursorShape = Qt.ArrowCursor } onVisibleItemChanged: { if(variables.visibleItem != "") { hidecursor.stop() mousearea.cursorShape = Qt.ArrowCursor } else { hidecursor.restart() mousearea.cursorShape = Qt.ArrowCursor } } } Timer { id: hidecursor interval: 1000 repeat: false running: true onTriggered: mousearea.cursorShape = Qt.BlankCursor } } } PQFaceTracker { id: facetracker anchors.fill: theimage scale: theimage.scale rotation: theimage.rotation filename: src visible: !facetagger.visible Connections { target: facetagger onHasBeenUpdated: facetracker.updateData() } } PQFaceTagger { id: facetagger anchors.fill: theimage scale: theimage.scale rotation: theimage.rotation filename: src } Connections { target: toplevel onWidthChanged: { widthHeightChanged.interval = 10 widthHeightChanged.start() } onHeightChanged: { widthHeightChanged.interval = 10 widthHeightChanged.start() } } Connections { target: container onWidthChanged: { widthHeightChanged.interval = PQSettings.imageviewAnimationDuration*100 widthHeightChanged.start() } onHeightChanged: { widthHeightChanged.interval = PQSettings.imageviewAnimationDuration*100 widthHeightChanged.start() } } Timer { id: widthHeightChanged interval: 10 repeat: false running: false onTriggered: { if(!useStoredData) { if(theimage.curX == 0 && theimage.curY && theimage.curScale == defaultScale) reset(true, true) else if(theimage.curX == 0 && theimage.curY) reset(false, true) } } } Connections { target: container onZoomIn: { // zoom to local mouse position // if wheelDelta is undefined, then the zoom happened from a key shortcut // in that case we zoom to the screen center if(wheelDelta != undefined) performZoom(theimage.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y), undefined, true, false, false) else performZoom(theimage.mapFromItem(bgimage, toplevel.width/2, toplevel.height/2), undefined, true, false, false) } onZoomOut: { // zoom to local mouse position // if wheelDelta is undefined, then the zoom happened from a key shortcut // in that case we zoom to the screen center if(wheelDelta != undefined) performZoom(theimage.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y), undefined, false, false, false) else performZoom(theimage.mapFromItem(bgimage, toplevel.width/2, toplevel.height/2), undefined, false, false, false) } onZoomReset: { reset(true, true) } onZoomActual: { if(variables.currentZoomLevel == 100) return // zoom to center of screen performZoom(theimage.mapFromItem(bgimage, toplevel.width/2, toplevel.height/2), undefined, false, true, false) } onRotate: { theimage.rotateTo += deg } onRotateReset: { var old = theimage.rotateTo%360 if(old > 0) { if(old <= 180) theimage.rotateTo -= old else theimage.rotateTo += 360-old } else if(old < 0) { if(old >= -180) theimage.rotateTo -= old else theimage.rotateTo -= (old+360) } } onMirrorH: { var old = theimage.mirror theimage.mirror = !old } onMirrorV: { var old = theimage.mirror theimage.mirror = !old rotani.duration = 0 theimage.rotateTo += 180 rotani.duration = PQSettings.imageviewAnimationDuration*100 } onMirrorReset: { theimage.mirror = false } } function performZoom(pos, wheelDelta, zoom_in, zoom_actual, zoom_pinch, zoom_pinchfactor) { // adjust for transformOrigin being Center and not TopLeft // for some reason (bug?), setting the transformOrigin causes some slight blurriness pos.x -= theimage.width/2 pos.y -= theimage.height/2 if(wheelDelta != undefined) { if(wheelDelta.y > 12) wheelDelta.y = 12 else if(wheelDelta.y < -12) wheelDelta.y = -12 } // figure out zoom factor var zoomfactor // a PINCH occured if(zoom_pinch) zoomfactor = zoom_pinchfactor // zoom to ACTUAL SIZE else if(zoom_actual) zoomfactor = 1/theimage.curScale // zoom IN/OUT else { if(wheelDelta == undefined) { if(zoom_in) zoomfactor = Math.max(1.01, Math.min(1.3, 1+PQSettings.imageviewZoomSpeed*0.01)) else zoomfactor = 1/Math.max(1.01, Math.min(1.3, 1+PQSettings.imageviewZoomSpeed*0.01)) } else { if(zoom_in) zoomfactor = Math.max(1.01, Math.min(1.3, 1+Math.abs(wheelDelta.y/(101-PQSettings.imageviewZoomSpeed)))) else zoomfactor = 1/Math.max(1.01, Math.min(1.3, 1+Math.abs(wheelDelta.y/(101-PQSettings.imageviewZoomSpeed)))) } } // update x/y position of image var realX = pos.x * theimage.curScale var realY = pos.y * theimage.curScale // no rotation if(theimage.rotateTo%360 == 0) { theimage.curX += (1-zoomfactor)*realX theimage.curY += (1-zoomfactor)*realY // rotated by 90 degrees } else if(theimage.rotateTo%360 == 90 || theimage.rotateTo%360 == -270) { theimage.curX -= (1-zoomfactor)*realY theimage.curY += (1-zoomfactor)*realX // rotated by 180 degrees } else if(Math.abs(theimage.rotateTo%360) == 180) { theimage.curX -= (1-zoomfactor)*realX theimage.curY -= (1-zoomfactor)*realY // rotated by 270 degrees } else if(theimage.rotateTo%360 == 270 || theimage.rotateTo%360 == -90) { theimage.curX += (1-zoomfactor)*realY theimage.curY -= (1-zoomfactor)*realX } else console.log("ERROR: unknown rotation step:", theimage.rotateTo) // update scale factor theimage.curScale *= zoomfactor } function reset(scaling, position) { var sc1 = 1.0 var sc2 = 1.0 if(Math.abs(theimage.rotateTo%180) == 90) { sc1 = (container.width-2*PQSettings.imageviewMargin)/theimage.height sc2 = (container.height-2*PQSettings.imageviewMargin)/theimage.width } else { sc1 = (container.width-2*PQSettings.imageviewMargin)/theimage.width sc2 = (container.height-2*PQSettings.imageviewMargin)/theimage.height } var useThisScale = 1.0 if((PQSettings.imageviewFitInWindow && ((Math.abs(theimage.rotateTo%180) == 0 && theimage.width < container.width && theimage.height < container.height) || (Math.abs(theimage.rotateTo%180) == 90 && theimage.height < container.width && theimage.width > container.height))) || ((Math.abs(theimage.rotateTo%180) != 90 && (theimage.width > container.width || theimage.height > container.height)) || (Math.abs(theimage.rotateTo%180) == 90 && (theimage.height > container.width || theimage.width > container.height)))) { useThisScale = Math.min(sc1, sc2) } if(position) { theimage.curX = 0 theimage.curY = 0 if(Math.abs(theimage.rotateTo%180) == 0) { cont.x = PQSettings.imageviewMargin + Math.floor(-(theimage.width*(1-sc1))/2) cont.y = PQSettings.imageviewMargin + Math.floor(-(theimage.height*(1-sc2))/2) } } if(scaling) { defaultScale = useThisScale theimage.curScale = useThisScale variables.currentZoomLevel = useThisScale*100 variables.currentPaintedZoomLevel = useThisScale } } function storePosRotZoomMirror() { variables.zoomRotationMirror[src] = [Qt.point(theimage.curX, theimage.curY), theimage.rotation, theimage.curScale, theimage.mirror, Qt.point(cont.x, cont.y)] } } photoqt-2.5/qml/mainwindow/image/PQMovie.qml000644 001750 001750 00000041061 14164672144 021505 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtMultimedia 5.9 import "../../elements" // for better control on fillMode we embed it inside an item Item { id: elem x: 0 // offset taking care of in container y: PQSettings.imageviewMargin width: container.width-2*PQSettings.imageviewMargin height: container.height-2*PQSettings.imageviewMargin Behavior on x { NumberAnimation { id: xAni; duration: PQSettings.imageviewAnimationDuration*100 } } Behavior on y { NumberAnimation { id: yAni; duration: PQSettings.imageviewAnimationDuration*100 } } MouseArea { enabled: PQSettings.imageviewLeftButtonMoveImage anchors.fill: parent onPressed: { if(PQSettings.interfaceCloseOnEmptyBackground || PQSettings.interfaceNavigateOnEmptyBackground) { var paintedX = (container.width-videoelem.width)/2 var paintedY = (container.height-videoelem.height)/2 if(mouse.x < paintedX || mouse.x > paintedX+videoelem.width || mouse.y < paintedY || mouse.y > paintedY+videoelem.height) { if(PQSettings.interfaceCloseOnEmptyBackground) toplevel.close() else if(PQSettings.interfaceNavigateOnEmptyBackground) { if(mouse.x < width/2) imageitem.loadPrevImage() else imageitem.loadNextImage() } } } } } // video element Video { id: videoelem // Windows complains about missing '/' at the start, we need 3 (!) here for video files to play source: "file:///" + src x: (parent.width-width)/2 y: (parent.height-height)/2 width: PQSettings.imageviewFitInWindow ? parent.width : (metaData.resolution ? Math.min(metaData.resolution.width, parent.width) : 0) height: PQSettings.imageviewFitInWindow ? parent.height : (metaData.resolution ? Math.min(metaData.resolution.height, parent.height) : 0) volume: PQSettings.filetypesVideoVolume/100 property int notifyIntervalSHORT: 20 property int notifyIntervalLONG: 250 notifyInterval: videoelem.duration>2*notifyIntervalLONG ? notifyIntervalLONG : notifyIntervalSHORT onStatusChanged: { deleg.imageStatus = ((status==MediaPlayer.Loaded||status==MediaPlayer.Buffered) ? Image.Ready : Image.Loading) if(status == MediaPlayer.Loaded) { container.currentVideoLength = videoelem.duration variables.currentZoomLevel = videoelem.scale*100 variables.currentPaintedZoomLevel = videoelem.scale if(PQSettings.filetypesVideoAutoplay) videoelem.play() else videoelem.pause() } } property bool reachedEnd: (position > videoelem.duration-2*notifyInterval&¬ifyInterval==notifyIntervalSHORT) onPositionChanged: { if(!PQSettings.filetypesVideoLoop) { if(position > videoelem.duration-2*notifyInterval) { if(notifyInterval == notifyIntervalLONG) { notifyInterval = notifyIntervalSHORT } else if(notifyInterval == notifyIntervalSHORT) { videoelem.pause() notifyInterval = videoelem.duration>2*notifyIntervalLONG ? notifyIntervalLONG : notifyIntervalSHORT } } } } onStopped: { if(PQSettings.filetypesVideoLoop) videoelem.play() } property bool scaleAdjustedFromRotation: false property int rotateTo: 0 // used to know where a rotation will end up before the animation has finished rotation: 0 Behavior on rotation { RotationAnimation { id: rotationAni; duration: PQSettings.imageviewAnimationDuration*100 } } onRotateToChanged: { if(pincharea.pinch.active) return // if the update came from a pinch event, don't do anything here rotation = rotateTo if((rotateTo%180+180)%180 == 90 && elem.scale == 1) { var h = videoelem.height var w = Math.min(metaData.resolution.width, parent.width) if(w > elem.height) { elem.scale = Math.min(h/w, 1) scaleAdjustedFromRotation = true } } else if(scaleAdjustedFromRotation) { elem.scale = 1 scaleAdjustedFromRotation = false } } onRotationChanged: variables.currentRotationAngle = videoelem.rotation Behavior on scale { NumberAnimation { id: scaleAni; duration: PQSettings.imageviewAnimationDuration*100 } } onScaleChanged: variables.currentZoomLevel = (videoelem.width/videoelem.metaData.resolution.width)*videoelem.scale*100 PinchArea { id: pincharea anchors.fill: parent pinch.target: videoelem pinch.minimumRotation: -360 pinch.maximumRotation: 360 pinch.minimumScale: 0.1 pinch.maximumScale: 10 pinch.dragAxis: Pinch.XAndYAxis onPinchStarted: contextmenu.hideMenu() onPinchUpdated: videoelem.rotateTo = videoelem.rotation MouseArea { id: videomouse enabled: PQSettings.imageviewLeftButtonMoveImage&&!variables.slideShowActive anchors.fill: parent hoverEnabled: false // important, otherwise the mouse pos will not be caught globally! drag.target: PQSettings.imageviewLeftButtonMoveImage ? videoelem : undefined cursorShape: controls.mouseHasBeenMovedRecently ? Qt.ArrowCursor : Qt.BlankCursor onPressAndHold: { variables.mousePos = mousearea.mapToItem(bgimage, Qt.point(mouse.x, mouse.y)) contextmenu.showMenu() } onClicked: { contextmenu.hideMenu() if(videoelem.playbackState == MediaPlayer.PlayingState) videoelem.pause() else { if(videoelem.reachedEnd) videoelem.seek(0) videoelem.play() } } } } Connections { target: variables onMousePosChanged: { controls.mouseHasBeenMovedRecently = true resetMouseHasBeenMovedRecently.restart() } } Timer { id: resetMouseHasBeenMovedRecently interval: 2000 repeat: false onTriggered: controls.mouseHasBeenMovedRecently = false } Rectangle { id: controls parent: container color: "#ee000000" anchors { left: parent.left right: parent.right bottom: parent.bottom } height: 50 property bool mouseHasBeenMovedRecently: false opacity: (!variables.slideShowActive && (videoelem.playbackState==MediaPlayer.PausedState || mouseHasBeenMovedRecently || volumecontrol_slider.manipulate)) ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 250 } } onOpacityChanged: { variables.videoControlsVisible = opacity>0 } Row { spacing: 10 Item { width: 10 height: 1 } Image { id: playpause source: videoelem.playbackState==MediaPlayer.PlayingState ? "/multimedia/pause.png" : "/multimedia/play.png" y: (controls.height-height)/2 height: controls.height/2 width: height sourceSize: Qt.size(height, height) MouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor onClicked: { if(variables.slideShowActive) return if(videoelem.playbackState == MediaPlayer.PlayingState) videoelem.pause() else videoelem.play() } } } Text { id: curpos y: (controls.height-height)/2 color: "white" font.bold: true text: handlingGeneral.convertSecsToProperTime(Math.round(videoelem.position/1000), Math.round(videoelem.duration/1000)) } PQSlider { id: videopos_slider y: (controls.height-height)/2 width: controls.width - playpause.width - curpos.width - timeleft.width - volumecontrol.width - volumecontrol_slider.width - 80 from: 0 to: videoelem.duration value: videoelem.position divideToolTipValue: 1000 convertToolTipValueToTimeWithDuration: Math.round(videoelem.duration/1000) overrideBackgroundHeight: 10 onValueChanged: { if(pressed) { controls.mouseHasBeenMovedRecently = true resetMouseHasBeenMovedRecently.restart() videoelem.seek(value) } } } Text { id: timeleft y: (controls.height-height)/2 color: "white" font.bold: true text: handlingGeneral.convertSecsToProperTime(Math.round((videoelem.duration-videoelem.position)/1000), Math.round(videoelem.duration/1000)) } Image { id: volumecontrol source: volumecontrol_slider.value==0 ? "/multimedia/speaker_mute.png" : (volumecontrol_slider.value <= 40 ? "/multimedia/speaker_low.png" : (volumecontrol_slider.value <= 80 ? "/multimedia/speaker_medium.png" : "/multimedia/speaker_high.png")) y: (controls.height-height)/2 height: 2*controls.height/3 width: height sourceSize: Qt.size(height, height) PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: volumecontrol_slider.value + "%" onClicked: { var tmp = volumecontrol_slider.manipulate volumecontrol_slider.manipulate = !tmp } } } PQSlider { id: volumecontrol_slider y: (controls.height-height)/2 width: manipulate ? 150 : 0 Behavior on width { NumberAnimation { duration: 150 } } visible: width>0 property bool manipulate: false toolTipSuffix: "%" from: 0 to: 100 value: PQSettings.filetypesVideoVolume onValueChanged: PQSettings.filetypesVideoVolume = value } Item { width: 10 height: 1 } } } } Connections { target: container onZoomIn: { videoelem.scale *= (1+PQSettings.imageviewZoomSpeed/100) videoelem.scaleAdjustedFromRotation = false } onZoomOut: { videoelem.scale /= (1+PQSettings.imageviewZoomSpeed/100) videoelem.scaleAdjustedFromRotation = false } onZoomReset: { xAni.duration = PQSettings.imageviewAnimationDuration*100 yAni.duration = PQSettings.imageviewAnimationDuration*100 if(!videoelem.scaleAdjustedFromRotation) videoelem.scale = 1 videoelem.x = (elem.width-videoelem.width)/2 videoelem.y = (elem.height-videoelem.height)/2 } onZoomActual: { if(variables.currentZoomLevel != 100) videoelem.scale = 100/variables.currentZoomLevel } onRotate: { videoelem.rotateTo += deg } onRotateReset: { var old = videoelem.rotateTo%360 if(old > 0) { if(old <= 180) videoelem.rotateTo -= old else videoelem.rotateTo += 360-old } else if(old < 0) { if(old >= -180) videoelem.rotateTo -= old else videoelem.rotateTo -= (old+360) } } onPlayPauseAnim: { if(videoelem.playbackState == MediaPlayer.PlayingState) videoelem.pause() else videoelem.play() } onPlayAnim: { videoelem.play() } onPauseAnim: { videoelem.pause() } onRestartAnim: { videoelem.seek(0) } } Connections { target: variables property bool pauseStateWhenElementOpens: false onVisibleItemChanged: { if(variables.visibleItem == "") { if(!pauseStateWhenElementOpens && videoelem.playbackState == MediaPlayer.PausedState) videoelem.play() } else { pauseStateWhenElementOpens = (videoelem.playbackState != MediaPlayer.PlayingState) videoelem.pause() } } } function restorePosZoomRotationMirror() { if(PQSettings.imageviewRememberZoomRotationMirror && src in variables.zoomRotationMirror) { elem.x = variables.zoomRotationMirror[src][0].x elem.y = variables.zoomRotationMirror[src][0].y elem.scale = variables.zoomRotationMirror[src][1] elem.rotation = variables.zoomRotationMirror[src][2] elem.mirror = variables.zoomRotationMirror[src][3] } } function storePosRotZoomMirror() { variables.zoomRotationMirror[src] = [Qt.point(elem.x, elem.y), elem.rotation, elem.scale, elem.mirror] } } photoqt-2.5/qml/mainwindow/PQLoading.qml000644 001750 001750 00000005355 14164672230 020723 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 Rectangle { id: loading_top anchors.fill: parent color: "#88000000" visible: false Repeater { model: 3 delegate: Canvas { id: load x: (parent.width-width)/2 y: (parent.height-height)/2 width: 206 - index*25 height: 206 - index*25 onPaint: { var ctx = getContext("2d"); ctx.strokeStyle = "#ffffff"; ctx.lineWidth = 3 ctx.beginPath(); ctx.arc(width/2, height/2, width/2-3, 0, 3.14, false); ctx.stroke(); } RotationAnimator { target: load from: index%2 ? 360 : 0 to: index%2 ? 0 : 360 duration: 1000 - index*100 running: loading_top.visible&&variables.visibleItem=="" onStopped: { if(loading_top.visible && variables.visibleItem=="") start() } } } } function forceStart() { visible = true } function forceStop() { visible = false } } photoqt-2.5/qml/mainwindow/PQMessage.qml000644 001750 001750 00000006106 14164672255 020734 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../elements" Item { x: variables.metaDataWidthWhenKeptOpen + 10 Behavior on x { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } y: 10 width: cont.width height: cont.height visible: (filefoldermodel.countMainView==0&&!filefoldermodel.filterCurrentlyActive) || variables.faceTaggingActive Rectangle { id: cont width: childrenRect.width+20 height: childrenRect.height+10 clip: true Behavior on width { NumberAnimation { duration: 200 } } color: "#88000000" radius: 5 Text { id: thex x: 10 y: 5 color: "white" text: "x" visible: variables.faceTaggingActive PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: em.pty+qsTranslate("facetagging", "Click to exit face tagging mode") onClicked: loader.passOn("facetagger", "stop", undefined) } } Text { x: variables.faceTaggingActive ? (thex.x+thex.width+5) : 10 y: 5 color: "white" text: variables.faceTaggingActive ? em.pty+qsTranslate("facetagging", "Click to tag faces, changes are saved automatically") : em.pty+qsTranslate("other", "Open a file to start") } } } photoqt-2.5/qml/mainwindow/PQThumbnailBar.qml000644 001750 001750 00000023535 14164672251 021721 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../elements" Item { property int xOffset: (view.contentWidth < (toplevel.width-variables.metaDataWidthWhenKeptOpen) ? ((toplevel.width-variables.metaDataWidthWhenKeptOpen)-view.contentWidth)/2 : 0) x: variables.metaDataWidthWhenKeptOpen + xOffset // ThumbnailsVisibility // 0 = on demand // 1 = always // 2 = except when zoomed y: PQSettings.thumbnailsEdge=="Top" ? ((PQSettings.thumbnailsVisibility==1 || (variables.mousePos.y < 2*PQSettings.interfaceHotEdgeSize*5 && !visible) || (variables.mousePos.y < height && visible) || (PQSettings.thumbnailsVisibility==2 && variables.currentPaintedZoomLevel<=1) || forceShow)&&!forceHide ? 0 : -height) : ((PQSettings.thumbnailsVisibility==1 || (variables.mousePos.y > toplevel.height-2*PQSettings.interfaceHotEdgeSize*5 && !visible) || (variables.mousePos.y > toplevel.height-height && visible) || (PQSettings.thumbnailsVisibility==2 && variables.currentPaintedZoomLevel<=1) || forceShow)&&!forceHide ? (toplevel.height-height-(variables.videoControlsVisible ? 50 : 0)) : toplevel.height) property bool forceShow: false property bool forceHide: false visible: !variables.slideShowActive && !variables.faceTaggingActive && (PQSettings.thumbnailsEdge=="Top" ? (y > -height) : (y < toplevel.height)) width: toplevel.width-(variables.metaDataWidthWhenKeptOpen + xOffset*2) height: PQSettings.thumbnailsSize+PQSettings.thumbnailsLiftUp+scroll.height clip: true Behavior on x { NumberAnimation { duration: justAfterStartup ? 0 : PQSettings.imageviewAnimationDuration*100 } } Behavior on y { NumberAnimation { duration: justAfterStartup ? 0 : PQSettings.imageviewAnimationDuration*100 } } property bool justAfterStartup: true Timer { running: true repeat: false interval: 250 onTriggered: justAfterStartup = false } ListView { id: view anchors.fill: parent spacing: PQSettings.thumbnailsSpacing orientation: ListView.Horizontal model: PQSettings.thumbnailsDisable ? 0 : filefoldermodel.countMainView property bool excludeCurrentDirectory: false ScrollBar.horizontal: PQScrollBar { id: scroll } property int mouseOverItem: -1 highlightFollowsCurrentItem: true highlightMoveDuration: 0 preferredHighlightBegin: currentItem==null ? 0 : (PQSettings.thumbnailsCenterOnActive ? (view.width-currentItem.width)/2 : PQSettings.thumbnailsSize/2) preferredHighlightEnd: currentItem==null ? width : (PQSettings.thumbnailsCenterOnActive ? (view.width-currentItem.width)/2+currentItem.width : (width-PQSettings.thumbnailsSize/2)) highlightRangeMode: ListView.ApplyRange Behavior on contentItem.x { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } delegate: Rectangle { x: 0 y: (view.currentIndex==index||view.mouseOverItem==index) ? 0 : PQSettings.thumbnailsLiftUp Behavior on y { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } width: PQSettings.thumbnailsSize height: PQSettings.thumbnailsSize color: "#88000000" Text { anchors.fill: parent anchors.margins: 5 visible: PQSettings.thumbnailsFilenameOnly color: "white" text: handlingFileDir.getFileNameFromFullPath(filefoldermodel.entriesMainView[index]) font.pointSize: PQSettings.thumbnailsFilenameOnlyFontSize verticalAlignment: Qt.AlignVCenter horizontalAlignment: Qt.AlignHCenter wrapMode: Text.WrapAtWordBoundaryOrAnywhere } Image { anchors.fill: parent fillMode: Image.PreserveAspectFit source: view.excludeCurrentDirectory ? ("image://icon/IMAGE////"+handlingFileDir.getSuffix(filefoldermodel.entriesMainView[index])) : ((PQSettings.thumbnailsFilenameOnly||PQSettings.thumbnailsDisable) ? "" : "image://thumb/" + filefoldermodel.entriesMainView[index]) visible: !PQSettings.thumbnailsFilenameOnly Image { width: Math.min(PQSettings.thumbnailsSize, 50) height: width x: (parent.width-width)/2 y: (parent.height-height)/2 visible: imageproperties.isVideo(filefoldermodel.entriesMainView[index]) source: visible ? "/multimedia/play.png" : "" } Rectangle { visible: PQSettings.thumbnailsFilename color: "#88000000" width: parent.width height: parent.height/3 x: 0 y: 2*parent.height/3 Text { anchors.fill: parent anchors.leftMargin: 2 anchors.rightMargin: 2 color: "white" elide: Text.ElideMiddle font.pointSize: PQSettings.thumbnailsFontSize font.bold: true verticalAlignment: Qt.AlignVCenter horizontalAlignment: Qt.AlignHCenter text: handlingFileDir.getFileNameFromFullPath(filefoldermodel.entriesMainView[index], true) } } } PQMouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true property bool tooltipSetup: false acceptedButtons: Qt.RightButton|Qt.MiddleButton|Qt.LeftButton onEntered: { if(!tooltipSetup) { var fpath = filefoldermodel.entriesMainView[index] tooltip = "" + handlingGeneral.escapeHTML(handlingFileDir.getFileNameFromFullPath(fpath, true)) + "

" + em.pty+qsTranslate("thumbnailbar", "File size:") + " " + handlingGeneral.convertBytesToHumanReadable(handlingFileDir.getFileSize(fpath)) + "
" + em.pty+qsTranslate("thumbnailbar", "File type:" ) + " " + handlingFileDir.getFileType(fpath) tooltipSetup = true } view.mouseOverItem = index } onClicked: filefoldermodel.current = index onExited: view.mouseOverItem = -1 onWheel: { // assume horizontal scrolling var newx = view.contentX - wheel.angleDelta.x // if scrolling was vertical if(wheel.angleDelta.x == 0 && wheel.angleDelta.y != 0) var newx = view.contentX - wheel.angleDelta.y // set new contentX, but don't move beyond left/right end of thumbnails view.contentX = Math.max(0, Math.min(newx, view.contentWidth-view.width)) } } } } Connections { target: filefoldermodel onCurrentChanged: view.currentIndex = filefoldermodel.current onNewDataLoadedMainView: { view.model = 0 if(filefoldermodel.countMainView == 0) return view.excludeCurrentDirectory = handlingFileDir.isExcludeDirFromCaching(handlingFileDir.getFilePathFromFullPath(filefoldermodel.fileInFolderMainView)) view.model = Qt.binding(function() { return (PQSettings.thumbnailsDisable ? 0 : filefoldermodel.countMainView) }) view.currentIndex = filefoldermodel.current } } Connections { target: variables onMousePosChanged: { forceShow = false forceHide = false } } function toggle() { if(forceShow || visible) { forceShow = false forceHide = true } else { forceShow = true forceHide = false } } } photoqt-2.5/qml/mainwindow/PQLabels.qml000644 001750 001750 00000037127 14164672261 020556 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import "../elements" Rectangle { id: labels_top x: variables.metaDataWidthWhenKeptOpen + (2*PQSettings.interfaceHotEdgeSize+10) Behavior on x { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } y: PQSettings.thumbnailsEdge=="Bottom" ? 10 : parent.height-height-10 width: row.width height: row.height+10 color: "#000000" radius: 5 visible: !(variables.slideShowActive&&PQSettings.slideshowHideLabels) && (filefoldermodel.current>-1 || filefoldermodel.filterCurrentlyActive) && (filefoldermodel.countMainView>0 || filefoldermodel.filterCurrentlyActive) && !variables.faceTaggingActive Row { id: row y: 5 spacing: 10 Item { width: 1 height: 1 } Text { id: counter color: "white" visible: !PQSettings.interfaceLabelsHideCounter && (filefoldermodel.current > -1) && pageInfo.text=="" width: visible ? children.width : 0 text: PQSettings.interfaceLabelsHideCounter ? "" : ((filefoldermodel.current+1) + "/" + filefoldermodel.countMainView) } // filename Text { id: filename visible: text!="" && (filefoldermodel.current > -1) color: "white" text: ((PQSettings.interfaceLabelsHideFilename&&PQSettings.interfaceLabelsHideFilepath) || filefoldermodel.current==-1) ? "" : (PQSettings.interfaceLabelsHideFilepath ? handlingFileDir.getFileNameFromFullPath(filefoldermodel.currentFilePath) : (PQSettings.interfaceLabelsHideFilename ? handlingFileDir.getFilePathFromFullPath(filefoldermodel.currentFilePath) : filefoldermodel.currentFilePath)) } Rectangle { color: "#cccccc" width: 1 height: filename.height visible: zoomlevel.visible } // zoom level Text { id: zoomlevel color: "white" visible: !PQSettings.interfaceLabelsHideZoomLevel && (filefoldermodel.current > -1) width: visible ? children.width : 0 text: PQSettings.interfaceLabelsHideZoomLevel ? "" : (Math.round(variables.currentZoomLevel)+"%") } Rectangle { color: "#cccccc" width: 1 height: filename.height visible: rotationangle.visible } // rotation angle Text { id: rotationangle color: "white" visible: !PQSettings.interfaceLabelsHideRotationAngle && (filefoldermodel.current > -1) width: visible ? children.width : 0 text: (Math.round(variables.currentRotationAngle)%360+360)%360 + "°" } Rectangle { color: "#cccccc" width: 1 height: filename.height visible: pageInfo.visible } Text { id: pageInfo text: (filefoldermodel.current>-1 && filefoldermodel.current < filefoldermodel.countMainView && filefoldermodel.isPQT) ? //: Used as in: Page 12/34 - please keep as short as possible (em.pty+qsTranslate("quickinfo", "Page %1 of %2").arg(filefoldermodel.pqtNum+1).arg(filefoldermodel.countMainView)) : (filefoldermodel.current>-1 && filefoldermodel.current < filefoldermodel.countMainView && filefoldermodel.isARC) ? //: Used as in: File 12/34 - please keep as short as possible (em.pty+qsTranslate("quickinfo", "File %1 of %2").arg(filefoldermodel.current+1).arg(filefoldermodel.countMainView) + ": " + handlingFileDir.getInternalFilenameArchive(filefoldermodel.currentFilePath)) : "" visible: text != "" && (filefoldermodel.current > -1) color: "white" } Item { width: 1 height: 1 } } Rectangle { id: viewermode x: row.x+10 y: PQSettings.thumbnailsEdge=="Bottom" ? (row.y+row.height+20 + (filterremove_cont.visible ? filterremove_cont.height+10 : 0)) : -height-filterremove_cont.height-10 width: 2*row.height+10 height: width color: "#000000" radius: 5 visible: (imageproperties.isPopplerDocument(filefoldermodel.currentFilePath) &&(imageproperties.getDocumentPages(filefoldermodel.currentFilePath)>1 || filefoldermodel.isPQT)) || (imageproperties.isArchive(filefoldermodel.currentFilePath)) Image { anchors.fill: parent anchors.margins: 5 source: pageInfo.text=="" ? "/image/viewermode.png" : "/image/noviewermode.png" } } // filter string Rectangle { id: filterremove_cont x: row.x y: PQSettings.thumbnailsEdge=="Bottom" ? (row.y+row.height+10) : -height-5 visible: filefoldermodel.filterCurrentlyActive width: visible ? filterrow.width : 0 height: visible ? filterrow.height+10 : 0 color: "#000000" radius: 5 Row { id: filterrow spacing: 5 y: 5 Item { width: 1 height: 1 } Text { id: filterremove color: "#999999" text: "x" } Text { id: filtertext color: "white" text: em.pty+qsTranslate("quickinfo", "Filter:") + " " + filefoldermodel.filenameFilters.join(" ") + (filefoldermodel.nameFilters.length==0 ? "" : " ." + filefoldermodel.nameFilters.join(" .")) } Item { width: 1 height: 1 } } } Image { x: row.x+row.width+10 y: row.y-5 width: row.height+10 height: width visible: variables.chromecastConnected mipmap: true source: "/streaming/chromecastactive.png" PQMouseArea { anchors.fill: parent hoverEnabled: true //: This is followed by the name of the Chromecast streaming device currently connected to tooltip: em.pty+qsTranslate("quickinfo", "Connected to:") + " " + variables.chromecastName cursorShape: Qt.PointingHandCursor onClicked: loader.show("chromecast") } } PQMenu { id: rightclickmenu model: [em.pty+qsTranslate("quickinfo", "Copy filename to clipboard"), (PQSettings.interfaceLabelsHideCounter ? em.pty+qsTranslate("quickinfo", "Show counter") : em.pty+qsTranslate("quickinfo", "Hide counter")), (PQSettings.interfaceLabelsHideFilepath ? em.pty+qsTranslate("quickinfo", "Show file path") : em.pty+qsTranslate("quickinfo", "Hide file path")), (PQSettings.interfaceLabelsHideFilename ? em.pty+qsTranslate("quickinfo", "Show file name") : em.pty+qsTranslate("quickinfo", "Hide file name")), (PQSettings.interfaceLabelsHideZoomLevel ? em.pty+qsTranslate("quickinfo", "Show zoom level") : em.pty+qsTranslate("quickinfo", "Hide zoom level")), (PQSettings.interfaceLabelsHideWindowButtons ? em.pty+qsTranslate("quickinfo", "Show window buttons") : em.pty+qsTranslate("quickinfo", "Hide window buttons")) ] lineBelowIndices: [0] onTriggered: { if(index === 0) handlingExternal.copyTextToClipboard(filename.text) else if(index == 1) PQSettings.interfaceLabelsHideCounter = !PQSettings.interfaceLabelsHideCounter else if(index == 2) PQSettings.interfaceLabelsHideFilepath = !PQSettings.interfaceLabelsHideFilepath else if(index == 3) PQSettings.interfaceLabelsHideFilename = !PQSettings.interfaceLabelsHideFilename else if(index == 4) PQSettings.interfaceLabelsHideZoomLevel = !PQSettings.interfaceLabelsHideZoomLevel else if(index == 5) PQSettings.interfaceLabelsHideWindowButtons = !PQSettings.interfaceLabelsHideWindowButtons } } PQMouseArea { anchors.fill: parent hoverEnabled: true drag.target: PQSettings.interfaceLabelsManageWindow&&toplevel.visibility!=Window.FullScreen ? undefined : parent drag.minimumX: 0 drag.maximumX: toplevel.width-parent.width drag.minimumY: 0 drag.maximumY: toplevel.height-parent.height tooltip: em.pty+qsTranslate("quickinfo", "Some info about the current image and directory") acceptedButtons: Qt.LeftButton|Qt.RightButton onClicked: { if(mouse.button == Qt.RightButton) { var pos = parent.mapFromItem(parent.parent, mouse.x, mouse.y) rightclickmenu.popup(Qt.point(parent.x+pos.x, parent.y+pos.y)) } } property point clickPos: Qt.point(0,0) property bool isPressed: false onPressed: { if(toplevel.visibility != Window.Maximized) { isPressed = true clickPos = Qt.point(mouse.x, mouse.y) } } onPositionChanged: { if(PQSettings.interfaceLabelsManageWindow && isPressed) { if(toplevel.visibility == Window.Maximized) toplevel.visibility = Window.Windowed var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y) toplevel.x += delta.x; toplevel.y += delta.y; } } onReleased: { isPressed = false } onDoubleClicked: { if(toplevel.visibility == Window.Maximized) toplevel.visibility = Window.Windowed else if(toplevel.visibility == Window.Windowed) toplevel.visibility = Window.Maximized else if(toplevel.visibility == Window.FullScreen) toplevel.visibility = Window.Maximized } } PQMenu { id: viewermoderightclickmenu model: [PQSettings.imageviewBigViewerModeButton ? em.pty+qsTranslate("quickinfo", "Hide central 'viewer mode' button") : em.pty+qsTranslate("quickinfo", "Show central 'viewer mode' button")] onTriggered: { PQSettings.imageviewBigViewerModeButton = !PQSettings.imageviewBigViewerModeButton } } PQMouseArea { x: viewermode.x y: viewermode.y width: viewermode.width+5 height: viewermode.height hoverEnabled: true cursorShape: enabled ? Qt.PointingHandCursor : Qt.ArrowCursor acceptedButtons: Qt.LeftButton|Qt.RightButton enabled: viewermode.visible drag.target: PQSettings.interfaceLabelsManageWindow&&toplevel.visibility!=Window.FullScreen ? undefined : parent drag.minimumX: 0 drag.maximumX: toplevel.width-parent.width drag.minimumY: 0 drag.maximumY: toplevel.height-parent.height tooltip: pageInfo.text=="" ? em.pty+qsTranslate("quickinfo", "Click here to enter viewer mode") : em.pty+qsTranslate("quickinfo", "Click here to exit viewer mode") onClicked: { if(mouse.button == Qt.LeftButton) { if(filefoldermodel.isPQT || filefoldermodel.isARC) exitViewerMode() else enterViewerMode() } else { var pos = parent.mapFromItem(parent.parent, mouse.x+viewermode.x, mouse.y+viewermode.y) viewermoderightclickmenu.popup(Qt.point(parent.x+pos.x, parent.y+pos.y)) } } } function enterViewerMode() { if(imageproperties.isPopplerDocument(filefoldermodel.currentFilePath)) { filefoldermodel.readDocumentOnly = true filefoldermodel.setFileNameOnceReloaded = "0::PQT::" + filefoldermodel.currentFilePath filefoldermodel.fileInFolderMainView = filefoldermodel.currentFilePath } else { filefoldermodel.readArchiveOnly = true filefoldermodel.setFileNameOnceReloaded = "---" filefoldermodel.fileInFolderMainView = filefoldermodel.currentFilePath } } function exitViewerMode() { if(filefoldermodel.isPQT) filefoldermodel.setFileNameOnceReloaded = filefoldermodel.pqtName else filefoldermodel.setFileNameOnceReloaded = filefoldermodel.arcName filefoldermodel.fileInFolderMainView = filefoldermodel.setFileNameOnceReloaded } function toggleViewerMode() { if(filefoldermodel.isPQT || filefoldermodel.isARC) exitViewerMode() else enterViewerMode() } PQMouseArea { x: filterremove_cont.x y: filterremove_cont.y width: filterremove.width+5 height: filterremove_cont.height hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: em.pty+qsTranslate("quickinfo", "Click to remove filter") onPressed: loader.passOn("filter", "removeFilter", undefined) } // this makes sure that a change in the window geometry does not leeds to the element being outside the visible area Connections { target: toplevel onWidthChanged: { if(labels_top.x < 0) labels_top.x = 0 else if(labels_top.x > toplevel.width-labels_top.width) labels_top.x = toplevel.width-labels_top.width } onHeightChanged: { if(labels_top.y < 0) labels_top.y = 0 else if(labels_top.y > toplevel.height-labels_top.height) labels_top.y = toplevel.height-labels_top.height } } } photoqt-2.5/qml/elements/000755 001750 001750 00000000000 14164671701 016024 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/elements/PQToolTip.qml000644 001750 001750 00000004016 14164671546 020402 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 ToolTip { id: control text: "" delay: 500 property alias wrapMode: contentText.wrapMode property alias elide: contentText.elide contentItem: Text { id: contentText text: control.text font: control.font color: "white" textFormat: Text.StyledText } background: Rectangle { color: "#ee000000" border.color: "#ee666666" } } photoqt-2.5/qml/elements/PQSpinBox.qml000644 001750 001750 00000006200 14164671556 020370 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 SpinBox { id: control editable: true property string prefix: "" property string suffix: "" width: 100 height: 30 contentItem: TextInput { z: 2 text: prefix + control.textFromValue(control.value, control.locale) + suffix font: control.font color: "black" selectionColor: "black" selectedTextColor: "white" horizontalAlignment: Qt.AlignHCenter verticalAlignment: Qt.AlignVCenter readOnly: !control.editable validator: control.validator inputMethodHints: Qt.ImhDigitsOnly onTextChanged: control.value = parseInt(text) PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.IBeamCursor propagateComposedEvents: true onClicked: mouse.accepted = false onPressed: mouse.accepted = false onReleased: mouse.accepted = false onDoubleClicked: mouse.accepted = false onPositionChanged: mouse.accepted = false onPressAndHold: mouse.accepted = false onWheel: { if(wheel.angleDelta.y < 0) control.value = Math.max(control.from, control.value-control.stepSize) else control.value = Math.min(control.to, control.value+control.stepSize) } } } } photoqt-2.5/qml/elements/PQCheckbox.qml000644 001750 001750 00000010145 14164671701 020527 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 CheckBox { id: control text: "" property alias interactive: mousearea.enabled property string tooltip: text property alias tooltipFollowsMouse: mousearea.tooltipFollowsMouse property alias tooltipDelay: mousearea.tooltipDelay property bool disableClickToCheck: false signal clicked(var mouse) signal rightClicked(var mouse) signal entered() signal exited() indicator: Rectangle { implicitWidth: 20 implicitHeight: 20 x: control.leftPadding y: parent.height / 2 - height / 2 radius: 3 color: control.checked ? (control.enabled ? "#ffffff" : "#dddddd" ) : "#aaaaaa" Behavior on color { ColorAnimation { duration: 50 } } border.color: "#333333" // indicator checkmark Canvas { id: canvas anchors { fill: parent topMargin: 3 rightMargin: 4 bottomMargin: 3 leftMargin: 4 } contextType: "2d" opacity: control.checked ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 50 } } Connections { target: control onEnabledChanged: canvas.requestPaint(); } onPaint: { var w = 3; context.reset() context.moveTo(0, height/2); context.lineTo(width/2, height-w) context.lineTo(width, 0) context.lineWidth = w context.lineJoint = "round" context.strokeStyle = control.enabled ? "#333333" : "#aaaaaa"; context.stroke() } } } contentItem: Text { text: " " + control.text font: control.font opacity: enabled ? 1.0 : 0.3 color: control.checked ? "#ffffff" : "#aaaaaa" Behavior on color { ColorAnimation { duration: 50 } } verticalAlignment: Text.AlignVCenter leftPadding: control.indicator.width + control.spacing } PQMouseArea { id: mousearea anchors.fill: control hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: control.tooltip tooltipWrapMode: Text.WrapAtWordBoundaryOrAnywhere acceptedButtons: Qt.RightButton onClicked: control.rightClicked(mouse) onEntered: control.entered() onExited: control.exited() } } photoqt-2.5/qml/elements/PQMouseArea.qml000644 001750 001750 00000004273 14164671600 020665 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 MouseArea { id: top property bool tooltipFollowsMouse: true property alias tooltip: control.text property alias tooltipWrapMode: control.wrapMode property alias tooltipWidth: control.width property alias tooltipElide: control.elide property alias tooltipDelay: control.delay PQToolTip { id: control parent: top.tooltipFollowsMouse ? curmouse : top visible: text!=""&&top.containsMouse } Item { id: curmouse x: top.mouseX + control.width/2 y: top.mouseY width: 1 height: 1 } } photoqt-2.5/qml/elements/PQRadioButton.qml000644 001750 001750 00000005611 14164671572 021243 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 RadioButton { id: control text: "RadioButton" property alias tooltip: mousearea.tooltip indicator: Rectangle { implicitWidth: 20 implicitHeight: 20 x: control.leftPadding y: parent.height / 2 - height / 2 radius: 13 color: control.checked ? "#ffffff" : "#aaaaaa" Behavior on color { ColorAnimation { duration: 50 } } border.color: "#333333" Rectangle { width: 10 height: 10 x: 5 y: 5 radius: 5 color: "#333333" opacity: control.checked ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 50 } } } } contentItem: Text { text: control.text font: control.font opacity: enabled ? 1.0 : 0.3 color: control.checked ? "#ffffff" : "#aaaaaa" wrapMode: Text.WrapAtWordBoundaryOrAnywhere Behavior on color { ColorAnimation { duration: 50 } } verticalAlignment: Text.AlignVCenter leftPadding: control.indicator.width + control.spacing } PQMouseArea { id: mousearea anchors.fill: control hoverEnabled: true cursorShape: Qt.PointingHandCursor onClicked: control.checked = true } } photoqt-2.5/qml/elements/PQMenu.qml000644 001750 001750 00000010316 14164671667 017720 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Layouts 1.2 Popup { id: control property var model: [] property var hideIndices: [] property var lineBelowIndices: [] padding: 1 margins: 0 signal triggered(var index) property int maxWidth: 100 property int leftrightpadding: 5 ColumnLayout { anchors.fill: parent spacing: 0 Repeater { model: control.model.length Rectangle { implicitWidth: control.maxWidth implicitHeight: 30 property bool mouseOver: false visible: (hideIndices.indexOf(index)==-1) opacity: enabled ? 1 : 0.3 color: mouseOver ? "#666666" : "#cccccc" Behavior on color { ColorAnimation { duration: 200 } } Text { x: leftrightpadding y: (parent.height-height)/2 text: control.model[index] font: control.font opacity: enabled ? 1.0 : 0.3 color: parent.mouseOver ? "#ffffff" : "#000000" Behavior on color { ColorAnimation { duration: 200 } } horizontalAlignment: Text.AlignLeft // Text.AlignHCenter verticalAlignment: Text.AlignVCenter Component.onCompleted: if(width+2*leftrightpadding > control.maxWidth) control.maxWidth = width+2*leftrightpadding onWidthChanged: { if(width+2*leftrightpadding > control.maxWidth) control.maxWidth = width+2*leftrightpadding } } Rectangle { x: 0 y: parent.height-height width: parent.width height: lineBelowIndices.indexOf(index)==-1 ? 1 : 3 color: height==1 ? "#88555555" : "#555555" visible: index < control.model.length-1 } MouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor onEntered: parent.mouseOver = true onExited: parent.mouseOver = false onClicked: { control.triggered(index) control.close() } } } } } function popup(pos) { control.x = pos.x control.y = pos.y control.open() } } photoqt-2.5/qml/elements/PQScrollBar.qml000644 001750 001750 00000004643 14164671655 020702 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 ScrollBar { id: control active: true orientation: Qt.Vertical width: orientation==Qt.Vertical ? 6 : undefined height: orientation==Qt.Vertical ? undefined : 6 contentItem: Rectangle { implicitWidth: control.size==1.0 ? 0 : (control.orientation==Qt.Vertical ? 6 : 100) implicitHeight: control.size==1.0 ? 0 : (control.orientation==Qt.Vertical ? 100 : 6) radius: control.orientation==Qt.Vertical ? width/2 : height/2 color: control.pressed ? "#eeeeee" : "#aaaaaa" visible: !(control.size==1.0) Behavior on color { ColorAnimation { duration: 100 } } } background: Rectangle { color: control.pressed ? "#88888888" : "#88666666" visible: control.size<1.0 Behavior on color { ColorAnimation { duration: 100 } } } } photoqt-2.5/qml/elements/PQSetting.qml000644 001750 001750 00000006255 14164671561 020431 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 Item { id: set_top width: stack.width-20 height: (available && ((expertmodeonly && variables.settingsManagerExpertMode) || (!normalmodeonly && variables.settingsManagerExpertMode) || (!expertmodeonly && !variables.settingsManagerExpertMode))) ? cont.height+20 : 0 Behavior on height { NumberAnimation { duration: 200 } } visible: height>0 clip: true property alias title: txt.text property alias content: cont.children property string helptext: "" property alias contwidth: cont.width property bool expertmodeonly: false property bool normalmodeonly: false property bool available: true Row { id: row y: 10 Text { id: txt y: (parent.height-height)/2 text: "" color: "white" width: 260 font.bold: true font.pointSize: 12 horizontalAlignment: Text.AlignRight wrapMode: Text.WrapAtWordBoundaryOrAnywhere PQMouseArea { anchors.fill: parent hoverEnabled: true tooltip: helptext cursorShape: Qt.WhatsThisCursor } } Item { width: 40 height: 1 } Item { id: cont_container y: (parent.height-height)/2 width: set_top.width - txt.width-40 height: cont.height Item { id: cont width: parent.width height: childrenRect.height } } } } photoqt-2.5/qml/elements/PQButton.qml000644 001750 001750 00000013334 14164671625 020264 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 Rectangle { id: control height: 40 width: buttonSameWidthAsMenu ? menu.width : ((forceWidth==0) ? (txt.width+iconview.width)+2*leftRightTextSpacing : forceWidth) property int forceWidth: 0 opacity: enabled ? 1 : 0.3 border.width: 0 border.color: "#00000000" radius: 2 property alias font: txt.font color: menu.visible ? control.backgroundColorMenuOpen : (control.down ? control.backgroundColorActive : (control.mouseOver ? control.backgroundColorHover : control.backgroundColor)) clip: true Behavior on color { ColorAnimation { duration: 150 } } property string text: "" property string backgroundColor: "#333333" property string backgroundColorHover: "#3a3a3a" property string backgroundColorActive: "#444444" property string backgroundColorMenuOpen: "#666666" property string textColor: "#ffffff" property string textColorHover: "#ffffff" property string textColorActive: "#ffffff" property bool clickOpensMenu: false property bool menuOpenDownward: true property bool centerMenuOnButton: false property bool buttonSameWidthAsMenu: false property var listMenuItems: [] property string imageButtonSource: "" property real imageOpacity: 1 property bool mouseOver: false property bool down: false property alias tooltip: mousearea.tooltip property alias tooltipFollowsMouse: mousearea.tooltipFollowsMouse signal menuItemClicked(var pos) signal clicked() property int leftRightTextSpacing: 10 property int fontPointSize: txt.font.pointSize property alias renderType: txt.renderType //: This is a generic string written on clickable buttons - please keep short! property string genericStringOk: em.pty+qsTranslate("buttongeneric", "Ok") //: This is a generic string written on clickable buttons - please keep short! property string genericStringCancel: em.pty+qsTranslate("buttongeneric", "Cancel") //: This is a generic string written on clickable buttons - please keep short! property string genericStringSave: em.pty+qsTranslate("buttongeneric", "Save") //: This is a generic string written on clickable buttons - please keep short! property string genericStringClose: em.pty+qsTranslate("buttongeneric", "Close") Text { id: txt x: (parent.width-width)/2 text: parent.text font.pointSize: fontPointSize height: parent.height verticalAlignment: Text.AlignVCenter opacity: enabled ? 1.0 : 0.3 color: control.down ? control.textColorActive : (control.mouseOver ? control.textColorHover : control.textColor) Behavior on color { ColorAnimation { duration: 100 } } elide: Text.ElideRight renderType: Text.QtRendering } Image { id: iconview source: imageButtonSource opacity: imageOpacity visible: imageButtonSource!=undefined&&imageButtonSource!="" sourceSize: Qt.size(30,30) x: (parent.width-width)/2 y: (parent.height-height)/2 } PQMouseArea { id: mousearea anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: control.text onEntered: control.mouseOver = true onExited: control.mouseOver = false onPressed: control.down = true onReleased: control.down = false onClicked: { if(clickOpensMenu) { if(menu.visible) menu.close() else { var pos = parent.mapFromItem(parent.parent, parent.x, parent.y) if(menuOpenDownward) menu.popup(Qt.point(pos.x + (centerMenuOnButton ? (parent.width-menu.width)/2 : 0), pos.y+parent.height)) else menu.popup(Qt.point(pos.x + (centerMenuOnButton ? (parent.width-menu.width)/2 : 0), pos.y-menu.height)) } } else control.clicked() } } PQMenu { id: menu model: listMenuItems onTriggered: control.menuItemClicked(index) } } photoqt-2.5/qml/elements/PQTextArea.qml000644 001750 001750 00000004214 14164671552 020522 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 TextArea { id: control placeholderText: "Enter" color: "white" selectedTextColor: "black" selectionColor: "white" property string borderColor: "#cccccc" focus: true enabled: opacity>0 && visible background: Rectangle { implicitWidth: 200 implicitHeight: contentHeight color: control.enabled ? "transparent" : "#cccccc" border.color: control.enabled ? borderColor : "transparent" } function setFocus() { forceActiveFocus() selectAll() } } photoqt-2.5/qml/elements/PQTile.qml000644 001750 001750 00000007041 14164671640 017701 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 Rectangle { id: tile color: chk.checked ? "#555555" : (hovered ? "#3a3a3a" : "#222222") Behavior on color { ColorAnimation { duration: 150 } } radius: 5 property int overrideWidth: 0 width: overrideWidth!=0 ? overrideWidth : (secondText=="" ? 250 : 505) height: chk.height+20 clip: true property bool hovered: false property alias text: chk.text property alias checked: chk.checked property alias secondText: chk_2.text property alias secondChecked: chk_2.checked property string tooltip: chk.text signal rightClicked() Row { x: 10 spacing: 10 PQCheckbox { id: chk y: 10 width: 230 tooltip: "" onRightClicked: tile.rightClicked() PQMouseArea { id: checkmousearea anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor acceptedButtons: Qt.NoButton onEntered: tile.hovered = true onExited: tile.hovered = false tooltip: tile.tooltip tooltipDelay: 1000 } } Item { width: 5 height: 1 } PQCheckbox { id: chk_2 visible: secondText!="" y: 10 width: 230 text: secondText enabled: chk.checked tooltip: "" PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor acceptedButtons: Qt.NoButton onEntered: tile.hovered = true onExited: tile.hovered = false tooltip: chk_2.text tooltipDelay: 1000 } } } } photoqt-2.5/qml/elements/PQProgress.qml000644 001750 001750 00000007540 14164671663 020621 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 Item { id: load_top width: 150 height: 150 property int progress: 0 Behavior on opacity { NumberAnimation { duration: 50 } } property var colors: ["#333333", "#444444", "#555555", "#666666", "#777777", "#888888", "#999999", "#aaaaaa", "#bbbbbb", "#cccccc", "#dddddd", "#eeeeee"] property int elementWidth: width/5 property int elementHeight: height/5 property var xPos: [(width-elementWidth)/2, 13*(width-elementWidth)/15, width-elementWidth, 13*(width-elementWidth)/15, (width-elementWidth)/2, 2*(width-elementWidth)/15, 0, 2*(width-elementWidth)/15] property var yPos: [0, 2*(height-elementHeight)/15, (height-elementHeight)/2, 13*(height-elementHeight)/15, height-elementHeight, 13*(height-elementHeight)/15, (height-elementHeight)/2, 2*(height-elementHeight)/15] Repeater { model: 8 Rectangle { property int start: index*12 color: colors[Math.max(0, Math.min(progress-start, 11))] Behavior on color { ColorAnimation { duration: 200 } } x: xPos[index] y: yPos[index] opacity: 0.75 width: elementWidth height: elementHeight radius: width/2 } } Rectangle { id: rotator color: "#333333" Behavior on color { ColorAnimation { duration: 3600 } } width: elementWidth*1.5 height: elementHeight*1.5 x: (parent.width-width)/2 y: (parent.height-height)/2 radius: 10 Component.onCompleted: rotator.color = Qt.binding(function() { return (Math.abs(rotation)%360<180) ? "#aaaaaa" : "#333333" }) Timer { repeat: true running: load_top.opacity>0 interval: 10 onTriggered: rotator.rotation -= 1 } } Text { anchors.centerIn: rotator color: "#ffffff" text: progress+"%" } } photoqt-2.5/qml/elements/PQHorizontalLine.qml000644 001750 001750 00000003520 14164671675 021753 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 Rectangle { property bool expertModeOnly: false visible: available && (!expertModeOnly || (expertModeOnly && variables.settingsManagerExpertMode)) width: parent.width-5 height: 2 color: "#88333333" property bool available: true } photoqt-2.5/qml/elements/PQTabButton.qml000644 001750 001750 00000010556 14164671644 020717 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 TabButton { id: control text: "" implicitHeight: 60 implicitWidth: 250 font.pointSize: 12 property string backgroundColor: "#333333" property string backgroundColorHover: "#3a3a3a" property string backgroundColorActive: "#444444" property string backgroundColorSelected: "#555555" property string textColor: "#ffffff" property string textColorHover: "#ffffff" property string textColorActive: "#ffffff" property bool mouseOver: false property bool selected: false property alias tooltip: mousearea.tooltip property alias tooltipFollowsMouse: mousearea.tooltipFollowsMouse contentItem: Item { implicitWidth: control.implicitWidth-20 implicitHeight: control.height Text { id: txt text: control.text font: control.font y: (parent.height-height)/2 x: 10 width: control.implicitWidth-20 wrapMode: Text.WordWrap opacity: enabled ? 1.0 : 0.3 color: control.down ? control.textColorActive : (control.mouseOver ? control.textColorHover : control.textColor) Behavior on color { ColorAnimation { duration: 100 } } horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter elide: Text.ElideRight Component.onCompleted: { font.bold = true } } } background: Rectangle { implicitWidth: contentItem.width color: selected ? backgroundColorSelected : (control.down ? control.backgroundColorActive : (control.mouseOver ? control.backgroundColorHover : control.backgroundColor)) Behavior on color { ColorAnimation { duration: 100 } } implicitHeight: contentItem.height opacity: enabled ? 1 : 0.3 Rectangle { x: 0 y: 0 width: parent.width height: 1 color: backgroundColorSelected } Rectangle { x: 0 y: parent.height-height width: parent.width height: 1 color: backgroundColorSelected } Rectangle { x: parent.width-1 y: 0 width: 1 height: parent.height color: backgroundColorSelected } } PQMouseArea { id: mousearea anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: control.text onEntered: control.mouseOver = true onExited: control.mouseOver = false onPressed: control.down = true onReleased: control.down = false onClicked: control.clicked() } } photoqt-2.5/qml/elements/PQComboBox.qml000644 001750 001750 00000012347 14164671613 020521 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 ComboBox { id: control property alias tooltip: combomousearea.tooltip property alias tooltipFollowsMouse: combomousearea.tooltipFollowsMouse property bool firstItemEmphasized: false property int lineBelowItem: -1 property var hideItems: [] property string prefix: "" implicitWidth: 200 padding: 5 delegate: ItemDelegate { id: controldelegate width: control.width contentItem: Text { text: modelData color: controldelegmouse.containsMouse ? "#ffffff" : "#000000" font: control.font elide: Text.ElideRight verticalAlignment: Text.AlignVCenter Component.onCompleted: { if(index == 0 && firstItemEmphasized) font.bold = true } PQMouseArea { id: controldelegmouse anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true tooltip: parent.text propagateComposedEvents: true onClicked: mouse.accepted = false; onPressed: mouse.accepted = false; onReleased: mouse.accepted = false; onDoubleClicked: mouse.accepted = false; onPositionChanged: mouse.accepted = false; onPressAndHold: mouse.accepted = false; } } highlighted: control.highlightedIndex === index background: Rectangle { width: parent.width height: parent.height opacity: enabled ? 1 : 0.3 color: controldelegmouse.containsMouse ? "#666666" : "#cccccc" Rectangle { width: parent.width height: 1 x: 0 y: parent.height-1 color: "#cccccc" visible: (firstItemEmphasized&&index==0)||(lineBelowItem==index) } } } indicator: Canvas { id: canvas x: control.width - width - control.rightPadding y: control.topPadding + (control.availableHeight - height) / 2 width: 12 height: 8 contextType: "2d" Connections { target: control onPressedChanged: canvas.requestPaint() } onPaint: { context.reset(); context.moveTo(0, 0); context.lineTo(width, 0); context.lineTo(width / 2, height); context.closePath(); context.fillStyle = control.pressed ? "#cccccc" : "#ffffff" context.fill(); } } contentItem: Text { rightPadding: control.indicator.width + control.spacing text: control.prefix + control.displayText font: control.font color: control.pressed ? "#cccccc" : "#ffffff" verticalAlignment: Text.AlignVCenter elide: Text.ElideRight } background: Rectangle { implicitWidth: 120 implicitHeight: 40 color: control.pressed ? "#cc000000" : "#cc444444" border.color: control.pressed ? "#cc222222" : "#cc666666" border.width: control.visualFocus ? 2 : 1 radius: 2 } PQMouseArea { id: combomousearea anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor propagateComposedEvents: true onClicked: mouse.accepted = false onPressed: mouse.accepted = false onReleased: mouse.accepted = false onDoubleClicked: mouse.accepted = false onPositionChanged: mouse.accepted = false onPressAndHold: mouse.accepted = false } } photoqt-2.5/qml/elements/PQLineEdit.qml000644 001750 001750 00000004202 14164671606 020477 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 TextField { id: control placeholderText: "Enter" color: "white" selectedTextColor: "black" selectionColor: "white" property string borderColor: "#cccccc" focus: true enabled: opacity>0 && visible background: Rectangle { implicitWidth: 200 implicitHeight: 40 color: control.enabled ? "transparent" : "#cccccc" border.color: control.enabled ? borderColor : "transparent" } function setFocus() { forceActiveFocus() selectAll() } } photoqt-2.5/qml/elements/PQSlider.qml000644 001750 001750 00000011667 14164671650 020240 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 Slider { id: control orientation: Qt.Horizontal stepSize: 1.0 hoverEnabled: true implicitHeight: 20 property real wheelStepSize: 1.0 property int divideToolTipValue: 1 property alias tooltip: handletooltip.text property string toolTipPrefix: "" property string toolTipSuffix: "" property bool handleToolTipEnabled: true property bool sliderToolTipEnabled: true property int overrideBackgroundHeight: -1 property int convertToolTipValueToTimeWithDuration: -1 background: Rectangle { x: control.leftPadding y: control.topPadding + control.availableHeight / 2 - height / 2 implicitWidth: 200 implicitHeight: overrideBackgroundHeight==-1 ? 6 : overrideBackgroundHeight width: control.availableWidth height: implicitHeight radius: 2 color: "#565656" Rectangle { width: control.visualPosition * parent.width height: parent.height color: control.enabled ? "#eeeeee" : "#666666" radius: 2 } MouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor propagateComposedEvents: true onClicked: mouse.accepted = false onDoubleClicked: mouse.accepted = false onPressAndHold: mouse.accepted = false onPressed: mouse.accepted = false onWheel: { if(wheel.angleDelta.y > 0) control.value -= control.wheelStepSize else control.value += control.wheelStepSize } } } handle: Rectangle { x: control.leftPadding + control.visualPosition * (control.availableWidth - width) y: control.topPadding + control.availableHeight / 2 - height / 2 implicitWidth: 20 implicitHeight: 20 radius: 10 color: control.enabled ? (control.pressed ? "#f0f0f0" : "#f6f6f6") : "#777777" border.color: "#bdbebf" MouseArea { anchors.fill: parent hoverEnabled: true cursorShape: control.pressed ? Qt.ClosedHandCursor : Qt.OpenHandCursor propagateComposedEvents: true onClicked: mouse.accepted = false onDoubleClicked: mouse.accepted = false onPressAndHold: mouse.accepted = false onPressed: mouse.accepted = false onWheel: { if(wheel.angleDelta.y > 0) control.value -= control.wheelStepSize else control.value += control.wheelStepSize } } } PQToolTip { id: handletooltip parent: control.handle visible: control.pressed&&handleToolTipEnabled&&text!="" delay: 0 text: convertToolTipValueToTimeWithDuration == -1 ? (toolTipPrefix + (control.value/divideToolTipValue) + toolTipSuffix) : (toolTipPrefix + handlingGeneral.convertSecsToProperTime(control.value/divideToolTipValue, convertToolTipValueToTimeWithDuration) + toolTipSuffix) } PQToolTip { id: slidertooltip parent: control visible: control.hovered&&sliderToolTipEnabled&&!handletooltip.visible&&text!="" delay: 0 text: handletooltip.text } } photoqt-2.5/qml/PQModel.qml000644 001750 001750 00000010654 14164673363 016240 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import PQFileFolderModel 1.0 PQFileFolderModel { id: model // MainView: // the current index and filename // a change in the current filename triggers a (re-)load of the image even if the index remained unchanged property int current: -1 property string currentFilePath: "" // shortcut to detect whether filter is currently set property bool filterCurrentlyActive: nameFilters.length!=0||filenameFilters.length!=0 // this allows to set a specific filename as current // once the model has finished reloading property string setFileNameOnceReloaded: "" // is this a document or archive? if so, save some extra details property bool isPQT: currentFilePath.indexOf("::PQT::")>-1 property bool isARC: currentFilePath.indexOf("::ARC::")>-1 property string pqtName: isPQT ? currentFilePath.split("::PQT::")[1] : "" property int pqtNum: isPQT ? currentFilePath.split("::PQT::")[0]*1 : "" property string arcName: isARC ? currentFilePath.split("::ARC::")[1] : "" property string arcFile: isARC ? currentFilePath.split("::ARC::")[0] : "" defaultNameFilters: PQImageFormats.getEnabledFormats() mimeTypeFilters: PQImageFormats.getEnabledMimeTypes() showHidden: PQSettings.openfileShowHiddenFilesFolders onCurrentChanged: currentFilePath = model.entriesMainView[current] onFolderFileDialogChanged: handlingFileDialog.setLastLocation(folderFileDialog) onNewDataLoadedMainView: { var curset = false // if a specific filename is to be loaded if(setFileNameOnceReloaded == "---") { if(model.countMainView > 0) { current = 0 currentFilePath = model.entriesMainView[0] } } else if(setFileNameOnceReloaded != "") { if(setAsCurrent(setFileNameOnceReloaded)) { curset = true currentFilePath = setFileNameOnceReloaded } setFileNameOnceReloaded = "" } else if(currentFilePath != "") { if(setAsCurrent(currentFilePath)) curset = true } if(!curset) { // make sure the index is valid if(model.current >= model.countMainView) model.current = model.countMainView-1 else if(model.current == -1 && model.countMainView > 0) model.current = 0 else if(model.countMainView == 0) model.current = -1 // update the current file path model.currentFilePath = (model.current!=-1 ? model.entriesMainView[model.current] : "") } } // set a specific file as current file function setAsCurrent(filepath) { var ind = model.getIndexOfMainView(filepath) if(ind != -1) { current = ind return true } return false } } photoqt-2.5/qml/PQLoader.qml000644 001750 001750 00000036034 14164673367 016412 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 Item { id: load_top signal mainmenuPassOn(var what, var param) signal metadataPassOn(var what, var param) signal filedialogPassOn(var what, var param) signal slideshowPassOn(var what, var param) signal slideshowControlsPassOn(var what, var param) signal fileRenamePassOn(var what, var param) signal fileDeletePassOn(var what, var param) signal copyMoveFilePassOn(var what, var param) signal scalePassOn(var what, var param) signal aboutPassOn(var what, var param) signal imgurPassOn(var what, var param) signal wallpaperPassOn(var what, var param) signal filterPassOn(var what, var param) signal faceTaggerPassOn(var what, var param) signal settingsManagerPassOn(var what, var param) signal fileSaveAsPassOn(var what, var param) signal quickNavigationPassOn(var what, var param) signal unavailablePassOn(var what, var param) signal unavailablePopoutPassOn(var what, var param) signal chromecastPassOn(var what, var param) signal loggingPassOn(var what, var param) function show(ele) { // This is used to mask features that are not (yet) available on Windows if(handlingGeneral.amIOnWindows()) { if(ele == "wallpaper") { if(PQSettings.interfacePopoutWallpaper) ele = "unavailablepopout" else ele = "unavailable" } } ensureItIsReady(ele) if(ele == "filedialog") filedialogPassOn("show", undefined) else if(ele == "mainmenu") mainmenuPassOn("show", undefined) else if(ele == "metadata") metadataPassOn("show", undefined) else if(ele == "slideshowsettings") slideshowPassOn("show", undefined) else if(ele == "slideshowcontrols") slideshowControlsPassOn("show", undefined) else if(ele == "filerename") fileRenamePassOn("show", undefined) else if(ele == "filedelete") fileDeletePassOn("show", undefined) else if(ele == "scale") scalePassOn("show", undefined) else if(ele == "about") aboutPassOn("show", undefined) else if(ele == "imgur") imgurPassOn("show", undefined) else if(ele == "imguranonym") imgurPassOn("show_anonym", undefined) else if(ele == "wallpaper") wallpaperPassOn("show", undefined) else if(ele == "filter") filterPassOn("show", undefined) else if(ele == "settingsmanager") settingsManagerPassOn("show", undefined) else if(ele == "filesaveas") fileSaveAsPassOn("show", undefined) else if(ele == "unavailable") unavailablePassOn("show", undefined) else if(ele == "unavailablepopout") unavailablePopoutPassOn("show", undefined) else if(ele == "quicknavigation") quickNavigationPassOn("show", undefined) else if(ele == "chromecast") chromecastPassOn("show", undefined) else if(ele == "logging") loggingPassOn("show", undefined) } function passOn(ele, what, param) { if(ele == "mainmenu") mainmenuPassOn(what, param) else if(ele == "metadata") metadataPassOn(what, param) else if(ele == "filedialog") filedialogPassOn(what, param) else if(ele == "slideshowsettings") slideshowPassOn(what, param) else if(ele == "slideshowcontrols") slideshowControlsPassOn(what, param) else if(ele == "filedelete") fileDeletePassOn(what, param) else if(ele == "filerename") fileRenamePassOn(what, param) else if(ele == "scale") scalePassOn(what, param) else if(ele == "about") aboutPassOn(what, param) else if(ele == "imgur" || ele == "imguranonym") imgurPassOn(what, param) else if(ele == "wallpaper") wallpaperPassOn(what, param) else if(ele == "settingsmanager") settingsManagerPassOn(what, param) else if(ele == "filter") filterPassOn(what, param) else if(ele == "facetagger") faceTaggerPassOn(what, param) else if(ele == "copymove") copyMoveFilePassOn(what, param) else if(ele == "unavailable") unavailablePassOn(what, param) else if(ele == "quicknavigation") quickNavigationPassOn(what, param) else if(ele == "chromecast") chromecastPassOn(what, param) else if(ele == "logging") loggingPassOn(what, param) } function passKeyEvent(ele, key, mod) { ensureItIsReady(ele) if(ele == "mainmenu") mainmenuPassOn("keyevent", [key, mod]) else if(ele == "metadata") metadataPassOn("keyevent", [key, mod]) else if(ele == "filedialog") filedialogPassOn("keyevent", [key, mod]) else if(ele == "slideshowsettings") slideshowPassOn("keyevent", [key, mod]) else if(ele == "slideshowcontrols") slideshowControlsPassOn("keyevent", [key, mod]) else if(ele == "filedelete") fileDeletePassOn("keyevent", [key, mod]) else if(ele == "filerename") fileRenamePassOn("keyevent", [key, mod]) else if(ele == "scale") scalePassOn("keyevent", [key, mod]) else if(ele == "about") aboutPassOn("keyevent", [key, mod]) else if(ele == "imgur" || ele == "imguranonym") imgurPassOn("keyevent", [key, mod]) else if(ele == "wallpaper") wallpaperPassOn("keyevent", [key, mod]) else if(ele == "filter") filterPassOn("keyevent", [key, mod]) else if(ele == "facetagger") faceTaggerPassOn("keyevent", [key, mod]) else if(ele == "settingsmanager") settingsManagerPassOn("keyevent", [key, mod]) else if(ele == "filesaveas") fileSaveAsPassOn("keyevent", [key, mod]) else if(ele == "unavailable") unavailablePassOn("keyevent", [key, mod]) else if(ele == "unavailablepopout") unavailablePopoutPassOn("keyevent", [key, mod]) else if(ele == "quicknavigation") quickNavigationPassOn("keyevent", [key, mod]) else if(ele == "chromecast") chromecastPassOn("keyevent", [key, mod]) else if(ele == "logging") loggingPassOn("keyevent", [key, mod]) } function ensureItIsReady(ele) { if(ele == "mainmenu") { if(PQSettings.interfacePopoutMainMenu && mainmenu.source != "menumeta/PQMainMenuPopout.qml") mainmenu.source = "menumeta/PQMainMenuPopout.qml" else if(!PQSettings.interfacePopoutMainMenu && mainmenu.source != "menumeta/PQMainMenu.qml") mainmenu.source = "menumeta/PQMainMenu.qml" } else if(ele == "metadata") { if(PQSettings.interfacePopoutMetadata && metadata.source != "menumeta/PQMetaDataPopout.qml") metadata.source = "menumeta/PQMetaDataPopout.qml" else if(!PQSettings.interfacePopoutMetadata && metadata.source != "menumeta/PQMetaData.qml") metadata.source = "menumeta/PQMetaData.qml" } else if(ele == "filedialog") { if(PQSettings.interfacePopoutOpenFile && filedialog.source != "filedialog/PQFileDialogPopout.qml") filedialog.source = "filedialog/PQFileDialogPopout.qml" else if(!PQSettings.interfacePopoutOpenFile && filedialog.source != "filedialog/PQFileDialog.qml") filedialog.source = "filedialog/PQFileDialog.qml" } else if(ele == "histogram") { if(PQSettings.interfacePopoutHistogram && histogram.source != "histogram/PQHistogramPopout.qml") histogram.source = "histogram/PQHistogramPopout.qml" else if(!PQSettings.interfacePopoutHistogram && histogram.source != "histogram/PQHistogram.qml") histogram.source = "histogram/PQHistogram.qml" } else if(ele == "slideshowsettings") { if(PQSettings.interfacePopoutSlideShowSettings && slideshowsettings.source != "slideshow/PQSlideShowSettingsPopout.qml") slideshowsettings.source = "slideshow/PQSlideShowSettingsPopout.qml" else if(!PQSettings.interfacePopoutSlideShowSettings && slideshowsettings.source != "slideshow/PQSlideShowSettings.qml") slideshowsettings.source = "slideshow/PQSlideShowSettings.qml" } else if(ele == "slideshowcontrols") { if(PQSettings.interfacePopoutSlideShowControls && slideshowcontrols.source != "slideshow/PQSlideShowControlsPopout.qml") slideshowcontrols.source = "slideshow/PQSlideShowControlsPopout.qml" else if(!PQSettings.interfacePopoutSlideShowControls && slideshowcontrols.source != "slideshow/PQSlideShowControls.qml") slideshowcontrols.source = "slideshow/PQSlideShowControls.qml" } else if(ele == "filerename") { if(PQSettings.interfacePopoutFileRename && filerename.source != "filemanagement/PQRenamePopout.qml") filerename.source = "filemanagement/PQRenamePopout.qml" else if(!PQSettings.interfacePopoutFileRename && filerename.source != "filemanagement/PQRename.qml") filerename.source = "filemanagement/PQRename.qml" } else if(ele == "filedelete") { if(PQSettings.interfacePopoutFileDelete && filedelete.source != "filemanagement/PQDeletePopout.qml") filedelete.source = "filemanagement/PQDeletePopout.qml" else if(!PQSettings.interfacePopoutFileDelete && filedelete.source != "filemanagement/PQDelete.qml") filedelete.source = "filemanagement/PQDelete.qml" } else if(ele == "scale") { if(PQSettings.interfacePopoutScale && scaleimage.source != "scale/PQScalePopout.qml") scaleimage.source = "scale/PQScalePopout.qml" else if(!PQSettings.interfacePopoutScale && scaleimage.source != "scale/PQScale.qml") scaleimage.source = "scale/PQScale.qml" } else if(ele == "about") { if(PQSettings.interfacePopoutAbout && about.source != "about/PQAboutPopout.qml") about.source = "about/PQAboutPopout.qml" else if(!PQSettings.interfacePopoutAbout && about.source != "about/PQAbout.qml") about.source = "about/PQAbout.qml" } else if(ele == "imgur" || ele == "imguranonym") { if(PQSettings.interfacePopoutImgur && imgur.source != "imgur/PQImgurPopout.qml") imgur.source = "imgur/PQImgurPopout.qml" else if(!PQSettings.interfacePopoutImgur && imgur.source != "imgur/PQImgur.qml") imgur.source = "imgur/PQImgur.qml" } else if(ele == "wallpaper") { if(PQSettings.interfacePopoutWallpaper && wallpaper.source != "wallpaper/PQWallpaperPopout.qml") wallpaper.source = "wallpaper/PQWallpaperPopout.qml" else if(!PQSettings.interfacePopoutWallpaper && wallpaper.source != "wallpaper/PQWallpaper.qml") wallpaper.source = "wallpaper/PQWallpaper.qml" } else if(ele == "filter") { if(PQSettings.interfacePopoutFilter && filter.source != "filter/PQFilterPopout.qml") filter.source = "filter/PQFilterPopout.qml" else if(!PQSettings.interfacePopoutFilter && filter.source != "filter/PQFilter.qml") filter.source = "filter/PQFilter.qml" } else if(ele == "settingsmanager") { if(PQSettings.interfacePopoutSettingsManager && settingsmanager.source != "settingsmanager/PQSettingsManagerPopout.qml") settingsmanager.source = "settingsmanager/PQSettingsManagerPopout.qml" else if(!PQSettings.interfacePopoutSettingsManager && settingsmanager.source != "settingsmanager/PQSettingsManager.qml") settingsmanager.source = "settingsmanager/PQSettingsManager.qml" } else if(ele == "copymove") { if(copymove.source != "filemanagement/PQCopyMove.qml") copymove.source = "filemanagement/PQCopyMove.qml" } else if(ele == "filesaveas") { if(PQSettings.interfacePopoutFileSaveAs && filesaveas.source != "filemanagement/PQSaveAsPopout.qml") filesaveas.source = "filemanagement/PQSaveAsPopout.qml" else if(!PQSettings.interfacePopoutFileSaveAs && filesaveas.source != "filemanagement/PQSaveAs.qml") filesaveas.source = "filemanagement/PQSaveAs.qml" } else if(ele == "chromecast") { if(PQSettings.interfacePopoutChromecast && chromecast.source != "chromecast/PQChromecastPopout.qml") chromecast.source = "chromecast/PQChromecastPopout.qml" else if(!PQSettings.interfacePopoutChromecast && chromecast.source != "chromecast/PQChromecast.qml") chromecast.source = "chromecast/PQChromecast.qml" } else if(ele == "quicknavigation") { quicknavigation.source = "mainwindow/PQNavigation.qml" } else if(ele == "unavailable") { unavailable.source = "unavailable/PQUnavailable.qml" } else if(ele == "unavailablepopout") { unavailablepopout.source = "unavailable/PQUnavailablePopout.qml" } else if(ele == "logging") { logging.source = "logging/PQLogging.qml" } } } photoqt-2.5/qml/logging/000755 001750 001750 00000000000 14164672126 015640 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/logging/PQLogging.qml000644 001750 001750 00000012422 14164672126 020203 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 2.9 import "../elements" Window { id: logging_window //: Window title title: em.pty+qsTranslate("logging", "Logging") Component.onCompleted: { logging_window.setX(windowgeometry.loggingWindowGeometry.x) logging_window.setY(windowgeometry.loggingWindowGeometry.y) logging_window.setWidth(windowgeometry.loggingWindowGeometry.width) logging_window.setHeight(windowgeometry.loggingWindowGeometry.height) } minimumWidth: 400 minimumHeight: 300 onClosing: { storeGeometry() } flags: Qt.WindowStaysOnTopHint color: "#cc000000" visible: false Text { id: title anchors { left: parent.left right: parent.right top: parent.top topMargin: 10 } horizontalAlignment: Text.AlignHCenter color: "white" font.pointSize: 20 font.bold: true // We don't need to translate this text: "Debug/Log" } ScrollView { id: scroll anchors { fill: parent topMargin: title.height+20 bottomMargin: buttons.height+10 } PQTextArea { id: textarea placeholderText: "" text: "" readOnly: true } } Timer { interval: 1000 running: logging_window.visible repeat: true onTriggered: { textarea.text = PQLogDebugMessage.getMessage() textarea.cursorPosition = textarea.text.length } } Item { id: buttons anchors { left: parent.left right: parent.right bottom: parent.bottom } height: button_close.height+20 PQCheckbox { text: em.pty+qsTranslate("logging", "enable debug messages") x: 10 y: (parent.height-height)/2 checked: PQDebugLog.debug onCheckedChanged: PQDebugLog.debug = checked } PQButton { id: button_close x: (parent.width-width)/2 y: 10 text: genericStringClose onClicked: { logging_window.setVisible(false) } } PQButton { x: parent.width-width-10 y: 10 text: "..." clickOpensMenu: true menuOpenDownward: false scale: 0.8 listMenuItems: [em.pty+qsTranslate("logging", "copy to clipboard"), em.pty+qsTranslate("logging", "save to file")] onMenuItemClicked: { if(pos == 0) { handlingExternal.copyTextToClipboard(PQLogDebugMessage.getMessage()) } else if(pos == 1) { handlingFileDir.saveStringToNewFile(PQLogDebugMessage.getMessage()) } } } } Shortcut { sequence: "Esc" onActivated: logging_window.setVisible(false) } Connections { target: loader onLoggingPassOn: { if(what == "show") { logging_window.setVisible(true) textarea.text = PQLogDebugMessage.getMessage() textarea.cursorPosition = textarea.text.length } else if(what == "hide") { button_close.clicked() } } } function storeGeometry() { windowgeometry.loggingWindowGeometry = Qt.rect(logging_window.x, logging_window.y, logging_window.width, logging_window.height) windowgeometry.loggingWindowMaximized = (logging_window.visibility==Window.Maximized) } } photoqt-2.5/qml/startup/000755 001750 001750 00000000000 14164673261 015715 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/startup/PQStartupFreshInstall.qml000644 001750 001750 00000024014 14164673261 022653 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 2.2 import PQStartup 1.0 Window { id: top_first //: Window title title: "Welcome to PhotoQt" minimumWidth: 800 minimumHeight: 600 color: "#ffffff" x: (Screen.width - width)/2 y: (Screen.height - height)/2 PQStartup { id: startup } Item { anchors.fill: parent Column { spacing: 10 x: 5 width: top_first.width-10 Item { width: 1 height: 10 } Text { width: parent.width horizontalAlignment: Text.AlignHCenter wrapMode: Text.WrapAtWordBoundaryOrAnywhere text: "Welcome to PhotoQt" font.pointSize: 25 font.bold: true } Item { width: 1 height: 10 } Text { width: parent.width wrapMode: Text.WrapAtWordBoundaryOrAnywhere text: "PhotoQt is an image viewer that aims to be very flexible in order to adapt to your needs and workflow instead of the other way around. Thus, most things and behaviours can be adjusted in the settings manager. Below you can choose one of three sets of default settings to start out with." } Text { width: parent.width wrapMode: Text.WrapAtWordBoundaryOrAnywhere font.bold: true text: "If you do not know what to do here, that is nothing to worry about: Simply click on continue." } Item { width: 1 height: 1 } Row { id: optrow x: (parent.width-width)/2 spacing: 20 property int maxRadioheight: 0 Column { Image { width: 150 height: 100 fillMode: Image.PreserveAspectFit source: "/startup/single.png" opacity: radio_single.checked ? 1 : 0.5 MouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor onClicked: radio_single.checked = true } } RadioButton { id: radio_single x: (150-width)/2 text: "" ButtonGroup.group: radiogroup checked: true } Item { width: 1 height: 10 } Text { width: 150 horizontalAlignment: Text.AlignHCenter //: one of three sets of default settings in the welcome screen text: "show everything integrated into main window" wrapMode: Text.WrapAtWordBoundaryOrAnywhere color: radio_single.checked ? "#000000" : "#888888" MouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor onClicked: radio_single.checked = true } } } Column { Image { width: 150 height: 100 fillMode: Image.PreserveAspectFit source: "/startup/mixed.png" opacity: radio_mixed.checked ? 1 : 0.5 MouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor onClicked: radio_mixed.checked = true } } RadioButton { id: radio_mixed x: (150-width)/2 text: "" ButtonGroup.group: radiogroup } Item { width: 1 height: 10 } Text { width: 150 horizontalAlignment: Text.AlignHCenter //: one of three sets of default settings in the welcome screen text: "show some things integrated into the main window and some on their own" wrapMode: Text.WrapAtWordBoundaryOrAnywhere color: radio_mixed.checked ? "#000000" : "#888888" MouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor onClicked: radio_mixed.checked = true } } } Column { Image { width: 150 height: 100 fillMode: Image.PreserveAspectFit source: "/startup/individual.png" opacity: radio_individual.checked ? 1 : 0.5 MouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor onClicked: radio_individual.checked = true } } RadioButton { id: radio_individual x: (150-width)/2 text: "" ButtonGroup.group: radiogroup } Item { width: 1 height: 10 } Text { width: 150 horizontalAlignment: Text.AlignHCenter //: one of three sets of default settings in the welcome screen text: "show everything in its own window" wrapMode: Text.WrapAtWordBoundaryOrAnywhere color: radio_individual.checked ? "#000000" : "#888888" MouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor onClicked: radio_individual.checked = true } } } ButtonGroup { id: radiogroup } } Item { width: 1 height: 1 } Text { width: parent.width wrapMode: Text.WrapAtWordBoundaryOrAnywhere horizontalAlignment: Text.AlignHCenter text: "Note that you can change any and all of these settings (and many more) at any time from the settings manager." } Item { width: 1 height: 20 } Button { x: (parent.width-width)/2 //: written on a clickable button text: "Continue" font.bold: true focus: true onClicked: top_first.close() } } } Component.onCompleted: { top_first.showNormal() } onClosing: { // everything in one single window if(radio_single.checked) startup.setupFresh(0) // some integrated, some individual else if(radio_mixed.checked) startup.setupFresh(1) // everything in its own window else startup.setupFresh(2) } Shortcut { sequences: ["Escape", "Enter", "Return"] onActivated: top_first.close() } } photoqt-2.5/qml/startup/PQStartupUpdate.qml000644 001750 001750 00000007513 14164673256 021510 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 2.2 import PQStartup 1.0 Window { id: top_first //: Window title title: "PhotoQt updated" minimumWidth: 600 minimumHeight: 300 color: "#ffffff" x: (Screen.width - width)/2 y: (Screen.height - height)/2 PQStartup { id: startup } Item { anchors.fill: parent Column { spacing: 10 x: 5 width: top_first.width-10 Item { width: 1 height: 1 } Text { width: parent.width horizontalAlignment: Text.AlignHCenter wrapMode: Text.WrapAtWordBoundaryOrAnywhere text: "PhotoQt updated" font.pointSize: 25 font.bold: true } Item { width: 1 height: 1 } Text { width: parent.width wrapMode: Text.WrapAtWordBoundaryOrAnywhere text: "PhotoQt is an image viewer that aims to be very flexible in order to adapt to your needs and workflow instead of the other way around. Thus, most things and behaviours can be adjusted in the settings manager." } Text { width: parent.width wrapMode: Text.WrapAtWordBoundaryOrAnywhere font.bold: true horizontalAlignment: Text.AlignHCenter text: "In order to complete the update, some things need to be updated/migrated (done automatically). Simply close this window to continue." } Item { width: 1 height: 10 } Button { x: (parent.width-width)/2 //: written on a clickable button text: "Continue" focus: true onClicked: top_first.close() } } } Component.onCompleted: { top_first.showNormal() } onClosing: { startup.performChecksAndMigrations() } Shortcut { sequences: ["Escape", "Enter", "Return"] onActivated: top_first.close() } } photoqt-2.5/qml/wallpaper/000755 001750 001750 00000000000 14164673313 016200 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/wallpaper/PQWallpaper.qml000644 001750 001750 00000040135 14164673313 021106 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Dialogs 1.2 import QtGraphicalEffects 1.0 import "../elements" import "ele" import "../shortcuts/handleshortcuts.js" as HandleShortcuts Item { id: wallpaper_top width: parentWidth height: parentHeight property int parentWidth: toplevel.width property int parentHeight: toplevel.height opacity: 0 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } visible: opacity!=0 enabled: visible property string curCat: "plasma" property int numDesktops: 3 Item { id: dummyitem width: 0 height: 0 } ShaderEffectSource { id: effectSource sourceItem: PQSettings.interfacePopoutWallpaper ? dummyitem : imageitem anchors.fill: parent sourceRect: Qt.rect(parent.x,parent.y,parent.width,parent.height) } FastBlur { id: blur anchors.fill: effectSource source: effectSource radius: 32 } Rectangle { anchors.fill: parent color: "#ee000000" PQMouseArea { anchors.fill: parent hoverEnabled: true enabled: !PQSettings.interfacePopoutWallpaper onClicked: button_cancel.clicked() } PQMouseArea { anchors.fill: insidecont anchors.margins: -50 hoverEnabled: true } Item { id: insidecont x: (parent.width-width)/2 y: (parent.height-height)/2 width: Math.min(parent.width, Math.max(parent.width/2, 800)) height: Math.min(parent.height, Math.max(parent.height/2, 600)) Item { id: category x: 0 y: 0 width: 300 height: parent.height Item { width: parent.width height: childrenRect.height anchors.centerIn: parent Column { spacing: 20 Text { width: category.width horizontalAlignment: Text.AlignHCenter color: curCat=="plasma" ? "#ffffff" : "#aaaaaa" Behavior on color { ColorAnimation { duration: 150 } } font.pointSize: 15 font.bold: true text: "Plasma 5" PQMouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true //: %1 is a placeholder for the name of a desktop environment (plasma, xfce, gnome, etc.) tooltip: em.pty+qsTranslate("wallpaper", "Click to choose %1").arg("Plasma 5") onClicked: curCat = "plasma" } } Text { width: category.width horizontalAlignment: Text.AlignHCenter color: curCat=="gnome" ? "#ffffff" : "#aaaaaa" Behavior on color { ColorAnimation { duration: 150 } } font.pointSize: 15 font.bold: true text: "Gnome
Unity
Cinnamon" PQMouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true //: %1 is a placeholder for the name of a desktop environment (plasma, xfce, gnome, etc.) tooltip: em.pty+qsTranslate("wallpaper", "Click to choose %1").arg("Gnome/Unity/Cinnamon") onClicked: curCat = "gnome" } } Text { width: category.width horizontalAlignment: Text.AlignHCenter color: curCat=="xfce" ? "#ffffff" : "#aaaaaa" Behavior on color { ColorAnimation { duration: 150 } } font.pointSize: 15 font.bold: true text: "XFCE4" PQMouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true //: %1 is a placeholder for the name of a desktop environment (plasma, xfce, gnome, etc.) tooltip: em.pty+qsTranslate("wallpaper", "Click to choose %1").arg("XFCE4") onClicked: curCat = "xfce" } } Text { width: category.width horizontalAlignment: Text.AlignHCenter color: curCat=="enlightenment" ? "#ffffff" : "#aaaaaa" Behavior on color { ColorAnimation { duration: 150 } } font.pointSize: 15 font.bold: true text: "Enlightenment" PQMouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true //: %1 is a placeholder for the name of a desktop environment (plasma, xfce, gnome, etc.) tooltip: em.pty+qsTranslate("wallpaper", "Click to choose %1").arg("Enlightenment") onClicked: curCat = "enlightenment" } } Text { width: category.width horizontalAlignment: Text.AlignHCenter color: curCat=="other" ? "#ffffff" : "#aaaaaa" Behavior on color { ColorAnimation { duration: 150 } } font.pointSize: 15 font.bold: true text: "Other" PQMouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true //: %1 is a placeholder for the name of a desktop environment (plasma, xfce, gnome, etc.) tooltip: em.pty+qsTranslate("wallpaper", "Click to choose %1") //: Used as in: Other Desktop Environment .arg(em.pty+qsTranslate("wallpaper", "Other")) onClicked: curCat = "other" } } } } Rectangle { anchors { top: parent.top right: parent.right bottom: parent.bottom } width: 1 color: "#cccccc" } } Text { id: heading x: category.width y: 0 width: parent.width-x height: 100 //: Heading of wallpaper element text: em.pty+qsTranslate("wallpaper", "Set as Wallpaper") color: "white" font.pointSize: 20 font.bold: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } Row { id: buttons x: (parent.width-width)/2 + category.width/2 y: parent.height-height width: childrenRect.width spacing: 10 height: 50 PQButton { y: (parent.height-height)/2 id: button_ok //: Written on clickable button text: em.pty+qsTranslate("wallpaper", "Set as Wallpaper") onClicked: { var args = {} if(curCat == "plasma") { if(plasma.checkedScreens.length == 0) return args["screens"] = plasma.checkedScreens } else if(curCat == "gnome") { args["option"] = gnome.checkedOption } else if(curCat == "xfce") { if(xfce.checkedScreens.length == 0) return args["screens"] = xfce.checkedScreens args["option"] = xfce.checkedOption } else if(curCat == "enlightenment") { if(enlightenment.checkedScreens.length == 0 || enlightenment.checkedWorkspaces.length == 0) return args["screens"] = enlightenment.checkedScreens args["workspaces"] = enlightenment.checkedWorkspaces } else if(curCat == "other") { args["app"] = other.checkedTool args["option"] = other.checkedOption } handlingWallpaper.setWallpaper(curCat, filefoldermodel.currentFilePath, args) wallpaper_top.opacity = 0 variables.visibleItem = "" } } PQButton { y: (parent.height-height)/2 id: button_cancel text: genericStringCancel onClicked: { wallpaper_top.opacity = 0 variables.visibleItem = "" } } } Flickable { anchors { left: category.right top: heading.bottom bottom: buttons.top right: parent.right rightMargin: 10 bottomMargin: 10 } ScrollBar.vertical: PQScrollBar { } contentHeight: (curCat=="plasma" ? plasma.height : (curCat=="gnome" ? gnome.height : (curCat=="xfce" ? xfce.height : (curCat=="enlightenment" ? enlightenment.height : other.height)))) clip: true PQPlasma { id: plasma visible: curCat=="plasma" } PQGnome { id: gnome visible: curCat=="gnome" } PQXfce { id: xfce visible: curCat=="xfce" } PQEnlightenment { id: enlightenment visible: curCat=="enlightenment" } PQOther { id: other visible: curCat=="other" } } } Connections { target: loader onWallpaperPassOn: { if(what == "show") { if(filefoldermodel.current == -1) return opacity = 1 variables.visibleItem = "wallpaper" } else if(what == "hide") { button_cancel.clicked() } else if(what == "keyevent") { if(param[0] == Qt.Key_Escape) button_cancel.clicked() else if(param[0] == Qt.Key_Enter || param[0] == Qt.Key_Return) button_ok.clicked() else if(param[0] == Qt.Key_Tab) { var avail = ["plasma", "gnome", "xfce", "enlightenment", "other"] var cur = avail.indexOf(curCat)+1 if(cur == avail.length) cur = 0 curCat = avail[cur] } else if(param[0] == Qt.Key_Right || param[0] == Qt.Key_Left) { if(curCat == "other") other.changeTool() } } } } Component.onCompleted: curCat = handlingWallpaper.detectWM() } Image { x: 5 y: 5 width: 15 height: 15 source: "/popin.png" opacity: popinmouse.containsMouse ? 1 : 0.4 Behavior on opacity { NumberAnimation { duration: 200 } } PQMouseArea { id: popinmouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: PQSettings.interfacePopoutWallpaper ? //: Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface em.pty+qsTranslate("popinpopout", "Merge into main interface") : //: Tooltip of small button to show an element in its own window (i.e., not merged into main interface) em.pty+qsTranslate("popinpopout", "Move to its own window") onClicked: { if(PQSettings.interfacePopoutWallpaper) wallpaper_window.storeGeometry() button_cancel.clicked() PQSettings.interfacePopoutWallpaper = !PQSettings.interfacePopoutWallpaper HandleShortcuts.executeInternalFunction("__wallpaper") } } } } photoqt-2.5/qml/wallpaper/ele/000755 001750 001750 00000000000 14164673335 016751 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/wallpaper/ele/PQPlasma.qml000644 001750 001750 00000005062 14164673322 021141 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../elements" //********// // PLASMA 5 Column { x: 0 y: 0 width: parent.width height: childrenRect.height spacing: 10 onVisibleChanged: { if(visible) check() } property var checkedScreens: [] Text { x: (parent.width-width)/2 color: "white" font.pointSize: 15 text: "Plasma 5" font.bold: true } Item { width: 1 height: 10 } Text { x: 10 width: parent.width-20 color: "white" font.pointSize: 15 horizontalAlignment: Text.AlignHCenter wrapMode: Text.WordWrap text: em.pty+qsTranslate("wallpaper", "The image will be set to all screens at the same time.") } function check() { wallpaper_top.numDesktops = handlingWallpaper.getScreenCount() checkedScreens = [] for(var i = 0; i < wallpaper_top.numDesktops; ++i) checkedScreens.push(i+1) } } photoqt-2.5/qml/wallpaper/ele/PQEnlightenment.qml000644 001750 001750 00000013450 14164673335 022531 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../elements" //********// // PLASMA 5 Column { x: 0 y: 0 width: parent.width height: childrenRect.height property var numWorkspaces: [1, 1] property bool msgbusError: true property bool enlightenmentRemoteError: true onVisibleChanged: { if(visible) check() } property var checkedScreens: [] property var checkedWorkspaces: [] spacing: 10 Text { x: (parent.width-width)/2 color: "white" font.pointSize: 15 text: "Enlightenment" font.bold: true } Item { width: 1 height: 10 } Text { x: (parent.width-width)/2 visible: msgbusError color: "red" font.pointSize: 12 font.bold: true text: em.pty+qsTranslate("wallpaper", "Warning: %1 module not activated").arg("msgbus (DBUS)") } Text { x: (parent.width-width)/2 visible: enlightenmentRemoteError color: "red" font.pointSize: 12 font.bold: true text: em.pty+qsTranslate("wallpaper", "Warning: %1 not found").arg("enlightenment_remote") } Item { visible: enlightenmentRemoteError || msgbusError width: 1 height: 10 } Column { id: col spacing: 10 width: parent.width height: childrenRect.height Text { x: (parent.width-width)/2 color: "white" font.pointSize: 15 //: As in: Set wallpaper to which screens text: em.pty+qsTranslate("wallpaper", "Set to which screens") } Column { x: (parent.width-width)/2 width: childrenRect.width height: childrenRect.height id: desk_col spacing: 10 Repeater { model: numDesktops PQCheckbox { //: Used in wallpaper element text: em.pty+qsTranslate("wallpaper", "Screen") + " #" + (index+1) checked: true onCheckedChanged: { if(!checked) checkedScreens.splice(checkedScreens.indexOf(index+1), 1) else checkedScreens.push(index+1) } Component.onCompleted: { checkedScreens.push(index+1) } } } } Item { width: 1 height: 10 } Text { x: (parent.width-width)/2 color: "white" font.pointSize: 15 //: Enlightenment desktop environment handles wallpapers per workspace (different from screen) text: em.pty+qsTranslate("wallpaper", "Set to which workspaces") } Column { x: (parent.width-width)/2 width: childrenRect.width height: childrenRect.height id: ws_col spacing: 10 Repeater { model: numWorkspaces[0]*numWorkspaces[1] PQCheckbox { property string num: ((index%numWorkspaces[1] +1) + " - " + (Math.floor(index/numWorkspaces[1]) +1)) //: Enlightenment desktop environment handles wallpapers per workspace (different from screen) text: em.pty+qsTranslate("wallpaper", "Workspace:") + " " + num checked: true onCheckedChanged: { if(!checked) checkedWorkspaces.splice(checkedWorkspaces.indexOf(num), 1) else checkedWorkspaces.push(num) } Component.onCompleted: { checkedWorkspaces.push(num) } } } } } function check() { wallpaper_top.numDesktops = handlingWallpaper.getScreenCount() numWorkspaces = handlingWallpaper.getEnlightenmentWorkspaceCount() enlightenmentRemoteError = handlingWallpaper.checkEnlightenmentRemote() msgbusError = handlingWallpaper.checkEnlightenmentMsgbus(); } } photoqt-2.5/qml/wallpaper/ele/PQOther.qml000644 001750 001750 00000016213 14164673325 021010 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../elements" //*************// // GNOME/UNITY Column { x: 0 y: 0 width: parent.width height: childrenRect.height spacing: 10 property bool fehError: true property bool nitrogenError: true onVisibleChanged: { if(visible) check() } property string checkedTool: "" property string checkedOption: "" Text { x: (parent.width-width)/2 color: "white" font.pointSize: 15 //: Used as in: Other Desktop Environment text: em.pty+qsTranslate("wallpaper", "Other") font.bold: true } Item { width: 1 height: 10 } Text { x: (parent.width-width)/2 visible: fehError && feh.checked color: "red" font.pointSize: 12 font.bold: true text: em.pty+qsTranslate("wallpaper", "Warning: %1 not found").arg("feh") } Text { x: (parent.width-width)/2 visible: nitrogenError && nitrogen.checked color: "red" font.pointSize: 12 font.bold: true text: em.pty+qsTranslate("wallpaper", "Warning: %1 not found").arg("nitrogen") } Item { visible: (nitrogenError && nitrogen.checked) || (fehError && feh.checked) width: 1 height: 10 } Row { x: (parent.width-width)/2 width: childrenRect.width spacing: 10 Text { y: (feh.height-height)/2 color: "white" //: Tool refers to a program that can be executed text: em.pty+qsTranslate("wallpaper", "Tool:") } PQRadioButton { id: feh checked: true text: "feh" onCheckedChanged: if(checked) checkedTool = text Component.onCompleted: checkedTool = text } PQRadioButton { id: nitrogen text: "nitrogen" onCheckedChanged: if(checked) checkedTool = text } } Item { width: 1 height: 10 } Item { width: parent.width height: childrenRect.height Column { id: col x: (parent.width-width)/2 width: childrenRect.width spacing: 10 PQRadioButton { id: opt_one text: feh.checked ? "--bg-center" : "--set-auto" checked: true onCheckedChanged: if(checked) checkedOption = text Component.onCompleted: checkedOption = text Connections { target: feh onCheckedChanged: if(opt_one.checked) checkedOption = opt_one.text } } PQRadioButton { id: opt_two text: feh.checked ? "--bg-fill" : "--set-centered" onCheckedChanged: if(checked) checkedOption = text Connections { target: feh onCheckedChanged: if(opt_two.checked) checkedOption = opt_two.text } } PQRadioButton { id: opt_three text: feh.checked ? "--bg-max" : "--set-scaled" onCheckedChanged: if(checked) checkedOption = text Connections { target: feh onCheckedChanged: if(opt_three.checked) checkedOption = opt_three.text } } PQRadioButton { id: opt_four text: feh.checked ? "--bg-scale" : "--set-tiled" onCheckedChanged: if(checked) checkedOption = text Connections { target: feh onCheckedChanged: if(opt_four.checked) checkedOption = opt_four.text } } PQRadioButton { id: opt_five text: feh.checked ? "--bg-tile" : "--set-zoom" onCheckedChanged: if(checked) checkedOption = text Connections { target: feh onCheckedChanged: if(opt_five.checked) checkedOption = opt_five.text } } PQRadioButton { id: opt_six visible: nitrogen.checked text: "--set-zoom-fill" onCheckedChanged: if(checked) checkedOption = text Connections { target: feh onCheckedChanged: if(opt_six.checked) checkedOption = opt_six.text } } } } function check() { wallpaper_top.numDesktops = handlingWallpaper.getScreenCount() fehError = handlingWallpaper.checkFeh() nitrogenError = handlingWallpaper.checkNitrogen() } function changeTool() { if(feh.checked) nitrogen.checked = true else feh.checked = true } } photoqt-2.5/qml/wallpaper/ele/PQGnome.qml000644 001750 001750 00000010011 14164673332 020760 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../elements" //*************// // GNOME/UNITY Column { x: 0 y: 0 width: parent.width height: childrenRect.height spacing: 10 property bool gsettingsError: true onVisibleChanged: { if(visible) check() } property string checkedOption: "" Text { x: (parent.width-width)/2 color: "white" font.pointSize: 15 text: "Gnome/Unity/Cinnamon" font.bold: true } Item { width: 1 height: 10 } Text { x: (parent.width-width)/2 visible: gsettingsError color: "red" font.pointSize: 12 font.bold: true text: em.pty+qsTranslate("wallpaper", "Warning: %1 not found").arg("gsettings") } Item { visible: gsettingsError width: 1 height: 10 } Text { x: (parent.width-width)/2 color: "white" font.pointSize: 15 //: picture option refers to how to format a pictrue when setting it as wallpaper text: em.pty+qsTranslate("wallpaper", "Choose picture option") } Column { id: col x: (parent.width-width)/2 width: childrenRect.width spacing: 10 PQRadioButton { id: opt_wallpaper text: "wallpaper" onCheckedChanged: if(checked) checkedOption = text } PQRadioButton { id: opt_centered text: "centered" onCheckedChanged: if(checked) checkedOption = text } PQRadioButton { id: opt_scaled text: "scaled" onCheckedChanged: if(checked) checkedOption = text } PQRadioButton { id: opt_zoom text: "zoom" checked: true Component.onCompleted: checkedOption = text onCheckedChanged: if(checked) checkedOption = text } PQRadioButton { id: opt_spanned text: "spanned" onCheckedChanged: if(checked) checkedOption = text } } function check() { wallpaper_top.numDesktops = handlingWallpaper.getScreenCount() gsettingsError = handlingWallpaper.checkGSettings() } } photoqt-2.5/qml/wallpaper/ele/PQXfce.qml000644 001750 001750 00000011220 14164673316 020605 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../elements" //********// // PLASMA 5 Column { x: 0 y: 0 width: parent.width height: childrenRect.height spacing: 10 property bool xfconfQueryError: true onVisibleChanged: { if(visible) check() } property var checkedScreens: [] property string checkedOption: "" Text { x: (parent.width-width)/2 color: "white" font.pointSize: 15 text: "XFCE 4" font.bold: true } Item { width: 1 height: 10 } Text { x: (parent.width-width)/2 visible: xfconfQueryError color: "red" font.pointSize: 12 font.bold: true text: em.pty+qsTranslate("wallpaper", "Warning: %1 not found").arg("xfconf-query") } Item { visible: xfconfQueryError width: 1 height: 10 } Column { id: col spacing: 10 width: parent.width height: childrenRect.height Text { x: (parent.width-width)/2 color: "white" font.pointSize: 15 //: As in: Set wallpaper to which screens text: em.pty+qsTranslate("wallpaper", "Set to which screens") } Column { x: (parent.width-width)/2 width: childrenRect.width height: childrenRect.height id: desk_col spacing: 10 Repeater { model: numDesktops PQCheckbox { text: em.pty+qsTranslate("wallpaper", "Screen") + " #" + (index+1) checked: true onCheckedChanged: { if(!checked) checkedScreens.splice(checkedScreens.indexOf(index+1), 1) else checkedScreens.push(index+1) } Component.onCompleted: { checkedScreens.push(index+1) } } } } Item { width: 1 height: 10 } Text { x: (parent.width-width)/2 color: "white" font.pointSize: 15 //: picture option refers to how to format a pictrue when setting it as wallpaper text: em.pty+qsTranslate("wallpaper", "Choose picture option") } PQComboBox { x: (parent.width-width)/2 model: ListModel { id: model ListElement { text: "Automatic" } ListElement { text: "Centered" } ListElement { text: "Tiled" } ListElement { text: "Stretched" } ListElement { text: "Scaled" } ListElement { text: "Zoomed" } } onCurrentIndexChanged: { checkedOption = currentText } } } function check() { wallpaper_top.numDesktops = handlingWallpaper.getScreenCount() xfconfQueryError = handlingWallpaper.checkXfce() } } photoqt-2.5/qml/wallpaper/PQWallpaperPopout.qml000644 001750 001750 00000007345 14164673307 022326 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: wallpaper_window //: Window title title: em.pty+qsTranslate("wallpaper", "Set as Wallpaper") Component.onCompleted: { wallpaper_window.setX(windowgeometry.wallpaperWindowGeometry.x) wallpaper_window.setY(windowgeometry.wallpaperWindowGeometry.y) wallpaper_window.setWidth(windowgeometry.wallpaperWindowGeometry.width) wallpaper_window.setHeight(windowgeometry.wallpaperWindowGeometry.height) } minimumWidth: 500 minimumHeight: 500 modality: Qt.ApplicationModal objectName: "wallpaperpopout" onClosing: { storeGeometry() if(variables.visibleItem == "wallpaper") variables.visibleItem = "" } visible: PQSettings.interfacePopoutWallpaper&&curloader.item.opacity==1 flags: Qt.WindowStaysOnTopHint Connections { target: PQSettings onInterfacePopoutWallpaperChanged: { if(!PQSettings.interfacePopoutWallpaper) wallpaper_window.visible = Qt.binding(function() { return PQSettings.interfacePopoutWallpaper&&curloader.item.opacity==1; }) } } color: "#88000000" Loader { id: curloader source: "PQWallpaper.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return wallpaper_window.width }) item.parentHeight = Qt.binding(function() { return wallpaper_window.height }) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(wallpaper_window.objectName) } function storeGeometry() { windowgeometry.wallpaperWindowGeometry = Qt.rect(wallpaper_window.x, wallpaper_window.y, wallpaper_window.width, wallpaper_window.height) windowgeometry.wallpaperWindowMaximized = (wallpaper_window.visibility==Window.Maximized) } } photoqt-2.5/qml/imgur/000755 001750 001750 00000000000 14164672117 015335 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/imgur/PQImgur.qml000644 001750 001750 00000032344 14164672117 017402 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Dialogs 1.2 import QtGraphicalEffects 1.0 import "../elements" Item { id: imgur_top width: parentWidth height: parentHeight property int parentWidth: toplevel.width property int parentHeight: toplevel.height opacity: 0 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } visible: opacity!=0 enabled: visible property bool anonymous: false property string accountname: "" Item { id: dummyitem width: 0 height: 0 } ShaderEffectSource { id: effectSource sourceItem: PQSettings.interfacePopoutImgur ? dummyitem : imageitem anchors.fill: parent sourceRect: Qt.rect(parent.x,parent.y,parent.width,parent.height) } FastBlur { id: blur anchors.fill: effectSource source: effectSource radius: 32 } Rectangle { anchors.fill: parent color: "#ee000000" PQMouseArea { anchors.fill: parent hoverEnabled: true enabled: !PQSettings.interfacePopoutImgur onClicked: abortUpload() } Item { id: insidecont x: ((parent.width-width)/2) y: ((parent.height-height)/2) width: parent.width height: childrenRect.height clip: true PQMouseArea { anchors.fill: parent hoverEnabled: true } Column { spacing: 10 Text { x: (insidecont.width-width)/2 color: "white" font.pointSize: 20 font.bold: true visible: !report.visible text: em.pty+qsTranslate("imgur", "Upload to imgur.com") } Text { x: (insidecont.width-width)/2 color: "white" font.pointSize: 15 font.bold: true font.italic: true visible: !report.visible //: Used as in: Upload image as anonymous user text: anonymous ? em.pty+qsTranslate("imgur", "anonymous") : accountname } Item { width: 1 height: 10 } Item { width: childrenRect.width height: childrenRect.height x: (insidecont.width-width)/2 PQProgress { id: progress anchors.centerIn: report visible: !report.visible && !error.visible && !nointernet.visible onProgressChanged: opacity = (progress.progress == 100) ? 0 : 1 } Text { anchors.centerIn: report opacity: 1-progress.opacity visible: !report.visible && !error.visible && !nointernet.visible color: "white" font.pointSize: 12 text: em.pty+qsTranslate("imgur", "Obtaining image url...") } Text { id: longtime anchors.top: progress.bottom opacity: 1-progress.opacity visible: !report.visible && !error.visible && !nointernet.visible color: "red" horizontalAlignment: Text.AlignHCenter font.pointSize: 12 text: em.pty+qsTranslate("imgur", "This seems to take a long time...") + "
" + em.pty+qsTranslate("imgur", "There might be a problem with your internet connection or the imgur.com servers.") } Text { id: error property int code: 0 anchors.centerIn: report visible: false color: "red" horizontalAlignment: Text.AlignHCenter font.pointSize: 12 text: em.pty+qsTranslate("imgur", "An Error occurred while uploading image!") + "
" + em.pty+qsTranslate("imgur", "Error code:") + " " + code } Text { id: nointernet property int code: 0 anchors.centerIn: report visible: false color: "red" horizontalAlignment: Text.AlignHCenter font.pointSize: 12 text: em.pty+qsTranslate("imgur", "You do not seem to be connected to the internet...") + "
" + em.pty+qsTranslate("imgur", "Unable to upload!") } Item { id: report x: (longtime.width-width)/2 property string accessurl: "http://imgur.com/........" property string deleteurl: "http://imgur.com/........" visible: true width: childrenRect.width height: childrenRect.height Column { spacing: 10 width: childrenRect.width height: childrenRect.height Text { color: "white" text: em.pty+qsTranslate("imgur", "Access Image") font.pointSize: 15 font.bold: true } Text { color: "white" text: report.accessurl font.pointSize: 15 PQMouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true tooltip: em.pty+qsTranslate("imgur", "Click to open in browser") onClicked: Qt.openUrlExternally(parent.text) } } PQButton { text: em.pty+qsTranslate("imgur", "Copy to clipboard") onClicked: handlingExternal.copyTextToClipboard(report.accessurl) } Item { width: 1 height: 10 } Text { color: "white" text: em.pty+qsTranslate("imgur", "Delete Image") font.pointSize: 15 font.bold: true } Text { color: "white" text: report.deleteurl font.pointSize: 15 PQMouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true tooltip: em.pty+qsTranslate("imgur", "Click to open in browser") onClicked: Qt.openUrlExternally(parent.text) } } PQButton { text: em.pty+qsTranslate("imgur", "Copy to clipboard") onClicked: handlingExternal.copyTextToClipboard(report.deleteurl) } } } } Item { width: 1 height: 10 } PQButton { x: (insidecont.width-width)/2 text: report.visible ? genericStringClose : genericStringCancel onClicked: abortUpload() } } } Connections { target: handlingShareImgur onImgurUploadProgress: { progress.progress = perc*100 error.visible = false report.visible = false nointernet.visible = false } onFinished: { error.visible = false nointernet.visible = false report.visible = true } onImgurUploadError: { error.code = err error.visible = true report.visible = false nointernet.visible = false } onImgurImageUrl: { report.accessurl = url } onImgurDeleteHash: { report.deleteurl = "http://imgur.com/delete/" + url } } Connections { target: loader onImgurPassOn: { if(what == "show" || what == "show_anonym") { if(filefoldermodel.current == -1) return anonymous = (what == "show_anonym") progress.progress = 0 longtime.visible = false error.visible = false nointernet.visible = false report.visible = false opacity = 1 variables.visibleItem = "imgur" // Some of the actions in there would block the GUI if started in main thread // -> timer with timeout=0 moves it to subthread startupload.start() } else if(what == "hide") { abortUpload() } else if(what == "keyevent") { if(param[0] == Qt.Key_Escape) abortUpload() } } } Timer { id: startupload interval: 0 repeat: false running: false onTriggered: { if(!handlingShareImgur.checkIfConnectedToInternet()) nointernet.visible = true handlingShareImgur.authorizeHandlePin("68713a8441") if(!anonymous) { var ret = handlingShareImgur.authAccount() if(ret !== 0) { abortUpload() return } accountname = handlingShareImgur.getAccountUsername() handlingShareImgur.upload(filefoldermodel.currentFilePath) } else { accountname = "" handlingShareImgur.anonymousUpload(filefoldermodel.currentFilePath) } } } } function abortUpload() { handlingShareImgur.abort() opacity = 0 variables.visibleItem = "" } } photoqt-2.5/qml/imgur/PQImgurPopout.qml000644 001750 001750 00000007074 14164672112 020606 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: imgur_window //: Window title title: em.pty+qsTranslate("imgur", "Upload to imgur.com") Component.onCompleted: { imgur_window.setX(windowgeometry.imgurWindowGeometry.x) imgur_window.setY(windowgeometry.imgurWindowGeometry.y) imgur_window.setWidth(windowgeometry.imgurWindowGeometry.width) imgur_window.setHeight(windowgeometry.imgurWindowGeometry.height) } minimumWidth: 500 minimumHeight: 500 modality: Qt.ApplicationModal objectName: "imgurpopout" onClosing: { windowgeometry.imgurWindowGeometry = Qt.rect(imgur_window.x, imgur_window.y, imgur_window.width, imgur_window.height) windowgeometry.imgurWindowMaximized = (imgur_window.visibility==Window.Maximized) if(variables.visibleItem == "imgur") variables.visibleItem = "" } visible: PQSettings.interfacePopoutImgur&&curloader.item.opacity==1 flags: Qt.WindowStaysOnTopHint Connections { target: PQSettings onInterfacePopoutImgurChanged: { if(!PQSettings.interfacePopoutImgur) imgur_window.visible = Qt.binding(function() { return PQSettings.interfacePopoutImgur&&curloader.item.opacity==1; }) } } color: "#88000000" Loader { id: curloader source: "PQImgur.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return imgur_window.width }) item.parentHeight = Qt.binding(function() { return imgur_window.height }) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(imgur_window.objectName) } } photoqt-2.5/qml/filedialog/000755 001750 001750 00000000000 14164671746 016320 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/filedialog/PQFileDialogPopout.qml000644 001750 001750 00000007073 14164671720 022501 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: filedialog_window //: Window title title: em.pty+qsTranslate("filedialog", "File dialog") minimumWidth: 800 minimumHeight: 600 modality: PQSettings.interfacePopoutOpenFile ? Qt.NonModal : Qt.ApplicationModal flags: Qt.WindowStaysOnTopHint color: "#88000000" objectName: "filedialogpopout" Loader { source: "PQFileDialog.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return filedialog_window.width }) item.parentHeight = Qt.binding(function() { return filedialog_window.height }) } } onClosing: { storeGeometry() if(variables.visibleItem == "filedialog") variables.visibleItem = "" } Component.onCompleted: { if(windowgeometry.fileDialogWindowMaximized) filedialog_window.visibility = Window.Maximized else { filedialog_window.setX(windowgeometry.fileDialogWindowGeometry.x) filedialog_window.setY(windowgeometry.fileDialogWindowGeometry.y) filedialog_window.setWidth(windowgeometry.fileDialogWindowGeometry.width) filedialog_window.setHeight(windowgeometry.fileDialogWindowGeometry.height) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(filedialog_window.objectName) } function storeGeometry() { windowgeometry.fileDialogWindowMaximized = (filedialog_window.visibility==Window.Maximized) windowgeometry.fileDialogWindowGeometry = Qt.rect(filedialog_window.x, filedialog_window.y, filedialog_window.width, filedialog_window.height) } } photoqt-2.5/qml/filedialog/PQFileDialog.qml000644 001750 001750 00000024541 14164671746 021301 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "./parts" import "../elements" import "../shortcuts/handleshortcuts.js" as HandleShortcuts Rectangle { id: filedialog_top x: 0 y: 0 width: parentWidth height: parentHeight property int parentWidth: toplevel.width property int parentHeight: toplevel.height opacity: PQSettings.interfacePopoutOpenFile ? 1 : 0 visible: (opacity != 0) enabled: visible color: "#333333" property var historyListDirectory: [] property int historyListIndex: -1 PQMouseArea { anchors.fill: parent hoverEnabled: true } function setCurrentDirectory(dir, addToHistory) { if(dir == filefoldermodel.folderFileDialog) return filefoldermodel.folderFileDialog = dir if(addToHistory === true || addToHistory === undefined) { // purge old history beyond current point (if not at end already) if(historyListIndex < historyListDirectory.length-1) historyListDirectory.splice(historyListIndex+1) historyListDirectory.push(handlingFileDir.cleanPath(dir)) historyListIndex += 1 } } Behavior on opacity { NumberAnimation { id: opacityAnim; duration: PQSettings.imageviewAnimationDuration*100 } } Behavior on x { NumberAnimation { id: xAnim; duration: 0 } } Behavior on y { NumberAnimation { id: yAnim; duration: 0 } } SplitView { id: splitview anchors.fill: parent // the dragsource, used to distinguish between dragging new folder and reordering userplaces property string dragSource: "" property string dragItemPath: "" Rectangle { id: leftcol width: PQSettings.openfileUserPlacesWidth onWidthChanged: PQSettings.openfileUserPlacesWidth = width color: "#22222222" Layout.minimumWidth: 200 MouseArea { anchors.fill: parent acceptedButtons: Qt.RightButton onClicked: { var pos = parent.mapFromItem(parent, mouse.x, mouse.y) rightclickmenu.popup(Qt.point(parent.x+pos.x, parent.y+pos.y)) } } PQMenu { id: rightclickmenu model: [ (PQSettings.openfileUserPlacesStandard ? (em.pty+qsTranslate("filedialog", "Hide standard locations")) : (em.pty+qsTranslate("filedialog", "Show standard locations"))), (PQSettings.openfileUserPlacesUser ? (em.pty+qsTranslate("filedialog", "Hide favorite locations")) : (em.pty+qsTranslate("filedialog", "Show favorite locations"))), (PQSettings.openfileUserPlacesVolumes ? (em.pty+qsTranslate("filedialog", "Hide storage devices")) : (em.pty+qsTranslate("filedialog", "Show storage devices"))) ] onTriggered: { if(index == 0) PQSettings.openfileUserPlacesStandard = !PQSettings.openfileUserPlacesStandard else if(index == 1) PQSettings.openfileUserPlacesUser = !PQSettings.openfileUserPlacesUser else if(index == 2) PQSettings.openfileUserPlacesVolumes = !PQSettings.openfileUserPlacesVolumes } } PQStandard { id: std anchors { left: parent.left right: parent.right top: parent.top } } PQPlaces { id: upl anchors.fill: parent anchors.topMargin: std.visible ? std.height+15 : 0 anchors.bottomMargin: dev.visible ? dev.height+15 : 0 } PQDevices { id: dev anchors { left: parent.left right: parent.right bottom: parent.bottom } } } Item { id: rightcol Layout.fillWidth: true Layout.minimumWidth: 200 PQBreadCrumbs { id: breadcrumbs anchors { left: parent.left right: parent.right top: parent.top } } PQFileView { id: fileview anchors.fill: parent anchors.bottomMargin: tweaks.height anchors.topMargin: breadcrumbs.height PQPreview { z: -1 anchors.fill: parent filePath: ((filefoldermodel.countFoldersFileDialog+filefoldermodel.countFilesFileDialog)>fileview.currentIndex&&fileview.currentIndex!=-1) ? (fileview.currentIndex. ** ** ** **************************************************************************/ import QtQuick 2.9 import Qt.labs.platform 1.0 import "../../elements" ListView { id: standard_top boundsBehavior: Flickable.StopAtBounds model: 5 height: childrenRect.height visible: PQSettings.openfileUserPlacesStandard property int hoverIndex: -1 property var locs: [StandardPaths.displayName(StandardPaths.HomeLocation), handlingFileDir.cleanPath(StandardPaths.writableLocation(StandardPaths.HomeLocation)), "user-home", StandardPaths.displayName(StandardPaths.DesktopLocation), handlingFileDir.cleanPath(StandardPaths.writableLocation(StandardPaths.DesktopLocation)), "user-desktop", StandardPaths.displayName(StandardPaths.PicturesLocation), handlingFileDir.cleanPath(StandardPaths.writableLocation(StandardPaths.PicturesLocation)), "folder-pictures", StandardPaths.displayName(StandardPaths.DownloadLocation), handlingFileDir.cleanPath(StandardPaths.writableLocation(StandardPaths.DownloadLocation)), "folder-downloads"] delegate: Rectangle { id: deleg_container width: parent.width height: 30 color: standard_top.hoverIndex==index ? "#555555" : (locs[(index-1)*3 + 1]!=""&&(filefoldermodel.folderFileDialog == locs[(index-1)*3 + 1]||filefoldermodel.folderFileDialog == locs[(index-1)*3 + 1]+"/") ? "#88555555" : "#00555555") Behavior on color { ColorAnimation { duration: 200 } } // the icon for this entry (e.g., folder, ...) Item { id: entryicon opacity: (standard_top.hoverIndex==index) ? 1 : 0.8 // its size is square (height==width) width: deleg_container.height height: width // the icon image Image { // fill parent (with margin for better looks) anchors.fill: parent anchors.margins: 5 // not shown for first entry (first entry is category title) visible: index>0 // the image icon is taken from image loader (i.e., from system theme if available) source: ((locs[(index-1)*3 + 2]!==undefined) ? ("image://icon/" + locs[(index-1)*3 + 2]) : "") } } // The text of each entry Text { id: entrytextUser // size and position anchors.fill: parent anchors.leftMargin: entryicon.width // vertically center text verticalAlignment: Qt.AlignVCenter // some styling color: index==0 ? "grey" : "white" font.bold: true font.pixelSize: 15 elide: Text.ElideRight //: This is the category title of user-set folders (or favorites) in the file dialog text: index==0 ? em.pty+qsTranslate("filedialog", "Standard") : locs[(index-1)*3 + 0] } // mouse area handling clicks PQMouseArea { id: mouseArea // fills full entry anchors.fill: parent // some properties hoverEnabled: true acceptedButtons: Qt.RightButton|Qt.LeftButton cursorShape: index > 0 ? Qt.PointingHandCursor : Qt.ArrowCursor tooltip: index == 0 ? em.pty+qsTranslate("filedialog", "Some standard locations") : locs[(index-1)*3 + 1] // clicking an entry loads the location or shows a context menu (depends on which button was used) onClicked: { if(mouse.button == Qt.LeftButton) filedialog_top.setCurrentDirectory(locs[(index-1)*3 + 1]) else { var pos = standard_top.mapFromItem(parent, mouse.x, mouse.y) filedialog_top.leftPanelPopupGenericRightClickMenu(Qt.point(standard_top.x+pos.x, standard_top.y+pos.y)) } } onEntered: hoverIndex = (index>0 ? index : -1) onExited: hoverIndex = -1 } } } photoqt-2.5/qml/filedialog/parts/PQPreview.qml000644 001750 001750 00000004207 14164671757 022053 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 Image { property string filePath: "" asynchronous: true source: (filePath==""||!PQSettings.openfilePreview||fileview.currentFolderExcluded) ? "" : ("image://thumb/" + filePath) fillMode: Image.PreserveAspectFit opacity: 0.4 Image { width: Math.min(200, parent.width-50) height: Math.min(200, parent.height-50) x: (parent.width-width)/2 y: (parent.height-height)/2 visible: imageproperties.isVideo(filePath) opacity: 0.5 source: visible ? "/multimedia/play.png" : "" } } photoqt-2.5/qml/filedialog/parts/PQBreadCrumbs.qml000644 001750 001750 00000017431 14164671773 022624 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../elements" import "../../shortcuts/handleshortcuts.js" as HandleShortcuts Item { id: bread_top property var pathParts: [] height: 50 function goBackwards() { backwards.clicked() } function canGoBackwards() { return backwards.enabled } function goForwards() { forwards.clicked() } function canGoForwards() { return forwards.enabled } PQButton { id: backwards x: 0 y: (bread_top.height-height)/2 width: height enabled: filedialog_top.historyListIndex>0 leftRightTextSpacing: 0 imageButtonSource: "/filedialog/backwards.png" onClicked: { if(filedialog_top.historyListIndex > 0) { filedialog_top.historyListIndex -= 1 filedialog_top.setCurrentDirectory(filedialog_top.historyListDirectory[filedialog_top.historyListIndex], false) } } tooltip: em.pty+qsTranslate("filedialog", "Backwards") tooltipFollowsMouse: false } PQButton { id: upwards anchors.left: backwards.right anchors.leftMargin: 5 y: (bread_top.height-height)/2 width: height enabled: !handlingFileDir.isRoot(filefoldermodel.folderFileDialog) leftRightTextSpacing: 0 imageButtonSource: "/filedialog/upwards.png" onClicked: filedialog_top.setCurrentDirectory(filefoldermodel.folderFileDialog + "/../", false) tooltip: em.pty+qsTranslate("filedialog", "Up a level") tooltipFollowsMouse: false } PQButton { id: forwards anchors.left: upwards.right anchors.leftMargin: 5 y: (bread_top.height-height)/2 width: height enabled: filedialog_top.historyListIndex. ** ** ** **************************************************************************/ import QtQuick 2.9 import PQFileFolderModel 1.0 import QtQuick.Controls 2.2 import "../../elements" GridView { id: files_grid clip: true cacheBuffer: 1 property int dragItemIndex: -1 property bool rightclickopen: false property bool currentIndexChangedUsingKeyIgnoreMouse: false onCurrentIndexChangedUsingKeyIgnoreMouseChanged: resetCurrentIndexChangedUsingKeyIgnoreMouse.restart() property bool currentFolderExcluded: false Timer { id: resetCurrentIndexChangedUsingKeyIgnoreMouse interval: 300 repeat: false running: false onTriggered: currentIndexChangedUsingKeyIgnoreMouse = false } ScrollBar.vertical: PQScrollBar { id: scroll } Component.onCompleted: { filedialog_top.historyListDirectory = [filefoldermodel.folderFileDialog] filedialog_top.historyListIndex = 0 loadFolder() } // we connect to this model instead of a property binding of model to countFileDialog // this way we also rebuild the model if the count has remained the same Connections { target: filefoldermodel onNewDataLoadedFileDialog: { // the order below is important to avoid 'accidentally' preloading/caching excluded folders files_grid.model = 0 currentFolderExcluded = handlingFileDir.isExcludeDirFromCaching(filefoldermodel.folderFileDialog) files_grid.model = filefoldermodel.countFoldersFileDialog+filefoldermodel.countFilesFileDialog } } cellWidth: PQSettings.openfileDefaultView=="icons" ? PQSettings.openfileZoomLevel*6 : width-scroll.width cellHeight: PQSettings.openfileDefaultView=="icons" ? PQSettings.openfileZoomLevel*6 : PQSettings.openfileZoomLevel*2 PQMouseArea { anchors.fill: parent z: -1 acceptedButtons: Qt.RightButton onClicked: { var pos = parent.mapFromItem(parent, mouse.x, mouse.y) rightclickmenu_bg.popup(Qt.point(pos.x, pos.y)) } onWheel: { // assume horizontal scrolling var newy = files_grid.contentY - wheel.angleDelta.y // set new contentY, but don't move beyond top/bottom end of view files_grid.contentY = Math.max(0, Math.min(newy, files_grid.contentHeight-files_grid.height)) } } PQRightClickMenu { id: rightclickmenu_bg isFolder: false isFile: false onVisibleChanged: { if(visible) { rightclickmenu_timer.stop() files_grid.rightclickopen = true } else rightclickmenu_timer.restart() } onClosed: { rightclickmenu_timer.stop() files_grid.rightclickopen = false } } Text { visible: (filefoldermodel.countFoldersFileDialog+filefoldermodel.countFilesFileDialog)==0 anchors.fill: parent anchors.margins: 20 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font.pointSize: 15 color: "#888888" font.bold: true wrapMode: Text.WordWrap text: em.pty+qsTranslate("filedialog", "no supported files/folders found") } delegate: Item { width: files_grid.cellWidth height: files_grid.cellHeight readonly property string fpath: filefoldermodel.entriesFileDialog[index] readonly property string fname: handlingFileDir.getFileNameFromFullPath(fpath) readonly property int fsize: handlingFileDir.getFileSize(fpath) Rectangle { id: deleg_container width: files_grid.cellWidth height: files_grid.cellHeight // these anchors make sure the item falls back into place after being dropped anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter property bool mouseInside: false color: index < filefoldermodel.countFoldersFileDialog ? (files_grid.currentIndex==index ? "#44888899" : "#44222233") : (files_grid.currentIndex==index ? "#44aaaaaa" : "#44444444") border.width: 1 border.color: "#282828" Behavior on color { ColorAnimation { duration: 200 } } Image { id: fileicon x: PQSettings.openfileDefaultView=="icons" ? 17.5 : 5 y: 5 width: PQSettings.openfileDefaultView=="icons" ? parent.width-10-25 : parent.height-10 height: parent.height-10 - (PQSettings.openfileDefaultView=="icons" ? 25 : 0) asynchronous: true opacity: files_grid.currentIndex==index ? 1 : 0.6 Behavior on opacity { NumberAnimation { duration: 200 } } // if we do not cache this image, then we keep the generic icon here source: (filethumb.status==Image.Ready&&!currentFolderExcluded) ? "" : "image://icon/" + (index < filefoldermodel.countFoldersFileDialog ? "folder" : ("IMAGE////"+handlingFileDir.getSuffix(filefoldermodel.entriesFileDialog[index]))) Text { id: numberOfFilesInsideFolder visible: PQSettings.openfileDefaultView=="icons" && index < filefoldermodel.countFoldersFileDialog anchors.fill: parent horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter color: "white" font.pointSize: 11 font.bold: true elide: Text.ElideMiddle text: "" } Image { id: filethumb anchors.fill: parent visible: index >= filefoldermodel.countFoldersFileDialog cache: false sourceSize: Qt.size(256, 256) fillMode: Image.PreserveAspectFit // mipmap does not look good, use only smooth smooth: true asynchronous: true // if we do not cache this image, then we keep this empty and thus preserve the generic icon in the outside image source: currentFolderExcluded ? "" : ((index < filefoldermodel.countFoldersFileDialog || !PQSettings.openfileThumbnails || filefoldermodel.entriesFileDialog[index]=="") ? "" : ("image://thumb/" + filefoldermodel.entriesFileDialog[index])) Image { width: PQSettings.openfileDefaultView=="icons" ? Math.min(files_grid.cellWidth-40, 50) : Math.min(files_grid.cellHeight-10, 50) height: width x: (parent.width-width)/2 y: (parent.height-height)/2 visible: imageproperties.isVideo(filefoldermodel.entriesFileDialog[index]) source: visible ? "/multimedia/play.png" : "" } } PQMouseArea { id: dragArea anchors.fill: parent drag.target: parent.parent hoverEnabled: true tooltip: em.pty+qsTranslate("filedialog", "Click and drag to favorites") cursorShape: Qt.OpenHandCursor onPressed: cursorShape = Qt.ClosedHandCursor onReleased: cursorShape = Qt.OpenHandCursor drag.onActiveChanged: { if (dragArea.drag.active) { dragArea.cursorShape = Qt.ClosedHandCursor // store which index is being dragged and that the entry comes from the userplaces (reordering only) files_grid.dragItemIndex = index splitview.dragSource = "folders" splitview.dragItemPath = filefoldermodel.entriesFileDialog[index] } deleg_container.Drag.drop(); if(!dragArea.drag.active) { dragArea.cursorShape = Qt.OpenHandCursor // reset variables used for drag/drop files_grid.dragItemIndex = -1 splitview.dragItemPath = "" } } } } Rectangle { width: parent.width height: files_grid.currentIndex == index ? parent.height/2 : parent.height/3.5 y: parent.height-height Behavior on height { NumberAnimation { duration: 100 } } opacity: PQSettings.openfileDefaultView=="icons" ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 200 } } color: "#aa000000" Text { width: parent.width-20 height: parent.height x: 10 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter color: "white" text: decodeURIComponent(fname) maximumLineCount: 2 elide: Text.ElideMiddle wrapMode: Text.Wrap font.pointSize: files_grid.currentIndex == index ? 10 : 8 Behavior on font.pointSize { NumberAnimation { duration: 100 } } } } Text { anchors.fill: parent anchors.leftMargin: fileicon.width+10 opacity: PQSettings.openfileDefaultView=="list" ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 200 } } verticalAlignment: Text.AlignVCenter font.bold: true color: "white" text: decodeURIComponent(fname) maximumLineCount: 2 elide: Text.ElideMiddle wrapMode: Text.Wrap } Text { id: filesizenum anchors { right: parent.right top: parent.top bottom: parent.bottom rightMargin: 5 } verticalAlignment: Qt.AlignVCenter visible: PQSettings.openfileDefaultView=="list" color: "white" font.bold: true text: index < filefoldermodel.countFoldersFileDialog ? "" : handlingGeneral.convertBytesToHumanReadable(fsize) } PQMouseArea { id: mouseArea anchors.fill: parent anchors.leftMargin: PQSettings.openfileDefaultView=="list"?fileicon.width:0 hoverEnabled: true cursorShape: Qt.PointingHandCursor acceptedButtons: Qt.LeftButton|Qt.RightButton property bool tooltipSetup: false onEntered: { if(!tooltipSetup) { var fmodi = handlingFileDir.getFileModified(fpath) var ftype = handlingFileDir.getFileType(fpath) if(index < filefoldermodel.countFoldersFileDialog) { tooltip = "" + handlingGeneral.escapeHTML(fname) + "

" + (numberOfFilesInsideFolder.text=="" ? "" : (em.pty+qsTranslate("filedialog", "# images")+": " + numberOfFilesInsideFolder.text + "
")) + em.pty+qsTranslate("filedialog", "Date:")+" " + fmodi.toLocaleDateString() + "
" + em.pty+qsTranslate("filedialog", "Time:")+" " + fmodi.toLocaleTimeString() + "" tooltipSetup = true } else { var str = "" // if we do not cache this directory, we do not show a thumbnail image if(currentFolderExcluded || fileicon.source != "") str += "

" else str += "

" str += "" + handlingGeneral.escapeHTML(fname) + "" + "

" + em.pty+qsTranslate("filedialog", "File size:")+" " + handlingGeneral.convertBytesToHumanReadable(fsize) + "
" + em.pty+qsTranslate("filedialog", "File type:")+" " + ftype + "
" + em.pty+qsTranslate("filedialog", "Date:")+" " + fmodi.toLocaleDateString() + "
" + em.pty+qsTranslate("filedialog", "Time:")+" " + fmodi.toLocaleTimeString()+ "" // tooltip needs to be set in one step, otherwise the formatting will be all messed up tooltip = str if(currentFolderExcluded || (!currentFolderExcluded && fileicon.source == "")) tooltipSetup = true } } if(!currentIndexChangedUsingKeyIgnoreMouse) files_grid.currentIndex = index } onExited: { if(!currentIndexChangedUsingKeyIgnoreMouse) files_grid.currentIndex = -1 } onClicked: { if(mouse.button == Qt.LeftButton) { if(!files_grid.rightclickopen) { if(index < filefoldermodel.countFoldersFileDialog) filedialog_top.setCurrentDirectory(filefoldermodel.entriesFileDialog[index]) else { filefoldermodel.setFileNameOnceReloaded = filefoldermodel.entriesFileDialog[index] filefoldermodel.fileInFolderMainView = filefoldermodel.entriesFileDialog[index] filedialog_top.hideFileDialog() } } } else { var pos = parent.mapFromItem(parent, mouse.x, mouse.y) rightclickmenu.popup(Qt.point(deleg_container.x+pos.x+(PQSettings.openfileDefaultView=="icons" ? 0 : fileicon.width), deleg_container.y+pos.y)) } } } PQRightClickMenu { id: rightclickmenu isFolder: index < filefoldermodel.countFoldersFileDialog isFile: !isFolder path: filefoldermodel.entriesFileDialog[index] onVisibleChanged: { if(visible) { rightclickmenu_timer.stop() files_grid.rightclickopen = true } else rightclickmenu_timer.restart() } onClosed: { rightclickmenu_timer.stop() files_grid.rightclickopen = false } } Drag.active: dragArea.drag.active Drag.hotSpot.x: fileicon.width/2 Drag.hotSpot.y: fileicon.height/2 states: [ State { // when drag starts, reparent entry to splitview when: deleg_container.Drag.active ParentChange { target: deleg_container parent: splitview } // (temporarily) remove anchors AnchorChanges { target: deleg_container anchors.horizontalCenter: undefined anchors.verticalCenter: undefined } } ] Component.onCompleted: { if(index < filefoldermodel.countFoldersFileDialog) { handlingFileDialog.getNumberOfFilesInFolder(filefoldermodel.entriesFileDialog[index], function(count) { if(count > 0) { numberOfFilesInsideFolder.text = count if(count == 1) filesizenum.text = em.pty+qsTranslate("filedialog", "%1 image").arg(count) else filesizenum.text = em.pty+qsTranslate("filedialog", "%1 images").arg(count) } }) } } } } function keyEvent(key, modifiers) { if(key == Qt.Key_Down) { currentIndexChangedUsingKeyIgnoreMouse = true if(modifiers == Qt.NoModifier) { if(currentIndex == -1) currentIndex = 0 else if(currentIndex < filefoldermodel.countFoldersFileDialog+filefoldermodel.countFilesFileDialog-1) currentIndex += 1 } else if(modifiers == Qt.ControlModifier) currentIndex = filefoldermodel.countFoldersFileDialog+filefoldermodel.countFilesFileDialog-1 } else if(key == Qt.Key_Up) { currentIndexChangedUsingKeyIgnoreMouse = true if(modifiers == Qt.NoModifier) { if(currentIndex == -1) currentIndex = filefoldermodel.countFoldersFileDialog+filefoldermodel.countFilesFileDialog-1 else if(currentIndex > 0) currentIndex -= 1 } else if(modifiers == Qt.ControlModifier) currentIndex = 0 else if(modifiers == Qt.AltModifier && handlingFileDir.cleanPath(filefoldermodel.folderFileDialog) != "/") filedialog_top.setCurrentDirectory(filefoldermodel.folderFileDialog+"/..") } else if(key == Qt.Key_Left) { currentIndexChangedUsingKeyIgnoreMouse = true if(modifiers == Qt.AltModifier) breadcrumbs.goBackwards() else if(modifiers == Qt.NoModifier) { if(currentIndex == -1) currentIndex = filefoldermodel.countFoldersFileDialog+filefoldermodel.countFilesFileDialog-1 else if(currentIndex > 0) currentIndex -= 1 } } else if(key == Qt.Key_Right) { currentIndexChangedUsingKeyIgnoreMouse = true if(modifiers == Qt.AltModifier) breadcrumbs.goForwards() else if(modifiers == Qt.NoModifier) { if(currentIndex == -1) currentIndex = 0 else if(currentIndex < filefoldermodel.countFoldersFileDialog+filefoldermodel.countFilesFileDialog-1) currentIndex += 1 } } else if(key == Qt.Key_PageUp && modifiers == Qt.NoModifier) { currentIndexChangedUsingKeyIgnoreMouse = true currentIndex = Math.max(currentIndex-5, 0) } else if(key == Qt.Key_PageDown && modifiers == Qt.NoModifier) { currentIndexChangedUsingKeyIgnoreMouse = true currentIndex = Math.min(currentIndex+5, filefoldermodel.countFoldersFileDialog+filefoldermodel.countFilesFileDialog-1) } else if((key == Qt.Key_Enter || key == Qt.Key_Return) && modifiers == Qt.NoModifier) { if(currentIndex < filefoldermodel.countFoldersFileDialog) { filedialog_top.setCurrentDirectory(filefoldermodel.entriesFileDialog[currentIndex]) } else { filefoldermodel.setFileNameOnceReloaded = filefoldermodel.entriesFileDialog[currentIndex] filefoldermodel.fileInFolderMainView = filefoldermodel.setFileNameOnceReloaded filedialog_top.hideFileDialog() } } else if((key == Qt.Key_Plus || key == Qt.Key_Equal) && modifiers == Qt.ControlModifier) tweaks.zoomIn() else if(key == Qt.Key_Minus && modifiers == Qt.ControlModifier) tweaks.zoomOut() else if((key == Qt.Key_H && modifiers == Qt.ControlModifier) || (key == Qt.Key_Period && modifiers == Qt.AltModifier)) { var old = PQSettings.openfileShowHiddenFilesFolders PQSettings.openfileShowHiddenFilesFolders = !old } else if(key == Qt.Key_Escape && modifiers == Qt.NoModifier) filedialog_top.hideFileDialog() else { currentIndexChangedUsingKeyIgnoreMouse = true var tmp = (currentIndex==-1 ? 0 : currentIndex+1) for(var i = tmp; i < filefoldermodel.countFoldersFileDialog+filefoldermodel.countFilesFileDialog; ++i) { if(handlingShortcuts.convertCharacterToKeyCode(handlingFileDir.getFileNameFromFullPath(filefoldermodel.entriesFileDialog[currentIndex][0])) == key) { currentIndex = i break; } } } } // using this timer has the following effect: // right click menu open, click on file/folder -> don't open file/folder but only close menu Timer { id: rightclickmenu_timer interval: 250 repeat: false running: false onTriggered: { if(!rightclickmenu.visible) files_grid.rightclickopen = false } } function setNameMimeTypeFilters() { // set right name filter if(tweaks.showWhichFileTypeIndex == "all") { filefoldermodel.defaultNameFilters = PQImageFormats.getEnabledFormats() filefoldermodel.mimeTypeFilters = PQImageFormats.getEnabledMimeTypes() } else if(tweaks.showWhichFileTypeIndex == "qt") { filefoldermodel.defaultNameFilters = PQImageFormats.getEnabledFormatsQt() filefoldermodel.mimeTypeFilters = PQImageFormats.getEnabledMimeTypesQt() } else if(tweaks.showWhichFileTypeIndex == "magick") { filefoldermodel.defaultNameFilters = PQImageFormats.getEnabledFormatsMagick() filefoldermodel.mimeTypeFilters = PQImageFormats.getEnabledMimeTypesMagick() } else if(tweaks.showWhichFileTypeIndex == "libraw") { filefoldermodel.defaultNameFilters = PQImageFormats.getEnabledFormatsLibRaw() filefoldermodel.mimeTypeFilters = PQImageFormats.getEnabledMimeTypesLibRaw() } else if(tweaks.showWhichFileTypeIndex == "devil") { filefoldermodel.defaultNameFilters = PQImageFormats.getEnabledFormatsDevIL() filefoldermodel.mimeTypeFilters = PQImageFormats.getEnabledMimeTypesDevIL() } else if(tweaks.showWhichFileTypeIndex == "freeimage") { filefoldermodel.defaultNameFilters = PQImageFormats.getEnabledFormatsFreeImage() filefoldermodel.mimeTypeFilters = PQImageFormats.getEnabledMimeTypesFreeImage() } else if(tweaks.showWhichFileTypeIndex == "poppler") { filefoldermodel.defaultNameFilters = PQImageFormats.getEnabledFormatsPoppler() filefoldermodel.mimeTypeFilters = PQImageFormats.getEnabledMimeTypesPoppler() } else if(tweaks.showWhichFileTypeIndex == "video") { filefoldermodel.defaultNameFilters = PQImageFormats.getEnabledFormatsVideo() filefoldermodel.mimeTypeFilters = PQImageFormats.getEnabledMimeTypesVideo() } else if(tweaks.showWhichFileTypeIndex == "allfiles") { filefoldermodel.defaultNameFilters = [] filefoldermodel.mimeTypeFilter = [] } else console.log("PQFileView.loadFolder(): ERROR: file type unknown:", tweaks.showWhichFileTypeIndex) } function loadFolder() { setNameMimeTypeFilters() currentIndex = (filefoldermodel.countFoldersFileDialog+filefoldermodel.countFilesFileDialog > 0 ? 0 : -1) var cleaned = handlingFileDir.cleanPath(filefoldermodel.folderFileDialog) if(cleaned == "/") breadcrumbs.pathParts = [""] else breadcrumbs.pathParts = cleaned.split("/") } Connections { target: filefoldermodel onFolderFileDialogChanged: loadFolder() } Connections { target: tweaks onShowWhichFileTypeIndexChanged: setNameMimeTypeFilters() } } photoqt-2.5/qml/filedialog/parts/PQDevices.qml000644 001750 001750 00000015607 14164671740 022012 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../elements" // This listview holds the currently connected storage devices (harddrives, usb, ...) ListView { id: storageinfo boundsBehavior: Flickable.StopAtBounds visible: PQSettings.openfileUserPlacesVolumes height: childrenRect.height property int hoverIndex: -1 // The model is a simple listmodel, not editable by user model: ListModel { id: storage_model } // This is the component that makes up each file entry of the storageinfo category delegate: Item { // full width, fixed height of 30 width: parent.width height: 30 // A rectangle for each of the items Rectangle { id: deleg_container // full width and height width: parent.width height: 30 color: hoverIndex==index ? "#555555" : (location!=""&&(filefoldermodel.folderFileDialog == location||filefoldermodel.folderFileDialog == location+"/") ? "#88555555" : "#00555555") Behavior on color { ColorAnimation { duration: 200 } } // This item holds the icon for the folders Item { id: entryicon // its size is square (height==width) width: parent.height height: width opacity: hoverIndex==index ? 1 : 0.8 // the icon image Image { // fill parent (with margin for better looks) anchors.fill: parent anchors.margins: 5 // not shown for first entry (first entry is category title) visible: index>0 // the location icon taken from image loader (i.e., from system theme if available) source: ((icon!==undefined&&icon!="") ? ("image://icon/" + icon) : "") } } // The text of each entry Text { id: entrytextStorage // size and position anchors.fill: parent anchors.leftMargin: entryicon.width anchors.rightMargin: entrytextStorageSize.width+10 // vertically center text verticalAlignment: Qt.AlignVCenter // some styling color: index==0 ? "grey" : "white" font.bold: true font.pixelSize: 15 elide: Text.ElideLeft //: This is the category title of storage devices to open (like USB keys) in the element for opening files text: index==0 ? em.pty+qsTranslate("filedialog", "Storage devices") : (name!=undefined ? name : "") } Text { id: entrytextStorageSize height: parent.height anchors.right: parent.right anchors.rightMargin: 10 verticalAlignment: Text.AlignVCenter // some styling color: "white" font.bold: true font.pixelSize: 15 elide: Text.ElideRight text: index==0 ? "" : size + " GB" } // mouse area handles changes to currentIndex and clicked events PQMouseArea { // a click everywhere works anchors.fill: parent acceptedButtons: Qt.LeftButton|Qt.RightButton tooltip: index == 0 ? em.pty+qsTranslate("filedialog", "Detected storage devices on your system") : (location + "
" + entrytextStorageSize.text + " (" + filesystemtype + ")") // some properties hoverEnabled: true cursorShape: index>0 ? Qt.PointingHandCursor : Qt.ArrowCursor // entering the area sets entry as current item onEntered: hoverIndex = (index>0 ? index : -1) onExited: hoverIndex = -1 // clicking an entry loads the location onClicked: { if(mouse.button == Qt.LeftButton) filedialog_top.setCurrentDirectory(location) else { var pos = storageinfo.mapFromItem(parent, mouse.x, mouse.y) filedialog_top.leftPanelPopupGenericRightClickMenu(Qt.point(storageinfo.x+pos.x, storageinfo.y+pos.y)) } } } } } Component.onCompleted: loadStorageInfo() function loadStorageInfo() { var s = handlingFileDialog.getStorageInfo() storage_model.clear() // for the heading storage_model.append({"name" : "", "location" : "", "filesystemtype" : "", "icon" : ""}) for(var i = 0; i < s.length; i+=4) { var name = s[i] var size = Math.round(s[i+1]/1024/1024/1024 +1); var filesystemtype = s[i+2] var path = s[i+3] storage_model.append({"name" : name, "size" : size, "location" : path, "filesystemtype" : filesystemtype, "icon" : "drive-harddisk"}) } } } photoqt-2.5/qml/filedialog/parts/PQPlaces.qml000644 001750 001750 00000030165 14164671734 021636 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../elements" ListView { id: userplaces_top boundsBehavior: Flickable.StopAtBounds model: ListModel { id: places_model } property bool showHiddenEntries: false property int dragItemIndex: -1 property string dragItemId: "" property int hoverIndex: -1 visible: PQSettings.openfileUserPlacesUser height: childrenRect.height Text { anchors.fill: parent anchors.margins: 15 visible: parent.model.count==1 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter //: 'favorites' here refers to the list of favorite folders a user can set in the file dialog text: em.pty+qsTranslate("filedialog", "no folder added to favorites yet") color: "grey" wrapMode: Text.WrapAtWordBoundaryOrAnywhere font.pointSize: 15 font.bold: true lineHeight: 1.5 } delegate: Item { id: deleg width: userplaces_top.width height: !visible ? 0 : 30 visible: ((path!=undefined&&(hidden=="false"||showHiddenEntries))||index==0) opacity: hidden=="false" ? 1 : 0.5 Rectangle { x: 0 y: 0 width: userplaces_top.width height: 1 z: 999 color: "white" visible: index>0 && (dragItemIndex>-1&&hoverIndex==index || (dragItemIndex>-1&&hoverIndex==0&&index==1)) } Rectangle { x: 0 y: 29 width: userplaces_top.width height: 1 z: 999 color: "white" visible: (dragItemIndex>-1&&hoverIndex==index) || (dragItemIndex>-1&&hoverIndex==-1&&index==places_model.count-1) } // the rectangle containing the actual content that can be dragged around Rectangle { id: deleg_container // full width, height of 30 // DO NOT tie this to the parent, as the rectangle will be reparented when dragged width: userplaces_top.width height: 30 // these anchors make sure the item falls back into place after being dropped anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter color: (userplaces_top.hoverIndex==index||mouseArea.drag.active) ? "#555555" : (path!=""&&(filefoldermodel.folderFileDialog == path||filefoldermodel.folderFileDialog == path+"/") ? "#88555555" :"#00555555") Behavior on color { ColorAnimation { duration: 200 } } // the icon for this entry (e.g., folder, ...) Item { id: entryicon opacity: (userplaces_top.hoverIndex==index||mouseArea.drag.active) ? 1 : 0.8 // its size is square (height==width) width: deleg_container.height height: width // the icon image Image { // fill parent (with margin for better looks) anchors.fill: parent anchors.margins: 5 // not shown for first entry (first entry is category title) visible: index>0 // the image icon is taken from image loader (i.e., from system theme if available) source: ((icon!==undefined&&icon!="") ? ("image://icon/" + icon) : "") } } // The text of each entry Text { id: entrytextUser // size and position anchors.fill: parent anchors.leftMargin: entryicon.width // vertically center text verticalAlignment: Qt.AlignVCenter // some styling color: index==0 ? "grey" : "white" font.bold: true font.pixelSize: 15 elide: Text.ElideRight //: This is the category title of user-set folders (or favorites) in the file dialog text: index==0 ? em.pty+qsTranslate("filedialog", "Favorites") : (folder != undefined ? folder : "") } // mouse area handling clicks PQMouseArea { id: mouseArea // fills full entry anchors.fill: parent // some properties hoverEnabled: true acceptedButtons: Qt.RightButton|Qt.LeftButton cursorShape: index > 0 ? Qt.PointingHandCursor : Qt.ArrowCursor tooltip: index == 0 ? em.pty+qsTranslate("filedialog", "Your favorites") : (path==undefined ? "" : path) drag.target: parent // if drag is started drag.onActiveChanged: { if(index == 0) return if (mouseArea.drag.active) { // store which index is being dragged and that the entry comes from the userplaces (reordering only) userplaces_top.dragItemIndex = index userplaces_top.dragItemId = id splitview.dragSource = "userplaces" } deleg_container.Drag.drop(); if(!mouseArea.drag.active) { // reset variables used for drag/drop userplaces_top.dragItemIndex = -1 userplaces_top.dragItemId = "" userplaces_top.hoverIndex = -1 } } // clicking an entry loads the location or shows a context menu (depends on which button was used) onClicked: { if(mouse.button == Qt.LeftButton && index > 0) filedialog_top.setCurrentDirectory(path) else if(mouse.button == Qt.RightButton) { if(index == 0) { var pos = parent.mapFromItem(parent, mouse.x, mouse.y) filedialog_top.leftPanelPopupGenericRightClickMenu(Qt.point(userplaces_top.x+pos.x, userplaces_top.y+pos.y)) } else { var pos = parent.mapFromItem(parent, mouse.x, mouse.y) contextmenu.popup(Qt.point(parent.x+pos.x, parent.y+pos.y)) } } } onEntered: userplaces_top.hoverIndex = (index>0 ? index : -1) onExited: if(userplaces_top.hoverIndex == index) userplaces_top.hoverIndex = -1 } PQMenu { id: contextmenu model: [ (hidden=="true" ? (em.pty+qsTranslate("filedialog", "Show entry")) : (em.pty+qsTranslate("filedialog", "Hide entry"))), (em.pty+qsTranslate("filedialog", "Remove entry")), (userplaces_top.showHiddenEntries ? (em.pty+qsTranslate("filedialog", "Hide hidden entries")) : (em.pty+qsTranslate("filedialog", "Show hidden entries"))) ] onTriggered: { if(index == 0) handlingFileDialog.hideUserPlacesEntry(id, hidden=="false") else if(index == 1) handlingFileDialog.removeUserPlacesEntry(id) else if(index == 2) userplaces_top.showHiddenEntries = !userplaces_top.showHiddenEntries } } Drag.active: mouseArea.drag.active&&index>0 Drag.hotSpot.x: 10 Drag.hotSpot.y: 10 states: [ State { // when drag starts, reparent entry to splitview when: deleg_container.Drag.active ParentChange { target: deleg_container parent: splitview } // (temporarily) remove anchors AnchorChanges { target: deleg_container anchors.horizontalCenter: undefined anchors.verticalCenter: undefined } } ] } } DropArea { anchors.fill: parent Rectangle { anchors.fill: parent color: "#08ffffff" visible: parent.containsDrag } onDropped: { // find the index on which it was dropped var newindex = userplaces_top.indexAt(drag.x, drag.y+userplaces_top.contentY) // a drop on the first entry (category title) is taken as drop on entry below if(newindex===0) newindex = 1 // if drag/drop originated from folders pane if(splitview.dragSource == "folders") { handlingFileDialog.addNewUserPlacesEntry(splitview.dragItemPath, newindex) // if drag/drop originated from userplaces (reordering) } else { // if item was dropped below any item, set new index to very end if(newindex < 0) newindex = userplaces_top.model.count-1 // if item was moved (if left in place nothing needs to be done) if(userplaces_top.dragItemIndex !== newindex) { // move item to location userplaces_top.model.move(userplaces_top.dragItemIndex, newindex, 1) // and save the changes to file handlingFileDialog.moveUserPlacesEntry(dragItemId, dragItemIndex. ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../elements" PQMenu { id: top property bool isFolder: false property bool isFile: false property string path: "" signal closed() model: [ (isFolder ? qsTranslate("filedialog", "Load this folder") : qsTranslate("filedialog", "Load this file")), (em.pty+qsTranslate("filedialog", "Add to Favorites")), (PQSettings.openfileShowHiddenFilesFolders ? qsTranslate("filedialog", "Hide hidden files") : qsTranslate("filedialog", "Show hidden files")), (PQSettings.openfileThumbnails ? qsTranslate("filedialog", "Hide thumbnails") : qsTranslate("filedialog", "Show thumbnails")), (PQSettings.openfilePreview ? qsTranslate("filedialog", "Hide preview") : qsTranslate("filedialog", "Show preview")) ] hideIndices: [ ((!isFile&&!isFolder) ? 0 : -1), (!isFolder ? 1 : -1) ] lineBelowIndices: [ ((isFile&&!isFolder) ? 0 : -1), (isFolder ? 1 : -1) ] onTriggered: { if(index == 0) { if(isFolder) filedialog_top.setCurrentDirectory(path) else { filefoldermodel.setFileNameOnceReloaded = path filefoldermodel.fileInFolderMainView = path filedialog_top.hideFileDialog() } } else if(index == 1) handlingFileDialog.addNewUserPlacesEntry(path, upl.model.count) else if(index == 2) PQSettings.openfileShowHiddenFilesFolders = !PQSettings.openfileShowHiddenFilesFolders else if(index == 3) PQSettings.openfileThumbnails = !PQSettings.openfileThumbnails else if(index == 4) PQSettings.openfilePreview = !PQSettings.openfilePreview top.closed() } } photoqt-2.5/qml/filedialog/parts/PQTweaks.qml000644 001750 001750 00000017427 14164671724 021672 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../elements" Rectangle { color: "transparent" height: 50 property string showWhichFileTypeIndex: "all" Rectangle { x: 0 width: parent.width y: 0 height: 1 color: "#aaaaaa" } Text { id: zoomtext color: "white" text: em.pty+qsTranslate("filedialog", "Zoom:") anchors.left: parent.left anchors.leftMargin: 5 y: (parent.height-height)/2 PQMouseArea { anchors.fill: parent acceptedButtons: Qt.NoButton hoverEnabled: true tooltip: em.pty+qsTranslate("filedialog", "Adjust font size of files and folders") tooltipFollowsMouse: false } } PQSlider { id: zoom from: 10 to: 50 value: PQSettings.openfileZoomLevel divideToolTipValue: 10 tooltip: em.pty+qsTranslate("filedialog", "Adjust font size of files and folders") toolTipPrefix: em.pty+qsTranslate("filedialog", "Zoom factor:") + " " anchors.left: zoomtext.right anchors.leftMargin: 5 y: (parent.height-height)/2 onValueChanged: PQSettings.openfileZoomLevel = value } PQComboBox { id: sortby prefix: em.pty+qsTranslate("filedialog", "Sort by:") + " " model: [em.pty+qsTranslate("filedialog", "Name"), em.pty+qsTranslate("filedialog", "Natural Name"), em.pty+qsTranslate("filedialog", "Time modified"), em.pty+qsTranslate("filedialog", "File size"), em.pty+qsTranslate("filedialog", "File type"), "[" + em.pty+qsTranslate("filedialog", "reverse order") + "]"] lineBelowItem: 4 anchors.right: allfiles.left anchors.rightMargin: 5 y: (parent.height-height)/2 tooltip: em.pty+qsTranslate("filedialog", "Choose by what to sort the files") tooltipFollowsMouse: false property int prevCurIndex: -1 property bool startUpDelay: false currentIndex: PQSettings.imageviewSortImagesBy=="name" ? 0 : (PQSettings.imageviewSortImagesBy=="time" ? 2 : (PQSettings.imageviewSortImagesBy=="size" ? 3 : (PQSettings.imageviewSortImagesBy=="type" ? 4 : 1))) onCurrentIndexChanged: { if(currentIndex == 5) { PQSettings.imageviewSortImagesAscending = !PQSettings.imageviewSortImagesAscending currentIndex = prevCurIndex } else { if(startUpDelay) PQSettings.imageviewSortImagesBy = (currentIndex===0 ? "name" : (currentIndex===1 ? "naturalname" : (currentIndex===2 ? "time" : (currentIndex===3 ? "size" : "type")))) prevCurIndex = currentIndex } } Timer { id: startupdelay interval: 100 repeat: false running: true onTriggered: sortby.startUpDelay = true } } PQComboBox { id: allfiles property var allfiletypes: ["all", "qt", "magick", "libraw", "devil", "freeimage", "poppler", "video", "allfiles"] model: [em.pty+qsTranslate("filedialog", "All supported images"), "Qt", (handlingGeneral.isImageMagickSupportEnabled() ? "ImageMagick" : "GraphicsMagick"), "LibRaw", "DevIL", "FreeImage", "PDF (Poppler)", em.pty+qsTranslate("filedialog", "Video files"), em.pty+qsTranslate("filedialog", "All files")] onCurrentIndexChanged: showWhichFileTypeIndex = allfiletypes[allfiles.currentIndex] anchors.right: remember.left anchors.rightMargin: 10 y: (parent.height-height)/2 tooltip: em.pty+qsTranslate("filedialog", "Choose which selection of files to show") tooltipFollowsMouse: false firstItemEmphasized: true Component.onCompleted: readFileTypeSettings() } PQButton { id: remember anchors.right: whichview.left anchors.rightMargin: 10 y: (parent.height-height)/2 leftRightTextSpacing: 0 tooltip: em.pty+qsTranslate("filedialog", "Remember loaded folder between sessions.") tooltipFollowsMouse: false imageButtonSource: PQSettings.openfileKeepLastLocation ? "/filedialog/remember.png" : "/filedialog/dontremember.png" opacity: PQSettings.openfileKeepLastLocation ? 0.8 : 0.2 onClicked: PQSettings.openfileKeepLastLocation = !(remember.opacity==0.8) } PQButton { id: whichview anchors.right: parent.right anchors.rightMargin: 10 y: (parent.height-height)/2 leftRightTextSpacing: 0 tooltip: em.pty+qsTranslate("filedialog", "Switch between list and icon view") tooltipFollowsMouse: false imageButtonSource: PQSettings.openfileDefaultView=="icons" ? "/filedialog/iconview.png" : "/filedialog/listview.png" onClicked: PQSettings.openfileDefaultView = (PQSettings.openfileDefaultView=="icons" ? "list" : "icons") } function readFileTypeSettings() { allfiles.hideItems = [] if(!handlingGeneral.isImageMagickSupportEnabled()) allfiles.hideItems.push(2) if(!handlingGeneral.isGraphicsMagickSupportEnabled()) allfiles.hideItems.push(3) if(!handlingGeneral.isLibRawSupportEnabled()) allfiles.hideItems.push(4) if(!handlingGeneral.isDevILSupportEnabled()) allfiles.hideItems.push(5) if(!handlingGeneral.isFreeImageSupportEnabled()) allfiles.hideItems.push(6) if(!handlingGeneral.isPopplerSupportEnabled()) allfiles.hideItems.push(7) if(!handlingGeneral.isVideoSupportEnabled()) allfiles.hideItems.push(7) var neg = 2 while(neg < allfiles.model.length) { if(allfiles.hideItems.indexOf(allfiles.model.length-neg) != -1) neg += 1 else break } allfiles.lineBelowItem = allfiles.model.length-neg } function zoomOut() { zoom.value -= 1 } function zoomIn() { zoom.value += 1 } } photoqt-2.5/qml/histogram/000755 001750 001750 00000000000 14164672077 016214 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/histogram/PQHistogram.qml000644 001750 001750 00000027155 14164672077 021137 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../elements" Rectangle { id: hist_top x: PQSettings.interfacePopoutHistogram ? 0 : PQSettings.histogramPosition.x y: PQSettings.interfacePopoutHistogram ? 0 : PQSettings.histogramPosition.y width: PQSettings.interfacePopoutHistogram ? parentWidth : PQSettings.histogramSize.width height: PQSettings.interfacePopoutHistogram ? parentHeight : PQSettings.histogramSize.height property int parentWidth: 0 property int parentHeight: 0 // at startup toplevel width/height is zero causing the x/y of the histogram to be set to 0 property bool startupDelay: true onXChanged: saveGeometryTimer.restart() onYChanged: saveGeometryTimer.restart() onWidthChanged: saveGeometryTimer.restart() onHeightChanged: saveGeometryTimer.restart() radius: 5 opacity: PQSettings.interfacePopoutHistogram ? 1 : (PQSettings.histogramVisible ? ((dragArea.containsMouse||switchmouse.containsMouse||closemouse.containsMouse) ? (dragArea.buttonPressed ? 1 : 0.9) : 0.8) : 0) Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } visible: opacity!=0 onVisibleChanged: updateHistogram() color: "#dd000000" Component.onCompleted: if(filefoldermodel.current != -1) updateHistogram() Timer { // at startup toplevel width/height is zero causing the x/y of the histogram to be set to 0 running: true repeat: false interval: 250 onTriggered: startupDelay = false } Timer { id: saveGeometryTimer interval: 500 repeat: false running: false onTriggered: { if(!PQSettings.interfacePopoutHistogram && !startupDelay) { PQSettings.histogramPosition = Qt.point(Math.max(0, Math.min(hist_top.x, toplevel.width-hist_top.width)), Math.max(0, Math.min(hist_top.y, toplevel.height-hist_top.height))) PQSettings.histogramSize = Qt.size(hist_top.width, hist_top.height) } } } // This will hold the histogram image Image { id: imghist anchors.fill: parent anchors.margins: 10 fillMode: Image.Stretch mipmap: true sourceSize.width: 1024 sourceSize.height: 768 source: "" asynchronous: true } Connections { target: filefoldermodel onCurrentFilePathChanged: hist_timer.restart() } Timer { id: hist_timer repeat: false running: false interval: 500 onTriggered: updateHistogram() } Rectangle { opacity: ((imghist.status==Image.Ready || filefoldermodel.current==-1) ? 0 : 1) || filefoldermodel.current==-1 Behavior on opacity { NumberAnimation { duration: 150 } } visible: opacity!=0 width: childrenRect.width+50 height: childrenRect.height+30 x: (parent.width-width)/2 y: (parent.height-height)/2 radius: 5 color: "#88000000" Text { x: 25 y: 15 text: filefoldermodel.current==-1 ? em.pty+qsTranslate("histogram", "Histogram") : //: As in: Loading the histogram for the current image em.pty+qsTranslate("histogram", "Loading...") color: "white" font.pixelSize: 15 font.bold: true } } PinchArea { anchors.fill: parent pinch.target: PQSettings.interfacePopoutHistogram ? undefined : hist_top pinch.minimumRotation: -360 pinch.maximumRotation: 360 pinch.minimumScale: 0.1 pinch.maximumScale: 10 pinch.dragAxis: Pinch.XAndYAxis onPinchStarted: setFrameColor(); onSmartZoom: { hist_top.x = pinch.previousCenter.x - hist_top.width / 2 hist_top.y = pinch.previousCenter.y - hist_top.height / 2 } // This mouse area does the same as the pinch area but for the mouse PQMouseArea { id: dragArea hoverEnabled: true //: Used for the histogram. The version refers to the type of histogram that is available (colored and greyscale) tooltip: (PQSettings.interfacePopoutHistogram ? "" : (em.pty+qsTranslate("histogram", "Click-and-drag to move.")+" ")) + em.pty+qsTranslate("histogram", "Right click to switch version.") acceptedButtons: Qt.LeftButton | Qt.RightButton anchors.fill: parent drag.target: PQSettings.interfacePopoutHistogram ? undefined : hist_top drag.minimumX: 0 drag.minimumY: 0 drag.maximumX: toplevel.width-hist_top.width drag.maximumY: toplevel.height-hist_top.height onPressed: if(mouse.button == Qt.RightButton) PQSettings.histogramVersion = (PQSettings.histogramVersion !== "grey" ? "grey" : "color") } } Image { id: histswitch source: "/other/histogramswitch.png" x: PQSettings.interfacePopoutHistogram ? 5 : -5 y: PQSettings.interfacePopoutHistogram ? 5 : -5 width: 25 height: 25 mipmap: true opacity: switchmouse.containsMouse ? 0.8 : 0.2 Behavior on opacity { NumberAnimation { duration: 150 } } PQMouseArea { id: switchmouse anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true onClicked: PQSettings.histogramVersion = (PQSettings.histogramVersion !== "grey" ? "grey" : "color") } } Image { id: histclose x: parent.width-width+5 y: -5 width: 25 height: 25 visible: !PQSettings.interfacePopoutHistogram source: "/other/histogramclose.png" opacity: closemouse.containsMouse ? 0.8 : 0.2 Behavior on opacity { NumberAnimation { duration: 150 } } PQMouseArea { id: closemouse anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true onClicked: PQSettings.histogramVisible = !PQSettings.histogramVisible } } PQMouseArea { id: resizeBotRight enabled: !PQSettings.interfacePopoutHistogram anchors { right: parent.right bottom: parent.bottom } width: 10 height: 10 cursorShape: Qt.SizeFDiagCursor onPositionChanged: { if(pressed) { hist_top.width += (mouse.x-resizeBotRight.width) hist_top.height += (mouse.y-resizeBotRight.height) if(hist_top.width < 100) hist_top.width = 100 if(hist_top.height < 100) hist_top.height = 100 } } } PQMouseArea { id: resizeBotLeft enabled: !PQSettings.interfacePopoutHistogram anchors { left: parent.left bottom: parent.bottom } width: 10 height: 10 cursorShape: Qt.SizeBDiagCursor onPositionChanged: { if(pressed) { hist_top.width -= mouse.x hist_top.height += (mouse.y-resizeBotRight.height) if(hist_top.width < 100) hist_top.width = 100 else hist_top.x += mouse.x if(hist_top.height < 100) hist_top.height = 100 } } } Image { x: (PQSettings.interfacePopoutHistogram ? 5 : histswitch.width) y: PQSettings.interfacePopoutHistogram ? 5 : -5 width: 15 height: 15 source: "/popin.png" opacity: popinmouse.containsMouse ? 1 : 0.2 Behavior on opacity { NumberAnimation { duration: 200 } } PQMouseArea { id: popinmouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: PQSettings.interfacePopoutHistogram ? //: Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface em.pty+qsTranslate("popinpopout", "Merge into main interface") : //: Tooltip of small button to show an element in its own window (i.e., not merged into main interface) em.pty+qsTranslate("popinpopout", "Move to its own window") onClicked: { if(PQSettings.interfacePopoutHistogram) histogram_window.storeGeometry() PQSettings.interfacePopoutHistogram = !PQSettings.interfacePopoutHistogram HandleShortcuts.executeInternalFunction("__histogram") } } } // this makes sure that a change in the window geometry does not leeds to the element being outside the visible area Connections { target: toplevel onWidthChanged: { if(hist_top.x < 0) hist_top.x = 0 else if(hist_top.x > toplevel.width-hist_top.width) hist_top.x = toplevel.width-hist_top.width } onHeightChanged: { if(hist_top.y < 0) hist_top.y = 0 else if(hist_top.y > toplevel.height-hist_top.height) hist_top.y = toplevel.height-hist_top.height } } function updateHistogram() { // Don't calculate histogram if disabled if(!PQSettings.histogramVisible || filefoldermodel.current == -1) return; // we do not want to bind to the currentFilePath below, as we want to preserve a short timeout when that property changes var fp = filefoldermodel.currentFilePath imghist.source = Qt.binding(function() { return "image://hist/" + (PQSettings.histogramVersion == "color" ? "color" : "grey") + fp; }) } } photoqt-2.5/qml/histogram/PQHistogramPopout.qml000644 001750 001750 00000006714 14164672072 022337 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: histogram_window //: Window title title: em.pty+qsTranslate("histogram", "Histogram") Component.onCompleted: { histogram_window.x = windowgeometry.histogramWindowGeometry.x histogram_window.y = windowgeometry.histogramWindowGeometry.y histogram_window.width = windowgeometry.histogramWindowGeometry.width histogram_window.height = windowgeometry.histogramWindowGeometry.height } minimumWidth: 100 minimumHeight: 100 modality: Qt.NonModal objectName: "histogrampopout" onClosing: { storeGeometry() PQSettings.histogramVisible = 0 } Connections { target: toplevel onClosing: { storeGeometry() } } visible: (PQSettings.interfacePopoutHistogram&&PQSettings.histogramVisible) flags: Qt.WindowStaysOnTopHint color: "#88000000" Loader { source: "PQHistogram.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return histogram_window.width }) item.parentHeight = Qt.binding(function() { return histogram_window.height }) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(histogram_window.objectName) } function storeGeometry() { windowgeometry.histogramWindowGeometry = Qt.rect(histogram_window.x, histogram_window.y, histogram_window.width, histogram_window.height) windowgeometry.histogramWindowMaximized = (histogram_window.visibility==Window.Maximized) } } photoqt-2.5/qml/PQCmdReceived.qml000644 001750 001750 00000013526 14164673372 017353 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 Item { Connections { target: PQPassOn onCmdFilePath: { if(handlingFileDir.doesItExist(path)) { // first we close any element that might be open to show the new image closeAllExcept("") // compare old and new folder to see if that changed var folderOld = (filefoldermodel.countMainView == 0 ? "" : handlingFileDir.getFilePathFromFullPath(filefoldermodel.entriesMainView[0])) var folderNew = handlingFileDir.getFilePathFromFullPath(path) // load new folder and image if(folderNew != folderOld) { filefoldermodel.setFileNameOnceReloaded = path filefoldermodel.fileInFolderMainView = path } else filefoldermodel.setAsCurrent(handlingFileDir.cleanPath(path)) } else console.log("ERROR: File does not exist:", path) toplevel.raise() } onCmdOpen: { closeAllExcept("filedialog") if(variables.visibleItem == "") loader.show("filedialog") toplevel.raise() } onCmdShow: { toplevel.visible = true toplevel.raise() } onCmdHide: { PQSettings.interfaceTrayIcon = 1 toplevel.visible = false } onCmdToggle: { PQSettings.interfaceTrayIcon = 1 toplevel.visible = !toplevel.visible if(toplevel.visible) toplevel.raise() } onCmdThumbs: { PQSettings.thumbnailsDisable = !thb } onCmdShortcutSequence: { PQKeyPressMouseChecker.simulateKeyPress(seq) } onCmdTray: { if(tray) PQSettings.interfaceTrayIcon = 1 else { if(!toplevel.visible) toplevel.visible = true PQSettings.interfaceTrayIcon = 0 } } Component.onCompleted: { // check at startup // --thumbs / --no-thumbs if(PQPassOn.getThumbs() != 2) PQSettings.thumbnailsDisable = !PQPassOn.getThumbs() // --start-in-tray if(PQPassOn.getStartInTray()) { PQSettings.interfaceTrayIcon = 1 toplevel.visible = false } } } function closeAllExcept(exclude) { if(variables.visibleItem == "filedialog" && exclude != "filedialog") loader.passOn("filedialog", "hide", undefined) else if(variables.visibleItem == "slideshowsettings" && exclude != "slideshowsettings") loader.passOn("slideshowsettings", "hide", undefined) else if(variables.visibleItem == "slideshowcontrols" && exclude != "slideshowcontrols") loader.passOn("slideshowcontrols", "quit", undefined) else if(variables.visibleItem == "filedelete" && exclude != "filedelete") loader.passOn("filedelete", "hide", undefined) else if(variables.visibleItem == "filerename" && exclude != "filerename") loader.passOn("filerename", "hide", undefined) else if(variables.visibleItem == "scale" && exclude != "scale") loader.passOn("scale", "hide", undefined) else if(variables.visibleItem == "about" && exclude != "about") loader.passOn("about", "hide", undefined) else if(variables.visibleItem == "imgur" && exclude != "imgur") loader.passOn("imgur", "hide", undefined) else if(variables.visibleItem == "wallpaper" && exclude != "wallpaper") loader.passOn("wallpaper", "hide", undefined) else if(variables.visibleItem == "settingsmanager" && exclude != "settingsmanager") loader.passOn("settingsmanager", "hide", undefined) else if(variables.visibleItem == "filter" && exclude != "filter") loader.passOn("filter", "hide", undefined) else if(variables.visibleItem == "facetagger" && exclude != "facetagger") loader.passOn("facetagger", "stop", undefined) else if(variables.visibleItem == "unavailable" && exclude != "unavailable") loader.passOn("unavailable", "hide", undefined) } } photoqt-2.5/qml/settingsmanager/000755 001750 001750 00000000000 14164673060 017403 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/settingsmanager/tabs/000755 001750 001750 00000000000 14164673075 020342 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/settingsmanager/tabs/PQTabShortcuts.qml000644 001750 001750 00000031365 14164673041 023744 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "./shortcuts" import "../../elements" Item { id: tab_shortcuts Flickable { id: cont contentHeight: col.height onContentHeightChanged: { if(visible) settingsmanager_top.scrollBarVisible = scroll.visible } width: stack.width height: stack.height ScrollBar.vertical: PQScrollBar { id: scroll } PQMouseArea { anchors.fill: parent onWheel: { var newy = cont.contentY - wheel.angleDelta.y // set new contentY, but don't move beyond top/bottom end of view cont.contentY = Math.max(0, Math.min(newy, cont.contentHeight-cont.height)) } } Column { id: col x: 10 spacing: 15 Item { width: 1 height: 1 } Text { id: title width: cont.width-30 horizontalAlignment: Text.AlignHCenter font.pointSize: 25 font.bold: true color: "white" text: em.pty+qsTranslate("settingsmanager", "Shortcuts") } Item { width: 1 height: 1 } Text { id: desc color: "white" font.pointSize: 12 width: cont.width-30 wrapMode: Text.WordWrap text: em.pty+qsTranslate("settingsmanager", "Here the shortcuts can be managed. Below you can add a new shortcut for any one of the available actions, both key combinations and mouse gestures are supported.") + "\n" + em.pty+qsTranslate("settingsmanager", "You can also set the same shortcut for multiple actions or multiple times for the same action. All actions for a shortcut will be executed sequentially, allowing a lot more flexibility in using PhotoQt.") } PQContainer { //: A shortcuts category: navigation category: em.pty+qsTranslate("settingsmanager", "Navigation") available: [ //: Name of shortcut action ["__open", em.pty+qsTranslate("settingsmanager", "Open file (browse images)")], //: Name of shortcut action ["__filterImages", em.pty+qsTranslate("settingsmanager", "Filter images in folder")], //: Name of shortcut action ["__next", em.pty+qsTranslate("settingsmanager", "Next image")], //: Name of shortcut action ["__prev", em.pty+qsTranslate("settingsmanager", "Previous image")], //: Name of shortcut action ["__contextMenu", "Show Context Menu"], //: Name of shortcut action ["__goToFirst", em.pty+qsTranslate("settingsmanager", "Go to first image")], //: Name of shortcut action ["__goToLast", em.pty+qsTranslate("settingsmanager", "Go to last image")], //: Name of shortcut action ["__viewerMode", em.pty+qsTranslate("settingsmanager", "Enter viewer mode")], //: Name of shortcut action ["__quickNavigation", em.pty+qsTranslate("settingsmanager", "Show quick navigation buttons")], //: Name of shortcut action ["__close", em.pty+qsTranslate("settingsmanager", "Close window (hides to system tray if enabled)")], //: Name of shortcut action ["__quit", em.pty+qsTranslate("settingsmanager", "Quit PhotoQt")] ] } PQContainer { //: A shortcuts category: image manipulation category: em.pty+qsTranslate("settingsmanager", "Image") available: [ //: Name of shortcut action ["__zoomIn", em.pty+qsTranslate("settingsmanager", "Zoom In")], //: Name of shortcut action ["__zoomOut", em.pty+qsTranslate("settingsmanager", "Zoom Out")], //: Name of shortcut action ["__zoomActual", em.pty+qsTranslate("settingsmanager", "Zoom to Actual Size")], //: Name of shortcut action ["__zoomReset", em.pty+qsTranslate("settingsmanager", "Reset Zoom")], //: Name of shortcut action ["__rotateR", em.pty+qsTranslate("settingsmanager", "Rotate Right")], //: Name of shortcut action ["__rotateL", em.pty+qsTranslate("settingsmanager", "Rotate Left")], //: Name of shortcut action ["__rotate0", em.pty+qsTranslate("settingsmanager", "Reset Rotation")], //: Name of shortcut action ["__flipH", em.pty+qsTranslate("settingsmanager", "Flip Horizontally")], //: Name of shortcut action ["__flipV", em.pty+qsTranslate("settingsmanager", "Flip Vertically")], //: Name of shortcut action ["__scale", em.pty+qsTranslate("settingsmanager", "Scale Image")], //: Name of shortcut action ["__playPauseAni", em.pty+qsTranslate("settingsmanager", "Play/Pause animation/video")], //: Name of shortcut action ["__showFaceTags", em.pty+qsTranslate("settingsmanager", "Hide/Show face tags (stored in metadata)")], //: Name of shortcut action ["__tagFaces", em.pty+qsTranslate("settingsmanager", "Tag faces (stored in metadata)")] ] } PQContainer { //: A shortcuts category: file management category: em.pty+qsTranslate("settingsmanager", "File") available: [ //: Name of shortcut action ["__rename", em.pty+qsTranslate("settingsmanager", "Rename File")], //: Name of shortcut action ["__delete", em.pty+qsTranslate("settingsmanager", "Delete File")], //: Name of shortcut action ["__deletePermanent", em.pty+qsTranslate("settingsmanager", "Delete File (without confirmation)")], //: Name of shortcut action ["__copy", em.pty+qsTranslate("settingsmanager", "Copy File to a New Location")], //: Name of shortcut action ["__move", em.pty+qsTranslate("settingsmanager", "Move File to a New Location")], //: Name of shortcut action ["__clipboard", em.pty+qsTranslate("settingsmanager", "Copy Image to Clipboard")], //: Name of shortcut action ["__saveAs", em.pty+qsTranslate("settingsmanager", "Save image in another format")] ] } PQContainer { //: A shortcuts category: other functions category: em.pty+qsTranslate("settingsmanager", "Other") available: [ //: Name of shortcut action ["__showMainMenu", em.pty+qsTranslate("settingsmanager", "Hide/Show main menu")], //: Name of shortcut action ["__showMetaData", em.pty+qsTranslate("settingsmanager", "Hide/Show metadata")], //: Name of shortcut action ["__keepMetaData", em.pty+qsTranslate("settingsmanager", "Keep metadata opened")], //: Name of shortcut action ["__showThumbnails", em.pty+qsTranslate("settingsmanager", "Hide/Show thumbnails")], //: Name of shortcut action ["__settings", em.pty+qsTranslate("settingsmanager", "Show Settings")], //: Name of shortcut action ["__slideshow", em.pty+qsTranslate("settingsmanager", "Start Slideshow")], //: Name of shortcut action ["__slideshowQuick", em.pty+qsTranslate("settingsmanager", "Start Slideshow (Quickstart)")], //: Name of shortcut action ["__about", em.pty+qsTranslate("settingsmanager", "About PhotoQt")], //: Name of shortcut action ["__wallpaper", em.pty+qsTranslate("settingsmanager", "Set as Wallpaper")], //: Name of shortcut action ["__histogram", em.pty+qsTranslate("settingsmanager", "Show Histogram")], //: Name of shortcut action ["__imgurAnonym", em.pty+qsTranslate("settingsmanager", "Upload to imgur.com (anonymously)")], //: Name of shortcut action ["__imgur", em.pty+qsTranslate("settingsmanager", "Upload to imgur.com user account")], //: Name of shortcut action ["__chromecast", em.pty+qsTranslate("settingsmanager", "Stream content to Chromecast device")], //: Name of shortcut action ["__logging", em.pty+qsTranslate("settingsmanager", "Show log/debug messages")] ] } PQExternalContainer { id: external //: A shortcuts category: external shortcuts category: em.pty+qsTranslate("settingsmanager", "External") //: Please leave the three placeholders (%f, %u, %d) as is. subtitle: em.pty+qsTranslate("settingsmanager", "%f = filename including path, %u = filename without path, %d = directory containing file") } Item { width: 1 height: 20 } } } } photoqt-2.5/qml/settingsmanager/tabs/PQTabThumbnails.qml000644 001750 001750 00000012133 14164673065 024052 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "./thumbnails" import "../../elements" Item { Flickable { id: cont contentHeight: col.height onContentHeightChanged: { if(visible) settingsmanager_top.scrollBarVisible = scroll.visible } width: stack.width height: stack.height ScrollBar.vertical: PQScrollBar { id: scroll } PQMouseArea { anchors.fill: parent onWheel: { var newy = cont.contentY - wheel.angleDelta.y // set new contentY, but don't move beyond top/bottom end of view cont.contentY = Math.max(0, Math.min(newy, cont.contentHeight-cont.height)) } } Rectangle { x: 278 y: title.height+desc.height+30 width: 2 height: cont.contentHeight-y color: "#88444444" } Column { id: col x: 10 spacing: 15 Item { width: 1 height: 1 } Text { id: title width: cont.width-20 horizontalAlignment: Text.AlignHCenter font.pointSize: 25 font.bold: true color: "white" text: em.pty+qsTranslate("settingsmanager", "Thumbnails settings") } Item { width: 1 height: 1 } Text { id: desc color: "white" font.pointSize: 12 width: cont.width-20 wrapMode: Text.WordWrap text: em.pty+qsTranslate("settingsmanager", "These settings affect the thumbnails shown, by default, along the bottom edge of the screen. This includes their look, behavior, and the user's interaction with them.") + "\n" + em.pty+qsTranslate("settingsmanager", "Some settings are only shown in expert mode.") } PQSize { id: siz } PQHorizontalLine { expertModeOnly: siz.expertmodeonly } PQSpacing { id: spc } PQHorizontalLine { expertModeOnly: spc.expertmodeonly } PQLiftUp { id: lft } PQHorizontalLine { expertModeOnly: lft.expertmodeonly } PQVisible { id: vis } PQHorizontalLine { expertModeOnly: vis.expertmodeonly } PQCenter { id: cent } PQHorizontalLine { expertModeOnly: cent.expertmodeonly } PQPosition { id: pos } PQHorizontalLine { expertModeOnly: pos.expertmodeonly } PQFilenameLabel { id: fnl } PQHorizontalLine { expertModeOnly: fnl.expertmodeonly } PQFilenameOnly { id: fno } PQHorizontalLine { expertModeOnly: fno.expertmodeonly } PQDisable { id: dis } PQHorizontalLine { expertModeOnly: dis.expertmodeonly } PQCache { id: cac } PQHorizontalLine { expertModeOnly: cac.expertmodeonly } PQExcludeFolders { id: exl } PQHorizontalLine { expertModeOnly: exl.expertmodeonly } PQThreads { id: thr } // add some spacing at the bottom Item { width: 1; height: 25 } } Connections { target: settingsmanager_top onIsScrollBarVisible: { if(visible) settingsmanager_top.scrollBarVisible = scroll.visible } } } } photoqt-2.5/qml/settingsmanager/tabs/filetypes/000755 001750 001750 00000000000 14164672467 022352 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/settingsmanager/tabs/filetypes/PQLibArchive.qml000644 001750 001750 00000005436 14164672467 025346 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title title: "LibArchive" helptext: em.pty+qsTranslate("settingsmanager_filetypes", "These are some additional settings for opening archives.") expertmodeonly: true available: handlingGeneral.isLibArchiveSupportEnabled() content: [ Row { spacing: 10 PQCheckbox { id: ext_unrar tooltip: "LibArchive supports RAR archives only partially and might fail to read certain archives. If installed, PhotoQt can use the external tool unrar instead of libarchive for proper support of RAR archives." //: used as label for checkbox text: em.pty+qsTranslate("settingsmanager_filetypes", "use external tool: unrar") } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.filetypesExternalUnrar = ext_unrar.checked } } Component.onCompleted: { load() } function load() { ext_unrar.checked = PQSettings.filetypesExternalUnrar } } photoqt-2.5/qml/settingsmanager/tabs/filetypes/PQPoppler.qml000644 001750 001750 00000006223 14164672430 024740 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title title: "Poppler" helptext: em.pty+qsTranslate("settingsmanager_filetypes", "These are some additional settings for showing PDFs.") expertmodeonly: true available: handlingGeneral.isPopplerSupportEnabled() content: [ Row { spacing: 10 Text { id: docviewer color: "white" text: em.pty+qsTranslate("settingsmanager_filetypes", "Quality:") } PQSlider { id: qual_slider y: (docviewer.height-height)/2 from: 75 to: 350 stepSize: 5 wheelStepSize: 5 toolTipSuffix: " dpi" //: the quality setting to be used when loading PDFs toolTipPrefix: em.pty+qsTranslate("settingsmanager_filetypes", "Quality:") + " " } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.filetypesPDFQuality = qual_slider.value } } Component.onCompleted: { load() } function load() { // We always take the PDF quality in steps of 5! var q = PQSettings.filetypesPDFQuality var qp5 = q%5 if(qp5 != 0) { if(qp5 < 3) q -= qp5 else q += (5-qp5) } qual_slider.value = q } } photoqt-2.5/qml/settingsmanager/tabs/filetypes/PQVideo.qml000644 001750 001750 00000006737 14164672464 024406 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title title: "Video" helptext: em.pty+qsTranslate("settingsmanager_filetypes", "These are some additional settings for playing videos.") expertmodeonly: true available: handlingGeneral.isVideoSupportEnabled() content: [ Row { spacing: 10 PQCheckbox { id: autoplay y: (combo.height-height)/2 //: Used as setting for video files (i.e., autoplay videos) text: em.pty+qsTranslate("settingsmanager_filetypes", "Autoplay") } PQCheckbox { id: loop y: (combo.height-height)/2 //: Used as setting for video files (i.e., loop videos) text: em.pty+qsTranslate("settingsmanager_filetypes", "Loop") } PQComboBox { id: combo //: Tooltip shown for combobox for selectiong video thumbnailer tooltip: em.pty+qsTranslate("settingsmanager_filetypes", "Select tool for creating video thumbnails") model: ["------", "ffmpegthumbnailer"] } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.filetypesVideoAutoplay = autoplay.checked PQSettings.filetypesVideoLoop = loop.checked PQSettings.filetypesVideoThumbnailer = (combo.currentIndex == 0 ? "" : combo.currentText) } } Component.onCompleted: { load() } function load() { autoplay.checked = PQSettings.filetypesVideoAutoplay loop.checked = PQSettings.filetypesVideoLoop combo.currentIndex = (PQSettings.filetypesVideoThumbnailer == "" ? 0 : 1) } } photoqt-2.5/qml/settingsmanager/tabs/filetypes/PQFileTypes.qml000644 001750 001750 00000026262 14164672434 025234 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../../elements" Item { id: filetypes_top x: 10 width: cont.width-20 height: childrenRect.height signal checkAll() signal checkImg(var checked) signal checkPac(var checked) signal checkDoc(var checked) signal checkVid(var checked) Column { width: parent.width-10 spacing: 10 Column { spacing: 10 Row { spacing: 10 PQComboBox { id: catCombo y: (enableBut.height-height)/2 //: This is a category of files PhotoQt can recognize: any image format model: [em.pty+qsTranslate("settingsmanager_filetypes", "images"), //: This is a category of files PhotoQt can recognize: compressed files like zip, tar, cbr, 7z, etc. em.pty+qsTranslate("settingsmanager_filetypes", "compressed files")+" (zip, cbr, ...)", //: This is a category of files PhotoQt can recognize: documents like pdf, txt, etc. em.pty+qsTranslate("settingsmanager_filetypes", "documents")+" (pdf, txt, ...)", //: This is a type of category of files PhotoQt can recognize: videos like mp4, avi, etc. em.pty+qsTranslate("settingsmanager_filetypes", "videos")] } PQButton { id: enableBut //: As in: "Enable all formats in the seleted category of file types" text: em.pty+qsTranslate("settingsmanager_filetypes", "Enable") onClicked: parent.checkUncheck(1) } PQButton { //: As in: "Disable all formats in the seleted category of file types" text: em.pty+qsTranslate("settingsmanager_filetypes", "Disable") onClicked: parent.checkUncheck(0) } function checkUncheck(checked) { if(catCombo.currentIndex == 0) filetypes_top.checkImg(checked) else if(catCombo.currentIndex == 1) filetypes_top.checkPac(checked) else if(catCombo.currentIndex == 2) filetypes_top.checkDoc(checked) else if(catCombo.currentIndex == 3) filetypes_top.checkVid(checked) else console.log("Error: Unknown category selected:", catCombo.currentText) listview.ftChanged() } Item { width: 10 height: 1 } PQButton { //: As in "Enable every single file format PhotoQt can open in any category" text: em.pty+qsTranslate("settingsmanager_filetypes", "Enable everything") onClicked: { filetypes_top.checkAll() listview.ftChanged() } } } Item { width: 1 height: 1 } Text { id: countEnabled property int num: 0 color: "white" font.pointSize: 12 //: The %1 will be replaced with the number of file formats, please don't forget to add it. text: em.pty+qsTranslate("settingsmanager_filetypes", "Currently there are %1 file formats enabled").arg(""+num+"") Connections { target: listview onFtChanged: countEnabled.countFormats() } Component.onCompleted: { countEnabled.countFormats() } function countFormats() { var c = 0 for(var i = 0; i< listview.ft.length; ++i) if(listview.ft[i][1] == 1) c += 1 countEnabled.num = c } } Item { width: 1 height: 1 } } Row { spacing: 10 PQLineEdit { id: filter_desc width: filetypes_top.width/2 placeholderText: em.pty+qsTranslate("settingsmanager_filetypes", "Search by description or file ending") } PQLineEdit { id: filter_lib width: filetypes_top.width/2 -20 placeholderText: em.pty+qsTranslate("settingsmanager_filetypes", "Search by image library or category") } } ListView { id: listview width: parent.width height: childrenRect.height boundsBehavior: Flickable.StopAtBounds property var ft: PQImageFormats.getAllFormats() model: ft.length spacing: 0 delegate: Rectangle { id: entry_rect width: listview.width clip: true height: ((filter_desc.text==""||(entry_desc.text.toLowerCase().indexOf(filter_desc.text.toLowerCase()) != -1 || listview.ft[index][0].toLowerCase().indexOf(filter_desc.text.toLowerCase()) != -1)) && (filter_lib.text==""||(entry_libs.text.toLowerCase().indexOf(filter_lib.text.toLowerCase()) != -1))) ? 50 : 0 Behavior on height { NumberAnimation { duration: 100 } } color: index%2==0 ? "#22ffffff" : "#22cccccc" visible: height > 0 PQCheckbox { id: checkenable anchors { left: parent.left leftMargin: 10 top: parent.top bottom: parent.bottom } checked: listview.ft[index][1] onClicked: { listview.ft[index][1] = !listview.ft[index][1] listview.ftChanged() } } Text { id: entry_desc anchors { left: checkenable.right leftMargin: 10 top: parent.top bottom: parent.bottom } elide: Text.ElideRight width: entry_rect.width/2 - checkenable.width-10 verticalAlignment: Text.AlignVCenter text: "" + listview.ft[index][2] + "    *." + listview.ft[index][0].split(",").join(", *.") color: checkenable.checked ? "#dddddd" : "#aaaaaa" Behavior on color { ColorAnimation { duration: 50 } } textFormat: Text.StyledText } Text { id: entry_libs anchors { left: entry_desc.right leftMargin: 10 top: parent.top bottom: parent.bottom } width: entry_rect.width/2-10 verticalAlignment: Text.AlignVCenter text: listview.ft[index].slice(4).join(", ") color: checkenable.checked ? "#bbbbbb" : "#666666" Behavior on color { ColorAnimation { duration: 50 } } } PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor onClicked: { listview.ft[index][1] = !listview.ft[index][1] listview.ftChanged() } tooltip: "" + em.pty+qsTranslate("settingsmanager_filetypes", "File endings:") + " *." + listview.ft[index][0].split(",").join(", *.") } Connections { target: filetypes_top onCheckAll: { listview.ft[index][1] = 1 } onCheckImg: { if(listview.ft[index][3] === "img") listview.ft[index][1] = checked } onCheckPac: { if(listview.ft[index][3] === "pac") listview.ft[index][1] = checked } onCheckDoc: { if(listview.ft[index][3] === "doc") listview.ft[index][1] = checked } onCheckVid: { if(listview.ft[index][3] === "vid") listview.ft[index][1] = checked } } } } } Connections { target: settingsmanager_top onLoadAllSettings: { listview.ft = PQImageFormats.getAllFormats() } onSaveAllSettings: { PQImageFormats.setAllFormats(listview.ft) } } } photoqt-2.5/qml/settingsmanager/tabs/imageview/000755 001750 001750 00000000000 14164672460 022314 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/settingsmanager/tabs/imageview/PQFitInWindow.qml000644 001750 001750 00000004712 14164672460 025475 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title referring to whether to fit images in window title: em.pty+qsTranslate("settingsmanager_imageview", "fit in window") helptext: em.pty+qsTranslate("settingsmanager_imageview", "Zoom smaller images to fill the full window width and/or height.") content: [ PQCheckbox { id: fitinwin text: em.pty+qsTranslate("settingsmanager_imageview", "fit smaller images in window") } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.imageviewFitInWindow = fitinwin.checked } } Component.onCompleted: { load() } function load() { fitinwin.checked = PQSettings.imageviewFitInWindow } } photoqt-2.5/qml/settingsmanager/tabs/imageview/PQPixmapCache.qml000644 001750 001750 00000005470 14164672445 025463 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title title: em.pty+qsTranslate("settingsmanager_imageview", "pixmap cache") helptext: em.pty+qsTranslate("settingsmanager_imageview", "Size of runtime cache for fully loaded images. This cache is cleared when the application quits.") expertmodeonly: true content: [ Row { spacing: 10 Text { y: (parent.height-height)/2 color: "white" text: "15 MB" } PQSlider { id: pixcache y: (parent.height-height)/2 from: 15 to: 4096 toolTipSuffix: " MB" } Text { y: (parent.height-height)/2 color: "white" text: "4 GB" } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.imageviewCache = pixcache.value } } Component.onCompleted: { load() } function load() { pixcache.value = PQSettings.imageviewCache } } photoqt-2.5/qml/settingsmanager/tabs/imageview/PQAnimation.qml000644 001750 001750 00000011311 14164672425 025205 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title referring to the in/out animation of images title: em.pty+qsTranslate("settingsmanager_imageview", "animation") //: This is referring to the in/out animation of images helptext: em.pty+qsTranslate("settingsmanager_imageview", "What type of animation to show, and how fast.") content: [ Flow { spacing: 5 width: set.contwidth PQComboBox { id: anim_type //: This is referring to the in/out animation of images tooltip: em.pty+qsTranslate("settingsmanager_imageview", "type of animation") y: (parent.height-height)/2 //: This is referring to the in/out animation of images model: [em.pty+qsTranslate("settingsmanager_imageview", "opacity"), //: This is referring to the in/out animation of images em.pty+qsTranslate("settingsmanager_imageview", "along x-axis"), //: This is referring to the in/out animation of images em.pty+qsTranslate("settingsmanager_imageview", "along y-axis")] } Item { width: 10 height: 2 } Row { spacing: 5 Text { height: anim_type.height verticalAlignment: Text.AlignVCenter //: This is referring to the in/out animation of images text: em.pty+qsTranslate("settingsmanager_imageview", "no animation") color: "white" } PQSlider { id: anim_dur height: anim_type.height from: 0 to: 10 } Text { height: anim_type.height verticalAlignment: Text.AlignVCenter //: This is referring to the in/out animation of images text: em.pty+qsTranslate("settingsmanager_imageview", "long animation") color: "white" } } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.imageviewAnimationDuration = anim_dur.value if(anim_type.currentIndex == 1) PQSettings.imageviewAnimationType = "x" else if(anim_type.currentIndex == 2) PQSettings.imageviewAnimationType = "y" else PQSettings.imageviewAnimationType = "opacity" } } Component.onCompleted: { load() } function load() { anim_dur.value = PQSettings.imageviewAnimationDuration if(PQSettings.imageviewAnimationType == "x") anim_type.currentIndex = 1 else if(PQSettings.imageviewAnimationType == "y") anim_type.currentIndex = 2 else anim_type.currentIndex = 0 } } photoqt-2.5/qml/settingsmanager/tabs/imageview/PQZoomSpeed.qml000644 001750 001750 00000006235 14164672363 025205 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title, the zoom here is the zoom of the main image title: em.pty+qsTranslate("settingsmanager_imageview", "zoom speed") helptext: em.pty+qsTranslate("settingsmanager_imageview", "Images are zoomed at a relative speed as specified by this percentage. A higher value means faster zoom.") expertmodeonly: true content: [ Row { spacing: 10 Text { y: (parent.height-height)/2 color: "white" //: This refers to the zoom speed, the zoom here is the zoom of the main image text: em.pty+qsTranslate("settingsmanager_imageview", "super slow") } PQSlider { id: zoomspeed y: (parent.height-height)/2 from: 1 to: 100 toolTipSuffix: " %" } Text { y: (parent.height-height)/2 color: "white" //: This refers to the zoom speed, the zoom here is the zoom of the main image text: em.pty+qsTranslate("settingsmanager_imageview", "very fast") } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.imageviewZoomSpeed = zoomspeed.value } } Component.onCompleted: { load() } function load() { zoomspeed.value = PQSettings.imageviewZoomSpeed } } photoqt-2.5/qml/settingsmanager/tabs/imageview/PQLeftButton.qml000644 001750 001750 00000005046 14164672412 025360 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title title: em.pty+qsTranslate("settingsmanager_imageview", "left mouse button") helptext: em.pty+qsTranslate("settingsmanager_imageview", "The left button of the mouse is by default used to move the image around. However, this prevents the left mouse button from being used for shortcuts.") expertmodeonly: true content: [ PQCheckbox { id: left_check text: em.pty+qsTranslate("settingsmanager_imageview", "use left button to move image") } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.imageviewLeftButtonMoveImage = left_check.checked } } Component.onCompleted: { load() } function load() { left_check.checked = PQSettings.imageviewLeftButtonMoveImage } } photoqt-2.5/qml/settingsmanager/tabs/imageview/PQKeep.qml000644 001750 001750 00000005176 14164672455 024171 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title title: em.pty+qsTranslate("settingsmanager_imageview", "remember per session") helptext: em.pty+qsTranslate("settingsmanager_imageview", "By default, PhotoQt resets the zoom, rotation, flipping/mirroring and position when switching to a different image. For certain tasks, for example for comparing two images, it can be helpful to keep these properties.") expertmodeonly: true content: [ PQCheckbox { id: remember text: em.pty+qsTranslate("settingsmanager_imageview", "remember zoom, rotation, flip, position") } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.imageviewRememberZoomRotationMirror = remember.checked } } Component.onCompleted: { load() } function load() { remember.checked = PQSettings.imageviewRememberZoomRotationMirror } } photoqt-2.5/qml/settingsmanager/tabs/imageview/PQInterpolation.qml000644 001750 001750 00000010424 14164672417 026122 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title referring to the type of interpolation to use for small images title: em.pty+qsTranslate("settingsmanager_imageview", "interpolation") helptext: em.pty+qsTranslate("settingsmanager_imageview", "PhotoQt tries to improve the rendering of images that are shown much larger than they are (i.e., zoomed in a lot). For very tiny images that are zoomed in quite a lot, this can result in the loss of too much information in the image. Thus a threshold can be defined here, images that are smaller than this threshold are shown exactly as they are without any smoothing or other attempts to improve them.") expertmodeonly: true content: [ Column { spacing: 15 PQCheckbox { id: interp_check //: A type of interpolation to use for small images text: em.pty+qsTranslate("settingsmanager_imageview", "Do not use any interpolation algorithm for very small images") } Row { spacing: 5 height: interp_thr.height Text { y: (parent.height-height)/2 //: The threshold (in pixels) at which to switch interpolation algorithm text: em.pty+qsTranslate("settingsmanager_imageview", "threshold:") color: interp_check.checked ? "white" : "#cccccc" } Text { y: (parent.height-height)/2 text: interp_thr.from + " px" color: interp_check.checked ? "white" : "#cccccc" } PQSlider { id: interp_thr toolTipSuffix: " px" from: 0 to: 1000 stepSize: 50 wheelStepSize: 50 } Text { y: (parent.height-height)/2 text: interp_thr.to + " px" color: interp_check.checked ? "white" : "#cccccc" } } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.imageviewInterpolationDisableForSmallImages = interp_check.checked PQSettings.imageviewInterpolationThreshold = interp_thr.value } } Component.onCompleted: { load() } function load() { interp_check.checked = PQSettings.imageviewInterpolationDisableForSmallImages interp_thr.value = PQSettings.imageviewInterpolationThreshold } } photoqt-2.5/qml/settingsmanager/tabs/imageview/PQLoop.qml000644 001750 001750 00000004760 14164672451 024210 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title for looping through images in folder title: em.pty+qsTranslate("settingsmanager_imageview", "looping") helptext: em.pty+qsTranslate("settingsmanager_imageview", "What to do when the end of a folder has been reached: stop or loop back to first image in folder.") content: [ PQCheckbox { id: loop_check text: em.pty+qsTranslate("settingsmanager_imageview", "loop through images in folder") } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.imageviewLoopThroughFolder = loop_check.checked } } Component.onCompleted: { load() } function load() { loop_check.checked = PQSettings.imageviewLoopThroughFolder } } photoqt-2.5/qml/settingsmanager/tabs/imageview/PQTransparencyMarker.qml000644 001750 001750 00000005111 14164672442 027101 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title title: em.pty+qsTranslate("settingsmanager_imageview", "transparency marker") helptext: em.pty+qsTranslate("settingsmanager_imageview", "Show checkerboard pattern behind transparent areas of (half-)transparent images.") content: [ PQCheckbox { id: trans_chk //: Setting for how to display images that have transparent areas, whether to show checkerboard pattern in that area or not text: em.pty+qsTranslate("settingsmanager_imageview", "show checkerboard pattern") } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.imageviewTransparencyMarker = trans_chk.checked } } Component.onCompleted: { load() } function load() { trans_chk.checked = PQSettings.imageviewTransparencyMarker } } photoqt-2.5/qml/settingsmanager/tabs/imageview/PQMargin.qml000644 001750 001750 00000006170 14164672375 024516 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title about the margin around the main image title: em.pty+qsTranslate("settingsmanager_imageview", "margin") helptext: em.pty+qsTranslate("settingsmanager_imageview", "How much space to show between the main image and the application border.") expertmodeonly: true content: [ Row { spacing: 10 Text { y: (parent.height-height)/2 color: "white" // The translation context here needs to be unique otherwise this string will be conflated with a different 'none' in tabs/filetypes/PQAdvancedTuning.qml //: As in: no margin between the main image and the window edges text: em.pty+qsTranslate("settingsmanager_imageview", "none") } PQSlider { id: marginwidth y: (parent.height-height)/2 from: 0 to: 100 toolTipSuffix: " px" } Text { y: (parent.height-height)/2 color: "white" text: "100 px" } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.imageviewMargin = marginwidth.value } } Component.onCompleted: { load() } function load() { marginwidth.value = PQSettings.imageviewMargin } } photoqt-2.5/qml/settingsmanager/tabs/imageview/PQSort.qml000644 001750 001750 00000011132 14164672371 024216 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title title: em.pty+qsTranslate("settingsmanager_imageview", "sort images by") helptext: em.pty+qsTranslate("settingsmanager_imageview", "Sort all images in a folder by the set property.") content: [ Flow { spacing: 10 width: set.contwidth PQComboBox { id: sort_combo //: A criteria for sorting images model: [em.pty+qsTranslate("settingsmanager_imageview", "natural name"), //: A criteria for sorting images em.pty+qsTranslate("settingsmanager_imageview", "name"), //: A criteria for sorting images em.pty+qsTranslate("settingsmanager_imageview", "time"), //: A criteria for sorting images em.pty+qsTranslate("settingsmanager_imageview", "size"), //: A criteria for sorting images em.pty+qsTranslate("settingsmanager_imageview", "type")] } PQRadioButton { id: sort_asc height: sort_combo.height //: Sort images in ascending order text: em.pty+qsTranslate("settingsmanager_imageview", "ascending") } PQRadioButton { id: sort_desc height: sort_combo.height //: Sort images in descending order text: em.pty+qsTranslate("settingsmanager_imageview", "descending") } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { if(sort_combo.currentIndex == 0) PQSettings.imageviewSortImagesBy = "naturalname" else if(sort_combo.currentIndex == 1) PQSettings.imageviewSortImagesBy = "name" else if(sort_combo.currentIndex == 2) PQSettings.imageviewSortImagesBy = "time" else if(sort_combo.currentIndex == 3) PQSettings.imageviewSortImagesBy = "size" else PQSettings.imageviewSortImagesBy = "type" PQSettings.imageviewSortImagesAscending = sort_asc.checked } } Component.onCompleted: { load() } function load() { if(PQSettings.imageviewSortImagesBy == "name") sort_combo.currentIndex = 1 else if(PQSettings.imageviewSortImagesBy == "time") sort_combo.currentIndex = 2 else if(PQSettings.imageviewSortImagesBy == "size") sort_combo.currentIndex = 3 else if(PQSettings.imageviewSortImagesBy == "type") sort_combo.currentIndex = 4 else sort_combo.currentIndex = 0 sort_asc.checked = PQSettings.imageviewSortImagesAscending sort_desc.checked = !PQSettings.imageviewSortImagesAscending } } photoqt-2.5/qml/settingsmanager/tabs/shortcuts/000755 001750 001750 00000000000 14164672721 022375 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/settingsmanager/tabs/shortcuts/PQExternalContainer.qml000644 001750 001750 00000006623 14164672721 027005 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../../elements" Rectangle { id: avail_top width: cont.width-2*col.x-scroll.width height: col.height radius: 10 color: "#333333" property string category: "" property string subtitle: "" property var activeShortcuts: [] signal saveExternalShortcuts() PQButton { x: 10 y: 10 backgroundColor: "#222222" //: Used on button as in 'add new external shortcut'. Please keep short! text: em.pty+qsTranslate("settingsmanager_shortcuts", "Add new") onClicked: { activeShortcuts.push(["", "0", ""]) activeShortcutsChanged() } } Column { id: col x: 5 y: 5 width: avail_top.width-10 spacing: 10 Item { width: 1 height: 1 } Text { width: parent.width color: "white" horizontalAlignment: Text.AlignHCenter font.bold: true text: category } Text { width: parent.width color: "white" horizontalAlignment: Text.AlignHCenter text: subtitle wrapMode: Text.WordWrap } Repeater { model: activeShortcuts.length delegate: PQExternalShortcutTile {} } Item { width: 1 height: activeShortcuts.length==0 ? 50 : 1 } } Component.onCompleted: load() Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQShortcuts.deleteAllExternalShortcuts() avail_top.saveExternalShortcuts() } } function load() { activeShortcuts = PQShortcuts.getAllExternalShortcuts() } } photoqt-2.5/qml/settingsmanager/tabs/shortcuts/PQExternalShortcutTile.qml000644 001750 001750 00000012143 14164672705 027510 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../../elements" Rectangle { id: tile_top width: avail_top.width-10 height: iHaveBeenDeleted ? 0 : dsctxt.height+10 Behavior on height { NumberAnimation { duration: 200 } } radius: 5 clip: true color: hovered ? "#2a2a2a" : "#222222" Behavior on color { ColorAnimation { duration: 200 } } visible: height>0 property bool hovered: false property bool iHaveBeenDeleted: false signal showNewShortcut() Row { spacing: 20 y: 5 Item { width: 1 height: 1 } PQCheckbox { id: close_chk y: (parent.height-height)/2 //: checkbox in shortcuts settings, used as in: quit PhotoQt. Please keep as short as possible! text: em.pty+qsTranslate("settingsmanager_shortcuts", "quit") checked: (avail_top.activeShortcuts[index][1]*1==1) } PQLineEdit { id: dsctxt height: 30 text: avail_top.activeShortcuts[index][0] } Rectangle { id: shtxt height: 30 width: shtxt_text.width+20 color: hovered ? "#444444" : "#2a2a2a" Behavior on color { ColorAnimation { duration: 200 } } radius: 5 property bool hovered: false Text { id: shtxt_text x: 10 height: parent.height verticalAlignment: Text.AlignVCenter color: "#aaaaaa" property string sh: avail_top.activeShortcuts[index][2] text: (sh=="" ? "[" + em.pty+qsTranslate("settingsmanager_shortcuts", "no shortcut set") + "]" : keymousestrings.translateShortcut(sh)) } PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: em.pty+qsTranslate("settingsmanager_shortcuts", "Click to change shortcut") onEntered: parent.hovered = true onExited: parent.hovered = false onClicked: tile_top.showNewShortcut() } } Rectangle { height: 30 width: 30 color: hovered ? "#dd661111" : "#66661111" Behavior on color { ColorAnimation { duration: 200 } } radius: 5 property bool hovered: false Text { anchors.fill: parent verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter text: "x" color: "white" } PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: em.pty+qsTranslate("settingsmanager_shortcuts", "Click to delete shortcut") onEntered: parent.hovered = true onExited: parent.hovered = false onClicked: { iHaveBeenDeleted = true } } } } PQNewShortcut {} Connections { target: avail_top onSaveExternalShortcuts: { if(!iHaveBeenDeleted) PQShortcuts.setShortcut(dsctxt.text, [(close_chk.checked?"1":"0"), shtxt_text.sh]) } } function addNewCombo(combo) { shtxt_text.sh = combo } } photoqt-2.5/qml/settingsmanager/tabs/shortcuts/PQShortcutTile.qml000644 001750 001750 00000016274 14164672701 026012 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../../elements" Rectangle { id: tile_top width: avail_top.width-10 height: editmode ? (dsctxt.height+row.height+10) : dsctxt.height Behavior on height { NumberAnimation { duration: 200 } } radius: 5 clip: true color: hovered ? "#2a2a2a" : "#222222" Behavior on color { ColorAnimation { duration: 200 } } property var activeShortcuts: [] property bool hovered: false property bool editmode: false signal showNewShortcut() Text { id: dsctxt x: 5 height: 30 verticalAlignment: Text.AlignVCenter text: avail_top.available[index][1] color: "white" font.bold: true } Text { id: shtxt x: dsctxt.x+dsctxt.width+20 height: 30 verticalAlignment: Text.AlignVCenter color: "#aaaaaa" text: tile_top.activeShortcuts.length==0 ? "[" + em.pty+qsTranslate("settingsmanager_shortcuts", "no shortcut set") + "]" : keymousestrings.translateShortcutList(tile_top.activeShortcuts).join(" // ") } PQMouseArea { anchors.fill: parent height: 30 cursorShape: Qt.PointingHandCursor hoverEnabled: true tooltip: em.pty+qsTranslate("settingsmanager_shortcuts", "Click to manage shortcut") onEntered: parent.hovered = true onExited: parent.hovered = false onClicked: parent.editmode = !parent.editmode } Row { id: row x: 5 y: dsctxt.height+5 spacing: 5 visible: tile_top.height > dsctxt.height Repeater { model: activeShortcuts.length Rectangle { width: txt.width+20 height: txt.height+20 color: "#333333" radius: 5 clip: true // animates deleting element // once it reaches virtually zero, we delete the item Behavior on width { NumberAnimation { duration: 200 } } onWidthChanged: { if(width < 2) { var tmp = tile_top.activeShortcuts tmp.splice(index, 1) tile_top.activeShortcuts = tmp } } Text { id: txt x: 10 y: 10 color: "white" text: keymousestrings.translateShortcut(tile_top.activeShortcuts[index]) } Rectangle { id: delrect anchors.fill: parent color: "#dd661111" radius: 5 opacity: hovered ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 200 } } visible: opacity>0 property bool hovered: false Text { anchors.fill: parent horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter color: "white" font.bold: true text: "x" } } PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: em.pty+qsTranslate("settingsmanager_shortcuts", "Click to delete shortcut") onEntered: { delrect.hovered = true tile_top.hovered = true } onExited: delrect.hovered = false onClicked: parent.width = 0 // once this reaches 0 the item will be deleted } } } Rectangle { width: newtxt.width+20 height: newtxt.height+20 color: hovered ? "#444477" : "#333366" Behavior on color { ColorAnimation { duration: 200 } } radius: 5 property bool hovered: false Text { id: newtxt x: 10 y: 10 color: "white" //: Used as in 'add new shortcut'. Please keep short! text: "[" + em.pty+qsTranslate("settingsmanager_shortcuts", "add new") + "]" } PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor onEntered: { parent.hovered = true tile_top.hovered = true } onExited: parent.hovered = false onClicked: loadAndShowAddNew() } } } Loader { id: addnewloader } function loadAndShowAddNew() { if(addnewloader.source != "PQNewShortcut.qml") addnewloader.source = "PQNewShortcut.qml" showNewShortcut() } Component.onCompleted: load() Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQShortcuts.setShortcut(avail_top.available[index][0], activeShortcuts) } } function load() { activeShortcuts = PQShortcuts.getShortcutsForCommand(avail_top.available[index][0]).slice(1) } function addNewCombo(combo) { activeShortcuts.push(combo) activeShortcutsChanged() } } photoqt-2.5/qml/settingsmanager/tabs/shortcuts/PQNewShortcut.qml000644 001750 001750 00000025677 14164672716 025663 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../../elements" import "../../../shortcuts/mouseshortcuts.js" as PQAnalyseMouse Rectangle { id: newshortcut_top parent: settingsmanager_top anchors.fill: parent color: "#ee000000" opacity: 0 visible: opacity > 0 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } property bool dontResetKeys: false property var mouseComboMods: [] property string mouseComboButton: "" property var mouseComboDirection: [] property var keyComboMods: [] property string keyComboKey: "" signal newCombo(var combo) function assembleKeyCombo() { var txt = "" if(keyComboMods.length > 0) { txt += "" + keymousestrings.translateShortcut(keyComboMods.join("+")) + "" txt += "
+
" } if(keyComboKey == "::PLUS::") txt += "+" else txt += "" + keymousestrings.translateShortcut(keyComboKey) + "" combo_txt.text = txt if(txt.slice(txt.length-7,txt.length) == "" || txt == "") restartCancelTimer() else restartSaveTimer() } function assembleMouseCombo() { var txt = "" if(mouseComboMods.length > 0) { txt += "" + keymousestrings.translateShortcut(mouseComboMods.join("+")) + "" txt += "
+
" } txt += "" + keymousestrings.translateShortcut(mouseComboButton) + "" if(mouseComboDirection.length > 0) { txt += "
+
" txt += "" + keymousestrings.translateShortcut(mouseComboDirection.join(""), true) + "" } combo_txt.text = txt if(txt.slice(txt.length-7,txt.length) == "" || txt == "") restartCancelTimer() else restartSaveTimer() } MouseArea { anchors.fill: parent hoverEnabled: true } Text { id: titletxt y: 10 width: parent.width font.bold: true font.pointSize: 15 color: "white" horizontalAlignment: Text.AlignHCenter text: em.pty+qsTranslate("settingsmanager_shortcuts", "Add New Shortcut") } Rectangle { x: (parent.width-width)/2 y: (parent.height-height)/2-10 width: Math.min(800, parent.width) height: Math.min(600, parent.height-titletxt.height-butcont.height-40) color: "#220000" border.width: 1 border.color: "#330000" Text { id: instr_txt width: parent.width horizontalAlignment: Text.AlignHCenter wrapMode: Text.WordWrap color: "white" font.bold: true text: em.pty+qsTranslate("settingsmanager_shortcuts", "Perform a mouse gesture here or press any key combo") } Text { id: combo_txt anchors.fill: parent anchors.topMargin: instr_txt.height verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter font.pointSize: 20 wrapMode: Text.WrapAtWordBoundaryOrAnywhere color: "#cccccc" } PQMouseArea { id: mouseShMouse anchors.fill: parent hoverEnabled: true acceptedButtons: Qt.LeftButton|Qt.MiddleButton|Qt.RightButton property point pressedPosLast: Qt.point(-1,-1) property bool pressedEventInProgress: false property int buttonId: 0 onPressed: { pressedEventInProgress = true pressedPosLast = Qt.point(mouse.x, mouse.y) mouseComboMods = PQAnalyseMouse.analyseMouseModifiers(mouse.modifiers) mouseComboButton = (mouse.button == Qt.LeftButton ? "Left Button" : (mouse.button == Qt.MiddleButton ? "Middle Button" : "Right Button")) mouseComboDirection = [] keyComboKey = "" keyComboMods = [] assembleMouseCombo() } onPositionChanged: { if(pressedEventInProgress) { var mov = PQAnalyseMouse.analyseMouseGestureUpdate(mouse, pressedPosLast) if(mov != "") { mouseComboMods = PQAnalyseMouse.analyseMouseModifiers(mouse.modifiers) if(mouseComboDirection[mouseComboDirection.length-1] != mov) { mouseComboDirection.push(mov) } pressedPosLast = Qt.point(mouse.x, mouse.y) } assembleMouseCombo() } } onReleased: { pressedEventInProgress = false } onWheel: { keyComboMods = [] keyComboKey = "" mouseComboMods = PQAnalyseMouse.analyseMouseModifiers(wheel.modifiers) mouseComboButton = PQAnalyseMouse.analyseMouseWheelAction(mouseComboButton, wheel.angleDelta, wheel.modifiers, true) mouseComboDirection = [] assembleMouseCombo() } } } Timer { id: canceltimer repeat: true running: false interval: 1000 property int countdown: 10 onTriggered: { countdown -= 1 if(countdown == 0) { canceltimer.stop() cancelbut.clicked() } } } Timer { id: savetimer repeat: true running: false interval: 1000 property int countdown: 10 onTriggered: { countdown -= 1 if(countdown == 0) { savetimer.stop() savebut.clicked() } } } Item { id: butcont x: (parent.width-width)/2 y: parent.height-height-20 width: row.width height: row.height Row { id: row spacing: 10 PQButton { id: savebut text: (savetimer.running ? (genericStringSave+" (" + savetimer.countdown + ")") : genericStringSave) font.bold: savetimer.running onClicked: { canceltimer.stop() savetimer.stop() newshortcut_top.opacity = 0 settingsmanager_top.modalWindowOpen = false settingsmanager_top.detectingShortcutCombo = false var combo = "" if(keyComboKey != "") { if(keyComboMods.length > 0) { combo += keyComboMods.join("+") combo += "+" } combo += keyComboKey } else { if(mouseComboMods.length > 0) combo += mouseComboMods.join("+")+"+" combo += mouseComboButton if(mouseComboDirection.length > 0) { combo += "+" combo += mouseComboDirection.join("") } } tile_top.addNewCombo(combo) } } PQButton { id: cancelbut text: (canceltimer.running ? genericStringCancel+" (" + canceltimer.countdown + ")" : genericStringCancel) font.bold: canceltimer.running onClicked: { canceltimer.stop() savetimer.stop() newshortcut_top.opacity = 0 settingsmanager_top.modalWindowOpen = false settingsmanager_top.detectingShortcutCombo = false } } } } Connections { target: settingsmanager_top onNewModsKeysCombo: { if(!visible) return var tmp_keyComboMods = [] var tmp_keyComboKey = "" var combo = handlingShortcuts.composeString(mods, keys) combo = combo.replace("++","+::PLUS::") var parts = combo.split("+") for(var iP in parts) { var p = parts[iP] if(p == "Ctrl" || p == "Alt" || p == "Shift" || p == "Meta" || p == "Keypad") tmp_keyComboMods.push(p) else tmp_keyComboKey = p } mouseComboMods = [] mouseComboButton = "" mouseComboDirection = [] keyComboMods = tmp_keyComboMods keyComboKey = tmp_keyComboKey assembleKeyCombo() } } Connections { target: tile_top onShowNewShortcut: { mouseComboMods = [] mouseComboButton = "" mouseComboDirection = [] keyComboKey = "" keyComboMods = [] restartCancelTimer() newshortcut_top.opacity = 1 settingsmanager_top.modalWindowOpen = true settingsmanager_top.detectingShortcutCombo = true } } function restartCancelTimer() { savetimer.stop() canceltimer.countdown = 15 canceltimer.start() } function restartSaveTimer() { canceltimer.stop() savetimer.countdown = 5 savetimer.start() } } photoqt-2.5/qml/settingsmanager/tabs/shortcuts/PQContainer.qml000644 001750 001750 00000004523 14164672710 025275 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../../../elements" Rectangle { id: avail_top width: cont.width-2*col.x-scroll.width height: col.height radius: 10 color: "#333333" property string category: "" property var available: [] Column { id: col x: 5 width: avail_top.width-10 spacing: 10 Item { width: 1 height: 1 } Text { width: parent.width color: "white" horizontalAlignment: Text.AlignHCenter font.bold: true text: category } Repeater { model: available.length delegate: PQShortcutTile {} } Item { width: 1 height: 1 } } } photoqt-2.5/qml/settingsmanager/tabs/thumbnails/000755 001750 001750 00000000000 14164673016 022503 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/settingsmanager/tabs/thumbnails/PQCenter.qml000644 001750 001750 00000004745 14164673016 024711 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title. Used as in: Keep thumbnail for current main image in center. title: em.pty+qsTranslate("settingsmanager_thumbnails", "keep in center") helptext: em.pty+qsTranslate("settingsmanager_thumbnails", "Keep currently active thumbnail in the center of the screen") content: [ PQCheckbox { id: thb_center text: em.pty+qsTranslate("settingsmanager_thumbnails", "center on active thumbnail") } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.thumbnailsCenterOnActive = thb_center.checked } } Component.onCompleted: { load() } function load() { thb_center.checked = PQSettings.thumbnailsCenterOnActive } } photoqt-2.5/qml/settingsmanager/tabs/thumbnails/PQLiftUp.qml000644 001750 001750 00000005502 14164672744 024673 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title. This refers to the lift up of thumbnail images when active/hovered. title: em.pty+qsTranslate("settingsmanager_thumbnails", "lift up") helptext: em.pty+qsTranslate("settingsmanager_thumbnails", "How many pixels to lift up thumbnails when either hovered or active.") content: [ Row { spacing: 10 Text { y: (parent.height-height)/2 color: "white" text: "0 px" } PQSlider { id: liftup y: (parent.height-height)/2 from: 0 to: 100 toolTipSuffix: " px" } Text { y: (parent.height-height)/2 color: "white" text: "100 px" } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.thumbnailsLiftUp = liftup.value } } Component.onCompleted: { load() } function load() { liftup.value = PQSettings.thumbnailsLiftUp } } photoqt-2.5/qml/settingsmanager/tabs/thumbnails/PQFilenameLabel.qml000644 001750 001750 00000007320 14164672750 026145 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title. The filename label here is the one that is written on thumbnails. title: em.pty+qsTranslate("settingsmanager_thumbnails", "filename label") helptext: em.pty+qsTranslate("settingsmanager_thumbnails", "Show the filename on a small label on the thumbnail image.") content: [ Column { spacing: 15 Row { spacing: 10 PQCheckbox { id: fnamelabel_chk y: (parent.height-height)/2 text: em.pty+qsTranslate("settingsmanager_thumbnails", "enable") } } Row { spacing: 10 Text { y: (parent.height-height)/2 color: fnamelabel_chk.checked ? "white" : "#cccccc" text: em.pty+qsTranslate("settingsmanager_thumbnails", "font size:") } Text { y: (parent.height-height)/2 color: fnamelabel_chk.checked ? "white" : "#cccccc" text: "5 pt" } PQSlider { id: fnamelabel_fsize y: (parent.height-height)/2 enabled: fnamelabel_chk.checked from: 5 to: 20 } Text { y: (parent.height-height)/2 color: fnamelabel_chk.checked ? "white" : "#cccccc" text: "20 pt" } } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.thumbnailsFilename = fnamelabel_chk.checked PQSettings.thumbnailsFontSize = fnamelabel_fsize.value } } Component.onCompleted: { load() } function load() { fnamelabel_chk.checked = PQSettings.thumbnailsFilename fnamelabel_fsize.value = PQSettings.thumbnailsFontSize } } photoqt-2.5/qml/settingsmanager/tabs/thumbnails/PQDisable.qml000644 001750 001750 00000004611 14164672754 025034 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { title: em.pty+qsTranslate("settingsmanager_thumbnails", "disable thumbnails") helptext: em.pty+qsTranslate("settingsmanager_thumbnails", "Disable thumbnails in case no thumbnails are desired whatsoever.") content: [ PQCheckbox { id: thb_disable text: em.pty+qsTranslate("settingsmanager_thumbnails", "disable all thumbnails") } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.thumbnailsDisable = thb_disable.checked } } Component.onCompleted: { load() } function load() { thb_disable.checked = PQSettings.thumbnailsDisable } } photoqt-2.5/qml/settingsmanager/tabs/thumbnails/PQSpacing.qml000644 001750 001750 00000005530 14164672771 025055 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title referring to the spacing of thumbnails, i.e., how much empty space to have between each. title: em.pty+qsTranslate("settingsmanager_thumbnails", "spacing") helptext: em.pty+qsTranslate("settingsmanager_thumbnails", "How much space to show between the thumbnails.") content: [ Row { spacing: 10 Text { y: (parent.height-height)/2 color: "white" text: "0 px" } PQSlider { id: spacing_slider y: (parent.height-height)/2 from: 0 to: 50 toolTipSuffix: " px" } Text { y: (parent.height-height)/2 color: "white" text: "50 px" } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.thumbnailsSpacing = spacing_slider.value } } Component.onCompleted: { load() } function load() { spacing_slider.value = PQSettings.thumbnailsSpacing } } photoqt-2.5/qml/settingsmanager/tabs/thumbnails/PQSize.qml000644 001750 001750 00000005432 14164672740 024400 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title referring to the size of the thumbnails. title: em.pty+qsTranslate("settingsmanager_thumbnails", "size") helptext: em.pty+qsTranslate("settingsmanager_thumbnails", "How large (or small) the thumbnails should be.") content: [ Row { spacing: 10 Text { y: (parent.height-height)/2 color: "white" text: "20 px" } PQSlider { id: size_slider y: (parent.height-height)/2 from: 20 to: 256 toolTipSuffix: " px" } Text { y: (parent.height-height)/2 color: "white" text: "256 px" } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.thumbnailsSize = size_slider.value } } Component.onCompleted: { load() } function load() { size_slider.value = PQSettings.thumbnailsSize } } photoqt-2.5/qml/settingsmanager/tabs/thumbnails/PQCache.qml000644 001750 001750 00000004655 14164672760 024501 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title. title: em.pty+qsTranslate("settingsmanager_thumbnails", "thumbnail cache") helptext: em.pty+qsTranslate("settingsmanager_thumbnails", "Thumbnails can be cached (permanently), following the freedesktop.org standard.") expertmodeonly: true content: [ PQCheckbox { id: thb_cache text: em.pty+qsTranslate("settingsmanager_thumbnails", "enable") } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.thumbnailsCache = thb_cache.checked } } Component.onCompleted: { load() } function load() { thb_cache.checked = PQSettings.thumbnailsCache } } photoqt-2.5/qml/settingsmanager/tabs/thumbnails/PQFilenameOnly.qml000644 001750 001750 00000007371 14164673005 026047 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title. This refers to using only the filename as thumbnail and no actual image. title: em.pty+qsTranslate("settingsmanager_thumbnails", "filename-only") helptext: em.pty+qsTranslate("settingsmanager_thumbnails", "Show only the filename as thumbnail, no actual image.") expertmodeonly: true content: [ Column { spacing: 10 Row { spacing: 10 PQCheckbox { id: fname_chk y: (parent.height-height)/2 text: em.pty+qsTranslate("settingsmanager_thumbnails", "enable") } } Row { spacing: 10 Text { y: (parent.height-height)/2 color: fname_chk.checked ? "white" : "#cccccc" text: em.pty+qsTranslate("settingsmanager_thumbnails", "font size:") } Text { y: (parent.height-height)/2 color: fname_chk.checked ? "white" : "#cccccc" text: fname_fsize.from + " pt" } PQSlider { id: fname_fsize y: (parent.height-height)/2 enabled: fname_chk.checked from: 5 to: 40 } Text { y: (parent.height-height)/2 color: fname_chk.checked ? "white" : "#cccccc" text: fname_fsize.to + " pt" } } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.thumbnailsFilenameOnly = fname_chk.checked PQSettings.thumbnailsFilenameOnlyFontSize = fname_fsize.value } } Component.onCompleted: { load() } function load() { fname_chk.checked = PQSettings.thumbnailsFilenameOnly fname_fsize.value = PQSettings.thumbnailsFilenameOnlyFontSize } } photoqt-2.5/qml/settingsmanager/tabs/thumbnails/PQPosition.qml000644 001750 001750 00000005515 14164673001 025263 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title referring to the position of the thumbnails (upper or lower edge of PhotoQt). title: em.pty+qsTranslate("settingsmanager_thumbnails", "position") helptext: em.pty+qsTranslate("settingsmanager_thumbnails", "Which edge to show the thumbnails on, upper or lower edge.") content: [ PQComboBox { id: edge y: (parent.height-height)/2 //: The upper edge of PhotoQt model: [em.pty+qsTranslate("settingsmanager_thumbnails", "upper edge"), //: The lower edge of PhotoQt em.pty+qsTranslate("settingsmanager_thumbnails", "lower edge")] } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { if(edge.currentIndex == 0) PQSettings.thumbnailsEdge = "Top" else PQSettings.thumbnailsEdge = "Bottom" } } Component.onCompleted: { load() } function load() { if(PQSettings.thumbnailsEdge == "Top") edge.currentIndex = 0 else edge.currentIndex = 1 } } photoqt-2.5/qml/settingsmanager/tabs/thumbnails/PQVisible.qml000644 001750 001750 00000005644 14164672764 025076 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title referring to the visibility of the thumbnails, i.e., if and when to hide them. title: em.pty+qsTranslate("settingsmanager_thumbnails", "visibility") helptext: em.pty+qsTranslate("settingsmanager_thumbnails", "If and how to keep thumbnails visible") content: [ PQComboBox { id: thb_vis //: This is talking about the thumbnails. model: [em.pty+qsTranslate("settingsmanager_thumbnails", "hide when not needed"), //: This is talking about the thumbnails. em.pty+qsTranslate("settingsmanager_thumbnails", "never hide"), //: This is talking about the thumbnails. em.pty+qsTranslate("settingsmanager_thumbnails", "hide when zoomed in")] } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } // ThumbnailsVisibility // 0 = on demand // 1 = always // 2 = except when zoomed onSaveAllSettings: PQSettings.thumbnailsVisibility = thb_vis.currentIndex } Component.onCompleted: { load() } function load() { thb_vis.currentIndex = PQSettings.thumbnailsVisibility } } photoqt-2.5/qml/settingsmanager/tabs/thumbnails/PQExcludeFolders.qml000644 001750 001750 00000015763 14164673010 026375 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { title: em.pty+qsTranslate("settingsmanager_thumbnails", "exclude folders") helptext: em.pty+qsTranslate("settingsmanager_thumbnails", "Exclude the specified folders and all of its subfolders from any sort of caching and preloading.") content: [ Column { spacing: 5 Text { id: cloudheader color: "white" text: "Cloud providers to exclude from caching:" visible: nxtcld.visible||owncld.visible||drpbx.visible } Item { visible: cloudheader.visible width: 1 height: 1 } PQCheckbox { id: nxtcld x: 20 property string folder: "" visible: folder!="" //: The placeholder %1 will be replaced by name of cloud providers (DropBox, Nextcloud, etc.) text: "Nextcloud: " + folder } Item { visible: nxtcld.visible width: 1 height: 1 } PQCheckbox { id: owncld x: 20 property string folder: "" visible: folder!="" //: The placeholder %1 will be replaced by name of cloud providers (DropBox, Nextcloud, etc.) text: "ownCloud: " + folder } Item { visible: owncld.visible width: 1 height: 1 } PQCheckbox { id: drpbx x: 20 property string folder: "" visible: folder!="" //: The placeholder %1 will be replaced by name of cloud providers (DropBox, Nextcloud, etc.) text: "DropBox: " + folder } Item { visible: drpbx.visible width: 1 height: 1 } Item { visible: cloudheader.visible width: 1 height: 5 } Text { color: "white" text: em.pty+qsTranslate("settingsmanager_thumbnails", "Do not cache these folders:") } PQTextArea { id: curexl width: 400 text: "" placeholderText: em.pty+qsTranslate("settingsmanager_thumbnails", "One folder per line") } PQButton { //: Written on a button text: em.pty+qsTranslate("settingsmanager_thumbnails", "Add folder") leftRightTextSpacing: 5 height: 30 onClicked: { var newdir = handlingFileDir.getExistingDirectory() if(newdir != "") { if(curexl.text == "") curexl.text = newdir+"\n" else { if(curexl.text.endsWith("\n")) curexl.text += newdir+"\n" else curexl.text += "\n"+newdir+"\n" } curexl.cursorPosition = curexl.text.length } } } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.thumbnailsExcludeNextcloud = (nxtcld.checked ? nxtcld.folder : "") PQSettings.thumbnailsExcludeOwnCloud = (owncld.checked ? owncld.folder : "") PQSettings.thumbnailsExcludeDropBox = (drpbx.checked ? drpbx.folder : "") // split by linebreak and remove empty entries var parts = curexl.text.split("\n").filter(function(el) { return el.length != 0}); // trim each entry for(var p = 0; p < parts.length; ++p) { parts[p] = parts[p].trim() if(parts[p].endsWith("/")) parts[p] = parts[p].slice(0,parts[p].length-1) } PQSettings.thumbnailsExcludeFolders = parts } } function addDirectory() { } Component.onCompleted: { load() } function load() { if(PQSettings.thumbnailsExcludeNextcloud != "") { nxtcld.folder = PQSettings.thumbnailsExcludeNextcloud nxtcld.checked = true } else { nxtcld.folder = handlingExternal.findNextcloudFolder() nxtcld.checked = false } if(PQSettings.thumbnailsExcludeOwnCloud != "") { owncld.folder = PQSettings.thumbnailsExcludeOwnCloud owncld.checked = true } else { owncld.folder = handlingExternal.findOwnCloudFolder() owncld.checked = false } if(PQSettings.thumbnailsExcludeDropBox != "") { drpbx.folder = PQSettings.thumbnailsExcludeDropBox drpbx.checked = true } else { drpbx.folder = handlingExternal.findDropBoxFolder() drpbx.checked = false } curexl.text = PQSettings.thumbnailsExcludeFolders.join("\n") if(!curexl.text.endsWith("\n") && curexl.text.length > 0) curexl.text += "\n" curexl.cursorPosition = curexl.text.length } } photoqt-2.5/qml/settingsmanager/tabs/thumbnails/PQThreads.qml000644 001750 001750 00000005651 14164672735 025067 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title, as in: How many threads to use to generate thumbnails. title: em.pty+qsTranslate("settingsmanager_thumbnails", "threads") helptext: em.pty+qsTranslate("settingsmanager_thumbnails", "How many threads to use to create thumbnails. Too many threads can slow down your computer!") expertmodeonly: true content: [ Row { spacing: 10 Text { y: (parent.height-height)/2 color: "white" text: "1" } PQSlider { id: thrds y: (parent.height-height)/2 from: 1 to: 8 toolTipPrefix: em.pty+qsTranslate("settingsmanager_thumbnails", "Threads:") + " " } Text { y: (parent.height-height)/2 color: "white" text: "8" } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.thumbnailsMaxNumberThreads = thrds.value } } Component.onCompleted: { load() } function load() { thrds.value = PQSettings.thumbnailsMaxNumberThreads } } photoqt-2.5/qml/settingsmanager/tabs/metadata/000755 001750 001750 00000000000 14164672667 022130 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/settingsmanager/tabs/metadata/PQRotation.qml000644 001750 001750 00000004630 14164672647 024704 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title. title: em.pty+qsTranslate("settingsmanager_metadata", "auto-rotation") helptext: em.pty+qsTranslate("settingsmanager_metadata", "Automatically rotate images based on metadata information.") expertmodeonly: true content: [ PQCheckbox { id: meta_rot text: em.pty+qsTranslate("settingsmanager_metadata", "enable") } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.metadataAutoRotation = meta_rot.checked } } Component.onCompleted: { load() } function load() { meta_rot.checked = PQSettings.metadataAutoRotation } } photoqt-2.5/qml/settingsmanager/tabs/metadata/PQMetaData.qml000644 001750 001750 00000014002 14164672653 024554 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title. title: em.pty+qsTranslate("settingsmanager_metadata", "meta information") helptext: em.pty+qsTranslate("settingsmanager_metadata", "Which meta information to extract and display.") //: Part of the meta information about the current image. property var meta: [["Filename", em.pty+qsTranslate("settingsmanager_metadata", "file name")], //: Part of the meta information about the current image. ["FileType", em.pty+qsTranslate("settingsmanager_metadata", "file type")], //: Part of the meta information about the current image. ["FileSize", em.pty+qsTranslate("settingsmanager_metadata", "file size")], //: Part of the meta information about the current image. ["ImageNumber", em.pty+qsTranslate("settingsmanager_metadata", "image #/#")], //: Part of the meta information about the current image. ["Dimensions", em.pty+qsTranslate("settingsmanager_metadata", "dimensions")], //: Part of the meta information about the current image. ["Copyright", em.pty+qsTranslate("settingsmanager_metadata", "copyright")], //: Part of the meta information about the current image. ["ExposureTime", em.pty+qsTranslate("settingsmanager_metadata", "exposure time")], //: Part of the meta information about the current image. ["Flash", em.pty+qsTranslate("settingsmanager_metadata", "flash")], //: Part of the meta information about the current image. ["FLength", em.pty+qsTranslate("settingsmanager_metadata", "focal length")], //: Part of the meta information about the current image. ["FNumber", em.pty+qsTranslate("settingsmanager_metadata", "f-number")], //: Part of the meta information about the current image. ["Gps", em.pty+qsTranslate("settingsmanager_metadata", "GPS position")], ["Iso", "ISO"], //: Part of the meta information about the current image. ["Keywords", em.pty+qsTranslate("settingsmanager_metadata", "keywords")], //: Part of the meta information about the current image. ["LightSource", em.pty+qsTranslate("settingsmanager_metadata", "light source")], //: Part of the meta information about the current image. ["Location", em.pty+qsTranslate("settingsmanager_metadata", "location")], //: Part of the meta information about the current image. ["Make", em.pty+qsTranslate("settingsmanager_metadata", "make")], //: Part of the meta information about the current image. ["Model", em.pty+qsTranslate("settingsmanager_metadata", "model")], //: Part of the meta information about the current image. ["SceneType", em.pty+qsTranslate("settingsmanager_metadata", "scene type")], //: Part of the meta information about the current image. ["Software", em.pty+qsTranslate("settingsmanager_metadata", "software")], //: Part of the meta information about the current image. ["Time", em.pty+qsTranslate("settingsmanager_metadata", "time photo was taken")]] content: [ Flow { spacing: 5 width: set.contwidth Repeater { id: rpt model: meta.length PQTile { text: meta[index][1] } } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { for(var i = 0; i < meta.length; ++i) PQSettings["metadata"+meta[i][0]] = rpt.itemAt(i).checked } } Component.onCompleted: { load() } function load() { for(var i = 0; i < meta.length; ++i) rpt.itemAt(i).checked = PQSettings["metadata"+meta[i][0]] } } photoqt-2.5/qml/settingsmanager/tabs/metadata/PQFaceTagsFontSize.qml000644 001750 001750 00000005700 14164672664 026242 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title. The face tags are labels that can be shown (if available) on faces including their name. title: em.pty+qsTranslate("settingsmanager_metadata", "face tags - font size") //: The name labels here are the labels with the name used for the face tags. helptext: em.pty+qsTranslate("settingsmanager_metadata", "The font size of the name labels.") expertmodeonly: true content: [ Row { spacing: 10 Text { y: (parent.height-height)/2 color: "white" text: "5 pt" } PQSlider { id: ft_fs y: (parent.height-height)/2 from: 5 to: 50 toolTipSuffix: " pt" } Text { y: (parent.height-height)/2 color: "white" text: "50 pt" } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.metadataFaceTagsFontSize = ft_fs.value } } Component.onCompleted: { load() } function load() { ft_fs.value = PQSettings.metadataFaceTagsFontSize } } photoqt-2.5/qml/settingsmanager/tabs/metadata/PQGPSMap.qml000644 001750 001750 00000004755 14164672656 024204 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title. title: em.pty+qsTranslate("settingsmanager_metadata", "GPS online map") helptext: em.pty+qsTranslate("settingsmanager_metadata", "Which map service to use when a GPS position is clicked.") content: [ PQComboBox { id: gps_combo model: ["openstreetmap.org", "maps.google.com", "bing.com/maps"] } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.metadataGpsMap = gps_combo.currentText } } Component.onCompleted: { load() } function load() { for(var i = 0; i < gps_combo.count; ++i) if(gps_combo.model[i] == PQSettings.metadataGpsMap) gps_combo.currentIndex = i } } photoqt-2.5/qml/settingsmanager/tabs/metadata/PQFaceTagsVisibility.qml000644 001750 001750 00000006164 14164672631 026627 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title. The face tags are labels that can be shown (if available) on faces including their name. title: em.pty+qsTranslate("settingsmanager_metadata", "face tags - visibility") helptext: em.pty+qsTranslate("settingsmanager_metadata", "When to show the face tags and for how long.") content: [ PQComboBox { id: ft_combo //: A mode for showing face tags. model: [em.pty+qsTranslate("settingsmanager_metadata", "hybrid mode"), //: A mode for showing face tags. em.pty+qsTranslate("settingsmanager_metadata", "always show all"), //: A mode for showing face tags. em.pty+qsTranslate("settingsmanager_metadata", "show one on hover"), //: A mode for showing face tags. em.pty+qsTranslate("settingsmanager_metadata", "show all on hover")] } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } // PQSettings.metadataFaceTagsVisibility: // 0 = Hybrid // 1 = show all always // 2 = show one on hover // 3 = show all on hover onSaveAllSettings: PQSettings.metadataFaceTagsVisibility = ft_combo.currentIndex } Component.onCompleted: { load() } function load() { ft_combo.currentIndex = PQSettings.metadataFaceTagsVisibility } } photoqt-2.5/qml/settingsmanager/tabs/metadata/PQOpacity.qml000644 001750 001750 00000005447 14164672622 024515 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title. title: em.pty+qsTranslate("settingsmanager_metadata", "opacity") helptext: em.pty+qsTranslate("settingsmanager_metadata", "The opacity of the metadata element.") expertmodeonly: true content: [ Row { spacing: 10 Text { y: (parent.height-height)/2 color: "white" text: "0%" } PQSlider { id: meta_opacity y: (parent.height-height)/2 from: 0 to: 100 toolTipSuffix: "%" } Text { y: (parent.height-height)/2 color: "white" text: "100%" } } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.metadataElementOpacity = 255*meta_opacity.value/100 } } Component.onCompleted: { load() } function load() { meta_opacity.value = Math.round(100*PQSettings.metadataElementOpacity/255) } } photoqt-2.5/qml/settingsmanager/tabs/metadata/PQHotEdge.qml000644 001750 001750 00000005053 14164672625 024420 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title. The hot edge refers to the area along the left edge of PhotoQt where the mouse cursor triggers the visibility of the metadata element. title: em.pty+qsTranslate("settingsmanager_metadata", "hot edge") helptext: em.pty+qsTranslate("settingsmanager_metadata", "Show metadata element when the mouse cursor is close to the window edge") expertmodeonly: true content: [ PQCheckbox { id: meta_hot text: em.pty+qsTranslate("settingsmanager_metadata", "enable") } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.metadataElementHotEdge = meta_hot.checked } } Component.onCompleted: { load() } function load() { meta_hot.checked = PQSettings.metadataElementHotEdge } } photoqt-2.5/qml/settingsmanager/tabs/metadata/PQFaceTagsBorder.qml000644 001750 001750 00000012503 14164672636 025714 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Dialogs 1.2 import "../../../elements" PQSetting { id: set //: A settings title. The face tags are labels that can be shown (if available) on faces including their name. title: em.pty+qsTranslate("settingsmanager_metadata", "face tags - border") helptext: em.pty+qsTranslate("settingsmanager_metadata", "If and what style of border to show around tagged faces.") expertmodeonly: true property var rgba: handlingGeneral.convertHexToRgba(PQSettings.metadataFaceTagsBorderColor) content: [ Column { spacing: 20 PQCheckbox { id: ft_border //: The border here is the border around face tags. text: em.pty+qsTranslate("settingsmanager_metadata", "show border") } Row { spacing: 10 height: ft_border_w.height Text { y: (parent.height-height)/2 color: ft_border.checked ? "white" : "#888888" text: "1 px" } PQSlider { id: ft_border_w enabled: ft_border.checked from: 1 to: 20 } Text { y: (parent.height-height)/2 color: ft_border.checked ? "white" : "#888888" text: "20 px" } } Rectangle { enabled: ft_border.checked id: rgba_rect width: rgba_txt.width+20 height: rgba_txt.height+20 border.width: 1 border.color: "#333333" opacity: ft_border.checked ? 1 : 0.5 color: Qt.rgba(rgba[0]/255, rgba[1]/255, rgba[2]/255, rgba[3]/255) Text { id: rgba_txt x: 10 y: 10 color: "white" style: Text.Outline styleColor: "black" text: "rgba = %1, %2, %3, %4".arg(rgba[0]).arg(rgba[1]).arg(rgba[2]).arg(rgba[3]) } PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: em.pty+qsTranslate("settingsmanager_metadata", "click to change color") onClicked: { colorDialog.color = Qt.rgba(rgba[0]/255, rgba[1]/255, rgba[2]/255, rgba[3]/255) colorDialog.visible = true } } } } ] ColorDialog { id: colorDialog title: em.pty+qsTranslate("settingsmanager_metadata", "please choose a color") showAlphaChannel: true modality: Qt.ApplicationModal onAccepted: rgba = handlingGeneral.convertHexToRgba(colorDialog.color) onVisibleChanged: settingsmanager_top.modalWindowOpen = visible } Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.metadataFaceTagsBorder = ft_border.checked PQSettings.metadataFaceTagsBorderWidth = ft_border_w.value PQSettings.metadataFaceTagsBorderColor = handlingGeneral.convertRgbaToHex(rgba) } } Component.onCompleted: { load() } function load() { ft_border.checked = PQSettings.metadataFaceTagsBorder ft_border_w.value = PQSettings.metadataFaceTagsBorderWidth rgba = handlingGeneral.convertHexToRgba(PQSettings.metadataFaceTagsBorderColor) } } photoqt-2.5/qml/settingsmanager/tabs/metadata/PQFaceTags.qml000644 001750 001750 00000005057 14164672667 024570 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title. The face tags are labels that can be shown (if available) on faces including their name. title: em.pty+qsTranslate("settingsmanager_metadata", "face tags") //: The face tags are labels that can be shown (if available) on faces including their name. helptext: em.pty+qsTranslate("settingsmanager_metadata", "Whether to show face tags (stored in metadata info).") content: [ PQCheckbox { id: ft text: em.pty+qsTranslate("settingsmanager_metadata", "enable") } ] Connections { target: settingsmanager_top onLoadAllSettings: { load() } onSaveAllSettings: { PQSettings.metadataFaceTagsEnabled = ft.checked } } Component.onCompleted: { load() } function load() { ft.checked = PQSettings.metadataFaceTagsEnabled } } photoqt-2.5/qml/settingsmanager/tabs/interface/000755 001750 001750 00000000000 14164672607 022302 5ustar00luspiluspi000000 000000 photoqt-2.5/qml/settingsmanager/tabs/interface/PQTrayIcon.qml000644 001750 001750 00000005032 14164672561 025005 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title. title: em.pty+qsTranslate("settingsmanager_interface", "tray icon") helptext: em.pty+qsTranslate("settingsmanager_interface", "If a tray icon is to be shown and, if shown, whether to hide it or not.") content: [ PQComboBox { id: tray_combo model: [ em.pty+qsTranslate("settingsmanager_interface", "no tray icon"), em.pty+qsTranslate("settingsmanager_interface", "hide to tray icon"), em.pty+qsTranslate("settingsmanager_interface", "show tray icon but don't hide to it") ] } ] Connections { target: settingsmanager_top onLoadAllSettings: { tray_combo.currentIndex = PQSettings.interfaceTrayIcon } onSaveAllSettings: { PQSettings.interfaceTrayIcon = tray_combo.currentIndex } } } photoqt-2.5/qml/settingsmanager/tabs/interface/PQWindowManagement.qml000644 001750 001750 00000006206 14164672515 026524 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title. title: em.pty+qsTranslate("settingsmanager_interface", "window management") helptext: em.pty+qsTranslate("settingsmanager_interface", "Some basic window management properties.") expertmodeonly: true content: [ Flow { spacing: 10 width: set.contwidth PQCheckbox { id: wm_manage text: em.pty+qsTranslate("settingsmanager_interface", "manage window through quick info labels") } PQCheckbox { id: wm_save y: (parent.height-height)/2 text: em.pty+qsTranslate("settingsmanager_interface", "save and restore window geometry") } PQCheckbox { id: wm_keep y: (parent.height-height)/2 text: em.pty+qsTranslate("settingsmanager_interface", "keep above other windows") } } ] Connections { target: settingsmanager_top onLoadAllSettings: { wm_manage.checked = PQSettings.interfaceLabelsManageWindow wm_save.checked = PQSettings.interfaceSaveWindowGeometry wm_keep.checked = PQSettings.interfaceKeepWindowOnTop } onSaveAllSettings: { PQSettings.interfaceLabelsManageWindow = wm_manage.checked PQSettings.interfaceSaveWindowGeometry = wm_save.checked PQSettings.interfaceKeepWindowOnTop = wm_keep.checked } } } photoqt-2.5/qml/settingsmanager/tabs/interface/PQNavigation.qml000644 001750 001750 00000005202 14164672575 025360 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) title: em.pty+qsTranslate("settingsmanager_interface", "quick navigation") helptext: em.pty+qsTranslate("settingsmanager_interface", "Some buttons to help with quick navigation. These can come in handy when, e.g., operating with a touch screen.") expertmodeonly: false content: [ PQCheckbox { id: navcheck text: em.pty+qsTranslate("settingsmanager_interface", "Show quick navigation buttons") } ] Connections { target: settingsmanager_top onLoadAllSettings: { navcheck.checked = PQSettings.interfaceQuickNavigation } onSaveAllSettings: { PQSettings.interfaceQuickNavigation = navcheck.checked if(navcheck.checked) loader.ensureItIsReady("quicknavigation") } } } photoqt-2.5/qml/settingsmanager/tabs/interface/PQContextMenu.qml000644 001750 001750 00000025444 14164672545 025541 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title. title: em.pty+qsTranslate("settingsmanager_interface", "custom main menu entries") helptext: em.pty+qsTranslate("settingsmanager_interface", "Add some custom entries in the main menu on the right.") expertmodeonly: false property var entries: [["","",false], ["","",false], ["","",false], ["","",false], ["","",false]] property int focusIndex: -1 property int focusField: 0 signal focusOnIndex(var newindex) content: [ Rectangle { width: contwidth-20 height: childrenRect.height+20 color: "#111111" radius: 5 Column { id: entrycol y: 10 width: parent.width spacing: 10 Repeater { model: entries.length delegate: Rectangle { x: 10 width: parent.width-20 height: 40 color: "#222222" radius: 5 PQLineEdit { id: entrytext x: 10 y: (parent.height-height)/2 width: (parent.width-quit.width-up.width-down.width-del.width-10)*0.5-20 borderColor: "#666666" //: this is the placeholder text inside of a text box telling the user what text they can enter here placeholderText: em.pty+qsTranslate("settingsmanager_interface", "what string to show in main menu") text: entries[index][0] onTextEdited: { entries[index][0] = text if(index == entries.length-1) { focusIndex = index focusField = 0 addNewEntry() } } Component.onCompleted: { if(focusIndex == index && focusField == 0) { entrytext.setFocus() entrytext.deselect() } } } PQLineEdit { id: exec x: entrytext.width+20 y: (parent.height-height)/2 width: (parent.width-quit.width-up.width-down.width-del.width-10)*0.5-10 borderColor: "#666666" //: this is the placeholder text inside of a text box telling the user what text they can enter here placeholderText: em.pty+qsTranslate("settingsmanager_interface", "which command to execute") text: entries[index][1] onTextEdited: { entries[index][1] = text if(index == entries.length-1) { focusIndex = index focusField = 1 addNewEntry() } } Component.onCompleted: { if(focusIndex == index && focusField == 1) { exec.setFocus() exec.deselect() } } } PQCheckbox { id: quit y: (parent.height-height)/2 anchors.right: up.left anchors.rightMargin: 5 //: Keep string short! Used on checkbox for contextmenu, refers to option to close PhotoQt after respective command has been executed. text: em.pty+qsTranslate("settingsmanager_interface", "quit") checked: entries[index][2] onCheckedChanged: { entries[index][2] = checked if(index == entries.length-1) { focusIndex = index focusField = 2 addNewEntry() } } } PQButton { id: up anchors.right: down.left height: parent.height width: height text: ">" rotation: 90 enabled: (index < entries.length-1) //: contextmenu settings: used as in 'move this entry down in the list of all entries' tooltip: em.pty+qsTranslate("settingsmanager_interface", "move entry down") onClicked: moveIndexDown(index) } PQButton { id: down anchors.right: del.left height: parent.height width: height text: "<" rotation: 90 enabled: (index < entries.length-1) //: contextmenu settings: used as in 'move this entry up in the list of all entries' tooltip: em.pty+qsTranslate("settingsmanager_interface", "move entry up") onClicked: moveIndexUp(index) } PQButton { id: del anchors.right: parent.right height: parent.height width: height text: "x" textColor: "red" textColorActive: "red" textColorHover: "red" backgroundColor: "#190000" backgroundColorHover: "#440000" backgroundColorActive: "#2a0000" enabled: (index < entries.length-1) //: contextmenu settings: used as in 'delete this entry out of the list of all entries' tooltip: em.pty+qsTranslate("settingsmanager_interface", "delete entry") onClicked: deleteIndex(index) } Connections { target: set onFocusOnIndex: { if(focusField == 0 && index == newindex) { entrytext.setFocus() entrytext.deselect() } else if(focusField == 1 && index == newindex) { exec.setFocus() exec.deselect() } } } } } } } ] Connections { target: settingsmanager_top onLoadAllSettings: { var toset = [] var e = handlingExternal.getContextMenuEntries() for(var i = 0; i < e.length; ++i) { var tmp = [] tmp.push(e[i][2]) tmp.push(e[i][0].substr(8)) tmp.push(e[i][3]=="close") toset.push(tmp) } toset.push(["", "", false]) entries = toset } onSaveAllSettings: { handlingExternal.saveContextMenuEntries(entries) } } function moveIndexDown(index) { if(index < entries.length-2) { focusIndex = index+1 var one = entries[index] var two = entries[index+1] entries[index] = two entries[index+1] = one set.entriesChanged() focusOnIndex(index+1) } } function moveIndexUp(index) { if(index > 0) { focusIndex = index-1 var one = entries[index] var two = entries[index-1] entries[index] = two entries[index-1] = one set.entriesChanged() focusOnIndex(index-1) } } function deleteIndex(index) { entries.splice(index,1) focusIndex = index set.entriesChanged() } function addNewEntry() { entries.push(["","",false]) set.entriesChanged() } } photoqt-2.5/qml/settingsmanager/tabs/interface/PQBackground.qml000644 001750 001750 00000026411 14164672551 025337 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import Qt.labs.platform 1.0 import "../../../elements" PQSetting { id: set //: A settings title referring to the background of PhotoQt (behind any image/element) title: em.pty+qsTranslate("settingsmanager_interface", "background") //: The background here refers to the area behind the main image and any element in PhotoQt, the very back. helptext: em.pty+qsTranslate("settingsmanager_interface", "What type of background is to be shown.") content: [ Flow { spacing: 10 width: set.contwidth PQComboBox { id: bg_type model: [ //: How the background of PhotoQt should be em.pty+qsTranslate("settingsmanager_interface", "(half-)transparent background"), //: How the background of PhotoQt should be em.pty+qsTranslate("settingsmanager_interface", "faked transparency"), //: How the background of PhotoQt should be em.pty+qsTranslate("settingsmanager_interface", "custom background image") ] } Rectangle { id: bg_image y: (parent.height-height)/2 visible: bg_type.currentIndex==2 width: 50 height: 35 color: "#333333" border.width: 1 border.color: "#888888" Image { id: bg_image_img anchors.fill: parent anchors.margins: 1 fillMode: Image.PreserveAspectFit sourceSize: Qt.size(width, height) source: "" } PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor //: Tooltip for a mouse area, a click on which opens a file dialog for selecting an image tooltip: em.pty+qsTranslate("settingsmanager_interface", "Click to select an image") onClicked: fileDialog.open() } } PQComboBox { id: bg_image_type visible: bg_type.currentIndex==2 model: [ //: If an image is set as background of PhotoQt this is one way it can be handled. em.pty+qsTranslate("settingsmanager_interface", "scale to fit"), //: If an image is set as background of PhotoQt this is one way it can be handled. em.pty+qsTranslate("settingsmanager_interface", "scale and crop to fit"), //: If an image is set as background of PhotoQt this is one way it can be handled. em.pty+qsTranslate("settingsmanager_interface", "stretch to fit"), //: If an image is set as background of PhotoQt this is one way it can be handled. em.pty+qsTranslate("settingsmanager_interface", "center image"), //: If an image is set as background of PhotoQt this is one way it can be handled. em.pty+qsTranslate("settingsmanager_interface", "tile image") ] } } ] Connections { target: settingsmanager_top onCloseModalWindow: fileDialog.close() onLoadAllSettings: { if(PQSettings.interfaceBackgroundImageScreenshot) bg_type.currentIndex = 1 else if(PQSettings.interfaceBackgroundImageUse) bg_type.currentIndex = 2 else bg_type.currentIndex = 0 // a value of zero/one was a bug in version 2.4 (and possibly earlier) if(PQSettings.interfaceBackgroundImagePath == "" || PQSettings.interfaceBackgroundImagePath == "0" || PQSettings.interfaceBackgroundImagePath == "1") bg_image_img.source = "" else bg_image_img.source = "image://full/" + PQSettings.interfaceBackgroundImagePath if(PQSettings.interfaceBackgroundImageScale) bg_image_type.currentIndex = 0 else if(PQSettings.interfaceBackgroundImageScaleCrop) bg_image_type.currentIndex = 1 else if(PQSettings.interfaceBackgroundImageStretch) bg_image_type.currentIndex = 2 else if(PQSettings.interfaceBackgroundImageCenter) bg_image_type.currentIndex = 3 else if(PQSettings.interfaceBackgroundImageTile) bg_image_type.currentIndex = 4 else bg_image_type.currentIndex = 0 } onSaveAllSettings: { if(bg_type.currentIndex == 0) { PQSettings.interfaceBackgroundImageScreenshot = false PQSettings.interfaceBackgroundImageUse = false } else if(bg_type.currentIndex == 1) { PQSettings.interfaceBackgroundImageScreenshot = true PQSettings.interfaceBackgroundImageUse = false } else if(bg_type.currentIndex == 2) { PQSettings.interfaceBackgroundImageScreenshot = false PQSettings.interfaceBackgroundImageUse = true } if(bg_type.currentIndex == 2) PQSettings.interfaceBackgroundImagePath = handlingFileDir.cleanPath(bg_image_img.source) else PQSettings.interfaceBackgroundImagePath = "" if(bg_image_type.currentIndex == 0) { PQSettings.interfaceBackgroundImageScale = true PQSettings.interfaceBackgroundImageScaleCrop = false PQSettings.interfaceBackgroundImageStretch = false PQSettings.interfaceBackgroundImageCenter = false PQSettings.interfaceBackgroundImageTile = false } else if(bg_image_type.currentIndex == 1) { PQSettings.interfaceBackgroundImageScale = false PQSettings.interfaceBackgroundImageScaleCrop = true PQSettings.interfaceBackgroundImageStretch = false PQSettings.interfaceBackgroundImageCenter = false PQSettings.interfaceBackgroundImageTile = false } else if(bg_image_type.currentIndex == 2) { PQSettings.interfaceBackgroundImageScale = false PQSettings.interfaceBackgroundImageScaleCrop = false PQSettings.interfaceBackgroundImageStretch = true PQSettings.interfaceBackgroundImageCenter = false PQSettings.interfaceBackgroundImageTile = false } else if(bg_image_type.currentIndex == 3) { PQSettings.interfaceBackgroundImageScale = false PQSettings.interfaceBackgroundImageScaleCrop = false PQSettings.interfaceBackgroundImageStretch = false PQSettings.interfaceBackgroundImageCenter = true PQSettings.interfaceBackgroundImageTile = false } else if(bg_image_type.currentIndex == 4) { PQSettings.interfaceBackgroundImageScale = false PQSettings.interfaceBackgroundImageScaleCrop = false PQSettings.interfaceBackgroundImageStretch = false PQSettings.interfaceBackgroundImageCenter = false PQSettings.interfaceBackgroundImageTile = true } } } FileDialog { id: fileDialog currentFile: (PQSettings.interfaceBackgroundImagePath == "" ? "" : "file://"+PQSettings.interfaceBackgroundImagePath) folder: (PQSettings.interfaceBackgroundImagePath == "" ? "file://"+handlingFileDir.getHomeDir() : "file://"+handlingFileDir.getFilePathFromFullPath(PQSettings.interfaceBackgroundImagePath)) modality: Qt.ApplicationModal Component.onCompleted: { //: This is a category in a file dialog for selecting images used as in: All images supported by PhotoQt. var str = [em.pty+qsTranslate("settingsmanager_interface", "All Images") + " (*." + PQImageFormats.getEnabledFormats().join(" *.") + ")"] str.push("Qt (*." + PQImageFormats.getEnabledFormatsQt().join(" *.") + ")") if(handlingGeneral.isImageMagickSupportEnabled()) str.push("ImageMagick (*." + PQImageFormats.getEnabledFormatsMagick().join(" *.") + ")") if(handlingGeneral.isGraphicsMagickSupportEnabled()) str.push("GraphicsMagick (*." + PQImageFormats.getEnabledFormatsMagick().join(" *.") + ")") if(handlingGeneral.isLibRawSupportEnabled()) str.push("LibRaw (*." + PQImageFormats.getEnabledFormatsLibRaw().join(" *.") + ")") if(handlingGeneral.isDevILSupportEnabled()) str.push("DevIL (*." + PQImageFormats.getEnabledFormatsDevIL().join(" *.") + ")") if(handlingGeneral.isFreeImageSupportEnabled()) str.push("FreeImage (*." + PQImageFormats.getEnabledFormatsFreeImage().join(" *.") + ")") if(handlingGeneral.isPopplerSupportEnabled()) str.push("Poppler (*." + PQImageFormats.getEnabledFormatsPoppler().join(" *.") + ")") //: This is a category in a file dialog for selecting images used as in: Video files supported by PhotoQt. str.push(em.pty+qsTranslate("settingsmanager_interface", "Video") + " (*." + PQImageFormats.getEnabledFormatsVideo().join(" *.") + ")") fileDialog.nameFilters = str } onAccepted: { bg_image_img.source = "image://thumb/" + handlingFileDir.cleanPath(fileDialog.currentFile) } onVisibleChanged: settingsmanager_top.modalWindowOpen = visible } } photoqt-2.5/qml/settingsmanager/tabs/interface/PQPopout.qml000644 001750 001750 00000014402 14164672571 024545 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title. The popping out that is talked about here refers to the possibility of showing any element in its own window (i.e., popped out). title: em.pty+qsTranslate("settingsmanager_interface", "pop out elements") helptext: em.pty+qsTranslate("settingsmanager_interface", "Here you can choose for most elements whether they are to be shown integrated into the main window or in their own, separate window.") //: Used as identifying name for one of the elements in the interface property var pops: [["interfacePopoutOpenFile", em.pty+qsTranslate("settingsmanager_interface", "File dialog"), "interfacePopoutOpenFileKeepOpen", em.pty+qsTranslate("settingsmanager_interface", "keep open")], //: Used as identifying name for one of the elements in the interface ["interfacePopoutSettingsManager", em.pty+qsTranslate("settingsmanager_interface", "Settings Manager")], //: Used as identifying name for one of the elements in the interface ["interfacePopoutMainMenu", em.pty+qsTranslate("settingsmanager_interface", "Main Menu")], //: Used as identifying name for one of the elements in the interface ["interfacePopoutMetadata", em.pty+qsTranslate("settingsmanager_interface", "Metadata")], //: Used as identifying name for one of the elements in the interface ["interfacePopoutHistogram", em.pty+qsTranslate("settingsmanager_interface", "Histogram")], //: Used as identifying name for one of the elements in the interface ["interfacePopoutScale", em.pty+qsTranslate("settingsmanager_interface", "Scale")], //: Used as identifying name for one of the elements in the interface ["interfacePopoutSlideShowSettings", em.pty+qsTranslate("settingsmanager_interface", "Slideshow Settings")], //: Used as identifying name for one of the elements in the interface ["interfacePopoutSlideShowControls", em.pty+qsTranslate("settingsmanager_interface", "Slideshow Controls")], //: Used as identifying name for one of the elements in the interface ["interfacePopoutFileRename", em.pty+qsTranslate("settingsmanager_interface", "Rename File")], //: Used as identifying name for one of the elements in the interface ["interfacePopoutFileDelete", em.pty+qsTranslate("settingsmanager_interface", "Delete File")], //: Used as identifying name for one of the elements in the interface ["interfacePopoutFileSaveAs", em.pty+qsTranslate("settingsmanager_interface", "Save File As")], //: Used as identifying name for one of the elements in the interface ["interfacePopoutAbout", em.pty+qsTranslate("settingsmanager_interface", "About")], //: Used as identifying name for one of the elements in the interface ["interfacePopoutImgur", em.pty+qsTranslate("settingsmanager_interface", "Imgur")], //: Used as identifying name for one of the elements in the interface ["interfacePopoutWallpaper", em.pty+qsTranslate("settingsmanager_interface", "Wallpaper")], //: Noun, not a verb. Used as identifying name for one of the elements in the interface ["interfacePopoutFilter", em.pty+qsTranslate("settingsmanager_interface", "Filter")]] content: [ Flow { spacing: 5 width: set.contwidth Repeater { id: rpt model: pops.length PQTile { text: pops[index][1] secondText: pops[index].length==4 ? pops[index][3] : "" } } } ] Connections { target: settingsmanager_top onLoadAllSettings: { for(var i = 0; i < pops.length; ++i) { rpt.itemAt(i).checked = PQSettings[pops[i][0]] if(pops[i].length == 4) rpt.itemAt(i).secondChecked = PQSettings[pops[i][2]] } } onSaveAllSettings: { for(var i = 0; i < pops.length; ++i) { PQSettings[pops[i][0]] = rpt.itemAt(i).checked if(pops[i].length == 4) PQSettings[pops[i][2]] = rpt.itemAt(i).secondChecked } } } } photoqt-2.5/qml/settingsmanager/tabs/interface/PQStartupLoadLast.qml000644 001750 001750 00000004606 14164672522 026346 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title. title: em.pty+qsTranslate("settingsmanager_interface", "remember last image") helptext: em.pty+qsTranslate("settingsmanager_interface", "At startup the image loaded at the end of the last session can be automatically reloaded.") content: [ PQCheckbox { id: start_load_last text: em.pty+qsTranslate("settingsmanager_interface", "re-open last loaded image at startup") } ] Connections { target: settingsmanager_top onLoadAllSettings: { start_load_last.checked = PQSettings.interfaceRememberLastImage } onSaveAllSettings: { PQSettings.interfaceRememberLastImage = start_load_last.checked } } } photoqt-2.5/qml/settingsmanager/tabs/interface/PQMouseWheel.qml000644 001750 001750 00000006044 14164672531 025333 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title. title: em.pty+qsTranslate("settingsmanager_interface", "mouse wheel sensitivity") helptext: em.pty+qsTranslate("settingsmanager_interface", "How sensitive the mouse wheel is for shortcuts, etc.") expertmodeonly: true content: [ Row { spacing: 10 Text { y: (parent.height-height)/2 color: "white" //: The sensitivity here refers to the sensitivity of the mouse wheel text: em.pty+qsTranslate("settingsmanager_interface", "very sensitive") } PQSlider { id: wheelsensitivity y: (parent.height-height)/2 from: 1 to: 10 stepSize: 1 wheelStepSize: 1 } Text { y: (parent.height-height)/2 color: "white" //: The sensitivity here refers to the sensitivity of the mouse wheel text: em.pty+qsTranslate("settingsmanager_interface", "not sensitive") } } ] Connections { target: settingsmanager_top onLoadAllSettings: { wheelsensitivity.value = PQSettings.interfaceMouseWheelSensitivity } onSaveAllSettings: { PQSettings.interfaceMouseWheelSensitivity = wheelsensitivity.value } } } photoqt-2.5/qml/settingsmanager/tabs/interface/PQLabels.qml000644 001750 001750 00000022527 14164672535 024470 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title. title: em.pty+qsTranslate("settingsmanager_interface", "labels") helptext: em.pty+qsTranslate("settingsmanager_interface", "The labels are shown along the top edge of the main view.") content: [ PQCheckbox { id: labels_show //: checkbox in settings manager text: em.pty+qsTranslate("settingsmanager_interface", "show labels") opacity: variables.settingsManagerExpertMode ? 0 : 1 Behavior on opacity { NumberAnimation { duration: 200 } } visible: opacity > 0 property bool skipCheckedCheck: false onCheckedChanged: { if(!skipCheckedCheck) { if(checked) { labels_counter.checked = true labels_filepath.checked = false labels_filename.checked = true labels_zoom.checked = true labels_rotation.checked = true labels_windowbuttons.checked = true } else { labels_counter.checked = false labels_filepath.checked = false labels_filename.checked = false labels_zoom.checked = false labels_rotation.checked = false labels_windowbuttons.checked = false } } } }, Column { spacing: 15 height: variables.settingsManagerExpertMode ? undefined : 0 Flow { id: labels_flow width: set.contwidth spacing: 10 opacity: variables.settingsManagerExpertMode ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 200 } } visible: opacity > 0 PQCheckbox { y: (parent.height-height)/2 id: labels_counter //: refers to the image counter (i.e., image #/# in current folder) text: em.pty+qsTranslate("settingsmanager_interface", "counter") onCheckedChanged: { labels_show.skipCheckedCheck = true labels_show.checked = (howManyChecked() > 0) labels_show.skipCheckedCheck = false } } PQCheckbox { y: (parent.height-height)/2 id: labels_filepath //: show filepath in the labels. This is specifically the filePATH and not the filename. text: em.pty+qsTranslate("settingsmanager_interface", "filepath") onCheckedChanged: { labels_show.skipCheckedCheck = true labels_show.checked = (howManyChecked() > 0) labels_show.skipCheckedCheck = false } } PQCheckbox { y: (parent.height-height)/2 id: labels_filename //: show filename in the labels. This is specifically the fileNAME and not the filepath. text: em.pty+qsTranslate("settingsmanager_interface", "filename") onCheckedChanged: { labels_show.skipCheckedCheck = true labels_show.checked = (howManyChecked() > 0) labels_show.skipCheckedCheck = false } } PQCheckbox { y: (parent.height-height)/2 id: labels_zoom text: em.pty+qsTranslate("settingsmanager_interface", "current zoom level") onCheckedChanged: { labels_show.skipCheckedCheck = true labels_show.checked = (howManyChecked() > 0) labels_show.skipCheckedCheck = false } } PQCheckbox { y: (parent.height-height)/2 id: labels_rotation text: em.pty+qsTranslate("settingsmanager_interface", "current rotation angle") onCheckedChanged: { labels_show.skipCheckedCheck = true labels_show.checked = (howManyChecked() > 0) labels_show.skipCheckedCheck = false } } PQCheckbox { y: (parent.height-height)/2 id: labels_windowbuttons //: the window buttons are some window management buttons like: close window, maximize, fullscreen text: em.pty+qsTranslate("settingsmanager_interface", "window buttons") onCheckedChanged: { labels_show.skipCheckedCheck = true labels_show.checked = (howManyChecked() > 0) labels_show.skipCheckedCheck = false } } } Row { spacing: 5 width: parent.width opacity: variables.settingsManagerExpertMode ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 200 } } visible: opacity > 0 Text { y: (parent.height-height)/2 color: "white" //: the size of the window buttons (the buttons shown in the top right corner of the window) text: em.pty+qsTranslate("settingsmanager_interface", "size of window buttons") + ":" } PQSlider { id: labels_windowbuttonssize y: (parent.height-height)/2 from: 5 to: 25 } } } ] function howManyChecked() { var howmany = 0 if(labels_counter.checked) howmany += 1 if(labels_filepath.checked) howmany += 1 if(labels_filename.checked) howmany += 1 if(labels_zoom.checked) howmany += 1 if(labels_rotation.checked) howmany += 1 if(labels_windowbuttons.checked) howmany += 1 return howmany } Connections { target: settingsmanager_top onLoadAllSettings: { labels_counter.checked = !PQSettings.interfaceLabelsHideCounter labels_filepath.checked = !PQSettings.interfaceLabelsHideFilepath labels_filename.checked = !PQSettings.interfaceLabelsHideFilename labels_zoom.checked = !PQSettings.interfaceLabelsHideZoomLevel labels_rotation.checked = !PQSettings.interfaceLabelsHideRotationAngle labels_windowbuttons.checked = !PQSettings.interfaceLabelsHideWindowButtons labels_windowbuttonssize.value = PQSettings.interfaceLabelsWindowButtonsSize if(howManyChecked() == 0) labels_show.checked = false else labels_show.checked = true } onSaveAllSettings: { PQSettings.interfaceLabelsHideCounter = !labels_counter.checked PQSettings.interfaceLabelsHideFilepath = !labels_filepath.checked PQSettings.interfaceLabelsHideFilename = !labels_filename.checked PQSettings.interfaceLabelsHideZoomLevel = !labels_zoom.checked PQSettings.interfaceLabelsHideRotationAngle = !labels_rotation.checked PQSettings.interfaceLabelsHideWindowButtons = !labels_windowbuttons.checked PQSettings.interfaceLabelsWindowButtonsSize = labels_windowbuttonssize.value } } } photoqt-2.5/qml/settingsmanager/tabs/interface/PQClickOnEmpty.qml000644 001750 001750 00000006711 14164672607 025624 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title title: em.pty+qsTranslate("settingsmanager_interface", "empty area around image") helptext: em.pty+qsTranslate("settingsmanager_interface", "How to handle clicks on empty area around images.") content: [ Flow { spacing: 10 width: set.contwidth PQCheckbox { id: closecheck //: Used as in: Close PhotoQt on click on empty area around main image text: em.pty+qsTranslate("settingsmanager_interface", "close on click") tooltip: em.pty+qsTranslate("settingsmanager_interface", "Close PhotoQt when click occurred on empty area around image") onCheckedChanged: { if(checked) navcheck.checked = false } } PQCheckbox { id: navcheck //: Used as in: Close PhotoQt on click on empty area around main image text: em.pty+qsTranslate("settingsmanager_interface", "navigate on click") tooltip:em.pty+qsTranslate("settingsmanager_interface", "Go to next/previous image if click occurred in left/right half of window") onCheckedChanged: { if(checked) closecheck.checked = false } } } ] Connections { target: settingsmanager_top onLoadAllSettings: { closecheck.checked = PQSettings.interfaceCloseOnEmptyBackground navcheck.checked = PQSettings.interfaceNavigateOnEmptyBackground } onSaveAllSettings: { PQSettings.interfaceCloseOnEmptyBackground = closecheck.checked PQSettings.interfaceNavigateOnEmptyBackground = navcheck.checked } } } photoqt-2.5/qml/settingsmanager/tabs/interface/PQLanguage.qml000644 001750 001750 00000011612 14164672600 024773 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { property var languageitems: [] //: A settings title. title: em.pty+qsTranslate("settingsmanager_interface", "language") helptext: em.pty+qsTranslate("settingsmanager_interface", "Change the language of the application.") content: [ PQComboBox { id: lang } ] Connections { target: settingsmanager_top onLoadAllSettings: { loadLang() } onSaveAllSettings: { PQSettings.interfaceLanguage = languageitems[lang.currentIndex] } } function loadLang() { // LOAD AVAILABLE LANGUAGES var languages = {"en" : "English", "ar" : "عربي ,عربى", "cs" : "Čeština", "de" : "Deutsch", "de_DE" : "Deutsch", "el" : "Ελληνικά", "es" : "Español", "es_ES" : "Español", "es_CR" : "Español (Costa Rica)", "fi" : "Suomen kieli", "fr" : "Français", "he" : "עברית", "it" : "Italiano", "ja" : "日本語", "lt" : "lietuvių kalba", "lt_LT" : "lietuvių kalba", "pl" : "Polski", "pl_PL" : "Polski", "pt" : "Português (Portugal)", "pt_PT" : "Português (Portugal)", "pt_BR" : "Português (Brasil)", "ru" : "русский язык", "sk" : "Slovenčina", "tr" : "Türkçe", "uk" : "Українська", "zh" : "Chinese", "zh_TW" : "Chinese (traditional)"} var tmp = [] var trans = handlingGeneral.getAvailableTranslations() for(var i in trans) { var cur = trans[i] // if the current one is in the dict, done if(cur in languages) { tmp.push(languages[cur]) languageitems.push(cur) } else { if(cur.includes("_")) { var cur2 = cur.split("_")[0] if(cur2 in languages) { tmp.push(languages[cur2]) languageitems.push(cur2) } else { tmp.push(cur) languageitems.push(cur) } } } } lang.model = tmp // FIND SELECTED LANGUAGE var foundIndex = 0 var l = PQSettings.interfaceLanguage.split("/")[0] if(languageitems.indexOf(l) != -1) foundIndex = languageitems.indexOf(l) else if(l.includes("_")) { l = l.split("_")[0] if(languageitems.indexOf(l) != -1) foundIndex = languageitems.indexOf(l) } if(foundIndex == 0) { var langtmp = [] for(var i in languageitems) langtmp.push(languageitems[i].split("_")[0]) if(langtmp.indexOf(l) != -1) foundIndex = langtmp.indexOf(l) } lang.currentIndex = foundIndex } } photoqt-2.5/qml/settingsmanager/tabs/interface/PQHotEdgeWidth.qml000644 001750 001750 00000006141 14164672604 025574 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { //: A settings title. The hot edge refers to the area along the edges of PhotoQt where the mouse cursor triggers an action (e.g., showing the thumbnails or the main menu) title: em.pty+qsTranslate("settingsmanager_interface", "size of 'hot edge'") helptext: em.pty+qsTranslate("settingsmanager_interface", "Adjusts the sensitivity of the edges for showing elements like the metadata and main menu elements.") expertmodeonly: true content: [ Row { spacing: 10 Text { y: (parent.height-height)/2 color: "white" //: used as in: small area text: em.pty+qsTranslate("settingsmanager_interface", "small") } PQSlider { id: hotedge_slider y: (parent.height-height)/2 from: 1 to: 20 stepSize: 1 wheelStepSize: 1 } Text { y: (parent.height-height)/2 color: "white" //: used as in: large area text: em.pty+qsTranslate("settingsmanager_interface", "large") } } ] Connections { target: settingsmanager_top onLoadAllSettings: { hotedge_slider.value = PQSettings.interfaceHotEdgeSize } onSaveAllSettings: { PQSettings.interfaceHotEdgeSize = hotedge_slider.value } } } photoqt-2.5/qml/settingsmanager/tabs/interface/PQWindowMode.qml000644 001750 001750 00000005467 14164672556 025351 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "../../../elements" PQSetting { id: set //: A settings title. title: em.pty+qsTranslate("settingsmanager_interface", "window mode") helptext: em.pty+qsTranslate("settingsmanager_interface", "Whether to run PhotoQt in window mode or fullscreen.") content: [ Flow { spacing: 10 width: set.contwidth PQCheckbox { id: mode_enable y: (parent.height-height)/2 text: em.pty+qsTranslate("settingsmanager_interface", "run in window mode") } PQCheckbox { id: mode_enable_deco y: (parent.height-height)/2 text: em.pty+qsTranslate("settingsmanager_interface", "show window decoration") } } ] Connections { target: settingsmanager_top onLoadAllSettings: { mode_enable.checked = PQSettings.interfaceWindowMode mode_enable_deco.checked = PQSettings.interfaceWindowDecoration } onSaveAllSettings: { PQSettings.interfaceWindowMode = mode_enable.checked PQSettings.interfaceWindowDecoration = mode_enable_deco.checked } } } photoqt-2.5/qml/settingsmanager/tabs/interface/PQOverlayColor.qml000644 001750 001750 00000010160 14164672526 025674 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Dialogs 1.2 import "../../../elements" PQSetting { id: set //: A settings title. title: em.pty+qsTranslate("settingsmanager_interface", "overlay color") helptext: em.pty+qsTranslate("settingsmanager_interface", "This is the color that is shown on top of any background image/...") expertmodeonly: true property var rgba: [PQSettings.interfaceOverlayColorRed, PQSettings.interfaceOverlayColorGreen, PQSettings.interfaceOverlayColorBlue, PQSettings.interfaceOverlayColorAlpha] content: [ Rectangle { id: rgba_rect width: rgba_txt.width+20 height: rgba_txt.height+20 border.width: 1 border.color: "#333333" color: Qt.rgba(rgba[0]/255, rgba[1]/255, rgba[2]/255, rgba[3]/255) Text { id: rgba_txt x: 10 y: 10 color: "white" style: Text.Outline styleColor: "black" text: "RGBA = %1, %2, %3, %4".arg(rgba[0]).arg(rgba[1]).arg(rgba[2]).arg(rgba[3]) } PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: em.pty+qsTranslate("settingsmanager_interface", "click to change color") onClicked: { colorDialog.color = Qt.rgba(rgba[0]/255, rgba[1]/255, rgba[2]/255, rgba[3]/255) colorDialog.visible = true } } } ] ColorDialog { id: colorDialog title: em.pty+qsTranslate("settingsmanager_interface", "please choose a color") showAlphaChannel: true modality: Qt.ApplicationModal onAccepted: rgba = handlingGeneral.convertHexToRgba(colorDialog.color) onVisibleChanged: settingsmanager_top.modalWindowOpen = visible } Connections { target: settingsmanager_top onCloseModalWindow: colorDialog.close() onLoadAllSettings: rgba = [PQSettings.interfaceOverlayColorRed, PQSettings.interfaceOverlayColorGreen, PQSettings.interfaceOverlayColorBlue, PQSettings.interfaceOverlayColorAlpha] onSaveAllSettings: { PQSettings.interfaceOverlayColorRed = rgba[0] PQSettings.interfaceOverlayColorGreen = rgba[1] PQSettings.interfaceOverlayColorBlue = rgba[2] PQSettings.interfaceOverlayColorAlpha = rgba[3] } } } photoqt-2.5/qml/settingsmanager/tabs/PQTabFileTypes.qml000644 001750 001750 00000010206 14164673051 023642 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "./filetypes" import "../../elements" Item { Flickable { id: cont contentHeight: col.height onContentHeightChanged: { if(visible) settingsmanager_top.scrollBarVisible = scroll.visible } width: stack.width height: stack.height ScrollBar.vertical: PQScrollBar { id: scroll } PQMouseArea { anchors.fill: parent onWheel: { var newy = cont.contentY - wheel.angleDelta.y // set new contentY, but don't move beyond top/bottom end of view cont.contentY = Math.max(0, Math.min(newy, cont.contentHeight-cont.height)) } } Column { id: col x: 10 y: 0 spacing: 15 Item { width: 1 height: 1 } Text { id: title width: cont.width-20 horizontalAlignment: Text.AlignHCenter font.pointSize: 25 font.bold: true color: "white" text: em.pty+qsTranslate("settingsmanager", "Filetype settings") } Item { width: 1 height: 1 } Text { id: desc color: "white" font.pointSize: 12 width: cont.width-20 wrapMode: Text.WordWrap text: em.pty+qsTranslate("settingsmanager", "These settings govern which file types PhotoQt should recognize and open.") + " " + em.pty+qsTranslate("settingsmanager", "Not all file types might be available, depending on your setup and what library support was enabled at compile time") } PQPoppler { id: pop } PQHorizontalLine { expertModeOnly: pop.expertmodeonly; available: pop.available } PQLibArchive { id: arc } PQHorizontalLine { expertModeOnly: arc.expertmodeonly; available: arc.available } PQVideo { id: vid } PQHorizontalLine { expertModeOnly: vid.expertmodeonly; available: vid.available } PQFileTypes { id: fty } Item { width: 1 height: 25 } } Connections { target: settingsmanager_top onIsScrollBarVisible: { if(visible) settingsmanager_top.scrollBarVisible = scroll.visible } } } } photoqt-2.5/qml/settingsmanager/tabs/PQTabImageView.qml000644 001750 001750 00000011677 14164673075 023636 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "./imageview" import "../../elements" Item { Flickable { id: cont contentHeight: col.height onContentHeightChanged: { if(visible) settingsmanager_top.scrollBarVisible = scroll.visible } width: stack.width height: stack.height ScrollBar.vertical: PQScrollBar { id: scroll } PQMouseArea { anchors.fill: parent onWheel: { var newy = cont.contentY - wheel.angleDelta.y // set new contentY, but don't move beyond top/bottom end of view cont.contentY = Math.max(0, Math.min(newy, cont.contentHeight-cont.height)) } } Rectangle { x: 278 y: title.height+desc.height+30 width: 2 height: cont.contentHeight-y color: "#88444444" } Column { id: col x: 10 spacing: 15 Item { width: 1 height: 1 } Text { id: title width: cont.width-20 horizontalAlignment: Text.AlignHCenter font.pointSize: 25 font.bold: true color: "white" text: em.pty+qsTranslate("settingsmanager", "Image view settings") } Item { width: 1 height: 1 } Text { id: desc color: "white" font.pointSize: 12 width: cont.width-20 wrapMode: Text.WordWrap text: em.pty+qsTranslate("settingsmanager", "These settings affect the viewing of images, how they are shown, in what order, how large a cache to use, etc.") + "\n" + em.pty+qsTranslate("settingsmanager", "Some settings are only shown in expert mode.") } PQSort { id: srt } PQHorizontalLine { expertModeOnly: srt.expertmodeonly } PQTransparencyMarker { id: trn } PQHorizontalLine { expertModeOnly: trn.expertmodeonly } PQFitInWindow { id: fiw } PQHorizontalLine { expertModeOnly: fiw.expertmodeonly } PQLoop { id: loo } PQHorizontalLine { expertModeOnly: loo.expertmodeonly } PQLeftButton { id: lfb } PQHorizontalLine { expertModeOnly: lfb.expertmodeonly } PQMargin { id: mrg } PQHorizontalLine { expertModeOnly: mrg.expertmodeonly } PQPixmapCache { id: pix } PQHorizontalLine { expertModeOnly: pix.expertmodeonly } PQAnimation { id: ani } PQHorizontalLine { expertModeOnly: ani.expertmodeonly } PQInterpolation { id: itp } PQHorizontalLine { expertModeOnly: itp.expertmodeonly } PQKeep { id: kee } PQHorizontalLine { expertModeOnly: kee.expertmodeonly } PQZoomSpeed { id: zos } // add some spacing at the bottom Item { width: 1; height: 25 } } Connections { target: settingsmanager_top onIsScrollBarVisible: { if(visible) settingsmanager_top.scrollBarVisible = scroll.visible } } } } photoqt-2.5/qml/settingsmanager/tabs/PQTabInterface.qml000644 001750 001750 00000012631 14164673045 023645 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "./interface" import "../../elements" Item { Flickable { id: cont contentHeight: col.height onContentHeightChanged: { if(visible) settingsmanager_top.scrollBarVisible = scroll.visible } width: stack.width height: stack.height ScrollBar.vertical: PQScrollBar { id: scroll } PQMouseArea { anchors.fill: parent onWheel: { var newy = cont.contentY - wheel.angleDelta.y // set new contentY, but don't move beyond top/bottom end of view cont.contentY = Math.max(0, Math.min(newy, cont.contentHeight-cont.height)) } } Rectangle { x: 278 y: title.height+desc.height+30 width: 2 height: cont.contentHeight-y color: "#88444444" } Column { id: col x: 10 y: 0 spacing: 15 Item { width: 1 height: 1 } Text { id: title width: cont.width-20 horizontalAlignment: Text.AlignHCenter font.pointSize: 25 font.bold: true color: "white" text: em.pty+qsTranslate("settingsmanager", "Interface settings") } Item { width: 1 height: 1 } Text { id: desc color: "white" font.pointSize: 12 width: cont.width-20 wrapMode: Text.WordWrap text: em.pty+qsTranslate("settingsmanager", "These settings affect the interface in general, how the application looks like and behaves. This includes the background, some of the labels in the main view, which elements are to be shown in their own window, and others.") + "\n" + em.pty+qsTranslate("settingsmanager", "Some settings are only shown in expert mode.") } PQLanguage { id: lng } PQHorizontalLine { expertModeOnly: lng.expertmodeonly } PQLabels { id: lab } PQHorizontalLine { expertModeOnly: lab.expertmodeonly } PQWindowMode { id: wmo } PQHorizontalLine { expertModeOnly: wmo.expertmodeonly } PQNavigation { id: nav } PQHorizontalLine { expertModeOnly: nav.expertmodeonly } PQTrayIcon { id: tic } PQHorizontalLine { expertModeOnly: tic.expertmodeonly } PQBackground { id: bck } PQHorizontalLine { expertModeOnly: bck.expertmodeonly } PQOverlayColor { id: ovc } PQHorizontalLine { expertModeOnly: ovc.expertmodeonly } PQPopout { id: pop } PQHorizontalLine { expertModeOnly: pop.expertmodeonly } PQStartupLoadLast { id: sll } PQHorizontalLine { expertModeOnly: sll.expertmodeonly } PQClickOnEmpty { id: coe } PQHorizontalLine { expertModeOnly: coe.expertmodeonly } PQHotEdgeWidth { id: hew } PQHorizontalLine { expertModeOnly: hew.expertmodeonly } PQWindowManagement { id: wma } PQHorizontalLine { expertModeOnly: wma.expertmodeonly } PQMouseWheel { id: mwh } PQHorizontalLine { expertModeOnly: mwh.expertmodeonly } PQContextMenu { id: ctx } // add some spacing at the bottom Item { width: 1; height: 25 } } Connections { target: settingsmanager_top onIsScrollBarVisible: { if(visible) settingsmanager_top.scrollBarVisible = scroll.visible } } } } photoqt-2.5/qml/settingsmanager/tabs/PQTabMetadata.qml000644 001750 001750 00000011350 14164673071 023461 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import "./metadata" import "../../elements" Item { Flickable { id: cont contentHeight: col.height onContentHeightChanged: { if(visible) settingsmanager_top.scrollBarVisible = scroll.visible } width: stack.width height: stack.height ScrollBar.vertical: PQScrollBar { id: scroll } PQMouseArea { anchors.fill: parent onWheel: { var newy = cont.contentY - wheel.angleDelta.y // set new contentY, but don't move beyond top/bottom end of view cont.contentY = Math.max(0, Math.min(newy, cont.contentHeight-cont.height)) } } Rectangle { x: 278 y: title.height+desc.height+30 width: 2 height: cont.contentHeight-y color: "#88444444" } Column { id: col x: 10 spacing: 15 Item { width: 1 height: 1 } Text { id: title width: cont.width-20 horizontalAlignment: Text.AlignHCenter font.pointSize: 25 font.bold: true color: "white" text: em.pty+qsTranslate("settingsmanager", "Metadata settings") } Item { width: 1 height: 1 } Text { id: desc color: "white" font.pointSize: 12 width: cont.width-20 wrapMode: Text.WordWrap text: em.pty+qsTranslate("settingsmanager", "These settings affect the metadata element, what information it should show and some of its behavior.") + "\n" + em.pty+qsTranslate("settingsmanager", "Some settings are only shown in expert mode.") } PQMetaData { id: mtd } PQHorizontalLine { expertModeOnly: mtd.expertmodeonly } PQHotEdge { id: hot } PQHorizontalLine { expertModeOnly: hot.expertmodeonly } PQGPSMap { id: gps } PQHorizontalLine { expertModeOnly: gps.expertmodeonly } PQOpacity { id: opa } PQHorizontalLine { expertModeOnly: opa.expertmodeonly } PQRotation { id: rot } PQHorizontalLine { expertModeOnly: rot.expertmodeonly } PQFaceTags { id: ftg } PQHorizontalLine { expertModeOnly: ftg.expertmodeonly } PQFaceTagsFontSize { id: ftf } PQHorizontalLine { expertModeOnly: ftf.expertmodeonly } PQFaceTagsBorder { id: ftb } PQHorizontalLine { expertModeOnly: ftb.expertmodeonly } PQFaceTagsVisibility { id: ftv } // add some spacing at the bottom Item { width: 1; height: 25 } } Connections { target: settingsmanager_top onIsScrollBarVisible: { if(visible) settingsmanager_top.scrollBarVisible = scroll.visible } } } } photoqt-2.5/qml/settingsmanager/PQSettingsManager.qml000644 001750 001750 00000042216 14164673060 023457 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Dialogs 1.2 import QtQuick.Layouts 1.3 import Qt.labs.platform 1.0 import QtGraphicalEffects 1.0 import "../elements" import "./tabs" import "../shortcuts/handleshortcuts.js" as HandleShortcuts Item { id: settingsmanager_top width: parentWidth height: parentHeight onWidthChanged: isScrollBarVisible() onHeightChanged: isScrollBarVisible() property int parentWidth: toplevel.width property int parentHeight: toplevel.height opacity: 0 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } visible: opacity!=0 enabled: visible signal loadAllSettings() signal saveAllSettings() property bool modalWindowOpen: false signal closeModalWindow() property bool detectingShortcutCombo: false signal newModsKeysCombo(var mods, var keys) property bool scrollBarVisible: false signal isScrollBarVisible() Item { id: dummyitem width: 0 height: 0 } ShaderEffectSource { id: effectSource sourceItem: PQSettings.interfacePopoutSettingsManager ? dummyitem : imageitem anchors.fill: parent sourceRect: Qt.rect(parent.x,parent.y,parent.width,parent.height) } FastBlur { id: blur anchors.fill: effectSource source: effectSource radius: 32 } PQMouseArea { anchors.fill: parent hoverEnabled: true } Rectangle { anchors.fill: parent color: "#ee000000" Column { id: bar width: 200 height: parent.height-buttons_container.height property int currentIndex: 0 property int count: tabs.length // we check for the scroll bar to know whether one is shown or not for each tab onCurrentIndexChanged: scollBarCheck.restart() // the timeout is needed as we check the 'visible' property for identifying the active tab // that property is still false right when currentIndex changes Timer { id: scollBarCheck interval: 100 repeat: false running: false onTriggered: settingsmanager_top.isScrollBarVisible() } //: settings manager tab title property var tabs: [[em.pty+qsTranslate("settingsmanager", "interface"), em.pty+qsTranslate("settingsmanager", "Tab to control interface settings")], //: settings manager tab title [em.pty+qsTranslate("settingsmanager", "image view"), em.pty+qsTranslate("settingsmanager", "Tab to control how images are viewed")], //: settings manager tab title [em.pty+qsTranslate("settingsmanager", "thumbnails"), em.pty+qsTranslate("settingsmanager", "Tab to control the look and behaviour of thumbnails")], //: settings manager tab title [em.pty+qsTranslate("settingsmanager", "metadata"), em.pty+qsTranslate("settingsmanager", "Tab to control metadata settings")], //: settings manager tab title [em.pty+qsTranslate("settingsmanager", "file types"), em.pty+qsTranslate("settingsmanager", "Tab to control which file types PhotoQt should recognize")], //: settings manager tab title [em.pty+qsTranslate("settingsmanager", "shortcuts"), em.pty+qsTranslate("settingsmanager", "Tab to control which shortcuts are set")]] Repeater { model: bar.tabs.length Rectangle { width: bar.width height: bar.height/bar.tabs.length border { width: 1 color: "#555555" } color: bar.currentIndex==index ? "#555555" : (mouse.containsPress ? "#444444" : (mouse.containsMouse ? "#3a3a3a" : "#333333")) PQMouseArea { id: mouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: bar.tabs[index][1] onClicked: bar.currentIndex = index } Text { anchors.fill: parent anchors.leftMargin: 10 anchors.rightMargin: 10 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter color: "#ffffff" wrapMode: Text.WordWrap font.pointSize: 12 font.bold: true elide: Text.ElideRight text: bar.tabs[index][0] } } } } Item { id: stack clip: true anchors { top: parent.top bottom: buttons_container.top right: parent.right left: bar.right } PQTabInterface { visible: bar.currentIndex==0 } property var srcs: ["tabs/PQTabImageView.qml", "tabs/PQTabThumbnails.qml", "tabs/PQTabMetadata.qml", "tabs/PQTabFileTypes.qml", "tabs/PQTabShortcuts.qml"] Repeater { model: stack.srcs.length Loader { id: load visible: bar.currentIndex==(index+1) Connections { // We use a connections object instead of property bindings in order to be reliably able to show a 'busy' cursor while loading target: bar onCurrentIndexChanged: { if(bar.currentIndex == index+1 && load.source == "") { handlingGeneral.setOverrideCursor(true) load.source = stack.srcs[index] handlingGeneral.setOverrideCursor(false) } } } } } } Rectangle { x: 0 y: parent.height - height width: bar.width height: buttons_container.height color: "#111111" PQButton { x: (parent.width-width)/2 y: (parent.height-height)/2 //: Written on button in setting manager. A click on this button opens a menu with some advanced actions. text: em.pty+qsTranslate("settingsmanager", "advanced") clickOpensMenu: true menuOpenDownward: false buttonSameWidthAsMenu: true listMenuItems: [em.pty+qsTranslate("settingsmanager", "restore defaults"), em.pty+qsTranslate("settingsmanager", "import settings"), em.pty+qsTranslate("settingsmanager", "export settings"), (variables.settingsManagerExpertMode ? em.pty+qsTranslate("settingsmanager", "disable expert mode") : em.pty+qsTranslate("settingsmanager", "enable expert mode"))] onMenuItemClicked: { if(pos == 0) { restordefaults.show() } else if(pos == 1) { openFileDialog.visible = true } else if(pos == 2) { saveFileDialog.visible = true } else if(pos == 3) { variables.settingsManagerExpertMode = !variables.settingsManagerExpertMode } } } } FileDialog { id: saveFileDialog folder: "file://"+handlingFileDir.getHomeDir() modality: Qt.ApplicationModal fileMode: FileDialog.SaveFile nameFilters: ["PhotoQt (*.pqt)"] onAccepted: { if(saveFileDialog.file != "") handlingExternal.exportConfigTo(handlingFileDir.cleanPath(saveFileDialog.file)) } onVisibleChanged: { if(visible) currentFile = "file://" + handlingFileDir.getHomeDir() + "/PhotoQt_backup_" + new Date().toLocaleString(Qt.locale(), "yyyy_MM_dd") + ".pqt" } } FileDialog { id: openFileDialog folder: "file://"+handlingFileDir.getHomeDir() modality: Qt.ApplicationModal fileMode: FileDialog.OpenFile nameFilters: ["PhotoQt (*.pqt)"] onAccepted: { if(openFileDialog.file != "") { var yes = handlingGeneral.askForConfirmation(em.pty+qsTranslate("settingsmanager", "Import of %1. This will replace your current settings with the ones stored in the backup.").arg("'" + handlingFileDir.getFileNameFromFullPath(openFileDialog.file) + "'"), em.pty+qsTranslate("settingsmanager", "Do you want to continue?")) if(yes) { handlingExternal.importConfigFrom(handlingFileDir.cleanPath(openFileDialog.file) ) rst.start() } } } } // Reload settings after short timeout. This ensures that the changed settings/... files have been detected and variables have been updated. Timer { id: rst interval: 500 repeat: false onTriggered: resetSettings() } PQRestoreDefaults { id: restordefaults } Rectangle { id: buttons_container x: bar.width y: parent.height-height width: parent.width-bar.width height: 75 color: "#111111" PQMouseArea { anchors.fill: parent hoverEnabled: true } Rectangle { x: 0 y: 0 width: parent.width height: 1 color: "#555555" } Row { spacing: 5 x: (parent.width-width)/2 y: (parent.height-height)/2 PQButton { id: button_ok text: em.pty+qsTranslate("settingsmanager", "Save changes and exit") onClicked: { if(!modalWindowOpen) { saveSettings() settingsmanager_top.opacity = 0 variables.visibleItem = "" } } } PQButton { id: button_cancel text: em.pty+qsTranslate("settingsmanager", "Exit and discard changes") onClicked: { if(modalWindowOpen) closeModalWindow() else { settingsmanager_top.opacity = 0 variables.visibleItem = "" } } } } } Image { x: bar.width+5 y: 5 width: 15 height: 15 source: "/popin.png" opacity: popinmouse.containsMouse ? 1 : 0.4 Behavior on opacity { NumberAnimation { duration: 200 } } PQMouseArea { id: popinmouse anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor tooltip: PQSettings.interfacePopoutSettingsManager ? //: Tooltip of small button to merge a popped out element (i.e., one in its own window) into the main interface em.pty+qsTranslate("popinpopout", "Merge into main interface") : //: Tooltip of small button to show an element in its own window (i.e., not merged into main interface) em.pty+qsTranslate("popinpopout", "Move to its own window") onClicked: { if(PQSettings.interfacePopoutSettingsManager) settingsmanager_window.storeGeometry() button_cancel.clicked() PQSettings.interfacePopoutSettingsManager = !PQSettings.interfacePopoutSettingsManager HandleShortcuts.executeInternalFunction("__settings") } } } Connections { target: loader onSettingsManagerPassOn: { if(what == "show") { resetSettings() opacity = 1 variables.visibleItem = "settingsmanager" isScrollBarVisible() } else if(what == "hide") { button_cancel.clicked() } else if(what == "keyevent") { if(detectingShortcutCombo) newModsKeysCombo(param[1], param[0]) else if(param[0] == Qt.Key_Escape) button_cancel.clicked() else if(param[0] == Qt.Key_S && param[1] == Qt.ControlModifier) button_ok.clicked() else if(param[0] == Qt.Key_Tab && (param[1] & Qt.ControlModifier)) bar.currentIndex = (bar.currentIndex+1)%bar.count else if(param[0] == Qt.Key_Backtab && (param[1] & Qt.ControlModifier)) bar.currentIndex = (bar.count + bar.currentIndex-1)%bar.count else if(param[0] == Qt.Key_1 && ((param[1] & Qt.AltModifier) || (param[1] & Qt.ControlModifier))) bar.currentIndex = 0 else if(param[0] == Qt.Key_2 && ((param[1] & Qt.AltModifier) || (param[1] & Qt.ControlModifier))) bar.currentIndex = 1 else if(param[0] == Qt.Key_3 && ((param[1] & Qt.AltModifier) || (param[1] & Qt.ControlModifier))) bar.currentIndex = 2 else if(param[0] == Qt.Key_4 && ((param[1] & Qt.AltModifier) || (param[1] & Qt.ControlModifier))) bar.currentIndex = 3 else if(param[0] == Qt.Key_5 && ((param[1] & Qt.AltModifier) || (param[1] & Qt.ControlModifier))) bar.currentIndex = 4 else if(param[0] == Qt.Key_6 && ((param[1] & Qt.AltModifier) || (param[1] & Qt.ControlModifier))) bar.currentIndex = 5 } } } } function saveSettings() { // let everybody know to save saveAllSettings() } function resetSettings() { // let everybody know to load loadAllSettings() } } photoqt-2.5/qml/settingsmanager/PQRestoreDefaults.qml000644 001750 001750 00000013206 14164673036 023477 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import "../elements" Rectangle { id: restoredefaults_top parent: settingsmanager_top anchors.fill: parent color: "#cd000000" opacity: 0 visible: opacity > 0 Behavior on opacity { NumberAnimation { duration: PQSettings.imageviewAnimationDuration*100 } } PQMouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor onClicked: hide() } Item { x: (parent.width-width)/2 y: (parent.height-height)/2 width: Math.min(800, parent.width) height: col.height MouseArea { anchors.fill: parent anchors.margins: -50 hoverEnabled: true } Column { id: col width: parent.width spacing: 15 Text { width: parent.width horizontalAlignment: Text.AlignHCenter //: As in 'restore the default settings and/or file formats and/or shortcuts'. Please keep short! text: em.pty+qsTranslate("settingsmanager", "Restore defaults") color: "white" font.bold: true font.pointSize: 25 } Text { width: parent.width wrapMode: Text.WordWrap color: "white" font.pointSize: 15 text: em.pty+qsTranslate("settingsmanager", "Here you can restore the default configuration of PhotoQt. You can choose to restore any combination of the following three categories.") } Item { x: (parent.width-width)/2 width: butcol.width height: butcol.height Column { id: butcol spacing: 10 PQCheckbox { id: restore_set text: em.pty+qsTranslate("settingsmanager", "Restore default settings") font.pointSize: 14 checked: true } PQCheckbox { id: restore_for text: em.pty+qsTranslate("settingsmanager", "Restore default file formats") font.pointSize: 14 } PQCheckbox { id: restore_sho text: em.pty+qsTranslate("settingsmanager", "Restore default shortcuts") font.pointSize: 14 } } } Item { width: 1 height: 1 } Row { x: (parent.width-width)/2 spacing: 10 PQButton { fontPointSize: 15 text: em.pty+qsTranslate("settingsmanager", "Restore defaults") onClicked: { if(restore_set.checked) handlingGeneral.setDefaultSettings(true) if(restore_for.checked) PQImageFormats.restoreDefaults() if(restore_sho.checked) { PQShortcuts.setDefault() } settingsmanager_top.resetSettings() hide() } } PQButton { fontPointSize: 15 text: "Cancel" onClicked: hide() } } } } function show() { restore_set.checked = true restore_for.checked = false restore_sho.checked = false restoredefaults_top.opacity = 1 settingsmanager_top.modalWindowOpen = true settingsmanager_top.detectingShortcutCombo = true } function hide() { restoredefaults_top.opacity = 0 settingsmanager_top.modalWindowOpen = false settingsmanager_top.detectingShortcutCombo = false } } photoqt-2.5/qml/settingsmanager/PQSettingsManagerPopout.qml000644 001750 001750 00000007615 14164673033 024672 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 import "../elements" Window { id: settingsmanager_window //: Window title title: em.pty+qsTranslate("settingsmanager", "Settings Manager") Component.onCompleted: { settingsmanager_window.setX(windowgeometry.settingsManagerWindowGeometry.x) settingsmanager_window.setY(windowgeometry.settingsManagerWindowGeometry.y) settingsmanager_window.setWidth(windowgeometry.settingsManagerWindowGeometry.width) settingsmanager_window.setHeight(windowgeometry.settingsManagerWindowGeometry.height) } minimumWidth: 500 minimumHeight: 500 modality: Qt.ApplicationModal objectName: "settingsmanagerpopout" onClosing: { storeGeometry() if(variables.visibleItem == "settingsmanager") variables.visibleItem = "" } visible: PQSettings.interfacePopoutSettingsManager&&curloader.item.opacity==1 flags: Qt.WindowStaysOnTopHint Connections { target: PQSettings onInterfacePopoutSettingsManagerChanged: { if(!PQSettings.interfacePopoutSettingsManager) settingsmanager_window.visible = Qt.binding(function() { return PQSettings.interfacePopoutSettingsManager&&curloader.item.opacity==1; }) } } color: "#88000000" Loader { id: curloader source: "PQSettingsManager.qml" onStatusChanged: if(status == Loader.Ready) { item.parentWidth = Qt.binding(function() { return settingsmanager_window.width }) item.parentHeight = Qt.binding(function() { return settingsmanager_window.height }) } } // get the memory address of this window for shortcut processing // this info is used in PQSingleInstance::notify() Timer { interval: 100 repeat: false running: true onTriggered: handlingGeneral.storeQmlWindowMemoryAddress(settingsmanager_window.objectName) } function storeGeometry() { windowgeometry.settingsManagerWindowGeometry = Qt.rect(settingsmanager_window.x, settingsmanager_window.y, settingsmanager_window.width, settingsmanager_window.height) windowgeometry.settingsManagerWindowMaximized = (settingsmanager_window.visibility==Window.Maximized) } } photoqt-2.5/COPYING000644 001750 001750 00000035501 13233175202 014445 0ustar00luspiluspi000000 000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.photoqt-2.5/CMakeLists.txt000644 001750 001750 00000030046 14156023646 016162 0ustar00luspiluspi000000 000000 ############################################## # CMakeLists for PhotoQt: http://photoqt.org # ############################################## cmake_minimum_required(VERSION 3.16) project(photoqt LANGUAGES CXX) ################################################################## #### GLOBAL VERSION STRING FOR ALL FILES (INCLUDING CPP/QML) #### ################################################################## add_definitions(-DVERSION="2.5") ######################################## #### SOME SETTINGS/FLAGS FOR CMAKE #### ######################################## set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) ############################# #### GET list of files #### ############################# include(CMake/ListFilesCPlusPlus.cmake) include(CMake/ListFilesResources.cmake) ############################################# #### OPTIONS THAT CAN BE SET BY THE USER #### ############################################# option(RAW "Use libraw library" ON) option(EXIV2 "Use exiv2 library" ON) option(OLDEXIV2 "Use exiv2 library (v0.25 or older)" OFF) option(GRAPHICSMAGICK "Use GraphicsMagick library" ON) option(IMAGEMAGICK "Use ImageMagick library" OFF) option(DEVIL "Use DevIL library" ON) option(FREEIMAGE "Use FreeImage library" ON) option(POPPLER "Use Poppler library" ON) option(LIBARCHIVE "Enable features that require libarchive" ON) option(PUGIXML "Enable features that require pugixml" ON) option(VIDEO "Enable video support" ON) option(CHROMECAST "Enable Chromecast support" ON) # name of this option changed # this helps to make sure nothing breaks if(GM) message("") message("** DEPRECATED OPTION to enable GraphicsMagick used: GM") message("** Support of this name will be removed in a future version") message("** Please use new option name: GRAPHICSMAGICK") message("** (make sure to remove GM variable from cmake cache)") message("") set(GRAPHICSMAGICK ON) endif() ################################ #### FIND REQUIRED PACKAGES #### ################################ find_package(Qt5 COMPONENTS Core Quick Xml Svg Multimedia DBus LinguistTools Sql REQUIRED) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH}) if(IMAGEMAGICK) find_package(ImageMagick COMPONENTS Magick++) if(GRAPHICSMAGICK) set(GRAPHICSMAGICK OFF) message("** ImageMagick and GraphicsMagick cannot be used at the same time") endif() endif() if(GRAPHICSMAGICK) find_package(GraphicsMagick) endif() if(OLDEXIV2) set(EXIV2 Off) # this uses a custom shipped FindLibExiv2.cmake file # as versions 0.25 and older do not provide one yet find_package(LibExiv2 REQUIRED) endif() if(EXIV2) find_package(exiv2 REQUIRED) if(WIN32) find_package(Threads) find_package(Iconv) endif() endif() if(RAW) find_package(LibRaw) endif() if(FREEIMAGE) find_package(FreeImage) endif() if(LIBARCHIVE) find_package(LibArchive) endif() if(NOT WIN32) find_package(ECM REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} "${CMAKE_MODULE_PATH}") if(POPPLER) find_package(Poppler COMPONENTS Qt5) endif() endif() if(DEVIL) find_package(DevIL) endif() if(CHROMECAST) find_package(Python3 COMPONENTS Interpreter Development) endif() # Since Python might be imported we have to avoid using Qt keywords (like 'slots') to avoid naming conflicts ADD_DEFINITIONS(-DQT_NO_KEYWORDS) ###################### #### TRANSLATIONS #### ###################### # We first copy the most recent *.ts files to the build directory and then process them # This way, we don't have to mess with files outside of the build folder file(GLOB files "lang/*.ts") foreach(file ${files}) get_filename_component(filename ${file} NAME) file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/lang/${filename} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) qt5_add_translation(qm_files ${CMAKE_CURRENT_BINARY_DIR}/${filename}) endforeach() add_custom_target(translations ALL DEPENDS ${qm_files}) # Create the lang resource file include("CMake/ComposeLangResourceFile.cmake") composeLangResourceFile() ############################# #### Add the executeable #### ############################# # on windows we add application icons if(WIN32) add_executable(${PROJECT_NAME} WIN32 ${photoqt_SOURCES} ${photoqt_RESOURCES} ${qm_files} windowsicons.rc) elseif(NOT WIN32) add_executable(${PROJECT_NAME} ${photoqt_SOURCES} ${photoqt_QML} ${photoqt_RESOURCES} ${qm_files}) endif() target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Quick Qt5::Xml Qt5::Svg Qt5::Multimedia Qt5::DBus Qt5::Sql) ###################################################### #### CMAKE BUILD TYPE (DETERMINES COMPILER FLAGS) #### ###################################################### if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") add_definitions(-DPHOTOQTDEBUG) target_compile_definitions(${PROJECT_NAME} PRIVATE QT_QML_DEBUG) target_compile_options(${PROJECT_NAME} PRIVATE -Wall -pedantic -Wextra -O0 -g) endif() ############################################## #### COMPOSE THE APPROPRIATE DESKTOP FILE #### ############################################## include("CMake/ComposeDesktopFile.cmake") composeDesktopFile() ############################### #### SPECIAL WINDOWS FLAGS #### ############################### if(WIN32) add_definitions(-DWIN32_LEAN_AND_MEAN) endif() ######################## #### CUSTOM OPTIONS #### ######################## if(PUGIXML) add_definitions(-DPUGIXML) target_link_libraries(${PROJECT_NAME} "pugixml") endif() if(VIDEO) add_definitions(-DVIDEO) endif() if(LIBARCHIVE) if(NOT ${LibArchive_FOUND}) message(FATAL_ERROR "** Unable to locate LibArchive... is it installed?") else() include_directories(${LibArchive_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} ${LibArchive_LIBRARIES}) message("** Using LibArchive " ${LibArchive_VERSION}) add_definitions(-DLIBARCHIVE) endif() else() message("** LibArchive disabled") endif() if(POPPLER) if(NOT ${Poppler_FOUND}) message(FATAL_ERROR "** Unable to locate Poppler... is it installed?") else() include_directories(${Poppler_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} ${Poppler_LIBRARIES}) message("** Using Poppler ${Poppler_VERSION}") add_definitions(-DPOPPLER) endif() else() message("** Poppler DISABLED") endif() if(DEVIL) if(NOT ${IL_FOUND}) message(FATAL_ERROR "** Unable to locate DevIL... is it installed?") else() include_directories(${IL_INCLUDE_DIR}) target_link_libraries(${PROJECT_NAME} ${IL_LIBRARIES}) message("** Using DevIL") add_definitions(-DDEVIL) endif() else() message("** DevIL DISABLED") endif() if(FREEIMAGE) if(NOT ${FREEIMAGE_FOUND}) message(FATAL_ERROR "** Unable to locate FreeImage... is it installed?") else() include_directories(${FREEIMAGE_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} ${FREEIMAGE_LIBRARIES}) message("** Using FreeImage") add_definitions(-DFREEIMAGE) endif() else() message("** FreeImage DISABLED") endif() if(RAW) if(NOT ${LIBRAW_FOUND}) message(FATAL_ERROR "** Unable to locate LibRaw... is it installed?") else() include_directories(${LIBRAW_INCLUDE_DIR}) target_link_libraries(${PROJECT_NAME} "raw") message("** Using LibRaw") add_definitions(-DRAW) endif() else() message("** LibRaw DISABLED") endif() if(EXIV2) if(NOT ${exiv2_FOUND}) message(FATAL_ERROR "** Unable to locate Exiv2... is it installed?") else() include_directories(${EXIV2_INCLUDE_DIR}) target_link_libraries(${PROJECT_NAME} "exiv2lib") add_definitions(-DEXIV2) message("** Using Exiv2 ${exiv2_VERSION}") endif() elseif(OLDEXIV2) if(NOT ${LibExiv2_FOUND}) message(FATAL_ERROR "** Unable to locate Exiv2... is it installed?") else() include_directories(${LibExiv2_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} ${LibExiv2_LIBRARIES}) add_definitions(-DEXIV2) message("** Using Exiv2 ${LibExiv2_VERSION}") endif() else() message("** Exiv2 DISABLED") endif() if(GRAPHICSMAGICK) if(NOT ${MAGICK++_FOUND}) message(FATAL_ERROR "** Unable to locate GraphicsMagick... is it installed?") else() include_directories(${MAGICK++_INCLUDE_DIR}) target_link_libraries(${PROJECT_NAME} "GraphicsMagick++") add_definitions(-DGRAPHICSMAGICK) message("** Using Graphicsmagick") endif() else() message("** Graphicsmagick DISABLED") endif() if(IMAGEMAGICK) if(NOT ${ImageMagick_FOUND}) message(FATAL_ERROR "** Unable to locate ImageMagick... is it installed?") else() include_directories(${ImageMagick_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} ${ImageMagick_LIBRARIES}) add_definitions(-DIMAGEMAGICK) add_definitions(-DMAGICKCORE_QUANTUM_DEPTH=16) add_definitions(-DMAGICKCORE_HDRI_ENABLE=1) message("** Using ImageMagick") endif() else() message("** ImageMagick DISABLED") endif() if(CHROMECAST) if(NOT ${Python3_FOUND}) message(FATAL_ERROR "** Unable to locate Python3... is it installed?") elseif(NOT ${Python3_Interpreter_FOUND}) message(FATAL_ERROR "** Unable to locate Python3 Interpreter... is it installed?") else() execute_process(COMMAND ${Python3_EXECUTABLE} -c "import pychromecast" RESULT_VARIABLE EXIT_CODE OUTPUT_QUIET TIMEOUT 2) if(NOT ${EXIT_CODE} EQUAL 0) # try installing it with pip message(">> Attempt to install pychromecast locally using pip...") execute_process(COMMAND ${Python3_EXECUTABLE} -m pip install pychromecast --user RESULT_VARIABLE EXIT_CODE OUTPUT_QUIET TIMEOUT 2) execute_process(COMMAND ${Python3_EXECUTABLE} -c "import pychromecast" RESULT_VARIABLE EXIT_CODE OUTPUT_QUIET TIMEOUT 2) if(NOT ${EXIT_CODE} EQUAL 0) message(FATAL_ERROR "** Unable to locate Python3 module pychromecast. Please first install it or disable Chromecast support.") else() message(">> Success!") endif() endif() include_directories(${Python3_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} ${Python3_LIBRARIES}) message("** Chromecast support enabled") message("** Using Python ${Python3_VERSION}") add_definitions(-DCHROMECAST) endif() else() message("** Chromecast support DISABLED") endif() ####################### #### INSTALL FILES #### ####################### if(UNIX) # Install executeable install( TARGETS ${PROJECT_NAME} DESTINATION bin/ ) # Install desktop file install( FILES org.photoqt.PhotoQt.desktop DESTINATION share/applications ) install( FILES org.photoqt.PhotoQt.standalone.desktop DESTINATION share/applications ) # And install all the icons install( FILES icons/16x16/apps/photoqt.png DESTINATION share/icons/hicolor/16x16/apps/ ) install( FILES icons/32x32/apps/photoqt.png DESTINATION share/icons/hicolor/32x32/apps/ ) install( FILES icons/48x48/apps/photoqt.png DESTINATION share/icons/hicolor/48x48/apps/ ) install( FILES icons/64x64/apps/photoqt.png DESTINATION share/icons/hicolor/64x64/apps/ ) install( FILES icons/128x128/apps/photoqt.png DESTINATION share/icons/hicolor/128x128/apps/ ) install( FILES org.photoqt.PhotoQt.appdata.xml DESTINATION share/appdata/ ) endif() ########################## #### UNINSTALL TARGET #### ########################## configure_file("${CMAKE_CURRENT_SOURCE_DIR}/CMake/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) photoqt-2.5/img/000755 001750 001750 00000000000 14165364104 014170 5ustar00luspiluspi000000 000000 photoqt-2.5/img/mainmenu/000755 001750 001750 00000000000 14165364113 016001 5ustar00luspiluspi000000 000000 photoqt-2.5/img/mainmenu/faces.png000644 001750 001750 00000012761 14006705557 017604 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGD pHYs  IDATx_Uyf LH Cc[T e,`:(SelT;,VB5Bh/iABR * BD d=,nyι'::{s9{=DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDp?F'G9fDt* ӿ+c%.z=p/ lfDO i/+:I6()O @X\̍i[lKt@BJpa`>p.pIt<v1p%vDuJA}/ppAt':\\hfD%J)4mS`@qx*8[oG `0<Ƴ5<m9ݏ6o5i %>phVmVٵсN `x%gdfVсJ `>`it,π@j3':ڸI4Kx2]z+OG!=9VEQ%)`Yt,2-w@J[=p_e$4 x-iхD3FSq|_!ktme u_NEN}f9:(&nM9Ǜw[w .M׾:=pqH t2mea3 -EZh ~I}S:54[Ug`{#љ_@w?fyTȡ3wһuϴ^g8=:uf":AjupӢ㐪]ofi-@:-VjeHoڒm}&к[=jہV;\ ~um['К@Zŵ=:鄹f|tЊ@Zۿ%:-U-kwТٌo>WhHd׆WuH:,GME8iqGպX m+a+pPz e4iduKiowm-9sH'$:=N mh ' /EY ެu~=LE!g&f: 1EOdfMJ4\mfHGt?$F7㯁+ɓfw$Cj8wD0ll?@h^)VOjg57f68)R(Ͼ@sw_ |:: mf`=jf \ N|3[Ğ0(m?dfCɫ++GW: m7!芎SZ}g86:12#3FWz>ef0w8"ccfE1b@W&w;$F"t;̞b"%T3rK ݏF1Iʲ)tJz;41bfD`f |GYlf9Lf%&R\p9f6x0b-A.YvQK@IM7cO}=:bLnStcԷ ,cF00ƒNjQT`NjI~tclJ[Vtltf|7:qJw*kYL_/"~8)Wc0Үh6yH? p$ɬ>}Dd8P 1: }?4/וÉ[ɴB0]+< FD0~h:k`Ҵ ԭNI(fY'sWrFhZ0R(c(3]:R+>S=XA?vowi'mc 1͵hc$ 4ຜef0Bӎ_>?mӺ3)o\._07to\NYfhvȝh4Jr.m #Afpe:k. ~h:j:k?"d#ٞD/ Eα!`Ig,XəXHͲDelEr&c2%Rlc%gX,-UP"(KpI1HJ;+*R,c&Wu&(YLP "2f @ÔD:L @ÔD:L @ÔD:L @ÔD:L @ÔD:L @r%$2hYLhrD"˘ɕt!2=YƌHe7ww #3k3)P>"X ތe,XəVg,Kfs3lXHͲ YHyk@dj@ug.O6YHpKDjuNk2'R59 ˝6d.O6r}w\ l7sW@%/>X!Ĵk<B &!g+*kfQؓ_6 aB=C>\g%Jc L FV8ut=ę_$<M@W _+'<폼OH}?TxHn\wϾXIw ,z?݇ 'TJ8xz=n-~ aMWD0M@!{63[J7> ̖FghBNϤ>.t <(Z3+wh۶M#諾IGj3{$ 3xI) `L[ig7JJe.z.sREր27DW|W_dpEt b&`a@_NGmO/ۉy̲nQ7w] k@w<6Kttwn*Me#U3@t S؛ZGX]ρa/q0f}0Ҡ09 3^tL%?, ( 3؟rJ@9].nNnzfe >< 8ni?1I3ص{-36)wk~ ԆoOYĭY߁*gϧU ̾ќs"pm^fVS-C8̞n} pl`ǘD̜1po`q0@ wOtȬ^uWҵ|w{R-(w,0ͬmk[̊?;L" ~=b:2c`L=j3Ht{[DZvGѫZnF.:[ia ]?G{R v-f)/@7%QU8sJy7(qkǻ̪x7VmGqXby{t v6_Hrf!R cHJk6_cp<̾L: 5qs ͗sGEBGѴmiZ?T<o..f lx0jg &сT4mX{=^./48hďߠί^= ̋J6ϘEsDɾ|/:+h}Jt5磃$w 8zEWс>K^kf?_Zp`]t=Z \`f$B7̜23atԺ8IG\BZ3Q̃ikep4iK9=_}?q6uf":Ahmp8~fgRҞwߗf' ]of5 +.,J wo9(:Yj/'TBsHt2H0en>j=xHPہ^Y $AKOa)4 hqZ2IP:z.,MxDсzt\ۼ _wljyM]awt2h{t*[(oٰzXЖ~\];3):ӧˣP᫾jÛiIME$<3Q@5ˬly'~ `TwF"w'pC3q ;w@}M `46B[Ư}u=JsA ` fݲXdZ4сL GttғlUt5P&w_L3;.:(̀,Ep=Hmfݏsqt,VJ}V cJ36:) KKmjfFJE at!`FsVW'Ӝ_( ݶ-KHvhۜjf7Eꈙ<2X sp=H(q94^\OˁKmf3:.R(lFr.~mv1p%vo,) iN۩v۝k-f%: y!% ik zz_>%J888X2, ج^'%rv{^ 4'$"""""""""""""""""""""""""""""""""""""""""""""""""R#)IENDB`photoqt-2.5/img/mainmenu/zoomout.png000644 001750 001750 00000000324 14006705557 020227 0ustar00luspiluspi000000 000000 PNG  IHDRddpTbKGD pHYs  tIDATx10 /~34PrB3w 1WOZ:=7AF0$ a #HAF0֊KZIENDB`photoqt-2.5/img/mainmenu/metadata.png000644 001750 001750 00000001033 14006705557 020271 0ustar00luspiluspi000000 000000 PNG  IHDR00WbKGD pHYs  IDAThAN@ E@#= pѿ`c =@ـf&nS]{2#H$}F<0_7NUigXڙ١w*`6}דdc:x|~YUxM] y5$O5(#Ve?˲tzckf}U}ݨUeȧ"8de hv :OhIxࠉtsc IH^Bد䶄0 F&ƶfSU.ZKMYnh]ݢB@y1ɳjBkHbv[B$"{}U$UU]h|TlJ!r)b8MM1LUoDvYȆUoO N@cu i#dWD"|= iIENDB`photoqt-2.5/img/mainmenu/filter.png000644 001750 001750 00000003632 14006705557 020005 0ustar00luspiluspi000000 000000 PNG  IHDRKL%KJRbKGD pHYs  :IDATx\KSG\*92eb$\~$%: b\$# TS*cSV怗(]woggn-7lvm6(ヌMU_%osq]PZ7P*NB#xUƍdP,N[B~.d w'''Vᑁ4YA7_]]&@!\f*΅,Oŋg.קH&F0z %bʥ'RդUɰ(hm7#[ D+CW'DW,UOڑ!錬z _jlaDđlVZ!̃8Ͽ*_!뉖]45 ( %gS.@0m* e':pU9>. D,|βj8޹3T=FErDqHNNބnw7\*j'\Twd?z=2_IA߇ϟYR`50Lǯ\c-YX Bg4jAuEDw.-WlDjzdÇ=XYYvԋTNg][[q]RP RS,W^FVP`-WyҸeIק~!i'>Ur S؎.Aڑ8궭e'Ay^>'ݻ?#c+-8LpMVҳTzCުaTouCi`TlU%̛!qVLQlVt>H0Ro9Yuh~SGGN y'G{ th؞ԍ 'u6. nIENDB`photoqt-2.5/img/mainmenu/about.png000644 001750 001750 00000001305 14006705557 017625 0ustar00luspiluspi000000 000000 PNG  IHDRddpTbKGD pHYs  eIDATxM@g !E -A*4鵱5m $pWc;;q6+f|p/s1[M?: `VgH~=lT|$:,4u'KbW'вQ =9\V ?|[Ws m.{O%H1 "&A$ }Vo+?-u\{s]%$y4 nq)EKUuu\kU58\7=kEDDD;)wZ!>0ޝ݇XnZ9ީ[=c:vZE.0ߠ5rY-6+d9'Fsd w!@1EXh4! m`a}ujigtUy!~|~ZI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I&V;$IUB7}YW-}TlRN髝9cZ??jHz}M[@Ե|9%s#SjxL~ $\qyٕCSz?itHNw_Sן=Z$M>즔]q]ƸÁ=o W$I/xi=S=遻ṿͱ$uOiֻ?Vl$Ied?L~XBMǦ Ij{|)nCC٢a`W6>]z!r@vF5uRuQfjC1VU~8$BQS񇋂2u/kQvzAFT%I!E{2sp\U.ԛ;$I["R6`6']IDk=0-ww١d I1{gnJ,y1mIRe|Kgf|zyn*>طUSnj#3uH3.`pٽ5Iſ(U\=LB8x ֡v (zIҤZ``/^'Xe$uc4B;;O.UXR 3rޔ{-^ NށH:Sa!`qj}j 36"`ө(Y5HEx`qPOo3W$ImKνt7[5i Ir=y4ʝQI <.9~4x{)oǫl$i,%}}k>_H8 !$`GVU $m xGs/w.isl$i&_ԁ?K<IJ!3gZïb I[ Gr_m@^Da?`I_om]@1O[ՖN1Fnz<88" n#-W$iBO^!أuxJ\x$ p |όHS%~6ék 8"+h̟Om|Dz=kSJaorZ1O{+^u%OHhc&(i^wK]ǗBxXOHH/tu@#wl$u}߾ᓞ[5pSIm/p /ppR+6@R !,>K|NK[]AA! DsP -̏\q}nFxi<H«i^oiP* f )BQSYF}_bI*p30 ;4҃?oCYnd iR\xD4Bܺw_P/ee i„f:4r}?ng i\]zUkx$ߨ-RE'i~WSu_.e/B%m¥ӦvZ?7w( \M~FH B<;mg E] v\|p`Zuxd_RrPf$^׳+.np/KmI3|_fIͷÌ魧]* CH!?HOɝG҆8 uBV}y$U BS_zыz_[g%/AHz!^`)FVYjU8. ? $p/p ,R!AR۪ 3R-^Mkgcp?)BF//忼ex8'i BosH8D|'I@(ppa됃}& 4BGo4)lIt5^R_Ҥ&Ș=\+5>nAQSli~A=3rgT:LF83wIi^I |u؉~Ie mR]q8/lmBXH|/60^/܎NZ]9xp#'I[O*fw70-w.I]RjzBy$i<Hc{CPB84!l+pA9ORP !N6-߿XEKlP3ѿ`ZY曜R\Y$uwH(pO:`z< :Za^Ou)V+IPg ! BoZzӀ1_&\f;yY|g"$}歍Sh Y%iUa0{UW8y$STG'#4gD&I6#g},]xh ڐ| !\=4g;i}cܙ$Im]d5CiV3Y%dB ! ui~Idj҄xNgJ& @K֊ =r$U3d9XBXrGa$ @uWK.^o@}$eBɝElXa0uȉ~Ih37~y|_]hCs[%I[!=̃rCk00WQy^g$m GEܞbp;$iTB@hBм$TpbB󀣀%H: @|.Xiq cٿ|#??pQ#Z$M8I4fg8roᗤV+Zl&]`ܹ$I+%7裏#sg$!3sg$ӎ}:wOL+/?o Q-wIR5|~hM `0!tv}h8;{9/Iػ^t®Íh3g>ĺV>I҈sgF_?V|^h_R;tӗ22L_ zڥ~II vڡG/ɝej>,ȝETm)nzω{>uwTf-_asC?I_VgGי\4f{ZO_Fjȉza6 \ہsg$u#]ClJ6!i.}H:Fz^UC!魇k[MX%Ivt`aG`9Z+ݝIN?pP^_;ȋ/x)p/0u/Ioo%:4֌ϤCiy$IkPdKu 8`0}/Ii#کC$M}kosZ)u)IR6z` ۪c:|A:v`{R?GFW[^[ko6%z5u%I[,Rz >2N: x=gc1%Iڨޢ%}G>S̨SGt|I !04;kܿ')mҿ)5 jS3rZE> 8cZOE1~cԝs♍FvpzϛdsܽFGKRwI fMyv<'?_M|ҫsg$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I&Ǚ)m{*ҫ[SSW4N`,ǫ\9&_YsgI-ƸC~ v=')ѷM) R7l$EAJž)x=تcܼ,cuzr$ZyЧ~~ʓ"(bEYtlV|<D/IbcƥeY~:آCCs$ѽ˲:  0eY;ߟ$)eyO۪ 1$6=/I695p ,jL̝Aԑ Mc1ƃrZw/˝eDG `"9>SB-$Y_{9Fs`9x$Ic%`OgLk+<V㮍Ģ]w|uePF$IjJ-*Νl&ďV<Ӧ9€$ `,;80!1<<(i",Gb3s Ӥ1 |?$)u[̝IxY[$Iʡ7wfM1;驥1Í%I&IQP{l=@ێxkz/WeyOdʣgڷ!/J&LD1"IUX@cpUSHEr'Pܹ$I!{s`on8j5{7IjWE Ow劧" r`PUw v1E !JR @~1ƃÀkrg$*4eY|y$I՗=0W~?K)n]aPTUX@k~2cFJi/`y$I6D17LɝG &]NeCIV7wM֌7Z...2BeYp庁}=WI&;7|C}}S|]:$I \7|Sq o޷,)l`y\Quy;q$WTYey&3#ϥ$7 6Q`iSSzҙ+,* JҶ @j?oNNɝEQOh߱x/0 /bIֳ6)r,)5I^4bo> ;$iz^4nZK%1ƿ>׺[T)!k܍9f8O%IUQg4Fs(\OɝO &YqlԀSԽbsg!GEx @ٔeK.౞Zz$w&I6ʪ50,M?~E+Q_=$id_Z>}9t8y$iU@Ҧf^;$i Ӽ!wHjk6V1sga mK e,Tpk߰Ck<);$/t[G5c rg˾!<$~i<1U8=4b})AQ{@R5Tp@,ˇʲ|yά]uߦDW$OC"1ӀsԽ=C\Y$u*4Pi݀ K9kr璤ɔr1|ǁAI +HUc|pc.=b9xI@ʝERgB6@ixPYw=_ҋrg50Z%Ua {iyCsԞl6c\9mx^_PV\J~-.n}$mFP4ENﺀށH$X{u1pf< +H, ``F, &Hkk XH;$e@nrUIRUXpPD`j<6I,ˢ,?ǝ6@0˲<<+ OHOм2 WSH1F*sNϬ;op;ԭl$eznOM;rIS I](^1 c ,˝IrPreY>4'PL& oe98͇$u $UǘgjQI 3H%<ė{z{NzrǑ:BOHڬW^BRށHj/1.H +Hj_1wW\ l$u}=ibyB$m΁W~QQܹ$mCȶAvӦ4 | $m\%I+x00!9 QSH|1݀}C6j6N}@OCKHZ)]0;F*ϝElUh )1ƛa`7ܹna )Zņ4/AHh1W󀥭C T@11ƃ;rg['p%URYeyc_|SKrg:ID 3wx[QuT%K/?z1K=l٤vmc\|83wiKUa {I^1c}Rp@QkԷᓞY-(I)sw?7˽}H@&Aa`>" .7OS4B[\Rn^HRG+2z<x 9$ uKCm)qC{\{* jy @2hX,In)Q_b3 \!*zvqfUaIʲ,gޜϝIH;I)z;Υ $UИSÁzj?v⋣90 $7i//)vc^ԁ?ɝG +HR1Π9(80O EHR1&`Sڈ*40%ieYe9eNiU $MC|֭~uF=eG$M,fq[߱X c[`/qV@“I9p"gI(*d I(8洖\Uh ʲ|,ek}/[d$&I^N)S#94Ua {I1^x]됧:HwHRŴnGy+SZOh\8 I3r;V#ATCw"yHIj1/[q*@uR?#%V>m 3fC `5c<m_(!bW̝E $i\h=;]8xK>w=L|KuǏ{=wҼ8+]N Iw?pͫ (Ųw c<"wnU$Iv͝Tp$u((zjib4w Z@K^{c3.) ͝Ua {IRV׶s`H*-xo6cE l$Im'xp|)yQwHXk`$OEuMDnΒM.t {< +H:Cx^:&T$iN c9͝׵ A$I"Ƹx8%(8S6$I,eYozZz&w& {"I1h~ ɝ'W$I]5',=#\${"I^1ƓoUXp$)֊uu1Ɵˠ$nGUz:H͚}stVb1F6v(ru06ʋ1&`=0-wtpY$ˁ_+sE5*Sw+D)eY |iT)ҟ?;OHFk@j=p3w1k{ZT{C=zqou #$iF7oͽ>Q_j]ؾ,˳r@nΒ}Sw}&0+Y,#r ?I@k@ne0w$uOiֻwOs̽Gh$Ih1IS'9Pel$Im/ ~oK{VeY~16tΘCJtqc;eY>{|16c ,V~E6xzޜ#XqxiKHg[pͭ,/I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$IRh[zfhIENDB`photoqt-2.5/img/mainmenu/scale.png000644 001750 001750 00000001121 14006705557 017576 0ustar00luspiluspi000000 000000 PNG  IHDRVVUVabKGDiBը pHYs  IDATxJ1u!(B_LE@} oWJI3=z~MJ)RJW9p8փ^nUFMKJKJKJKJKJKJKJKJKJKJKJKJKJKKXkKX>nmܮa6q_ f Wl)x[ t .Ro=Mn%mai5kW@1uŜ]\ .+,LjVW%+'na۸]vql ǭ*J)0g ǝ9`|ܚs3$,-9vXX`]=4,n%cxX|\u<֞ ,{:^RJw\C}m;HVW1Fv BHl\-,K15,(7ò|ens ޝv-`G vn`vvSJ)R%6J6IENDB`photoqt-2.5/img/mainmenu/rename.png000644 001750 001750 00000005024 14006705557 017764 0ustar00luspiluspi000000 000000 PNG  IHDRddpTbKGD pHYs   IDATx_hlͦ&ޛ^|r"(}h(IfB}h{_ZL6KB ՇCɅm >Xk BkDb9}&dwgΙ9M> BfsYAD4UUEDmf X "!$&넷oKa\.7_L& %ĩ.HTM:b1to^J^}vƍOLLA¥\paÇT{F8N|Yڴu1TAm{3eBt];Q&4A!@ R!O 0>u4gy$ jJ兰l+!Ni gAgLy˲ G$(r~ @a9L&!zWAxKjzYkA )FUꪑ#+Y5UZhV UI`0]uuMԂ%dP ByUU? iGD_Ŵޘ/Ǘ (eYTbw=Romm}EbEQzMb&r^PGς7n=H$+< "2ܽ{*KE3Ӭ.yZ Z\\&Jcs_I `vvl3˟lPX422Kfw"q ! B-illL7 cST르b nx</V^uU~#'e !Tlv !dTݮ-,,|;k?o Ka`6Y8i˲|kСCDDbƼ,oY>s+nڶ fZnAdYMӨO&#(* mk/4+1ra|ktt=H|L&<"WzP(@s3m =u beЭ{BH6\|JWW׹gϞ}j$JZh"2p>==-OMM}b]%l2k׮GP,p֭{so>~ DO=LyP R.eY!N=͍dv QVٶ74{B^ 0$=N"+W~50JbʫP8!$=>>~ǣ~>}t<(VWps[\\k(FIV<-YqC㞛Rl5dhhh8qGg2E制6ӽ.U[}|`LQƲNMӈ(Uj~4ɓ'7$}<::Ѿ>He(ʄDX_ׯ޽{VMv֢ZmH"X0M6zOG Bft]4!z5&y߾};w} @ubXmiufVe/ұU?9˲lvĖ(JBM bثI+Œ,S狈PϏ9栭j1j\.w3gMMMGGGWV+Tozd^ˎfQ{q ;'Ye2LӹfMӈiwX3¼5oU*ޜTG">@ U#*EIK4M,a*H&0p/'Ao]03]Lo޼wq f5"*0+!9j۷oGOO?_~ d`RBE1PHwի0 c,ˑ W&^IEiC2 ?~۹\vA-@ic۶=YazzZ tkFƸuju־|uUU;E$m($LNNE^RMmw "Ç^Td22jU!4뺞m$+Akpt 7(Z[[s~+ab؊KQ{,%jr1D] 8zvIENDB`photoqt-2.5/img/mainmenu/slideshow.png000644 001750 001750 00000000302 14006705557 020510 0ustar00luspiluspi000000 000000 PNG  IHDR00WbKGD pHYs  bIDATh DAұuc ",!3waz5X=PUAM1ov|lo@@4i H& M@4iF@ IENDB`photoqt-2.5/img/mainmenu/quit.png000644 001750 001750 00000004066 14006705557 017504 0ustar00luspiluspi000000 000000 PNG  IHDRddpTbKGD pHYs  IDATxm]İ&`CM"M"!A-)D ~(qVV)>iKEVIZBJi|ƠCC FZb"?fz=;3ޗsy癗ssF *"^s1V1< gEd&p2j}Y'5j` `죾Lx Z٫ˁ2c ?0("[ڸ NEU zc OD>j)M3DU!Q5'EF_Uu xUӄDdA2cYl1`B{f*4'"rCbĠ%,}Ek7My[DQֽd1b5Un]i?RH#>73 5Ɍsg]8+ صȌŮEf{ 50CZQ>ETI$1 I,HbdA# 2!&A4loˀlYlm][堪Dd3~[ZAIjX~!"PU}F2k<]W^MD.R`7pcʐOb8 :*N':'b "0(C EFco"ɐٽlD\ٞ(/O dô݃fF)koDktW P yޙϥL)s91ĉQonnu/ PhA ׄכԧ36Alyx1` Nmo %0Y nKlc{GD9c}T)LިOq@v yU]QV Lމމj&:+C{Uu1|m6v)[9S3AMDw|,2Z@m>\f ǬÏBkYs}Q 0ffжnN}Dg59\^@gv2f>`~@"oWHY;ّm}` #"/":C{nHTq5߄3&UA۹>(xIi-dT2dR[tь12p'2uMViOlo7;؉2bfH[&6'UڹRRbg:d5ble?: #%7ck V!%3\[e/whƫm3^!Ll4uЂ 4Ue Ђ*:!`n*]N-Um58Jr{-!cf)Zp+42ꗀC'ưw6[gG|`>U!TzQlbkjƫ{Ĝ̬\|0M0EIK'`>9a-ޡ3Wv=a/mo|Rcx6P!DS2Bs-)r*cɂ$F$1 I,HbdA# FJd.Q]8*HIvصȌS`e`NŮIS@F0Ore70R`#k4Ș-v1oyae t .?sjĞb5? 0a`8v "M/z0H!-W{oU"5W.]"2ZA"rY؎6ڠ u}ׁ?>˜.yt[;>ˌ!Eu97S Rg~Y엉q 3u8  SL7fIENDB`photoqt-2.5/img/mainmenu/open.png000644 001750 001750 00000001015 14006705557 017452 0ustar00luspiluspi000000 000000 PNG  IHDR00WbKGD pHYs  IDATh]j@Fܙ$%[p+] q^EIw mNRZtfn#w x<kEK5y/\)"\.f=us^t1fO,Ka5l6e_u%H@UU0kwM!DLDAސ)+Ӧ}t:Akkn's}x_$@eu7AP -4LF@ H)\CK CGluR|>G 9 "k+^5^5^5^5^5^5^5^5^5d)PZ&`fc@JY<!ڤ'jEQ{2Q%wkZ^(p4M5k>"gcⅈ̵&C>@y&&(󕕝ǃy:j f}Yy9q)hw㋜rl:>  ;nD>pV>? ;jOx|6:NS['ǥt7l^ ?6z…|uOT @:ɼVk_>^YMFovg'/ٜͣZ~aժy+ ZuQJ09c䡃IK!iޮrTTc\ĸ~ҫ!ĬpiNP A#<6n|<W Is*De .t8.жP[;a (Ʊu` ʀ`tHmPoK4$njtLu`#l(;sλK.{^s&!D )h.b)椓Av ~bJ)g4CrƯ3.ȹb-J,J0jkfZlmwcO=074H#ZjxkMOMɅΆp` 'NtiPx֠1LEVDgG ҉rƠAYH8jDu/j޾Z,QƖ }Y,uG6*UF95XA"*}EHÀ4(8&.jO$}V3ՠ+bqҢoT焚F4Bt-Xʞy{`NE GnF$i}\ TinN슔 c;M7#}/~>hJ n#qI9' <~ELlbS]~*6b3!X.~eR쫹Q.jK@l>?= ?QFCȠ  ;ӳu 8<MMc` rdI$8YtO- p#ANը{128sXT(WQKzZ Uj|ԇYJqɀFJp+,˒űD@:$^HH[ H|U oL k7|en+)E1bɏ}ե sMFZ݂NaKW&t3df<< {ٹBHwD=YGq2FT(,eY Y*c^D5:$J|8mf,dx;!3J7!#POzv҂= e8=f60|zz? TzZ˟{N &@&@o`4i . zcL>(ft&@m?~&0[ AلU:={QU-N!uK+Rs-LqUzƛyɄ]"av߉ :`D$z߼.6/x,^H\&)l*t;mۇ£؜U O{$P+RʦG.kv{ u/CU]lͿH?@zU+? W@ w cӈ!;K6;J+bRy>x) nԜn/'K&KtV {CtShgWK517N6+Y P YTN:/F>/F>2堿A_| /F>.|YUbI.ɬ?*˔r(h maeK"2igƬ1TOFe ZV4{:j-}Ȣ=ZgVS:SSNpװB`{}E;+F+ulRvijOi:4{jEPZoF$~sSSPrjk]yrʣu$X ȁCjlgd]͏ܼfNhW.[QU4QԓHГՂ6*&i7wO=BWynw*>jk4S͵{v_ʜj96P{U6 = J#?wXs%5gr jfl5/o`W\AU *Wtu+:Ⱥ=ֻ\ѣa=֯:凡lܘ}OӤkz!3wF}ZRلd޽v;j R~QC~siCCPICC profilex}=H@_["- ␡:Yq*BZu0 4$).kŪ "%/)=Ff8jN&lnU"0"@Db>')x{zYa%o2'2ݰ77->q$x̠ ?r]vsa?ό 5b&kbKGD pHYs.#.#x?vtIME 8]1|tEXtCommentCreated with GIMPWIDATxr0@A4fCX$`[}tCl!3"Ԝszj(`#C,~D@,~D`h!W @@Y$"~U@@@@@@@@@@     8sia":    @OCϙNկvz*Wɫdq4ngdfEyDБ)s N-w,$9^7lmo`7=_,c ,~i,~@7.@ɫ_ogZ #gVM#O+{ ^4߹@",Rw @ kVŽL!WՏki7_fbw dU$@{_l\,*n@x@ >ے|n@(O/6_j % &8@m8v6w@:c%Y4"!`'qDxO. >^Osmo;O~8rޫ?@G!ib[nZ  X"i~^" "|D@Dy@ `ezkEq(yyvLn ˶-tS9ɳm#3w@v/KLcyΜ@y@@@@7v             @Z '1眞J@@@hbD8O7gvv*"<B%-0IENDB`photoqt-2.5/img/mainmenu/move.png000644 001750 001750 00000001523 14006705557 017463 0ustar00luspiluspi000000 000000 PNG  IHDRddpTbKGD3> pHYs  IDATxܿkqwc .Yw&Q A,خ EE)7 RTTEB:x{L$%3333T]'<وXcC5NjZA8 bDq1"O;$"J2&0g)`Oӓ-S RXxf6l$v7=ߙ Dq1"A8 b&9Hm5 Q6Az:J2sxRy y~\wz?Gā;A2X̭ Vwt{ ج2)+"LW?"fzX!- XR0n_RK5s?kq~ NasaϝK#c֧q1>Љ*Ur/PD<dsPgC(2EAݮl}STDlm?#}ǍEqĠi凞+-733s|zzXӹjfG<w;emx@2NPۥj0/AA8 bDq1"A8 bDq1"A8 bDq1"A8 bDq1"A8 bDq1"A8 bDq1= %sy*QECjC03333kW3v q-IENDB`photoqt-2.5/img/mainmenu/clipboard.png000644 001750 001750 00000011035 14132325214 020437 0ustar00luspiluspi000000 000000 PNG  IHDRxiCCPICC profile(}=H@_[R*A!Cu *U(BP+`r4iHR\ׂUg]\AIEJ_Rhq?{ܽ*S͞q@,#J |E L}N_.9@ xf>Iot.;\OdH/3<Bkno}>Y*}%^xw_woi rUbKGD pHYs.#.#x?vtIME  sMtEXtCommentCreated with GIMPWIDATxO^uz5XX'`]FhFW*D7.7JSqQN:1CQ:0 sэ"MBPW,\+Ằ(RQP:N?^{~[fxMusuSuCu}u]uMuUu)툯/է'Շ07"wW;Rz:9 Ûԡ{uu_DVzZ0 hC~Ә0 /y?T=\fn0 /qU=ZcToTp(_VR2730|nX.{Q.7fpzꮃω'7rWGK Q]GtG&Bv`'A030S6 i'A6X3"w rIޝvl;Ta7;c`}3ء[S3&6{f=2fv-Փ`zs `"tk`z5@bu$"ǦK:f=/.طNglMO;.TGIOGKsmw:gU2V8߫=EXoXxz(_ğwzՉm|aʹ?s%W6S(G8UW,[O"`~!R8V2 a^6 ;^^6'p_>1j֫תWax8@;;?xwu,0i bbͪqnnn4UeuzF.%W5 @ @ @ @U3՝-Ս՞jp.TG{[01,muzg"\Ϗ:[R !`+ǪG&7|s0|m,,3`Si^lj:`ڴ `_TzgnlÓզzM_up{5Ց\VG=豼v`SIO׶9XtL 6\N 6F}LwLM{ .Fb[ύF1-g`oA @ @ @ @ @, F`oA0?`oA030ΚK촷 bWZuX}jϪ&8>+$U'vrS_WOӹiOA&GXi@M (~_=.Xi/AGoy9u:<#ƛCyc ;duȓ?v&NWVGOG{ϲe,y|]f?L7TLMvo[9,V|V=]==՝-Ս՞j)q.TmI|?#T~a|@ @  @ @vf[;[=n"]֫a8c,XCP@DWOuzZ3#BWTUT{M-o8ǫaXXf2׫lӾ>Zu4iA6<;#؆''Mpul῿:g# `k+#g1L{ 6cy `mslCg9l g\;{  { c[n#ނ @ @ @@ @ Xf{ Y7-##ނ`~3--#ނ`fa8S5 ioA%z 1M .0 UM%p|WIN 䴧 `oK,sSӞMձ `|QlQz\@^-Vr;\uxG7@v'L `Tz͟eX8n lsXzzz[;[=nS"]Uon,G  @ @ @ @@Re4w @ @ @ @@ @ @ q*ˌ\a.뿻Vʽ}\9ӿ [< y ӿ8/D p _@>2"J7tgIENDB`photoqt-2.5/img/mainmenu/zoom.png000644 001750 001750 00000011406 14006705557 017502 0ustar00luspiluspi000000 000000 PNG  IHDRddpTbKGD pHYs  IDATx{|\Uǿ{$mj@?7W(xAUT(^BMd M>T-Pʣ(" \TzUGb@du6}$9gfNbO?f}޿Yk{+a n;|#8WPAP}ڐ{ЊM..׸6'E^'5 Y*e`VFOi:BΓҪOlsއMs/6EEV}]Z[LGGVyԖ@In8u6ogiw[qCZg&4߃xQu6uG͉1߃-dR%!EĂvX6ÎP3J# c( !* O!:_Ė{ˡCF*'xB!g,s[ncjqm $ !\XТâ!i21-i6UrݲNJEe)svLj^`M3!"*|bWc)_8eITHAR!x>@PGCD~t\SHwfi^O]jvtd.kcω*u]1ƦZkvxze6bFDFH?\BbͫYDҐA]y/!2 o1&Se *ҰVHus_YPGM)r+OFmQ󃇨^XWЇ BnJtGt#cTn3y2Z9 Pv0'Vkd$[^B,_#!DBt9.}g4m>aJa$׶.ֆ3F 3!DyJ\B1n+~mVBDX$?bH\dwlm-DsHZ~Q )Nƾ#éU##7aԔ~Uc@d9QY~n5eS< D *(^"H ֶYcjۢ;1(2%QCMq@cZ+2MDxf=8+DRD6H|GP/艌#.erIi{"ʻG|+FvORQiA:z38p`C/_GH9G@:'J+pֹbTݙT.W JvO S@d? md]k'+82 f8 mMƘS`0?{"!1}V!O}^P#ul}%PHt,!Ķ ͠ #q{Pm/Z2Ry .%?Q-2BS*f6|*@uUTF#vL훑Uf  w9Tx <_s{3R9HlV9Tx\M$cזfMc e.ט5ƼsNi qmꇂJ+ 91ܐ% XkRFuT`kԛB_-C!W;vUφ$;v\/nH'DžcAȓ ¶EUOa1ٿ9ak1cH,cu[(&I}ͬizBhRBEphAuSBpL=}]{',h)SAOidMڦΰ֎hN(מq@ĵmKBm^d\AA 3gixr ;n*=7[4A!DB<˷k.7wF`1fΚc?^21}sHt5񥔫'LrEns螷압Kwj@ڦN1dm~sl][XfܹZk[r- Z FT6BrU̯*M!92(3~񬠷j1~1A?sڑ Jɧ|WQ*Ȟ? 6-![ofaJ\vnakW36Ѓ 9 TYݫBU'ҧk{]اoǔj+wfK}Q0Mڙ}Y1sjL2TKI1F}^Iv:52NCxf5&wH',rQ.ߧÐP8/4CƩ8!ŋ5aVmb*!B!#C2ƜB{5^T_nEam Xȧۈk91jS}-ݶ] _U1-5&Y\dXwp7(dH{Se5Qj?JnRژ$_AЇsR _eմ1qҶxA8<m$l<W۫jaٓ?'I1 !}ȸ\׶ RȂKYvbO뮛:JDSHpRG7**Ӟ,g焩QeXkʱ4"X!  {Ȟfsn%S 5`yS}p6MhÒ7ano2> !Ԉ7_7ӵGV K-l6ijỶA+#ˀiIS#{C Wlɏm"o-PgD+B~;~2GlIrgXL-r["wTHh_:&njW}w eT{͇N4t\e~HbQpS3njҡg:@3A~ ) q&o\]c w%NйS{TLxb<1 .Y?oeۏҡ`Gk푀ExIoKVk˾ě2IENDB`photoqt-2.5/img/mainmenu/chromecast.png000644 001750 001750 00000015162 14145550064 020644 0ustar00luspiluspi000000 000000 PNG  IHDR00 1 zTXtRaw profile type exifxZir8Sn õo0RrKGX%4פ`xAR1l>l [Yl^;.or3<_]Qq~!?fCP>9/!lLIMciI?_>}Wwz:|[N\Ʒq7u]ķu&p#?]  ?>Ohy{n/wY^qḓэgΞVxup_t"'@O'!Bf*>3[5s“7nPAVp`mz29ٶO+.PlᬽklV[-C㑗?sj*0tV 59m@԰|~n7^pl"j/&p h;Y!. 3<5v#V TG 8ۡE`.G׭6X&`]Xď*BAB 9袏!(QIO$H,%SH1IJ)mv ͐crΥ`OPJU_Xki[hIK-mwcze@( ?ˆCFyPa)3<ֻ ]HrA gENt3f3m3{)f&[dEP2(f1 0ĎFT7 7.rн=nPZBlg:8dTl*ZӅWzAp7ҸE-06SG032G+èL47{y-`d\ e->=={hL$HAqzb:F0ߚ>Y% }h3HAcu:dN%bJzt̖*aAP 7QCѫ [A]v%=(ZY_Ԫխ!1REVVNewGVa"M6r Ns\&Mt/; YŘz `N4A#XjMkr\ iV, DZEYz)Tw2N KP 59 DLfdt>܁V @[Bx AyAEf(јQ;_`"ڴW 놀*3l ڤ"+wP#ݺ-@U>dieN9[ʗ R ҮaRXLo| tZbP;WaWLWk%!f am!#RTUrEm5 * rPBTRHz}z@6elg4{>+6<9eX eZ0C<>7wT^7RwZl~Ӵ Xk7 c.UdV=iuMqa,jl yYOKދGXJZҌAknߡawz%bܾs3r߃fM%M`qiHV !"ʠIjRWOJ9K *Ru=3BfRlm(K<4jP[75m.ed\I-.r G #yYCEj>K9b(yhǔVD07z ٚwYs=QG5U@TQ>ސ1rڇQ3?qA=d0{@y"isG?gĻMcJ5f<ݎ,}UxXۍIGhCsӮk$VuFnytoD7ix?Zq^jqVaI'GQ~BXkxn$57ZQζӮζ+9ܡ)xD+^. 9a]tL}YW_?99/h]tXGd.8 ;IEׯ4>isnHgӒ5*U ?70cY7ӕ5q1e28y"z?;ݼ'Ÿ7i}%i 3 :TDeK}ZH]Yo!܈`$iCCPICC profilexJP&A28\RP! V4IĐ7ч /wYp~{/$LYU~ox9XM] ,i -bKGD̿ pHYs  tIME .n kIDATX헱OSQajBX&8ZqE 1&3o8 Th:`Lpw)wg{nү Vb0*sEl1+%0zA @ǃOb. -=E=4&:>A o&"7>Qt#`Dك&^DXn&f,י9_[5eG d)q.Wyg4=PKe泏i:lq8f*gt@I34|7nos}Ds|4ה %gɝ5sǞQ2Ec+؊xf': Z${&YLbƦQ"iHc%dE{x s"l׈9iB^1/M*| "c'5-9xgkU?С[,TwSqGq[1[ J3bxEd6 ٳ۵q6M~t$#!IENDB`photoqt-2.5/img/mainmenu/zoomin.png000644 001750 001750 00000000547 14006705557 020035 0ustar00luspiluspi000000 000000 PNG  IHDRddpTbKGD pHYs  IDATx10H(APx3%[+w?s>>=;Ƹ;/ 1#H 1#H 1#H 1#H 1#H 1#H 1#H 1#H 1^ߌx#H 1#H 1#H 1#He6(#H 1#H 1#H 1#H 1#H 1#H 1#H 1#H 1' ؗ9IENDB`photoqt-2.5/img/mainmenu/delete.png000644 001750 001750 00000002716 14006705557 017764 0ustar00luspiluspi000000 000000 PNG  IHDRddpTbKGD pHYs  nIDATx흽n7{IdP**ty PÍl@o7P*zi* Haڽ̐gϯ1veq; Yaaaaa5ZdQ2 Hmtw}0tt=eRJutc9)#[Kik9v=h31qs1Y{k`2྄ }%K*gf>cI"ڭ1_i[3&W^V[}2O_\2v8jVY#VSSi6_\Շ+fxyf2mvwL쫆:Ǐr!"& cgf1K!VH*K}~8clAH`(snRgQ]`4n4 蛱>$eJsai)}ώnbDCDF~ptѲ\.E}JC1oMNH< mMeıjY'Ž~ I ~Nxh I3vpնg1% abTS;W6Zf*Hb8M3SdEҲTL%6mEBD:3jUaΙ 7LVwDoRw>hw4,K/ab/%VS}w} Cs]# 㔚fF@>d3pC |F/I5>$]+.=}fzb WY Yg3ڊ)O?0 >ڐb }t &q;尨 rYͣQ5YIl--&XթkMݱCKD?J/rp h g2% EC/$;kz:B5ólAܧ4E5}|J:oH^Sz|F9{nh*c.q{0lp䄹'u%I)k!/;ɑk\E:ε=u"&)o*cQ32]%͹8$6\JfF_:axTljfsm׉sCFQҶ-'-nnn;Y/}8>p qVUo' -fsEzZ#KML=dI3OfxVBfq\!)%M+[;$)s5!25)2հaaaaaq0WKiIENDB`photoqt-2.5/img/mainmenu/settings.png000644 001750 001750 00000001547 14006705557 020363 0ustar00luspiluspi000000 000000 PNG  IHDR00WbKGD pHYs  IDAThYOA}I<Z"L4  JG* \7'L!&ONͫ Jmɤt̬mgolluZhxx™Qlnss9{t4[ 1ȝpΫ754’gq 8!wh)\Q(ȋ|[*dr;"<6Alm6d_B;@>]499v<Ji][8̐DT %<6[K9/G𴱺N|G]8x~TSivS%@Ц[@`Fߢ=vw2:18K'uUu[?ufh4oÛ62r5CL^m1f+a,Dy[\` 4fY +iJg c, &w\tE}/ 2. \NQ#'rl6ه)WNs'l7Y#b7'IENDB`photoqt-2.5/img/mainmenu/histogram.png000644 001750 001750 00000003551 14006705557 020515 0ustar00luspiluspi000000 000000 PNG  IHDRxbKGD pHYs+ IDATxAnA@QW4re r[CSH|5?֜vw<f<گ_O@ A $ H@ A $ H@ A $ H@ A $ H@ A $ H@ A $ H@uz=cfTn H@ A $ H@ A $ H@ A $ H@{ $ H@ A $ H@ A $ H@ A $ H@ A $ H@ A $ H@ A]xݻg̜  $ H@ A $ H@ A $ H@ A $ H@ A $ H@ A $ H@ A N3㜙ӻ$ H@ A $ H@ A $ H@ A $ :=;Ι9 n H@ A $ H@ A $ H@ A N7wϘ9WJz&+Ԭ"EM \!~A  8=5h3{ n:*:=*v=׏L^G/0NB4VjPGX &i n[NMRax9J =j`DB,tSb\;#HI;-4SXInA7kq^ˣ_w%p˻qbf}vtVqQ,ո-Г#tIӿB$hy6,!i!p g>+ }[)X|&peZk:^qf e{{/n~(0jfn/4u%n:#j8CFc v5~G^MAI{n~u1+ $Yo| {uYLӸQ OE~(fBm/cx18[%17 h3\K ۷f~ɀM&ŵ\Tn1/`M^Ǎ_IƾP lP:bhYf]vEQ= t8`R{ +.5odM4 ySͬԽ@Uxo@" N3 u6C@JKzVU +ǀ5BHxk3ջ$}j/|Vh#Bfمpvf*;kpG~ 躠-oǥ[-gǀoHWfHY GҁLoRR<E߳`L!E[KZ#lø>DpI?4hĬH$8"%MZEKiLYf3[;;Wz/ǤT- p`pWvߟ/KO**69#R4iҤI& LIENDB`photoqt-2.5/img/mainmenu/goto.png000644 001750 001750 00000003311 14006705557 017462 0ustar00luspiluspi000000 000000 PNG  IHDRddpTgAMA asRGB, cHRMz&u0`:pQ<bKGD pHYsa IDATx[lTEKn&/h01 CMí>l1h> bxA}R@ȥr񡻤9gvl4}hgoΜ= @ @ (ԂFD٫5qsӻvKWR"\ne ZhT*w0?Q"!>/B_/"=*""/#4U4ѵ(xkp8LEԋφ,^7yR xφ$E^DLi:C4OF!@VDpD5|6䀅>'Q*!"kqB^k=˵ƫ9CdͳQL*63p"?R YD}*﹩XPX jYmq|hSGmPj/WYBo- Me\)ZBS\vԗy'qqeHևl_#?L䰈(Ҏ-c.m NV&ΚR!<92ki!jI\kj9iEw R !v_o`=:om 9W ӄ:S]Wz!zیF\k^v=pmʛ¨D8εpO owQ`k1IX֭rR,qJTyHO hrCDoKg8S$Ef@""JD6#ni[Jǧg,cJM!%3zk8b31b d)M!"anlMCGOzQT""`$NU*mWb ?I]`aELU5cpS!cv+nQM]4eB,QZ) |nFސdx>e 3GaME *cl~<*̐~ q ` WxiI N?e8R]|kmvJm7uvlwG5*ΎϵZ֐)>D?[~גj: i0oN'v>ZOMlި 1\̍?멸cp5Dk}2Pw(cko2")u< O:xofT?Ts㍃SHw+N5TSZkIb }؝۹'@ @ * #@IENDB`photoqt-2.5/img/filetypes.qrc000644 001750 001750 00000022415 14134332171 016702 0ustar00luspiluspi000000 000000 filetypes/3fr.ico filetypes/7z.ico filetypes/aai.ico filetypes/amv.ico filetypes/apng.ico filetypes/ari.ico filetypes/art.ico filetypes/arw.ico filetypes/asf.ico filetypes/avi.ico filetypes/avif.ico filetypes/avifs.ico filetypes/avs.ico filetypes/x.ico filetypes/mbfavs.ico filetypes/bay.ico filetypes/bmp.ico filetypes/bpg.ico filetypes/cals.ico filetypes/ct1.ico filetypes/ct2.ico filetypes/ct3.ico filetypes/ct4.ico filetypes/c4.ico filetypes/cal.ico filetypes/nif.ico filetypes/ras.ico filetypes/cap.ico filetypes/eip.ico filetypes/liq.ico filetypes/cb7.ico filetypes/cbr.ico filetypes/cbt.ico filetypes/cbz.ico filetypes/cg3.ico filetypes/g3.ico filetypes/cgm.ico filetypes/crw.ico filetypes/crr.ico filetypes/cr2.ico filetypes/cr3.ico filetypes/cube.ico filetypes/cur.ico filetypes/cut.ico filetypes/pal.ico filetypes/pic.ico filetypes/dcr.ico filetypes/kdc.ico filetypes/drf.ico filetypes/k25.ico filetypes/dcs.ico filetypes/dcx.ico filetypes/dds.ico filetypes/dib.ico filetypes/dic.ico filetypes/dcm.ico filetypes/djvu.ico filetypes/djv.ico filetypes/dng.ico filetypes/dpx.ico filetypes/epi.ico filetypes/eps.ico filetypes/epsf.ico filetypes/epsi.ico filetypes/ept.ico filetypes/erf.ico filetypes/exr.ico filetypes/ff.ico filetypes/fig.ico filetypes/fits.ico filetypes/fit.ico filetypes/fts.ico filetypes/fl32.ico filetypes/flif.ico filetypes/flv.ico filetypes/f4v.ico filetypes/fpx.ico filetypes/ftx.ico filetypes/gif.ico filetypes/gpr.ico filetypes/gv.ico filetypes/heif.ico filetypes/heic.ico filetypes/hrz.ico filetypes/icns.ico filetypes/ico.ico filetypes/iff.ico filetypes/jbig.ico filetypes/jbg.ico filetypes/bie.ico filetypes/jng.ico filetypes/jpeg.ico filetypes/jpg.ico filetypes/jpe.ico filetypes/jif.ico filetypes/jpeg2000.ico filetypes/j2k.ico filetypes/jp2.ico filetypes/jpc.ico filetypes/jpx.ico filetypes/jxl.ico filetypes/jxr.ico filetypes/hdp.ico filetypes/wdp.ico filetypes/koa.ico filetypes/gg.ico filetypes/gig.ico filetypes/kla.ico filetypes/kra.ico filetypes/lbm.ico filetypes/mat.ico filetypes/mdc.ico filetypes/mef.ico filetypes/miff.ico filetypes/mif.ico filetypes/mkv.ico filetypes/mng.ico filetypes/mos.ico filetypes/mov.ico filetypes/qt.ico filetypes/mpc.ico filetypes/mpeg.ico filetypes/3g2.ico filetypes/3gp.ico filetypes/m2v.ico filetypes/m4v.ico filetypes/mp4.ico filetypes/mpg.ico filetypes/mpv.ico filetypes/mtv.ico filetypes/pic.ico filetypes/mvg.ico filetypes/nef.ico filetypes/nrw.ico filetypes/ogg.ico filetypes/ogv.ico filetypes/ora.ico filetypes/orf.ico filetypes/otb.ico filetypes/p7.ico filetypes/palm.ico filetypes/pam.ico filetypes/pbm.ico filetypes/pcd.ico filetypes/pcds.ico filetypes/pcx.ico filetypes/pdb.ico filetypes/pdf.ico filetypes/pef.ico filetypes/ptx.ico filetypes/pes.ico filetypes/pfm.ico filetypes/pgm.ico filetypes/phm.ico filetypes/pic.ico filetypes/picon.ico filetypes/pict.ico filetypes/pct.ico filetypes/pic.ico filetypes/pix.ico filetypes/als.ico filetypes/png.ico filetypes/ppm.ico filetypes/pnm.ico filetypes/ps.ico filetypes/ps2.ico filetypes/ps3.ico filetypes/psd.ico filetypes/psb.ico filetypes/ptiff.ico filetypes/ptif.ico filetypes/pxn.ico filetypes/raf.ico filetypes/rar.ico filetypes/raw.ico filetypes/rwl.ico filetypes/rgba.ico filetypes/rgb.ico filetypes/sgi.ico filetypes/bw.ico filetypes/rgbe.ico filetypes/hdr.ico filetypes/rad.ico filetypes/rgf.ico filetypes/rla.ico filetypes/rle.ico filetypes/rw2.ico filetypes/sct.ico filetypes/ch.ico filetypes/ct.ico filetypes/sfw.ico filetypes/alb.ico filetypes/pwm.ico filetypes/pwp.ico filetypes/sid.ico filetypes/srf.ico filetypes/mrw.ico filetypes/sr2.ico filetypes/srw.ico filetypes/sun.ico filetypes/ras.ico filetypes/sr.ico filetypes/im1.ico filetypes/im24.ico filetypes/im32.ico filetypes/im8.ico filetypes/rast.ico filetypes/rs.ico filetypes/scr.ico filetypes/svg.ico filetypes/svgz.ico filetypes/tar.ico filetypes/tga.ico filetypes/icb.ico filetypes/vda.ico filetypes/vst.ico filetypes/tiff.ico filetypes/tif.ico filetypes/tim.ico filetypes/ttf.ico filetypes/vicar.ico filetypes/vic.ico filetypes/img.ico filetypes/viff.ico filetypes/xv.ico filetypes/vob.ico filetypes/vtf.ico filetypes/wbmp.ico filetypes/webm.ico filetypes/webp.ico filetypes/wmf.ico filetypes/wmz.ico filetypes/apm.ico filetypes/wpg.ico filetypes/xbm.ico filetypes/bm.ico filetypes/xcf.ico filetypes/xpm.ico filetypes/pm.ico filetypes/xwd.ico filetypes/zip.ico photoqt-2.5/img/filetypes/000755 001750 001750 00000000000 14134326614 016174 5ustar00luspiluspi000000 000000 photoqt-2.5/img/filetypes/pgm.ico000644 001750 001750 00000022316 14134304206 017450 0ustar00luspiluspi000000 000000  $PNG  IHDR\rf$IDATxyW}V:ݣ%F]%Y2ƀ1 CH#$'x^K<'{llYb5K>M/Uu=ӚLWwWwA]S}n~ ‘j7 A@  A8p0$`H6yشeBv[ cs[viuCUjA:d(]AUh* AX A8p0$`H! C@  A8p0yD0Gd% 0@h*T% %j֛͹.ː]..7$ QAH1hL30TU4:6c K\.>jj2b@B@TRa j:Xx ѩq$Qh!2|)PUFr&$_&`DB@aBH 4m3,gn[UI#29Xx 5/P[%l @Q0qLd^4D&EP۸uM ."NѐA<2^fI?:0Ơ* &CHchj]HP 1z/^ DX@ep$@T%]` x #G*݄!C,5rS(j0 ȃ)u0fX-!l 0D' Ocj,D?6dF#)-B˯qC/nH Ќ5!>-mWǬ!߂i @MXJ}5+r&xAh-f`駜@>HǪ lh ] BHkrFLBAb#L`rBPn-mWe3c e`#P׀U7qUl&?sa-9&)', WLG 64E,<83Qh!m%_&`d,1Ħ'gSMDŽdj[k@r&hX TUдE8 \p{|j2Å].[+#5i $F!8 PUJJ: UIAUln9rAv%y=;>ђ,2ہIA`4]2&moN?J @&'pO6l r Ir#9aヽ "[6PN`$DS2e&c.('Y~e ̇(bE9,$D '( sU~NJ[zH2aD  Lj*jg Ũ*@ pz$T[L{rf)T!R[(rao1(igH0sgHC09sr$D[az  JǬ"pZN( [~8 GHP  *bpJN^g(Y˯ ߝ_OΣ(X~ \l='`3G+Z~ RN%Mz  &cc} 2g]r켞 Qv~̙ s$~lb-!m  #Flb-LN l r0g巘]N9ҩ$:OȠmN``4{H#BS1y}=V*^nl- #'F{0%$Qt;Tbƹw0EǙk1(zϟ(nq촞(c ə8z_܇j7\(2 tZ>'`kP} O,ycl'\,R)LN ºy[Po'Ƈx5UE_)zyBac|1^;F1xż RzpHh-l'1D=5C,<+C.~$bGZ~ 9 NfNC8!>%B}]s6vL eXaabPlWds} FcpυZBh8!G[ HrӓpjaƠ(ixr'T[]OgyvI$gbtX(zfZ~֜Ѯ6V\O0ɼ7pOv_r>B>P\8{1uGZvk V[O+S/PwY~ *9KL'3ST[ۅ,d5lN XRTEA߅3NOTCf39w1d-VYOP_E'E S).\X!'`)($S ]XCVsbB>jGvaV!ۑ1gN2 !,o&oeM 5D,v=ӟ}B>hW.|rvaVL-1Č }ֳ :5'`+`T!4ZvK_*f V)  /vŌ g9So&˯Ȭ'ab!2;LۤՅk29{:L!r?1auaLN J!peB>]DՅk:̒0dC>fC.܉ s LӪ) B`vaM0C_3b@,!2tud57f T(v%+0g],9* @i+X8"U "T9'P+ì!kd TE)AcBvaZj*/ "vaZj*. ̜]vaZlN Z9+ye{ cT! \],&bp)sSمk#d4rIVD)oh]x(Y~-O%sUQnOY .LU~C%sPo'Ƈ1 ~T*'P֫Ŗ!1.x *029pseۆ|c ,4² ({NlWC>`nP%˯CN92 C>e@B/v9ï'|ʁ~0Y~B9s #C>0Y~C9s C>F3gY0Y~G&'ix0~|A.ܙ0Uu@ ]OJ!C#s<3t=B>eFwH.L_gctN$Ȇ|ΟD:9 ?xdѩq:sr) LOs w9 8TE!u0s9ڦ%Z T8"S&^}ٜ@o9z.|cr_M!`PN`Ȇ|b!jbDN`Ȇ|蹟 N9ݽ8飐A"%t c Q i)6'C2 !S0'P[Y,|\  ``/$U X@UUz:P[+}OAUTu ,@7c꾀:;w{L =! C@  A8p0y}>^^`@"L%>xx=mwMط'k7ބiE$tJgN3t^MMp&e܈v# E8HRx8<( FB!Bx?_}~Mx{ޏ}/.kv MËgOȡoUwB4c(h״т  uG)Db}óOyx^w^t% }?O+/~ďWk=- ༰ aMe 9zp߅sݏ#NAU$}?Ivwar9 G>}[uLOMOpKZ3_ĸ$HLL<'~}|C3Jz>3O $:g$8s4_"$&_|}=E$x(>鏡B{h~10>6S'Ud<ܳxkd2BV9taD0׻py=5/Bp9;[Q69  !}?tMN$%?眣 v>v]6p{s>xC9ùرsϗcndnǧ%w8xz>;}FGBYW }=9_ssDH*~ oBx,eKRx? 3;߃ sqkoĊxаy64\@_<2)g NmWʍ3 H*  MHS9@1LN̩m-^7:+4[iE%ffptG)`[mGSsK^ 1*7i(4m;׵}/k׭7,mh~W/1pA1p159ǎnמ9#!0BbllE\0uHX׾zMA8}^r_<~Hӵ؇zqk * Fd 0tZɼ'1 Bb;zMMw^mBBغm}62S[GrFW\M[ntcH*c#!\8s~( tkL?&4j]#D<[i6"  sEOE]۷] ϗ*J#45"jjjpN; qɜs ~?!qȲGo/+-o۱3s1c DSkZȔ}͵9<.7zC>sصg/8=eJDs]ke((~x_= `knw)& ޽xF_ܽ555$EBP"z a5p߉.ii,/{w4iD<5%IB)ȹڽg_v#phd}֬Yc[Wݱ;3о&JU [_$&&<7]3(%߬AD>խ8  M~ xl|>^E87%׿kM/hfvڃCފyTbum;=5ز}psn]w޽U N<~Ç>I|CAngKvQHJD4R+7n[?Lcn^b$I^r[(BӰኍoеF,uל50"5M3NsgZv/t5X! ^]ONLgAp.|5:}3NZ@T i*v]nӵWO[j.($F_= |"L 7$6ފ5mU|!MpMO|t ~ [c`x;ޅ;S&!z~omnMP$תM܂/>Uowz<\W\0?4`34MCk[rj<#?'PoG?;D! B5MCsK /c}xpY f v㪫wSB,"[lh׋;ޏ_*OɟPKͧᵸ⺗^/o|`pݟIW  !\.{^w]*1\cڒswu'q~:x>G>y FH&:,g߼W7n녪iy;$ɸsWݐwB+Vԕ,B465S?fW*b9ɘ ]ΐ@ewZFT 6fڷu ;𖷽)1<4񱱬pᯩA}CV\UŽ>K7rkQ?p?[TK9%ww"BӠjco@}C:]0д \t $%ӹUn! C@ L޷s2, +Y6=o>|7+> \n` A@s`H! C@  A8` IENDB`photoqt-2.5/img/filetypes/pnm.ico000644 001750 001750 00000010263 14134304214 017454 0ustar00luspiluspi000000 000000  PNG  IHDRydIDATx][lWĎ'iȅ4qRRڢBUZQTDSPKD*Ry\!(H**mHImǩw;ƻwg^Ι=3sΙvdٳg͙;? $H Akdc֓fԱTZ翋[Ʈ/if:JZԑD Q5 j$D@Ը ЃWdžˢQ0 5 Bi]5 !@aR ZF/|֠+Fn^ohnHŕl̅IJ, sֆ[ZV&MB{95NKX0k#̎ =QL!4;Zpo?2l0=Hr#"de,W$;W4Nfnox-\3ٸM,Mm Щ%q{ P97$+ZM$|icv `, 5u @OkNY pzxl$n(X j=, @kjZ\!721B&4fѻS@*,C(gr]-p2=M̌cwat 9?~TUV%s&KA@J`C3LuD;ֵ?"N %@iqزO!O&YŸ́KwE0J%@noɚΓCSirtm:]މr` j{$PWL$ cߙ~OH4.8ReΖ9z] \a54VtUJ6/qv5ڀ@(jk[9Jc AE5yZz <̄>a b<1 P,A| `%/|ĖWl/` Jfĕwl,AL cB崉1%l$ص`YxP6Q2,A< ( vGYX'YL Y8/q$@@Đ %" ~`,AoX ,V'ōq@=q(nKCČbNT-Av('ŋI4D1q(^H` VH`jk Df N9PM\w+@ L[VL@* nf&(Xca-٠(:-2d2ۍ.[UHk~$E0 iKJ@x, j-*辂 "iKFۈv!.!Me-jwyd+2"Jr@||iSAHk]rJM1?#CbV vL(@SN``B@z仂hbT'e v_c$&Ij%&{eM,!K {h22o&F`$,$JKOqjIr\[F&2xTM vop^#dQA#`–@?+};L,@K Ig``@|ﭕjbdl% ϿqY)e[JNc`&1K Jhb|4Mh-hVj0_3ZK HyY|_t8l_f0 CB[ nՋB8AeD4qX"i%!6uٿs%}-7dpзHh"9%'qA/D0%%q姉C, y>(,w=p"ňƗ g`K+#X0,c!`ޖQ ć8q"%$; $qE,Ɖ,,R[?w"9%zSѬ v&%p' d뚸"HD0VZ2,wD , w-G 8^a =zghۜw g`*B%p >+,喀!@qh3l-C,fs-l O8-At W"  O8,E@(`-[TwShNE@or-]Qǐ A & lqBڰBHNv`>266LZĚ8eH:uQ?GiTkQR4V vFh~)I4-i@MgUDju{WC`N ݷ8Zz66n߶U7%Oi}ۿq?D+bsvہ?z͋bGo~9+Cئ: f/sKȳ9\EO I?/b(;__wG^bgb󤣝LZi{x+)0NVxИ ZNv>ji}k}˚u/5jB>jߚoEt/TZt] _ÓɳtZ[g\g),}i]3fPyg+@͂v묽]슊ogn?-ևo'م'Y/9 z[S74s<x%AIomgs2rt oT1zhPȟ6b+J9k6c6u6 Ħ .[ZO i#jPo/+ڻ Z^~cn:]~TC&TTY4im4 mN/CQJ?Jkfk[+%;(>:/]:DxJG^%<]zZTN/Tu&b!HH y o,K7;yd$) zwQ6/O}?z< ?a7sG'vc}]b<;[rs9j8ɲ>739y?g[LoLJY%P!kwffkJPݢ7|0KkCQjyjK 2'2w=vXQF@"5T_x-G(2&uQ#! FB@D 1,S$8ͶfQ{-D%F$H A חIENDB`photoqt-2.5/img/filetypes/ct4.ico000644 001750 001750 00000025514 14134304065 017365 0ustar00luspiluspi000000 000000  6+PNG  IHDR\rf*IDATxyx$U;ˤgfdf@f_墢 * E \D﫲 * 80 $=kgO:tz:N0dyy9U9U]S!( !P& a`& a`& a`Sg[֯HE`0${fޘ 5 (}L C"&M]D",0B|a`0 a`0 a`0 a`0 a`0& a 3PJ!Rp8P(P8 A 0M0L0<8(e% LB ~?gzGn|zܣ`6m"ǖYV 8@{#0HBPH{z)x}>Ji? ,pMMl2!n#?vxgBH+LD) ߿̶ Øt=AݎBr6c$ 04:ɩ)B> (pMMQB< C# D>! FQYVlCV$Ĥ#H} ia,)/ݖ)`fJI7g"χA|f&qO{V6"!>}CL sxQ !aU (bpt ?!$2'0:R+  )=iO ` C!NLyD0K}ch&1 Bx0ntLN@XrOڋ1>2  `Wӕ]ah& @)ŔATP3>^, JwCHk#) 5T [Z~!mPBaac֎`w šRG+ ieĒ(Rw`Ρa0aAT^T3#D!`sh!w3&= qP PQu:E]N9ߏ~M j!`'>G#d`p㠊>#ր]}N gU2&W=&< NL=p`l…Q6 H}]52a14ua<o{q(BW 6(صap$R -YY(ȵal3A7(CEH&'(SSdWu2BrOohH"0\dgs=>J)sraez"Y~G7 $ Xf;0ٌU-Q&H&qp!?7GuUlUNDDa9aP^RWJ\; ,IJ& $8PV+¬ێR {v(ќ( H DssB7YVTU!jQh$UX~R^(\RM –y& H @8cr28'(7*+cӆ=Y X~c90H,D '_(0<ʊVuLBA2߄? ą @dY-XRQˑc"Rp<,DEI1LRԓRP*F!L,N"Ǯ\0 D#\-9> MP~J.smMX& 7>a90`wTvop` [O`&bRNLi%$3=3' Li=]9gd9 #gF#0`hLY~%1xN #-Y˯Zo/Qi0d'ZwPo4zL#WLa0dEio25zLo9'!j&Q`uY~en=0Aed0bN #ekM8Fʨ[O #%_J- `Hׯbo)'4Z&QrLI5o"Ds: 0`$,ҥFRD,NMY~9&y1sL eo29'j `^,ɠלdteM ' (M7o': F@0G[0<60S~'X~%z )'`)E[wFF 4D-Cc8c3 ! opghoKN@H̡ 8щq>ީ`4o!'Kv5mBqsrbDo2h='; 33ÒYBxց`(dG;tWTsP(Npr##㑯gi4Z N:z0<6'+Bzv/2Ly9)SI؅WDQDr!t(n1^ۅW9>4+ |w:mX~ǘWF5Ф ۅ#_'ʄrx!oљ]Y~ӃVr)!څ.l*@ 9M @"!t0.,|h'#WZ hF =j.,A9@!t@j.,A9@*!!aAJsB>׌FYJs9C>逋څ;: ,ʠ֜j !t:z{$W9ԘP+:UofU~E9U @C>@vaVW-)':T'VuuafUj J"82IGef_u ,h\'p`dL]vafUp=T%J|A.ܣ0\U6' ~nW((E}EQD7J):{ (.s! \v6Q S0Qyم[ 3˯ T.')٧p.Y~!BIױF™.,!Q`H t3䓞c:{{3bf_!": d\I(f.,C@@K!Ʉ]U6 dTI9p{@hf_cΜ`Đ̷ x}b_ !' 9#7Q𑶅 3˯1JCN@60r'̷ x+' ̅|I Uf_㒎@eRcY`f56rR谄|\uLy> q|hNQl5%pJ#LLMab73'2pP2XȇPr 0@@B> zH5' YXȇP' IXȇP7ɮ'WXȇP7 @Ej uJ#8[֑ /q 0ξ~H[G31FJ 00L 00L 00q}ldee)O ~^/fp>"Uk rLBI@0`0 0`0 68Uw)E(̮`M$RI }QsDCJ!tGW["V] 'chx]]BӉq 8l6:\˗˖vmN,&'qX,i9WpXy!Ys` '&! "L&v; (/ǒ*t Jː 4P#@)EOO/vލ܅CM14<_$XVamM o;n?+ayٞR<c.I5EQDEy9~|PR\,y套O֖[XA_IFG,]=رs'^۱MG1::@0w{ՂE u8aMD avtt/!~Oo/~/΄=DӉv@EoqG_ U)_\.<Ò˲Zq嗡TVV~͸m )x03xgљp 1<F$} B&n02:жᤥKP+WvMMGё #Rؘ~Ӄ uu P5  Ij_ZR+/4.,_ ys^ QrՍƽ{ƿC05ЍpW^} vv5kV_>TjY^("n 4ۏ?=<^ݱC֋~k.??7<64BXU]_3u8nyX,,NJes_^z/Tӂ.!ē^Q."1o'#C͛pm Ełq׏ylI7g}aW@fjO>Ki-..oVUDaaaғnnݷ?fl޴kVUc'lӃv{HAnNNJB-8Yg59paw$7L/cUI(l6+~8CWw7;ceWDyy9jkcxиo gUxf8/feKOBEyDQDvV֯>`OC*1]PJ9v1|o btlLR"77Ghܻ3331۬[[H9C]]-q|{s(\h`0ǟ| ]u5~~v^ϑT4-dsgzZRիVÞ_B6YE^˜kmEo_n/nJ) qکJhNpW;܊xyް5(ofK=1 q‘8EJf܈RrtiFpa]_<㒋/Bl'{zÏ^+>9q1a 6*2>>.}7;;E*8G1'ȲK,;>J)rsrnژ =^YEz) Ǵǃ7zv|ӗ+_:Ef@GH)ɲZ E{\֬^GAl26Sj߁pMNiF)EVVnMXWS??/U|܋zE0#WVV, BѸ7coCmjSJyy]SLEY sO~J0āCpO]bbbBRv-髃R4bɤqzz{]VVjׯQtTV,EgtY֎n~z h\ 塔a||"fb\RJ((ի= ţ(8e'P^VO(:|IB|Im@7B$AO"n9o1<<w_Gs`+W }R\rEhk];—` _|3XUR+M j122ؓ0ZHܶ.òVZ UDJ!Ύ ֭uk񹫮[o?^MO޾>ڽWU+}X)WJ)JKK`=,p===9Bƙ$cOV (qчķo%o-هV4/%%%?miQ/RF`" 7 h炂|oQXk+&\.MW @qQQ2YQ47ʼ?^\N;:ݣYt!",3zpccc1PJ)rsr4xgW7dF --J&\.?p@OL " q'/t|>\.8hZ+n:Im_;3>q\ĕrA)Ż uuX(ץP8 ߯iaռ͛#_ eB$p+:w!kb!$-#9J)%}2Ph3`$+W\5'JKk+oޜ8>P99'^O5}-??jNBIZAݍ~3f>L_ʑQlټ Y$LxUNK v$"UbvzzR7/gn==8tvu+~پ9&Gpwl733}{,uEO9M7gqW&^LqZUE,Uႏgph8t$BaCpM_o@a5A3,OٲnnKg[6#77+P}C#|OT;!)ϗr`(W^ϵyy(t$6Ѕ 8{Y n&_(',I>^y5Y,$nÆ'V,[* %4А΄#0LxyI١[#n ڎIow~;‹/JڦǕl"l\sرs:b|Ka1AA(ƌg==K/C}E !áÇ+V,Obp`ڵh>z,f!457c~ 9Ҋ_{lB9{.H׋7:N)%̭YVñVmv%ucZ,lټ| )T]MM8$myD(.*u:'kص T.^Me]+*  b|bMGW^Ů_\c2;;go; izRU7V7}[_c-- mzq%Ѱ^ ݛ6mjMbXWܜL{>n=v G.+8++ _st&@f pwPKn8s` {9ɩW\tx T:rIK? ?_O@Dn>-{%!>49E;֬^bXeӦDQĻ GK (={Y߁fЩPJa6뿌_3,]$]AFI7ڦdl5c";; I >~Ux: rxW^~|a|cJL-B055%iՊM6\LEX\Ғh@ >s)Bii)o ˗-+Dn޸|}7zYpIp杈ܜlڸ8A88hi--),̱:XGŞwFC^ݧR mXpmzihmk?w]# }\|˱t.QAf%_sގf~S߀ֶ6-X-8زp8lI8䓱SJaoyTDebraL&|kf*pOwQzժEQ߿{*BPW[nZ_]{-:pAZ߉I$|> AL(Ǻv%K`2 .?p'ur~o獺Yjz~btl CĄ P!ƴ>م4nj& QT`>Tn;rљSچBLE M#S &ؿ tI@C@eqsrv;? ēY "H_V@H(J4MT9EHpcbTo bHg145lN1 `lL{\Uzo1HltCWdr!̊A;2dվpc|7g145O;tD@NV,uIbņ;c%qkj1[LVF @U-rRkSU JC<(y1"F#Kæs045p.t@p/ m% S*YYӐe}jMa %qت&1L01]Ȝ1L0|'BgU(vY%$jd\ν !FLe`(y]KGT Z`y\RD?ad:Pdq1"gm|fOy vqYN@d{t g1Kҥ@ёKhۜ3mp<"d0ƀT:3PRi20qin>|nV8]4ϖ#3D01O@!h xy̽_ &`p|d42Y.\p$ln vqtq|wrC(I(64 7Y _[>,00BlG)nۛWP둰ÜV%寂!Ȍe:9̀7LwM{WJ~sՕR@($]]hMB no#W(@1hyg&xR]bĞm֩T,XoVO@{S{-񺄀@߃v裄J!7L}(CW[#ujz9 vJ/- L]mAQǃ޹Ak'ߊVO}%DW[1C@Vс>G3,-W, ܦ>ؤ^7n&b'P6B$w4NG \J~}n@+vtڣ_BgU-F?I,," ڇ/j c%4DKpnY0Mhj}mAxq#Z:Uވͭ XLeYL! !(PTFc .qCKЏ/vq(5b8AH9CsUʊ6k@U(B6%q-qm_Zw|Zo8^Uoe>h V@oK.||^-~/e p* CO&vՐ%ahE@jBߊ֠ 3\'1Q%>(-K~G@T;h`oeE}(qJ~p_F E@џ'@@ T=om,'rdP}L}wPPkDWf(-(~LR[ Pݘ\N 0xZf'@@WQ~k2C$tTIK~+> RVr'@@br-'> R9VBV'@@*Rkg1Fe> R_ +}cPX\+}#!N(D@grq04e> R6+V}<6(-J P1 nJ!7b> R: ۣ\vp\Ȋj_,Nڣ䷢} 2޼2kŎ%ZQc@U޾5;@8(K~9è 91s8G,ƹq$c7d˒JȊ}0".ݜjW1L,T0+%Qjy>; ;Hep~`kWquxn n %n:dYEIEޞД*->Bl! eEEY]T:~d>{c]\1$39C,Rw%qV} ]Lgp\|4qdr_AdZ| lNƅ ,Se]r0ZSP~kQ~kAO`ڒ} xh08#FO e>cƵPUG-U.ߜx^墒XO ^Tw312ʅ VĪ X?38Ŕ>׬1ĒǕ +k#!dsּ]o LXOoMμӮ _wHp~/+fyM>FTq04ra*rM X7&~V.l?h/J~$00Ble &M>FPNh+}3O-b&=iYcG&'` M>F!K8v)_CYOZPF8c-~ߡfPVN5dKl1f3BZ٧QoMO2䳘J SomOֻ,ߚ2s`gG՛,;0֖|-ߺal|} &qݚ|TWo[\J~GV'`Xi Mq_i6T[WfO`p EQqap3&_30| 5g\x7L%uuOAlq8cM8p^ɯR[2SM>Flit[&]J~M,} z43GMP.L%d>scc.ߪ0'0S>Rυ2fS 3i*5-O CQ_ Z.>_raEQ?2C%&p}~}u 53HʅWJ~ct7z /Lcr.L%ֱ'0^>RE6f SɯȪ: >f򉛸ǀ]хz5@|`ytF.LZ|mX1G ]qײ'P` 3a5х.8ZYjKM>c["}VNRɯղO&/+7AU]J~}5 m7ʅvj'`ly&+cta7"Y0x> o&;5хG7Vj1a_*-_Z3OXCפe)\J~msQ5-\х7L>, /R.L%a|@^g1\T@ VM>Fa|хqVFB>R'+ Sɯcq04o@@M>B+[*_gӻO&- #Kbf!A%wɧ&˅Os`B\A&J:&!ykLNÖԣO&ѩ?_@䓥&BB> &zMHp0:S]@Y|YOXi ёOXCb.}@`A&BLku@yxj!*(Z 8r'[spIZO11EU?BWk#pBbrgc C&Y'!F@Q`8!V F BC*F2pW>_DHӯ -8| %˅Y|b E"Xc%A7 q0 B (qtRXGCJ@lrNƆ qvt*䜁3%rvkWZ3d JO%I%?fK[\.^OUN(6 Wo_jIUU_zbr(GuR;L>Kp]64 [:7c};ppܷ[z (W ?;׻~>Rr|^÷֯*{/ay'(bΜ-{7J>@[GpА|^l'{1tvnB PUKzmڌ{.W&cw3=K^-tRgߙNgp{d G=O^hK>B\th۶uo;81.=Wy)Je^OFGǵBuX2W04 R\.o>G T:=Ps2ND@7O_xhLG\B2X݌an.o_[ay"ޏ0$ 70^}p߃kf  Gk]x^:EQL^X@4/_G?. ɛg| ܸw JP\N1xsHyGGE(r 3Q|?䝵GxE@Jxp|ꕗO*ptljÝЪo# _8|`_՗!NE@ bƩ'=Chko[/@㭪b{۳kM(ɂ?v`nlI~Tu0,U2EUd߀Q ,GhhuoW5s)گ>ۡi$CO!mOc%@E $ˡ&_Ƈ?XyD{[kIwCi11,l=W;}x~XU`Ƕn}_I۽ ۷n*%͵k_sǶM4 Hb:48}omG[:7?ϜB1;q~Zt_(lqc*/PU(jBSN3x B|;?@t!O*vn߆];7tع[zKRx×o042W1pNvFQmnjćz.Ʋ'ߋR1 RbNhXN_?N:˯f>O2n[ks&U x%-n)Y YiӅ70>9Uҏto1եMUu^©yr: |sε}蹼P_~vҫ_uj*Ǎ۶T]-D ݤB@Vd2Ẏ#?'|?B|1Q;pa˷ 3[g_Qߏ}wB4?hj 9`4Ø6W }[I:N?gö!P}9 Hއ4,EQ=p0~ Aʳ* R8t0@؈_S| {좝(HQ$a.<أxc>K; PQKb|  ?ZZs{7܏S'Oc<n;mԻֿ(6 yyqƽ[q(~=۷IrDsS:ֆf@Ke=s$OpX\APsx/<=N)0~Ϊ6vm}B_$<QQt fW^.@Pfy걍TT&z HQ`8!F@Q`EJh7Bb[୳E1gB2Ix셢1ԯƍRgt (q0 B (q IIENDB`photoqt-2.5/img/filetypes/dpx.ico000644 001750 001750 00000023331 14134304121 017452 0ustar00luspiluspi000000 000000  &PNG  IHDR\rf&IDATxyս{g_a@dQ#^ +"yM|fըQ*Qq5.1T`ٷ}齫fyƇtMuM: DH 8H"! $ HbH"! $ơY!d   m*q2 ,%;pH2W~INW""$ v $ HbH"! $ HbH"! $ U+0#l?C$+PH,s0a +O(08"R"R8'$$IF/<!$ OD!@ˉ r3Ӑr*b@B@ @0 Esg/z$`섃sGP @K)i(DnfD/$1 -]Եv,3M6ыn10DMƐDBUsZ:=d<ڞaaLqtzcl-̆)h(hn0; `|dB!MhhC $./0N))@NAFhjV=2QVۂnĶvyQЎ$'c B8X/A5QІ`HJh a*J $a`LԷv'T@Bs]^SD aQH=>M{% ̬TY!$+e.~W!L 0  [Se!%1OCp `:7S+3wiCWH  Wˬ0(=c(,w9k[q m4ߡ#$ Kze7bں(ohc &ck8Y+KMQZz<r[J a^CSG/: M64Ы SJv[ @$  %9܄pa&fM;ZQu 4 !Hu:,rcqQ!W ssj  8WG\3PwG _c񡬶Vg4 .i)4sd@j@m ں*%kt! ȶHmA`Jp<P}:a>{*![Źi2HY}{t*be0ǁԵtG `(8LW+e!-&p=@DaIƞ&T.=RHN!bd^;C@Q^=f-m`~!1;<8TO9H!L3(s`Dv:3Rm1 >3QZFw/GaHu:0 gj&RSD"fo`2IN3@BQ^ rM7 ()Av=zo(6k/"@Q08iNS@ANd'TaW "@ dR0q8ńvoub|8UPF@NrZ]d4:NQHpd s쭤H"8?  !:9c l3hF C!:tL?9ְ'k"oT&H`Dv:fL(Bq~&"+f0m\!2\)7_џ8L9ᰉxS:#Qڍ{g9C9ȵS?%57՗08y !A`(D~VZhE7$+7S7r18Ef8?}a$ݳˣT5`.,+9L:v?"7TUyC'?$Aq]18.'r3\LC &=v{qL_\s3&(H 'ӅLd#]{a`DA;S8v|(,ѡ ;e$zws +W'^Gn$)[~@s#k h p(!}r7RrB@ޖߨ΁rA@ğ8Y~#rC@ĝxY~rGC@PGoC9[GotE9~H1k޿O$D|k7RI b²I ?:T5O9*п/)EЗo{#{$'`ѐbo$sNX~!Ys$n)ɚ  !U~@ 4'UN5CG7r$D ɖ  b(NRH7RH =FCXR{N˯ As$Dt ?H"*h@۶ caoCE}s$DX v ao   ÀX~sU @Y=,bל@ @X3~o=,Q]G ٷUm(h^FdT6a{Yڻ<$Z7RF9kVnJkkB'^(_--쳟14bסȲ/0,C8l\v0 ZG {*hRps[ @8,czvyN{9܄+y\H"onbk(v7/ I2vա͞^Xo$v_j X[|TCE}r؅9C XWCS!8.l?h_,zQZFweC>@L]V7 MM-)RXW*!=QAl]8  0Tԛ?'`I_aB>@` ^|YZ]d+V XK"1Թ;>`d+V XG|C>9 b2d5,#!^_{+έo&˯1='` 8*c]֚vasOs{OY0Y~9s Q!s]8va&A`i2_N)-PЎ=a&o VB>=xWcOe0Y~09Ӆ$QVf;k̵TbI}v sDŽՅY~-vImrC>@`}ՅMT],,9S @"B>@` enU.L_Sb91&08v'.L_H|vD0]14״(9E: Շobb’$aU3Y~M Á*f 14w$.<`$:'80i' ؅ .L_ПM@N 1ʤ!xaXuaZ,cor |zL60Y~G0\ⵓ.e< S_ ӿq9cb!x 08Uf@U, 'z!x }Յ s,V蜀1Ԛ!\pƭ@9b'˯12'`Hae!x U&˯}02'`v!.L_aTN |Յ˯AoAED@N OcO<*tm MB>= ăhd/9q E ;iDDd&˯8$ `dMWL _.Lߤ! 'B>f [ Y],I;n!x 0U&o1r뺤P'. Tl&o"  b pM],ɍ9B>q.^4wzp0| .uo5!z'1slƘHOsdiPJ!Mm.oJ=r | "A! |"!XCk89@D ;K @M=?AXsਐU!s18' c a i9:'ٲH)C&&ڜpEOHUne8 j u%:C&X V6cDN:֪~!E 03oNi  $ HbH"! $F4 T ,cz}6SoDz%7P ,(/U3gZS ̂Á1L,s@ cI@HbH"! $ HbbDZ,FJUz^z^DN C0@pj10 Dr#rܢF(B0xG "ξpyJ(F T}\e>ƁT8b̿ c " (•̌ 核ǎ'IƢxd!RӔȲ~(o/ouC"{Á4dg ?cnj¸%8aJFB^n)TG0Z:}AC_W^hlz Yqfs..S;&lH`9L;eΟw6.<N;u*22tzlrt /'ƎY3q1l,ydT3cKP4o@B!̛3 ]A@mM#kR?oƌ*J 1t(8</{jp[>y?wn\vɉa)0qC0ܭmpaon&̘6x-n*T)O?GEem܍7~@/izgLopV o!z,V|`0]K\w*|?Y1md}m, q`2 ]źT:ܻt8z H@[>7.[?i|o8غm'nx5|03UĚ!G:c A݀& M~VA@-m/~w@cG؜cdHZȲǞڀ6[FxtӧO}j\hụE9|>?;;nEsK `D[X&L8,I83p-77Z3f=.?# 3ұj租E8ޣ/_z38m:C@7\}2Ȳ s|>46`9v}Un~**3B );ц!!2 ZQZV7zm[Y]>ۊNEZoܦ_ݍ\}\𗿾ToXfeDA3AN;7r= 琂!46'aر|wpג1{,]{,18NET\.rrs0qD,B\se?G*r۰-YƄ q;9qaG?;v/zn))NܿjJƎ@ ȲJ#IE%%[nlu׷ħ:?C\~xg?BF=+=N qu`hlvcŗS? $BIBIhƫw 7!(IùԼ-}Aayxp dgeW^m;, S8/7޳Y9ٴ7 $FAL:$M9XQ p,\p9{<^EDe W b[{]ޞ^@چG\ǫٛ..?*$aɸ45;te S&MCdd0BwF#TܷjƕVm?~"^| |mg&{W әgHW/# 55jx{ p( T$ @@%6+oE+>_XyH*!$V-[Nw ,c 5TM+auA j.!E1n gqj7U=3p-GQ %9!0 pYghj֎ մ%c ))^1d4ggC0VV]Jw߅QC 0AiӧhV{>T'tP[߈`(p ]Q2R\vb i$F9Ə-AVfu [vf`rR1"ƒW`D~nL[0"_IfeҲ_ (,M͛[s3"VlvIPXXvL8S&˗*e 0'4׃N۲3APCzzz[?ċs眉G+)L=˗FQXK1yDzLCp8PP"²$),Wں"$󡵽>|w?{47;+,8?Jαk;4켹k?JH+=өB!ե/|//u9$I| 9̞53ޗs,CW=ѫOVfZ% `0c$o,GB1=9YXvf9ǹgƖhj>~\ 9z 0hvY{w.2`PE+Ï-UFl *A?` WLiBB~?[ms9V?ò[oP^T(?\'=I-׬-ֺҿOzZrsQ2zM9fbΙI'#-#C1k87 A_ߢ4+3^/2G{Zuy^5W^k[ zUyTmU2("͕L ?#Wb_:4o9@f+2N68#,#|PF*Ky ,E hk2W6w ߅W?C߭TIAŧ`VOUfз^Տn; 1FV?Jßrf>OS"˺4\H"΋q0cc>68+8ҿ4Z1V$W+G0t֏1V$EU)+4a:L\,⬝0cc>q0cc>q0cXR`V!"6 yNVV;V. AfahY&@E @ j$VO8XqX#Dji DZ* C M@5@0A],pp8 8*E#EraYd A)%#iȬ 1?%@8ֈVAAlP."H@r~KH'i>?mkh3H.#k!2(++XEr~0 Mɹ9ӎƽ{|6,Py !LZvoACױ06L2F98J l֞?y,Z;XCY J@U~f!_fP "$WOMMzav ++!LbnxyƒI$0DUS1?:)ﺫg#KS !17yg,MN";n\]8vg2XpHF6IGvu7"$Y+6 MC|n߹܌Ȝ "B&wӁ"-HKq!"LèP Ҳd;@#WC4Ƿ7X18E=8m+IWTW3Igg[ ,Cpe 8n悙Y #u)05g,e3yҏAa!gH5)% ]w5RV07;zZ^i󴔞4MS}S !I$0׳8g "$fg0:>m: Agg," ֣(c{) ]ToO {ϳYL @J0K*D@uՅBlS{oRb2N/v8gHPR BQe#HnцZZL8z@+v, P\vb;DȦR-XA <‚؜ 6zE!!ny XY\,S}Rh;pAD4ʭp`*Z;B`5q!DHDxW#ZIJ3D4tLq T"R{k=KT[( @!R"X_݇: )FPDJ~K}(WH-qH)-  mhxgG!扃Z>bpmG!X__+ԌcQK~˹" p@!e45I4N]8(hmǎ#^خrJavP)Dz(ڎ͝YrJ)ABy78惇/T$ƹO`'.izw5چp.$A&@q;*±F4"ؘkFҁ8 ecO 5wJI %@lDwFv%2eh4 ]4-(PAab~l.F>5i!H (5.i04-j PAU}z0xr\S}hܷV[ݹHԺmAƒj>\_Aߒ> rpVvv<؂ƒrpfVv<؄٧%e p0Tdk}G%Ve|k LOŠY~mc p0Y1oU)x=:̵ZzZzR.-gDS{!p+\ %Z_SJ~>wJ̹V[}',ᴒrOUΡ%? p9 D'`qzoZ?}"ib%S+z勉K~>ojV[ p\^+lƒRmׂdn.- L{,ۯK~>V/='瑒rxOC%""'0 S/`x䷜OAˤ1޻X X-Y~{=U[2 &a`} aNJq=w_|.<'WO0BQ1uٔ.%R{fnWit߁{]+^+JL2]RM/ AL<(%Bu޻6^G17+;So6 ]Oӯt_/懇wyMHm,{ֻl>,-z{d&1AZ:ᮛH}!ǒrOs@DH-/c6tM+*?aea÷o}qo'гYtFji8߃/} )1ce]""L?ttnL]l5M߿q soy' "$1}韛kY ߹ra.K*^݅LҚϬD˅2}p}H؃{X]o\k 1=}~74رӒG0Z]} |M>6!ϗ sɯz;OM>vȕ ˅J~=<} BJg 2rM>;4XV0|{%K\k 8Ok* ^.{\K~m>W@)M>r1 sɯ'(ǮqL?yikrou8O%@e7”wճ J~sɯ͈E #YQ删koBrau!wϧf'W߲&ƕ+ra.2"h)g 8:,mc|ʅZ1soM8O{ M> s\xC,.' 86a`dN"dC 96rZrb3"`f1OT!]gu ''xsU÷Y.̳:pVT ,.`ʅQM>v !8>*_qJZ4؁0 sɯ39OGZ|l!%ܫy0:jNiAfW˅kS%>jXg_u@m•|ܠV sɯKԸOf{F*mqM>Ag\K~uLTO{K|`F[.%D"'0[>J>3֮Dlj] sɯMWOGZϓ~_ ]K~]mS@ުvǖbmva˅'P&|yJ} sɯwTO*ǧy&[30zG5r4zr TX.%S>[O6XV/ wDK~Z}g|l^.|م׻3OiqJ>.^.aI_[f>{i+&zbn+\}OWƩ+Eѳ sɯo'`i8}%7X]@0Z X>nra-_0 X~nZxra.H%_7!_0 T|7ܻ&[ VK~{ק,~kw,FcOY'Vrc/kƒ74[[iG0T|@bvi>̪ZO#|je5}%MØX'PbpcNaz%70$'PQLDJ>E}E/WaE(M>9Z%}4 ߿O9R}+FG0>(~ǽhhi A]0Fo4H ~s6 "ɞG45avW[`=cqC=c>q0cc>G" sNZYq_|0tnb-Uw;nW0Ùs0 oWhSJ ۀs "Y||1`81|1hm@O#B%jTX+U豖2EU9ϛeȤRe}ID "!*TUD @& DP]ݶOe !B5y L&?ݯE@UGklDK[<;pshkoG}4v5ʕd*WX+'Q+8y4gf4 _OׯSؤ4گ~? 4 o7{7 xe|?|D0pܸz ҂^aȇ5\hCCYA -kQ磗w4xOC-p@D//&n^+8 n1fANR;?g|?Ͽ ߽L:]Pj2*@(%nLM|.@c_?R0 `zr7o[?iE`?NBIXw=^y7RKƸ7]͛2ûw-{~P!EU|^ ! g_~D0=973EׁhnT3B!H*7@.ЦRb4͒J2NgW Àbx~_dQwk&vu_nV:@sK+;K}Ɩ 4q5d-9v$bvY|@H) s%ni)6}H@M{ܥμqʦ3"B"G{mٖp%ѧ$Ud&8/P3SSHVxu ½.lٶ}~Ǎm:= *"!?c|:pؒ3)%V|Ruuu׾3;+/VQ؉+ownD_#<{󳝝D`UpT Et]Rt-g,wW0ҲegI?=&Ƕ. \g'*@"rS+J):f''? =*~Q\x߿ۖ(ߢ7]i8u4[Z0=9w޷mz@[56>}kH$D_OvBOOѝpp]vNeJcǷa{#'cϾ}|Lķ7lM)azٟ^ݻ}цx+fg/v,@_sҋxe]R_|uCUU!b\0/} ՔNAEmҊMWR~y;喖6IqhqR;#C=p> !-;u}4[:p$7_R"̅ E-'D?h,c7vwW>MK[~*_z[( ]EQl5P`G^z^z H%:[6'`+#gbWs3ggݮΜɧzB! ؈6ӧ¹s8u4BUUilЩLā:|x8x0< V _#AEDPT@zGmh@C,p8򺺬ҁ&RJ4bx;0 |A4 !w!qw"?R}:K0-|# |2 n(඿w~kp0~\Ęq0cc>q0cc>q0cc>qlCnV~GyɢfMQ(mv}bq{x@]RJ^/W%KU_,^;6)%h[[_ DމL)q {k8PU5i5]FUUˎ(?VI"ϽiJBpl+eUϹX2>b81|1`8_ !Mcj nWhW_}#ׯSp;P q0cc>q0cvIENDB`photoqt-2.5/img/filetypes/unknown.ico000644 001750 001750 00000006347 14134304273 020376 0ustar00luspiluspi000000 000000  PNG  IHDRy IDATx[lWn'(6urLP BJxo+ PO WE!(B$$$.vˮok{3{ff&vw?.B%J(Qzl\lA{`%? ;F 7wxfۍ޼rvF\ ;ZtXؽrYJ&JYdXۥZ^$k6Bw 7Bhr$6h>r黲[A~c{:% Cm% ۷P !AfgpHY6 T{gyA{&@ ,H_Q^4CBHK2se:BH߂ `0x%P ;(cpF0`L@-&/(j1EL3`"ܛ8L0N'(StL G #`쯈13a48f ޵2&m. v 7\ӒN&s$PUtK7 =ujF>sL} 8d?poq  l<8=?"~HC 1y4.p}$W^ƞψ.5^1F UZbX"X[3< ƪa%`?HfiB؜7XO,3?"EK2bXҸ=~F|׼X !0|L0u$`0agsy&u$`0%`H`{$䫓ifO,c ѭbmVO,{E TG QY=\B _GeIJM0V ]$PcM0V U$-;dM0&H@ JHQ`oo4D 4s볣0(f Zaq8-:Oوh"D8L?@E hE NƉ#2#MgW O -~ љ`0a hpO,HZ> D[e,+$$5G;^ đ` @H$+*#6X(4`8b)xPp#ꀵћ`oX"ډHF4K C"pF !0O K@n;q`Q{ G 4s'cD@lg Hg1\ E% @d˕qMWH@hU4 LO#@G % jȈ@$if!D+\v=WMI@Dk+w*k5$YLR$k ]wU 0 Ꮋj"#cHQUGHUG 5U \## 2'{5G_\PM{ݷH(QDk~8~LYF*J @E*drۭtJ@-`'] ܃܁`?ϯRgwټ`W տwޙܸӋu|Wǭ? ~s~׶~yu_7/@'(of&܇&nP/>.v5!d:vи]'/\weS?O?:1{gWw>|6sկrʝH1H<{c\TrBG]!p[7s6 L ֍ͳ?P\o}Xro %|mׯop7kP/o¼eO7S5a/} `ڹ)m[{_ $0Xq0aEcXq0a1p1nrL !#ϵuepygb)Ô0H26cXq0aEcXq0aEcXY*NCWN#0Mn _Q SvM1 51 13!< D:Wx:L|EÀaJHy- BM=_MJv) 4Poh}C B$:Y@8N6%4xLj/uq{RJ@6WU8D66sD Y 8]cHMr0Ρw(T絀=$D;8ʰu֯Xژ倔\jQhK~}qiYk.Zǃpɚ%hjFy-eV'` @6ᲵKȕ Tt\z1590Yfol8Ԑz6V-: O"iVR" ,êMhQC{J%nξtO_aU bp| lE,ȺU "54' 3Haad"S׃;tYXڀ8OHfNYKZ1+`l*L"Ô""&C]"OAbfΏfq~ekYI8"M45$ԐiHtjn@MRh4`MLCmM qMv T;2>Ջؐ[ $jbHp1?%^\@w ]Kn(v?7CKBQ8%m ϥrq8* ],-sO`>枙vK~+,3W,^O8Y~=*-1F|=gun8 sAwY~1@.!5W;PNkQ*+}9V"}1*+}.R`8X<דAt6R}zV"j}:Vq"'rͮ'>VVB7J OUl728>V%A$ -` boR]P/%>V V"}z8N\3W;fC@L.mOvD86|S,P[} P}('2giJ9܏c#N;W.|0"K~_'F Bh sɯ3fO @|\gJV!Im])LN_Xi~j Sr붹>A@xѢIrv\8zABQS8r&7"Nf sɯ'( }q;xK~]>&&w6ޓ*}zB>\T/_o'8G_r` sɯTP?|}?Yم[* '4-__APO@miu {$\TO@kM+qoeo>0J |\\0p@ |+Z.n43af_'TAڻ(_%'F&7H 90'0k0B+D_eu(|:|~r)6 Wa>| ՚| 08C\$whʅ=]K~cOׇ>`EE|\8ib}| 7=]K~ǯ<V مw90` x'm #..L@g ,? "  B.t{7ȼ&f|vǕ{R"gްT{K~>OK7tnva. /< )ti sox'nO81p7KP {0o%05م_rxk0_*-b+pB_ra. =!. 8jqra; so4'l(O̖ o?`Q.%z&W ARigsXD g]K~#gO+#ug|\17ra.,! T*)K=3\mN Tr]mbp<%t@ruCBA70)%wbF%U WuM>DHOa`$˥3N T Aħ s}&70 +3h#{> +0$Q]kI1ET'`/NhYgS>B2:70{,giǸɇ1U'`Y ul  # n=aLai@W ZjblԌX P u1Izs 갣5W'fc`,80"`,,H&? "䦧:2> M򥯞ue8g).2@׭2TaZ`0` Nd,80"`,8ee4u vg\"mDISbո+>=BxWa.n'eju)%>;@Ӱm.|\q1MwzV]Õ.Ī~MjߕRTkJG~M@"`,804E3epxY\yyɂ*I)y5jc@hB`ƛf ͙Dx}˖c]xc5Ec_^<6A~Z\Ktt[q4 {/)[p oy箱ޙL]s78\_I|O sKNZ vXK͛ 1S9D~}Q/qm\2TRb?CjxrUJ}mO[/?r J ѭO[oASK;2)|_Gl ~X}j>@i۞߅}mY]b9~9῿6>ƛƳP{ y:{p?z矇и @Bmي&\t:_Jg9wnވXֻ4j +߀i]qf> (ؓ: 7wGU" ߇Ԑ>W f'l ߼&,^سK&߱uv[~!c>ˡK/;7$gmǗ۶ ]\0E zɍo{3j?EpNttvgYcPLxigiksrb8TGKtZ^|zm4<7kkx,ß~T2"'&m K&YS@WOxYˡ͛K dKz{>S3pr矇u;ŗzW\|T޲er9?&_p8T$^ze/vc9wo G/>" Oy*2 'Oغξp嗺w%B~z+xupp_pFc?{P;7oB]C{؂Gw#[×/+U-j@P ~pr躵kp ovq8~_B.7m9<O} O@%De2xѭt۰fJwNfe[/Xws_p4cO`tlr5WW_q;GM`6>{ϧp٥s_䉧-m#֞!o;g>)ElێCC]xk;wbo=;HmOjE f8E9_jrlc8|VGC`}ߌZ?ima94Hj"~#[_wqiJm׏Pi[ˆSiuBg7vR_IߋotU+A/R"L>Y6vfuk}T+$jkyw 4MҥKJ5.V$<J(e~R2ۤFd,80"`,,hb@J0۶d[0xGCmrX2a|`,80"`,8Tڄ[IENDB`photoqt-2.5/img/filetypes/3fr.ico000644 001750 001750 00000021705 14134304047 017363 0ustar00luspiluspi000000 000000  #PNG  IHDR\rf#vIDATxyxՙSnRۖwf1,$%H$$!0O !ed!2ɰ K؍M}WKUGeIHZ?q:o:a8%B;@D  C@6 l A1$ac<}3mΕb 0&i;.p6zȒTc"B%/\Q K W2i l A1$acHƐ! C@6 l AؘV`"O8pJa WdRR2 YJ@qo 8N8.L :BA%G  O،1큧 8K<)1 ! t _L Fx؏X4 Eyj,AF@t8)@y޲ 0Q$! @0pEFx$>F#26ft[YJ"44HpJT)( '(+rjOWEB*_D5$9 ahjO?dIP_| DdIhh}G~ބX$@$ @j,%uFyhH&, *"! t6"cHF1يD, Z@D,wd]aGww@>1 ȀHvFzldd=!, 01'0<؇X4l~`d#>UFN&02h̾`Fu|ݗ]R r`d)^|E GؐLc hȸwE44d"^&`8爆F(rd2X$I$Ӡш)6\Q>Ro @0 %i @<5l%_hj!Ls ,9c,F끝hCSHAJ&L5VdIpw`;4` HMM$\PdkC4860&FLsgu(f$10Toapn°0Dsl:{: ,@H}Ό,KmkJoL@ii'zWM0a5&0hj1 ad SN. 48.S]XHU 6e&dm̰9Gok#F`RH8]%DL+5k1z(Č1DAw TUb (q{!b (ڛ2z1Dæ iDJexfwiec`w"z[ַBi`[^i邻Tw'@_7{-#zB0 se(x9啩+9; 6]YQd4R] DYUW}TK;1а]m4 (IgY(ܘ˒\rC0 g | ].To27Ϡ@)(eյ(6]v2+-L0H9 Ȁ 8PS8y&Lj0)'$pKQ`1D](vb'FZ~y (' U|Y0.sէf#)d˯v"=/nHf,\ qsxK1wrX'3hxr* Ȓj-YT[YyKVYZ~s|0wRN $9-F]q(@8T[y1"`;z('0+$9*`exyʌØ&SY9 uKCmݢE ї7[ `rbjy D C%po+:UoY(Z?c *@yb1 $9DsQVUh b0QȲ(0 "D<$ К 8J3fVhSR9zۚP[-gcAFko/wSN` $.dK('Hʯ>TH  QPҖh,r! K('0 Q0N߬! B`U~u'(ZT-|i?BsW?6OaZ]  4ؖ\ 7Sao n@@hQ, %  4X߬{/3'@@h,0''@@A-XN>9"jH07UN 3X~N9"gb2n Xy@@$˯[{ Ōl98lJsHIY~;MiXH,I[~-{W  9[0'@@"\ׂ9B="lI N`,iU,r9cH&h>--Y31'XFbvnKx7s X#'`_1 ta " N$be-`1P`M]k  (T.X~J Xe!>EH&~,{;Xn_kr0i1D<;M?;Z~s9 c $%U3 F 'HȖl1{Nr %ho܃p0 zt|su f XL8zZ1ߓa1#)M\_ t/'``Ӊ޶yݵ8Wٴ=77,!1Gqx/|>Ah;t?f7LUCh2`cEh]x4v1~t'_aL@ph O?g̖0/=!SeL=-},`L+Ӆ| Eim]8e"˯%'`_;L)ioY~5b<'`L)$>G Ȕ]xmv"9,, Rڛu10B2U~ 9S @6!|.va9lZW9s\B>Gd9zZ5fN40d).L_}HF 0L5$D, }B>W.tvaꌁs"Z| ?م[0.եaȧ04]׼,͊sB| I“-U1~YۅkR 4&'`8-S~'10Y~A*'Ao[!0)D!V&˯H `<'Sڅ T],(9C x~HمgpzVB_ca!FZC>st5.( zkD(%S,],9_cv"مk|(䷓`L@va"ve5Sc.L_P̜@Q!4u |+'$S]d5# . hL.V@0Y~xN \:[M0DiՅkjs:t!_bB._[0'˯9'U=SsqD3pY~M9]@$t4;S. S_gN@ko!Ѩ0Y~^9^- hvq˯"#<'P0lȧ0& .!C(*`!L!0,T@jB>aH&{+QR;짐A9|".TvCb#A3Ȳ&TTpdC{ KI:C&1FiE؞!Uk BacHƐ! C@6 lLFa&0,\}!ZKDEy ._@rj k..SȲL1`01U;" A1$acHƐko@[EI)Q L(BVaEݟE1[KxiQHf1ČAeD# AWG;׋"0$NJKPSÂ~s ,XҲ2p5J=5-C aS d'eDQ VC0 Z[nٹGWgF#.W j|>p uy8-8 bBHA 'XA@C뻷!ʾl5EEE%j}spb,娛e` Wi/>Gq00D]k#z'q5O"+ؿw7>x2B3oC8{%p(wևc?q&9X n@%8a׎w5^vwu==)o","f;cqtw፿~N\}'pWy{{!=Ց-7ᑇG< 6O?mU>( h$#4mՈ>o!a H$xdlG$~C_+ '?~Cݱ4"HేB Y APVV p 'bu:] Vie(++3mkE]˖Ի}㾃h3O=Amf^tn>=D|ljp ,^9s--Q 2";;[o?Qx2\tIAf.K㜣Cb3x'YA(@?z yE\Ē (Q1ot6>uuzSNG/ؚZ,dž??p~w V׏1׿-[/pCE,_=O*f9 KBZ//m{ }> >˴駕 (ذqV^S6p8NEB8p-^DBՂT_o/PSxRYNn/lou\x?l89}+hkm$aq'?q[~i>x<^~ 8z?eeˏ9+WV$$I&`6-1`?@'./X(p80ʺP9sqVj `HtDx^TVVQU fU e J&4 0 qpƶ`ܹ$*`[Z1 Eo ٽ3cۆ'.VpDBU[Eu $D+ ݉H8O_W%qt㕗^QilũY0zZP̻)c `T~zKi0,aa4K/<ᡡIIw Z4=hoS5;D|[z &xHDbdwIB6(b׎pp^UW7Hr AFM>o+V*㱇>d9'~Pv_>V5JWc?P(s.iglҭf GD8+֬[_pzfxQUaIEi΅(ؽc;}~+>slj+VH@ii)Vn?{^ITU@)RY\:jj'dYF(DWg;ޅ=v"823Ϋ◩P Kp[qEbSPQY9]o|v㫷܊uJHtdd( EqQ[,Mgz *Muc8 سkځmO=qյ_…_  :hXw2n8VHHD"{%];|v,\D SNZ_gos΃ST̐l/x߳w|V pSi, 9R\{ԦZo~]?ݬyc‹.`EC,6PM~pO|2lc Xݰ+W[oûo3/Kpqk~/Z4hVPm5>& p^Y˖C"J%֞|*~#X!kk=?5~L͙9㗿#_MgCP9o<O齿JHt@%wI7;s$WH8d5%%%8qY`spy/݀ixca]Pdg{V5ضz{m'&0$ȒIP]So?Q9ů|dGCsTVUc)el;4@Wg'+$vƯ}gYտy?bϮ4 ]a:"-.?O'( j}>[PU]@?/U +$:SV^p]5,7bKTbϮ4 ^OqwKRRR^TUdl;8Џmz  (#_1v{`dYƚu'NU?=,줵 B+1V*0,n_q5+2,`H&CǛ`(B`%>-&v0cҲR̫OIP'9OU^xw~Hi c }M7+/? Cf(BeSeí ."+ ]q5^oAl{fAYD7_ǂEvذLnXK 0.|'.X,aۓ7O?-*a] `Egn†_^W~v:ل'@0 ペstutBXZ_EKbE7D"#8DG[+v܎}=ra}jgs \~͸oYH}:YFpdOs$d)֝gM(Mlɧnx-c_LNp$!#E<y{^\77*]q$~;A` >w5زbg(8-hX^U?|sWC?,`i\;W]%ySSg(cժc4 Gp\]'߻A߇o\ǧ>yU>A0EQhR<'p=/;</֬]q7_5<2BMq sǟx~9l]5DQĉ+V⤏•|}=hj<}{vЁhkm@#ÈbH$^\.<^/jjj~9V7igUkP 8p8/̺c1cte( ށx<q✣U9(p!n^ܿ7͜s\.Ϻ2h}/nf*ɚOL&12<0bQHQrPZV*|s;5x`i^MWEUt+Jqvae*2~b=p8x6{bw Dee/aa/s98P8/+$ߋ @4AXZ$C@6 l A1^p8Yf㧏BQ y+cN@ ! C@6 l A1$ac?tHD)IENDB`photoqt-2.5/img/filetypes/srw.ico000644 001750 001750 00000025710 14134304240 017477 0ustar00luspiluspi000000 000000  +PNG  IHDR\rf+yIDATxy$UgUVUU0lm#k: 69":⸠88* Ͱ(( -Bwb]fVfewʢ*Ȭ\"39u8M݌č^ C"A00$a`H! C@F3[6AjJF&Ճ?]F8}F\_CVRAD|@! BU3|i A00$a`H! C@ AV`bq0SIV8P9,ˈdd@A$0$$ (Bs*L<(Øb:D$,/|>V 0Il v3AXО  "a  *8is(YQ a$8vԹ\r!" QPHrPT)?&CPշ.'o3mc Ϥ4tKDC @(&~( Ƙ>E&Q"/(~dE8057fy K<>"Q>))dm-pm>DAF,ox\z0 _MT8$M002Rڈ1a #y  @(bFea:(Ui& @UB3~[ @<>?|S/1ECh,1gï'&Q>a?#I``:(HR + >,ã> 1LCú205@$+uW2 s(WDbu-T~!H(¥&T# c$`1Xlp,F+V?$a XRc YKݕt0'|G>!HB4&Ր:QY\F,9Gz00l2sI$J`ahl^?s*76z<"XL油ڭV4D?3!]l)*#(n+ۂ*`x@拚D3$1j,f lF+[~1 clbbD /s86جV]_XsT9MJgv,.fUUۇ(EHZW*$u207<\Ǣ 6>嬂n(E+'Y~sF7 f uu (zl2]˾eK2o.۠@dU WSw'UC]-6.G'ْ- < pPW[t\@vdY,XSvs8lV,mj$V/7[91 h@#*'65A,х9jAf,f]Fo.pK9-dƅ&$B8lXdI<YX~r!Ȓ/ms5UUXl 'k!o_> d Nl] o8D Xl l}LB\,Y02B#VmKZ|i v;C^sAP[]U˰(Vş\,B9H@9# N *8N:3mMÎ: U;DQԝ`0B{'ruLtχ"<ɯEp "dY 1Q I3;X-f3@FbXZt1н@sȲXLFL(q!<%Q$$ID1^ԓspQB0019(otQ|Ag'&,fsֳpRεS[[à+h$JݻooPN 9$DQȷ7>2:z('0-cyfƽ^ z'n<,$DA)7LMOgr Q@޲+{! $DyՅ!QXlIF   螱RU_O;*C%fO'@@|U-F^O+_#'@@=X~9"o F]O fz Ag\0bNX4fF[OX4z  E;SocHEul#H)o.%'@@LY~! f͕ 97[  -˯b *='@@dM9[~ss$DVo1 JBHT7K*5'`8P](K*A@o # @$Gad|bBUUt o$ΡJ FTq8 FqY !1 oh `:¡G"G,4lͅJ T00Yך&|>iw(l@E @y#B͜?FG_nr[,*!'P + uta2>g4sBS)9 *#V{1-HHξʶ -d#e(KH)n[~')'P)oڅ+.LP.9-!|  r d)sŠ·vZ0rbP9\B>G z.L@@!B/s0Y~se# ],E14'{Wȧ.S0Y~ iN@ϐO!vNȲ t+1 ]Y~KsB| c@g_T巴1'K(tȧ.@U~rb| o]W&˯.[N@W/QO! p]_va =t%XgB>@` Wd= JJ) pd'cz14Vڜ. nD!B9ՅKWUUtWp[ڜ@`6!׌]D Y~ulN`t9 lG3d.|4va }C \)]8n.ޅHJ&1 /S}ۅW],C"'0ZlȧS!3[0Y~UUY@\B>@Qբ؅[~*'Pt(O)]7 U1Sc pxpM9 @| C)vN(P!BAt.&b'PO!.&oS"7؅oQ *^ɧks (z!RSa 巂a ^O`P!Bsq߬T" \!sJOs,> 9 B>@Qh&˯1(dN `ĐOkND_  '70r'$‡N$.L_cU@!B0.x*' 7SU&˯q)DN`pRȇӫ|9p#Y`|%a | lux}~||XV눇|,4e9zLxDN6eQVE(S<cz78 $) cWr'@rYM!ғ@@! d-!؜fAŮ'I(C&2 |B,&'Q|BC]DQ,>u8lA, BUg `*' 3A! C@ A00}v V$"K0P6>믻6Uk ($>o2mlݚ2AIsejrEQ(LeclRɠI@00$a`H! Y'jPN6bk4K~wH$qa˲QwtD{;zz{1:6@X 1X\hllDeX|9ZG'b,C4qu&&0A$H@WD"%mVkA9SH$9-fsPd(|7e!0=1647`58۱e&nBE{rA$I0Mp:p\hij XֆƆX,Ās{=O#aX/w܁ԂKDQij?})UQ\sUo4H@1Ȳ>{|p1=t{z޽pXv-.h˱efw$MMغe3.<||,ok @Ex8+iWywtv}ҶJ  [o|yt0x v܉/mlJs@ @/~U+W` >phm]VAK3~DŽǓݾOۆ1ïsAo FFG/ފ_yzi[K]oހ?\Ƌ2>>Q7ɴmf3 z0qǗ䉢<'x?:>OWO& e<ɘ EQ2jE}}pq=x?.uWt0n3u2sԻt:ng||`qHP]D#(7Ľ_T9݃-L<prPSJ ד`dYϟ~vU]exI$Ȳ} CÚ?c6llA4x WȌ{|| wrp65!cFcO6s׻aJyu <A@gW(gvnL&0&300=Q9z|%}h(eKSOwbaxdC#YM@C!%8}?VMi? PWWp(B07cȐC? c[ɄO~c'?YW['QXvc͸+184_~'oۆ{E$ 2WUb1Lx<8x0 7,^yChkm=QI$,iiIt),%YC(t0]sc#$I2#CU5ݝ2|7rA唶^9U-lRoC69{{&)#I?fN+/{pw[o_3 $͆$ Dl6c{v:뻈UU檫?ݎeK Vk*qRgfc M Jz!577CJ|8כZZB4M{ADz8 035k53uu8=rp8k~JӣЂc9Gsc,V wbY111rZ Ɏ}ܿ1h,ł$ e9yJ%NĶ֒?M6 ={ޤvסY9NGgWwR!PU֭{:i?G,m6ԻKz <뙟Sz`VK}'UセNapONsQSSj yw'R~v͸KN=piX X2OMN /l2q"thOXބ xǰ! .!p1!P[S*2$ X,v_Q+jBIQ(WmI݀V 6 Vbx{{wfͳL!6㟺qLO+BӘԘ|lOnŌ^I#'::2D( >`*&'&UCEu?~7t~|u}vO V\T^ 1,}ˡGBK)c\(YZ@8BCx8Sncu=~O(lT*~`ӆɇҌ9EY8~@3խx=>/2-ddp`u'~g0^ڿ/ߏep]W\m; `c,^Kc?S5W%q眣%kP8ɷ܀1OL``pPK,?X,xI1`$hՊ>Ի9o<#|#7]_r'^yUDѢ3wI?3w豱qya|3Ք$ ;*l:wt8Rn#;9y jگ@ǎ?XEZ6( ~6Go¿yעڑH&^M<{;\8sQteDӃ>h흝xqر\xyxW|ߞ\.%mFS0QS+=1!luIF  0</>b9%~3hDžM۷o =!_~OxO.''zJv-J8NjJs>('ڳˑ a5\x!G}v[pǭ½ǁC!<>;~7^oA$?r7_piXԔy{'cAct`4Z8F 4pa /.8T21]_gݣWUUUs}qlf Mc `COo߂66 ^|1Iݏ10>@CC=V*2_t8eVG]\}}Z~|Ph4'n9Mr%>`|D{{һ5Ѻl)֮YtǎԌp03ƨw˳f~ӟu IvO-o{晓^m-9?~G>G܃/|3XjmgBϜsTUU]WM$ -}+W,(XzUױX Ҭp8P[[K0<Úիq?~>pumttvcy{ hjl瞋 ;{.2[{pE;4m#,Lq/5H4$RXۖ +ڒnAu`$DUUcYg߸`0CmPuFdYؼi#k_۷o״G}l69@QUOL=xڵp:PUN7lHa*Zu9T*$E@Vlټԧ`ͰjnN|( VX/~2CeQ_IifK[O k&^Z h$EBQ\Bͣd կ//Qc K[Z F jņg9 듮<o]e<!(sԸ\غyP# }ºk2 G"CY4S ]sqX sm˓VdYƁW^IY H @A(YDjl6 UUr ڹSS?i9GC}=i;k1.okEcC]UUuX:ۋWZJ# hc4H!2{n9לuZ-`E6]}ՕXrEvH{z✣)ė _8t_v-IV[6%xRfd6@1ỹsv< PU5/c8ޡJ^QUWW]K l]lٴq زysfHacA0TEŋ}q 0% x74_tiџWcxWk2.%F 96[naúu f9Xv jjk^UUjjj {^|{އpbƫmM?Q161=iL I֯][ЊXn-wkj~<d2E6cl"պlYV۫AL@!@Ww7qk[o?;{!K4@'>R$1#G᳷|z)M؈M7.$I=;5f"h|aoQ9沼 IwrQ]]ezXi5Pe,?C]g~N=^ $ `*@OOKxO[yhkk+(3w]~߁xz^w5)sq/ puX*d2ax ?ּ_ |4$90 Velv;N'v;L& !fmłk6dkL&|rADQ_˕oinlB$x$&͛6f"s75A]T[H8Qtuwvtvuatl,۾xDž%=QEi.DS/=7\z8MsXnmJ1Q9Ǫ+ZY5Sib}^ W 'y939PUU-1+5xI @Jq\.|[}6],*u&.q^~{晤wx]^mmwݎ7jڞbAG!$`-jI\X҂aΝ9IﯿZ8X {~g( [/'-7kzUt8PG@B0Qq-w}go[Af ]r1}\뽺+V*9l9x٬)r '38ذ~]Zqj\dNH’tx5?> ^ܷ]ݚ騩Yg];w]Zh6믻>Bڨ-/͵¥_q/@f3k3YUU-kŒfT˘;i5$!1_rK/%;?:[xȨ_ח_*Wr ldJ ˗q?}QS虹Yh4 /^rdt>p"CLZ-Fmm vQr͚Qr]o. @`,!l1dI>վioFŴbh$߹Jr!Qtnظkb)~UUQ:_.DƤ!ȑ\&=Ao! C@ LƷ6A$Axe;plPTzJ(w@vAT.4@ A00$a`H?k[ӜIENDB`photoqt-2.5/img/filetypes/ct2.ico000644 001750 001750 00000025514 14134304063 017361 0ustar00luspiluspi000000 000000  6+PNG  IHDR\rf*IDATxyx$U;ˤgfdf@f_墢 * E \D﫲 * 80 $=kgO:tz:N0dyy9U9U]S!( !P& a`& a`& a`Sg[֯HE`0${fޘ 5 (}L C"&M]D",0B|a`0 a`0 a`0 a`0 a`0& a 3PJ!Rp8P(P8 A 0M0L0<8(e% LB ~?gzGn|zܣ`6m"ǖYV 8@{#0HBPH{z)x}>Ji? ,pMMl2!n#?vxgBH+LD) ߿̶ Øt=AݎBr6c$ 04:ɩ)B> (pMMQB< C# D>! FQYVlCV$Ĥ#H} ia,)/ݖ)`fJI7g"χA|f&qO{V6"!>}CL sxQ !aU (bpt ?!$2'0:R+  )=iO ` C!NLyD0K}ch&1 Bx0ntLN@XrOڋ1>2  `Wӕ]ah& @)ŔATP3>^, JwCHk#) 5T [Z~!mPBaac֎`w šRG+ ieĒ(Rw`Ρa0aAT^T3#D!`sh!w3&= qP PQu:E]N9ߏ~M j!`'>G#d`p㠊>#ր]}N gU2&W=&< NL=p`l…Q6 H}]52a14ua<o{q(BW 6(صap$R -YY(ȵal3A7(CEH&'(SSdWu2BrOohH"0\dgs=>J)sraez"Y~G7 $ Xf;0ٌU-Q&H&qp!?7GuUlUNDDa9aP^RWJ\; ,IJ& $8PV+¬ێR {v(ќ( H DssB7YVTU!jQh$UX~R^(\RM –y& H @8cr28'(7*+cӆ=Y X~c90H,D '_(0<ʊVuLBA2߄? ą @dY-XRQˑc"Rp<,DEI1LRԓRP*F!L,N"Ǯ\0 D#\-9> MP~J.smMX& 7>a90`wTvop` [O`&bRNLi%$3=3' Li=]9gd9 #gF#0`hLY~%1xN #-Y˯Zo/Qi0d'ZwPo4zL#WLa0dEio25zLo9'!j&Q`uY~en=0Aed0bN #ekM8Fʨ[O #%_J- `Hׯbo)'4Z&QrLI5o"Ds: 0`$,ҥFRD,NMY~9&y1sL eo29'j `^,ɠלdteM ' (M7o': F@0G[0<60S~'X~%z )'`)E[wFF 4D-Cc8c3 ! opghoKN@H̡ 8щq>ީ`4o!'Kv5mBqsrbDo2h='; 33ÒYBxց`(dG;tWTsP(Npr##㑯gi4Z N:z0<6'+Bzv/2Ly9)SI؅WDQDr!t(n1^ۅW9>4+ |w:mX~ǘWF5Ф ۅ#_'ʄrx!oљ]Y~ӃVr)!څ.l*@ 9M @"!t0.,|h'#WZ hF =j.,A9@!t@j.,A9@*!!aAJsB>׌FYJs9C>逋څ;: ,ʠ֜j !t:z{$W9ԘP+:UofU~E9U @C>@vaVW-)':T'VuuafUj J"82IGef_u ,h\'p`dL]vafUp=T%J|A.ܣ0\U6' ~nW((E}EQD7J):{ (.s! \v6Q S0Qyم[ 3˯ T.')٧p.Y~!BIױF™.,!Q`H t3䓞c:{{3bf_!": d\I(f.,C@@K!Ʉ]U6 dTI9p{@hf_cΜ`Đ̷ x}b_ !' 9#7Q𑶅 3˯1JCN@60r'̷ x+' ̅|I Uf_㒎@eRcY`f56rR谄|\uLy> q|hNQl5%pJ#LLMab73'2pP2XȇPr 0@@B> zH5' YXȇP' IXȇP7ɮ'WXȇP7 @Ej uJ#8[֑ /q 0ξ~H[G31FJ 00L 00L 00q}ldee)O ~^/fp>"Uk rLBI@0`0 0`0 68Uw)E(̮`M$RI }QsDCJ!tGW["V] 'chx]]BӉq 8l6:\˗˖vmN,&'qX,i9WpXy!Ys` '&! "L&v; (/ǒ*t Jː 4P#@)EOO/vލ܅CM14<_$XVamM o;n?+ayٞR<c.I5EQDEy9~|PR\,y套O֖[XA_IFG,]=رs'^۱MG1::@0w{ՂE u8aMD avtt/!~Oo/~/΄=DӉv@EoqG_ U)_\.<Ò˲Zq嗡TVV~͸m )x03xgљp 1<F$} B&n02:жᤥKP+WvMMGё #Rؘ~Ӄ uu P5  Ij_ZR+/4.,_ ys^ QrՍƽ{ƿC05ЍpW^} vv5kV_>TjY^("n 4ۏ?=<^ݱC֋~k.??7<64BXU]_3u8nyX,,NJes_^z/Tӂ.!ē^Q."1o'#C͛pm Ełq׏ylI7g}aW@fjO>Ki-..oVUDaaaғnnݷ?fl޴kVUc'lӃv{HAnNNJB-8Yg59paw$7L/cUI(l6+~8CWw7;ceWDyy9jkcxиo gUxf8/feKOBEyDQDvV֯>`OC*1]PJ9v1|o btlLR"77Ghܻ3331۬[[H9C]]-q|{s(\h`0ǟ| ]u5~~v^ϑT4-dsgzZRիVÞ_B6YE^˜kmEo_n/nJ) qکJhNpW;܊xyް5(ofK=1 q‘8EJf܈RrtiFpa]_<㒋/Bl'{zÏ^+>9q1a 6*2>>.}7;;E*8G1'ȲK,;>J)rsrnژ =^YEz) Ǵǃ7zv|ӗ+_:Ef@GH)ɲZ E{\֬^GAl26Sj߁pMNiF)EVVnMXWS??/U|܋zE0#WVV, BѸ7coCmjSJyy]SLEY sO~J0āCpO]bbbBRv-髃R4bɤqzz{]VVjׯQtTV,EgtY֎n~z h\ 塔a||"fb\RJ((ի= ţ(8e'P^VO(:|IB|Im@7B$AO"n9o1<<w_Gs`+W }R\rEhk];—` _|3XUR+M j122ؓ0ZHܶ.òVZ UDJ!Ύ ֭uk񹫮[o?^MO޾>ڽWU+}X)WJ)JKK`=,p===9Bƙ$cOV (qчķo%o-هV4/%%%?miQ/RF`" 7 h炂|oQXk+&\.MW @qQQ2YQ47ʼ?^\N;:ݣYt!",3zpccc1PJ)rsr4xgW7dF --J&\.?p@OL " q'/t|>\.8hZ+n:Im_;3>q\ĕrA)Ż uuX(ץP8 ߯iaռ͛#_ eB$p+:w!kb!$-#9J)%}2Ph3`$+W\5'JKk+oޜ8>P99'^O5}-??jNBIZAݍ~3f>L_ʑQlټ Y$LxUNK v$"UbvzzR7/gn==8tvu+~پ9&Gpwl733}{,uEO9M7gqW&^LqZUE,Uႏgph8t$BaCpM_o@a5A3,OٲnnKg[6#77+P}C#|OT;!)ϗr`(W^ϵyy(t$6Ѕ 8{Y n&_(',I>^y5Y,$nÆ'V,[* %4А΄#0LxyI١[#n ڎIow~;‹/JڦǕl"l\sرs:b|Ka1AA(ƌg==K/C}E !áÇ+V,Obp`ڵh>z,f!457c~ 9Ҋ_{lB9{.H׋7:N)%̭YVñVmv%ucZ,lټ| )T]MM8$myD(.*u:'kص T.^Me]+*  b|bMGW^Ů_\c2;;go; izRU7V7}[_c-- mzq%Ѱ^ ݛ6mjMbXWܜL{>n=v G.+8++ _st&@f pwPKn8s` {9ɩW\tx T:rIK? ?_O@Dn>-{%!>49E;֬^bXeӦDQĻ GK (={Y߁fЩPJa6뿌_3,]$]AFI7ڦdl5c";; I >~Ux: rxW^~|a|cJL-B055%iՊM6\LEX\Ғh@ >s)Bii)o ˗-+Dn޸|}7zYpIp杈ܜlڸ8A88hi--),̱:XGŞwFC^ݧR mXpmzihmk?w]# }\|˱t.QAf%_sގf~S߀ֶ6-X-8زp8lI8䓱SJaoyTDebraL&|kf*pOwQzժEQ߿{*BPW[nZ_]{-:pAZ߉I$|> AL(Ǻv%K`2 .?p'ur~o獺Yjz~btl CĄ P?[u{{aHKx;@D  4 HcH"! 4 )R.}3޸2BMv_ g/7_mQs)>ve9DF$I^TU,ːyN{ƐDC@i A1$ƐDC@i A1$ƐD LDc, A9YAccUA@# Pd sM HHbc "cv~SiL`E@ @U llݎl 7Y  Jcvc|j9 (abjɎ|Banl6 WH &N041 lp'/0EyXSZd*a7ALLJp3>ܱ4*K*AEC`׌C}?Ay~u5r2sHB18z 2W5_`Z1@:u^ ~ y<鹙~7ڐh5FpJL_,f5؍Y\R@$``xg3ԁ̜C(d_"  κ&Xz309HB$a``wObreyL/ZahrXS~D 141 ń}# 9``9cpMOaf !8~9 S{#anHV >cIG9 K/ C)(쮄|f*´Ș$PUӳ@,c}^/a;gJ, ձ`~en`@00=;'%;) >K-eEF@Sv@n8O{2+3+@YUXfŢ!4;8=;M"#HFS:vVTUEGyp13A{HM4$iaa=Ŵs a5N@p6-lVz}ւ8_/wd Իkb],50 R+c C#goS8'G72`ɌÞaKIK`H~5S^%%i4!l܆@Qb՞"CUU0`$88mRp0 UoRF]cQY~ĚJ5 @ \sd82}:ܔ"}HXsm6Leh0΄KeMB=C'p6$DBPd?SH`( ,+g,]x8%Ζ_a n ,@@čDX~   F,z83q!,C;@&oBq\O9 U~ "UDH,o(N  ",,zI8"fk = XW"L,z<= d_#, x'NZ~3g QcV˯-N [~O: Qa˯^)N0U,F ܤ֯F$E˯l ˯q8yHU aeY~-fC /GĕWW/R +[~r&N`,%W1_# f %XO 5Hͤ'@@h&,z N8Y!:?`H5˯k\@c ^6bpl(e~D_,Hןi#6%T<ޤW/q'&c '{속0=7'`.6tE*[~Hz)/1uǨ{ MrhjP@*H_1,`]cq;ҏdwԤ(' 2;bbz|I8ێ>K",zYv=U?((h =֮'éa>eaG0=;c2椡VH9`gM-M7/g i77/dI>-zz@J CpӪSӺ~9LJuH tq)%*cplȐa1ItG_, X/N e1uFªPui&˯1RBc<QQrg/qr?f-d5U XW^x/wg; ˊNd5 X^A>1Ye.jW&xM pآvaX\O~|ѯ3م5-N&3 Zb؅[,]xY_YL{#'V(9dM8z'`ZPTq hmGPi o 0U=S 8ļdg&˯y0S QA>跩 ,Hm*8Ӝ Xk|مk. $`1gegT΂م[Md&˯0KFYG(Ǣ?c & 3!˯0K)FZ(X|*TL~vaUUG_3b8 Y|q^?va`TRzWDS 7%%8A_S'Tڅ '.$;N iwY| 3 :$3N )` xv$ 0Y~G~wX%'$"0Y~I. 1 .L_KiO:8pM'0Y~b@ $L8f],'"+xDŒ1(oJ8,h<ɴ]D, $2N !D|bM((dM='׻%|bMp']؏h*$*N nA>3Qט!,J)';&Ճ|Ap7]X!˯Bߔ#qqt م5څ0] 9A>&]X]巋WR`@;|q i5] $90Y~ӆ`$N!N f #2ʬՇ8 gqFn(8$8- AX,tMC'Vq`Y,D2E.XCtBqF hTɇ B(Nh=M|J$Zɇ @4q@UU 05F":FzF'abEA{eE(Mȁ*"81@q~8=V AƐDC@i A1$ƐDL c׋" ?x=BVU%"yH6 |'|HZSYvC,[MD`5/UFlQT!EZa!$4i HcH"! 4 ҘjTLs!*dYVIfw6mǺR9VىOʲ$`s׋>kkC{g;v9Gvv6Wa}zض6oE٪2pcZ5;00$I$ s0 XD 24dHx?Sl6nۋxC"_=7'j׼ |+ I 2͆5~ڸ ]@^n. QYQukbCTנ|U232 5bÌggqDsRU]p!"#D$aAUU<~|W_OG5Ϭ-Zr?/pmw_>aTZ 000؏ u1?ܜTVTbݸʫq͕נ =I͟ظacRV,V65q}^5ftlp{^኿,iڅxo~4Gp;WU m104}-[<|__ &]CxŴ7]'񵇾u\h=5֓U Lc @}x'?@@DгG?1rUl]cš#q߇ ˟b*X1L&dbzFY, ,1O?~\g>|ϣϴ+/|`qDwow8;kkgF芝Mىo|A6?~$3ۃf<31uC&&'D+Y Ο=sh3m'_BwOc.Ǔ.n]S]n?{ʍa fcnn?\sk77abrePUo1<2UgoEŋKQY7M<5p?~46}lK/c< '3?Ǥ˅cx귿Ÿ3>h0׮3sc'0xT6pO9{zՉ z#z8 9>';xk?ݏ‚B(YvV۶lwn7򧘚Z8?in@^njkp 7?>Edffj:StvFU6^UU+:9p8fff욥 $g9GáF8O:5wZϟ(().>yVh:ɉnjR1eef_>atݍ:??.my,6mW^V~ ök׫mB!8 YW?rMQQ ܩ( vlێnMS:Nk;ZB@fUj왛1unㆍػ[W]ׁ:+NO`!M{vִ\GQaaĶY5FlTUŎm;PQ^傢{朣ccaޱ 8oێN ±N+CWj sG!߈ܜ\MΪbغyc:r^B‚Bjj?uenI=v=C]c=` 1tt9155mvVLؽsΓN[G! 6Snj:]Iq m ;wD^^^ 1)H#$KB٩ RiI)jk$aǶڎ`dt$)YEQ5W648>aV`*YZTU DG;z3NUZ,fک(@IqZM+=3LLڙ:=}٪2CF CM {PEUQR\[?BOHk3H``|85<}Eyu eɍcp蔆:0^M&(9׮7$R>#'39HRЯwR}DxHBuҥ-M٪2uu(,,D^ndᑑZUUş#;ts146m[<>c w:t0\I?$ 0y1==}qQ99L0 Iӧ~3ڃM6u猣¶[z jk*lڌҲ;}]]:Pt077 w^SۂCpؑl1<'p?Ip;oG~^nh8؈nނ !PY^6\ˡ M:C@ 00;; dg$di QGزQ9Ovhko_cHW^~ٟ1ٹYl]{(!v/-g}B _ZRٸ<>1GTu+s/Db@Iq c pddd`ݯY͆ v퉘h FQAaG%Ȋf$crY)   9߶e~#ط"C'skHveeؾm; ~pm': 00(IcN5֖eI[Ss\{5gUEQPX1PQ^:RU֡:B`<6Pr#"i6ZLa𻴠?f֮%^YYY?c Op]BnNp0Vm1p"++ `,<; !(%)i6&K.#}xU"333i9{{]{awGm8x7 XB@r2ˋi/ g$^>?C^{g MMVرm9O@`׎ȍA222`k{*zZofef-KB4ࣟ8::H~" IͺjԮp?6o܄5ɲLU"@{ !1eijhԉI$^@5e< r}x[C#J1I45=5{k6"˂%<546)> lMͧOZ>xf=Ĥ"Uoħ\͡A<_dc߄vï:ض<è9sЅ凌 , m_k`ba3i9bU^V*&0ື N|s/x ~أ7 /W7&~vø VB ;+JWij?26k ,dqD8bautJ0eع< ^8}o QU1~uV VUij;22ϬS1Ƭ=LT^Q`}M-"b{׋Ǟ|St7h=v,~'#eԁ` M5.]]jj])nj( .Rijk^pqlׁ+@Wd) زi]. ]N]F@ Ǐjj[ es9ǻ[6m[XLi_z͑3롪A` bX!%v @áF;1ONEc[ ??!*๗kQcIZuז!KB`زy||/ &](.f '5V ޷"涻_4b}> 7G)8z׮¶-tY*Z`|b"lǏahxkSxH2]vxo/Elrz;"T׋;MPiI)(UUqF~mFlJݫxq;o~q#G0>1>|cxOm342ǰqF%#Y0pWE,@1F.CjÞ]y\{]݁Uk#|x' |3 p!r,{t}G܏A,TUp=՗o?ͶF %l>ڂPq!@hQT[7o;nYSW_ó/<NcrUYQ-6/&*](.* 1=3M@pB֛ޡFQU? N7EUe%%׮֤%I?q7*4B{J9SӾǶ-[Q^^{VU5X_Sm{gzuJ7\wCj!_)p͸[pދwzq߇?V[nņ$nT)]]k[qP10l:ӧ#g ;+KwCLhXMLN@Skܧ+^~?z_ؼq}Iv;]()./\X^u ddd $a #~^UU5i2b $@ooڄ|nGw6` p[ަk 9FFѬPQVm>o!vܭiPsӊb!JJJ羈ꚸ]ށnĬgddw # Iי9G[{#~~-4|v}ntv92 t ( .p7Ph7]u-/#774*.w1|4?Xg?8*-sZ]JC`zzZSRt 7ނ>0VWroUk_J(<=ܫqp0 9@QĶ-G[12:B Ќ\y5~S  m$eef7^'}QږBK+ @~nsϻ?c8\ 4`8B cM}TUEMu j# X1P,.E§>nϽ<81Ͽp8ukp[ކ/ EEE%**SsNw ,PQ|8:@"Adt% :)@B4x|a ##z$ ?H񄄾!}0$;xׯ7S0!IQ6)Bd"`&Rz}On/E4!%A! V+& @,LT^!QNedAsBLhB4C!M@1OC h)+TA;4`Iq^zAy2&Eټ9w;{10BBIQ2ԔZyjbŽF1^BQS^j1 D^ȲA,^,ۋh, 1qlJ _à/ATtA`h@06 O)Ivty.p&D (x@e#i 0mL f }C d1 йG! 7` pSDR.mp5H4A 9@{j"XN-5t1_0!S _1]^@8rv Qvf5h,޴^ !"45b 4HmA`Jptư@$41 KNd87u L0"7\"V1 0x|G  Lp.j*p;M Z{3Z%w"rBvfՔ h)7*, Ʈ~ d U]r>Gu,+1*dov}ˋ@d (q1j†'J6ܠ϶e Oıc$ HCcMJu7 8 xOX~Y{)'9$iT2C"9P_U9n6Lj0@fe.']V.O8lvqiHg͔ `WbZ8lBQDsף(ϡ *,9Gs'@MX4%v[AN,[oU@7S(' i-y }=X_U%BU1ɪ)' ,,CT[i~c ׀2u*0=s,19'`\0mx :yBL0#E޼ $ڇszs!K`o|b91 m`c xZz Ԝqo:l0zN|(6!Ug1#ҋxB,T-FOtHڇ`4y 0xǰudyMT( 2'`*PzcYVEk|&[@Ԑ9c3]ޜZ l5^9^B0jNFaln$Ø2c=0c7+x[j3ge![.,IwyHsE،'g@9`ψi'm O?k`R'N51t[.L_m 2HNG|5] l/,ZE c1 غo'H)0]jU~DNۣԐ 2>L.z3څ-XCGs^>@'a4^$b&o^1BNXA';uA߼bq`R'2䓟f0xۧ!oA{N00 Eva !SB>:[څ{i&oAsN@0?Y̰Յ[XзL  j&oQA+!^B>@` x1d-n`"3ż?wbޫ 巨q?} @C>yh.$IƦ>xt"˯~|oR]xvڅSQ9}!hPՅ'Y~ =t% 먺0Y~u^rb|Zhց],D/9}c-b'plm/],E x(B>2.[@DهH 䐏ч Q$I!˯a`h+^NO>W7@OS@@!|0a.`ua@orTC|E p" /v 8䓇.Xuab'PpN>F`|V*f|? + 1T]AkX(0ϨB>@RՅ s,F9@*䳡Ř!$ǫ@9b'˯)dN  ◑C>@.L_PȜ@A`G&hfvaB+EhQ]XzTDfL@`N>f 䃜 OK?(~yO|!|],e<'Мǜ@^`Jȇ],G^,њva5Յk Vt ۑ.L_ːI!=c0P3V&˯vgLc_uaZ@WW|DuvaZA`6'P'p؅{RvaZs |θ]xcK/|,Rȧ ۅ6wCDc{s*QvdiB!!0X#.,9B>EA`r OB>Q d,wwQ<ۓ[N #N>a$D)zxO:!ל:3/&2H!-SsK+,_{(C:&ۜ@Z'`a =!#2vtyTSæ3V6!!JTu t 4wzPWU-i?ÐעAoNn   C@ , AX0i}n].P0!!+/׿z1@l6+4Y%%Nαí߇Ëw(bqtϿ=d./Buu"s^Sv n H `7_G_1kvp8[amϫqW/\nWϫq&cwWx1\rJTV :t֞bCp ^wᱧkeQ>Xx\ ٍ3<«¤?PL"7HcG?ãO _YkΟIS?oGUd#5$EQη\P-;m{jq נ&, W_qRx|CR 0iuϲ#]@Pձ_8Xvq'9c 6BFzl\%%i;kPo2dž[U[v+_2ud=4 8].\}ťhݽxqɕἋ.?6mޢjZ+e :UU$HfBpp߀=ǧv<_k7ŗ^G$yD Ieː &A o]ΆG|xkoހ?gr4 QuՉ` KX9JJqm7gߜt`:HϾ.jcdIuU 0S 8v{]=t/>4M7ŏ[|?oFggw"ؖՙzlv=mEt0ohՐ߇U7O\)7RXj@ @ 佅<.`%V?p^jGSNu9j4 6 LfV,0?$p8p1G]xϬ~\q̟){ϩJU CI-@+$dTWWϬ} }5~rM;gvFzwflƆzU# @5Qc .m7'z8dR֝5:g0BO 1|"ˀq)'ލcHD񗶯rrU ㉄R8@$H (ᨥGn.Wrcٝr7wԭl޲ b\MH@P($眵,]pt9cvS5?})VB 稩±* BR1K:gWO@##a|HfBX&{*` <;a'O9LE{%I!Pc|E`(wҾG"u\?̱ԨΉޚx鵷r"(Y00$OŪ_w[lةŜh mU^]U ]2-SO:^yhՑlhmۅv:zI t 2[}tOsgr" jށ[:|٪;ƅ+? ʂx{]L,W_^y2i``HȨg|+;vu(!Ӛ~6FG*j9v,9be|f8T7W׿}6nڲkbLY0LDvtOqٷm[ nq=xs?wQʂ>m l 8@ں?oK,={r\y%fH*{m'V]E|sE QYYpD2v˯g_~z 4 :{?=$X'p,N8Xt|46ԣ$! Yg_z]1dىa~;x깗kTA<8d̝s*+9}ߣz0$YDfl @iiRulC '2:wI_ ە}zl MM BhniSȄe EzB~q˳*\ӗ[ꂡuE@1gvס*cKqUZ#C#EHUWU?\vbfC}˅;nqP% b#bch+wΙ݄N\rr?99ְ!fÏp#pƩ'ԝr:gVɇe\ϯԞ߽*<}8= qJR y3p&|[_W/2oފ_]Mjp sBeuun9:/gíCYiV>u2\~ɅXpȼ,luǑ L*{Y83֝Gغm;vvb͆'*8-I3N=XJG矌$ŖbݦщQ"(3(q:QVVgaE8ԓqipU8Dž_,̟wWdαR+"[HD4j@cS#  bȨc8DQaU TW u$Uk)//3Nӗ!;+c E%]x,3ZA47h >N`!9 EcqQ\Xۓv>m E[PQe5к@0.хrSU$IBY먕і>+𡭣E6!rs9GIQ m2apz ]TO grܦ[eHribc(SJQZ\fle4x MWL.ɜ@3Ҁ  azUi8(-.CU\WEc 9A94 HG~^͂r5wD!fLItхD" ,B9 GIq͂( #?ϋYGMFr(Dz  @UbpI> Tϳͬz4}('D9IyY%fW o~AWiqTGw~iY~3  J0o1(/CsI0j̜M@fL#?P('0$by]=o8p!J`8jLHd?tX~E`r> }BY#Q*Q\XA?>"A( ΡqpPYBQA1U(1FLPTM5(/88I9$P9e*# c04PxX,C1Q!I.声ECvaX4+.F|hhѳo:Ht"9tQT W $q$dE<$%r!R31'iͲS+Ba=ޢ 5. p<4wBјsr$Ĥ7]A@gw#r$DX 9{]5"X ; '@@d,b}a(V 6Vw(W[~3!n 6s$fb'@@h^~EQf Y~3lp0ǰca -hM;#@>wb߁] GōΖtI쳟#&c -r " bOND[\D7UMN߃P䪯!rhjcv7> X>W1p$v!XC\W$q4) ZdE۲k>=>Ö~[~edN 6ԡu¡(W6zg-"0'`KH>vi?xw׃Q_9]q71FBNhzg=dr{`cs{8.V N8`h "0]QӰ*w-`圀]=bL@s[=s}"9,3h`N6C{gZk'pUQS]δ 7S-0?u{}&w5;g&oX5'`C,tIdV X^TUAM>ݺZUِ]var҇|p L@[G `&˯>Xm? c B>F}Od՟zK,yB>(Wn_t!˯$sAK'`I'Lr1D0l~UOk̝14ԡ5U f {؅k,V XJ A.܁}Pl`&˯X!'`$cT=f˯ F3f9@!#~#,=+`," v~ څm̻鯾^!#ׂvaf3L-z|@`z-ff,YGt0'`> uU4HB\2M0ܘ$Lo g)[!# E_ZgzWB>F;b~.L_S`L%Q@| \i?S @ʝ|,]F 0}Y *ր1h |@>\]X.L_#ڳ@V`(ע!~z4c&˯}g1'CTQS],!9F|F/0Y~ Y Zћ;3d1 d!'`5cu{Ҷ 09cv8ZkGA`|h6?l'˯]to5N ՅUAA9]!px|K(#˯c`Lߠn0p;^]fՅL &C!+c&Z],èt1ՅFY~ LRX8稩ߋ`轟B>3l> |du0z|=G/] e 'PY>yITmlOZk~O|''vkAri |$sO mAE'܋!V lN@Pȇ M2'cyJAsuiR 8H!03R:v|DqRA FU4bJi.&H^v7k cH.+wť{`WֆAz'C@  A8p0$`R^/e!AX DQ /|k-AC%<\J>(Ĵ&"wH[J].U9E0AXƘCi  A8p0$`H2?1AwUU@UEq |ğ^u z#[ҹZ4ز, u;&ttcppDL`=(-)EUUfVœ9s1{lTUV_䚋6D"x"y  I$I:B}2 ˕7#$i "lkYl{Z[[ S~1׋*,N98.FyyAHk!"x1l .IFQa!JK1mt̜9ٳ砪 G1Eqs]9PUU|/+!Oah1Yy&yuGisP(PMMظ%`1bqybx<ւޮ`Xh ֮^5a9!c!`MgC{Y  @nBر=|\qٕ?G~~f2sAkQW_y å泘5s6 7r-k$L ·uv-v}ضMb\8oǯ |+y˴9 ᏿Ǟx$+3Ȃ(&] 99dž?몘v|(:$!QsܵO?ڙƦF[1Cc 2zAttۍ31k,TTT # ͺ /oz ol} we^ HHF!qӋKuk㚫)'/CEy\.FQCAtuub}ZǩQ7x<@,|p$)_wn^Wc*߀-4,)R#=文:YsVSUӦNT^ZQʩ =&8(-)EyyH`(jJck人vi*܋9$=(+-Tހ(r)y'(ksw$9G~~>f͜|KK3/o>P(I,cT2`(%K5}+g@x@+CKK::R3@z 8 W =ݚ>F񯗞ǖ6䓖]:s̃큢Zxq000lYpBMeBC#Ek (Eq Ukēh4m۷bC,:s5.",?-)(1jJ?:c (W7G3'.YGۋ׷O\vpk >xb6H //fz3:Fk[ ~SNg(.\o7TvhyeYFOO7^/[љz/I.PTT{vիң8(Xtx_TXb1ܵ;wg~d5jZEwhjj#= A>{@uxo`>$ M\j-."KUi-!ApoD_wm1>~)l|E[7~p3%#= J7?0eJe Ɔq|?ޏpp$^xխзCt=w{,;T6`8{o_6W׋_ |`EEŸ+cuGpúgaO{2l@N̝3KEL)8肏ai+o@#()S2Ӹevu9o~F"V8_߁kB^^E;^Фٌf/}^r9^5|fq)=:eX,(s ލ|+PUU;c huu4/).$fϦ*7ĥo۾^HCWo17k?wwpI5vQxo{WWWg}m|Q]=3e١QO C0&=.b?Á[LsQۃ;~w|$ .8.KU8|‹5֛شFV[EwMlȒ$ П(P|7}S$"I*L i`U( MM{Ýxq1 p˰tI8$JPA457፭EcS9u٩5kvN@Q,^=B?,mظ%\~߷ $ W^/ QXPIrAeci/C~^~:W\>&^;gҒRJY z4p]hhl44֣;kVY4( NZz2=s,gFh2[+?)V,?ҪScʿxiӋ4 tF Qg_ކ/2w!DkQPP|<އ>, (DQ;rz}9>+/d[X3NV}do{;^H+AWj :j|WߞCy_ Xx"xZ(--g;pa+{V>1EUѴA"ދޞ1GZaA#׀c04_ZRs>םn޳ u݅Ab1EQAaA!*018Sq3E(**zhL5O~ a!9;媪bݚuߢ?ŞAlGUUŪV("KLSNӦcuEWw|D#P.O^JQVZDiI)<dPUN9 -[1᝕PkšQu| ,wq1WUU r%҃@#((/@EE%?wEA~·6Qu_VUU0Ul՗ @d6A z"C@  A8p0)Ia%$IdJٳ wa!A,4oHh  A8p0$`H! qIENDB`photoqt-2.5/img/filetypes/ept.ico000644 001750 001750 00000015404 14134304124 017454 0ustar00luspiluspi000000 000000  PNG  IHDR\rfIDATxyp$gyZi+s^_|`Iq 6pT)*UIBB]"@H!wZ[9]3#M_Iڕ43󫢨t "%D1 1Q1b@c Ku7^s3l{DT&M?Ohו z`YDDeJ$t(- [ (D1 1Q1b@c c(JSuDd_)JaLDZQi0-ʶ4MH)$)  PjesXc) ۶WOzA5Ls3_̠ McT@ ȯ0>5YX)yïm̧].tڋd":@3F.uĿLO!bhod3F(xrofn!Q!@a!4FƇ`;@.h?rD.`E00,|8E c+%,F'aqE&aZ E61>5r[-d0{( m 2si-dqo:=ln)ppal``*=U F!c`lIOщ`~1S|*Q80`Z2@⛦\H؄ ]D>oǹ4ŠCblB)yXe淂Q@?B MXl~aŶm,e3*@P0 X)[5 JB`MDV x+ln'{A716aP]R[ 4BsR Ccpd MPeG X0!F`)˛na\@):\mc`˅eh>`|jUM4N #U hZa83d2?|0 i%Z;j\'P}&H$5`rfS鉋M ӳ8;9D M$PX M'Cu(`` -R>f`\Hu|*Jo9Dg'G1;lFD4H_1.PH|؂B4*@)-h ^cC muM ǔJ;66+=% 8S ;:o{qUb_}CpPBBӱ@`~ (ڎΎ. %0L}0JPPho=L.>h='~40)u}0ʢB"!BC}#x5cJO| :wH꩚X?rwVW'P8|2464jkmǑ5V'Pm-h M4O@)=co~9x9#rTV[X. X  u8R>pz3Aih߱BO9׶_4YHO`+i"1Ѿ;0Af.l~ eB)u)(`I=Vl߅H$ +"[TT[ 67؃]Oq| *)Iم;:簘]@647E)[.[;4ѐJ֡.U_pP_[Y}(PaQ&.O\]jߊ. yU. OyY[ l oy^p8؀@Eo#c*yV%Nmz D5ւ&ƹq~oz?F }=(x=n,XDzܽC,20*%7v=! (``ߒ_4-} rz_%k@VJ~kJ(>U-%ηc!f} ZPK~+>U%%lJ|T0:i&b'm7}kTSa+uBDC&} HJ~+>9TK~:=>dca.uJ cHg#yG {o% `3(u*} *[TJ~+Th:beV)DO 6 "X)cbz<2;VXTbmt)M_N{-%N@,`  %_ɞg_Gb'z-%l32}A:3nvqWM40M!`*%NHQA.EX),oYk^}C=~3 hVj`L"eYݼdUC=1߹:O Dz blrdKW˲pIDֻRq,uJ'(nG P%.㹞gB9V" D.Dt94zfV}8 >>kɯSa\FΜbvDY}+%s@@w=04ڇ>77,unO`(} (GTuJ&gY.̒J B'-d|f0 lBO)3SZpo<ʅY뎰 zOE&FLJra#l 6D34xw"^.̒_ 􅢰,{{&M>^, zOb&3K~WX z 2B6M>.+hR.lXs}1 e blb7D4/͡8 F4ʅY0 *4xX.^( |z^, Č, 'OL|V ˅Yj&? ..̒pdsٚ'PPDa4¶, ?M0VjkM>!m3;,B jQhz)fotԲO&gcT|V0K~G) xzDmʅxg7zD 5,M4|I,2<;bmCp FQ-(s_/coTi1\?jgfo\X^\ 86m¹KB%!!Qkv}%0X]gمYO^ kM>aX' ]%zl£7Ɠ T}[J)ucr,D%1zU|^.|8琙O7Ы7wwp_B i2lclm=]ho1pUg0|jemii/pps=&A6Ԓ&/i;}&6ϭ>&`( T`QpXYU@gqgM>DRm@Y&`+ 8Y^2Clz ۶qzM>DAVi@J#ݱDUED1۲?|;v!+fY} j "y8iүG'zc(D1 1QhllD}}=r۾dxDz׿x@ I]hhhĎVفC%ؿo?ڡ'tX8 D_//,;xQ6?~hKgz;LmG<^n|ӵJ@ 8{B|׳\؂H4~_iLLWOz omo ݳРf\ ޡ@* 8~Y|3% *R O=$y{Ǿp rlrj]3{Ti|>~@qPXUNvnH-hRS*գ)D*uG l[!\&ILMOaee>ߍ. PPhц]vUԴfaaTVԌ?z4 >8P6|}vDDpAW'ayͯ—д ?,#=FwmΦzߡAg?_ P GvP,?}_Jߎ|wv< *uuvả׻~PQ{>m7qףW\~%^ݸO~ }}%W)=S7ž=)hkk+;wċQP:)d@)N ۶ip=XZZ?hY⧞?Lfww^NOrZ{o۶CoE,wjliS|>ctZZZWgYLOOAxw=t)_QVaȧk!-β,,;||H-iD;DlFZ΋% >Zn3걱QF鼒z~*aX-A,ZPWW eY@Pǿ?w\Au|S^sk1& z?z}{[;:;!Yu4Mohfff'E .9r v!@$ N~MӠzeaqq?~_f &FF.4+e!G:=~8y'Obaamii?| xhznlˆU3W\w~ &lF|wMK by#y @wq'ߎ}L& U?T___sՓIR)iZC}?r *ĕADp@6躎^?AwQ_?U݉k9\::;p77އx=:8 W09 hTcۇ /{ոe#hh(~_0b5~>nXM8H@O&P_47MMHR4m۞'~41bbx\\ x3 ۶a&g x4(D1 1Q1bΣ8A* bTG9WOVy~,!O1t'p'\Cګex D[ih; c(D1 1V|,)@ʞ8TEEe5TP؄R o8t4!#EpJ(-/lB$RM#G.)M 7rIT nvq띾-aۥ'n|9^q+6,'ށ;o+RT -ض ?2θoSPQ1b@c c(J>xQI" :]Z}'W ɂ 4 ǞzeW^QQ1b@c c(D1& JIENDB`photoqt-2.5/img/filetypes/gg.ico000644 001750 001750 00000024553 14134304154 017271 0ustar00luspiluspi000000 000000  U)PNG  IHDR\rf)IDATxw$Us:L&m9"%\/.WQ$Ir^y?WHfPA z_ f0awgvN={l:i~g=p@U>& $ iP A$Ĭ!  C@ , AX0$aaHѵQ,KAkXh U B 5f66v㓓1" Ơ) ^FG*AM8c`3l6832<822Bb@B@$ha j <x) B|6@0qxas8HB)A*C4-jpBf~>!#7wHaH"11 N迚Ah!y%%94 b @a 7f,(Ą׋pff1 n P `J1@p1֒ {,HiHd` i \whiF`|D $z0׋g˄ǃ)!"(!AS uv hldw{B$` cho/E$$aP&&0c]z{M7"y  0cY9$pt!&nOvQ's"I!!GG\wE``nw!A h-CvUo d 8ƠP&&=.7)f+B;T3`&KURn7*CL PRk-$Ō%"\'0J1 5$ի5!TEI5 00>2kjolD Fд${"eAsLxᤚ v;ҳsR0Α2hmȈ11߇ކ:KX 0Ɛڛ8iHN*LZ~]M]DB0Bi!GZ\$f܄ `T=uRN0$`s8`W݁,gZ~}38`6@y󐞓cD45, Z_S|n  4egsoFvuD|SN $ (X +Wd !8G(Z.͞ZYH-FacrHл ˇwxA&<h]tBL9CdH4';<7r `w:M @Áܢ"d/X1cP `w8@zn.2r8Xb89uS#5CHb6s󐞛PЮ=1pa;`s:aw:!E>=?*o55 o"d @簧>kqqJTr7pjNtN-! fgA?E->fHFΆ;΂/qFN+NF- LA@ďY~ 3HM߄oj?kH*q 1'U~ON !XUM}M Ys?"̵7Nx@JR#bO[~#!s$!RkS8'@@ȓ"HH՜ !O Y~o4rMURL)g rt(BU~Rk XFx qRxsogʿ=)ƯZj>nv_j-ċTFB*R^cpUS 2vhJۍ%V!r2 U|Xs n{ij`T h# rb詫`uWa%˯QN hɻ@JM jo{jUKQwXk@'hO7zjg!~;iXcEo$${N 1:VA VcF{UEhe-FI@ h|~9Fz]S a/ [~#!s%B#]-Z1܄ֽ8ɜHZk4tTcۚvaFFRBcW3%@ مIH_yr<20aA0Y~c:'Л<9:^޵f&olT=uɓH_O<.Z9ڬa&ol`,rI+3|R.L9Ä|A.|c)hpD3hh $B>GÄ|b c A8ګR.Gs#I`@84cI]]8dm$oa7bޜ@rТ Ơhwx(D3abΜ|Я]"dM0!3gNӐO4EAO}s:$4UE# 7)a<HpN 0+;$1|h],MsS!`Zij0Y~r %l&k'.bpdMzN'TibԐ?B>9% 'bf&oȜ@BഐE3i讉Mua $d4J'LV.L#Q9^-)1lrᮽl MR6njW&o998]1&' Y~S2s G̶Ozk1&OdN >u%b~՘u'dA0Y~-C('P@L;$ՅudS9x';p'0v..L_Kb&Vă)pLvaZx'Z-3مk]ⱟ@ԣu:S]mO\ ww16im ˯EuN :O <,뜀=N>]gPA[ 3-*333*pTB>qπ ~>L$ | D4r)370Il Clr&  QNPȇ B,0(!3~ң1kCB9)N>DDF!05t@SUtTO$Ҝp-6\#AaT} YX{Z [W:VA !42`桽R ڰ AaaH!  C@ , #3 7>oP ݆}O~a @q"l޶ A$ v ,o@A0A$ 1h:i , AX0$aaHD7`"SRIQdtoq>]!F4h UQ l6l6pΧw lgfhhϋ!8EQnِ`AQLҟIȐ*4S?UUEO7jkp8[Z0!ii7>bXq-]4hA61ᇪ(v;ii _Ap 6 x5MŶ]pc{4_t1+_EFf`# ǟ]kDq">||rrav~k~ JMS}9}#D "HN1Wn[M3||g+5XRZK. YYr9Zo" ֊Vګ/} ":VYhm[jasؒ"0ƤڑTIlx/+5sΗc;kO>ah0~&Z 01}!c8VYaCsQ*Y!tp{mv;>wݸ+ 7^zw~jY]}}{=x0E`7|8\VF;VE @`atx8VY!_w=ngs坷Lx쑇6c Ã8ZQ;mTE~W>rޅo} 99Rܜs4I."%чŸ~ n9GscZZ"tc@31$u\jXtT{>{xF#גQy<˘Q^? !px~(`A@ݝ{=hv|+2qqWo֮r V[݁vp0IK?+VY՚8~4Ec‚Br 00ߏw=o-qnS^V&[Bo&|/txM048}?~A迊kkn[/|;Wx zgn~>Fg=7--8Ѐ¢b*^czB<瞕jEo~ Yن^߾#]o=^ !E(4 ,w/oI~[hڢ+霵Fê͆?6}!%IZA,^Tsn_گ^";7wwbo^.55x11ǃ¶[XXK/ö;\V|AS͆|bh`@}^~>/mx8GuU:Z[_uu!l#@Vv6g^/o?s3юڰV^;wbIiivǎ'o'R:S1q! ~kRB~_Ƈw4/e)^XXK>|T]SC۶Kx=8稩@vnEaq1o]OWj`:SQ";}p>jrXeT6Keù\ ͍ HEag?vm3́w ($ @L]Wx'_|1E)8c@[sT-;v[slݵ+Ch=q]w}-X5CӀ [6#[ѤAxWD;;]Vv6s !"!01-۷fu'5U}ҎFC!/F-c W@h\ܼ._|P.nir Bdfeam=_$euHD_OO1E9qG@r--=-Wb UQBw\> S-LKæmN͆-۷Nk^@g'ګ8_ԳUUrvNT;M % eǏ-]+׬='ڍ7o^wu8@g' 'jzjk/8E,,;x4I棪*t,_ E%%g-j˖>* :$?FugbNll(*madfe5t@ƣT {x'zO'7AS#Ov8-4sZ9ؼ}Ǭhw:yG`?N0Ĉ"8}Rm77#paUs b Ƚъr Vu7.\B`Ö=^9Ba3iiޯ])|0?}NBlG ?z~9sә+4J HbB۴1k֠dOQP7:T4\{˭榛p:я|':to"nl6ʙt>Jδ4Á JÙYY[3008 3}"g%WUald 8$Qr?;c[믣+|:P4꩟cG/RCwi͆\IA?,LjsR%[Zcl476v/f V]{~E%%ӯ6lނV55x ߙݎy H39yy!ԡ!it  @cY8ƛPrܳh3PCQ"XNn`00cj_XT'R8\p\*D͛qў=g94Mêk>-=--24=e/[*16` 1/^ 0}ᜣ q.z8$by1c톍Ro~cXd)r$Jw~67sӃU`稭FoW^Ďζ6ׁ3@g$fXa[:^EKBPx1m_}O<{223u aǎ>/)B9{{pH纍hV` Muߵhٰy9RAꪫݍҕ+ɘJMpٕW_ m+ZuyɁvW^ƹ^; 3, >k9czp ~Savw^ LCqDۥ6'@4 6mڍr {etݙ>T  / F ql]7=#;9H3/;;;=W| H⌦iG>.P};ob-\x@S]mH)1ݎ|}R`Śf3a-/Z.]BHB`mRL+gl^ @B <|J {I藳b ~rȽ 8xMx040EQ*<1݁_H}䌙)8hill((.2|4 K/G }US}:ZL)ЙH={p%j0^wbݦMIHy9f\O߀/|#n oWw,mHڶk7KXBa׉[wBz\SB /?$޶ f@o@H0~Shom};Ϡd}>TWU^/CޓgşoguwqXbgZرu#$ B4E×Io= iM۶;HCX-8p#WXT5GmZ8RQ!EV@  ~;/>\91nwq?7{EVvNXqbx %6M]n݌@e @mۛ@I,$UU]!վ~iJ)3k<],^o>0mM V 4 ۺs)cơCDQR@`pmHn_ 4Mʵc뾛˗c\Rø׃tp`]Qߑmv;lnВ*$UUuN\OJwٟ> [b-SnYL 1Ə,.r4c h8~\Bݰ1zشmu6 BcHF@"܊EKJwBbii)ݟ^p_9uq_z2Q]Uݶ+׬EEQ,tw,ih-;w> !f5!d2.\MUf\HKO!=#W]s .޳e~-T>Nx6 YY((,ƭ[pKq%Ēe˦l./Ž{;%4 [D?yy{qw: :|㡇/e(O0tW݁gdP٤_Gi;uC[Y5Y5߼~a!^B{( 1 BB $( 1 BBL|ߣx!h 3|\U yw"%K }W5!Y; $( 1 BB $( 1 BB $( Fl6!hHV* 14XVPRT(M{",."#"s0AVajK䱐-"_,P5!ٜ1H!9Qd b@bf!2"ʪ0ɿ&4U/bj>,9$1H@ 4M`j!drEhe?3k-)*RsKY̢!}MhNֻ5IQT)W(c(5,TM;}~[}SY,d ֈ}D$: bXʗ,PVT 气/V$bQ b) &g001bYeBŲ#{єKb*2ar6;(*~6ɕ7:laBL0hz!YU͕1 / r?  J-001RYu+b XU089liVFƧ^沘^yb_klz" 5F`|z"K*Ʀn?(Ϯ>z,QlH-Ax[V4斨8T`3w۽z_s<%5!>EfVsP(Tī(6S ,d , 1PR/)>92,KPCPDO֣؀PR1qeIU^[B=#(KQlXV6 U h}(ۣӸ=:a! ʊKjMg,1b3`g8ť| ($:z_KM;FPg l7Ҿ h/ &049f qƐ8 E1o5ј ]%Ci,.(fPl."cO{jE%溙Iɯ`䊸9M'PT%71jo^0I8X! ޔFWkK~-8>s(*@>CHpӉC[SXA_V&O`lEhoݭHܕHĢ8?5 VC'` ;[pxO;d!x?`,0I8DSɆ(O *5qlM3fK#=@>M+VRvRCx]u1EdrhZ!d!}MhQKF_;G_'Ђ;[/a1 pΰ5ֆrH/!+j* 1D#1lM9܌m1,dQ~Chz$"?~Z-jo@gKKX/QVUp13D#24'ќ!Q;~v~<0ʯUkNIg$єGS*PRT}EhP q},.*#"q}_ LM%w41Y߷ V[޸8gʨhqc FXN㻏Ҁ5)Mr,ƩOAVV'M%fQFvvV֣ b 6_XgƒVVP)'p(9FC>EO4|zO@/M<ʯ3Vȇ2(VK~=}P4 b)/> bV#}2^*5+}6O > R;Fuk0L.T}v-F(Hm<^[ UJ~ZO }z>) OTm79cˢ?}:kK~ . UcɯY}CN(D@qɯY3 LOjO_VOǀLJ~! P7_'PT-H~Y)FoU?A ȗt}:%%f P@h@O` .av!K!`TK~a8@}iHc1WQ c7Ȓj(jp~0ܙW1Lf7E ƩmVK~_c|Av0 /b(׮1 ܛE$FJ~O!P ]1}wOr[׬}=:z71LֻB =>>`cZc˸;l[)̈́~^0<.XV Ϝ1,pwŒ7p_@Fu\ ^|&o꺕s<ޙS}>I_ *z V8c5FH| z@ޗ} 0xo754 zg`TzE%k@01,dukZˈ#+f )*_0P,R\2ư+\XUUJTm'0> \kG]-r%twiR3p Sɯ5VO&g7>KRɯzX\~a?`R&;Srᰍk>S_h\Jzp X.Q~9|=iݦ1.pw Sɯ'0cwp } 5M>%M>CHZ/3*u|M>Ky׏VB\J~>_&l˅GY.L%r`'j1ߎ.L%r`]~8T F&'Xi1 L̢?ʅ=>jltNG_Wyq>oM>6.TUë}cHyJ~[ x/j~хhr,~7[p8cxpt5%>IK} |]J~=+} 7|Cp}(_OJ71c! Sɯw})W&WM(f TYz@N¥Z)>NJQɯ10sOZ8cH͹P.ZHGsOhV˅]J~cO`ԅ>w`G|T; }|2nk;60[ 8v+ _staVpOY8cYitadh_rO` Y5؁х.@(}r^60[#iĚK~ǩp$TE&;hu Sop8'H 1&YV.L%TL>~`zo%OAEYy>`L>AjCM ~@qb>`'&;T[.L%'p>[`]]b\J~sa5Xmmх76<> P.L%a|&/1.›.L%!v>>ղs8cjta* >ԭ jk˅78gO&[ , SoY'P[PVʅ/bn1|J~C>7+㈕rs79CIQ1!nXRz1109҉}V T  5M>%j!V 33hB9p>S|EOx6OG'`,5Ш3x>s!P1cPɇZ'`\P5 Q!Vm@J{so,qj=!TMCP;[2$5#[c()*:C ` mMq\[&xӃB< $( 1 BBXA0|\.b}׏S!>"I?]bٵOҢeK @U?`<t $( 1 BBine4 n#m{BPԋLf qHYΗ7RhB-EET~!יRr@$"#n;Pc]]dI2岂Rd 2 ME~]WssWI!2َ{w{صdBM. $ /~e|P E n/ mix[}6}\.㓟,^еBxs?.|O|>_4<>aAE {pbգ}דxӯS'oHƐNOs -iݡb:~t4MfYkg'{[3 븸W?ʥˆ?ߞ]t$&/`dl9#'e]Qha1Ʒ| [@bk1=;*Z6{7n: "οzEY .F< _y##c nx1LOnW»yw_§??̧n9cpd{7/x Aƕ7= x2KYW1` cxؿo/ZQT,ed*91A%|o ?ARU\OG6}T(oc ŻǠ0EUQp/Fn? |eCw;b(&H.]y s hii^_9&pf۫t P#Y`"'  'O{N_|E<3Ri\|0۴4}S__h4W (hhHW?Aa횦w`;[q }n~#ʥ(J^:v47|)B@9tzK! VX O9k.vA]3.t]ݰ,c O=pCxCOjkK89 ' D"CZ<#/v]h=^;[LǕ׺ٰ;qƐ(9ZZ -Z.Q*Є];p te)(qbצT;Ύ6CCa(\`i^.@" cvn]WoܓgNSS(&*"Y~5 O=Hd#}026Hn b`px2uxI#yÔrc<ތc%qr 8vm^LOrYװٰ;p!h?[U:sLs뎡[[ mgzf_\tQV]~Mhس{'>EQqbg,=vcN 7=́}{>5{ϭ;x~ Z H'^zݏnl'?HAI•/ 3-<~ <ybV!8:{,o}/ xFW5yQԈK%?^~l' =5׋1zod"=_9GRu/7mGG;=ʆ)+PBt]FSc#}rYR6{i׺{{p' <~O< [Ӱo.>tpCMvؽkMQ% hBs__^wBU?g''$8{^z=}DJ5RƮ{)<Fuy$ugOC$C7!eYSgN-! J+QǴ47#صggőqGh81+hocsPxH2>17~Mi#?dhľݻt oGwsK7xӯ7܃CsG I9iΜz Ɇ[eN.klH7>h#ӈ H䧝e/HUz$ 0XWA6pA؋{>'P{Ϡ% sY:q m-͘r<~ PHSS33ID"F؀Ύv</N-0W3 it#RvcӑĻh'b!!F@HQb!!F@HQb!!F@HQb~&VPlȬ>BWw?@30$V53}K*Ξ䕿h< h$gηu1LO3¶ ߻9bڲ43uYs~'~n9B47!ކO/#hA&papIhCsocx#Qt+,i \>-ֶ`y(2!9+|}\X5L_A!1~~1ӳ03c j`O`=@c.D 1 BB $( 1 BBc@ILO YJUZ;_E,%~x.NsՊU$ $( 1 BB $( 1 BBhm!07IENDB`photoqt-2.5/img/filetypes/mbfavs.ico000644 001750 001750 00000025463 14134304056 020154 0ustar00luspiluspi000000 000000  +PNG  IHDR\rf*IDATxytWvjmYd[dY%IX20d$$aa o0 /@@$H "[޴KuKR%ZUGٖs'Zuuw Ad%<'@D  , bH"! , Zv?к Hv8g!Hb;UxCK>y5@XH5 @% b/ (4i bH"! , bH"! , bTDYJ) 0 aPpX(ɽ,fr&Z̰9 DHAļR@!A J{6g &ΐc1f$ߊ<[-I V py_w9 0_$Ģ/%M()CeYJ `2 DQŒg xE~ksp-,ІM()2 Ce#9/A%k0&gY򣪼5`h4@14Ƣ/)Q}*C~^WHdڽI!!!=f=ػJ@2Eۋy4]>%ƶz18FHS|!   X14B0$Д a*JA71y421S! %zӢe|փ1A@ Ĭ'-wE Ϥ յt1ُDB?$ p-BJl(,1H B7$mOק S}&DB4J(1R :QT(J,*DBp) PeX!d1O2plL^ B$YX4WH! _V+]ah@ b>Iwː J-Rdb\ t1Q'}T@p)Vf Q̐WhM;g ޥG% 0ELρGʦs04´KqR\;`87ޟR8 _< 0pIxwMțvdp`6qg0>L9c]b`r-f $f 0G6ې$ ]#XiB0H.C5yf,X9fS$~0987|caC}P—l2.O"`cΐf y90hgԩ``L:1]G& )9K0.-,1!t; fs3 XFKc$VE(a1qD0rQ`I~%y1.gw9$lX9<@ʥG X&l.-H뇊̱+ Xsn '('-$ l.GA^z$ (/(?k-'8J4(k1xՆN昰mSz[Ԭc GLHTRb[ڍUf7rCıyI*Q]QSk-qPN :HԐ|kvU#bJWN* jhY LSN@ Ƹ@E `1񔈀$y9ػ6%?G|`Ճ$IH{+k6%u@B[k* 3hF C%eݔboFqAfؓ5W)' иs * KHlFڱk7!ߚcF+9 P c˵fʋl]wQa#I&Bj6HOՋdo"/(Eme1q 8gRVxC Ql13gȱaZPoEIA0Fo\ks;+ip $BL+DAB0,Ȼ"I`r 9fXL\-noL_}9M(* @\3Xs̰暱b͘7Zo2`5'0ījZH4aR}rI$ΖhahrB@$x[~u.H< F .H8rC@$0@oC9#bKWiQN`"qOHİR7Ihalz,OHWM2W -ᰈ z6|zu^d+yB"o\Gwԉ)7/ "12;| z2O$F SUS\1,Bh’?cqg˯2='`<` EN# kϜ1<8kG NTM  d8潾[9gsI>5Pd '09C yReXጡDX? V79_F#axʍgLO-QΜi WW00g &c_#zDz.dE' }X睕1@مA@Pfh3('  Nb괫v, _7@f O"j1 Md],a%'p>Cr+auq'A_#ۅ3"O$8ƲHD!D rvlhVsM3RS*!x"ۅ8nDpVM3 MN #gԉ !D{amvb&oBɄ@f @!Døs>I, %r#kB>A!ĜCߘS}f2dM X ,R̷ 79{N #࢐Oܭ؅i&oRI@ jǑ'ŧ20Y~K:[. d],)s |zq $&輐va~9ՐۛjtOBW&oJISIBD#_dMk?$|rucijX~dM)CK71iX]x7~RCN9d|gƒiT],iGJRI1:7va%H` |$gSo&o") ^"!Q ]1L7ms>)z\ֆ|2})+vc= Y~R*I18R`^.?IuN u!DjNbuaf+9{ rHT|EҪ 7"RHǛ!\vҪ 7H~ID TnKdua'@r B>3'AՅ*K*rpg^'p.o$;'|z33䓐19eH|([~'$3'W&|(Ư0Y~C2sIQ' 7q p$+'XHN>@< ˖_'i9'8XB> kҏl(@`55^' ׸H\wҨ.L_9hs, ěva-Յ$2'_H|20Y~D'?XI|2 ]xdB'M98coT],YjN`%|juvaf-3 M7'P'Hl؅;'P'؅O1 Y~x̱|8L!b>5 a~,F$t;P]^[%&pL#^ $ vevD`=('I 1^ք|!@v'Z&9è#@T ;D&b hՐ&Ě&| Aksщ0A-[SAqvpB> :G0X1 S A3Dei!X& U8?`X3H8Cװ6ﵫ~!E Hg=8Ai Ad1$ŐDC@Y Ad1>-yV+Adcy٧LU>;pmAd& >sNUnACs#5%"]0QK ̀1Mt$ Ad1$ŐDC@Y Ad11 H J0Tix}U*$ BDH8L&ƹ܎1;Ej:!p8@0=c yVkLUEQRDžj|>ilqKE:s}|004I̺X!L&lyVj݆];f[KKaʱH$! x'?$݋}{4Z{nO( InN?Vr} kpՕc> =3p8g5 dBqQ!UU0^{ػy !I/GV /mu'Ux:UErQ;~,xnݲ%Eڟc~nOǞ@OyQvVA{n}xOasE9hi&\w5^SQQ_Fcbr]Qh)H!jIB͆Լd }..6ݿo7jՃwS翂;F8g]sG|mSO˯ĺ/݋)G=u9[:s+ZaXT;EttiꜭoS6y KQilCAѶSߐ*"`sEj1;3;Cgoj;Ʉ-̀ɤҐN|GЯ-]D۩3>]ĉSg$zk%vPm:;yY-Z8U(/+E}4g >w^q Z8th)}$䣵jS ~};?0Q;3MwEͶ*@)}{I^CDH -N̺ݺqSjkk-SL8 ݽC +p <Ϣa;jkPS%%a=) 2$Q"8vJSz#'ӏ%3.Ŧ}C,xQZZ9&,WcL~77.z JKp7ԡ(Ixxţ8~SN= ìˍSg;ohf8v4_;QjmQILLN4 cX\\Dw"lܯ(.B0?uފf6_6l6lފW]}xϻ?0y?}9@4pC02k_?yz$ E8ؠ=7 O3SmvvlWx;Te1|oۿ]H<Tc_<ع&Ҕ,JDɉSg]L&{ Kt, 0:{g/3 bfV}e%̬YcSN_QDmm ?7߈|oBC!GORlSZRíMOg ;-47'TCȯ= ?Rq\ɔf\n,//kϮ:Tߏ2h>]<$ZSu*O݆5ԠGN"b{MjӁ pkm ‚|4DfC϶<+L8ݒ&ۓ ! gb{QTT}{vaSybۓganޣ{ M'>d /zUn*T @0 wʣxYw%*hEpiaqks#`2zk%vܮv ,niRmY%-3LLMcl|R{eSdrssW-/ư'O+6+ȷ.ynރtjPoSl#":z 3 pͫ6 \Fܗ1 DRJpsg:1x-+wwC0h_sniŢq0Q013׵6@~~~.;QD=x_-7 fs& 7Wȣ(T@ c fE%!ּ<: gA~P H`)M<sNQj++ؒ$h[;`{ 4Ĕb` %M66(~J9Ckkڽx݋׽*y؉d)z0P.4gȖ՗c %8a.̸ܺD{n.~` T1íͲ-7D]OCO|;ww:S'_i3!8z]+~܋֟i gx̎!l(uk1ڸW(FgO?n|kOF?@6-j@.Woo浰O⩧şPd\_x m׿VJA!X,M>>?~]\\B[\o I();݇p Ĥt[D[\15[p;ކ3~_g5ʳůW'3 zXqadL*''N!ƾf1pz0H.J%"z^~H(Պxww%M#r[;V_20$pݽֹfNi'W(= PpKrD b(+ rnzu!9ޞSi>^A,5\ _~I!wq#rE\Js])`0(׳.I(/ԫ(Ȉ\ՉmQ,x"I0[sq;o4 Bpκha\H.s axt~E]O+SE^S$yRPea^l(OD BJef$~&ށAu4wQ@^ ;p J$"+IȷPX= //!6< kneq4u.46@Kj\WicĈ}9%\줧0s]xݫ%7'ˈ`P9G Z8&O|kGCAAfcl¯u'69GNݷժ|x`x70<SC3g n7>{pvm$+瘘r5T0Md¤ '{U ZjgAKS]g::9V+hQEgO< ^v%tNrưwy {|=% Ꮨuͩ6ͷ"נ ZDI67q+o`Io*-DU[nSܳH\w>=qJuFXb<+#|_ }/d1щcٌO~#[6oBue%mz $+0E"Ϩ6-/+ESC}OD pjSςWA+B7+4‹GX,x'0^:چw?];)W\Rsy2tE$fAiyA7je`<'t @aaZKmDdglCgkn.Djh p #mɚy5yc=B7Ad ښj೟ PO e|M UI@1p45&[3,}X妷(-)˭íM؅c[:3qF45Ͽ2q9LM9T.9GMV\w5xϭWd6S $bS~yIPR\Qn7](JQA`v2Nn'=79W 0LkT݆;|#F8Ճ;Ӈ ãuaiy@pyVk.JP]Wk>];jE@_# *ϳz/>[tD2ȝ0:m:y%}>pκp57wQMI@N6[JPQ^͛PQVyod4f<_gf>ϴ Rkΰߛ7Q\7XssQUU۪"ʊHb|EfHIV"! , bH"Q]0"ZfMk՞c'(h"S08|j;U' Aƅ"! , bH"! , _ RۭΉIENDB`photoqt-2.5/img/filetypes/arw.ico000644 001750 001750 00000012372 14134304053 017457 0ustar00luspiluspi000000 000000  PNG  IHDRyIDATx]Y$Y#+>9s X`#/ V>dwc#@hŋ1`$8^ Bˊd ?z=33;;3=]=}_WݙCFFeTEfFfFu0tdfT_FD~_MkZӚִ5I5d&~/hʭjzK:DSqzE ۫4ܕ= ۚ@ l¶&a;5ہ@ ^Lîa Wʕ EUi{EMx2N*х@:iiIǢ l,*ۻkz8V:Bg=G`w)__}TYm"RZ*#ۋ;㩰k1Dhkb_@$^cΒ"?ʇ] Ke,MJ@[)6pv}HEm@yCha'YdBFM ʶ xrb ®r#{]> @8~> T*?ּo2%}Ce@1|Yk^XXj!t-.}H{qA}2eam(,mIoruK-SʌH.9-@qm,nr{p+1r(>\Zğ*E+FނqP[ w- s]M@N Ox+)@֨0+K} ܆uM@nK V '`IfJIDH|,vEM@[{>W3ទ) d*)h{ ɔҴ@wW}m}2+NR%4bCwy.(SH'ݲL̀" H.íǓ $-jV$9sIVlE$:!30t'e!Irg:N .X%[I0s0#IHk9ѱk v^ ;NPiJF@Id{Mq{`;P mEۋe4 c%ht"x6qki% Аhq J}{e܈_./GeH/H0cR$At`& I]$1 ؒ`k ؒ`ւK`O&a %|JUP7l1*A4 vp [UHF9wJQ3LDl` `I H"  f-$$MI9I0S CQ@3?p(j1Ϳ$$&؇ h38-<`|JH3? Jx'K%ؘ`O@nzML# JwVe-"C~$A f3! =ZPr|` 7hkJ5!+j? ]Nj-J7 fͳ$ @et9[`ϒ/s&&6ex^ ³$Z1Eq _A{FSh<3xW@q R֦6_?3ey[%30g?3y>@˙@00 f͓$ڙeܨ<K Lq$m|ʼn>qb/Bu" <Ohk7'!f^$[G .ĒH#hs[4siB fM\x'v%k8q`[?@%8q`j y`iI0c’  Ŀ6y8I_D% 19E& fLTx<:bX2 ${rb$51I Z'qb$qEL@|^8|TMh/hTzq\p-(3&@}Z|qVt!$Z$NqM$5I .č!$NO73s"8I ~֦wH0뺫$`s s0U&hcH0눛$p]qƉJٛw~|^H sp#I0k5H >N$$pqCL0O`Y8 *f?Oh̘$p $nč'Z8JG@w'n< fI8Iq N f$ T}t.' I` fh>v"xLgsx@\N $޺ f^Kq ' UI ~Q<`fJ`" f64 '>TTFp@qMC%H$}‰[K%$vI0k\I #`pC'ܽ@͇B Aq OH0cgS&lx>4iMkZӚHG0Tȑ%B'C {j8r9eL}̄=I-ѵSkMv lka9jW.Tsْ3 aP̺d,cT.TUAKEs5iB"<-^u9kC b.SHw?38k"q4ZqRl=x07 T4g<wȏ:?^I!d׀Tq͡-M3Nh{bୀ#7UL:;"ɞWH,?G}A},t٥l?]Y)VO~| 'ͱ-=I m2@I`4O0.oV![9G1ލ &jmP2$0Iܰ:RqU''?g(GarytșIc JsP%=dHP0inQZ#pz,ɉq4@n DI *wIjĥ6/t7mrlP~c_Z&Ϣ\8ۻb$oe>(G(`:W P;K/b!C_gg 7riy(rD UD`2 &] (N?MD~Ue 9ܬ5B`B}Q`aNc9<_M{p vO`0my(wIlG:h~r(&!JUb/@l0yTLv9 904k#F"A{{h‡[E  ( ERK n oRt qMD?6(5qI>]+$ev8EC:1!1/'o]s}_8-c:B։6K>G6U; ƂHj$tXԏ$';.ˌxD0AP>"Wb( ꢃ{Q?`WQ%p1e̲̯q siCޓ!X.j}"MSm$0Oފ  -Di~{d;@?vr[ڻi&{FEvL:.JJ5 ĎZr c筠H%eٝ9kJF?K7q Y'ϷaW- dͥKm1\*%]M`" F`=b aQ R/|NwҮ@RyX|?zmsIF^i Z~\KkF-NzNsj(YI(}}jA?_? 4=f4O% 6R,xx9Z_i+)3Mn6w2Fi)RCdP;еz .S4=flHT){/:H@Y5RKAZf؜`D u̬'S k@Y| {Oi1?'mXv t9QI'p<8g<3t&ӖjWɲcn9`,Ҽ`YB4;AEo  #Wupola[۞xk0&}yMK >IQMkZӚִ5-|?/r iIENDB`photoqt-2.5/img/filetypes/sct.ico000644 001750 001750 00000022370 14134304231 017454 0ustar00luspiluspi000000 000000  $PNG  IHDR\rf$IDATxyUSLkfHH!"\ pEEA\#.QYD}'1+If&鞥z&3ISsNw ,PQ|8:@"Adt% :)@B4x|a ##z$ ?H񄄾!}0$;xׯ7S0!IQ6)Bd"`&Rz}On/E4!%A! V+& @,LT^!QNedAsBLhB4C!M@1OC h)+TA;4`Iq^zAy2&Eټ9w;{10BBIQ2ԔZyjbŽF1^BQS^j1 D^ȲA,^,ۋh, 1qlJ _à/ATtA`h@06 O)Ivty.p&D (x@e#i 0mL f }C d1 йG! 7` pSDR.mp5H4A 9@{j"XN-5t1_0!S _1]^@8rv Qvf5h,޴^ !"45b 4HmA`Jptư@$41 KNd87u L0"7\"V1 0x|G  Lp.j*p;M Z{3Z%w"rBvfՔ h)7*, Ʈ~ d U]r>Gu,+1*dov}ˋ@d (q1j†'J6ܠ϶e Oıc$ HCcMJu7 8 xOX~Y{)'9$iT2C"9P_U9n6Lj0@fe.']V.O8lvqiHg͔ `WbZ8lBQDsף(ϡ *,9Gs'@MX4%v[AN,[oU@7S(' i-y }=X_U%BU1ɪ)' ,,CT[i~c ׀2u*0=s,19'`\0mx :yBL0#E޼ $ڇszs!K`o|b91 m`c xZz Ԝqo:l0zN|(6!Ug1#ҋxB,T-FOtHڇ`4y 0xǰudyMT( 2'`*PzcYVEk|&[@Ԑ9c3]ޜZ l5^9^B0jNFaln$Ø2c=0c7+x[j3ge![.,IwyHsE،'g@9`ψi'm O?k`R'N51t[.L_m 2HNG|5] l/,ZE c1 غo'H)0]jU~DNۣԐ 2>L.z3څ-XCGs^>@'a4^$b&o^1BNXA';uA߼bq`R'2䓟f0xۧ!oA{N00 Eva !SB>:[څ{i&oAsN@0?Y̰Յ[XзL  j&oQA+!^B>@` x1d-n`"3ż?wbޫ 巨q?} @C>yh.$IƦ>xt"˯~|oR]xvڅSQ9}!hPՅ'Y~ =t% 먺0Y~u^rb|Zhց],D/9}c-b'plm/],E x(B>2.[@DهH 䐏ч Q$I!˯a`h+^NO>W7@OS@@!|0a.`ua@orTC|E p" /v 8䓇.Xuab'PpN>F`|V*f|? + 1T]AkX(0ϨB>@RՅ s,F9@*䳡Ř!$ǫ@9b'˯)dN  ◑C>@.L_PȜ@A`G&hfvaB+EhQ]XzTDfL@`N>f 䃜 OK?(~yO|!|],e<'Мǜ@^`Jȇ],G^,њva5Յk Vt ۑ.L_ːI!=c0P3V&˯vgLc_uaZ@WW|DuvaZA`6'P'p؅{RvaZs |θ]xcK/|,Rȧ ۅ6wCDc{s*QvdiB!!0X#.,9B>EA`r OB>Q d,wwQ<ۓ[N #N>a$D)zxO:!ל:3/&2H!-SsK+,_{(C:&ۜ@Z'`a =!#2vtyTSæ3V6!!JTu t 4wzPWU-i?ÐעAoNn   C@ , AX0i}n].P0!!+/׿z1@l6+4Y%%Nαí߇Ëw(bqtϿ=d./Buu"s^Sv n H `7_G_1kvp8[amϫqW/\nWϫq&cwWx1\rJTV :t֞bCp ^wᱧkeQ>Xx\ ٍ3<«¤?PL"7HcG?ãO _YkΟIS?oGUd#5$EQη\P-;m{jq נ&, W_qRx|CR 0iuϲ#]@Pձ_8Xvq'9c 6BFzl\%%i;kPo2dž[U[v+_2ud=4 8].\}ťhݽxqɕἋ.?6mޢjZ+e :UU$HfBpp߀=ǧv<_k7ŗ^G$yD Ieː &A o]ΆG|xkoހ?gr4 QuՉ` KX9JJqm7gߜt`:HϾ.jcdIuU 0S 8v{]=t/>4M7ŏ[|?oFggw"ؖՙzlv=mEt0ohՐ߇U7O\)7RXj@ @ 佅<.`%V?p^jGSNu9j4 6 LfV,0?$p8p1G]xϬ~\q̟){ϩJU CI-@+$dTWWϬ} }5~rM;gvFzwflƆzU# @5Qc .m7'z8dR֝5:g0BO 1|"ˀq)'ލcHD񗶯rrU ㉄R8@$H (ᨥGn.Wrcٝr7wԭl޲ b\MH@P($眵,]pt9cvS5?})VB 稩±* BR1K:gWO@##a|HfBX&{*` <;a'O9LE{%I!Pc|E`(wҾG"u\?̱ԨΉޚx鵷r"(Y00$OŪ_w[lةŜh mU^]U ]2-SO:^yhՑlhmۅv:zI t 2[}tOsgr" jށ[:|٪;ƅ+? ʂx{]L,W_^y2i``HȨg|+;vu(!Ӛ~6FG*j9v,9be|f8T7W׿}6nڲkbLY0LDvtOqٷm[ nq=xs?wQʂ>m l 8@ں?oK,={r\y%fH*{m'V]E|sE QYYpD2v˯g_~z 4 :{?=$X'p,N8Xt|46ԣ$! Yg_z]1dىa~;x깗kTA<8d̝s*+9}ߣz0$YDfl @iiRulC '2:wI_ ە}zl MM BhniSȄe EzB~q˳*\ӗ[ꂡuE@1gvס*cKqUZ#C#EHUWU?\vbfC}˅;nqP% b#bch+wΙ݄N\rr?99ְ!fÏp#pƩ'ԝr:gVɇe\ϯԞ߽*<}8= qJR y3p&|[_W/2oފ_]Mjp sBeuun9:/gíCYiV>u2\~ɅXpȼ,luǑ L*{Y83֝Gغm;vvb͆'*8-I3N=XJG矌$ŖbݦщQ"(3(q:QVVgaE8ԓqipU8Dž_,̟wWdαR+"[HD4j@cS#  bȨc8DQaU TW u$Uk)//3Nӗ!;}ЁF=qmxhhmG$\FAR$4xߺq&ڃ. ' nt[{MkW;l+'A mAW5.]mlā ]}p8?| p‡ nɃξ{ v[ܾ*(zmtIANXpP1^[dEpy\:@< 'n$K ǻA( + } qc^8⾷ Ց nWH ǝrƻ8IWBu%YGv1:TԢ1azfQoH+h@.FD tzOT7ס{a@Qa1ǻAA)EfzF4Ե67j!pP YN~+t4!ٖ2tKR|,͵AC)E]Ֆ<"CdAz)?C%2eHukasPRd쨯 .EK20oaMtunWCR\X@\CNF62-qYPn#q F&ƥΠ7`Rބ,[Y~9zC~v.r3r-;)w,&sܕ+_{Lq`D*b`!73 ǻ(gmjHo Q``0Q6i :.흝0ldx_JJi'N @0x&NNЍ0Ɛf0M*D"o8x*?{  s1QߛF4dc?oqA D 1stcpf`4g$ś@H0'0\ ǒ93QJhT1(bra1fLG1vm±s'0:\€d0aF4,`H4P(Ŝ)0eB t, 6ݛ Zo,C9y2gBy 7f%EŽJdàӏw.cUaBn!rp:gG@Q  t0L4g Ӝ! z?+^o/o \PtunWJk:D* ӜLs&dYGWE@(BCC'=d}H !1&oT6U`"23{(0 0Am $KRq8h␣ >e|]yTaXq` NL72HnW8:^os- ''Nt7^{ 'jV@x\8Q#VPq{ c xupHd68T^O 'D"o,;N ^E*` I>"7Vz\8%Y~cQ^_@*'wPă7TR9N 'bċ7ܞ\O 'n7oP pD8?N`0upLZ~éGM'3f'3&N}R)N gL$7TR)N 'l8 ܮ$h\wS_)1,F {\8a1,o~B!q+'7T $ N$7T t$e/ '$7 $gNh$7T $gN$75N 'h*8H9d scEY~ú@ B07~@KGkXP'$ӟ)#"c[47ac喤Rh̖P t&G@JMBj[QR MHh̖p $zI/r(7+%{;r+<4EkR 8dXO (!v*v(hhoŽ.f\ pI8Ijݠ*7(o@}kcBhJP 4$zI}W+ޤ,ccNRw7T(oKR!ن򺝣> M:l {##N Z~!N![r ܒ'k/6Tl|*[~C%JV [j!Jeo8$r@R  teX!UM 4'^@!mͨh +L֚rt][~ÃnN8B{z1r'-bs̱vqo$z ~*oVoم%YBEcn D\O SUv᪭ ; >ﮮ6"ANCxBFn @"'7TxG[n 'w{xOGeYƦ$ V'VH $H7.LN0FDYO ! mM1֋Idq %DJ(v%][~K" $r$]^n:8g|IB8B ^ + n:'0,'va6$]g-@HD\{ '[kqq- {[&,35N nhD]؛]8Y~%n9*j=Y5 A>Q;*Bpx]O+˧S م7~8XDq][~q|Ǖ  HC A- so|'N`+X{ovqd#^⪕U| *N„ڸ7ވ8hi  `kgVC @D^n{\x5N`\ o’,a'5d\UƺO" we]gm߸fɈ h'pE8g@D AvanM<+N OGDXddb. ab][~ʦjc'hA>рkt sobhz1D z G.-O _g?]7)e@L@$lچ.kwvՈdvaEQPɳ&T6U=|"/1څ7U@Td 4ށ_vn+qo8 @DJ(vteX DI hfWߤ#qQT Cم내 {-D;N O/gg D_v`{,5||% T8 qRtvanMqݨB@`x?c.-I4rO4ۅkGڅ7 4Dv=T!jnԅRȮ'0fA>k.GK.-M$ - O" r3zm}&qXvw(.]zPBʔ'01FӘj+xO𥌊Շ9'Џꦱ r}A><'PByןkD@OpƟH $Â|<ȇO"' θw=[q*$ 8pJRq%'7N (HՕ|8D`,q (ƃ|8&8Q1uDA'N#2*QgdTX8NPB9XsӨ fKs88s8) '0\8 ppRQ}& iF# IݨpɅσ$j-?DA }8vhD_,e9ADENuQ@a e@e烀N Iap8) '0\8 ppR.N Iap8) '0F a@<c`CfcfB jpP%E,ː$_W*PD(` B?!dX塈PYQ@ E(= $Y$K` nX#U !)${BEPJR_J)((ʰ Q#"rP][ G CvVJ'\vn˛$`2`NOG)iii!GfE]}\7J(`iH7tC} ;˱eVբb⅋7xvUUhhj6Ȋ ^l`9X8oh4B17#l+ߎo;+w n Fc 0o~Xz!3kF㘅'z;v ~z5ԡjc SJ&cEqȁKP\T콝clRH*|wز}+Z1tBE`8%X`233#&zcJ)ZvΎWe 'w~ ^]% $"PLL03ĒԲt^D ؼu yp\K⅋=TTWn7y8hq)kvl޶} **ՁQ.  '`Cq`Պa0zCB_<> hn__5G^|X؍R ͊|Ͼ(׼:QӦ3瞏{RTT]uX,8%Wk"`k-cV8U>+a +gKOdvs}.VM.90J)\<]t}äA&jY=?1W/3#}:5zn+{ϰu>NV:q+\#c=ǘlS, ‹XcyyFaV_y'Lf/>swtNX^:L&bH=jj囍L ~ly]c|͍KeV1Cߗ O N9t<3x<KX7R2꧌vǻp՗cGŎxW_FuLn(f/{jjC?QO>4nttvtަ&\yxC_Pttvƫx RǸKQYSR]Jٗ+/Cv~u=p\cz>SveW < T$\.#txРaE?7zzz: q}`9FׇyoGxȲ'{ 6o oEA<؟PL՘JdX,p:ޮ>n]93gd21It]]umxgxE@LAu]3Ɛix>J)vT}a0uJt yW kѶ=k0{,0XsfF^n߯=[cȲ N?giQJ?—_YCZ8 œPS[_{wnGGP8j2ᴓNŚk "Kk3/>>6@@)(ǫfJÂ棻o&>SՁ;[oƫ>]IExWU*-xwLJT-xϏcy|Bo_/l߆^{ dEaOԈӦ4;ct?b66A1c ɲg^|5uщ"N8\rEX`!,f9DcS#/j*#VY× vEe6++ ӧNò+/>X;+-Wm8[oqGԲ[}jɅزmmvΛXp7 شu3>SEQ W]믺ii& '"7|ߴ'w: 'Zv>d2})Zy۟W^^;󑟗lz F,_s"y汞JdJl'N~sQu[ڰuV̚13$H7@VfVXZR܉w:^~5n:dfx}Ǣœncy8qڻkSQh18ꈣEVf}Jp57ǍUߌvUXy RJQ]S6{fFnL-:/ĵW\_"#u_uJ'OѼ|)::U[d)~sѥ0 $y6> gipp~_dͱ]wBO>Ҽ^xV<|Xkn7fQ6oqG>;T KwM Ɋ9z$**Cn ,`G:!44k~V!(=s}\t! ؃(8pꉧu,X8!̚~CgwGttos㐃=ȲՇ~sSݯ [oUk2S7ef?~U;*v[RT;aĽesgQGVto~(S{$ ,c>u6mPT ?}℉ol JXeYFVfnh7!c & 5QdEsS$ߴ^+-lQ<rn76lڨz}%h؍`CT?EPR\oCS#5Zn߆޾^}_)=NÖUظyBH *w 5ma)hʵ熏>b5̛̀(D~^^ħ=eY=33SuqTOc X8y+vFtt{ JJ0D!*|̘6]u_͊j2+~fLS19x hA=50(#^c R-/ECSFSKTNbW[ keS`J3ܤ:7OA}Cʹ%%X,5 uRu5Q[_y-O:x݄BՅ\jzz{51Bx?Ghs5u5Syy?w>'%P|kPK1w8!F!ddd ''W!20dR.X1N81@E4:bө9-k0qb1X媏c 8ޱ;g8b ͻZPPXP Sj8ظyfsoVƐ)D)}8'NBk ÏDqQ`@ᘙ SZڰ BȰg ٬j }(h߽[^yy,{{=6hs7<ϰ^!6}}}ӌ3f[c0 Vvk"wn7^zeͮ&ӧMvBhWյ58A  KN=TGU@$KFN,!xC˯(/??(jWY5Zf:ݞF܄.L([ơynlQ܊h:劉p:QPYQ:w HK I`0's@lnJ0ى]-X2P:yYQݥ4@n3$Ip:oOyyX0o~ȍJeMED^YS%';GՂw,(*"I%A_ǣ`JݦA(H<3S pU̟(BaIv{p $ vZFPj }?ȊCZo/Ao'ؗn7ӇݟAfOI῟|յ58sqWd2iN?@PjRc?{n(2ZZQ[_7jdٲ%`fW^ &+r@ٜw}>ˀo_0uE@܉koZwn|E(뾸nrQ_w݆~ۋo sfƴijEQQqʊ:,^tx!DBM$jHFRu:44ER\p/_ܮ\,f .<Lq  Yn>Ph~0sY}tXWpf0KRs](T49$IwAoGk{o\Y3f}C5KNjWF&GAӃh ʊ*za]NmP]S5_3ρNn$HY-!Ucy(ajGߦgFǣ)r:^U:Fx$rsӰifs~Ö,HfL 9qm'ۍ/ut1 YY(.*⅋qaG`K;pɄE  ( ܷ .{8o(@ks3`1[Tŏ֏QrΌ1K=wv;M&pӭE|{EAnNfZթBަ-./DFFȲ%ӇZ[Ueͻs5L..'Q\Cx4oGgzDق B! $Il@16bwoz}TRo'"`jTkn> :m8B[o?m}7K~v3_YY\/PtK&fk!%Дd9`nj3DK?CցA)Ů]cHgz=>hMn}zMnRpՍנcd)̈́[o?\qo#,p˯T ߯^u?ٌc yX8O=n'oסMuߙgEQ̛;O3{(1eKe%:9uRl+ߎs/:7v3vTc (zc >f%J)MMOp4M!˖c |N=mzvv6/=4gzz{У[ᅢ5G#?gBvv6tÁjW{ok-r1w܄ۛ"h 5Fg L0QuBifojkq9CE~~>Jaٰq&l 2o˯ ]I'֏ҽRe/ROQ`Ur<>|&a#;ᅢG|\Ӏu5UÖDٔ2֏sUMnV^M)6ܹn|w1h c0g,\xޅ͐d XrA/bӀMxg^DNv232 "tvvh&{1>uZ""Ik[+yaa`+4fO{$ݴe3;!'00OPJQP m*p}Uk.<Mt8ggwRM-^؀/8 E'_ VpѤ"z)H.lJ)NxTywPQUeKBa=6mݬ^u$/X%DŽ1cVS]p;~!̚n|+ͨKNN;%,oK|;vcwⴓNO%hO`;5/RmgWfۏ7>dY҃)'^~^unA?5 QfGŎdåiiieEQP4_p*Us >S|hެ:l['uV×SN89!@e,[kyc?ii*vq1 0o1gŲW58( fϘ=OZGWRR,[4c ?8'Ep57\lԲZQš2w}۝(+HXi'|Z+:=:8Nt Cܯqw4[œ9gk} pe=#CfF&NrUXu :Z1 K>\tP:4.Aqk~xpPI8;N3RoYIjz)xpƩ dQR ?2Ձ@`(8#_Ŋe˃Eǭ9?,XH]c{fݗܜrM 3#3QEԲx/O3Άh z߅G>gHcR,_z(x07_/[cD 00pX?N8zjdef\focHKKB{nн^yɢzX{1p{!Z:l_߭]+ǰ!FyX8!?8sO,” 10\8 ppR.N Iap8)^oBOIENDB`photoqt-2.5/img/filetypes/rs.ico000644 001750 001750 00000022707 14134304245 017320 0ustar00luspiluspi000000 000000  %PNG  IHDR\rf%xIDATxwxչ3EUo.L30&:ƦPB HK p !!pC H!$W lcS;ջեU[i̜zeKHݙ)yw4{vw̼w l>HƐ! C@6 l AG ._v1]r6AD`َ 9v1K/|$7(I $a&%! C@6 l A1$acHƐ!  L$cl9D YCKae N. . NALHTB1H}Cb$@XCQO lDA'Ã\orrqgB"%$ c p=>tuchxaY&C%0#DnVJ򋑗 QI]!HYߋ6 #S|~?mCRn ҢIO%, @00hhAw_/dE |rOoƠ( z0Y4.q"4 z}kmįc aIBSG p2x3$I C !$1t.r9$f(:zP{A)uPR~7amHT;C}[#rL>-#èi?06փ  C?[ :cBCkr8݇$1 M-ތ1 =M!, 00tz3k42\sA0p=mꫧ`86laH&cL?>;ЇA? `BR]}݆MFؐL@iaG5~Bz)H$ p샬nʔ0p!BE d Cn*En c pP ?[ZZ{H&  E+,-1 v܍`(X  RK$Y95-unE]kifff`’d* 7͌%^~lFD@#Hù!S6kZEAeS5F#!T4TC0,1t2Z6]Է5f@0F;Y`0_ 6V#$H a"b^NTW&08DkUwcmn*0m=hlo6y2"$rMձN0уX!l9*i0+$r9LP[Q\k76F`rcy3<1*c>$ 8D=Yn*A@7:u M1Gpl}+Lc yrnlKG-͵F4w¡6` !9=fz}9s#+n&?#:+@ܐLDq^*NQ-c,qƚ׃C 8`88 0,s|x پx9 @LAӍE3 sܘY4ݐm,rcޣ#()0Uvftd{ ׮DCIrC s+9GanfMKwS4!jmnd6C9 GVsgtuiۉ,̝1NљC Q˯QI#9@nsg):"sx3=?x2 !0A!p`δYX8{>IwPN 6$ q{`<,=98Z P9A@Q^!+;egpXʏ-B9ؘ#n@8"yٹ׍H^6rpGX.Y(/B^V.DQU? c  +Q_ ӕo8H$2Uwbz4?G P1Qr:q{ܬxܙm?VD(0]}ݨ;Ԁkc $9(EnV.dYFX %(@D8..8EGd0Ȍ1Τ,RTҒX& D; ppgR%TRFsXz)q =ԙT~vaL4A@}+C@- A rGA@N۬7^"9  +G,5塜XH}wsor! t#߄F9Ð*oPN$.$S7PNqHwkE_켞 9ZTMG*Rt7ZUMv^Oќ0"L,b F&B(lub4o=  `D   ƨD~oM IcTo"-'@@$-;H07^  ,D* -0k5"Z~%sX~!A³"!T5'#t%jMd9k$ ̖x9,g[~!5s$D|X/  Tco"X5'@@Jx-HTa5oB\N6C 2'0UX/cryik *ZJʖx tY#'`CmK=[ "n [쁎^Xќ0ۉ5PHW ubW>%)M44vC4'`,}Fccg^cN47@}Eih`M+,-$aO~t@$q om4I ;Y~e4'`,}V+4iedYƮ谨;QhAPf,)1jCy1`;ƀд'RslhM,'1 `W^+0vV9\Ζx1{NRyhj/:! {k!s{?7̜((@KgkBkQd+Y~g4'le1ƶfT4V% W-] 71f,!1bw~HIrg!$QӝdX~f]Og9rYCݳF.,* 7̸ )G{ofQp>Ӿ≇Pw]@Rќ$g萏 ,R@}eWFsfXO0QG)o<7 M76WC̒0i,mQo^a3'`J$ {'%W]xĚvaY0T4U)&wЇ,d&˯!'`*'pBvarDB>z va|d՝ќ1$1!|!=؅?6]XQTWw0 5U.Nڅoj1z?Z|hב溊F,dMF Z ^TS嗮)è9=B>z G aɱW"oʉ'Pi +"c!]` 46Vz݆ZO )y{H.L_` U!=md5cs߆#!=) hzW],HN JFC>GX>مk<0(|L:0Pe0c A  1Ң!+WŠ,F9 QB>zP8V0Y~M$'З֜@Z{E2+#v]i.,0*ɮc"vՅSgZ~khҝH[0jGTHY,!9C>z ԧ0Y~Gr)f A* ל+'r0UGcRR],C t-;Ouaќ@SH5.],' DƮ Œ1R_Kʜ@J@$ڏN'BŠZTR"Mhh7GkՅ?J.L_둪Ŋ!{M؅CY>tuhp$ǣ!בhu?Yik9E$8Q[A!-eՇ )@B#7)OJ@S@4EN D!H?Z1!?|"hKƄ|辟 N4'zGV! $*J>a& Cf @LP)C&ќ@L'`cG3fNC)zBFeT4V$.*HLUa)H1lDAN>>:; HْA 'C@6 l A1$acb<232@60#.;q 7A[ x_?5vvT:cNZ|2xV>Áҷg.(Lkp0ʾO Ɛ! C@6 lLRk10A]WQȲ EQ Em8c%O~VߡLU2'!DA@XفjTTD8Y1v#/7JJP6{ŧ攡L/"5阒$!<D wFB5#=&PR8 552EQ.8΄U!Q?ЏmoǚkhlnP̿e`Zq .X3N[s-NBQaA"˪3_|e:?X܃JE<쟞,˸+pߘ g~W׭uCVWE/7 [oM}<-GA$Y›o oyۖpQG]C=6:^/-8\x1X O8 n;chmoލmNN@D|؈sc,*V1Ҍmor.ڏ@?~El|sS܃2~?vم J<TuRAeG,z\JıgEwޏŽ 8H@wv ]> ` ?;aP `cCRYEzRfq6kh!@Gx8xŗ_JwSlGEU% HSoO(ؽw~o!+8Մan FFFCo&@$z ۱qKC0Ahji}_߾(/uPE Q\TO\՟Z㥿mC `'vz~m#N3q(w:l%AAImљ@t?tnfKxgn{]; CGv`u u1s\aɉ{*I՟e{llSaYaznt p1Fsۂ|,Z\I|FgE=^z ׿Bcs#14CC$UX}].\.aD|ٜ2Joo7yu`s(*մc p80tքRQ5  8DQTwNws-(˛v|#:ˍ|U>`˶ENI +2N=T ? ! QpΑeoljw߉^3~8D A"p\\I7&ttvq8DN9ykjkp׽_ }O$9pcά~~ }{Bˆɡ^:X o}O稨,p8hVEQ0o18Ly(šuk51$e] ;? {pƊX; ::!HĪիBFEL7յ :;n2 GSK3^xϸ+}@(@ 'C쌳p'LVl; h5{zbrf`0{G*tǭX5t?;Q\TUt#Iw5}4s7vnVu38ԙ1/] ?߽w>ڵjI?|Igxdkֿ7_9kx $Uc:NÈmq9]jȜ$ ͨ BG-H'IMvs#.NmND<4̱0$)Be\|ErAǫ#JBO9IVWt朣.< چu @#?/U b2!  B*~Uzfa%MZe]ع{`AХ3 ‚uO1Gfffݴw?> 71%$Beq8g ?B0I;oC>\բ#Θt9GqQ TT/nmkLByfdfT<^uq)(H9{\淡(&OcAUuss&MqΑ3fH W`@,1olBSsSmrP:c&onEQpsp]n1EeV|GDeu%cI (>ܳKg͚t9ŢTukMсg9V2Mo4qE=v`nRz W=8*_/":/~;pєp8pi~<݇I;c )Zr|QQU귝x rsR2WXܜ\ݿ.q }x7FC! DA- ~xmZU7}tx S^E-iUu~ع> pݯ/;@˃A}c~_ b驧%`1QR\Y184u3lX:siKQ6,̛;\vtv<,攡 Ccs⺒/gqVʖ#''Wom~i @صw7v <dee!,KD_?`\vݸ?Efff̺wVcq-ۃޞgW]y5sԘ*t $WPCeu%jj ϻ\pA( . -b, KFQ\\ R (YrTMoos&t:_ ,Lˊ!F(bjH>O˽e^n1}qe,[Pėn7]wceEYKT$&`P\j(Y~Sܰ2q| >uk([wכ6VL~g6`(/9raŗg/~LHQ9½_O8auz4|G="Mf.xEJo}ҙ_|6 [oE]}=3N_W_/]WCE|s/>{%5XO._v,=5b5(A3`ܵ{EuM5;;088@00En,Lñ SN9˖ODvvha->yxᶛnŖm[WZ[144`01Nx<^L+)pβqܱv!rBk3B"Gq Kۍ8o#qβiyhidb| |,NavY  =h@Oo@e8Nd3|L/bv TP(_hkoCwo!pfzӦc(*(^@ x$&.jEmp3|;L]j>ȕEő>c"<2Se& (*,BIq N>i$Pj(Psv AFJG{iE]b< l A1$acH| p0rq1@ (ta]A1$acHƐ! C@6:AҭIENDB`photoqt-2.5/img/filetypes/heif.ico000644 001750 001750 00000014525 14134304136 017605 0ustar00luspiluspi000000 000000  ?PNG  IHDR\rfIDATx}lg33%M\;)8$iZQV%p TN?*ǝĕ zp IT:NH8NBJ8KU˕4 u88ۻ3ޝٝgG⟲Y;ߝ$HKF@Dai@1Dci@1>wĉnJD>^:]ǵ 'G Red80"8K<@1Dci@1Dci@1V;B\GpPh4lض ו›Բ,|ނe0 2(N ضZmkTֱրm;p] yӞ-i r`/z{0 X0$P;X^TRYߜB樂mFZmR^?>&akV7E>O󱍆WX^bxccMW ct@Vc~~׮U8wV[u%J __ F.ghBr WQ7w`~~ڏٺ=C.?W-vsd]~rF"! %ח#9閟o'8' :4@ȑ3s?H7ssN/@@##8zt} ۇ;`6v~oG9_ػǎadd!"),wܱw9~oo9?7@EG܎>VẲO)%LP?`R({ LK!)7\ETFB0ޓcs9ؿ`s)$ !Y9~3"]қľ}{Pm5X[kGVcpZhV~7V9>ȣ0B"%`ƍq 6 n~E Àe|;CVw| ]U~;55b`!  da zz,~y:'W~ !'p ؆W"}]'oP+mnykW~o1'8'f X[97aPdv]0(2+i8'@VV |ʦߴ_ 0(tavzsz 0+^w1Օߠ C`~^9uLo'9˙`PTO9uī*STeT,7oIoP9l 0(bf?o9~7, 07!o':' ߤDf*AeuN@p7Sdk9m@`cW^9oPY&Gy͕plRQhօ\QV~< vC>aB`m^b](r?%`jv'l0+RaN@YHqe?{R&¬FK9eC>vbB?jׅPY>iP&:򉂔caAͼo߈}N@v'lׅYWRa D][ Uf7^iHu9¬&#s (|мjԅYMNRQ DAs_N]c7![sy2BWުuSS鹟@ !(;ݫ i@ !(߫ Ϧ.o~ |ՅS0+铖9T; cuaV~)-s wQ^e70'xtr'.oaN HӐOؚu' ~I $iaxqׅYUCs@Z|])abrlz#9D C>fg?ʯzbU|G]_5 !P*Ub=T [suh¬,9X@!E`Wa:z-Tօ+~C>Q&aօo sN O]^w sN ʐOض³]5X͞" ! 0پplV~'9 -wQAsu3gׅ*+ǜ@d!(lՅ;{q D: D _}&9Oov|tsNC>Q[ު.qQ :¬»@4sC>aZ]x0WSsC>QhU*~|Ѭ OO/鿱('up'ZR>˗0+z {NOuSfRETaWca XcģY~ 0 vk /UU#ħy)hi̝_sa tIa-oN ppȇ(ya C!JnNw!07!4ٚXh!JŎ S75|Nm.|Ү9MƆ`YQZ9"D`n})@s0<܏Sf?l"M~w`"JDci@1zӓvQ@Z>m|SO|mzHeG?w#rAȑCʖ@*>|'NzuݶRJ;Ö3Mry?Ns]-[~{{_妨7. ҅㸉}4ky{2opw^Ϥ~~Z$ Dci@1D2e,~~۲T,άyg!fƃ*_NX[[/[3moZ(EN"nV[ 6QP*]g>wr'gY?_J=7w%9Оs|CT hRJ7÷iLMM\{P._[ss󘛛>?kqsQ& ;? Hc "14ȸV(Z\Gyk033sxWޞ PzCC(tPȣJ+y,"nm/'p[}a,x& cz0e8z% n0>K@& w=ܻY36<5U_. cc@V^S-~wNzM,⚀;I@"14 Hc "14 Hc "iTa~G˥ <B,..V[k+*~GZ܆aGbe7& z晟g~spСS0 =;/"<>0 }Qy's0 čDXmW "14 HcZ/+Ls{LSHJ&ziuXdqNt+e{1|K:v|\{xxu]{=׿u]mrm4Mі.N!#“O~ avz^0D*w%ۤzAkQMR,SOh7RV΍UyFM4?@Dci@1Dcie@oy*iDz,_]{/޿z+B /6(xHc "14 Hc "14֓tڜIENDB`photoqt-2.5/img/filetypes/mp4.ico000644 001750 001750 00000023151 14134304167 017371 0ustar00luspiluspi000000 000000  S&PNG  IHDR\rf&IDATxwWV9hF9ɒe!YؤeͲD`c0^a ^e9=, f ۋY2,6VҌhrӡ}hFsMuMUu{]@ Ws}Ap1$bHŐ! C@.Ɠjmk .pMxK)GuH>' Q)/ZWEO 4Pu<Ap1$bHŐ! C@. \ Ap1)"aŚDN!0@BHē*b$IɤZkW8ףQzp0>!$D!0 @(H(p X U*$ٲ9cP8A~҂J Pjb@B@d€xBh#cEbH`lއ!%*W?ϣ0(-̃B c`H BM}L6T;<`eEXVU@Op0$Ow#aBj ___ƴwHqUcYU1^!Ȁ`M]C kWHhX45u(B&=CchD,b`4X"kVq( zB9X2{ОB8 o+ 4!hPENc@8AD\_!8O9|"@U{Od>ӞF:>w8ш%t:Fh>X$ K$90jUbq<6>,@Hx]`L#@d <$* -&cd"2`.&fۭO?Px2GBP(km\' ++aUH Q!$FX,$WÀxx&*X4 2? ,IlL{]W\80NB0DrV / p@ \h~4u |B"Tm5BN<8a0`ù>Ǣ<\@p5S{ M,鞛hhCt<BζJ a]CZz'ʦs5  jVN0;TUZOΜ'U܃dYyw͢pQ8 f AtdhEB0~&7Q8O$qǨ8J:,A}eɔ J} VYfo`Eb8k$ HAMY*K-,Y{)'>$)PUe(ZB*K P_YC1_f('$@A5uyvrĚr8S.S9 wQ,ںrx(ᚥxs}9A78L9=AmyWQ:(aJ-B9Imy!/ʒ|l\QB{ؓu7SN@$PQͫjP[^Θ)B fFZYS ˫P97c@0Mob2'pr i{~Y*1D(2!H)Q8ʊ򱬪NN8ߦY~ͬt%'PeK "Eywd H Uh7Kmj %cy䡶a$ݳap4U ]Rh9Bt_ ]2񨾤e1<h8x U*䬉.< ?EiAy(xDwZUU~bؼ($pJ D.(D@-9CSss$D N oL  À, ęHHtqjNuT1it7K{xs#-28㠜k@=# tᜡA9w.v BPC;"Κ1 Ho&$U'|` CcxbF1 pɤ3Lc;xӏ^&pBNp4 f]9ch\7X~3czN"hH&hx4u_MEtohhhCsм7/;3Lbq78!'L` 8u'e1H, mmEΤ7o&='<` cQi@,՞9cHC;bd 8o6zx" Er7 *@[Oǖ9G 67a3}hlsq*@ Dmp0!m[T%pbJf]s08ƱPM0 #7.zv]OXG;05fC0s]XUUmC5k*v G|:C>Cc[f3d V FB>cќVR.L`-`Fwp=d*V X_B>9gmuaf+-3B>ֺpMd 3X/'`] 41p=dIae`*3ĸ?{pՅS5䐏 U8؁^ ;k K![.Yڅ',Cd)Wrbk @C>FPȂՅY~mvIrl|̀—,T],*9K @.B>fCck[-`&˯%JNs1)ro&˯ur9 ^&B>GXX.zkY@D["G_`zW3i~\nª\K/Y~- r*V g 9 OY~[\r' ]8Յk&s9 F&B>-1U&˯H 39 d_pDŽZuaڏ\'u0k%;0Y]Յʯ\O {9 B>fIՅ*%9 c_ 8.l]Xd3 dG&B>10m} ĘjNڝl"jRs 00Y~C6sYs}hv@h qd+'`x%;`Duaۇ"c*'`z |1EU^.z T'伐dj&˯s 11'`И4-Ҳ pjbNxpQhۅT&˯;03'`X|%;0i~\ 0Y~] 'B>V^p0sV&˯ q{5L1.L_1h31@!S.<.L_9CS9 |LEJ.6a&˯1:'8Lڅ4c8AH,.蜀g1NR'+Lڅ_: IRls/+]UxQO 1􍌡g˥&֠4"'P''pџ`\N }Sȇ rQ9`J> r %nXɇ DR]\N@L|'؜>3a-CB>aYf{-RT!pR7|dHlƥxN08҇ڲ"0HJ8zJUgHLs/*Jq=gL-:LAXp1$bHŐ! @T lc#.YJwB@a#E|,]J_R[7dM ?7KPU {u:h \ Ap1$bH,jmNLLf?j2UrYLcd!! Zi-965R8Կ"x$~GrJ)'9q9<(Wnd9qsW"Ȭμx<x=ߚ ::F{W7.65]F8>%Ũź+~Z\EQb`?` p|K8 JF-pɏރZ!L} /:rVf;naxx֑fqUpx=|^5UX^_˗aŲzTV7i^( ^oǟI HUƈ!I44^/G/ly !/QGAEY_o܋7rm~c~ L/Ggtfkq7 }xqe߱eӂGgCXR[׮Á}75އ ׬̼:?hq˞/~2, FgWOZH&Uz8x^w[ yC(..ZKcg_@GgwZO5``is*BB82~_’j};%͛T;Kc6'# '~o|{h2g_Ox/ATUUZ\&\niƂ "q DQ]ݽ}xO-w܍144hkk?)<_1Ogl,<Z;mm}i004c'O!v<GpMcO7.8ǥf|CG?}k:Vg)%^:t bUT9G{g4\s/CHKHՍ}!O/hlk<g8yzzr}3O< .>ï~\p4Bê_Gaw 1HWÓsgr}öo2al,^Wj/hG1*v@eErlB'08<޾~CiO9|q' ;VǃRN?9.])_+}F]ex< ٍs/l v~VU/9x4 7rK3!Oݏ"99%%H$Bh‹?{Oֽn/~;|GUU!^uuQ`BJ~I~??1/61۳ |=8x^TUB&pM-_?|8茹8V~߄v鳍ŪU+fd 8vGf+?/xwEumT`QP[7cMm?=ѠCl0 ̌uK|i W x/>>goeZel2W-ݬ%Kj}] Gp9QjhޟϽkuڜswQ]]$S-)gŊeCw{+/00{K+eضyO4tL1C}>vEލ_߸ΨFG/#f?H?g 8x[ބ>(֭^]m ^6+N :s4^=Iey6o\{u[|Y;{r3 q\#NkԵyuU%ؽ()+]\Hڿ|eH[7h֯/\Bskیa'0vͪXNW\gyY)/ӵy04X<SЋ!mmZ-ddӏxzrCcع =<=(2w(..FJx^<9b8;kۂ|z;)|)%*˰uӆYR Istv1޹ &:Τ*u3Oapp.|5ksffXϋ;c'&lSg=;+^^V6X"ї^ypn۴'$wB $c&営)_U+aՊe֞e 8u j ɌIou`l,k۶F{Vu\\19~vlyƒ6m@qI{ցv]WVU"jC"ףs_mW PXukVZ;!)$*+ʱes8_> nڿw^@J<¯70kU+{<=7NC&TUz[Rԫ]=x`-fygF<߿ߕcֽۖq&(>k /2xMRmF%G $;mAAA>Ȍo${f .|QYg L&Ս^ }ۺ]TUb捖 g\ߓE[x5!^=8_5kWaYݒYؼ>-ף4=8tcG)%1tul}8I8x=v`*Wm IyGU!kқV,3f$AJTUV`kӊޱM3dq<gWuRH$ɌH}>o?/YƠ&9y~?8+CEQVZz]ؼiiC}{vч?eȒgK]GAAA#@ 0k~ݬ~I Yvyy^7؇&ٵ^y޹͸:W圣D."SXVW-XCn5kQSU @E3I3󡸸5UXbl;l–M5۫W[/C&kz<UhuuK0X=i&.j[W|lBo^w=B~ QR\"_)t1ك|"%n `(nlܴ+y?>~]#ONZR>i$ 7qr+8;OZ;ub=hXl)|>oJCx >ofOr!ϒ8@[ķUUI6lHQZ\+y)xbB(s]gnSqj&{ι~#$bi];qJ^ CJc6܊>>k1)ž=tYqz9#(n$$={߉*] aO5w]׿.iЕ l?/oqx(>W1:2Xq@Wţ/(k_jآvS|UsLNqb_?Aq~?n^J__'kY)Q]S;rꌮ%τxFw7Һ% @Bq'Ͼή\_fS! 2l_1|}q^}F(!߄6ɧOu5Xjj108K[iEa zVGNi@rG%:{\-8C8U⁏M 0qpR" _'|7,ٵEE-6BKse>ښj|[h0dʟ*+-ww7 l$#&(,*goو/[8raU^/ۃ>Ar~pEml,^BH/M ud\YRBFٵ?~yNmxѕBٵ{[qnAiy2_"LqGtHuZhnG"~ׂ{%fՊe w>6*.oK7|^9Cbc kWī=mߊbR%e==@2c±p=z NXCD*zg묎kzLXq1IEWw/::?QǴJyy(/+Œj,Òjj,Ǚ1F5n=Uw. J9Uceeeشyv&^%¾@2հs} |bHŐ! C@.&[EZ' ǣT/E^f;ABQ8єۥt\h \ Ap1$bHŐ! Ptxթ-IENDB`photoqt-2.5/img/filetypes/mov.ico000644 001750 001750 00000023667 14134304163 017502 0ustar00luspiluspi000000 000000  'PNG  IHDR\rf'hIDATxytdW}Z֭[jzfs! C fȀIf99 M!$,aΙ`nuKj־Rޝ?JJZu-U~}}JNA; Ap1$bHŐ! jro~BUwX 7/4k;M8{G#Ys"B' EPui \ Ap1$bHŐ! C@. \ AM+0#m'j; @a.J"9C7sH/$ QDHcPe0"ˈD UԱc` _i%(4)$D Ơ/.`58*TY@oBO$[[B׋*T֡ LHB`   |ܟi;J"‹ څFVV !ʼnqs4PUADWVPU{Bh4@-. 8:x8Ơ2' Qs|2"$470x0?k q9J"oY̏*j|bnhJqM8=0pjد&;S_[#  !#8:R;cb!-D#$1$rMFgwH@ ư5:] Y{A9%WER1LO[@!c/."QamP ~ ,}!c PȺw2N aSH2 TEC$! eMvd@eDWC};PUDB-B$a r<9?}ka[VrV?$`}.`)! a0y J.,{=B13зA^Ĭn׶8$pM #1,au~~G"K9(+6$Iu(o K%[lcG"b00 ⢭FlV AIyN.(tL`oamiIC"t+Ѕ 1v%8^r[9%eα81,t !௨/c(Ud$o3;4ꪡά*2z{aHAzQ^Skf񢼦Ǩ͖_cX #8|F!!P^SkQ(۽%<>׬ #HQհג.;gc3ʺwbԢ)30BvW[.[y Y~B9h=T?U@jTi# ,f1H2<Yr<uOk @z @GZg4#z,f~H PQWCG?H6߈"K A*P ]\ըo:Jt~>cE9-HL]ͨO] )`o:_xSpLX~#`r 0;z G%奃 !8GYu 8!y7k5 ȆMB$QQZ E[]*N׋*T֡*FrROgxq @ym<>N ! yܳ55YYA4D$ EN@ꖉ.$WZJVV[Zza[ Ɯ@CIg& @\PRY*EH$WI$օs{<;C;>lN_ $ 7qOIɶeņNh-l jk'oh?7t4?2B@|[~@9P_A9-_3PNNHRh˯㡜_SE94$D(0'@@\ L;'@@|T-12ܽ wQ(i=:mWb13؏Ȋ;  N[~olu3} X"l,FY ̹/'@@ X~֜~%ºXk]  ,fpcNZ~r$DXkܓ  r_'D=9"'TU̠-FqSN0ͺwږ_3%'_(*v-9v9rDA(wZ0-u='0Q="k'HC8k  ˯  ˯Qc,;/':PQ?`pw#!45X$;k\#BQ0y]Tܮ;~߅r5nKF^F< Bd˯p0Dw8GhncׯAn7k'2X8HD"wXs,cwҸk'-,c m^ S=wf;n厜jcat4ū* Ʈw`š^oӸk}p0ư<5cHDzPȶ?dq v 8Nc`zDB,?c kub˯Qp8Ʈw lacij]nr v 8KT_&'LMZ10;4ٛ8v 8F33}].,M.L_s5'`!r_D׮.LiNrj*b<2s],ON 72;׻d"c>9{B>hXq],1{l+B>ڑd?3篝%SvkXu]8mupb R!YB>1Dd γ [~On'`휀- )pqnb&oACNV`$SN 巠!'`0)q `wMl"tȧ ].0YnN ԜB>y1ȉF; `;mpce͜| p\Iم[dC"b͜ !BvayG1wGjNW@B>9̔]x6CߝÊ9 PLtw%uZNzP%,;sּ -ݺi/J W*J XNn|:mUo B^]Z'`-(r'ϱk RXi=K @C>qILܰ],*9Kf,Q],*9K!0ykd.V X%S;c%˯BN`ǯ K|NW&˯ @+؁.L_92Q˅| rwT.P,a='0Uu\Յ o&˯PeS} Iȧ k&˯-a</rN\~W1#kZ80Y~lsM0ο0Y~m9"ފ )w.o0Y~m*-l D)W0{s0ova:b"w|\:ψb;?Յ(JotJ'浪 h&˯(VNW#C>y&F^FM_Q@!n4^],΅1 tXl%n19:TB #V[.0G DޯctW&˯kHz ȫX}%;^]X.L_ b= C>vD&0Y~]I!ț9SvLvaB'懇\)du/XO ޺r}ȧ “`,du) &)a򱞀AAX\݋cXsJ>ar WC6lN@S|UQ0ݕ̧s?AX9M'nKN#AYP3qP  ?amE`nv\C'rC=Ap1$bHŐ! ( PRRB F0h4=񞇡" y$|_Ǘ?4ao#N; l#W{i5PP(L1UGN$C@. \ Ap19 DS&VE2ZS>2 1BU( @$H jVzs:ǝ؟!؀,'ux<۫X4d4B$AQNM7n`-">!?yͧZx~?TU5abѨ>9I$Hĵ?dHRH?*8ֆPhvIpWϑб*4hܿsD"+/_ďz ?,FoiZC>6׽oǽoz**L@/g?qz_?.< W?~?8ϾxD#$^~yݟÏ5/&_<~ ؈h$b\858|B0xc#3^o7i$IK4ƻy/>sRVٟͶ3SS798M4?t$!ȑK`y)sܸ~S;9~ӟ#~b(VWQU5uu8q.Ͷ 4}C]gNc׮] Gn bͬ҅ e?3p1׋>t4x_|qkj-+a-8-ww?!*{յ~LONfIp]7ݥ=wߝo%08GoWf&'Ep&Gt?ֆro"88{t¼][OcWuz:ue WM'O?$&8ڊ-?40!p!T^x&4{5sm9GsKkoG&Tڥ6ah $w>}}XY^|\ᜧgPsGg Hq4:ĵ˗GheW_y96N(ִ?@2/Em}niN.VVU3g4596 yG1;=͖V  A!|KKƿ_"d9 n{zx'L1Ҕޘ k[x`rlLszq涖q@y1WCYۥ$}+&}8w><@gU,u [軪q39ݍbNg꯲*90χ:]m*":{UUY%2z:5e9fvԤ[ ioC 5z:;qŌNžsRKv](DIi$I& ⫪CG1+vw!nwz $PfHL'Cp?_p򥌟=u.uᎤ2B:}@ >s sjT B`WuN5 ,빙֩gQQi~@*jqԩSùwQ]mKJJx c ƙZ;vχ:'016훋t `1=>yDFHL/)/晩Ɍ]pٜF;:ߕKm )20s!2}݈jN]9Ϸ803()-9OH)Eїx<0ӻX&ZMMhhlNd2pD"kp{@!0PU4hFFݟڵ;;Rzi/=p.5BM mQ(ta`}8y4v};={p.9͹󩂔9^ ݩE z?ixJJKqM2Kv}vf7C8{^{R **+r5/)yj1O=2'Ù65ӳ3,-f/VVJ ?+$ζ׮zxOAJ9$I_K$;P7B'5 2H5J5߇ǎH'QAɖ]S$%=:EDGi^|>.B>U(TL%bzt;q)T֒HP@}^45l{y<*InN4ABN.-TUw@Y@W U( [znQl1!io%u@ B$4V))-E ^/$RWWjW ڌXYZ6PVc5 Ɔ,,6 56,F@u@a7/Erͩ}h:ٜAuMD"TXHz ,\QUe=Rf s'T>Mtڐ䈢(xͽ׿̯%_R uB,-aFu {u{St H GOv $#G<9Gi @l뿲2]o ;p@S/ avz@l37]l<N .ZڅB{:;H$0"kkɚnk34"q3$yBBT(F1<4d;f*qC~9|8fx }K6$9Јtv^0Vn&Xf#Y" rB  Z @w;$6k^rw +rϟX$^4mRvwc!@OOv\u$6EUU4l[h3O;x2.lsq|kZ7BA Hvc MB`wu5o>87? $l`Ax=|%]lkp< 7Bg/Ņ$*j;x˃سWۀW.wyȲ EQZ~Q~U׶<^/@Ym!zl/ftqz9m(hni_k/C}M8p< ӓS蹡8;79nK mֶmz:vlΥF^yz>ĸD#tut>}~?~}5d0VmL뮞\z,nl(h9w?hoo~淾-/fd㚅BG@MAc?-|_'N‡>qWnݹ^~F pigԧp-~ۇWmjC $ 納T$AUU=ьǟRnxo7ܟt ݎr*j* N9W·]+17 _x¤ӅBM}~}8| @& HdږPWW_xͽ9GSI|Oo/}=`B`޽8r\Ph&uj)5` UUq'>m8ښ޿m~5xPQQZSIRC ߏ~+<3t SB[$ u{p~ S`!JJK?7cs @0h>? sc \#H*J.4y;={D 05><«ago#@]}="|}l5*ۄgZ !5򅪪@/91P[W={zKaڦ;}~ĝ,h \ Ap1$bHhza<+٫_yӓd 9+/N Hs9p1$bHŐ! C@. \1FurIENDB`photoqt-2.5/img/filetypes/tga.ico000644 001750 001750 00000022134 14134304250 017435 0ustar00luspiluspi000000 000000  F$PNG  IHDR\rf$ IDATxy\W߿zԲvɲ,3 ! 0x `3ؘ<'<M$^jI{UwuuUum{?Ւ^o}?,z~}}2AX^ Q8H!  C@ , AX[+Aac)\+a箻q> E }LAhD!2UU2T0^;!  C@ , AX0$aaH!  Ldc`/d%  @a.J,9B7sH6;$6f+1"d Ơ2A|>~Ba(r BU!nh،10InrW^T"d cPQ { 2|3h,2 vWE`DB@ta BQ\of`P+@ZV.[QT^^#%L @:02.C(Z| BUGxi زA"wcYk7Ywr`5MMpY En7FDi]y7\$D #P srp _ SC\Xaʸgxe"+$1DȀɿA]"V 2 ,cab1"Bׄ0($ o*IE# $2D_|a r4 9wACV2V>$7"al+&v2ߏю0Y`hP]jUdCXBwdlOkB(l1TaayыxßChiD K܈PUO aZGG,@}=|Cl1={.#obV ۬\s؜N\Mʛѯg7>'t sYѯmoy!ۖt͐9'WߔA9  rK-@9! rJ-)ׇrA@|X~ӪV! rG,)Hܐ,yz 9!漎^k'@@dlzrZO@W0,ٚ7_!dHRho:[O@W0zZNm 5bMu3oշhN zs$DaX/'@@d^-i{:9"#nM [''@@dз7U  f;oo:X%'`FY~S*9"-fM{刜bDo\0gA"elMXrst0sNH 3X~S>fHf 17Uc̗l /LgM|9cE>wS">o,)cœe@( \(/v h"5f0gd9k\M{h\1цh\:̖t0SN=j|W99w]*n67̔0e `B],9F0SZ+X~ 9S *˘辈&O/鞫v"dMrq0UX›WUwubɤ^ﴱ7Ur'`J`7=W~g!c a߰2XF Nc--ar,i1ec]s9xW'B>_Jq)L]-`䜀@L^dZV1 `nкO>sپn\Un,NY.L0jNCлf r,햳 7 0U^@$wV" 73r3 ^`J7fԲ],AUdL''`+.䓋qQk؅3VNQ'G;2],gv!sƼ B> n9څW-&>߬ sxȧ+A'0 -c|v5˯,z R!ѼvWkva,va# %|rYd)F F sC3S,A9K;TK]8n'oa!ߜ1@|cc1u#]0\| g-䓃z톳 70XH9] @VC>uvaVg{ 䓓j؅{;ލp1'[:b 3W1?:[W,D9}32 nNT2t?0Z璡[g+B.L'/s'X^bdzZO@WO.`cqj Wtd&˯KN@W!\@.f&˯>KN@-! t.L_@@/!ht.\ (Y~r+t2],9 @+B.L_P@+mLw!u 秫G_㰖N p-etmvۅkbʐOa+wcmyk>ș6—R],1Pns9ctX \Mwd51+2'J>F1L^|k9+F+ͳ 2s=9 dUX]8],a5''dƮمcمkIr@!\j.L_ˑRgd!\],% dZB>ݖU$c+>Zl2 U,/."0wr^,JsL~l|]x<gPb1[ (oh8#pFB>q NW&c !_vri\ 9-`NN 廉B>HQ(Cz! (!=z[1c Xɇ B9M`ɕ|@H*B>k2 $UQ0u;O~%:4KR >tkx`'N(J7q cI RO , AX0$aaH$rѷB0 @8Fhy9a'?} L! 0 Mk#|K*[cI0lNnٚ\P ŀ 00Ơj !  C@ ,LFky(rc s0 ƿ@$HVFBUsR jZ3y!X(Ås8]jWU^/GF0ׇ!LM"C@p [oǞ}w~lojBiY9yH,k.op:sVC$Ihkms_.LObϾ|ϣ,'$IXގ_I %f=ދwwn9tN3BCWi^ ΓA ~~+p 1xqIt+%)< osh4oWo%bJېeggp/w}㶻ݞ80~/0?wSxSOy^)NM u0 IDKH% cxɇ?)7BY{EсE7߹ggqRMY&tLgӏ>X׋߼lOp̙X Z[iŪ4!0s9'>Ov_Rvnׯ~yi,E .Iv_Oc7O{ͼq1߇~?ׇaz H:c&s <OcIXJubAW{;Ҁ`Bg$YKsX,AɓvDa{!.99+ yraVȲcDz~ ִ^7iJSo|%w ;Q^Y 8>&F{`aޓS smRG;=g\#@(8q]_ZIp79bI>[{oPӅ҄cyEN'{я 8JHm͆+VI0`_/_Fzrӓᜣ2Ў c 4yM @Ii)Eol6XTVUJYsswӼͪ|?8J!(7JJKq;pm-Oq!Tm -ť?~?^F" <o;R/@cX Ƥ3DW%'#?{ c,)-_~kxɧPT\ E R\r ?ꌝw1;\]}2a (aH cC8['>ROҩӉGo>ںD11_\޽8z75%,wR榧5 `h84''4?x(>Si7UѸ.ݝ%w}c#:s6-7=9ع{7@MTX4֓'55f>ؾ)+9GEcemg$l8t8N;?p{Hm5C`PV}>۶c'c >mAPU#(-+KX9~2ip11:qMOy'v4e韭 bdp0avaPd;wc˶m \ق5Bgɠ00<8߯w Uj?t]/Iw#(+/&H #b%8p4;@4Aۙ3I9~->VtpUEMb%H ,˘Tv?͡3ar?|p1CǏ'b[^ Ac1gg4h>p*& Xmܼ6n!TCm}}ߍ bx3d@c-.j*_SW˥h?w6-GUMZhh܂={niq/\@J[F 5^{ @:)=ir0㿇h$@qI =Μ47@\F11@NiY$IڴF1ߏX,>hjޭ靛3I^ġcnzK#Ǐq/v=;-۷1($$8XTNsmcnzO=QLM\e=p8Isq"f_aw˾BEU G+ضs'M!0(BM=͖鬪*|>Ӝ+hĨ( Z[޳k^4lrhm;wb{SSBBh?{:&@cFFk]C蓙2ưe=⒒@ ?x(6϶b9ρ 0(sHR峀g@_a %-w[oM+W0=1N"kyPhYޖEK8r% 㞙]H#";5/-b<9Ņ3gF75aǮfocawK lۚx38vB%>ah yȱW\gރKIW$l<"LpK(k 0 B8NTh*?vc9`s^$-;6<~wC8vbѸuY,xͿ" X ZO'}꺊poCQQ)ĝw&܌Ehkm ~غ}Ҋ,/<ſ4$m_V[q-~QEW[[Ҳ [`Ͼ}*?!=8w% Z|Xo~ҋ>C,PUX %.^8 |iՍs~ %-۲?R~BvywҲ=UAc&@$<m@Yt^8[ijaРwMa,%'n8㨨ġy!D# .utPE PU{[>gj"жx*Da\аđ5l;0줪*.9>0@}! <|ㅮ x=;+]W/ohDi4 $&A˅v*=W^>pް c Sr%j :BбcJZJWff5 c~ ;Sq ˅} w?c7QW߀C<;y\EE~cs3IenxU?.,$,;96*wdh9|k _ !PW Vr; xq?} |:;05>Hzv-{-rAQMYUص WH$pȑkyE `o_aK# F/g?Y ]W]Rrʬ;ʴr,E`vjnK>D#Q0QRRʚj4lقƭPS[PlYW2f՟%I8(%f;>+tEb q EUCeu5jkqȑ5Zmk҃PU5eZWIIhuH,aP0$aaH!  +6R `ia$mO]D)SIe0#AF!  C@ , AX0BZ IENDB`photoqt-2.5/img/filetypes/svg.ico000644 001750 001750 00000012346 14134304247 017473 0ustar00luspiluspi000000 000000  PNG  IHDRyIDATx]{Gy{콟IǙCt[e*Bဝ`p*b")m`bRQ $T~ww:ۻݙ333Wl׿z`+X vV -{6plPuQkDj;vwkO^;xmvk8En`"S4AB  !!`qX/T|)! () 4r|>!c5΂Fry}-3K2GV[e'`yr]|?" d ~O {Z$Bi#[]'sGuL;%1+t2oy8Om 5ϵ9'(ֹn-^ۓtpxe|!up xs&C(Nl^uc e[Ki{ta m^˓8 Ҽf $^@0`ܲuIi$JgrF).@Ђ[b@Nldso/Ewmatlxe xy Cnظd2J[0=@x a 89 ˈp9-a6qxf bfǴDiT@5m>Q5<|M@v(&XŷG*9pPj [ M HI+y+4* wrxnN#$7Rd]($e~ <#%-WJI0[0$̥sHi'ka9=64$50IW ! ݼdQ~- fHI,}sh3M- 3s;@FtPSMD LI|OO@$PWJuht>.B0$,asӹ2\'HѲm/Tp"k$ck0" #F$1I_I0s$/$1I[LIIWLI0k%_0'ZX%)xy̚I;xI0wp`? f~ l%0gX"Z8/,`!6E̘MI+,` $1{{ lIG&g0;xȴe[$qȎ$p<8zoH05sx4fuXd#PYI.xo#MY,  !-H0SeI`BIM%=ܐ/x+XMJ[Ո<s! fJ` TD{KNHi]V l04 :N$ؼ2kxj$ bҬfIX7N9$Β$o#c'&+2s/V!̊$zi<>f ۜk ,.xl.M`%5zdìf'v 6?qT]'v 6ow5"x'$qK+h$,Og$WX@gZn$J "yVb`J oUN LY): dx5N MW$/<+3MKfC.“`Ƹp yĮ`m<3 dhR,7H0k s dxF'v3W<@pbH0Ӻ\ȸm;[$u=$ j9GyOq3W+ OG##$A^K _Į`uVFs߾^pH 'zsa7I0k㹟5y@rqbwI0s< |9.`%Anx%lj&90\78$Xۊ 'ƫ@W6OY% r`IV`;$^.IMEփٵrb96! $93<ϝplrHs,K C3ȝ&:N]$1sI`- dXQv"'غ&ؓ@Uqb`fJ`o# f0&d%94 'V4DӁ24>3f" p&*p&Z'%%3MY38@lqm'{ 8@WzB% \`ƌ$A6 poy` + # xGg`Fk}K`$1KU \$}S[' حpȧ 6W$%` t%Y^ ȟ- T%_$?-KPܐ@4VP&8UgpHGCSnxk V`QNѿL{>~uH-O< 5,{fӴdj} Nxm9,˒Q9CcɒDQ @Bzvp0:B {w7`ru]o]R BB hR#a ?V)7^c+G/%{ \WAN? 6jݷoW7<^쯅/3 iImj_?^寿bO>^p;jkQkxoob?ߐ< 0OMHFI椮Y.ZΜ.t5{0/u: ^~%Ih::S] aly`q kZseav*8I]@4Ow$eJq3Jq.w_v@s@GSЮf|vzQau=ȚR<>Wq=L0ZOPDZ;{v}5rq EW@ |{YwՇ=c09BLBbQ'\RsܼG`|VFbe; o9g~Xd/P?ThDJ]|އE*ەbf3 /O]N`򍝾`cD)vO9]~ Rf{Oac6J3gc͒R,|na1prN)Ve3"~aW(t7TPA7%O{f%} TjK=JqpI):3@郻+]>@ ԕUAGIMRWbSrpatHүRJ+a>E*ERgzz>@|DCUOg܎u3z`L)v)XU:,#m_\iiRH2w(hoء/?xɸhZ\_)ӽtfO}*U)F2IpX",)WY@1Aލp>{>RL1:[NB8ѫ|ysih(^bh)q5 6|gAw8qaajdtaUFy%TPICmZ$%?w`[xau| lح@TOzb50G >'#?E4hO !m8ZͳVȞj}C!3_c&2:6Y-;' lj<s.S kńbZL KGS\2:S pLB- "R/p^vyL)K&ń[ۙ!$U []#42ڳSx{4bmE3D(w}W^.Gvh3zڴ+hGHYLfƈ'7 g{iM^Srú5eJ9u\! HKJ:3[Jd4>pXCsQog$tvwYbҭty퓌TPZ#KK;[sK=7]T$PR['4WdCx Zjd1{BB6Ů)jp$蟜~m(CTE[4@ΌpXq'Hzu \7@d yiyJdtu`\,hZU# вnmgzd !;hy':{{Okc.~6P`;A*q^gVFF{^WݙޑoV?v[X!,>} ?A|۽VE2Fd lWH.U߼K= `ym}i@ZSHڝ5wf}Ā:}֟P?s{ bc{{`pETZH+E)*Tv-)I׳I_|~ P";t+P(m<ܵ0irF3~tH8 9=ݨ%MP}١F`! e70n(`i6l =Xa(|w >ńW1rSW7:']>aPu߫2|j&_+'\eP -@FUm.ۗgV6$ 7V.?喿֮F*o^{c8.!}n鮖cHa-x2,j*BnX@\uyuvjviW545c"!:E!9"p˵[5B Wq-vk+^} n-T{f+^"ڃ`+X ?ܺ 8WIENDB`photoqt-2.5/img/filetypes/mvg.ico000644 001750 001750 00000023267 14134304172 017466 0ustar00luspiluspi000000 000000  &PNG  IHDR\rf&hIDATx{p\Y}Vw-Yd{li,eYrf &ԒPC@lfY6;d"]*!BeRl 3`XKlj~gh$K-{owS?fӭ{sap$ t! C@  A8p0.oY!AX3<;<NU^uވ; ,)Y.w"BPiA8p0$`H! C@  A8p0V`"?0E!"+QRH &sB )HRHRH) Ec 1$  I[7E(&$xk(֣QĒI$eK1sx$ >>|>=p'B@' @Bc1B(KGo@,#)X؀[P5~?$hD@aH660X Esd&e X@My9Ԡ+W%l @0DX؀,p_"B!GhFsM Κ|a nIH l4,f!խfV1Dq]7sBǃM3-\̺ AcUZ>*pa>fNT!IcUN>"ޅqOSm.~,rZ ȁr77\B% w]p M._ݟ h 2mmsXCBpP_Y8^_o_lVhRwOJX !`LuJ`#IPYR& c 9Y~s! _$OҞ*@8Z4P4h2,Cb S#IykHd(W(aG:'ENC8qD;X11 Ҥ8+v ZR&& ,.ZX(dՋ]r_Z<1F"'Z~bl)1WWq#8:g!L/pPh'`;`a-q$S)M|re<׹38l% IkXFtA8c^YAdyTX9'`+P1[:F02;ݪ+l#33yS^Elرo1H-00ưk㐕&cd*+1e/Y~ $,0DW `cip cv@bN )̭za~=cY:%o~X-'`i =RՂHp,yce`;3 '-ciآ5}GUr;C>ɂȲ"g&˯X)'`IP  c D},:Y~ Ura !؅ld&oaBNR~YCȧp], 9@:)T?Ff-o&oq& XBC>C>@ 8drL1;w,E9 Q!B+o/)[vqT&oi Ѵ3aPȧX0Y~KG:'4UNPO!JuatN`T9S 0PO!Hۅ[],fA*'`: LN4S~G 􍙴0Y~MVN`9S A;XV"a\7],39rb| Ad5f JJ)DvaL!`vaEQ03:M. Y~MOs%+m7gfmw%R) 2'PL2S `08@ z*'PtXR) .L_kR@@SMQd0 U1mՅkmv'P[  C>S.,-ZL}b"[!@!B&#ssم31ZD*E EB>a| 00Y~C1sE|y؅3U~'kr T1vaL߄*! X9 ]C>N>ڗtN`9C>`]Xd/@9v cd? .!scՅ'Tׁ 0T2!k M.|yl ,du &;w ;,c4p>va: Y;4SՅۅ!d8;+07B\*N蜀+7a'+ zl1$edr{Qjs9_B>a.9s <Ap9M͐8|„PX2I!0)T@ |drz}"N%49@@!]LfxvUU(SWH2d!`pu&R݁ 0$`H! C@Fzi ,Fl*x!|m--h?u m$I$ D$?^e'TO4IB_>!T%|Gq(WW'?/n!PVV|…=1,./㣏&tCu\~|;o|#jI@;|T @8 W:B~\sF?u.vw=7hjlI?r1!8gf/>*bz~FB_ߞ 㤻rHXZB/ն˫ӱ&'U۞.u]1y^pw:f4}׼x_m][etwt $:q~}*VE,C {K;\Vm [F1gf09=ڶ{pN$2^rEӬ$Iݷ U!rC8ى=dt`EprV{[kk: .;{Vu5AQ\qCqQ,FYYc ᰦG ={mmDZ[qW%\~%pư }:; !ڪi27ٵJ1Ĉ}^/uv1%kXRvknz ЉPKL0>5Y9ӣ+9ܣ6[njl='Oީc4gzmm䀻 {zv˸60եWW[vÞo^/.tu[X@`rgaVVW1!ֆM.@Zt_:G.tue}B ^zq}8N;f8ʳF8êu &N\|W|>z @χGPH䂢ɓ8Դp$?$.Rַ=s]بV>SL-vq[Ӳ49 Z"BB4ף鬯1423pq39gd_2jP)2k(xΜ:i#k~CrP0G^/.'{^ cxFwGw8!>wu&&05Db1Mu Z[qIHDw|(x=\;q\8כS;B# n=1?+9.turXvlai >y{8FU?ܦB!4ox\e~㬁,~ut9CـMHrDOđ&4CSrNw_%ʫ?n͛׿~k1ML.ݪF$I=bs;/-HZ0hR ۝ =lAs9( 74̩Ss᧞BcHUu55 :[B1UDHC>vSUY)9 BTVTh*}!dz 24d c!^m =ZHj64w 3~aе9W/絓\@hccyYQ'";dW>d:( 7C?`+kkhs3ZZtۘ!PW[ɤ##˫`*mFǣɜѨ`q.|ee8h _y& R(4H$4~0^O<م\?$6Cmwߍ#Ydn~XY[S-zqK~Ȋ[]PHl(hW )aٲDSCC:B\C^e|k_ՁCC`C^9 004Zt[76U@$7UU?iML~fW۴c`p|Yu|W>_^IFEQp95_}GqխT82`ؐB {yx?۸n\{YNr{׻PRo'?9}W`yudrk+H$ |;Ѽ 9mBSS[X\T؛x(Wߏ7= /} ch.mnG2\y؆d;;񳧟Vm{nj^ !-+G?A/IU\/pqAgv?Ξ\T P]YYEQq4s>|}{[ߊ-'B* "fl⬁D$#_ŵh?F;)ڣP~?ceGմyTC}/f " MژL yNqWG"dBnD엾= 7_ۋox<@BCzu-FJ,Tk+>geI75EhdYFUe%{M~O=,^@˫b{9y'p߅ xbOjkj( >##3 8޶f s~`U co&IRNI>#2^!6a-,`zvs X][C4"|eemnFSc#*6yr/Oܮ5B]EQj;~liA[k&saoe"`[JHSSjN ! C@ *9Ea!˥i4s.oXn- $Ix%vN@ ! C@  A8p0$`?vnDIENDB`photoqt-2.5/img/filetypes/pcx.ico000644 001750 001750 00000024100 14134304202 017444 0ustar00luspiluspi000000 000000  *(PNG  IHDR\rf'IDATxwxսsfWVͲ-InM5 $ߛ{1Do7]!L !cmd"BH@Qdx|dwC""H! 7k5l%ZhCp$ bc3G#GK#`Ԋ*C5 UmBZg2 Y J*֜?TKXApBӹgr~0yPY[!0,1wPs=8 ]q7֢f1c\Jv73" AsPLhUlTw$ZchjmDs[QGK{6՛<!LuaInZTՕA @EmaZfHHs*@= 696գ lGz]%# (a ˙d-CU]PPl1 $C I6df ]p̲`@t415)a$CCvV)iv23L3[ 4T hL $C @fF C,!]9p9ݕOM}%7WO\H(oHHMD!ZO-VTT 1*Z ,g0-(Sv="0ДDo$x=)a*jk S7'@@ČoWr-9s%°.  b, @eH17N 5FFFjH07NN 3X~Ås憔 co$( X lp`#r$DD)V XqŌpU? acfopXK}cvo$,  prNЍU,`HXV]O @Q9jr)#1z}Whl9d(h +RFTUAi>44a_Ntu[G㍕- Xg=81F*H\}8ʖHPT29 c m-( U U}匣vAdw0Мp>'`!>1x}-݉ހ)Iv7 M0@e-RUWf@Vd(߃-$lπp9<'`,}VjT7UQ+ۍVz#%-™[7A?l7t.7̾1O7BPfor[@o~|{dwE`UdM*`9 *!p.&8 0UO< E_PUWnFWB>wo0Y~ 0$:wW],H J4W1vJ؅k<0(^ ؅_] 1B>U !J*_]#.F cr{X],9_F >7vlO],f 9$ B>3քۅʯ9`H^N iWQC>Յ3 $˯),y9C>PuڸdUUHgOp 0z@F!c m& ο..L_9GCH|4cRS_؅k $D(],!9F|bMdBT& '׫Ŋ!X]xG',փ1&V 8:[|wvaZvX9avaT֑׊$b=8 C>{7NZ9UJ!x0Y~SEUP@L C>-,)cq L/\c ]],IbjA$X 1[O lAE šO|@D%!c X)!c}N<윀* 4' B0 z#6.E oZ $ٰq3xdC#q1a/[MDli5B@Q`*J/ "!  RHaH"2?͚'.c q0z[*TU(B1ο_M8#*̐ hlTUB]$AעUhhh@{G;|>/UM!33GA"L6ӧtpȲ^06tƤج#.W8lt^wۿ{J= .W&s0vXL8 E1x2 r16 F$ص{'~w+>@G{;:֚OOOر8ēqŗ /ŔS9?s෿FܜsXz?򚨼&s x#q?'LX֌ƊAhP*صg'j[LLw"hL:g>]x f4 YYYq~C7~'7<%榰Q[[l&y7 7'I0vl涃 HHww~-_|~H\BUU%Vd)¡C1HGbƌ1[UU<(-+ [%I];ܦ mm6/\ɓݿzܦgpɽسwW3K();-ƫ#[m84TQY'ZV1߇uࡃ{>]w} &b?{'?PQPPKVtjm$} 9>}W5feea0jT> H >_3z{{1ǃハOM/ +5۶aUqh>60ކkݣ뮞.BS^~|10?A2K !eWb옱yo+Es+x ~6'%*[QiàWQ)NŤE-& 7Ԉ{z߈9ͮ7sWa՚ڏt8x̚y N6Yeeعk+n?܁m~?< sλc $Օx쉵u8'SM! _[6ȃK YQzԈW^}!Am |Ǩ3N%ٍPZVs?B,uFʇ$Io! ZZ[c G}$I`[pdm+l~~~CްE>iݙ' 9zInnϞ gF?89= tfnSS#]//%v9pq5s?@hpɲ Y( 8W0O?,֭zf “O.kAkA5BUG(nQZVk{L?:5B'1;n'39l@7pӐo/8a".Y9# AjkHwc7z!H0` tu8Hw81n,L_K/aLw_~ 0 H s44i:47f830}t?X>E#?4/Y,Cp @ }~UՕOT4wvUUѨGVv6 np(s>7psT۹[0̳_$ |5]'SvUU֪k[991w /ƴ#i`WD$I忏_n܀E棤2]83Fl( mBFFUU; Yv!9޻L?#$3 ؾ;dg z 27QZV;DwN8DtI}>\.tFu,oV?u}9k9[ 91$Q kߵ6#݀QHsOQ!Ǝ-c]pݚq\X4Th#DeHrvPu^6cP@Hf1Eu/T38Q@`0r~ &h>2Zx1VWj_^Q}\Q@` \./B]1V,2TvpQS[W.=b5QUQNu '&\It{|>TWUU}J>ٽg4}$ysoĦg;o6Mtf}q#g$ ;vnsnz;w;LWDqQ1w>z.fy6222~9Gnn===pe1|>ylU˗<؀u[GPgtHfcKv4s0fOI?8'" a٠jD83Z>tuuEEް'~{o3˯Oa@q,_^p1TE@HlP̌L\.\Yʆn*Ԉ~?s7NWw0kdAǏ>;"=^fyrh(`,Tw+:d"8Ć'dAǏŗ_|}'x/a!@/dpE(PН>w$ L8 99[MH ʱ4Encq34ȲǞXJ,:J&F*Ä u߱s;l0eO>rfvV=3v}x'=N%#@NN.~pImvI7_b 4:ӝXp9={ܻXקMgAݎg( ^|tuw {;1n^ -/!g"ㆹ7< 555bcjTOuHL yl->wފ1s.xo[٢v1Xx%\.TUE~~>/ w-:{C<::&GUL2 g1[W{ߏ=gF7+±@vV6lv Bktvu@~VuTT ڂ;k0'֡JٳCU 9nؽg׈*-+S~G  EPUsW_{|jċ6##˖Ę|b,]lfoW]s:G@` ٷ--a{oޘ1.^:;;4_yո4ګ^;=bۖY 3O 3r# ( {>~zϑM_{U4-ˑ9H!''Ws[ϟV`a= xҤ_s.u-wSN=My: |>Y MM.`$Ct'~ol.*Tg7h1q]&8,^TWa3 H,YYY~?`1C$ 3܌$IX` Lvm?EQp';klUU()=ّQ`QM3+ݏgx\tigt؇avj44kns7Em܁SO9MmEe13Zas1mr.bAiiit3;u.;w=X;|a zĩ* qD} UUŕW\(F|PM%!l7F00ͅTU1Ņ_rays x=Pd6.WGBax+(ĨQwGqх~8 -TW)!23]5*0y7$`UຄNEE(.|SWB 5{\TUx\:$)LR"uD C@) A0$h~5G1-Z}۾kMav!"۾\]ȌEDJB"!  RHaH"!  REjIENDB`photoqt-2.5/img/filetypes/img.ico000644 001750 001750 00000030002 14134304257 017436 0ustar00luspiluspi000000 000000  /PNG  IHDR\rf/IDATxwt}wf ^ *XdJTEVHR,'yq9qr%bE֑?ǶIn*X'V)IX@wlA ؙݝspCݝ;~KP0K0`0 #a`d0L X҂ J.` e  0 6E nCEo#0B~? ߼BF` (X]_SmP(<By0A'RD)\>H&WA~B!Cw/o07HJ%Շ @W:@!/iE@R9 !Ԃ$!bPJ14?9.,ap5bsoQb"^!Xz1fg4ofHYB!pf9 U Uq `ƥ卲![\Ăz*` 8. 6+AE (^9LOzS/w$ !|Zk DbBWW1ٵUL,-^@0ŒV`5Y vf۱ J)f o6:LRdY-I[,|7E5!XZ¢63Mz\:B,Vح(En1 b`vV֋A|`K،9pr❚#yynB0u蛙640BHxm>?U)Պܬr.n!nCs?eLGuWx"7+ v_(EAv6ToJC18?OfA;=7L(5QbmTՖxۍ&@i^Ptf͖Doa&1ȲXPTT*[,((0eRCXN !Ā(EilE~~x/-Y{9yP ,=6@ӉUeM(@ im)\U%%|R)rxa90U1ѧnKP6 I%D`eyyWZ{OȱQ[^nQx,qw$'0r0<ԖéSDݎeMYN@ LDCErsMI)类HwњD,qXN@ L >^S^Hte)Aqn+*tYD-r9'z`I+ ,7Xzv Dv Fin. )pB=, L,76 ܯ${w$'@k>>|Bwel<͆|ym6pJn~ b\Wk9FXYiԤ0P pa|AA@0ҐGZ-,X9nfPUˆB0rrĠB9=@eG ,τKrWO H> Ԙ}˿ToB07^8B0rW AA@߄hex7L7zW-[~f04Cora04C/oe04!*zr `͖_^ќ@&':U~u@0TG*@3z=& UI70Tx0T(DԜ*/`PY~!sLIcTo"i9&179 0`$-q_(19&$ sƶK&0f򻴜v~rdJN #a.[~TodJN #! 0`$D:Z~%rLqΖxL`t&BPcҜF|/f 0`(,D0kN C1R /f ddQ厁r#?©!L,E:T32FDJqqj㋋8;>n*ךts~2By ̓8~tn@G+ҫʯsS ^!s59 m!wpnb!t"3, M0B pv|PENOAd7Q̐0Xx|z[\L듨dL-_Zy񊒈ss1D&Z~ R!^]El_(ΩJZ~!0B[qA(?1t!Q2/0΍O`ͷ  &'!fxLU~ s @4VQ9 elU~ suLR.E%L"Vʯsi05B8D) $K,2os `ܰ]x,jΌY~#si/"蚚ĜkMէG]Qo)&GZ6B>\QGtwUs~fMt \\EKH.<'4}d_I@Z !YDܚ>HK !`cpǹsHKPQ]DvafՖt DG|#& 3˯CN m j;f., x H ;H{0C4'0dМ@Z@!.D- F ^ h]ncX{Q˯̄sh !-ذ OuafM szm4lxT hAUf L*'`X*R]Y~SK8'1TN@,hт]ظՅ(PC '!K|n_0QVf_C5FNPk%t#+^t.,Ƃ#c JhAk<0"kL0:E؅%I,#'rHd%t _WN]y׈a= @2+vѱ gU~ Ms)pg0!-ۅs B0,'9 @ؕY=fsuazAA@ D.|& dNOaL~*'D-Fh(Iڅ7=IUN@w).vafMc *Qva 3ozy=zo @8|hfLiU]R!fMk% "! huLT G-=:t7}C>Z@AU.,AϜ.`\Q]8 pe2 r C>jnp;Z7( JLт+1˯y 4 h"fhfp<0˯y B4.D * 3˯:'\k%t!\]xBvY~3-s @4s.B>j ,9`J> M.ܱ]Y~3mr H)24[ۅ7؜Ps=U쐏lU]Y~3Lт9`#3y)C>Z@+’$a`Y~3nN )XdO$l^zq򛩨$a3D§GG(2`9|dlIY~܆XOZ $$,8B2[!X[g!#K6B>,`9ՄŸ| c L%P, 0!:8hN@ g!À$(B> AI&' +Xȇ08ќ@>Y'* `8 aHdfgP;ǁ'opvb!Q~ CA Ntɷ}`d*`0#a`d0L 0`02Y@GV+d0cNV>s{ li#]-~~dr67Cb` ł7ސm'+$"D3 퉮!!d02& F`0LRK1BH俈orFR0 J#z$I1GI9Aj>7Q5+kkzb @A^ tfF@p __A䘤xj*Po:յ8ڊI,INg'J$S쯪:.\)]RJQXPjU !8`cc8sDffvc ydq:Q^ZjikõywX۷aN)EhM&#gyX#™\Dj D)_}߶W?S >!XsW_ϟӛZ,#zߣ?'~~oI('@ͦړ8xi۷̌lObqyc.N<(*(V{{QQV6r^|dQQĽwߍ~۞oB0EON&TBxfCӉBٹp 6UTƺ\$e%%m''137G% ]Ի)kd =W4pKRana纻w};;.xO ^뭔 8 ;vZ GF>@wp|1tߏo<߇O&~\J::dcF1Aspfg`sl`(}}u *GFd磥ѴOIϏ?G pQJNg'| UW_ffRM1?f\34?b<'^w015YٶUwc]Q o;=eBY_ǩcfnzzV͓''TT_BٶAx!}Xse۶8|@Nr`zvza,yCQAWU,/GݮB09=# TGnlȲ7v;lVk"D)ώ"$D)܉{1 &Q^ZɔDz{u돴jh7^{-(~ݪݻqѣC>l33$ŭ7݄oMM(-.j(Ip{<[#߼:.~qݘ]Xَep7''|AwEOREx19=8q .]R=8},PJd/U øAOC\8 ;bLَy|G uGG=$د8_>w!_%{ pfg_a]%ckk[oO/=z{(d{{ٛ|쪬?<щ jiѼ'`Xpѣ8իd?2<6?Pj?oF&ł#mm(9! KKmUU?js8.1+nO>>!n EqÝ ,/g?)<3v`]][Ùsb޻wv[cή.ݺϢ(BE?Qqhŷe|ž>|> r"R46 /Ogщ t!lEE4NɼXxq\8XV^UU1?35;}} Mj(PԶPSU-tIݎ 1:1!{.(0AH:υUjC<9,d[Ehxrrrz@0̹&`eugMۧkT]W 57v}>txã%dIYA153mYI vb $ZkF&oϞpyyZZd tt<^z5ŵ{`qZW(Eء\WooUu ZZ$f%d K q~F 9  ?77fef"mWܜpM55t>FF.M/U]U U$cay qU):ڊ}Sy-jZcVV04:-?D*쮬4̠ZB pfgD8gdnwVTzw jšo?+L{2xWo^ϏJ mKq`yeC J55RڈcZ aB8qPS⢢-5 GG ŏ~sXJY-ZolJ$b!8ڪzB)U !XZYA m67oYH52+4z c ^u<>CSJ`sXJB0ؑ6XM =k.WLcpy\PPrapdCFݎNg.\SrwPJNgg̶}}1PNa 65W3(fSTf + lVkJnt)rnWSpQ?:*@{5lxTQ GxݗRJbHk+~$Swpt++W/kUY[# nF_\Ě˕)QRP\tݲJ WmsN|_pqPJr'GŹeCO^޹ӜƂR/DY@mح,,.b:W!ZH8ݭ6Ay<łbsxGq{ޣ{./1L@$۳{w/R",#WRpkTq8Jǃ z7'5_+R AT_uɧĄ9WE RJq(Ka\fkTW,E$joOIlpEš9s,VupEikg @o)9.@ ;s..#(/Ga޳ p>-&N9FF02>SVq~1Ez}ID =G6XCM n$I(+-ŁzEGF_'NzB3ϧ0ayu#n?}ー+X\oh(e $m>b1 h]í6YpdekU6$x駱twD08 bxtTwF֔)3J$j"J͸kguDIKF%8P[3g`e׿h ~PRT:NW/?8w}o<9H9+kk1?n'Gn7{ߓDKKu.!:}Zvh||\mLmrYBrkuc%Y#IyI kkME$õ^m GEc}=n>v,r1;?o=0vu4f@0g~o^Nn\u \7ސK78r"$I‡~wqM[" S>{.`)7#ZZ~nopcUVmuuҋV[z{WJ)N'>8<15|z9j~[@ r۶c̞]Pg`pw , ޣ`9y׋wt^5RҒ>(50<_>yknBV+osy #Nr'c<[Xq>ZV%$ჷ܂kpCgqOqvVT/RJ7m]ׇ'}zᅍW -8ݞƄVn&8eˣjouX*I>=:eA=>я HPIŽ2yoǑVp<) #8KOUQ{1ۈw8jSJQVZ?'յexir ++Ά XX^FN>w:;@]TT6جVW#Qj쪨u,%E4g/^=##K_.ۗz@ĸ҂m (.*RܜE7x 7*ƃ$IC¿ R\Gw?8CI 9'8G-- Bd`zn]Go?swf>ͅ*c@PhKl[{U+2kfK)E^N/VA$ >\n7<^oRf$n ~We%jnݮh  d{IgN~TQq] !ёlɶhkjuY%!JښDQaaJ8ƬLFhGIqqM.}.'%( ?;~C:55PJB bJ$ w~;_T\+@ DQɎEEHikK*H3aإKۡ%I*s: #BRo?7P躍Jtfg[I^tA2vum>.y'ڥϏȈC) >k@)Gn;REb-J3/({SJ_'N6-fWWO (XZ^/NC"˫ZTl()*DB".8"z{7z^APJaXp{w:578n[bie>_(Wt(`%Ņ-Eهq(-.NxښǃUde(߰X,nh!%% uS)+$΃jfOp(" # R eÑ σFR&!XyTs !(/-U[t-<;v >+ 99U^kPΦvho"@"Z,Yɹ|D2cE7U/ߕXo1۩Fj^F(aY?L 0`02& F#; s¦ 4X,r5g񓟤lU? f BWl + f-$+$n1/N&`׌Aw @JG΀z%?U/ fjLX0IGH݂I B $  _D1ZI;DI0sMI;I0S  NSbM] `S1@M9p(^H`"C@3( b4 f.V;K'I0cjg ,mj 뎘`S˯NA-+`!Ic|{3W#Le$=1-lH2%2x\TԮ: "/ TF@&- T A#H0S$P`Ĥ]zϋ@ %xfz ǗfSYIg7g{ H$w (K>%K4s J{ar@|~qv:P&IIypɸq7' LqR@_z@X&BN2@csʜX&Bd$1{sǕ91 ;#! $κx&H0k@\+q +~@%j8J{ZyƋ 3&, dI g3H"* $`$?Ǩtt $ fLTHPZ,'&6 WN`$xHj$qEL@|23U:K ^\f.“`Ƅ` 5BH1$>A H!%7wB8A@%D8qX$$K6=߹"뾒@<2%4W'Fhcx$uO/WqPI>K녀8a`y?k|@|8q$$qCL/X'35J Mpw}8|l$ $~guI0k^ ) -;Q KxhN~Y: VpChuD`iHK qb'jD! @[WqZ`%/J[s"&X ]$(v$&Xv \`"p` 7I#.8qMI0SQIg 5>kJs<I ^N\klw/ 8@ܛNԚƕJ >8qI0,A5%#`UH 8O8@<ŅH0G8+ #wϟl;FX\e]?p@v$`~IZ$`PZMVu@uh5, h OsJ p Wc%  OsH @(Jw4c=M/P[o>ԭnu[H. +)JyHK7\y]Y4e& r}`2ZQ[BQab:F `\Y5}vh`d2[B֮pugJ|XvdJF՞Qawh=SuiVOvmއ;\'tYw.d{]cCw1NyUlX/+V}ҏ29} RcU|Ч~/rG?:R{pO97ԞE<ٰtjGz/Tq͙&fh(рډc{ll^>9_l PeisOWfk9Dj^ (c%Ӛ޿;!D ')v!)Kץw]Jz gL veæIJu\@Ym_y.+Pk/JJF] LrK4!%vMlw ~ٵij\(IkΥ?z{4yx N6LXkF;xk~Y`kAQ%Q2ܯŹ'ic3F!`S{j^{>խjڙ?IXUXY'.7~5o&߲h+4͙L&ɴ4ؾ<`» `@zkdBznk$: o-o4Z͸(^-;/d_1Yl?F{[Aw Lӳ1*q_z(HR|XiFS%I妇LG _S}>0=q=MO($b&{^~ohvؐ^LS*EW^c&g^4xM.DmTғj߶@+B;,HW­49d4l~%M`)3y/8XGOT?*;F9+ S @ZU V:nEmiکɮwO@[c)l?1+N;c0owo|Oa3kY@?3>Ҁ j{<'ވ ZԣOޯoZǬ p)GoOP7P|lnJ闏?_AA!z~ik9kRc}| =gmT>76i%!.LNک?\RӫfrݡBb _5Z|F޲;cMar|7D1`dHti$d5.ۿ?ho5L-q8M *&",~ͷ/5˯@zw8{~E`Ntx- F !&"<r:{,&m8}k浛w߰6hh+BO?s٢Z7]ƍtT~GGN$[[;;ڛQ]C/+ߑἑД}xqzrfmWnhK֞vXsKcLYpplTP]!kfȵ# Dw(Y=/cOځ@Dm)ySKҀ\Z.$^ڃխnu[ p@U>& $ iP A$Ĭ!  C@ , AX0$aaHѵQ,KAkXh U B 5f66v㓓1" Ơ) ^FG*AM8c`3l6832<822Bb@B@$ha j <x) B|6@0qxas8HB)A*C4-jpBf~>!#7wHaH"11 N迚Ah!y%%94 b @a 7f,(Ą׋pff1 n P `J1@p1֒ {,HiHd` i \whiF`|D $z0׋g˄ǃ)!"(!AS uv hldw{B$` cho/E$$aP&&0c]z{M7"y  0cY9$pt!&nOvQ's"I!!GG\wE``nw!A h-CvUo d 8ƠP&&=.7)f+B;T3`&KURn7*CL PRk-$Ō%"\'0J1 5$ի5!TEI5 00>2kjolD Fд${"eAsLxᤚ v;ҳsR0Α2hmȈ11߇ކ:KX 0Ɛڛ8iHN*LZ~]M]DB0Bi!GZ\$f܄ `T=uRN0$`s8`W݁,gZ~}38`6@y󐞓cD45, Z_S|n  4egsoFvuD|SN $ (X +Wd !8G(Z.͞ZYH-FacrHл ˇwxA&<h]tBL9CdH4';<7r `w:M @Áܢ"d/X1cP `w8@zn.2r8Xb89uS#5CHb6s󐞛PЮ=1pa;`s:aw:!E>=?*o55 o"d @簧>kqqJTr7pjNtN-! fgA?E->fHFΆ;΂/qFN+NF- LA@ďY~ 3HM߄oj?kH*q 1'U~ON !XUM}M Ys?"̵7Nx@JR#bO[~#!s$!RkS8'@@ȓ"HH՜ !O Y~o4rMURL)g rt(BU~Rk XFx qRxsogʿ=)ƯZj>nv_j-ċTFB*R^cpUS 2vhJۍ%V!r2 U|Xs n{ij`T h# rb詫`uWa%˯QN hɻ@JM jo{jUKQwXk@'hO7zjg!~;iXcEo$${N 1:VA VcF{UEhe-FI@ h|~9Fz]S a/ [~#!s%B#]-Z1܄ֽ8ɜHZk4tTcۚvaFFRBcW3%@ مIH_yr<20aA0Y~c:'Л<9:^޵f&olT=uɓH_O<.Z9ڬa&ol`,rI+3|R.L9Ä|A.|c)hpD3hh $B>GÄ|b c A8ګR.Gs#I`@84cI]]8dm$oa7bޜ@rТ Ơhwx(D3abΜ|Я]"dM0!3gNӐO4EAO}s:$4UE# 7)a<HpN 0+;$1|h],MsS!`Zij0Y~r %l&k'.bpdMzN'TibԐ?B>9% 'bf&oȜ@BഐE3i讉Mua $d4J'LV.L#Q9^-)1lrᮽl MR6njW&o998]1&' Y~S2s G̶Ozk1&OdN >u%b~՘u'dA0Y~-C('P@L;$ՅudS9x';p'0v..L_Kb&Vă)pLvaZx'Z-3مk]ⱟ@ԣu:S]mO\ ww16im ˯EuN :O <,뜀=N>]gPA[ 3-*333*pTB>qπ ~>L$ | D4r)370Il Clr&  QNPȇ B,0(!3~ң1kCB9)N>DDF!05t@SUtTO$Ҝp-6\#AaT} YX{Z [W:VA !42`桽R ڰ AaaH!  C@ , #3 7>oP ݆}O~a @q"l޶ A$ v ,o@A0A$ 1h:i , AX0$aaHD7`"SRIQdtoq>]!F4h UQ l6l6pΧw lgfhhϋ!8EQnِ`AQLҟIȐ*4S?UUEO7jkp8[Z0!ii7>bXq-]4hA61ᇪ(v;ii _Ap 6 x5MŶ]pc{4_t1+_EFf`# ǟ]kDq">||rrav~k~ JMS}9}#D "HN1Wn[M3||g+5XRZK. YYr9Zo" ֊Vګ/} ":VYhm[jasؒ"0ƤڑTIlx/+5sΗc;kO>ah0~&Z 01}!c8VYaCsQ*Y!tp{mv;>wݸ+ 7^zw~jY]}}{=x0E`7|8\VF;VE @`atx8VY!_w=ngs坷Lx쑇6c Ã8ZQ;mTE~W>rޅo} 99Rܜs4I."%чŸ~ n9GscZZ"tc@31$u\jXtT{>{xF#גQy<˘Q^? !px~(`A@ݝ{=hv|+2qqWo֮r V[݁vp0IK?+VY՚8~4Ec‚Br 00ߏw=o-qnS^V&[Bo&|/txM048}?~A迊kkn[/|;Wx zgn~>Fg=7--8Ѐ¢b*^czB<瞕jEo~ Yن^߾#]o=^ !E(4 ,w/oI~[hڢ+霵Fê͆?6}!%IZA,^Tsn_گ^";7wwbo^.55x11ǃ¶[XXK/ö;\V|AS͆|bh`@}^~>/mx8GuU:Z[_uu!l#@Vv6g^/o?s3юڰV^;wbIiivǎ'o'R:S1q! ~kRB~_Ƈw4/e)^XXK>|T]SC۶Kx=8稩@vnEaq1o]OWj`:SQ";}p>jrXeT6Keù\ ͍ HEag?vm3́w ($ @L]Wx'_|1E)8c@[sT-;v[slݵ+Ch=q]w}-X5CӀ [6#[ѤAxWD;;]Vv6s !"!01-۷fu'5U}ҎFC!/F-c W@h\ܼ._|P.nir Bdfeam=_$euHD_OO1E9qG@r--=-Wb UQBw\> S-LKæmN͆-۷Nk^@g'ګ8_ԳUUrvNT;M % eǏ-]+׬='ڍ7o^wu8@g' 'jzjk/8E,,;x4I棪*t,_ E%%g-j˖>* :$?FugbNll(*madfe5t@ƣT {x'zO'7AS#Ov8-4sZ9ؼ}Ǭhw:yG`?N0Ĉ"8}Rm77#paUs b Ƚъr Vu7.\B`Ö=^9Ba3iiޯ])|0?}NBlG ?z~9sә+4J HbB۴1k֠dOQP7:T4\{˭榛p:я|':to"nl6ʙt>Jδ4Á JÙYY[3008 3}"g%WUald 8$Qr?;c[믣+|:P4꩟cG/RCwi͆\IA?,LjsR%[Zcl476v/f V]{~E%%ӯ6lނV55x ߙݎy H39yy!ԡ!it  @cY8ƛPrܳh3PCQ"XNn`00cj_XT'R8\p\*D͛qў=g94Mêk>-=--24=e/[*16` 1/^ 0}ᜣ q.z8$by1c톍Ro~cXd)r$Jw~67sӃU`稭FoW^Ďζ6ׁ3@g$fXa[:^EKBPx1m_}O<{223u aǎ>/)B9{{pH纍hV` Muߵhٰy9RAꪫݍҕ+ɘJMpٕW_ m+ZuyɁvW^ƹ^; 3, >k9czp ~Savw^ LCqDۥ6'@4 6mڍr {etݙ>T  / F ql]7=#;9H3/;;;=W| H⌦iG>.P};ob-\x@S]mH)1ݎ|}R`Śf3a-/Z.]BHB`mRL+gl^ @B <|J {I藳b ~rȽ 8xMx040EQ*<1݁_H}䌙)8hill((.2|4 K/G }US}:ZL)ЙH={p%j0^wbݦMIHy9f\O߀/|#n oWw,mHڶk7KXBa׉[wBz\SB /?$޶ f@o@H0~Shom};Ϡd}>TWU^/CޓgşoguwqXbgZرu#$ B4E×Io= iM۶;HCX-8p#WXT5GmZ8RQ!EV@  ~;/>\91nwq?7{EVvNXqbx %6M]n݌@e @mۛ@I,$UU]!վ~iJ)3k<],^o>0mM V 4 ۺs)cơCDQR@`pmHn_ 4Mʵc뾛˗c\Rø׃tp`]Qߑmv;lnВ*$UUuN\OJwٟ> [b-SnYL 1Ə,.r4c h8~\Bݰ1zشmu6 BcHF@"܊EKJwBbii)ݟ^p_9uq_z2Q]Uݶ+׬EEQ,tw,ih-;w> !f5!d2.\MUf\HKO!=#W]s .޳e~-T>Nx6 YY((,ƭ[pKq%Ēe˦l./Ž{;%4 [D?yy{qw: :|㡇/e(O0tW݁gdP٤_Gi;u_^~gWr18$p8 ^?vrs](*A^6 ZHℱ4@gzhpXFss|()Gn+01$qB]--~r~+c3( :4ÆnlH:$q󵣶@k'=c$uu>A~znTHb   5`ԨbfI@1Ԇ~ 2nD[[gZߛ07$` mF8ddFlB{{DH $*D!z~/~^ôI+8$*H#GZtsՍFZ3 cs ~?A0E U}# @?Dz?/@O pX3wIRtGBߐc mmhopX;pB>GmP6@JE>$~Z}DQ8:Oo @ЋH_B0G4l%QBu!8`0l-*X$g+)5]!2SAd)$)3kSN%s<؈Q[LI"yhwm/kñcD~Emm$Ip:#Y+aC DEǴ7ݐ169rbtA`mFsq$^0l:"g-H 8C!;;$ 6C-1 LcxZ"nЊ#G4 H>p8DCX(nPHBEE}9ޮwHNw]Q*/ftWc GxaՍtcx 2տ?oCM b@Q0b` DCe+I!b=֧7a  Y#v[΁A9v9~ד sE)&z9vp5X7Db h spi Dg94X~c?6B#98묡NU\s -qr 799A9(0|x>{i@t, fF$z?~Cӊ@pa ưauxO9?aMgN`K$8m'7$DZH7>PN7$DʉX~[n R-],QNdHZo̽I)#xE9$Di@@7$DJ۞6oP=! IO˯^Ǘ,S="$ct3,%I'YJe I%Ӗx X T`+Hoe|SkZwX+f'`J`S}Cggv2t.XF Nc8~eeeMR{ s߇U-b PVVcGþ}uekOyʹo:0rNTydQע 0TU5!%c7v0DW+*< Y.L0jN7Ny5c@8,aB1jNCس@rYc]vedM # /ѐOc^µ G, @ar!TQGyLԔz 5}#@j2,W'US^^oUq&C )|RA.h\g7DאPOI61tt{dMF'`H| .Lb;SǕ D߾# 7!'`89#e CUU#m̼0I{֡8D, !|dM/z ^IEw6],E9] @2C>vaft+a&ocN@O*`ۅ#S-d9'T|Rwߞjv*+SO@wO*݅VO@WO* .L_}zt|RA.dz JT1>v&˯>KN@K%нpfW!'qЃ],F9 B>&j޵+3vaL2*z A\m&˯1tN cאO* va^si#|MtwڅkdҝH1lR0c ˯H-m`ԐO*]8vaA_zi|R$.kҙH! ¾m@_Μ@Z,!dmM F_󑮜@J;>蹻p?6Y~Gr)T1݅pv巕,&$9 C>.\"_7O$N:r)+|RA.|TJ~4OA_" uu $]IZݖT*V $ *D &'4r't.ܷ]v& $MIمi_둪zI ]#˯5IE=B>s`:= $;'P'D{ر^?Y~-Lsb"/Ozڅw8A`$DsCv$dNh@!}F$3'P'3#%$/'Pȇ 2Or1 |B$@@!XN@0p0|BOtB>o*+-Wb|BD yT@Q(Cz'ޜa/JJ +ƒ\8 D!Áƞ=5&A0$aaH!  p]t? Nw FUv̛7D ( kּ{vvj*--qBL& 4""JK?WoրsY!4 T4 !  C@ ,LBJEԲjyR6i}Ŀ~" @Ȳ`ҏt:alHf!+˙~1B!B3re2EAggP^f.BCQ88q  ͆[׿c LL㡇~I.w >˗?u+2aԨPrg?'l۶п8ɲӧ@O+AP^^|mm3](ڑBnn. qi1jHy(--A`_%FHb1ׇ}kҧhCKOu|%c޽N1_u @p:(*s= 'OS1vpH4B1"͖|ݴl]eQFKnW=K/;To+1f,[Ru97bڴ}NߓM0D]]=6o͟q㍷{ǖ-_x_b`H (香6mj[˗B{{ccXljۑ#G`;t:2x-Xm̙s7x9ttt@`08ҥ w7?Z4ӆ ƳϮT nŘ1uS6 =Nf5$DeL2gRmcٲhnj,^ƁUmǏyna< ºLwEאÎ Q#U~Wxföm;+Qmt:h| >,' $ G76}AJpݰJdYbT,x5:4c ~O> MM^>̘17}](G⋯ц6@cn O 9Hc)ƀs?¶m;lVz<`!>S|'=xp.]ܜ}6ۅu*6444Ǐt>g0+$1 2&L_i}hP^~?+1lP,Yr7s/fͺ&?e2Ј'\z oҤ˓*lc#E!I2PUU>/x<[Ss۷gA #//_ 0 6ĕY-[ks¢eXm׹\YXn u~E!E3fi$&AQuXU߽,xQUu@;|r%^{̜9]7M7 i(bĈRMm0B0zA`"8={LڶV7nVm?dH,Au"nߍ>z9 cɒ}nկ";;['s_~bF%@9p8HzA3( MoڶSmwgcKI7dYACC!0s\YX.1,l6{8QMVWhj!;M3^Y1nwp$|slؾ}v\2V&*V;]taLj u#1z<ӚrEEQ~ ӧOL}@OL(5:~=)-ErmxQT4,8~ uؽ[ ;%%Cp}wF@`bᥥK`i~y/Ag?{,$++ <W\ǗnL,˸+p-7i~͸qw>BQ>b%//?.8NL]8*MpiW&_?"6L0+W>{^}0'|.Q*+|cXl%Z[bɋ#z,^L 8p +V}w(m*Z^v#;ۍ;mm~ Fh Hg}q# aqWǐ!Ex`b(Jdj|6M;+^/ 1s4$&faXsg^|W;NLxN W_}%O ڵ+p?\|tݺg^C_d.[^oKR󯦭Vt7eII(,,/~Xhӈիj,ʐ Aa&lWնq#TW# e3),'?S4w>],@(\ӽstDGcٲ?.yvy -P#䫶ollƚ5 ,` H YG`P1v{bksرcjѣ]w݊n]7M}kq|+x]նm{ QT:<2[eezڌpڶɋ^XK~ EvOzͰl1ޅ 6ij_R21?oV ^9jxu6mIXQsΙyYw .5Lw7bNZ hhhCgߍ_~MM^QAS!/fl/~jagƵm x׿~ڶ+cΜ1iǩ੧*_T8vc޼p+57{z: `ޟo ~w9r@{W pIpx;_[o[|}ƏSAPSsO=یyࢋs",]@Sw!L<SL>Ž{h h$cǎ2Q_aÆba(, ÎN444Сxce](x(+ۧv̘']Q̘17p86|&\Gp9_>jmnn /%(D!@QYy0)ǻqygǴ)k֬Smkяgp 9n-> oۊ]sGʠMĉϾTm1oLt9mdÁ[nALUwcQjS~p=E,c٪m%IOk2Xs|vlMO^o V^yk4+@aOk& 䓿aU`ɒ((,0 ஻nŅv߾rZjƶR^{5Ə }nZ ʞqHGLchn'Pmc+c*QFb;!W֗^z=c ln^z@Ћܴψ?]vQLWO^{-_6 މK) 73NRӈW=#9?رhja]4 I0ưdxG0q)'?a¥Xq\4ݗG3/hy-;s K{mش (-so$@--4 B#'[/Wsqygkލ?v;ƌXnʘo7a +VJն_<I,2N 7|j@O<|O-s%0Y31zoذ ۶,"rEQP=AY>mߢ-hoo3o."7;w'aҤPZZ|Uf!ąl9.좤t:,:EtvF܁с( F(l= u Cw0oݯ*|s8C>I% *?WBL5cA`Px>444iDK~;$I.B~~ d QuչKlf4]յnDY #U0H|҂+G}))]XbJ0.'Bf>(,/j^ܡ~ |.8'J`Yf+@naCG_+3نP%4MȢ+(y#=46b\FfZSJ2@ܳ˳KyMS RRRb\BӐ_\doOh{?!8BڲBӐtW6`\NMz59|/e9Wj^ϞŖ躅﬩nj@PB@7 EeinbsW4ON`؀ ZԍrB6oPJa,~/9eX" zJǡ1Gb!f.`qzzӏ6Bdf:sr+H$qb)mݷ،(d)[! ?L&PWl~؀fH65{=MCCsKh&0=8IsYLD)B7 $UT_EӐPYt`J)$ol֊X"Hl{>S}/.V5eb'P5&X M}}Y3bh+uyouWbz^TԹݿWJa[{;_-h}=.O -ZwNwlZ+MS&{'P=NZ hlݻlkw7MMW-6+(C3 t\1|P ;zU#V%`@u(mf/xP &t^Z,J~>0*6oljNւ}cTk+w}ln 䯦βO *5wuaoށ"ɏ*K~ky|!`@9 4w hQtubR*0оj8pFq53,&αO`+ Z(Xc#ǎ}KB2ARmѱFzk-4d'4Dmځ6,e2XL_\4M(NcX -hޅR3R&\T[>]0q0X -W]NGnalY]B]#ЀdK ZZkh"d׍*}7I14]GɖV(˂U,v)ׂB@4F z<#f'CH'>P T]%A]hhna%4 F"#tqN֗ÛNS j?Q.O`C r%`8J~ g9X[ \@rO r%5 }J~'zVue| GO@c_h?d;;VueCe*nAv> 0V^2"&{{T+D⇒j ' Q֫D峒ߪ>o%bӒFT?@TtTPEO@uRb%ՊRjV{%J@^5rUJ~>$h% {@x_9rTK~ui@8dPՂ\[s] U@_=_K~k>U% %U? 0r!)EXTVK\"2C%t%>(sav|,4/[Jj!L(SHaQ,(ŝvq گ"d}x5`?R:r > pqJK~k> ): %K MBj #'CnNQ)F FE1AL;(}- % C@@&.<&^g =;[Ro.O ԯT_f3~/@1א[X i("} !9q fX]~!3 {tg7'|K~>Y(`1dzAav| cNBEWK~k>pR?wc5ݴB`SǒO 4zz\}';uc,fom'B`)3 '}0 =r,C@*9v%{> !`0K~'0>,>I[ߵV.̒_{H ^I+4 3C(fɯ=V@``&~P˅Ykɾd'W{&'ʅc~*«%!^mk}==P} Rω-|%@1c+^+cɯ.'>@@gUikfXʅY *iq篔 \% B@`&1ߋk~H|!NՅK%,uY #vB,1|u,efK~G 9!Ro[* raLu.)6Necfɯ''3&GR.<~ }ƻK~>,:YZTB`|TaK~Y 8_T9_]]\ly#P뭋!_g0W'pkX`ʅY+~OWvavl }T.̒_KfM>NB` ן'u#铞 ׿'yǁ'PX)%> _5ՅY^ xu^.̒߀O3T6&G% sǒXwOs":'Η 7xib}iq,\8qraJ}. k;'(d1|Թra۔}&"ZW, K\zsmǑv 7.'NW;'&g~%Sl+fox'J\K IS.̒pO&ۭ.GϖP6Lܸ> 5,  68`\Wfox !wO3g;Z3U?2sN 8~'(3HUv'%wOu%l?kOPT0K~#'p֑>[;eʅY}N'`_DnB\,.nT.̒Hrb? M>NX-ۨ\%~T!0=&'lT.̒rb?gZɓoqj(+%=,( 68o\Q,b1=~̊(zsv r^baa}-Wu#XWp]M>|0F=}5\6xChÖ T}6ɇl2Cv'PeɇOOY,H4v! z* HC &"_OlHةt~'ZVf.`{{h Ҳ0ۃ]0 ha `P?D sgގcG6'"zcE(D 0QhhlD2wD"r9dkO!A40J'RR:r"Z|k뺎D"NJ)YHd2y 2|/ث@Ӫ[Q3$ZZсw{qؽg::e_c|OmRZx7 hܶ͵wD!2>A'O$ڵ _o`Gw7a#,:~g>hikn 뽸ѱ}{WBSןJ)O" {{]k+1*al@, tto}=w[~ qT}jj{N[s9O}Oax`e3cB?||O`ygO//`nvw5 x?|\˲paRZm_%KMSP.gIOc|tөTU;;} /?~GE3^Bq6F vmZ%DKk+lP#!~瓿~a%%r,&^sOjEk&~O|Hdğ㭷jkB<G׎U"nŮ{@2D{g'7?ydб}{V4Mþq- sR{ڴF)iY0MW_{->`u*z1LOME>,-CgNE se8p {%S)~@c0 rm}󘟟c*9{n$+D>z (D2MÍU2Z7 Y(]בl,@T/KL+O$hkW>D)3'@񲢡{׮(mniǷ ^ ht*Uto@WesXZZeu?iHp-M1:bO?8+wꯕV`J.ş?DKK+mߑRbuo| ԭ0: CFF >㯾 C=~clZn( :<8mN߸R ) Er8)˲&u#b8wUt?= *\ų!J)t؁>8D{Ϝ?)b;^Wt?^kx9H)v~G(m<:tعꮦkuioJJعxQA;xcp0r ,I)w>Ut|o/^x68W< !p߇>9 gr@E>ërぇU;wUt@__a3)*U޵Ҳp[ނ{GouR.]Ot|u^a:uR{g믶Mo O}!ߞKk( WxM/~m,2a?`E'@J}7VtZ@dǺ>&~o[O)FG>϶]Yp)K*`/#c9E(D 0Q1"׀0J%"0 _·;ix' =cE(D 0Q1" *XIENDB`photoqt-2.5/img/filetypes/fts.ico000644 001750 001750 00000020416 14134304131 017455 0ustar00luspiluspi000000 000000  PNG  IHDR\rf IDATxy$Ue]UwӍ@+Mc 84(GG 8^GfrAGTFmD}}+++*3+8^̌Ȍ=OQ'Ɖ G"Ap0$`H! C@FJVm9\U V 4mG^ۥUV(\c"B#$.Be$a)T v C@  A8p0$`H! C@&_8d%  ްTw%H@I&JʛA J.n7$ c$D! Ơ2D ƠIpU?c3Dwq <^/>Sb@B@\a J"Hp0TYG\H&Dx4BׇZ|`HB@ @0(0>8X$ j`3L"4G$8 -6 Cbr^DF2s5WUD&&]XߢE]n CQDt1(`_//D twBI$0Hv)x$n(BatuHrD"o@ !25Wtyv$&'I] HcHD"tw?K[0F r ,cIUQ ݔ$qCy1$2bD_᪊h(za r"97KVrV`un)Rd;C,B׾=)a&t`DRCjU&eKXs;ooC;t$8%)[,[b"Sc "ЙC͈NL pU4u$cQ0A@<PKm7ߐ=[c ?=3eә ݉ЈF:@p2 b[Ew)YPsS*}O$0"9c&G%YjB1Q`Y m4>8L bF9B0 mK$.R 4ocq۵M Ip""R9vC\nn00ۃȜ61DokPRQ%n,]R Aؼ\0D4^ {&AK ,OYy &(.ڦ0#KL!bVh# J|L]2K9doo'`_oj&"OHfsrKJ9+|py ݎgp8ά*2@Ɛ́r3̂BYuۨ-p`d \p8Gie%HsJJP{*,8eUjXΘ.s&(EղzZ~3 MTG-]b_" ?0TYtl+\(P^Sb/FSǟ:Hp4+o6Ljj!݅>|A+Ct]eHLF@,4d4EN&c`冻^\^+l-p1[I! !"<^<^@I&S$3B DvCcH^?7[Z[^ Л "HϜeq۵| 9gm oq$p>?'tif"/m |pf |X fN0-r'@@G>,Y5rӐƑ'oLh=rM'0 azT5&g'@@U~N0!,^U~Pk3\OЕB[~io<PK38wzB07Sfr~H07U"̋,7ߡ9Bf'H17p^NZ~1sr$DN!sNN UU1jno8)'@@d͌ܖlpJN^W+VfSr$DVX-v bEogA"clXgröcqo69'@@d,s$vlbH)1Dpl /lg~9cHc*Ͷf s(?z.؇ThUgf9g\M0{QD,B=HD5cvfrBa9 2A@?'Nfr!g>$.vwbЭ45NfrU{"9^  t9wf{>d͔ruUnmhw7(96zg-2z1p47A,'Z~9 c щ 94d0{S3Nll'r"0A@?w-`圀s 45`/I+[1'Y~39PsSn7a;.LjNC$8ރr^d:.LhNWyjg>#2w],1NN}GcbxHקdU1hq!#nZ&r],rB>d՟fDC Xj1]&mhڸ} 47ss,)yB>C2: X~'0wN tua.,.L_CBNRIǐߟ .L_CBN2MǨv `OM,",됏!YpB_a!:fޜ59|t1$E$8j98f191;̙0-c@Rvὖ 70dԜ9S !#w]X.ts,9| i]xN,Ì9 W9*i'clj@˴Bj&Y~ s Hgm9Q0}uak̴X琥ꭳ{i*l Kѿ&ǂ>`20Y~M0;cL0ߏ& t%'`^V00bd5'f :cۅk^̐(%cAN$…ܘ!'PT!)tuaB +9c U],9)WZB> Յ3#˯u ?'P89tvaZU1Д@|@U<`], Hsy|ccHD'ѽ80Y~ps!60?s .L_KsBN OB| 9Յ [O ?!B>ƜVd EN8t?+#T&˯}gN /.!ݙ.ܓ],#_9C[|tMMuۃD,#_9! ʼ0Y~ c vcs1&[؅2;ژ2sFc@S]fk+]c֕|du @!9]+Xidu9#OƎممHXO@7prم8ZO@F:1du.F'so >!Lۅ6סM(ca! F!05 (?r8O~0%:= >F AU 4RQ sp?d\%A 65 |-XO頗zp0$`H! C@&`bnVn7B@aDI/)wPh1֝y&d $bK9EB1` 1u$ A8p0$`Him@3QZ<Ց Nc fS }GA`lWU Up Ac Om9Z[LB톨dZ2Rv2AW|8W%Ls3.*~N=99 }}FƠ $ɅRTUנn,_+pb{%iF41x ݎ]rIZ3?y NUUQb%{ N;1>ZszU*|aيu>&h;7=x#a$4,.*BEe%-_3֯-[~F,GUQL#z`yF~kiZ Ρ5!co!8:FUM "HFkO  œO%Κ1<8Ayx'aҥ薭W`P][[ӣ-OmAMZ(G1ynQCO8FAvƽߺ|Gv(ޮ.vu_?֭÷[m;1^z_F];$ ܻMY#(p(xtGjr4AqI $iӞH$O$xK-Wee`lD PUL6( Bi rOU%in7 x1߯i /\rXj5ʼ3_=TUE,(:۰ơ״(ԧ?V]]] +WBI覯܂O}3o+^|W?| 6lڌ;廐$ sCxb'Xr%~_BV9ADg[+n1;PQUy WKnC8®Ҵk ”عEn X||Wq~so@_߲[j꬙p 5+Wb)̻(i+*+a&y}H{EEEXvf8OuIra婧bC*)1 %nJ|.,~?eزlz.>^rQy-O?N*nLGFڷOufEQt}1A`ƃۮFv8P13܏ˮ~p$>A%( B"HuPV^ACd"a  @@XH8i$WRZ[IQTUW,nfHKh Kǟ@%)x4==ʾ'tVTVM؈AD''!^  Xt 4m#[;ZSm 3yQTUŒeX^D ~579I@YN"p\pQUS[?oٟ> /$.ݾg}6KҮuQw+;v!_'6߄(쪫=DFс'O#ŗ] .+Wj˺(A~+㇐BQUe .r;~SY# a;oc;oǥ۷cyvB#eބa,Xn]λÎgq}}];,Nw~#Їtg2}W]G@K Ҩ\=lۦۚ;[n.[Hˣ*:ɧ7u]]o[n3\@U,\_g~-ʽ>?ۋkOhk[pƧ">G}uLw߅^z6nBG}Գ& $aG7#M_z.5=ÇO?p,fZ (,"pb\uɫF{K ~x޽_ڛkXz((tM@pU$ kX֭u7}w'z֛ޮ.z vm+'1A Ej<ӸwD>7pΡ2|UUwkv44blt$v[#~K/nݖpUEUM :MIi@suς2r2X4v¢0 qq)oY3C@XA݅1[% " $`ζ6͍܇Q_ /x,N aI&`}[uw ,D2˽^TX ('`!pU׭gA$H40to7Az˛qιͨ«/KMUU$6v:;?[:Z[C9s\qgQRZju>&#|uy3.5ز,Y,e,uϜxxBptTolYW߁}D44wߕvk>q)JJK } 'ccכobeYsӱhRx>C<k/oHD / ]BFRm }EUUvu /o^/WeUTL{"ˈxcH$`.BiY)**+QUSuuEYy9$ \U-ė$ 7>vnX"YZ&ܞ)Ug6LmL1>e' JWp0$`H! + $A˦AIci*7l3 vN@ ! C@  A8p0$`?eT_NIENDB`photoqt-2.5/img/filetypes/m2v.ico000644 001750 001750 00000023151 14134304166 017374 0ustar00luspiluspi000000 000000  S&PNG  IHDR\rf&IDATxwWV9hF9ɒe!YؤeͲD`c0^a ^e9=, f ۋY2,6VҌhrӡ}hFsMuMUu{]@ Ws}Ap1$bHŐ! C@.Ɠjmk .pMxK)GuH>' Q)/ZWEO 4Pu<Ap1$bHŐ! C@. \ Ap1)"aŚDN!0@BHē*b$IɤZkW8ףQzp0>!$D!0 @(H(p X U*$ٲ9cP8A~҂J Pjb@B@d€xBh#cEbH`lއ!%*W?ϣ0(-̃B c`H BM}L6T;<`eEXVU@Op0$Ow#aBj ___ƴwHqUcYU1^!Ȁ`M]C kWHhX45u(B&=CchD,b`4X"kVq( zB9X2{ОB8 o+ 4!hPENc@8AD\_!8O9|"@U{Od>ӞF:>w8ш%t:Fh>X$ K$90jUbq<6>,@Hx]`L#@d <$* -&cd"2`.&fۭO?Px2GBP(km\' ++aUH Q!$FX,$WÀxx&*X4 2? ,IlL{]W\80NB0DrV / p@ \h~4u |B"Tm5BN<8a0`ù>Ǣ<\@p5S{ M,鞛hhCt<BζJ a]CZz'ʦs5  jVN0;TUZOΜ'U܃dYyw͢pQ8 f AtdhEB0~&7Q8O$qǨ8J:,A}eɔ J} VYfo`Eb8k$ HAMY*K-,Y{)'>$)PUe(ZB*K P_YC1_f('$@A5uyvrĚr8S.S9 wQ,ںrx(ᚥxs}9A78L9=AmyWQ:(aJ-B9Imy!/ʒ|l\QB{ؓu7SN@$PQͫjP[^Θ)B fFZYS ˫P97c@0Mob2'pr i{~Y*1D(2!H)Q8ʊ򱬪NN8ߦY~ͬt%'PeK "Eywd H Uh7Kmj %cy䡶a$ݳap4U ]Rh9Bt_ ]2񨾤e1<h8x U*䬉.< ?EiAy(xDwZUU~bؼ($pJ D.(D@-9CSss$D N oL  À, ęHHtqjNuT1it7K{xs#-28㠜k@=# tᜡA9w.v BPC;"Κ1 Ho&$U'|` CcxbF1 pɤ3Lc;xӏ^&pBNp4 f]9ch\7X~3czN"hH&hx4u_MEtohhhCsм7/;3Lbq78!'L` 8u'e1H, mmEΤ7o&='<` cQi@,՞9cHC;bd 8o6zx" Er7 *@[Oǖ9G 67a3}hlsq*@ Dmp0!m[T%pbJf]s08ƱPM0 #7.zv]OXG;05fC0s]XUUmC5k*v G|:C>Cc[f3d V FB>cќVR.L`-`Fwp=d*V X_B>9gmuaf+-3B>ֺpMd 3X/'`] 41p=dIae`*3ĸ?{pՅS5䐏 U8؁^ ;k K![.Yڅ',Cd)Wrbk @C>FPȂՅY~mvIrl|̀—,T],*9K @.B>fCck[-`&˯%JNs1)ro&˯ur9 ^&B>GXX.zkY@D["G_`zW3i~\nª\K/Y~- r*V g 9 OY~[\r' ]8Յk&s9 F&B>-1U&˯H 39 d_pDŽZuaڏ\'u0k%;0Y]Յʯ\O {9 B>fIՅ*%9 c_ 8.l]Xd3 dG&B>10m} ĘjNڝl"jRs 00Y~C6sYs}hv@h qd+'`x%;`Duaۇ"c*'`z |1EU^.z T'伐dj&˯s 11'`И4-Ҳ pjbNxpQhۅT&˯;03'`X|%;0i~\ 0Y~] 'B>V^p0sV&˯ q{5L1.L_1h31@!S.<.L_9CS9 |LEJ.6a&˯1:'8Lڅ4c8AH,.蜀g1NR'+Lڅ_: IRls/+]UxQO 1􍌡g˥&֠4"'P''pџ`\N }Sȇ rQ9`J> r %nXɇ DR]\N@L|'؜>3a-CB>aYf{-RT!pR7|dHlƥxN08҇ڲ"0HJ8zJUgHLs/*Jq=gL-:LAXp1$bHŐ! @T lc#.YJwB@a#E|,]J_R[7dM ?7KPU {u:h \ Ap1$bH,jmNLLf?j2UrYLcd!! Zi-965R8Կ"x$~GrJ)'9q9<(Wnd9qsW"Ȭμx<x=ߚ ::F{W7.65]F8>%Ũź+~Z\EQb`?` p|K8 JF-pɏރZ!L} /:rVf;naxx֑fqUpx=|^5UX^_˗aŲzTV7i^( ^oǟI HUƈ!I44^/G/ly !/QGAEY_o܋7rm~c~ L/Ggtfkq7 }xqe߱eӂGgCXR[׮Á}75އ ׬̼:?hq˞/~2, FgWOZH&Uz8x^w[ yC(..ZKcg_@GgwZO5``is*BB82~_’j};%͛T;Kc6'# '~o|{h2g_Ox/ATUUZ\&\niƂ "q DQ]ݽ}xO-w܍144hkk?)<_1Ogl,<Z;mm}i004c'O!v<GpMcO7.8ǥf|CG?}k:Vg)%^:t bUT9G{g4\s/CHKHՍ}!O/hlk<g8yzzr}3O< .>ï~\p4Bê_Gaw 1HWÓsgr}öo2al,^Wj/hG1*v@eErlB'08<޾~CiO9|q' ;VǃRN?9.])_+}F]ex< ٍs/l v~VU/9x4 7rK3!Oݏ"99%%H$Bh‹?{Oֽn/~;|GUU!^uuQ`BJ~I~??1/61۳ |=8x^TUB&pM-_?|8茹8V~߄v鳍ŪU+fd 8vGf+?/xwEumT`QP[7cMm?=ѠCl0 ̌uK|i W x/>>goeZel2W-ݬ%Kj}] Gp9QjhޟϽkuڜswQ]]$S-)gŊeCw{+/00{K+eضyO4tL1C}>vEލ_߸ΨFG/#f?H?g 8x[ބ>(֭^]m ^6+N :s4^=Iey6o\{u[|Y;{r3 q\#NkԵyuU%ؽ()+]\Hڿ|eH[7h֯/\Bskیa'0vͪXNW\gyY)/ӵy04X<SЋ!mmZ-ddӏxzrCcع =<=(2w(..FJx^<9b8;kۂ|z;)|)%*˰uӆYR Istv1޹ &:Τ*u3Oapp.|5ksffXϋ;c'&lSg=;+^^V6X"ї^ypn۴'$wB $c&営)_U+aՊe֞e 8u j ɌIou`l,k۶F{Vu\\19~vlyƒ6m@qI{ցv]WVU"jC"ףs_mW PXukVZ;!)$*+ʱes8_> nڿw^@J<¯70kU+{<=7NC&TUz[Rԫ]=x`-fygF<߿ߕcֽۖq&(>k /2xMRmF%G $;mAAA>Ȍo${f .|QYg L&Ս^ }ۺ]TUb捖 g\ߓE[x5!^=8_5kWaYݒYؼ>-ף4=8tcG)%1tul}8I8x=v`*Wm IyGU!kқV,3f$AJTUV`kӊޱM3dq<gWuRH$ɌH}>o?/YƠ&9y~?8+CEQVZz]ؼiiC}{vч?eȒgK]GAAA#@ 0k~ݬ~I Yvyy^7؇&ٵ^y޹͸:W圣D."SXVW-XCn5kQSU @E3I3󡸸5UXbl;l–M5۫W[/C&kz<UhuuK0X=i&.j[W|lBo^w=B~ QR\"_)t1ك|"%n `(nlܴ+y?>~]#ONZR>i$ 7qr+8;OZ;ub=hXl)|>oJCx >ofOr!ϒ8@[ķUUI6lHQZ\+y)xbB(s]gnSqj&{ι~#$bi];qJ^ CJc6܊>>k1)ž=tYqz9#(n$$={߉*] aO5w]׿.iЕ l?/oqx(>W1:2Xq@Wţ/(k_jآvS|UsLNqb_?Aq~?n^J__'kY)Q]S;rꌮ%τxFw7Һ% @Bq'Ͼή\_fS! 2l_1|}q^}F(!߄6ɧOu5Xjj108K[iEa zVGNi@rG%:{\-8C8U⁏M 0qpR" _'|7,ٵEE-6BKse>ښj|[h0dʟ*+-ww7 l$#&(,*goو/[8raU^/ۃ>Ar~pEml,^BH/M ud\YRBFٵ?~yNmxѕBٵ{[qnAiy2_"LqGtHuZhnG"~ׂ{%fՊe w>6*.oK7|^9Cbc kWī=mߊbR%e==@2c±p=z NXCD*zg묎kzLXq1IEWw/::?QǴJyy(/+Œj,Òjj,Ǚ1F5n=Uw. J9Uceeeشyv&^%¾@2հs} |bHŐ! C@.&[EZ' ǣT/E^f;ABQ8єۥt\h \ Ap1$bHŐ! Ptxթ-IENDB`photoqt-2.5/img/filetypes/j2k.ico000644 001750 001750 00000033763 14134304147 017367 0ustar00luspiluspi000000 000000  7PNG  IHDR\rf7IDATxw|Ɵ+:ݩےlƕfll` Ih % S^B lnIVnwΖ{;ݝ̗efwٙ}`p8) p8 ppR.N Iap8) 'G'KEˠ0ep/7ۍ*+-U?$w8N6vP$Ap8kcN Iap8) '0\8 ppR.N IaFs!$񜬜 @!  G( JDzz:AN,!!d }v+AxdEѰ !Nф d3`2RʅB7},yW[ Z1H9nE2(G9 p!D.aB@ +2{-yۅnk/-Y(ʛLsxWpkͻ[Y (nXVL̝Iyu`|'N=^Ե6tD !IB:i ҍ\8 @tv.;* _k/ܒӋʐE1(vtvW\R? nuss.A@@cE}[#<$H8icp`\I>}ЁF=qmxhhmG$\FAR$4xߺq&ڃ. ' nt[{MkW;l+'A mAW5.]mlā ]}p8?| p‡ nɃξ{ v[ܾ*(zmtIANXpP1^[dEpy\:@< 'n$K ǻA( + } qc^8⾷ Ց nWH ǝrƻ8IWBu%YGv1:TԢ1azfQoH+h@.FD tzOT7ס{a@Qa1ǻAA)EfzF4Ե67j!pP YN~+t4!ٖ2tKR|,͵AC)E]Ֆ<"CdAz)?C%2eHukasPRd쨯 .EK20oaMtunWCR\X@\CNF62-qYPn#q F&ƥΠ7`Rބ,[Y~9zC~v.r3r-;)w,&sܕ+_{Lq`D*b`!73 ǻ(gmjHo Q``0Q6i :.흝0ldx_JJi'N @0x&NNЍ0Ɛf0M*D"o8x*?{  s1QߛF4dc?oqA D 1stcpf`4g$ś@H0'0\ ǒ93QJhT1(bra1fLG1vm±s'0:\€d0aF4,`H4P(Ŝ)0eB t, 6ݛ Zo,C9y2gBy 7f%EŽJdàӏw.cUaBn!rp:gG@Q  t0L4g Ӝ! z?+^o/o \PtunWJk:D* ӜLs&dYGWE@(BCC'=d}H !1&oT6U`"23{(0 0Am $KRq8h␣ >e|]yTaXq` NL72HnW8:^os- ''Nt7^{ 'jV@x\8Q#VPq{ c xupHd68T^O 'D"o,;N ^E*` I>"7Vz\8%Y~cQ^_@*'wPă7TR9N 'bċ7ܞ\O 'n7oP pD8?N`0upLZ~éGM'3f'3&N}R)N gL$7TR)N 'l8 ܮ$h\wS_)1,F {\8a1,o~B!q+'7T $ N$7T t$e/ '$7 $gNh$7T $gN$75N 'h*8H9d scEY~ú@ B07~@KGkXP'$ӟ)#"c[47ac喤Rh̖P t&G@JMBj[QR MHh̖p $zI/r(7+%{;r+<4EkR 8dXO (!v*v(hhoŽ.f\ pI8Ijݠ*7(o@}kcBhJP 4$zI}W+ޤ,ccNRw7T(oKR!ن򺝣> M:l {##N Z~!N![r ܒ'k/6Tl|*[~C%JV [j!Jeo8$r@R  teX!UM 4'^@!mͨh +L֚rt][~ÃnN8B{z1r'-bs̱vqo$z ~*oVoم%YBEcn D\O SUv᪭ ; >ﮮ6"ANCxBFn @"'7TxG[n 'w{xOGeYƦ$ V'VH $H7.LN0FDYO ! mM1֋Idq %DJ(v%][~K" $r$]^n:8g|IB8B ^ + n:'0,'va6$]g-@HD\{ '[kqq- {[&,35N nhD]؛]8Y~%n9*j=Y5 A>Q;*Bpx]O+˧S م7~8XDq][~q|Ǖ  HC A- so|'N`+X{ovqd#^⪕U| *N„ڸ7ވ8hi  `kgVC @D^n{\x5N`\ o’,a'5d\UƺO" we]gm߸fɈ h'pE8g@D AvanM<+N OGDXddb. ab][~ʦjc'hA>рkt sobhz1D z G.-O _g?]7)e@L@$lچ.kwvՈdvaEQPɳ&T6U=|"/1څ7U@Td 4ށ_vn+qo8 @DJ(vteX DI hfWߤ#qQT Cم내 {-D;N O/gg D_v`{,5||% T8 qRtvanMqݨB@`x?c.-I4rO4ۅkGڅ7 4Dv=T!jnԅRȮ'0fA>k.GK.-M$ - O" r3zm}&qXvw(.]zPBʔ'01FӘj+xO𥌊Շ9'Џꦱ r}A><'PByןkD@OpƟH $Â|<ȇO"' θw=[q*$ 8pJRq%'7N (HՕ|8D`,q (ƃ|8&8Q1uDA'N#2*QgdTX8NPB9XsӨ fKs88s8) '0\8 ppRQ}& iF# IݨpɅσ$j-?DA }8vhD_,e9ADENuQ@a e@e烀N Iap8) '0\8 ppR.N Iap8) '0F a@<c`CfcfB jpP%E,ː$_W*PD(` B?!dX塈PYQ@ E(= $Y$K` nX#U !)${BEPJR_J)((ʰ Q#"rP][ G CvVJ'\vn˛$`2`NOG)iii!GfE]}\7J(`iH7tC} ;˱eVբb⅋7xvUUhhj6Ȋ ^l`9X8oh4B17#l+ߎo;+w n Fc 0o~Xz!3kF㘅'z;v ~z5ԡjc SJ&cEqȁKP\T콝clRH*|wز}+Z1tBE`8%X`233#&zcJ)ZvΎWe 'w~ ^]% $"PLL03ĒԲt^D ؼu yp\K⅋=TTWn7y8hq)kvl޶} **ՁQ.  '`Cq`Պa0zCB_<> hn__5G^|X؍R ͊|Ͼ(׼:QӦ3瞏{RTT]uX,8%Wk"`k-cV8U>+a +gKOdvs}.VM.90J)\<]t}äA&jY=?1W/3#}:5zn+{ϰu>NV:q+\#c=ǘlS, ‹XcyyFaV_y'Lf/>swtNX^:L&bH=jj囍L ~ly]c|͍KeV1Cߗ O N9t<3x<KX7R2꧌vǻp՗cGŎxW_FuLn(f/{jjC?QO>4nttvtަ&\yxC_Pttvƫx RǸKQYSR]Jٗ+/Cv~u=p\cz>SveW < T$\.#txРaE?7zzz: q}`9FׇyoGxȲ'{ 6o oEA<؟PL՘JdX,p:ޮ>n]93gd21It]]umxgxE@LAu]3Ɛix>J)vT}a0uJt yW kѶ=k0{,0XsfF^n߯=[cȲ N?giQJ?—_YCZ8 œPS[_{wnGGP8j2ᴓNŚk "Kk3/>>6@@)(ǫfJÂ棻o&>SՁ;[oƫ>]IExWU*-xwLJT-xϏcy|Bo_/l߆^{ dEaOԈӦ4;ct?b66A1c ɲg^|5uщ"N8\rEX`!,f9DcS#/j*#VY× vEe6++ ӧNò+/>X;+-Wm8[oqGԲ[}jɅزmmvΛXp7 شu3>SEQ W]믺ii& '"7|ߴ'w: 'Zv>d2})Zy۟W^^;󑟗lz F,_s"y汞JdJl'N~sQu[ڰuV̚13$H7@VfVXZR܉w:^~5n:dfx}Ǣœncy8qڻkSQh18ꈣEVf}Jp57ǍUߌvUXy RJQ]S6{fFnL-:/ĵW\_"#u_uJ'OѼ|)::U[d)~sѥ0 $y6> gipp~_dͱ]wBO>Ҽ^xV<|Xkn7fQ6oqG>;T KwM Ɋ9z$**Cn ,`G:!44k~V!(=s}\t! ؃(8pꉧu,X8!̚~CgwGttos㐃=ȲՇ~sSݯ [oUk2S7ef?~U;*v[RT;aĽesgQGVto~(S{$ ,c>u6mPT ?}℉ol JXeYFVfnh7!c & 5QdEsS$ߴ^+-lQ<rn76lڨz}%h؍`CT?EPR\oCS#5Zn߆޾^}_)=NÖUظyBH *w 5ma)hʵ熏>b5̛̀(D~^^ħ=eY=33SuqTOc X8y+vFtt{ JJ0D!*|̘6]u_͊j2+~fLS19x hA=50(#^c R-/ECSFSKTNbW[ keS`J3ܤ:7OA}Cʹ%%X,5 uRu5Q[_y-O:x݄BՅ\jzz{51Bx?Ghs5u5Syy?w>'%P|kPK1w8!F!ddd ''W!20dR.X1N81@E4:bө9-k0qb1X媏c 8ޱ;g8b ͻZPPXP Sj8ظyfsoVƐ)D)}8'NBk ÏDqQ`@ᘙ SZڰ BȰg ٬j }(h߽[^yy,{{=6hs7<ϰ^!6}}}ӌ3f[c0 Vvk"wn7^zeͮ&ӧMvBhWյ58A  KN=TGU@$KFN,!xC˯(/??(jWY5Zf:ݞF܄.L([ơynlQ܊h:劉p:QPYQ:w HK I`0's@lnJ0ى]-X2P:yYQݥ4@n3$Ip:oOyyX0o~ȍJeMED^YS%';GՂw,(*"I%A_ǣ`JݦA(H<3S pU̟(BaIv{p $ vZFPj }?ȊCZo/Ao'ؗn7ӇݟAfOI῟|յ58sqWd2iN?@PjRc?{n(2ZZQ[_7jdٲ%`fW^ &+r@ٜw}>ˀo_0uE@܉koZwn|E(뾸nrQ_w݆~ۋo sfƴijEQQqʊ:,^tx!DBM$jHFRu:44ER\p/_ܮ\,f .<Lq  Yn>Ph~0sY}tXWpf0KRs](T49$IwAoGk{o\Y3f}C5KNjWF&GAӃh ʊ*za]NmP]S5_3ρNn$HY-!Ucy(ajGߦgFǣ)r:^U:Fx$rsӰifs~Ö,HfL 9qm'ۍ/ut1 YY(.*⅋qaG`K;pɄE  ( ܷ .{8o(@ks3`1[Tŏ֏QrΌ1K=wv;M&pӭE|{EAnNfZթBަ-./DFFȲ%ӇZ[Ueͻs5L..'Q\Cx4oGgzDق B! $Il@16bwoz}TRo'"`jTkn> :m8B[o?m}7K~v3_YY\/PtK&fk!%Дd9`nj3DK?CցA)Ů]cHgz=>hMn}zMnRpՍנcd)̈́[o?\qo#,p˯T ߯^u?ٌc yX8O=n'oסMuߙgEQ̛;O3{(1eKe%:9uRl+ߎs/:7v3vTc (zc >f%J)MMOp4M!˖c |N=mzvv6/=4gzz{У[ᅢ5G#?gBvv6tÁjW{ok-r1w܄ۛ"h 5Fg L0QuBifojkq9CE~~>Jaٰq&l 2o˯ ]I'֏ҽRe/ROQ`Ur<>|&a#;ᅢG|\Ӏu5UÖDٔ2֏sUMnV^M)6ܹn|w1h c0g,\xޅ͐d XrA/bӀMxg^DNv232 "tvvh&{1>uZ""Ik[+yaa`+4fO{$ݴe3;!'00OPJQP m*p}Uk.<Mt8ggwRM-^؀/8 E'_ VpѤ"z)H.lJ)NxTywPQUeKBa=6mݬ^u$/X%DŽ1cVS]p;~!̚n|+ͨKNN;%,oK|;vcwⴓNO%hO`;5/RmgWfۏ7>dY҃)'^~^unA?5 QfGŎdåiiieEQP4_p*Us >S|hެ:l['uV×SN89!@e,[kyc?ii*vq1 0o1gŲW58( fϘ=OZGWRR,[4c ?8'Ep57\lԲZQš2w}۝(+HXi'|Z+:=:8Nt Cܯqw4[œ9gk} pe=#CfF&NrUXu :Z1 K>\tP:4.Aqk~xpPI8;N3RoYIjz)xpƩ dQR ?2Ձ@`(8#_Ŋe˃Eǭ9?,XH]c{fݗܜrM 3#3QEԲx/O3Άh z߅G>gHcR,_z(x07_/[cD 00pX?N8zjdef\focHKKB{nн^yɢzX{1p{!Z:l_߭]+ǰ!FyX8!?8sO,” 10\8 ppR.N Iap8)^oBOIENDB`photoqt-2.5/img/filetypes/pbm.ico000644 001750 001750 00000020715 14134304200 017436 0ustar00luspiluspi000000 000000  !PNG  IHDR\rf!~IDATxyp}翯 xK)R@ʔeVUdɖ-Zr")ČT#TJYS[bvڕU*a\9$vEP<%o `34g{ߧ pzz^7} \PQ;HŐ! C@. \ Amaǁ*.0ꩫ8+*;TE1A W9TE"+>& J@ϨŐ! C@. \ Ap1$bHŐ)j&* GJ5hnupȲ yNS(ʼ7[+A% U(**Y&fIf0"k=1 $! jbI !(9x33Ȥ2Pee9"+Pr ,ff y$DVEH'a"$´a~2Tt zӯ_h?m圌Dx H>RsL|\ZGf:;Jf bfjd #h02HSGv6MU"+@f6VBP"Ǡ)tB)9-ZG TƠ ȦFIfۄ!ccxs!\zD0b0 ;ՆF9*SfrH*&'se@2D<uK@P)ktcqdR4@T s2ⱸ%WEZm} XL Z.Cr:Io X%`frYAb2a6ֆ1ds61\6W6s)[,*Ȥ2APUQNeLeAp+Laes/$bR)n8jCp l6cL+;s2={#!(<'jH(&6 Ѿ(Q|VN0gQ*1 FGI p]aK)Q29Q Hcڐ1L O  ccH'h`$0;Y`ȒS0tmՂDIՄc (j 88qc4ƇhBRH y%[]X.yNȍjױs]sm1IuS 1 L,+D'(6ʫ <^<>m.,_g* 2s-:"Ojf%r xfC pL``ǐJ er>l (c HwUףދ3ƐN09:cDX s|~ # j+s}PbYUT _e@ GDxU3̢$"*b6e;9c 33e},a8PPߚ+rm{r%BWBCK%]vVn[l*!$E #]3Y~Ke>'0A9A4k7`o[kCX[JNu \3ڬްn;C~4ohvT0t@PC77ހ-Z3=rc0t@PZ6@H|Xsx/[)'4Ez{+| 5vZt~h߱1}2O9A!["&L蔜sMXy Ag _[~Qrz (㭷j:?9 7n:4or\ֿ\o0arr+!պkX)`$d<dR ιk5c<"MmAqfo].Յ[u`a'e@Ƶ76,CU1 _:Y~ksC>f`y0Y~-rj|h\f={,i&˯5zj|h ZXi=K @C>f.xU >2'P0t%Pd T_nZR.]],V9 WMQ]!#˯MvNX Ѿk/N3 -X(Z'P5XB m&˯חzU|:'م\@U !SP 9T3'PpJp yT+'`82c0F؅<0MC> ¥>׹Tc=`>p^ ʭ.L_ 0/'`Xm%Pbua:&0L0\]m&˯k03'`2c0v+ۅ '.MԳ],Ča搏d&˯0+'`P U&˯{_O@@!0Y~ݍ T$ ©f&f H|yQȇ.H`!ʠ\7cPds-Y+Pȧz?ʉȜ@Y@!FbK0.'P8v%J'CvˆJ uPr QE4'OC>BUgj%L{)C@QPUWOܜ@Q'Z #ˢ*FGn CJnEP1 _F> ŷyµTyp , Ap1$bHŐ)n'A%dMMQ8aYm.;eȦedL[1I IA^ˀsC.T2\zyA %#A!W9TUg _ʚ>(.CnN9$ ^cr$fxO_ù =% 0ߑBu!D#Xݲ7dž6oCKk Bu!0ƠjYb( 9۱:B^P hYӂMo۱uVY>vr9|['! 9_|BGzTU/%:[w8)CԄ6{}܇;D]9Gύ\lyh]ۊx3߼-k[G0ڨr\x ?8w[ִ$|i208'uTo$ːI&ލg~% ͼe2G(#ܼ`q.ta,:ׯ 7K?Cg$ ?x*z,yʲsg_+/~9<8]f151UckwY?#\xɒ"h/2z{Mig&gՕ\>8Eb+ͥ<~*,+׾ӥB3' J-o&'p>ǺWK9q;l6[리џ;oc\tCC[ܸz> /zo!1BKB!3P?1+oY⹋+Ξ>T2ez P1kÆ=ʊT2)Ģ1LNL4?338xAHggΪ˲d"~>qԤKp|7@Q> ~IgJzH, @0엟_|bQQEl4sOOq_vqt`;+ry^?vnM3:։~gN)N8=lGOa Qt]27=T(x4_  {o7~`@~c>:Qœ7+:|eEY <^װ񶍺Պ+|>_Aknύt_^rL`|2FG|%o)D(Z xO8be{;~<6ly&lٶeɿOǧљpkOܒlݱ U=_vJp_DSsA&z[EQā{6=.оg>8Cr&.ٖ1)**m߆wеXl tƔWm+9?\[Cv%uXtl1 }vڒmCu![HPo]Y+AŢv\%sαc,lp`W.]o\8wK]n lRAH,Usry`ګȅhjnB0,ے*Z׶b뎭K>ˤۂBoEvډڈ @ kQZ;Õ+HEݶs[{)CAk+ٙg0 Oq칂۵onpΑJs+ UA01>}^+N L@W`hp(z7lѦ=*@IT\.]|>|oA($ 8^8qD޻>qTb;мygX ;!>?w] mVv @`(x7u|Ǟ;x*rʲWv,y3׾5CAÆ݂(vHv⽟WzѶ r |IBp!2F//x㿾QRP]>և78a!/,W9vޅ&DG>OKҌvT?K_ UUfcgQHL'u wnC~1_|G^86C@P!BeGNDy^lشA׶70t8__a9o $IJ0um;,ˆjL|DNJ ]$IJpΑ'tm(凟A@,K6]fZG$DAA@.w]ֵ}8zcrH%?O0<8;k׭%!?FLΒB'!Jm ț MIs9LNNreλxg!LSsCrN_&‘¶YUUMcrb#ƐfK}aʹ0 !p8ttLۿ_x9iF\h>ʳ)$Dٻ/UyA@E۾6]wQH~?Ėm[((b8/<8|~u~@ zi{n61&0x=^CA7cرk؏:MzP}FW U,8x<8|0>Opam_[M O+ ሢ## #`U*jZAUUK](Jm@}c!9h^݌^} d (s*])HGxccTA>kn|9rXܘ(18ႝ~;ӣHyLmofUxSLk@p1$bHŐ! C@.k@AA،%.] N?xa#A'nPԭMS9p1$bHŐ! C@. \+IENDB`photoqt-2.5/img/filetypes/tar.ico000644 001750 001750 00000020623 14134304250 017451 0ustar00luspiluspi000000 000000  }!PNG  IHDR\rf!DIDATxyp}翯gHě&AhK%Œ)_8ڱb-CيUױ[ҪT\+WVv6[6Jٵ(% A@ st1=3=}>U|3z߷_~ߏ •A \ Ap1$bHŐ=ی:YKW 4".\o~ӓS}mi 1DK `yp0$H01\koYDX\\AYCBwH M Rju1d2&&XZJb߾z>BWHdf&Phdߌh4Tj 7 ,# t@y03茩PfKKI O#[1 gCƀht ,i$0022D"E"@ 7P(bIBӴI+Q<$*d22,sFJ1 #]_O8p{08u,e-)45բD`$:=QV&bv{7-f ckN렧\ym'9$)m- a8wNwoPNnHCY-F9;! Xo޽a~QN@0_+ 4 A@o4oP= z˯UǗ$Q=Bw׬~*9kR̀v5k Rjo!XO+X~9B7b-H]7_ܚ  tZBpcN(Z~ 9Hܖ  B˯㮜 QwҖ| wH-H7zqHP, s$DA(_g/ ܤ"ooĖ|ff  b;ثF  |qrN cp  49c\'$;4 Y~ p0$i\4ɨc~@p7_pHGo" 9Jōɖ|qZ=Wc͛3# _AgM,/;kA(l-L99 c 331\6~{WAP{ 3rFo>dsNXqd]]k?oݴ4nsLFBO6z1r,z)Er$ՐcޅFo8#1yܸ1̟14::n~:/sB:-iZϖE2Z~9 @*Aww]͕흀${]~9G ʢdE+A`Td7pdWE 0p0qXϫ :;Gmc Y~ Ǯ9 ŧҒ>1Up5WBslgzzQ׫֚]8 b'o(9Il-C>FYG_߭R(߰VD p-fB>F}N_ߤW?CCS0Rr| ks+?5$;|14:;h&˯إ-`p0Ap],b`-3YǕ (;0Y~9!Lɮ1 McxvlɋV9@!#vm1|lDk0V B d5+,/z| \1;څ[17a&obN`Tc﷾]X#oX X<1.f= ZdV'`)0;cDpRvaZ +1.dV XJT] ךX%'` ȧ]X]}k](RX.L_kc@J!څ;:Jc&˯)uN`r6.L_{P@!#PDw˴Y~C)s%|9fod$9.!#0.L_{C$7='`)7݅ Θ0U#wf d1sfL|`mwa}œ,6zC>F}'zڅY~9S !#X Gw,̜)ެمCE9< *k! 0vc…duf T݅^.X~@ &N]x2)_7O9C !#P·4gdu.01a\N@wpSڅ,Sdu8Ft7|Fdu J=cr C>zvaםM1\va}UO@1dSwY~݉  kuK (J(cQz -!kG=B>a2r11 X 4.5 | Nt[* 5 ,Sȇ N9U'XE AXI10F}}~邭*J]{>acDMMFM.AXp1$bHŐ! QVVV~'+++H$sQ>z & /ި--d2>& 4""VoրsI I4 T4 Ő! C@. \LQ<Բkq~&=*T@I,u7n#E9(zt9Y,HT+BC98 [ X񠵵VMO Ȳ#GCUUe'#\Oß+zxA7o~ k0x"DыrA44aϞ]ؿ/؇FTVV1F~A} LH& '>Z{C P~@ߧ,ˈb$cy[o?ٟ}ܳLC$x[jx<_Ns=|^z鿡:~*++ H r9Ϸu`~~55Նώ+ݵ%G&#!ahhokoӚwtt mm]8p 9Gee95(b``X=rY@mmM^1EulwA݄7mF0<<3gNnaz:nχ@;w6~xG3ȈzL&N|hh}o sYg0KR~]J b``8gf<9EލRf$s'}|k@]LZ'aHc@{{s;} 9۵^F*ld~,6Ri圝47Á1ut`f&b#2oɓ~aaf@0cjv;wnm[-=-8PEݤm:F*YkD71::ݑ#P߇ӧOlKWJ}hwCEE@S[ 8˗;/lre`>/gW}la,//^--aue6[6@dLMi3:mVrqD[s=gm8vǘMM8p`_LNs2F#7n hjoTTh! ==qTvES+++pQ,E^x<u熦w ^ݶ$Be!Jl| >OT_tX+1IO4#V!0ưǥK*ӧOĉ |mn361EDQKKKo?}Ϟ}Ǐ}7Apıv{ƞ=rggѭذP^{Mo$aq1Ph=켊EMظ_B!0&*fgr۵ #g9Gmm5?k[Ve\ІOO D?gKYY-CHӸpMu;v۶޵zq'U?ʕnD"Q EUWW;y\Wt=}~&އ; Iŵ C|SXCC=>aYP#GhmmJ^5N+_"?@ I,W:֜yL&ڦСhlܾU --+ݽ-s݋}ۿ_H& +BV #itwmi9`v1711L?kia֘# ׮a|jێW1pxZu|e%v|gu=j9t)aEMb8~̙<6 ͑e۱oos/]R"zlo /|;v4@y碦gx[O4W1Jl֑9 xw}{=^=(W^y >%>MklUHl c z{MYtv~Kd[2y泚'/y7C`cA@W5LOϚْ$5weeeeWgqf*tW[|mm]FLזeux/F,~_Xn;sA`Sc_@{{g044I=G?//Y@Hl %C4.S~<ԿǶm5mf)7v)ЦdD*ZZN`<)OںTυ m>mUV$9ӂ~qksOH&ؔd2 `9=jg A9M7z0==]7AYYΝ$|ת~Wp}'V`L=mۍG\_YwDsz٭Phׯje>x?WZfApz?Bqն¶m5[Cû}Ze\37sTTSD ^hv6_~6pЛHW9s>_aa{Ip,-%L] e<}AM_f DBl\ՙsT|ڵcNsU8wMw8^~$4 X `L$]SmgOT,sסjl,xCNfW{O=q][lÙ3UۥHTv3g>IMU",@=9HloG:?sj_5**._¢\Y=o7~6d!JeSN5**8}ˮ٣000s443M:,`$6B?v׮8|8/|W:-y)\NƯqr@`+c sqQ448p 2GS|St 27G,$E-]R)?I{cZޓ 7Wtav6 8>ǏhjBkkg(Yw+s46nG PVH|1?~4N|C":,ԩяx|)grx<]߽ =rQ]DMM~+?FO ՙ~29+_);ؑj3OΡc2G4ճ*N>(]Wq3#esm N$"^x'7];jw8>.EśbH)&j7ch \ Ap1$bHŐQ} -M}EQS0Kud?7) ˪TA8Z C@. \ Ap1$bH;C;IENDB`photoqt-2.5/img/filetypes/pct.ico000644 001750 001750 00000021120 14134304211 017437 0ustar00luspiluspi000000 000000  :"PNG  IHDR\rf"IDATxy|dUsV:Iwi:hlu@tXDEY_Fupatd`QFQyT|nhz_ҝ}*UR]QIHԽ{~>N>w9=@ _   A1$cHǐ! #gkpⴓ] W 9{^=dwᚏMS OADd kP5 \@ff! C@> | A1$cHǐ!  L,ؒ_JaA *P5B0p!2r@$s@Pf"Xc b*18&&J%*tsgAd9RQ^Vpif@eE#bB$SUe$a`t ÃJġg?o;n Ƣ"T(/( ) !:>Mж눌1fV6 a9$9oSehcP5}JX߄RRHLoi%m_h,fVAF ##肢oT"vLNMda<A`74M 0cH$߁DjD,00$qvCQ( cOMo b`T^C4px]!< 0DaDcG t\wAi%#WEJ+ip$;fLD$U# "x^|UU:!X $μgl2T:U.`MC3ZI+i14da]1"'H!J\sWM$\1[Y.B Rk.6t1w7}OM`oNza%$ (iWM5]*Etuw۳YH@W 4ݛ3!ށ.0sqzi$G!pN}}6iE2cDG 77ߐ1({YR匣w(,(c\*t7lvx MS}:?iv@U)\wX,ɮ0 Iު ÃLjg#cCuyr"$ ]uaI\,\2FGh>ذ[ 8\sGB B_#0?ԋhlG&&)7$G!PE"\X%ť\b1:zZ vO8`[ XIQV*t7 9G;=]Mg'$ں m$ CEy+@J]3[Y &&n7s cxt;"GH@r:z` !PDQ]lzOu*Z;[.B,B@ wYQ]>h˯rDı'$ P]Ybg,F#y^iIH (ʚzp 7,de$LVVTՠqwٺzׯ\XkLNr& Ȃe4\G!*fUb 1 /bEU('`,aMZAKsgNX(EI} ˯Y('`CTVTcMZHR!JKvusf6R@! #\qHLPS]y}[3oY~Mn{:'I9Mk6,oWUE5֭وPi'LY~s)'*PS]θ-B ,hXوumDG@n\dz:'QN`1Hr@@MѴfl !BsXߴWY=3g1˯Y8 )' @CEщ"0Ih !`tۀ@yYVTע$y1h,74]E[g jjs!X&Bru+VaEe S@2Ѕ~@fAd9*P^VpyX~Sɼg1]$K(e&4EICQ ]3<9,AAȒ "3#EC82ӊU*W 3`EbCpQε泊q&'YO-9b~j˯Yh=! Ֆߜ@  a;vY~B9c! lNo.PN`>$n5 ̃|X~s! l#__ |=S7p1@ 0k_i'@@Xμ*Z uܳC拎V߮'@@X c CTܷ 8 BQ.,7'@@XƬw\kN]gp,Nů9f!}  s-#泜 lj Heto.L''@@, 7X~9p/r$Dθ 9o5"k8"> 96ox='3G؊-fW? q,q v#,g[~s! aX~ aX~s ^]Owi|5oGs9c t ;oȀgN`,^ Ft]û1ۍ-f/&c %L&&eɄ'Nx z&'y`!AK~z+gUU EGð,fx+'!>1L%x7R伓5jj)t7motq}Nj*C$6e1vZ~޷e~N xvtogɩi8pd/F=?Z~™d[y"7$ttR|h'9`a"#{o3&w#N;W˯Yܞ(JDvihd',dLN` RTMš%B>yјC09|U7sdrΘR:[7ؓחUqOFe7Ҋ7d7\%fB>v 4؅k/n Fr Տ6t9ٌSqzN5khij<˯K 8}=B>V3.u],ƹ 8[_$.L䜀ʐp120c Cd;s 80'+e>TBQ&o!um 8VtaO2vÎ Z~[sXNW!; ;E_ꘜFWB>v;Jb!V&˯#pz|| Y8i=G @֕|\]9va:5:zf=.LU~Sri!„|@W* 9 SB>v엢*_du6N pRjcLLbo΂؅ (8+cqEGn*1dp9]N سs g(ipV@A!9S]L_ZAry:fsMpu/Fm ם0 Ȼ̬3ꂐdr k.L_W@^GC>ش]du71ħy]O o1 C>v[Յu du?sq=LgKC>v6tZc&˯wH1'Bt!f],!9F|*0Y~y zx1c5oمw|=c!'`x5cq#8غ״],^mWC>vم(i׋c=!;x.lM7J_9pm9˯?|xuaMjSNRcjUZؔLf.\f ,\],Ďe0qJ>n`dv'`H=VmOXO`٣B>"@K~ 1F_cz Ϭ]n&c ܐ=GogjVtY5j;)/f\O ;餐O>ԟƚ髉B>Qx  3iA8MW0<3! XnNPȇ M&'`<Pȇ [9V9:wPȇ L9NCe$ftMC{E0Pd3uT8ZA$2e Z AcHǐ! C@> |LV@ii)c!A $ILMM-,|37O^ M3j-ACd?߿vY~5N>dVQ8dY /.[!4M0AƘ | A1$cHxOu 3/Ip*DM.ef8`Ѕ] !9yK"b3NMkMנ e!Kpf(e.Nғ( TMZJzq`жA#IMۃֶVtvhDB˱n֮mѼuu+ !1Ht1kRAHTn䄫@$v|{2F%4$bTTTzq aFTWU#ɖc?y^,c]:{Q]]mId2ij|8zecظ[O݊=gXb5'UU7}^߱Nq/tW9K/@ ʊJYsN>swՍ`,Z/>i`9g(u+x'C8e.D 0q˭7t7" q o|K:G<Q8pn-ؽgWCX @$ |;9Jc*vz!,`  G@҂*+*QUUe|Ot:kPYƇ().qm<@s<jh]UבJ%Dފ_|z)D 3xYdmބK.t(IWOu{g~&nK ҒRTUVd?#4Yqޟ?Y TW$Io3T*޾^'nD#2~= Z:~oW^oeܔ~U=4}& GC D07c())Au lܸ ~<\~qWn7^A4Au%ٺuhn^dY6]]U3N;@nAf]j$a[ÿ B;p7 VK qF\rxɟ㡇DWwg1LhRBڮnXىJYm'z9BgNg߼>44d]]ju}Rpuf4 O/j_TT/p-r䠘9555݌?~-5kB=#rn_`UUqq_\dx,.x8 /=g7W\)p ̈;N݊}Q\}嵙me,,8G VU{g8xcvttvj߼n=nPZZP4477ނ5 EBy]3+ F}|4Oe?qy˲pBHT̄#BTWPd2i+c ظuРu)t֖ SƘog}4ԓO %HRH+#  F#ڟyƻPVgvB1 #>9i}YY; _0XO:3_? "00޻ ʺ^@:zz B&: pf*k^sk 8ekMLjw \~bya]ױijkj m۫G(K! !@lڑ}aTԥY#!@([0~b"'Q6h&_Hc`ҒRC!I*(/Q( ˇ8]pI`˖ }FGGrz`A$x ccc4$1!P[[ >tx(+3Ws4~38rZ]w߉{hnjFB4 0ۃĔu u8wf9[q 0dq]{p-X \B׭,b3 q !ahx}}B4T"]QQ^ZnhDCjԬAQQlE0zgBYqWcvrYP ز7ys :^=@8:h @> | A1$c~)cE{ec岎W_{ | AaYIENDB`photoqt-2.5/img/filetypes/sgi.ico000644 001750 001750 00000026763 14134304224 017461 0ustar00luspiluspi000000 000000  -PNG  IHDR\rf-IDATxy|?Ȗ%G;>sҐ@{ wKn[B[ _r$RcR#Ķ|mY$Ky~2&5#i$hg=} aHdw`$& a`& a`& a`A۶bkZHTJv_ B8¡lުoNVԬ7߀(& B]$" 0BMl00L 00L 00L 00L 00L #kf!$$+#0PB((E ?(fv 8i06BՊEȴZ} @i؇G119 Q@QЇ=6!$ 㓓p(â|x0T @8\.هNoH l"d3` pwp~qxtd1d_F @0:@}@~ 8p{<ǃiF@! }IHEOi*0x78?Q !x78Ī43T $a`x dCHpN`xl<]aLdsLte?|#fcxllï%|~?G57~`Igp! SnF' `qǤ@c#C0Bx^M] !pN0'+ `(t JcִP1 yEn7P$Q3L.tVx ۡZ}\!}E}/ugH&fפO1 ;Cp`dlCl#uרDIՍ<^H~ mPJk': P4SnިRLOvWT;&`b ]ZEpnJb6O94:{?!d:w<K>osՒ2!ALj`C{O! <Bi[5d5âJ8_7# &IR %f,J)VgvfI`E&  Ӛi`2#i&µ]N4M9HY"ٗASI8/ٽKj[~# #!ml],'0&nc'0 F Z~51A)E;O`&woqNM&8?]g`9 #kjA#B0`ąPDY~#%2xN #.H˯V/In0T'Tw Hi0TG* 0`J- 0`,bjh FO Ce `PY~9&Ѯ70~L1UoTl?&Y~4j|`FL,^ [~#H9&ы7`Y~#!MFT-)`OWH1BN #b޵:R"sLgo4rN #"V7rN C1bT 0`(&,9 (.I5o)0>N6H|B$t;:H C0H CChjkd"><35K!;z9S[N/1ޤ7R)'@Z::g]k!u8֞kjbo$RN  dljweqohdwSoH@J @@qց~=ƞƛT th(UE41:^X07RR!'j5mB0󡱵 .sjbDo4='r@kj 65kB.Zm]{=߁dwE='rlk3 W >}MhH9u`pd4%+Bgk0rM*F9BӍK)EkG'GR)!t UM: B019[GaBl kVt/ f۫NLǃVcم76B9at/hĄo-BF'cf_u$ 6t-sC>PܠcԷ 3˯:r=: V ]8ha_IN@.R.1˯J)'K \Tم7>%'KPQ]1FЕDs¢ƇvJ0rDn O׏nۅ71h='6(ۅ71h='%6е]Y~ !hN@V'ҩ]Y~ hN@f'p!7Ь#8Bg;]Q&-4+ B^ۅYŜ& !xu0М$*~k0j4%B ģ Mmڲ 3˯RN@SEoO\'p`hD[vaf@4%ă]Kvaf&!prst[B>R 'yW$t2˯&;9 lȧ͆@C>׌]5yvwY~5lN/y9 lG312knI]Y~A@rI-|7څ 2˯> $9 ! \vUf_ %a()0if'> ww'.,C$'!'pK'0d.z M"¬ʯItN ǐO`nua5hf? $D5GJvW5 $r?@*|T5pʯY~uO"HJGm!؅Y#Q Ukx 3oꑨ&sC>Gp`ȫ 3o C㼟@ C> 4ksAoWVRi.9 @|ӣxǻ_%9H!x ") 3˯1gN@U0bGmڅ|b_ !'96!pcՅטt!'9څ k<PEfC> ă 3˯qGN fxOȇ(hHpY~9 4,a!1[]͆I If50jX>EC>소4gεp\|:ކ%(CFzzLVF,8!8{ 9|G8.Z@@w 0G@B> 6P#'b (a0G (a0M 0&TB+ 0&ڜp`hy>`0 AYk/3  9Yhlɷ0*W`& a`& a`& X22`6O!^n'lY?;?xGĻ2!KA ~4k;-<ϣ8A@D,!!xZ-VdcѢE(_"愉AM?`㭿W_ODd?ʊrl߶ Jxv@CG׾q/ηD! HK3jD^n.JK +W,Ҫj@!CC;>8ȟ(+?k غBFFGozB`Xh"Ԭ]/ۅ=wcey>nB<샃8|E<{E侤tlc66῞{jjpp ףH8ԈM_H*K}mGNNNLflc~#)\.|Cܔ9[7hS55WG;:W^Aْ%kU+UB$I«1S妛F]CN_Cv^#| qƦf465Cp'?+dRau LD{G.ٺ5l@}}xꗿ?rp$2<$O |;?$=zTSCZǃxx[Sn7j#8iD@͆~ṭB<ぇx\՛t'O<{cc㪉8\T?V[&t:wF?QFSx?i%CMg?G~t^q8sCCQ}ԙIݰD~J!xw/'O< xo-UvEꢎh>8r)G9|%U8lFOvI_ _8}ppgrB6@ ApmK[Z[!*9xGcs3?+>Kwɟ۶l$IydefCw܎_qUWΜh(j^} أ :DGq*꫑DZ6^B)q8pX\\3ve7+:FFFwIi X:0Э]O<(۷/VJ)222pާkʅ(FrqZZ[ݚUe&,** ۮqLN:5eR& I*+ʱ|2E'L|aoBxMouoGE,)-Cر}{҇%%Rv$'7|ˆ6R,[Z][ ]]DjU PJa6QZZCql8wcXoU(&="sX,y>z< &++ k׬bmGp)60<ÒaQԖJ !3Ptk>p*+U{cSJ5q;&(-danGcSsvKJJPUY ظa}XjkSְ`(t|am 3g,jޔrJs+rrƦ& aۭ\$ WB^nn'O&DTmR.S χQEm򑞞 ):^YY֬^>y==x7d`-QIp^6[qzC$-Yʊ;֖r 0066E*'`|brrT2d|B%A}pѤ }۱nڈBt:Q/cMOKo9Xfuϸ\.7Do+20EqxQtvuɶy6nq ްcl|B_bҒ>cQ1霄$\4Ndgg(23#^AWwH+/&A g cuuzQMh&3B Ӳ?ݖVWaqqp5"33.kϝ[w)`0A%IBm}=~cSd2`||\L&,.^%gU;jݟ/qNYV]$TWU- ~nMXZ]@oOKl Án8y 'NSahҥw**t:L&re Q~_GK2r/9=[ng?I\{5Q$O ێ8l\\ H ?+W+>jq}ɾlb{2)YYkVP)[q`fhxÈ!%K8,_ l݊_~.ٶ yyD1>q6 a̬\۸~N sFzɺ{p )8+BI&fJg=>QEp_~#\_R./ Ӛ,`B'dcee(//{#`HKK S|K+zzzv&Fd2a/ {2 6B0v͹yLfhbnǀݎ}w:~ۭQXP(Yy!ӊV֬^ܜH˗} /3Y.e,!Y(..un>\wo&p&sX"vqu xWp߽`m=\appg6ʶݰa=L&EJ)JciuuX$ nMS & @Aͺuꗾ+EzzDQjt9Q!-!==}~(%I_݃~\E#M΅}p̎6R Պuo=ΉJC)3 Hv8ֶ6,! Ŭ8xmhUW^6 Jq߽f% yСD2eڷ`\$(BxJ)(-)mz,0q;:`kmh %[9 -@0lR|sw#=La[Z\f3֬^ݎSϤdxYY,Msc Hkî;!ttv*~H9æ~?^}5]\pnfSdCC8sQBޫ99ȝt-m$IBͺu(^,7sϫM# Bf};p15ֶ6:"+?,:+k[&D얯{u pY8_Wp`?s7al͛uE$I5W]-6)jܡÊ(ݨVpd`bb~!?q2%~ B0==䤲%%%Nn~>??7mDFFV mc8q捛`0J)*zl6>_p xݵ|җڟJ)x D\ $ʗ ׋_ۿБ}b`iuEז8 (*1^]U2hJBeCS[OiI2JnhP6 8wzcc g) fGFW^_8P}$BgW^z~Dvl V,[6il}pPjjEA+Mڞ:}###]ds I%㎃ٳ7O=5ǖf*|#wGxCDyY!I"&Ntޡx߼y Aץ1`GyΝ(..hUE sJBX$dbZBv[[QRRy& p?EInKeNQZe|bsssq-APB09DyXnmT 7mk Ԕu DZg]x~CpٮܢϿpDF)EE{P^VS$m.zrή.dQYYzaMj6R&a曰T_]\(q%x#?//aC5'B\k'Bpԩ;B_.yIf*EMХgC=N$aiu5|G@-7݄Gz 9+Vhzgݗ£~S[oټ9}Bcmv;vC6M@|A<ǰzʸ? k4'yyyӟ/$֬BFGGq)`CMMLJ), l(X]=$IL IV\n^QN<7^uWqmX,e/~$6nXϣӿ|KT8-mm=vEy9b38PЀIu @)m$!IRԵx݊G^ĠLAK -Xr0<?#| 3G11P +/7ހnt%TTq0 ,V rsrQ^VkVc%۰ufTꗻ^aw Qv dXTBh@n8w]ظau+$a?Ƒ(E0g!DQ5k݇D{G sl6kcwٳx?hm-l6Fx=״4dee7nݗc(*ŒRf|S}p袒cw^v>¡`{BpsAU|w%)p'+9 pUE^Uo @ Ci @03l%ShC  d[,E6H{ zGV!jJ*rJsLcr!Z"$+@jj *(XH|p1C{$Y`%]g>kCUU" -yq~\C@,1gY,aO;iHV}N쉬o,ACZDY! (IZPc EU-1 9o\pY@@2 ub ldYc| B`PHVA &sdZǏ=+Č1<+*5$+YP&'`!b%B?&zz1~xg 5c+$Hb ,v! ZV^419:{.gb `]PB @ cWj2a-sʹp'F1/%$1jwbm簗WFnW19܇?x*i@Q2QU[+̂$|Nhjf= R .~|8 eհfRd7]A@$@2YPUX.;lFe-UbY~9Rgp8kQVQ]pW٪FX펂W:,Z~ÙY{ I9 H Hij-[QVYʺ|$+,fa6PN %HaɜpX6CMbQovGsӔ &" nu <8fG}ۺl6,fTcl˺$)P^Sֵ%sno8^ ڋc?oGf >4@"uh\f[YN.{e5lQb)Z~9>&G(' 4WifG:$ g2aM=('0[lhh[ 3cYr4݌ڦo ȇDTa $xB9'2Pk`/w~~TExŶdQ:`X:.!o1JNv$QoY~bN RYpxs2 #va?; -.s Y~( R&zbcY ڋp(b  0vEacDhN`stB>zcd s t!/̜a`1M- .L lN $Sمg 'd- `(_?[!= 5],9s-1xѥƳ 7?jNpπh,|馱G--diT 1'PWG b^n-~+@a,C>zPvaz &'Pp(d- "9/{ b?\|]Յ[PDrC@A bg>7!=8j.d-8 %'PP)E$D½(ptVB¢Pr1q7vaUU1>HBryB k&oaS9cv<م[;'gl'#wd5y (Ԑ>5va|"Cc4Gva|r/ 聚0Y~Hr9C|L.<],e1'ɝ<#1L *; g0Y~ bN ѐ_bB.|0va1I_Cs4'TiN!ᾬمU~kxrȉ(.c|t8TxeN '01 ׸C>Y'KՅ[|*'R!, 巀"R#='mGN.K3t;c9TG-%,%rI? )څ[~{.F d)h T3'U(ɐOZ],9 J)|M0Y~KHN7 WhG½1 Sߒ#`|; dgRGcptv@U~K&p gu?B>:9Fzbv2b&oi@F9Pz  {YY~KlL^򙛦~څ PdĶ*`3 g4j);uDX eHkR'?0&ԟ@g|RN eX x)C$9`1Cw2 hő0|`AN@0ࡐA,4@daB>Q, T.Dv9H!(`R$u&rt(3@QL ٢3T" A06Ѝ* vMڞ!Rk n !  J(aH! &fjB0 | %k>w-(Jj?DQO<pvIw<&"HW^jI.YU(B1`01M;" A0$QD C@% A0 X;ѣJRO<}-ZBcqΡ*TUCA"#1@U#B5A`EMgD DI$INtNZU:/ b@Z @( $FF1<8ёaLMN`nn@*W!I&6ԡoGyJ fyo؇/:-++*PU]6Yu6U5E h]Ӹ1bmP^Q˕s?} 1FHd2᛻o?uw$rf822;obp.~~fb˶|̳qֹcm$ EH*8Y=(B8Sߝzjk4 DQBoO7۷'nɉqxTTV"ݷo,epxO=bb|,mwi8&/ᑟc5 @ D* +if]ط<8q /eGܫvM v0zBumݲ9Ǐ⧺ml_?㊫> L"z 'zu/뿂 n9Lf3an69'TVVb-^Wo3`}Ml4@gB^xI0WDQDsKkcs3`0; 6=s3?~}x I@P ˸ݘ}g9qK1r?-ϗJ^WWՖ鷢(?kD ( y2pM0-q_99K7P745e$Il$L EoᄷV-׏=]Ʀ霣6 {Npynm!bJd$ -ز۶uQ[_ŊP(qxoxUt|[j5 .Jt>+k:wQLH$ pΡ* dYFۚqb;1>$[X,44&!ߜcnn6arTVU]%W55P%-n$$+?ֶvM pHrشe+:M}>/N{iAܒQ{~>'}8cl1_9fgweUu q񨫯h?$BUYhj?7;KEm@9B$t)Nz5 pͭchJ"~1^cGF!~9ݹ 'r>*][k4 ٷx9 ՖL*q566l6])(8o/;$SW"˘O`XrVbjjk!4cA9jB2i\U9a4 afڵjs'Ý|f1Ȳ3,4jDKX!!"k m 眣q_U5bZ"p9! $ܜc >}گ[S=f\.m-V+kV-EU _tNbf1}>$}I >QД@ PҶeet8elHrG8NڶMͫnG]}}׻excvatd8{|^tu\XkhIs᜚Jvæزm;= @.^ijq76Ll9]Hݾc=Ƥ` cz^ev~}=x٧4?#b5$:#"dY mMgyҊ$ pxqC_]:**PQYhU_I$ }51K9|΃tLqӖ'mcS$ɴ< ǃ=y(BoO6=@_/6o1??b%X- (xo}-I˒ǟ?y@ գ?+W=.#g@,^;x<݋140`D $ 0̺|ς `n۝\r|Ѿf-mkZ(k"cuGۿ'稩EY#npLMN`b|lU; #k445b3Ӹ_w՗_k>-λ" 3m_nwZړ &\p2 C[n=wc s 9f؀u)Bxp?4_xeW$eB1B9log v][-lJ|1m(2]t\۲m;9x?A]}} l2АNA0 ߍS}۝~ |cgZZo4/qٌ${8SCQtžoڱ'>XUŹvwN\{Նں-2Ơ( ~ܟ4ǝpn]a٢,1.~?u I55 9|>V[EQĖmذq3V; EAI&k9S?Uyq !@6d!\Pq,Xa#&NC  =?!)c yiyzISu7?ʟ&&1\™pw}1=s` !3Ңysl  b/xM ~q1cB]}>_D d2/o`jr"i5kqǽA?H2`˶|C\w^t)9Bܲ wGٿ]Ӹ+_sաWymڱ}qnGy+=n7zp$&H7^{4%gCB*YPd,C$#>18x0<4V R UL;1C3$ak ע9t؏ل9n@ "6冯_Cֶvq9$Y& .?~kuסN Ϧ>e2~ axp, 7n|M[bpg'&cwZ(<I۷{]@?K'385}'0<8I08XOPG<ɉUkniAӒ5Պcy~vȼPn7iפ眿! 9jp箅bIھp'^La (27r]` ws;1$y7nf/Cmmj7A!_}sK+n{.Y@GTU看=4AHI(x7Qpkeی 7fU[׋|#w81&8s xO>:I_Htsj\k4m}^|oln=95jH [;/3q܂5kWGUU8\[h% `zڅ[wߤiĦ~8‹h Ψ=ǟt=8hhhŪms(UUXa%s l֑竩̞T `~nwmMɾ~8Ś+C3z|:{&iqH]:8) M-d2a1ǥa6'.=wފ'41q]Е_gHrrsvm=K8 :R36lڌX}αue)OS{i_Ė6y 0Q3J 9s*qUWc=I˽]sO7|+a2գ+?Qvll^coh@546%9/0vm[ۏJaus]rGHH HrycpgrO~*[!j d2ZuuXqfE B!: _^i;/ &X͍rhmkW~\Sޞn٧.RnFjcrvtl?F ^]_4}39ˮ4}'1`-@Ť{, 7q+dGkOq!+Z&W=UQc.u}x_ekk _ cqlRwPDCgH,sɌsc1NL۪*I>ݗ% HEsK¡LKf `?~k`q˹7iڽWUIC Gd1wuH: Es8Cg&>smk`2.DC v5Aٵ*T1ͥ8 IsΡڊgF%I:Z' J=xn}Svh!%R>,sa:SWك!  J(aH! &c@A I $IbIG[ox, x덿$m HDBkQD C@% A0$QD C@%CIENDB`photoqt-2.5/img/filetypes/jng.ico000644 001750 001750 00000021742 14134304143 017445 0ustar00luspiluspi000000 000000  #PNG  IHDR\rf#IDATxiŝ߈>OZGwKB-- cqK1 _ a= ' 4"I@UȊL@6B YwA}bHŐ! C@. \ Ap1$bHŤs4'+?H 1!2 qr"C*9<^<s@&i&r A0Ơ(2‘0&C"ePO{3 q E(_‚"pΩe@,a!cl"B Es7 %H4/JeR9$I"! L CU(GJϐľ 9ѱaOPVR_S% @00Dba `l|1Oo3UUA04ꪅX01!Ȁz; A8Be(.,& @'#!w"RS16@<(-.# @:  9wH‘:[ O& H40>@w'%2ۆH,L"@ @";Hđ,!! @dUF`7"pND#. H!06%*tF -W.^A<H%WE'-aHf!0>bic 㓁䨀GY#˲HX0 M"z9'cc. aSHR DpM<G> !HE.&TUE04IDFC<G,[5 ۢ-B bm6؉iQL1ġ}'HHRHmդVTME/Bt }=|@YIJ*l$cc m] QQv:Y+xq"!v<\C@XFdž7 Β*g S+HN1Υ|C_NV'(2Z;#!ό>'8!=54H3p>7 ŅLz&Ch8~ 9iztx̵ӯ[-z{NqHqAL&t8{zpw-`眀@C} Y1݂|H ˯~r6 8FcFk\U4;d!1MpЉOv8ܸuvaf]sˌ1bQ44@82& D 7;# jUeSvfw؅k v NOT㌣. 춞m1SB>fvaO[W-eS!#)B>f( 4p`7T/d5dN hl)"X!Iv4Fp~Wu}'G_30'`팉-=]9bc<8'a&˯!'`+1]-G8.L_sCN6IǬrwo_fsLC>f @cK3,6=;`l"م|f]x̆va'`oTnjr"A4.Lb圀Ȑp1l30c d9sY0'`'|h>h",@UeX,'`YP9!3Hڅ,o>i'o>`cb9K>f|`.lUY~C[Wer] QX,C,:0Y~-:cFǃ֛],J XJҮcNڅ[c&˯JNR+J>v]+ ,*9KԴ!|@.LZ+.V q^ 9<.L_kc@ޟ +|1`$Cb&˯oN `p1:6s0kcۓaՐ9:}v48Zk 8_N /`Y眜]L_J^r9:sG,1EQpM מ0ȹL3l$sn4.L_[@NkC>_vag&˯a!t=BFl1?]X5.L_9GOȉL|l1tt0Y~C<9B>f cdu 6:%c4Fم<hANԧʼn!.?M_Dr SC>f6m&˯1?'`䐏va$qv׉b=!3.'w,Nsr?5n مUAI9C!1pxvK(#˯k`#`RN0zp89pcمN &S!;c],ì 1 w?3ȺR\hliP/cdu9F'P|Nڅ`br slxzȇ#ā3YIl]zU QTX0pVB>bjii3#쁑 dTsO|)K8'N`LN@D!?Ft |$s٭'[(CAQrkq2E!4 |$s? ||h֝H+B>ae2 utj$)+ A&* Z;c^|<#ikeC#ACrZ&TU@ QO. \ Ap1$bHŤ N0 "Ϲ[Z~7EߪAI ͹_ZX^pe ;v֤/B(B1`1MR' Ap1$bHŐi~2y./!Ő0.O51ƒ3@)!8$ 'WLB@UUDHt( bHHi!"T 35qQXXpEc9 ]s2BwO7[ڂ. AVx=bŨ_g +W`޼*HDbHw?E}/؋fMG7`Yg:WEUqA޳kJ%hx x?So!0>1a}o%k.ŝw܅M7nFEy@ P'qx<ښz$Is%k/Ƕ^D %Y$YϛsH$>s?#ݕ?po&^|+w8".x{s  | oc$ 5k{wa䲜1~ ~y=.`5>L̟__‘0t 3k? Ё(Xv^1L'7_k4ow#xm9?6cx߱ݺk/܃k8.X7*bzzƛ;-#V@Bciڟ1]v9k300Їg7$Io}K!Tb{^/_+q˖Ognv@'ӧHOMq-ıcGk.]Fl\oC?>(,Y E ǔ8̛W*~XsPUj  cxarvh4u.[~(++M? +'ĺIf[himΉ'svb?W%KSs}1/_A) p0^r[Oo7^JN9طi+6>ŀ(8 I+:3j>Yo"LEQ=z%I'oJK BdUH co؄ܾ>;1A4W[[.u p0seO=/:^0:;E|=<ԑ# `gjl믢۴Vc }j/oɐ8rUX~F}--x7yߗvZ YxGVz!p8PQW溔E[p8fFpV>3Q[[K!BtD2HsӦ-())I˻w#񏃀Ȱ}~?U*֬x 0^ze)OqMt}}^̄@.@ l޸6|`~|C@QMP\G7hkoؘi~NVԯ@Qa1E!zoX?%MaDQ!$.CUUsX6u@hbr[_J1TTTj7 cbb !زYx=cX0ˤ$ 14i>"jUPU+cW.2"шQp޹k 8pp?@!8^َ/s7zyoD";_E"HoiYʌ _+BF0eAj՚WO!DjHNa*1=>Ãgx XJN^s5a@ݐ( =p޹n݀+>  F#Ŏ| Mǵwbx^ͫ c 7^ ?{꧚'ԋ~ Nj7~wunl޸!ID"AKh8r8h$H`oq,^5k1o^|>(ю~]oyUdͥy3(Wu]=oqTUņ+'n~_i.<ObeY\ q1(:::i GN B[l]zZyYy _ǖnV(,, (Q?/oiP@|/oG$VVU$Z2>bժ/ \s>u)6f-ķw((6[Q%fBp /ego>THoʉ!I$>✜% IAp eeƩϰߗ$ ]'s͕AaA!+P[[ λ>v%_v9/l |#)-ɷyu/3-3#`IҬ+((+-ퟹn،}>o={w("i׍s"TTVz\zZ\u5XbTVVBUU|bYYZҊ1%Xt6ݸH#@?Fe^EE(/@UU-\QVZU1-45]<X70CCSQ^ǃO}ӳPUՐ5/--Uƕ `CFBTTT`ABbႅ(--=̤ Lo>v -bb?3,f></Y+?SZ>5Aѷ5S0 C@. \ Ap1iG8xh ѴJښ?'E?UsziKp%@. \ Ap1$bHŐ+QدIENDB`photoqt-2.5/img/filetypes/fpx.ico000644 001750 001750 00000021144 14134304133 017457 0ustar00luspiluspi000000 000000  N"PNG  IHDR\rf"IDATxi՝SVK^mlL0lõ1[afK؆K`f2! !ØK!, ^]IjuVw*IUR-ґTS ?H! C@  A8Z ,5 'AXYbo߸T̜^LAh%I "8#(LA"/ڴ@  A8p0$`H! C@ ?D^!ЙPW@\QK$K$s0 1,r-(eH"A@`#/F8H< !Nڌ1Ȓ,vE׋"$՞  K;BW @$N 6 EA\QFQ (+*BUI ʋ 3F3PH2!9hE0rT۸ }>L./GכJ `b1?"0_@0jP[^,l ՅP,c EnQWY M"@ @t 1E1dFw(X"(xH #Pt3H0(?{@ 8yu l!Pb9՗`4:$D-$*$8Gonj6ۛ6`@ݡ)H"KH!H܄h"^S$cAQS^eP YA01EAg `gqEAHQ`!`W@$wWB0 B @h<\ !@8QHp@$9їO~$gFqSO;F-1[ڢ^H΄1DKxY H nSk2_#H;`b ϳMH8ю!8bpn5ta'B?ֆpD@'H@]88ކp<1nm%N]Wc NʦK 4 Q$k}- l>k!(8ڊr_LI`K>sΚla l@jhZCKo/Zz)$׋&fYB0 nR'KP`DZ\BPkfLE@˅YwWt1&]YWmzpV—kq*@aA5N,!PTXh5 H[1ɂ- {5:$x<CkNtvw@}P3x Z[lhHF1ܛWU%cC ƱvͯCsw7Zz{#9gxBAQao@yQ<NGhG;iƛ㫖SR]!,+JQ+gZ~Ab ]NPN mH@(.Ϥ`gFZ~3”Hq\-+QT>)tP[^nʾ˰ןaq*KJ03U,7;ko*'A9͐$[Q"l-LPS^xL) |E9͐ nWY w@Ia!ΫDQjE.H{E^>D@(r14lb̈́TN 4.-תr> 1s$۬cM؃9cP MKK1s$rxaVMm?,rZ Ȁ>^[H2((eL81c4X~~PN@ $I7r2B@b %Ř][s+*l.9+*EE $`LuJ`-(-*BUI ʽ^yZp4, ngBH$=5,.F(E_8@8p< q U-(zQ$IBn߶*F qOlԤ@0g׋2D`~y`˅I J:q;sofik9& $::$PrraLjNɑ\ PNyF@Zu:)'p&$DN%87>PN,H1.8Pf'p:$lM;HHȅ7~QN a ! !*rC;@ؓ_TN 3T7p,H]ɷ7:y?BW`M''@@Y,Ԝ fSs$> N YcVo&i9"kj̈́dN19"+nM Y9Ǒvs[~I9"c,n=S)9"c-|wEw  2j̰N+Z~ 9"mlMTNӦ9"-n̈́AH7]  4co&5'@@hFc6]ssE[oj߁r p6?`B_cN1Յ=RqJ\0`Nttx{dIB z-O2'p9 c ~kni:ԄMrF oz$s[l-1QilD8;ǒC _Т88)v Z/Gz1_?Q8.v Z5ɫp{G"0'Z~ RchS{v54X~:+f0F MҠewc~ΝɖtzNV\؄@Z?N`_s3OyT7X9'`+TOf5$pG۝{[\`圀m b}5W@`_IEѰc\ tXaj `;ަF(< H`wc~lKtIb X^H,ݍE XX.ܐ ;c07;(B`ߩfzՒCG.lztJZN00M=jiG5X"d,+!%]A3d,)| W } W|1p,] X@pd5,)G4|&ee#0Y~ 9K @jHFvard'VǨ~mo],!4'` 41X.Lܐ 3iNmGoN 巉,99 ^!#D1sN"e5┝0sN |C֩.L00mi`d'SV],#h1UN`TR],%*'`J`Nt1]ؼՅkrfCC>F;aWI  ̑0C@Me&˯CC9r\| Y]TvaL%d"0Y~͉Yr||@o0GkF̰@ |@*.0c Nv׌a? @6;X!p}C^T>(8LU~MMsydiB>F 1@?̭]1V|&IWZ&# jK$p, 9pȧɔ!C>3ZN!Յk=ȹ,fyvaZ|r.l.L_ @N! _],f~L!@2#0eTua!ҤK*' 44X2cwr]7p[O_K$p0G9P'dݐݪ >2'KGoN.]8Ud} UN#W9C!9.ϝS8N*'`5cۅӻ#˯}I "vHp:׾$sqCsv d?Ftᐏv Mρ *^|&e,du Ft;ћ]xva:cr "94c£ۅc8.9Ǒv:oN +ɧ!yBIwFڅ{B!t8*NE+a'+ ^c+ IjPvgej@!ܑ|0~rD~3'P'?H -1 Pȇ ^9`(D!79ތbZ@!0ɜs <Ap9MO#|„dPHU'`ߏr$  S,&sե($L_U45!(B Lc _bχ] Tr;0A  A8p0$`H^x=zVHG"m*\m=MVAv~q۩ \t$a$ ?@p!Nu 0j" A8p0$`Hjo@i`ɪz/~xO+C0sDѼ($񨶋eP`dYFIu\?"@4Scz<-HD%Y!Ip?/L+ .3? x l'K^|ui_;$Yc#$&Y>ocſ JWTq!GO(+CuUUFUW,X;n޸1>íb4ӄ Kb߯DZE1$U!z467kziPUQ`\J{g2kt7X拦Ak&Ck1t$ *1GaW_|\b/cMUJ{WĬ3hgɖ`#(F|yz 5K,zB;o&O/p-dѧ/8߄af7wnW_!&UU{  uu{ [9G,;/g5KKJpʕ-X !pBtifHeDM@ ѐ$uпnPYQsjjp̙ .צNz{ͬmvze4 Hd"N\NsuX4>&,@#$aJm-nWo-H6 c /*o<>kJ($g'!U?EA"U|p)I8i좠Ϝ/(xv&Wٯ%"/$y>vLe&)?sjۃc֭TP#$DIOն ‹.}+W¥!-嗱k^Òv)1C!<~=:~7,].(}ֿmxf æ6U"H?6ءڶ]b~[oޣ!rZG"V,7ohsT_֡SEN)/lnvfwu=bhMZc|xq6q  r,I8xw%I}+WjV_x!V-_ xnf=qnƀ"'qVqo$E`Lra7U~33A7A`H! C@ c@Y\.z^H\;ݸeܩڎ!6q L! C@  A8p0$`?G0aOWIENDB`photoqt-2.5/img/filetypes/psb.ico000644 001750 001750 00000023271 14134304217 017454 0ustar00luspiluspi000000 000000  &PNG  IHDR\rf&jIDATxw|ս336rdl 68 KBZt7{!$7 7BI !yv0.6,YV]>3c%Y2*}O>왝9Ϝ9<paI\7 A@ , AX0$aaHHSm0pUu[ 6ҤM)O?k5(c"B#$.Be$a(T v  C@ , AX0$aaH!  C@fJ+0"MqT$Ż;W(hJ, UVlQA!m$04#A  @` ,# ׇb09tl(B`w#錋 HR1((=Ddp,#'s.ˈbhS\&$DF!H.!T50sxV0GӦW: N7GJd` `=GW"Յp?3J9N"$A] i1(#͈(*/=E"@xJ4?n(J"\0($9G)SF4yHA0,#<8=їC"40zca r4 9!F+B+Tc`bq.!Rd;Cx` wƅH$DR 5&bĒ_Cj8Li8%&,b"QcpDD M PU=OsnZGhA,D^sдǛmHƁ-1N?zFʦ3A@Wa tiH10Au+hN"h?XahCHtʘI@IPcA$gB1cmnnQ@h$ M2T(k'7pv"zkcl<Arn(rݒCws;;'|a! ZS _!8%98{ hy` Pb00!c A`ktGwcb pmX HƁ1|ߴ|:fwqʹ8!C_]z4' M"ل`8px<1s8`s%i;ZD̪"~('0$ lpzYlp躍Z9g vup=`"8X*(@ǣ%h[~ڃ PN H&Ar8+Khoe{)aC@"$CBe}pݺkW2LdM $ 9saˣp74-I Y~rA0rݞ[EelpMeM $ #/"9(w~F#)  @xJ|^GCw 5EOB @xJJ0}]]\xyM73= QzBxJLJ蔜C$̞ =?{q&PmՔ d|7ӏ39 0E([Q2W?Yo0A@O & w2Q%MC]~D28|d[f냧N/F2S:@OwRd K >|A*C1"DG,"Uc]10Qdt":0&"+ 8$Dɔ7vPNc%dXHioH̑ oR͢0$DȒ7as R 'j Q7meV[{="oV)z=;aIWl^{~k'@@\[~iodp5" ,2[/'@@ X~9c%Bp-  ҂,`Ŝ ::&~ Wo0௳NNH [~8 )*kmM+H6 V YhDJNH Y~99"(cs|-H@$- HNÔs=" f  aol X~9B;&& c >,'"f Y~ `u1"aԿz[[LsEASY~Ƅ9W|] h܍T<l~S& Xl2u  qNDCf&r8o/4UUBn7Xf 2H = Ɯ,&n<n7Y̐0潕twMpbh=] ֝ٞ +Y~eLN@5z>8ū* ߤ^櫓7QFr]OC_k Z4;b0wDx`'2X F NcjXL,?c 4ٵoao='`:Q4UA/-hٷ^&sZ-Gb{#o9'`n?Xڅhٷ-ִ 7900FsUerdMfF$gV" 75Frm ^G{ўֻdM"qr>ӣB>h vaƌ0.L^{y' d]& [~M\>ی R!IB>1X(= X~N'! ip ˆ]X6],9C @"!|]Yd(F F du50],A9K:Tp[C CW9cWS  bhܳ nÉQo>~O^9ݟ|2Ю]xd2!gN@֐O&7.,9Lߜל~ |2!pw,dz VȾbzS1jhЭPśI\ǜ>yCBՅʯnz! Uo hܥO0Uz[O@_O/ ۃJم+ !L--8dz 誗" c設Euatr壽9 W!'sK'9 J_}@ί ]|L W:'[Hq%#d59 ʈuȱ.Y~HN59ѐOu.Б™ xu$ TEAsUefd5$L:ȺOJ>F1h(ݙ td9'8;ƬG~LV&˯-kШ!Յm&˯9@vR!B>I:զ.L_͜@V`LǢCqQUKOualI;CՅR |d+'ѫŔ!4Æ&wD4ɓM_󑭜@! 0b0d5/12| ]>G_3Tf.9V1 z? dDگc4W&˯ed$'VJ>F`vaZ@&HX8n;jg&˯%zi+|2]e<0Y~-GHOOe ,مk]2@ʽu$wC>a.r!AZtR dapn{{1Չ#eQҝRV1v;w J,FbkasdNR'{0A`:]}1ғHR'70A % $|5Qȇ t@r |B/c=B>'R]O@s/f+QH5'I,AdsS ATrS (hٷ7O~%t47( UQ^sH 7)jX \%AU@~A Z AaaH!  C@ ,̔>g~>]!A # Nݔ[nU_L! 0 $?mҙt2$a$I3gMTCQT(&^'M!  C@ , AX45!\G+&1 cCUouTU8A 88%ЬL@$J'clÉIv>cM(8tB{K z{D ۍ̚3s+*P68Μ AU5.I9G(\r7EHC Cz H${w'*w~AH( $lv]nx}>Os0e0.;6 c1쫬mś^jj5Ái(WO5gbʕ5w.lv;TEfMQ J68ypy(,*BYS^yaܹ((*nOI(WYoONcނ8m8 tr= 9p~YG4AG[+:Zx`vYN?l\aVͿg4CkssJ&"^/f͞%˖a9g$jI@0A@p(&45^ã>֬g~B9IcP[y?q:me uuh{8_ ,\=EA_Ozzx/O`Ny9[w6}|꩐$F @orH_=<~[ʯ3 26?W,p;}-9_'BUU4coWlqS  `Onٌ[o4s Ԗ͸wa/E1>./qgƛ^4B#v{7РYDQĎ#\BΩڹx>4Hto~v/"0C_ghmuuC[K 6l{GSV&u?+.8 'o*zUfd ̭ҙp]PthomEgG¡P; ,\&' c8y .+t  mmJV}6$m"{DaM=ab|q`9p:#y  5`vWU`V{~<އ~T,Xs/\[{ߞ+=.?g˅~;8n]Y@?45z^쫬DG[[B|%77O`HRDDlM83?%ӧcXiaLY:ڰXt)00A@hoNY9O!c(}ù看o܅yQH$ny]VAQ?B ;.F@3$G3:(ev;5VUU|{7 Z @C}u&Pd(O{|'vCL"+o6*N',[GxDZS4ӄ8/%8p8PT\3"c;ʹ-$6S66\_q -]݉!18ܵ7b|M [`HBp≚# 69sCd L+(pZejo6$h: 8,9G˅ݹЄ~-w49[[:XVy2TU%o)>iCٿ~,# 5mƝjc!//O~|u{{Mu㜣_~탁>ܽ;$9@k2*9  K47ğPtw: T>*j0s4z%I(Wir/~.472:b*4>R5B`pT#T1U`0bZh+aw8p8}V9ǂPPTi_7\z,wGk+Qsn,?mդpQTRo~NΚz)Ѐ'l,۴>ڏy97v۪*sd]A#ڵ ^] mmƇwPuuB.YO:iJ(X}ٸoݞpZn<v{Onقk%\zŕ|frI3_9¡P Ɔ 8WP&Yc EEslJx}^b_eec nN,^:(efi.Dsd]A)"2?9K*ԕp ݩ88wE_t3<>_ڎ1?\s ^{E=$*SU7%$:cZAq(='7UQP1ǟ5b2؏oKxtʐs9759\n7/IY[UUH?={_QJ>Sv~)Md>1X  39>wi*oނ?>w|7`ᢔ;nC}Kwh$2$d84 @q{Wᑿ>$-j;\(//8L{pE} E%D֫s(7,1\.C9 r>\qN]X3,0 W]{6\i8W_|/o݊}UEϐ+{ 7]œ`{vQMI; @H5 6v%1 ,'EK`z̑,UJUU@Uaw8p8S/ބ7^yv}Ğv/<O7M 0 ` uy#1Q`ِr"錗b,x;x waq16]s Vs~_wGLݡ¡-WU454hvhV ˗㓗"9|P\O W-5 =ƢxrfMWUp(ÑG"hvZa! 514 "B1eYPeNzEUz;,Z3&Լsz q. 1h>mL}r" z^ilԴtfz `ʕʍŢs"xҰ X|.Kz7M-´!"jjs[5m_T\%˖CH 쫬ľJ!85Z$['cF"Ch'yt_$ېQ#`?m[PMǓեAx'l14{_xc+b)Ue^|Aӧqg GVq]Ӵ2_yuǁ|&@ /KNC x0AWUu[oi̼G~+?UQDsc#{ 鿡j׮?y U!@`"{{?< 7migAp8j9ix0vp `ŪU%)-V` {p 㕐X mhk9ޞ9W_{=DIe9\C`B{{?[m/9ee8i ,?u%_fnhmŞv{O[qXzu&b(ܶ-m(+_%KO Qd uuh֧@(@_ƏeP1n7]!5$" +}͘5 H6.k֮ſnx}> Dˆub.;O|eF&c 7 7Ƙ^Mgo"nm(>:H w.OÁkxn]p{<`.֬]U>cNڦwH&n* p{eElv;z*N^q*nP_[]]ٿ-MME8vNEE[^%˗kIJ+Q2c$us;״27l68z+(@aq1K6 NsĵH?5HA$lUP՟\3 VE@wWӃ` X, Qa;V%(.iw!㋯x4Q o͇UՑ¦DL_oiغnN>4w2K3ܡ b<D , AX0$aa| $Iв)A:AM%;y>{7A;y{ A!  C@ , AX0 CIENDB`photoqt-2.5/img/filetypes/webm.ico000644 001750 001750 00000024351 14134304263 017623 0ustar00luspiluspi000000 000000  (PNG  IHDR\rf(IDATxyp}翯g3/ HxH"edG׻rىe;ʱW:-[QcmmYGq+Vd;h+ʇI>@$@8`o33=OXÞ7=~{ AuPQ;H! : cH! :F,;߹< ԺA 8v~y+(<0O}$0 ( ,sHL@C |i cH! : cH! : c Z` XT!$R׺,s$2 ɤIR(I-Qpp8DAPH@T` $h++kcX[KBd( ffcEx< z]pFB@T a H$dañTr1}sHG2@4G nB[>6 /$e˜_Z cvvH,g36B0FW^_0$e&0=R>oEX]Ӌn?v!(`0ED"ԅg0 I2Do  4DB\D"!rg#"@;B3T !LL,TF$19HBZD3Y c LL,B5 a:w\,`ttX122k[mHbSSK˦ "W$w`R0WAd">_{֭ fg-$gx i4ciuS4>%]̒`xx" @vZ[ =,X,wZ~KAnX^@sɰq477nMl{ QNDHtep3dJ%巜}Ô(<{͍vud.oJ(`˖< Z7ETrVo9$(p46:uk+m9غv5~:;<>JgΤ[nj"nTJ1r@@{U ۷wXfԿo@H{;vtzwf7vk_xoY{@QAs]ho@.%hCoo3vLHW-[gPNZ7Ƿo "W|f5u3WOƜ@oo%ZCP&'X{>`@pN-FsRѫ [~oO:YOpP6vua'`(vGvICمk,!=PACU&˯0JNPPJ>f@ 0Y~QrRV1 Յk;K_b@|̀d56F \њ]̙؅k|j-ޅm&˯9uNf`Ԑ> ߪZW,桖9C>|g`xxƓ|Ȳ[U T]уj؅kNcU T]њtua}d53 TU= 39jު&f zuamœ,& TEhiV-Zj"V]8XEZ~kX%5vɊ`d *!`d &FY _pdj]!˯FN@7rG3%O#'sGمoz|!mY~=X(/.M-.LF@E@!Iۅϝr@,u97Sȧ:§O_ 0HLb[Ǥs>ݎ(S=SA !-se |j 0[v9B>Q{ ,!cz% |8HRe917)CFb='PuYPȇ \Y =@!0&iCh9(!SnN|E AYV0226/NvAP׵)C&1kf7ܹ+ ꔪLq  : cH! :v$Dbѵ']< I4AQ{{ ̿]tС$߉ "E==*] 8eL=0 A@cH! : c*Z/wīRQKF_kYSQa-WK),z(J%wUbN$H&`EbM$5Ne p8ܝ>9ѵ(cE1u,l`LTtpΑH$7a$J򽤿1M$S`e7% l-)Mc|+g5EQO~ [nӅ$I2}9;v6ǎs?Zڝ1P(?/ՑǸI_MMhn [18;w(,t!|m\;OGR%y/q颎,+xGDsNoL#6 Sx_vᩧoש _/yzgB8Wpj:g?Dޑ,˸p2.\c@SS}7H&8v$.^Z{؇ss _xzzi>h52M3("zn#Ie~ EQʻDWW'2K-7b)wXi#@(ŋW/#G?IJxl+8_e,/gj o~@ x}Dq>$U49GggG ]ccH$~/^/ @ ΰ(8vd}3099+WPTS @[[ <-,,6Dn Ͽ__uxy{ ܹ[a*ߛw%]j0ưC8ͻ]GG;hA`hhh˕(ϋ틈D? \>kr3HO]4ӀF{{\ɹM0Z h~f1 áY9hltkvg3| >_T FGqKS9zu\:Çiz1q<C0Siyf49Հ+X[He wwwB*x>o5A];4ijjflSޜs/s|kӧȑC}4ǎB,n86cc70:z]4:@ʻM(F8)"J0vQ $l:P4x#aԆZ%Jkjjć>~\.|j_<խX,.W$IB2Q…˘Ƕm}1s˅D"aGӌ @4Tj"ȹDGG*}V.Ŧ_-%%G*=n"(6`˖d>==Kf;u_CCv~ܪzz:>ˮ &fgFYYY{Wv]hk#Нo.ݤFtVȩ++ہ9p,7&177g{ "9!=?9ӄgnv>'RO3,#`i)բfSO}|Ú8hoož}>x#vm<c8rDQ#  ΜH$ #E}Bcc)Z47F[[&'8FF+x}M/:Ӊ#GG?I?S~p ٞb1,-~\kcEYb8.]z6r@حƬXCݏYSxf='mVKҘ9Ru|)O&xKKAOD"Y F.\r{(OommNA`hkkv{x䑷AKK3E vځX,sLhnSpzڜsYSl= ]g$)ԾP +mУ(mػwWI;|.ܔ?v20?ԳP71=={;9u(MwwGFΜ 33sO?G}>8!X*k1B444dС 8Tܤ-{zz#ii##)(/htjL58qܗ}Ǐ2sd`mOc3V7-.Rwlq3Hs? CwwGM̅$ rr5dU?_ME@Q8vށ΢ڃy3 ^py,..!Ln1<U|p!"vдKԈ~ Rp$nݚ2{;ngoj6-v7{W~wF7kf R8::vs σ<8uni6g7ԈpwkVPZi5 O1׋Il۶=sگ[;1c sNxnعsnI5yˆD9-==]톢(u;7^E2)fqkVG >~mm ?{{ 5fA `ۄ朥c8W055P(3ijs}e۶mEwwgVQ\x}; @[[ n74(x~PpVĉӘ֊/Htww=yN:uLDo 0: ,..ڵ?}t: Z08=ҥa,..ttL@>2&۶g9\6;+ZcPxٯ L札q:uu&}ԑ|uNDQLjhh{ ܸq3o%T2MM܀ڃS{wM\Nxxo? Amoxj^O&E[^izL՟i1m1曋bjj&.v>8W{473Dx9l!61>7ٳdsv|&EF__oƶ,ѓŲO7:TB:QA䬃ٷ~gb3.@[j=; SICC7 >{ fB PSSc]YG+1p8[EmO m04p.qྒ4>"fpHhv6~tƴGWw׈Rn̓KU\j,MKKDvcxHOO!VV´ nte,P& mEWV\ 4"Z[Dx$ x,꽍nlOª3 y8::ڱcGIѡj@+ͦ8>lګZw;qHx<@` ]K/՜w׋]vE]ZbjP Оqtbhh~_B%/Ϛ'B6SS3翖ZUBH LM`ffd_ߏK/iL-+o]v۷+f}EP"`f2[[Enr´*ݝEknaǎJ9]Դc_L-x-[zݙ[( n݂^u@ tv@<x'i*arhkk[|׮Y7ŏݻw&47 H+sH T*^<O֢]qt A>~BZZ?~9۷.*bA@9nWJ/Bn60p^8+j@>~El;0>nʘZ/^@-{hEs`TXq=ZԺ nvC__/ȑCn,EvPY3sÇ?~ lϝ)cqαuk//`~~1>:B 6Mo'>B5105GCC|㘙 6 vσfZފd PXh“OfgQQ8zpTL۶+_<$u5_Aݜ?ӯLu'l)'n~8%1m^ ({T9W 5YS@` o~KjP-1mZm䜛☔g cH! : c N,1[Hu(ET-xe=zW56A* ѓ+$ºA1$QǐDC@u A1$QǐD IENDB`photoqt-2.5/img/filetypes/erf.ico000644 001750 001750 00000016203 14134304125 017437 0ustar00luspiluspi000000 000000  mPNG  IHDR\rf4IDATxyW}jW^VCl,pl !I $T #e ΄T 0 IĖd+C;tYٝ{~(5$(@Da(D 0Q1L+uKb`JQW/q%bωʤ*$d`a`yi.5c(D 0Q1@` cXR`bWBrIVrbBH)aJ ]ב: ÀylW"4h EQ)D3"BT&fS)e/OB@Q4 HMQ4bh(IفP#!\@bfii ))% ÀnHg2FHkD[K cPUA@bTI0LiO"I4>ر9]T$bX MF* @znC㘚aB}/B4MLNO#JᔶV\цYPD22soJ!FǐJgnJD#YPG/*13cՈ5F~ GXTz;l N fiO1ʔIxرHg2Bz. K0Jҙ9#svaT!fpf418: ~N"M`tb顐0JHL#1J-F'&y=jXB6| ds9Orl %LMN!$fSiN; iW뺎 ܍P4ҙ]Mb.sz(Q "N&a9a6ruP{10 ta4%4PU'9sgUә'f+cHdsY7N(!r9;=[l*Ww"+1tOM + yeR))%z30a>O'0N"M)=3c$~$gy* H Hӄ6}z 4Mt#_Ie2 ZBL$r_#, E+Z3{ aG 9]G> hEG,T_o#/P$FF9 >5 4O}TUj]׷ )%{N'P3ߨRJB4Muz(B`pt E81c6בD~ =G2ss8_=\+󩱐hzcmE5F}s!74dZfRh;0B`YSߪPhgf+Kɗ30XQF}O5Fmhp%Ds,H8P,{>{Tp2xO/\b Eh֖eV4m--cV|LLwhE=1|Y3 ܏OJf븒**XB8B{[I(nоՕcTj}cֲ -MP"rvRJ~+>1JPkV槀@Ks3Z%**(AF"XjBWI)6`TT*TO`p}` kWЉ'D!SW# b6RrJ~!DW-X !Mz!RJ4FpꩾTP[! P-ذv xM`ys36;M(O.G%%UO$@55aS:8Vc)%4USaݩFq ՔV7d'PJ 0֮֟ASc#%A (h] ué+ۡoNsR(Msz^(+`Y L$Ja&e}$;6ih5ͱFZ !A_. ,G(ďH|M)mhmYT&l Ts9SʓNd!TEihkDsc 0E,oP;֥qa;|ւ`Խ9Csc# ):r99]a/੩*B! !ME=5?%H񩩚J~uV@SVaXR@8B$^ۉAP.,g,|֙N ‹6+LՏ%b@q K~#~} 1vQK~+I r?y ]w9~d+K~,O`.pz(' dK~3:ф`@lQX^%* O@0MG2M]O@+;@o ~ UK`.fAO@rCo' ˸AO@pWoXᲒjO@5soo#h 0fn-J`PM %.- X} I7JO@UJo5'y>> 0*^+VT|oJ~+>U߄o 'y~`PEܶo=O@eKo5'B~\r##8م CLߡ1(J_3 "BTEl:Dfno\[ ? >[G!0H._۵RPJ~+>_@Pg_nx3ލE~ ]=/k7 :c`ddɩax=ޅIz"h%C/5~dцs,^;܉d9+^]!8r^=k!$#>#_;P\} \.]"Fw >}7uyOwxU8?#kvYL'ѲyO7 kJ)qQUBV "}:uW.|\o'(wƑXӦ*@*kU.̒F='0[G0>5e鷖S)fɯ5LDC}M>v$nc >^ x65wz]./cɯxOT^./gɯE'(c³>+fɯ='(jr|T.U~ } J|찰\pԮA^'Ǯq@˅Y[nLTc - >'jt0K~LO`Uh0K~KȸO`eBp Ò_gO`G!?4xOC) K~>]M>vs}0Wu\v7\-'Wv,u * qԯǎ'ItW0K~M} 0fW|1w }rQ\N4ءP.|,u'EMNbp>W@tCM>vՅk&וqOoCwu\s…A|@s}|h\-gʅY 8njr[8_.\% }k˅뷺0K~'0"G`ɧ˝M>v0L.,^jZ=ʅʯջO&;^D2CVY]N -c [F'Pz]\P5 z'PC VͰ깟@]/M>VBXR.U~^ N ˅әʅY?OXN>^DotU0K~}Lؼm&;{z+wYBќ}ߛ| tx% O'`ya2˅Y v XAlr%~>78 }}6 XAnZ\Wfo0u'`Y ˅, , &6ء, .;j|$oEYMJ#_foY'PS%lqL'LL7jǺaxɇH)x卷 %|:_* ֊h$RSpM36ԏpV Tlq" ,&"Y'Pqɇ8C l!rZ(+Cn'P2Cn C8&"WOd%(ڠϑ`[PR:J@~_{y]}hink㥏XGT+% 0Q1@` cX:h N*dJ0 mD"8iGbx(D 0Q1]1{/AXD6utp8 M[rrUQ@(4 AQ! f ;X?HPPȁ^ "xZB|ꓟ޹k UUӇ{EiChjjBKK ֬ZuiFlX+D, UU]G74MsiYPx<>%B,X W5;wڝ;az(Ru!ox+q;wq/0.BQ+eS))%$:Itx_഍q-7{c]M!rV %I)_*~xg?: *^~_= w*288{?9嗡xAX׿,x+.Zyr>y맀_RG.@"/&@8֭]l9Z"aj*!  cnnLxqݮk-Bhll1 @CC3 vnG? )Xֲ+/ סq'4Mr9OL'?_>벃`Kޱ V^eyu1jrJ\|?XiZV.P('5 @%ӼRÿ?ЀW^}Ļpe8Y[CvR"ފH$RֿDQq :i8szժdx#Dhk+t&C!D M^̝0G 9;DO9őES hzݝ=-^  w.>477w8s=1ThmmEǺضRt|6DQ>p)kU+/ ضu+0Mӓ'K^RWbԨѨ%Bî\f_ G{z/އw\qEYXi1 ^RWb趛wo?1 (@Ǻ޲ʫ=|gqF]vܽ*{K׼nQ{{;\Emv[Uu]G6-߿? zlR.ol$k.Pumcv'_?Jŗ^Oy񮮲㑟?n׿ݶ)sMayU !w]>|SO?S1$aWߨ><;_xW8y9{YoDK;`a`ƍg?S"L>k|pa˶ᮿ[E(={p֙g<637!8 4Mlڸv[Yg8 4ݻqڦ%+8 8N?mnٽ xGx-`ڵ%-&9 4@Ă'i83n,_xO{c%`^}~k+׿?%ƚaoy##K;~vBK2VzFߏqwt .{矏/ܷvۭ \]q pCp,`br<@'1 _~uex}A|ǨH${eٲ&8 e&m8y)<%Dc4w܁Xesc6#0hQibW`U:~xgX? E8yK;h 229š)"<Ͷ -ǐ^Ik)C<U!HJ geB1M9PTm$ @cHS}mg2D6mwSBP9ф.6DerH%RAPEVJˏB[+@ FX~=jzJZF1wl5$``Ȧcc޾0'3(P"29] eY NF,9< |l#_KOKkbz| s#sX F8ՈElU Ȭao! 4 c f 4 P0lAmY1;<)-geL6g (PcA"1|&qcCd14M6 @$K #avxR|9sY۵ 88,6K~S9o1&nj0ư4X(VR 9yC _]J8`Z`Ytsc6VEIe072Wqa~|pBW#6-aF]Qe;5na:*:5,fƹ5HӥjɋcX`al  #DwxaakNgup{oVd3gg.B@pw5=,J":;5jYgIC,fpw; @6W#k- ,j U7դNmbzΑN9e9 @n.=e/.c?0MC4m[/#m z}@m[L`R٨nkYkm  & FBmoͿ( Զ'4[s;'@9?@@4&Z~r! J-5r  FK,rMUߚ*$DShoKG9$DPo+hHQoiHQo0~$[O{WЀOՐo9'@@V,`֜ |HU``XXЌ̘  `][hwSf  Yo-'@@4-!sHЃV̔  F/z0KNY~k,9.fHУV̐  jFϖߚ8eܜ Q:փ1nN #X~k Uco=5'@@T,bԜ f`8o=9,ξpِaˆߚ)0pcSAG<'#[~k C0yT<ciFփ"''`x`!b$aB&NN@c(,b# -1i2l:t3gfLMco!'`hs2&^@|iC(y30V ZF*#tńZYO`I9C c ˘>3]ѴC&؉1=SʼnESY~A NcHƒ?9\6W,?c pc!1:_|y029J9fփs[[kɊ1y̍͵ ֎s3A6v*ԩ>00ƞF= es{etva6Nп[{e dZ[g61WN@|'Z :%/Y~UAo9} 0-=`&˯:-'[XiM3],꣗.1T2U4 Yī Wu.@ɘ|ulGMcFڅVsO@PMGmV'c&osCN@WPKȧ)_~؅\Ѝ|^>Ӭv̏I֠n`5䣅ULԵ],A9}@!ѹ],E9 j!&KՅb4д|^U!ӌ 륺0Y~ۃVЮ $aCp2_dmfY!3Q'o{bN@O3м],AK9 @B>hw&ˣ Whm?M @C>h2\uaj -')huȧ OҌ],C+9M @;B>̀19MT&˯6JN@OSڨ.L_@@+!Xd6Z ]4QvW&˯Y Dڳ:v>O`CtՅ 93 McN1;OӾdՅڙh^`hYuavZ/,㯌^h],]9 !H0bwVTf`XX ˯NiuN̏ϛlfuwal_v'2XB m&˯)ԗh~-|uMԳ 8䲹Z"F4E=0Y~C+s-|TG%0Y~GrMC|TF 0Y~GrMՐI|µ׸b? j'jO30Y~ L!'0ܼ@s@k; 0!4Ӽ՝|BvafTS|Tf.ry0Y~C3s C>jS0 ל4#'9 مk>PG(U&˯yYO@Ŝ@@!&0Y~͍ 4$ik‰HY~͌9 4cH%Rcs2)<kCVFiOrvQ3'PPȧ=0 ,ɇ J9;Pc?B>@Pgnx T' !Y35 T%TcQȇ 4H#9( NOן齟 4I9N%,!fQ#pܐRU0~rrN3c9;Džcy´~{p 4 A01$abHĐp8n'A5J\){LEG>=rr߇ *D >WD}}p?r9 $*W9dY0AXU}$C@& L A01 hvcau^EQ 2EY(`p9ի0VcJiE-AHcr9,/b cb|f;%l6tz:ep b붭p8` G7b:n2-c 6 d:.}uϨ,HeV$Xmֶ\7@P("g/%{9LMN!OT,c .9rߋnPW'Τ3翄 zpptttC{Vu7~ȯ!cY/|lpc7*+2s=M= dYoxz#s$Ic|t18]NصW^s%0[qI<\W X|u-"aUՊ-2l62 "1?;P(TX@. >x"R! =[s-j@A0:<~XUNj˯b(< LX_WO'cp˗NV/$If!(H8 T H=j  _tc- n&']]FM%B(l}w`;rfO:^8Պ#:;;kP vqݑ𖷿?xw/4uHZx%iūGooY/@:Fx9ܔNŐdJ\$ Xc T `c]^صvbo4.K9fC2W]3\qeEekTlX,D`$b>~txqn/"DQljF`_9D#Sr9}lUSLT\bw{U^v)z=.T^kڏ}O>$ Z\u*l`;6+jIgH$T11k P}}E !H1x,0rvP}}JlHׇucfH6 vۮx>J٧z7w;q"0"eso~ɏ~Ҹqns_.:tQ9G/Zҕp+)1,0;=[U3151 #߆l6htXDz`HbqÍ7cʚU1=9t?z!޳W}{PpbtxTsYֲu>_.@)H҈,G 4Bʅcq9uKv|~&FdZ@/mFeބQRcUz2 Nt_x?n-8Q$I]W4 Pd2jyV[psW_yuuRMro؇!Y(BCx :8\9@GG{K (rNz:?pnb2LǃNs8]N}\++}(>_*C˚]5j9t:3ÛaQc.WE4O J}]]resӁn ޷+ު=׾5|Oa|tp"`Z[ p㓛q8UX7+ lU@lvXw\( /r|hSCW  e!0X\Xtˋrn{VVVpSKH2'ycȲ.|}×o|UK>.8ߣc++,-y8tɡ^ymD;t=6$5P(?Џxx}z#?-)w\lYx5H6;VVOEy7`gϜ-pزu v܁WO篟zX]]em1B`[ @ݾn\wƙg_~8ɪj lsq͵`ƃl" 6XrX4D<\6ׇ3w'؋~>59ٹ I f8s2, <oϿ>9=5Cسo=oy8pjV23qzz 7$ cq$ɢ`݆]{va=Z}-/-cS6 t:P Y <^:|;nYFcX\XT}Z(A:n]]%ɤ3Cn_7 ,]f8ur\\.WSʐ)t2.q3;K>(^uݯpazҙxfjˡM?߲u ?EA/mEא''{}W 02N h-$-@s`>f\n F / /_dangN7whՊ-IW9"/ f#ZHZ"+KYZ\R}vCye3'f;vٵs޻mH'^o Tů}}xW$ )INO܎z;dEQGF ߳Y8G;vtv ( Tc{pÅ;/ġ7Cpt@$Ȳx, <8b|tsC)8W;Ρp:onX><n?W% m4H HK'p˧\.\uDIgj:f{vخjz $IP 7^t0$L$ [|+.rCݨs>\rb%G \~v{051UUzHAs~Vxƚ朣deߍ{u9?_IT:Y!(BzJ<^>?>KRC s^w^ewtbhPUl c >w~N!oBTu]%' }jq6AsEOaEK'ުV,V v-.}w~וehDQ,c.tz:ǍNO!ŵQH7Ї!/ߋ~=(?uefzK߀#5.oCjlZ/Ď;*UQl܂#7APpȐzp;\BOKN|g0x,t:]͊zp pC-aϾ=pw@Q;?E W\}E pmsp\Spv82Aq⓷%;W8 vFE (C{ۯ|;2 (KX_rhpT ,CHlt뇯׳oE$ّ?.]( :o~D BO=CJ "W߈N5T@ C t*6G[S?/~g dѣ$c4v.a4$:GG:-0_1)ah x mݽV@"@ 49Gȿb!Be$cLh r HL?11n" [C !w҉86בNA3HaH'co e C*Ex;YT!l Ap+w5ԛf#J$a;94EX d3)C꫗)9FX a U}ںH D¦٬Hs`!GI*¢1dYtWdHƢApE*F2B $tnZm*J-1[)ڡxH^ȤS9NKZ:1b})a($ͤ-5lJDnaws ~Z0@jj!,IX c #oo1XD H^G guȲT4 \_ u{Q2XHRKdi-vw r-8wlU-1`- 9=^KXU ¥L%m!\_D,u, ko"Zlc -D 1c vrC:㭲ĉ%TU]1t2Yы;9ԌLwQ嫳=5յE1dRI!KBs`WhEumrj  8mh?h,'$ @U5>s_}cv* mfYHut@p.uM^anwo{L1Q[4  53,@64ޜ˖_F9BS[)]v.&Vγy hgOIknEmC鮲Mՙ_z8f2αO9M(-s+ jQ+_f34A=py@]=.OCxa59~>'p@9U"sjL@xk|t/7M0Z~;Y_4Yw@Kt*\noyo@WgU-_c @#moMmN._c3:zQ]W;\_=M (A_}3:Pr)7u-!rq=7̳i:,z>#Jbr!ЅWzΌØ!SY!kjAv^9d!_0qH9'D^vr N= #B*O:qm5\Coe>'Pwb. kjA*G"zd,L*IB8w[Uz5SU{.?Z2_ t]Gj@HBpBM]j $ R6l&)$Ig9n/}: Ɠ,z ޅz 0ӓq mv/巜 XF߭q[K9a19GxO9  ʂR߲ro@@5U~  Qbr` ,z%%o?xdrX~rg%CO $[~HaD  Lj*g !,QU~ˁ@.'HCWO93ʍ!R9=H0Wٌ3s$Aܙ9fYN 霜 Q<&j?Ӝ99xjՁr$DQ  _8)'@@*_=8%'`_(+g_>;y?;H]b5pkoa}9X9%K@@h&gݴWrv9B#ymcHMs9 s$zlbՃAH]X~ .'8p-{v#!NaCn,vj圀l c@V_;[~5=r56 xsON&{5Ӏ-zSNC`3g58"{/U4 D\_CW W $!ܶ^o89;[ܱ0p꼢i1t*-zzNvC"zٌU~b'Ggkp/Xđ_X='`;f/>G"zapo[s ^B XsWV Lvq˰n`5v([rl#1w6X*%Y8G_}0l!1DXTl؇1dl?܏Y,d-'`_t߿0T"fȀe!bav3oƚ+ڕƊ X^!s|1=a~KWX-'`_O)1;k >ҒC_c~B>% /.n@䯝 vw,q~)E`iヲ Ȝ]8He!oi~@YE1 tv 3W-V XJ|Jy-BZs& XF|JՏ d-B/"0gN2pi !,o&oyM1cW‡fL)Ervg ̘8'`j`!fTȧ$],9R]|JMkم_X~[Ҫ1'`Z(Uȧ$X.׼+fO#!R`~0Y~@n?eL'e T&.L_s X6~r|JxĄՅk*r9)0|N)/&.L_a,cE?rvL`Jk.̒0Htȧ$ۅeYFp,f 9 YB>%80d3 ܘ!'PBN>V o^],9 @q;X8" "T8'P3ì!kd TD)AcLvaZJ/ ,vaZJ. L.QB0Y~YN Z>+yyG c\T!v \],,'P[Eg S³څ.Y~-͋@yRe|JمU~kyʙ(H,!cˠT>3'PWZ?c8U&˯(WNg-C>c]k-mr'% Ll)qDم_ V091vV ˯CN 9 C>%A]U/}v9'|Jz0Y~B)s #C>0Y~C)s C>F7\X],#X1.rNua8r9(K'`HOI`!_Kv쀪:9;C(Z(Sb,vsva:sE Yga t o^xxѣ0Y~9w1/> } ۅf1)%u0@C[;վEZ 8"Ga>LK!?泉B>a hOB>QI hD)6'zB> `!RDN@0A9[lSȇ Lɫ9mO ,|ļ h(:á-4n]J#AH2V( @`9lXg ;Kmh3 ZA8'C@  A8p0$`}5>a!AX $I$~=g~mZ *k) @gW7FƑոm5AvVn@$Q ,cLBH  A8p0$`jh)dT5id>R|SiB9t:ir'ɨ2P\nx_DsKiiUu5iw7_zޡ{J)I>bۛz,0>^t~ϗԧ?cRX|2PVW5MG_F2nBWeŶ 6?1x,9Ŷb2*rEu7pUf[zDVcDNCL$xXy!ݍkBo;74(_ T)̢l{)#Ţ㨩:*M-gUEaj'w>Yl"] d2LIچ?v{!<-]B ASsKA19b1թ!ggTsM܅-hBon.Qqz=mr"rI(5T [0pc铂zzP]Ssal6t,˸Ӄޫ}m iZHRkkk1<:5B2pe%H].LIǟ?`Sceyna[QǓ8>>eBGFۆX[U;C.+stv_Ƶ?a cGD GWe\1P6Vu<&*K%XQ9fmŶ7o~R$&jjj0<:V=yϤ, oQbnfZo1ŅyF'6x!pα bvyv]ݸwbȤӺ$2zŶˋ DNTnWUUctlBv8 [ N% BsKKSOӽ܂nmV>L$[;r$c;G!GUu5dYFw\V}^cwOcȅs>WW ;:ix[ c h'lz1<6~{@}Cn)x,JW[[M6̴*w]`c!@x`gleba+Wŷٔvct|B=D"׫oB\яήn./l;7;T*Up]VÉE`l\dY$qȒ~-<ٽz!^+C#oh@ k5&Yv 7o) v«v6Uejmmb70q~|'6`ff1yC,ڇ+^PpsqF?c@UWWctol&;:=,v:? ~?ɟŭmc8:<ij'ۍM2}B7 6Nc=zU1O`c,]\"1ݐ`c㯈a z6kX_]-خ7o1 0269ON2n T+=gccuapcwmqJ#l}Wz9bf|ei~jBSU$S*V:njn9bGyl#t ?Tl78t MMo !˸?K_'؄bd2AX,@e Bk[Bh o W_llKVH- 0D,+6DGW7psfc[_L飇_QBã_l8?x,ںWLK3f ߂\҃޾kt=cQ |& &M1 7X, IVa'C*5v\laowu_?,JU( M&N`>_*SAXZc89>ƓGwK*ģuS !؈[ʅBfK ,Ft XZrS#zx0@H~3T9ֶK4%1L=yjWR0@@+( 6#x\U TP N+6S]erB+ =<88-B8v%TaYO+I0y_d.\(4`~vu~qTPerαCm>\齪if1;=XrٓG8>:BSs晈oQv3Hӹ`X]H²' +<@9_">󟁔ULY|ςVyW3 |> ۬,/ ?Z$`[D"GMjjjUڊ;oGGx}\я;X\WL B  IJ,!E 0=e #w୪BnF8+9crHpF? @-c O>Tl؈1ݙE.:DYFrPA9c 2#pnʌs66T齊޾>W[x>f?PL@ XN8czpkxjyy@lmi/VUBJh2l,'LD:#2;008v7sPB51O~oSX2n"v){=A]?^|_?ή.w?F"p ܻι)ЫTU{lo+s`U,O`vn7Ϳ*QTG,,'h0wfU,@q! C@  A8ǀB*Aۭˡ8!]<Asb;E' A! C@  A8p0>U /vIENDB`photoqt-2.5/img/filetypes/fl32.ico000644 001750 001750 00000022210 14134304131 017421 0ustar00luspiluspi000000 000000  r$PNG  IHDR\rf$9IDATxyxՙSwٖmɖmmlb6Y!- .dH2%1 !L%MdIR޻jYzQuu-yU֩S K"dAd0$aaH!  C@Ɩ3aI$ h}Τ NǺ?,INA$hS(% L@F+g@ , AX0$aaH!  C@ ,LB+01EqT$jȐ(h,#lA!lD0<#A 4@-"K!A%pE7cGn WX {N^L H *AF쇯ߋPEylO,ABّWXJ" QH҆+2|D(WA0qme)_T*g& -":+rl/Q?W{bJ+ M!HPzNDآ <1Ȓv~TΚGn>H5!@ y׀`:h5 HntB ~cj;P`H&L @R0^mD ւH( j@H9rWn90$ P ]WSo tf' _>} Qt"_ )ƀ3Z#G#g@0! ^5|ݗZb!? ҇`d) _W^|EtGBߐB!vD#l0($ǀsEvWFT!փ(po WC_7@@0 E#i @80leC0  b,Y2H!-wCU!8R4b)"Kst5=n'w 88H¡Ȳ!,R1`?zܭ`LلD@%HùuFsr( pl8 i9 }-1 ml:x;\Y 5 YimoB"hn'R|WaDP jL`DTc@ o'vLc`; ua -V5@ xZC`msOKz`PH9DL6#6k1 1z1Pc:b* (#A`t6&b0]f 5c$@m/435f0[HC4l~+t& 81j;[Ph( [~\ ӍiDPKHc/*=:P0xhni@0͎ ]0 6,qo,ES3c C^, EH&<g E_+hHIsPZ9C.;@N*Dzs 񯞌QXV2eK+f 7PwJotj^&衜@J$@l(GQPR*0)'$ pbV D#]/D=?*?襜@R$ElrfͰE8 3Ǵl6kUR䜣Aeu @ Oôs!>pL|sbMȌ!@HQY%f̙G^fW~IfY"hM`j@"H U QT>-6ùp!l(13j"aM3:('0)$iy^3?faL,LPXZ QQU=5}ItaM&補'D9ZT^b"A%p$/:>VّWXJy0A U–8:`pfGqt# DC4,Kc BC^a aɋtWWy̑T "y YBF!KȲ?+ 8j[~S|A8HMHTW>PNK'*r! 2Lɀ7('0"- Y~SFC@d 7~QN`"cp,)C @@dxߞ4j?O !Ԩ>~$QW~,~aXԪU  T%ۖt 5?CЃ7U-7  TC/t */oʽ  TAot   N-ᜀ:9bV SB4r$Ĕ07U  (tJN\gД˯ ߝO̳"-X~U[o='`3Gd#Z~ShN!M@@LfHoUuL  R$nm2]qA_4'P+hM97Wd7コ~T<Әo t#'`Z A rp7"uf)`fo:)'`z`amG\k 놳$e*T0~>18E4sܐnꚣ_sֳ x;\1cJ`C M1D!m霚XF Nc I&d5AY*F NhΆ:})&@{Apn/j70pt47#- c ]#1E1]_  00hZ+hk<K @x9Sc ><հc(Z1ɜ*dOgyxY_C(C#ߨ1W0C>} u` /h9cQ!L(.cn':M3Y~h Vv川,*b!v,?f'Ȧ -dU0Ȓ j2 cv ZFo.s Y~3Q0t:piXŘP?ZA4U~9C @*!|~.va9:-ZW 9^ #|2ՏN؅ st4 gN00.L_mt0 5pD,tϾZ!L+fc80Y~5F9] c ~B>dz R1䓙n.|kBFE9 @B> v᱖_Ӭq?} |2duНh@#ZtZ], ڨt%Z|2 WWrN]'+ jG:.L_ݡ`$EMԁ]8>+!˯KN@#-!9ڛoVV=.z dAf.L_}@֯tw1qpKd? dY`LPd5Y dk'3U{0Y~C6sY|2.L_㑭`O&P4 ׈d+'*2qpkd5.#9vVrmG cnk1TG? \],f$'M389`)&Ե s.9mRC>M:]GT ǫvhDdI!T]-s@ ^C>RuarZLQ5#_oAEF,'0@! c,42 xN cWC> ]"J+AN C`OFH.j7LX],#hR=CpEFEC>`.tTrr>xZ:#B>1NgFمk= Ru?) |2 hk<],F`$SH n߃|^ZsHg3H.ܼ30&@$[  WN#7JV)Z hc:}Њs9F.|cM R(C:@@0Sȇ 9`$CuHzB>. `ah 91|BHBb N .H\BsB>cR$tz;QvBlG &e(.͑g$ KQ:C1tFAq)ZI؞!Vk  BaaH!  C@ ,LB@^~>rsse!A B!I%+}ٕv%"{ sx򱭓K(U3gaRܶ a޻KԀs,S c,h , AX0$aaHLio@=ZKIz+ mLp( AFr`V߇16_G 7^V EhTS(D(_z\ua Vp8~twuw{;<74H$ 9l6;QV^0YQPTSf"!&<,#6\Vt݅!pvrfͮyQ;o>ϨBnne ) ݿoYw^R^H${>0>) ݎQg7Cktwu dp䠼 xR) A| rb=ⳏq`_-z{ ycƌ*,=q֬?g*k1fj!0CxןIMc=w%nĬݟ}_lסh$Eax:tv']+' u8h:܀];`@Nӱ |-Gc+`!.t3+0&#=` Ɲg'̓ǎ:467^:~?+Jy|}}T x޻'c # flAކ{u;RLEx?|nx I6! F4ųOg).c׋{ /34 57'^ ~>ě;㲫6EDRp888An7u4+*P;,],CQ5pBE(`0ۍ>^eӤߣ{GaaQZ*Λ3>]e+NŒg]s  x7! % YE.E~~o /T7v̭g \Q fΚWN>5sjQT\ lx?;f00vN?s52<նG~rcC=mm8%I x۰x2 Hsb9kp5PZV6O,p8FËM7}}h<\eWAK (%9)UQ+V62u)ݎ+o:v1ih4^o-qaqoǼ P^^ EIl|Uxs$4DeUEUXu r :SOCiidY Le,^sk%վ7{z8 fNRmvGUыs"̜5;! 4!}%v;+*GA~Kk / q(+)-Cu(JA$|+*5LdB׈?'fNVcG{+a[ݎ9s&\4$DF`fĖ{ٚ YyԡLض-<B,?u @ ℿ!$GO?>ۇ /oDW &~ l ̙ko)jF QOEQkhsk9DCkK3Ecáue[1sVuV<(>;^KVFPh+8j888~O7`ÅMq!$$Ix?a[orҲrz=Xw׳2c¯{]] /^)="Ol&S Jߎ~ax_xo$QZLE\v59{) PSnc7͗fnmֲ(/@RO:w-.-B#JqWk^U#l "ފNOGӦ 7z# 4! !@LfTeҮ pu{HfxN;c?@@hD(u8/dى|UxӷPRZL@z{ol*\k,8A$Ew-7E[Ė I͆ 7G݁B ~`JpS^ɲ7wl ]?OUT`! чouRsֹkq}bYԬ 9#YE/&/Y%#P8@\V4753c۳r{Y~+&1HRzQGނH$+O%.Zlk)> 'rjV`3L{Oc EEXzr,9q96\J/b%5 <9^|ynіDq/[UgZn$Fp̭d$WDQݟ֛o /Xt<غ D;; IRQQn8_-\-[3ϲH FI 6bU`A| ӏ?n" S칢"!Hctu6]圣KQRRzAۃ/>N:y9X1vJJJͅwĎsGQx̓ޖT/X9&\H>}ل,~>HQQt֮Olo;$:՗_«/1f9kףwSoO*Uj,̭9sk1Ӧyyy |p۱on|8x8YÚut Aɮ'(7^ o*lwf M`11 n^8vJ&r{,fW'lc7X 6݀->!;2F75hYg婧{GiTcAcH1p7_>EⵚѠ51 VkҍU3񝫮wP9m:9) icl sᾇv]a_xnBAU>[Ḙ _Ǧo_eW L c9f+9oVeqaٱp4 c\PT\2`EXxCo?#M`pPHdBQm6梸fUcɲ881fD Juq]]YY4䊂%˖b#kןfql6.tsV/ ͆9sQ3w֮߀h4 ߇>z{@? !E`p eDQQ1DmBsܼ<\kkI L!F;Fo v16VL(0O$f]@hC| ^!  C@ , AXoAPuf 2fKc‘G''6AAG$lukNah , AX0$aaH!  ?G8l[IENDB`photoqt-2.5/img/filetypes/mat.ico000644 001750 001750 00000017545 14134304156 017462 0ustar00luspiluspi000000 000000  OPNG  IHDR\rfIDATxkh]~u/[u$-_ef{eL`&$,.&$ S` I&a Kv$_BL`3 LȄy3%"zm˒uWwum~(KVWWuUu]?SUO:a| 1, cZ ~b ? ]aI7o0Ui o㧿Pd0LHup_E@e0j1, cXǰ0a`0>a| 1V`N Pŗde ټ?ׅ,P.Q.!dȲ|͖ MHĂ Y Y(/3T!EET1 rI!;i3y(eDtۄ2䒌Bn (Z;ZmNBXB0p]yI_徿-8>@f/f\tX[x#P^BL5> F0v_jG)tX B![P'?@D27=ЍPsE1l`km rQįDf/r+=-clV ;2$nӰWխF|?XN+0lA\H R*Lhlol;K!{ X4H螺8?^r 0Pr#WE*KK8o{`8һirG^eT sK2;iG?s2vGٰT?;ك,JR¸ !9ȸbAr|&oJ,PdE=|?ꫢ q,B {Pr$\z6 B5e<|ќ̻w(yLX*P.]5eYX"@b9Rw h,BDA,8rI|uAQ(K@&Mnݰ0Nc{c$W|[[8H(X>p|7dY\>O`! jBԅE<a/q#:O @@@]]C?266( !xap( BKi7I+G9ĻnqۉBMh 7 Gî,M(拈/5g rFlN#GH +I"DcQϜBr%A '5| o7\t, "jRʼnK#v;MzFGxB r!p4![ P>oVdo7.X!@#@0֎VGVNY~u^ɉ靴@b̹\hȅ3_9T! ݑ.;'M/,F>)9e9 Z[wmiGW,z9 lsNVX4:;:diCFY~ d@h!TM@7M v A@gZ_DOc{}G5P#--n7@h=Wz3Z,FB`cas5֮V\A)h (pKzy_WGsNfXtيK.!l yjZ٪k9' Z[w]ĕ'`}E~_,_9Z`0KW/ ̩'$I]F?:/wz.o;Fp-B=b146p4<YN5 (Z;[E GUm*hlE0ćzۺC!W@.C0b,C(耈 $GˆƢƢEB$Imﱓʯ .Ɠ9HM Yщ,dVXFT,U) ! D))(':AJD8He5&.^6ݿF`0I`(X5{t=Ork 6z78 !Ĺ^⟇ٖ_ T-FXU_xZ,sa`,j˯pN,eb5/ X]_pNkK8'3G'U~m``LǬ*vXSiHpOnXSqW/~ 0˯``a_iN1!t~ 0usdM.%ݕo9nk5r,L]8`` _)'-_#%'m_=%'m_x='_!'͖_*ּ``r˯ws,.`ս 05˯``jK_x5'; ˭Յk3 8ZC>s&| [ 18u= ɐOƹՔdq(rB>@ Ϩ己81'L8c 18)'8+cE"Ms]-i 8JX~qՅ,U^{0[~SrF|wDua:!XpFua:'.N a 8!'ppTd]]-8'ߘ3 y|,$Յr 4L6l[WSVf˯{hdN!`J>n`[uaFeVq ؅J]|S70\Iץ؝WH$XNല7lf2hz ɐB䨺vav'`=c>/gf˯w(ʶl/|,A1.̖_`gNJtL {ؕT<13lv,K|,dua}l.v'`|Յar tVf˯!a]NtpJ>nf0[~}9S!9 OW ?X0O|1#Syva+r C>VP.̖_aUN%T.̖_r9C>AuaK8c'™ ;l3fTȇH "3y,XA.,>('ӆP4TU|(cWNq.f |Ib0/'[<ø r+00c=!q\_Nf8Z'+?8zs 8#\uaќ@MPʗ4!q 4@Q^S?}?89M'6z $?cǢ( 67! tː2Wa@Dx,,i{Ʒؿ<80a| 1, cXhQD"Fay䲹m4k5|OPˍaj$_i}Po_/FGP.0[~v;BȲ1`qDT}'ǰ0a`0>a|L]kz=唌I[SѬB,^#m%\4,'((5C5W|惐$B$B վ|;p@b jjt7 {wş?(?E4<&OOOP*i/ @n|} Pc?I gGj(Wr]Nߛ"&"+2~_~k`x!~\{VWo|7o߬!~}m>}|w _B XljK›L>kq(xz[ۘ}1 I؍d3YL=f s3sH&ۦp!Vx uP.1hB&- {ek$IVr /_~:|ׂ8,u|9$IR}#7X_]|.'SO2N.»CKY1xDSO ٬1P'{{xΛ\'"3[EDNX`0,&0h\$IX^Z}""lmkßP8sii4f Bo{f"iڧyyrҗdֆήNjB ..Լ,ˈ /`kkx /C'b&lȲG"MAm|Rlkoӽ B|7Oۈ??߿l5zqM@'`Ё$ID#f0d _Ng>+ #lO=mvqs Uԍ]}okomGGnݹ_B 8 pE)2SW:I[.iՉS$,[Bv##mvwvNrj!(j=Al4#_ͽO9̜iukm4/^f##8 -UM<@_` EA |4pdDx 4x}MH=|L&S0"QBM&O3΅@'Pϼv4cNDHx:Y92> @.ӌA@$(o{^|Fo<:@gW' U||ߞy]$?BgUutϏkUߌcnvpޯl`,Sg^qwGZr?wHl&:x}M1-Zpo^%L=D "3v㣧9BܹwmU[,m`0ݝ}v׿73'"x_W2VH"ybN (G2P;;y6 K$;ߌW =K%0|;.ʵ+nAhkoÝwWQ\CYscD#5+9̢TRZ}k.v\<#BMMM?=/.xE>vKwwv Ͷ_7zIVޭ`a~E(n]{?`IsB`fv?N^ߐ:F8^SXkL=,?|Aj.\yboEQ݅\VXv\=)>OMޣRg-\gŰ _<S(yDL&Ӑbo^k޾{Űԉ,o )~I-yk7d 33c< h$!EsssſZJnپͲ,cѤ 2`GJVQ.1xZeitٰ"޾?Vn茳_ΥH%[xװ>W bORZdžӭv$ B&˿˖8d ZZc~z~Dd"W0zH%S[1c8B!OaŬfہ+u0QwwGj gFg$̿f{#~]}V/PӟP>@s&K)+?GSO(gsKsMeo^,/`eio\Z.B$,/-ca~Am~ %"Յ!ͶGey.X\a4vw4޹{]]uBBuՠ"&XN5YfvW>zE<ѓ1pܴ:c4 HRuj\~ EQ_~6I1$IKxV+ N˲?;wT+I3_4QF0}xGhݡ !~^ZujA&?&~_RʠH'YWI8hM HWXyTF\'Y^Ds}"X! ǟTo: !}ϲEt&Da3~#10a`0>a| 1f=Yg=_`øIGO4i:.<0>a| 1, cXǰ01& IENDB`photoqt-2.5/img/filetypes/icns.ico000644 001750 001750 00000024611 14134304140 017616 0ustar00luspiluspi000000 000000  s)PNG  IHDR\rf):IDATxwxչ3]IfɒlYƅjq 08B!{I!Ʌ\J$n !&B%66 %KVU^fcrA~?r9s}pnA 2`H"!  2`,6pN=x,ױcbVld!ۑ,[vT H -A ׉Yh'9$)I #hB#yE%q䃉" *$)e >;{ey3=mHnx{W’rd;ӽ!H PЇVxz]K͌2<.n% 4$)s!/:@?H=-(?V{H%!@{xH_:khDf@nWZ Ešu~cl>ϭo !=nkJ_mD\P J@P gkp(Ma0 ,Gjou0fH_wG[Ba8G?|ݵ0$# HH68 ׅk^Q ॷD  Ե_DtFBߐ c [w# ݇p(`8 Rp8ףH0p{XNE9 H[ɸpFÚ&EG#)̱_.E9_]$Aޘ[qDUaE)c?o|> $ @lXs5r P6Dy0ÝHr H"O: ycF*ł UN$`M7('0"$)aetdVNqSd(98 ǠP\>a kIt`M&衜'D9ю79yD,E9ජ% َ| Ǒ&gʯ2+*%oqt h% ťpAӏ׃pIF11+ V[6yv#˖}ι:?p\_ \GM>I!P !"vKHpR$IKw KV,YVe9;>QY~S㐝G"p$J3pq1Ajf6Əެhj)ќ 5tLKM ˄NCioҿ/p6RN8HMWW6PN H_mA9! T&jmW 8BUb_JC9! TiaM]P 7ih=AHUUNʯ&*D_H D_{vâT_-2u=BQmM| Z3D =X~HN+F$b pfHЗ7   AoT 2''@@Z~ߍ@cHѣWo dZNzC  F,ɒI9"ebML 2h50(Hc, .7̞0#Tňd98dHsS"I6 M I֚x4ڰcDh8p'swt=YƪtX>2.Kw1ZNg˘gk#ҽC_e0zB>*MmZ~[ F lGC>!C>j .֐W!sXO E"h:9<}.M:d.GÁxe!˯:e=C @Gc-mMNV1&E=B0]ep_-0BNPLGߏم?7]s K9@*!a0Y~sj FC>B>dՆhNO9Q!=:.c8 ˯00ݮ'TGvE{ g&˯8'k`TG.Lל~X.C>4Xv#_4*z V AZ~NٳTdjtНhQݡ`:.L_} xPt%Z|hϭdќ@.Е |  Ww%'+ }/Qp-:t`J/EOKwG8GKm²,,zD9 ^B>*"څoHUJ>F fO],'94 V1 p.L_@ڮ |Wd5 EQiѪ],#]9 !55 ׈+'*01pvaG;+=1t5*!` W&˯ h8zL|gbvڅ9G'Y~ ͑6RM!IGa±*]d5e(T]-s@Gc-(BՅk> z20J؅-:^HhN_j`ڐ 0&J.|FXTbQov# qTfT|T!I_:fD휀WM&| q0Y~35s @F|&d ('+Qgd89Z3$ %4ghG µCT*G4'A{!EPRGchEQv耪fLlkRt=Q |Ts4Gog.LF`0SPj WO,9hx0~م>Hm 䗔jUxTB>wSǫZ1h}N K!@Cr9& P(' |!tDN i s?AѐO|BG0EN !`C!-dC#|BH\\䳟B>cu:;ZPAӽA  I:j_TՖg$4U S0r p`O@衞 2`H"!  2`sr`e!A }7+7t V%"}<#nWǍ3Irj ҇bMooeHD1`0VI@`H"!  2`F6HGB0 .,ːey`goRXbvG:_ѯV28|qp.1~n~sP(+E T)" Fc}jk؀ 0l6|<&NSO„QPPAe!: ZIW"16%:C[K3B]m-Zrv#@%X,YŘ O&|!Z,aF -1 4\7O$\ SD=.v~6nX]xhLżq1cl8V4gߍ8whq+pOBر |sҲrC(-+OP_-7`ӆ^tww!xfCaa*'3fbE89YL520@8;>@j{ԓk#*tAw_֯]_xwD H;H.g7\n^Ә;!uxa/^<oۊW߱X,Kqٿ}R.P(_1q&юW^zYVIxO>a,]v,`xr̚33ϚzxY~*\yJ٪;chkkCqu{%-C$Vp`K0o"\77 z4])&偒e%zaʲ%chǚL4<8.X~)c#|OQ1ʦ}Uk2ȘVsd鲤M;cg?4 `݅Ov~yoBNNΨ/6ιb墢1/SѮluH4B'YsaYstC8i2/>{ς ֭Y5P@]l6{Bw];?BksS zV0?NhsϿZӼ!0^jA|>QeSE;@׬F8JzT$ 6K[_ <7wN(S=.'~OP_w"`=0#;''g{Yߟ'fŗ zf4j:>Kf͞}/ {Y\yJK|^3( BÑ51w٭[PȒS47aiܾ OԄ@8Eyojl4DBcB>lx-ի' R$"|w[߾#aߡq u@#6&O=1m;p搡#'ǁW\1l2Vʼn9 ]pvwz``SNP}3p.cښCر=vYQ\\V^H~\mYMy&LN; mupP1.p~kbs3f&t"\M[:$!2N4S| ||V&ʹQˇ}{N4+?jX~}=[,~zo~@ 7Y1iaBJ!0s}~ˍ7oĦw$]7&77^Ko&LDQC 1*O c >^8ʲ,pMB߻u;y=#eg̜%-Ke]r_Ώ7l܀s-2vYюOwĚUox4:_jVMr>o'mވ9+g/Ańh%ƀub16`ڷ'3fFAN|^x7R;׽ ZwњxI\soކ ?H$m7b{[1nxL4cKKa юzt'pȲNݟh^[7l 1sf͙SNq' ??V 1AN|6} 6oMwsp,:s7&@ڜeZdYcx[)AsS#Ӳω9GR\M ,hnl@sc֮~6 \?sStr?yJbD%;;y/r%+CEe) POɲf㱧wQիtyeY X:L@($I3<^:Ҳr|λǞĤ)SML(9% cp]K/ǫ}_Ɣ'++ SV\^?Q{,e.'-|(K//>7rjŒaQS]-7`wp9>7 bĉ8Xy8c欨D0ގ.M|஭КԵ?٘>c&nmp{ر=|x }XWLgsÜy P>~<cqMcK 0q]9WLfK4ٸw8G~A! $IE N;}:M?_ݟb炙PuZ׋EvWQSMǼ0wBT0 e`a;JGt-y;hZ~AzފV8ׇ`0Z[Zq+PZ^X rDl9rYdS*H^Ng7:Չ^ PeE#E(.ҲrKV,oXsۥJ`wdcQZV6ތA%2`dW wE?Lusyl©;b fh?14 2`H"!  2obe0K;w|?=2" "v vqA  2`H"!  2`d2IENDB`photoqt-2.5/img/filetypes/pwm.ico000644 001750 001750 00000023312 14134304234 017466 0ustar00luspiluspi000000 000000  &PNG  IHDR\rf&{IDATxydU{FFdFFBUVdm ZJۍmL(#jt ǡ8v=.ӊreDqP*XlҀUTgFFƞw珨Hs=^D9?|w{e80%B@D  C@& L A01$abJ\tEu.p^ˏ\]8_Cv' D+@NA@5v C@& L A01$abHĐ! C@&h0?Th+$jss#!Aʐey՛-DQd ZDAHC Pddhx tr.9_߳cy!D688XּpR4 䬌x8X(T"%1Vcs9rVFz%r E@gw'|th"$x8e)p\/_h 229š)"<Ͷ -ǐ^Ik)C<U!HJ geB1M9PTm$ @cHS}mg2D6mwSBP9ф.6DerH%RAPEVJˏB[+@ FX~=jzJZF1wl5$``Ȧcc޾0'3(P"29] eY NF,9< |l#_KOKkbz| s#sX F8ՈElU Ȭao! 4 c f 4 P0lAmY1;<)-geL6g (PcA"1|&qcCd14M6 @$K #avxR|9sY۵ 88,6K~S9o1&nj0ư4X(VR 9yC _]J8`Z`Ytsc6VEIe072Wqa~|pBW#6-aF]Qe;5na:*:5,fƹ5HӥjɋcX`al  #DwxaakNgup{oVd3gg.B@pw5=,J":;5jYgIC,fpw; @6W#k- ,j U7դNmbzΑN9e9 @n.=e/.c?0MC4m[/#m z}@m[L`R٨nkYkm  & FBmoͿ( Զ'4[s;'@9?@@4&Z~r! J-5r  FK,rMUߚ*$DShoKG9$DPo+hHQoiHQo0~$[O{WЀOՐo9'@@V,`֜ |HU``XXЌ̘  `][hwSf  Yo-'@@4-!sHЃV̔  F/z0KNY~k,9.fHУV̐  jFϖߚ8eܜ Q:փ1nN #X~k Uco=5'@@T,bԜ f`8o=9,ξpِaˆߚ)0pcSAG<'#[~k C0yT<ciFփ"''`x`!b$aB&NN@c(,b# -1i2l:t3gfLMco!'`hs2&^@|iC(y30V ZF*#tńZYO`I9C c ˘>3]ѴC&؉1=SʼnESY~A NcHƒ?9\6W,?c pc!1:_|y029J9fփs[[kɊ1y̍͵ ֎s3A6v*ԩ>00ƞF= es{etva6Nп[{e dZ[g61WN@|'Z :%/Y~UAo9} 0-=`&˯:-'[XiM3],꣗.1T2U4 Yī Wu.@ɘ|ulGMcFڅVsO@PMGmV'c&osCN@WPKȧ)_~؅\Ѝ|^>Ӭv̏I֠n`5䣅ULԵ],A9}@!ѹ],E9 j!&KՅb4д|^U!ӌ 륺0Y~ۃVЮ $aCp2_dmfY!3Q'o{bN@O3м],AK9 @B>hw&ˣ Whm?M @C>h2\uaj -')huȧ OҌ],C+9M @;B>̀19MT&˯6JN@OSڨ.L_@@+!Xd6Z ]4QvW&˯Y Dڳ:v>O`CtՅ 93 McN1;OӾdՅڙh^`hYuavZ/,㯌^h],]9 !H0bwVTf`XX ˯NiuN̏ϛlfuwal_v'2XB m&˯)ԗh~-|uMԳ 8䲹Z"F4E=0Y~C+s-|TG%0Y~GrMC|TF 0Y~GrMՐI|µ׸b? j'jO30Y~ L!'0ܼ@s@k; 0!4Ӽ՝|BvafTS|Tf.ry0Y~C3s C>jS0 ל4#'9 مk>PG(U&˯yYO@Ŝ@@!&0Y~͍ 4$ik‰HY~͌9 4cH%Rcs2)<kCVFiOrvQ3'PPȧ=0 ,ɇ J9;Pc?B>@Pgnx T' !Y35 T%TcQȇ 4H#9( NOן齟 4I9N%,!fQ#pܐRU0~rrN3c9;Džcy´~{p 4 A01$abHĐp8n'A5J\){LEG>=rr߇ *D >WD}}p?r9 $*W9dY0AXU}$C@& L A01 hvcau^EQ 2EY(`p9ի0VcJiE-AHcr9,/b cb|f;%l6tz:ep b붭p8` G7b:n2-c 6 d:.}uϨ,HeV$Xmֶ\7@P("g/%{9LMN!OT,c .9rߋnPW'Τ3翄 zpptttC{Vu7~ȯ!cY/|lpc7*+2s=M= dYoxz#s$Ic|t18]NصW^s%0[qI<\W X|u-"aUՊ-2l62 "1?;P(TX@. >x"R! =[s-j@A0:<~XUNj˯b(< LX_WO'cp˗NV/$If!(H8 T H=j  _tc- n&']]FM%B(l}w`;rfO:^8Պ#:;;kP vqݑ𖷿?xw/4uHZx%iūGooY/@:Fx9ܔNŐdJ\$ Xc T `c]^صvbo4.K9fC2W]3\qeEekTlX,D`$b>~txqn/"DQljF`_9D#Sr9}lUSLT\bw{U^v)z=.T^kڏ}O>$ Z\u*l`;6+jIgH$T11k P}}E !H1x,0rvP}}JlHׇucfH6 vۮx>J٧z7w;q"0"eso~ɏ~Ҹqns_.:tQ9G/Zҕp+)1,0;=[U3151 #߆l6htXDz`HbqÍ7cʚU1=9t?z!޳W}{PpbtxTsYֲu>_.@)H҈,G 4Bʅcq9uKv|~&FdZ@/mFeބQRcUz2 Nt_x?n-8Q$I]W4 Pd2jyV[psW_yuuRMro؇!Y(BCx :8\9@GG{K (rNz:?pnb2LǃNs8]N}\++}(>_*C˚]5j9t:3ÛaQc.WE4O J}]]resӁn ޷+ު=׾5|Oa|tp"`Z[ p㓛q8UX7+ lU@lvXw\( /r|hSCW  e!0X\Xtˋrn{VVVpSKH2'ycȲ.|}×o|UK>.8ߣc++,-y8tɡ^ymD;t=6$5P(?Џxx}z#?-)w\lYx5H6;VVOEy7`gϜ-pزu v܁WO篟zX]]em1B`[ @ݾn\wƙg_~8ɪj lsq͵`ƃl" 6XrX4D<\6ׇ3w'؋~>59ٹ I f8s2, <oϿ>9=5Cسo=oy8pjV23qzz 7$ cq$ɢ`݆]{va=Z}-/-cS6 t:P Y <^:|;nYFcX\XT}Z(A:n]]%ɤ3Cn_7 ,]f8ur\\.WSʐ)t2.q3;K>(^uݯpazҙxfjˡM?߲u ?EA/mEא''{}W 02N h-$-@s`>f\n F / /_dangN7whՊ-IW9"/ f#ZHZ"+KYZ\R}vCye3'f;vٵs޻mH'^o Tů}}xW$ )INO܎z;dEQGF ߳Y8G;vtv ( Tc{pÅ;/ġ7Cpt@$Ȳx, <8b|tsC)8W;Ρp:onX><n?W% m4H HK'p˧\.\uDIgj:f{vخjz $IP 7^t0$L$ [|+.rCݨs>\rb%G \~v{051UUzHAs~Vxƚ朣deߍ{u9?_IT:Y!(BzJ<^>?>KRC s^w^ewtbhPUl c >w~N!oBTu]%' }jq6AsEOaEK'ުV,V v-.}w~וehDQ,c.tz:ǍNO!ŵQH7Ї!/ߋ~=(?uefzK߀#5.oCjlZ/Ď;*UQl܂#7APpȐzp;\BOKN|g0x,t:]͊zp pC-aϾ=pw@Q;?E W\}E pmsp\Spv82Aq⓷%;W8 vFE (C{ۯ|;2 (KX_rhpT ,CHlt뇯׳oE$ّ?.]( :oxD@#HPm2mSTUŹqi!L9 5*h\1LF"Y..0)L.,,@H , h6(836r_Jqzt FἻRGm51McE` sY@+I$AaUScmpqflvmCp5#AɔI^Ћp8SF36+ጻFc$A@cåI- @<™QǾ<02{Y|T|UUr.c xEgf0:74k&9G ڏ.@cvK48oU#HR]!X(9 Gd6ՖRT$K(UkjPmYP_]혭r-va  TIօB2$a]]%V*-eF9 X)DCuFuPfheoelN L9!($؈EVWgvS4a-o9(p^/:5n}>t45cWR[*( gE:u ^/Xf6R)X~!.VZjklL1X~K>RN BP"-ڊjGjhksLP巼SNHʠ]֡%.s(bcCႣ7X~K@1Ay|[k+-MTs14ks:ljlt\ֿ\o\ ,`$`W827XK0@3"D̞\9c"j4!'1DeY~!EK^n+R!O~[m-jjK&1##N#(P9_1;Ȗ"^/B~?j~^ι:?d\Wo29(.MNbW{#RZBœ!!)YFji!uvTw#IJ<8y"104S<8΍c}}=j~^r И%0$JV߰#gw-k5Rsc8IހhPg#z/g 1ih-1ORNjHCH2hh- X ;zY~Kr+! tEOo9~WB@ΖқC B@rE9 $ne- \ЅJ Iת+p~$,W5[9HѪʯ1pW'@@hٖrHMTܼ V[s$&X[*n `1o91'@@TU-|H29 H N&'@@T87amo)'@@Ͳwzv ᖜ Q6-MH<  ŽRqCN(;[~K%thN( [~!8М Qs$D8[N E9X~Kũ9 EⅮr N02;?Qءʯ81'P8ǩa LMὁGإʯ\ 9q0a\CD s܂^ثʯdr# 8^c,0T !YA2 wX~K#8"'h`!L⽁ө+Xc蟞B(- ,ℜ@V?8h4􎎢jDpTpԚ7*8>0yh-''H`atnGG NcS8o霦[vOq|| -E K&cH=w7[~K9G Cf %A02;P\>uR_#sNQ8=:j OwsZ_#sN1]>;6Vэqrx#ί'V5LN l;#1h-0iYƱ~1+r_J&']N$R)@,Ԥ22v],aǜ@'G10%0B.}uJʰ[N uiFQ?dg[1v V.|x2 MZg$˯%'`K2"+ッw],c-PGkcR8:Џ TG_KNpdGd&˯!'`+ȮTPDG0 0Y~9@&/)W;O.L_cb B.|Jlo&˯1ds,Tњ+ѨD k$˯!X9'`y*G"c1ejd-V^rV XZ!5]x>Յkszl||nՅkrB>z`d5LN j%4_G2vaV&˯U XNC>Cú|hw<>V&˯%X [#'`)Xk'; 0 X.L_k!0Ik,%F| S]xRvaZ,%f|@],*9K!=NY.*΍׊Xa?|@6.l]1p$Z+'`TX ,U4fLLg2!=C8Cڅc#˯1;'`d\iS8;6jr 5K2ΐ0E.|-3AՅk? .YKC>zjvar 9N #5؅kc *v heՅkor0jfdB>Lȇ{aJœs\ ˯֗0*'`,|m뚜.d "!}C>z5.L_`dNpJGk.\]8[whƹ*aTN@WpbGkVڅKsgChQ9!=.\sY~K&'0kN@pzGr¥@_ u "V.d i&˯;'\Xk'.C sdu+)Eۜ@Epy' I#څgc1LE#*nE뜀T;a'; w cH+ օBxY+P82"O0-se |A`Ė]Nd`a~B>a&ZJ |l.% |Zdr#elB>a,|(Cܜ@A``H!RIN\AXlNTHA'4A , C̹1'Y' Ҋ9~0;:j/|<@ ܊aHŐ! C@. \LA@`5+(xȴ4AQ//okWPڰo$aIBo< (P4CNd(-! C@. \ At*Z=^IKmM_uZPTX Vc @Ex<x$ L9ϼZfVUds0௪*Ɠɒ^^HSm^q=$I$ 102TbDA@ >/`c$ >` uuގmھ:;QKA00<Ǟ~9GxtQ0c 3xgqi`PS?9|[ 8sWFK $> B!bܼ֯Gsc#|>߲AH&qiLNOk~MpCkEMuuѣ-==+w'?=]]; 8{"^G4+1H$ヒH4jkm. 7c(uv#IH .c!>>2nf|GpCXzD(cJl[==x @{3MbH\6S8~^D~-DQ}>?!^.r L<"ěG}iʂs /z{9,xM _: Hr k> p'>KR1##x_ױP⺃ iY?㹗^h;1cY }94!N"N$`%$"J8 RxUrE"4Rh_Nk;vL$QDMuuޯ@UUUEBepd/Ǻ`xv1 Hlq`- (zƆvtcxp}c'N`xlG3BW8;\6bdtJ;lAC}?s ths=}ݖ4Y(PT][WUϏ8Wu s4:>Uiߴavt;q]\Dža_w%t`[g'/D2$ː$Xn]QVjA\gϊWUo S!H/[бq#:6ntC :vd|ҟhHd)%X Ձ@ESUIq݁yGO, J᭞ݍP+*sokCSccQϓ@` komhs}h[K8{bfcOMSys^5#XSSd nٳs۶~ؼal޼{h.~A@^q\w,KXH1JH B$}厷7bwWWE& A"G`=6_-7[~LHaq0rY*I%,{r +Q(8ۋg L<'o5I8?q4a }hޟ߻k- f1SUM `WVeL053y>pd5E 7o3+ܳwAXЊ226gς*N9z{1]@Ks3DALH͞g>wtCeDQcqqsjkUTUEǦMشi$S)s$'&VlMuu׈V"`z׮x(sF@P& Njv6|'q]wi✣>ݻqĉ?ӃɼgC{;uvZv0;~۷n#ѐL}([oVx$ ߏ9vzWI޹M *(}V窊x2Kx?^|ql߲[6m$hok.p/7܀PEdݨ 07?",D"y >8~hijZUUā18:Sgཥ`O)zͨ#ȁ`82Ϯ(! +J!/ot%sflްaF5{RB+<5?|N_ UpwT*H FQ c`xDǃދ# K,ֆ[@ fsi?ݵ z!j2h>|kB]۷1S~C?~vfe"IUU~?Z) (^0o={48{6\?_U;}֯?$erA<& 8G:|$;yoby}<3x{Æv[;:iUM?Y|>ݷʿo~8@Hʤ7^=OޕSK/~Âo~}9|4y{w*(m--ڶֻnް{:rM": с/?$Z׾V^yn\w&7uय़t㺶mC[kkEۣA}(;p-;@׶m:H BUU~믯yx8:ٻW\g~_1f-쪚 @Ex=TUUm--ىvaعurUU'$9Gy'~ Ɵ?(jb֭?ᱱQ7hj\ cT$"XSjkjAI R/ ᪊hjhx802>Z( -MM?b|^t6oxq֒~!!%V`TXchd{v*avP+h?$&z L2;h<%7ց&QL#T@"DȎ7a]H FLLNU^M& 0p@Ejkn2`H $;WZݠRro} y睢Ѐ $n vիtNUU!2 ML#G}ۻw: @P&N=x•tX Icrzdcz@ @ __}Uwmߎ߹6BD$|I% ! s ݡG !"!SO Eܴ }a{gwP[6oƾn:xAks3c%uBE; Z?)A @*hmj3O]];vvUUQD?>mT~Gddw)kc]k+G ^lE c lo+ct9miF Ap1$bHŐ! S5(`D F0IXE{z W%AŐ! C@. \ Ap1!V;̶2uIENDB`photoqt-2.5/img/filetypes/im32.ico000644 001750 001750 00000022707 14134304244 017445 0ustar00luspiluspi000000 000000  %PNG  IHDR\rf%xIDATxwxչ3EUo.L30&:ƦPB HK p !!pC H!$W lcS;ջեU[i̜zeKHݙ)yw4{vw̼w l>HƐ! C@6 l AG ._v1]r6AD`َ 9v1K/|$7(I $a&%! C@6 l A1$acHƐ!  L$cl9D YCKae N. . NALHTB1H}Cb$@XCQO lDA'Ã\orrqgB"%$ c p=>tuchxaY&C%0#DnVJ򋑗 QI]!HYߋ6 #S|~?mCRn ҢIO%, @00hhAw_/dE |rOoƠ( z0Y4.q"4 z}kmįc aIBSG p2x3$I C !$1t.r9$f(:zP{A)uPR~7amHT;C}[#rL>-#èi?06փ  C?[ :cBCkr8݇$1 M-ތ1 =M!, 00tz3k42\sA0p=mꫧ`86laH&cL?>;ЇA? `BR]}݆MFؐL@iaG5~Bz)H$ p샬nʔ0p!BE d Cn*En c pP ?[ZZ{H&  E+,-1 v܍`(X  RK$Y95-unE]kifff`’d* 7͌%^~lFD@#Hù!S6kZEAeS5F#!T4TC0,1t2Z6]Է5f@0F;Y`0_ 6V#$H a"b^NTW&08DkUwcmn*0m=hlo6y2"$rMձN0уX!l9*i0+$r9LP[Q\k76F`rcy3<1*c>$ 8D=Yn*A@7:u M1Gpl}+Lc yrnlKG-͵F4w¡6` !9=fz}9s#+n&?#:+@ܐLDq^*NQ-c,qƚ׃C 8`88 0,s|x پx9 @LAӍE3 sܘY4ݐm,rcޣ#()0Uvftd{ ׮DCIrC s+9GanfMKwS4!jmnd6C9 GVsgtuiۉ,̝1NљC Q˯QI#9@nsg):"sx3=?x2 !0A!p`δYX8{>IwPN 6$ q{`<,=98Z P9A@Q^!+;egpXʏ-B9ؘ#n@8"yٹ׍H^6rpGX.Y(/B^V.DQU? c  +Q_ ӕo8H$2Uwbz4?G P1Qr:q{ܬxܙm?VD(0]}ݨ;Ԁkc $9(EnV.dYFX %(@D8..8EGd0Ȍ1Τ,RTҒX& D; ppgR%TRFsXz)q =ԙT~vaL4A@}+C@- A rGA@N۬7^"9  +G,5塜XH}wsor! t#߄F9Ð*oPN$.$S7PNqHwkE_켞 9ZTMG*Rt7ZUMv^Oќ0"L,b F&B(lub4o=  `D   ƨD~oM IcTo"-'@@$-;H07^  ,D* -0k5"Z~%sX~!A³"!T5'#t%jMd9k$ ̖x9,g[~!5s$D|X/  Tco"X5'@@Jx-HTa5oB\N6C 2'0UX/cryik *ZJʖx tY#'`CmK=[ "n [쁎^Xќ0ۉ5PHW ubW>%)M44vC4'`,}Fccg^cN47@}Eih`M+,-$aO~t@$q om4I ;Y~e4'`,}V+4iedYƮ谨;QhAPf,)1jCy1`;ƀд'RslhM,'1 `W^+0vV9\Ζx1{NRyhj/:! {k!s{?7̜((@KgkBkQd+Y~g4'le1ƶfT4V% W-] 71f,!1bw~HIrg!$QӝdX~f]Og9rYCݳF.,* 7̸ )G{ofQp>Ӿ≇Pw]@Rќ$g萏 ,R@}eWFsfXO0QG)o<7 M76WC̒0i,mQo^a3'`J$ {'%W]xĚvaY0T4U)&wЇ,d&˯!'`*'pBvarDB>z va|d՝ќ1$1!|!=؅?6]XQTWw0 5U.Nڅoj1z?Z|hב溊F,dMF Z ^TS嗮)è9=B>z G aɱW"oʉ'Pi +"c!]` 46Vz݆ZO )y{H.L_` U!=md5cs߆#!=) hzW],HN JFC>GX>مk<0(|L:0Pe0c A  1Ң!+WŠ,F9 QB>zP8V0Y~M$'З֜@Z{E2+#v]i.,0*ɮc"vՅSgZ~khҝH[0jGTHY,!9C>z ԧ0Y~Gr)f A* ל+'r0UGcRR],C t-;Ouaќ@SH5.],' DƮ Œ1R_Kʜ@J@$ڏN'BŠZTR"Mhh7GkՅ?J.L_둪Ŋ!{M؅CY>tuhp$ǣ!בhu?Yik9E$8Q[A!-eՇ )@B#7)OJ@S@4EN D!H?Z1!?|"hKƄ|辟 N4'zGV! $*J>a& Cf @LP)C&ќ@L'`cG3fNC)zBFeT4V$.*HLUa)H1lDAN>>:; HْA 'C@6 l A1$acb<232@60#.;q 7A[ x_?5vvT:cNZ|2xV>Áҷg.(Lkp0ʾO Ɛ! C@6 lLRk10A]WQȲ EQ Em8c%O~VߡLU2'!DA@XفjTTD8Y1v#/7JJP6{ŧ攡L/"5阒$!<D wFB5#=&PR8 552EQ.8΄U!Q?ЏmoǚkhlnP̿e`Zq .X3N[s-NBQaA"˪3_|e:?X܃JE<쟞,˸+pߘ g~W׭uCVWE/7 [oM}<-GA$Y›o oyۖpQG]C=6:^/-8\x1X O8 n;chmoލmNN@D|؈sc,*V1Ҍmor.ڏ@?~El|sS܃2~?vم J<TuRAeG,z\JıgEwޏŽ 8H@wv ]> ` ?;aP `cCRYEzRfq6kh!@Gx8xŗ_JwSlGEU% HSoO(ؽw~o!+8Մan FFFCo&@$z ۱qKC0Ahji}_߾(/uPE Q\TO\՟Z㥿mC `'vz~m#N3q(w:l%AAImљ@t?tnfKxgn{]; CGv`u u1s\aɉ{*I՟e{llSaYaznt p1Fsۂ|,Z\I|FgE=^z ׿Bcs#14CC$UX}].\.aD|ٜ2Joo7yu`s(*մc p80tքRQ5  8DQTwNws-(˛v|#:ˍ|U>`˶ENI +2N=T ? ! QpΑeoljw߉^3~8D A"p\\I7&ttvq8DN9ykjkp׽_ }O$9pcά~~ }{Bˆɡ^:X o}O稨,p8hVEQ0o18Ly(šuk51$e] ;? {pƊX; ::!HĪիBFEL7յ :;n2 GSK3^xϸ+}@(@ 'C쌳p'LVl; h5{zbrf`0{G*tǭX5t?;Q\TUt#Iw5}4s7vnVu38ԙ1/] ?߽w>ڵjI?|Igxdkֿ7_9kx $Uc:NÈmq9]jȜ$ ͨ BG-H'IMvs#.NmND<4̱0$)Be\|ErAǫ#JBO9IVWt朣.< چu @#?/U b2!  B*~Uzfa%MZe]ع{`AХ3 ‚uO1Gfffݴw?> 71%$Beq8g ?B0I;oC>\բ#Θt9GqQ TT/nmkLByfdfT<^uq)(H9{\淡(&OcAUuss&MqΑ3fH W`@,1olBSsSmrP:c&onEQpsp]n1EeV|GDeu%cI (>ܳKg͚t9ŢTukMсg9V2Mo4qE=v`nRz W=8*_/":/~;pєp8pi~<݇I;c )Zr|QQU귝x rsR2WXܜ\ݿ.q }x7FC! DA- ~xmZU7}tx S^E-iUu~ع> pݯ/;@˃A}c~_ b驧%`1QR\Y184u3lX:siKQ6,̛;\vtv<,攡 Ccs⺒/gqVʖ#''Wom~i @صw7v <dee!,KD_?`\vݸ?Efff̺wVcq-ۃޞgW]y5sԘ*t $WPCeu%jj ϻ\pA( . -b, KFQ\\ R (YrTMoos&t:_ ,Lˊ!F(bjH>O˽e^n1}qe,[Pėn7]wceEYKT$&`P\j(Y~Sܰ2q| >uk([wכ6VL~g6`(/9raŗg/~LHQ9½_O8auz4|G="Mf.xEJo}ҙ_|6 [oE]}=3N_W_/]WCE|s/>{%5XO._v,=5b5(A3`ܵ{EuM5;;088@00En,Lñ SN9˖ODvvha->yxᶛnŖm[WZ[144`01Nx<^L+)pβqܱv!rBk3B"Gq Kۍ8o#qβiyhidb| |,NavY  =h@Oo@e8Nd3|L/bv TP(_hkoCwo!pfzӦc(*(^@ x$&.jEmp3|;L]j>ȕEő>c"<2Se& (*,BIq N>i$Pj(Psv AFJG{iE]b< l A1$acH| p0rq1@ (ta]A1$acHƐ! C@6:AҭIENDB`photoqt-2.5/img/filetypes/mdc.ico000644 001750 001750 00000022210 14134304157 017426 0ustar00luspiluspi000000 000000  r$PNG  IHDR\rf$9IDATxy}￷}ӌ֑4iAf 668qIyGlq3 ci 2]3ӳ]UӣgUS[n}paKR7 A@6 l A1$acH8mplf ,Û'NÇ.\i3nՐDJΑ\(dDdMsacHƐ! C@6 l A1$acHdrNYB3.s,#!IHH$E(`A` QKEs"A@`$EA8L4hdIY98?k3 \˅J^/|.AX=ADhD@aH 'B! OO#A>gOzۤ,clv~B[C%, @0D s,{WoƠp`(*+TU(h ;>p" $Y$B8wH]!,zǑtLLHH664! t@EXQ;?aq 0 kC3N"2AB H}ؿT[BDdAROL殛 OO) X`<d8lοi>eIgfЖ$ OOmy X`"B87] $Ke~瞔e!c X s:A,,uSB9#&xO&S:AIQT'J9fQ@ 90d3 f -Q?$s%$$-|{zNf_OTX  $$TCjIQ,Mp5zhCGHeyȊb9 00wl4J"$(&/lUE$p|x:Apt_11/.0q(@H2 :- h6AeFB>{/!K8:4dba&_SM5H1 c?Ff?1A2dž o6:$9؏,uKt:4ƛ%EAiĩ.fH%//7 SQg6\˯0 r!X ~8j2K-څ)'e8h\UT)q;h2d۴r;0  2pu wmLM!:p򛟵7jH Kss5~?J]X YB'TCrm9ruupZY~B9mX**0nB8˅ o.sF]Hh>nlZ2Z,=袜@VH4PQM+V_Ļpߏ͍4Y~s=@5~?ZP^tJ9555EBWorj ȁxˊh3@,c-/Ö&\?W˯VhR7p.rT| 1 "`,$KQ󡾼U^/M8&C, .]Bg$O8RƊ ԕ!c&E0E4DRpht.Ex].Tzzs 8wLB =6VDjROHt#UE yn}$!1Ґ2W_;t8r8ϣaatv[~sVUWI_Zcp;8K/ر.oKr巘0ƅ,0;zn\aaXG˯V;F9s! BBpLGoNm"HS(˯V(' ِ_͡B@bX~smRX_PN $DAȧo1y(ukk y=Bw򫍅9Hѫoq^OЕR[~si  t_y=B7bH]0W+v `0o.1'@@Q-r$D @69"/n|<ɤmr$D^(c[~b 3߉Iӽˆ]r$DΜJn%'@@,a fj9B3fj%hNЄ-%hNІ,ZrNPU,`՜ 9,bՊUsIQ,,ioߋg;V FX2wOuԤe U~ ss9=q볔T-grӖ~l! @(NF! :zz,7S(Ur-0  a48HZd(W(aF*'DNC8ǁ>DXcGM .,b@eD(t w|Ba'˯VA8ׇ hՊ004=Cc&5pNWlh'`9`a&>$%I,0gr׋sW+f XJRV1hBJU~sѡ!ʭFN8jU~s.\Ã8=ebb aj `a2>J~1 @Rt|9S,ZI ^X"}}tXX.ܛ ۣ37?̘0ȜAfgtk at6m~H:%o~-'`jM=:J}'!I8N߼1[Np&3-c)pϸ9#Y~,9S !dO8ߏd3L)B>zC4@G_/&PuG`)ޤ 巰!'`*HT"S0d!0Y~ rT')Sv .L 0 i.L t4'` 77gمC!Ӊ@Oߢ`䜀@O!׋H˜ûH[~<9e%0C>typy 4 Ѱ0)SV],#2TNPO!0KuaTN d!+\ȧƭ.L_ 0̇| )D:z Z],`>'0b`|̀"a3],B` c J)“ x%'`((Eȧ ט%'`(uȧpG `V'FkD@ |@:.\0c &kD@I |]$*/2S_CS@I 9mO!hpkfa,9 @ʕ6#%$ k J( 2Sc9tE.L_Q@ mI5zȧȊ.\@0Y~IrEs4GGob&˯)~N`Ɛޜ _],fzMR!`*=1UœstԤK+'P2Ssr2.$$ G(̇| [uaZb"V YՅ LZPe7(X17* Y*:Q@!Bp]XsY~K*'(hN `O!XhY~K*',hN `|BpJ0Y~Os V1 Y>2'C>mћ]x_OYBk MYGov%d# &28lӐO!HUl&˯Xs=]wȧd.L_~S4cN o >S8p]XQ׮$d}sy |zS$ݑtg]x*x( kW 8V1i=CRIlmL:'TY ˕U8|GUPEϜ@N@! 0FbK/'YcPȇ J^9M0駐A39&ATNt9NQȇ Czr8ל*`\ȧB>a@r dX2I!0(  ID:'&TU $aHRdN nAȲ?gH28d!C0j~tf~MvaHƐ! C@6 lLVwa"h,H4vY/_!K4A<$.llĎ6($a+_=vY@QpYSr Oz l$ A1$acHƐkm@+av5F.5siw)!Unnf[QȲf (B@tY H I≄.EA,W}a2x(2gAә4 :7PIwh,@]==8ݍA##)I5XԄؼq#֭^ʊaF9.A0(x㏫^eܱ}7|^o LEс{7*LUsC.V\蝮(x#zt:PY^:^׬k r: p}Mk8xDcw8– pG?k 緵:Ov`FF{N[Ңo%/zccxcϞr ֭E;wK/9|@:(¿>~8ե%I8? R}رu+9,@97/{a1H߯i0K3H`dt#xg^?ŶVk1Y+GAǡC{rzO.bFp $I;eL084+uUŰA|ofUF$L?o't$|Q'dscvHdrzRffgnj޼gc<{ %MK wAׇݥn.g{A#l ЁG`t|C`bjmL~ge_??Լ/6g}}~Z\};ۼ uup: ;0C~4%@y$֬\ l"}JDkmi\N'\&p7iG(VD2O/kWjMx楗4Cq5`uSnw걋1sȊ`;;?_|Á@ιY Ѐ z<3lDxW_~Y$}۽h__ᆳrI1=;CϽjkN< [oԖh,<$fC!c}Vp`> p.qɮ]oC?ye$ɂcBsp:h߶ Q\ٻGg= c]]X}}m-667ݜs$% sJ<}ィR9 Eko7`noy.qʲ .ڹ?_jkj$okCEy>|P]Y;ut`jz:c 8Ӄ'Twƍ 7&t8Lm f\N'v~?pӳ=c8ىE`ۖ-̨+ wŻvھ*A Ç19=j~h^ @lkC߿Ovw{pwC"AeT߀9U^j:dQO׋B:Q8ǦfEMLMaߡCl0ֆ2CjoGyYY(8յc H'NRkV¶VC Wb[kkٻIIB wu-\johgR9׬zU/tbazvê҂zzuWHrvcW{{>IF[ksTWVbecFFǗ| `alb33yFU$ G.ؾ qvtdmX4g M+V~jffeRG!k U M7bU;d8~[[Mm0Hjf# !r ,Ԕ*KDcCC6 uuغeKpEîv8Ə` UFѬ`PըrB  @x 2|*+cVS\܌8$i9 52RsNPIC# ;vNh^4tEOdEY~xϹꔡ(5HZQ8ǖUϔ[Q]UeYγA0+RA#`E}=۴Iwvp8eujrD @x^\K廊 @Ȳ><ӟ.A6?c cebͪUp9K~9G]u5jjT*uu!·ܨzAz2S[e(˙O۲~!9***vjU;ݍ#C Y޽HHynd`ͪ~8@ǡC .tC`l iÆAAsUbIW_ELe~,A;|x옪mقYN}VP7qQ]r lj%  xy KZE5kS3c쌷X  ew2.f:ÁTkJu~g˗^y.@xG+   :c w;/~KջKuKwq/kUm poQU c ɓ~)[3=,|v`m(tx|~Q^}ϼTn^G( ^~CUq>c8~E|'K@fHl.|!"EA"  V]k iv7>9vrA` $!w`ك_|Rg3$6`lbOn[؈?E߯}nE-[_{A>h,_Wx7&] u55p8E"A &T$&n76\t9/-0~Ko&Iԧ$ ÁO/~1(}]XfM֐|m?T<-β,];A}mm϶#---7vp:E 4$12~L $M+Ví7ߌ--- 7}᳟E]u5~8rԇm+H(҂k>qpضe GAp+ĆfcgպZ̮hskYlwӬ9uLǃ2GֆvD[k+jkzmWJF`cs3wǿo.J2;o箿}92$s(%a6]:0ghΌ^w9*Q[SQEζ6^[e~?*+*PSU:VW|hRNDQ\/'O{'0  H,:f(-~;oGMUռ{8,S}ク_*!_Y IXT9Ei_LK'H`rj #015PDbSMUVcec#mw8?#߮ 5J( &}~hZ 鎝ARԐsN@acHƐ! C@6&[Qz]@&9<"Y{+0({n Hu91$acHƐ! C@6 l[ڣeCIENDB`photoqt-2.5/img/filetypes/im8.ico000644 001750 001750 00000022707 14134304244 017370 0ustar00luspiluspi000000 000000  %PNG  IHDR\rf%xIDATxwxչ3EUo.L30&:ƦPB HK p !!pC H!$W lcS;ջեU[i̜zeKHݙ)yw4{vw̼w l>HƐ! C@6 l AG ._v1]r6AD`َ 9v1K/|$7(I $a&%! C@6 l A1$acHƐ!  L$cl9D YCKae N. . NALHTB1H}Cb$@XCQO lDA'Ã\orrqgB"%$ c p=>tuchxaY&C%0#DnVJ򋑗 QI]!HYߋ6 #S|~?mCRn ҢIO%, @00hhAw_/dE |rOoƠ( z0Y4.q"4 z}kmįc aIBSG p2x3$I C !$1t.r9$f(:zP{A)uPR~7amHT;C}[#rL>-#èi?06փ  C?[ :cBCkr8݇$1 M-ތ1 =M!, 00tz3k42\sA0p=mꫧ`86laH&cL?>;ЇA? `BR]}݆MFؐL@iaG5~Bz)H$ p샬nʔ0p!BE d Cn*En c pP ?[ZZ{H&  E+,-1 v܍`(X  RK$Y95-unE]kifff`’d* 7͌%^~lFD@#Hù!S6kZEAeS5F#!T4TC0,1t2Z6]Է5f@0F;Y`0_ 6V#$H a"b^NTW&08DkUwcmn*0m=hlo6y2"$rMձN0уX!l9*i0+$r9LP[Q\k76F`rcy3<1*c>$ 8D=Yn*A@7:u M1Gpl}+Lc yrnlKG-͵F4w¡6` !9=fz}9s#+n&?#:+@ܐLDq^*NQ-c,qƚ׃C 8`88 0,s|x پx9 @LAӍE3 sܘY4ݐm,rcޣ#()0Uvftd{ ׮DCIrC s+9GanfMKwS4!jmnd6C9 GVsgtuiۉ,̝1NљC Q˯QI#9@nsg):"sx3=?x2 !0A!p`δYX8{>IwPN 6$ q{`<,=98Z P9A@Q^!+;egpXʏ-B9ؘ#n@8"yٹ׍H^6rpGX.Y(/B^V.DQU? c  +Q_ ӕo8H$2Uwbz4?G P1Qr:q{ܬxܙm?VD(0]}ݨ;Ԁkc $9(EnV.dYFX %(@D8..8EGd0Ȍ1Τ,RTҒX& D; ppgR%TRFsXz)q =ԙT~vaL4A@}+C@- A rGA@N۬7^"9  +G,5塜XH}wsor! t#߄F9Ð*oPN$.$S7PNqHwkE_켞 9ZTMG*Rt7ZUMv^Oќ0"L,b F&B(lub4o=  `D   ƨD~oM IcTo"-'@@$-;H07^  ,D* -0k5"Z~%sX~!A³"!T5'#t%jMd9k$ ̖x9,g[~!5s$D|X/  Tco"X5'@@Jx-HTa5oB\N6C 2'0UX/cryik *ZJʖx tY#'`CmK=[ "n [쁎^Xќ0ۉ5PHW ubW>%)M44vC4'`,}Fccg^cN47@}Eih`M+,-$aO~t@$q om4I ;Y~e4'`,}V+4iedYƮ谨;QhAPf,)1jCy1`;ƀд'RslhM,'1 `W^+0vV9\Ζx1{NRyhj/:! {k!s{?7̜((@KgkBkQd+Y~g4'le1ƶfT4V% W-] 71f,!1bw~HIrg!$QӝdX~f]Og9rYCݳF.,* 7̸ )G{ofQp>Ӿ≇Pw]@Rќ$g萏 ,R@}eWFsfXO0QG)o<7 M76WC̒0i,mQo^a3'`J$ {'%W]xĚvaY0T4U)&wЇ,d&˯!'`*'pBvarDB>z va|d՝ќ1$1!|!=؅?6]XQTWw0 5U.Nڅoj1z?Z|hב溊F,dMF Z ^TS嗮)è9=B>z G aɱW"oʉ'Pi +"c!]` 46Vz݆ZO )y{H.L_` U!=md5cs߆#!=) hzW],HN JFC>GX>مk<0(|L:0Pe0c A  1Ң!+WŠ,F9 QB>zP8V0Y~M$'З֜@Z{E2+#v]i.,0*ɮc"vՅSgZ~khҝH[0jGTHY,!9C>z ԧ0Y~Gr)f A* ל+'r0UGcRR],C t-;Ouaќ@SH5.],' DƮ Œ1R_Kʜ@J@$ڏN'BŠZTR"Mhh7GkՅ?J.L_둪Ŋ!{M؅CY>tuhp$ǣ!בhu?Yik9E$8Q[A!-eՇ )@B#7)OJ@S@4EN D!H?Z1!?|"hKƄ|辟 N4'zGV! $*J>a& Cf @LP)C&ќ@L'`cG3fNC)zBFeT4V$.*HLUa)H1lDAN>>:; HْA 'C@6 l A1$acb<232@60#.;q 7A[ x_?5vvT:cNZ|2xV>Áҷg.(Lkp0ʾO Ɛ! C@6 lLRk10A]WQȲ EQ Em8c%O~VߡLU2'!DA@XفjTTD8Y1v#/7JJP6{ŧ攡L/"5阒$!<D wFB5#=&PR8 552EQ.8΄U!Q?ЏmoǚkhlnP̿e`Zq .X3N[s-NBQaA"˪3_|e:?X܃JE<쟞,˸+pߘ g~W׭uCVWE/7 [oM}<-GA$Y›o oyۖpQG]C=6:^/-8\x1X O8 n;chmoލmNN@D|؈sc,*V1Ҍmor.ڏ@?~El|sS܃2~?vم J<TuRAeG,z\JıgEwޏŽ 8H@wv ]> ` ?;aP `cCRYEzRfq6kh!@Gx8xŗ_JwSlGEU% HSoO(ؽw~o!+8Մan FFFCo&@$z ۱qKC0Ahji}_߾(/uPE Q\TO\՟Z㥿mC `'vz~m#N3q(w:l%AAImљ@t?tnfKxgn{]; CGv`u u1s\aɉ{*I՟e{llSaYaznt p1Fsۂ|,Z\I|FgE=^z ׿Bcs#14CC$UX}].\.aD|ٜ2Joo7yu`s(*մc p80tքRQ5  8DQTwNws-(˛v|#:ˍ|U>`˶ENI +2N=T ? ! QpΑeoljw߉^3~8D A"p\\I7&ttvq8DN9ykjkp׽_ }O$9pcά~~ }{Bˆɡ^:X o}O稨,p8hVEQ0o18Ly(šuk51$e] ;? {pƊX; ::!HĪիBFEL7յ :;n2 GSK3^xϸ+}@(@ 'C쌳p'LVl; h5{zbrf`0{G*tǭX5t?;Q\TUt#Iw5}4s7vnVu38ԙ1/] ?߽w>ڵjI?|Igxdkֿ7_9kx $Uc:NÈmq9]jȜ$ ͨ BG-H'IMvs#.NmND<4̱0$)Be\|ErAǫ#JBO9IVWt朣.< چu @#?/U b2!  B*~Uzfa%MZe]ع{`AХ3 ‚uO1Gfffݴw?> 71%$Beq8g ?B0I;oC>\բ#Θt9GqQ TT/nmkLByfdfT<^uq)(H9{\淡(&OcAUuss&MqΑ3fH W`@,1olBSsSmrP:c&onEQpsp]n1EeV|GDeu%cI (>ܳKg͚t9ŢTukMсg9V2Mo4qE=v`nRz W=8*_/":/~;pєp8pi~<݇I;c )Zr|QQU귝x rsR2WXܜ\ݿ.q }x7FC! DA- ~xmZU7}tx S^E-iUu~ع> pݯ/;@˃A}c~_ b驧%`1QR\Y184u3lX:siKQ6,̛;\vtv<,攡 Ccs⺒/gqVʖ#''Wom~i @صw7v <dee!,KD_?`\vݸ?Efff̺wVcq-ۃޞgW]y5sԘ*t $WPCeu%jj ϻ\pA( . -b, KFQ\\ R (YrTMoos&t:_ ,Lˊ!F(bjH>O˽e^n1}qe,[Pėn7]wceEYKT$&`P\j(Y~Sܰ2q| >uk([wכ6VL~g6`(/9raŗg/~LHQ9½_O8auz4|G="Mf.xEJo}ҙ_|6 [oE]}=3N_W_/]WCE|s/>{%5XO._v,=5b5(A3`ܵ{EuM5;;088@00En,Lñ SN9˖ODvvha->yxᶛnŖm[WZ[144`01Nx<^L+)pβqܱv!rBk3B"Gq Kۍ8o#qβiyhidb| |,NavY  =h@Oo@e8Nd3|L/bv TP(_hkoCwo!pfzӦc(*(^@ x$&.jEmp3|;L]j>ȕEő>c"<2Se& (*,BIq N>i$Pj(Psv AFJG{iE]b< l A1$acH| p0rq1@ (ta]A1$acHƐ! C@6:AҭIENDB`photoqt-2.5/img/filetypes/rwl.ico000644 001750 001750 00000025227 14134304223 017474 0ustar00luspiluspi000000 000000  *PNG  IHDR\rf*HIDATxy#Y})UR\ À35f9}{m7ņb%`aLkKTtoPKLJQSe*/_~aIx;@D   C@ , AX0$aa$7K+Al+^| ~= E OAf 2UU +2 Aص!  C@ , AX0$aaH!  k&21BКD 21PDF QȊ 8$ v v{$9 A4y K0Ơ(2 >~ 2T3`6HN*+PUQ sy CcF#ny(2 ! +2JpvɎʊj456)$i [Xs  @U݋Av6*G݀oۃZ47лJ0$i bym^&UcLwжЂ6mv  @x=X\C0څ01ȊECtvtY Eܞu,!Ow˃H4#P& RY,r.~ 6]?7 ,@`ߖ +sP(P 1P8iv$DV Ё!`aehA?W +B AVe,- u؟ [W  Єuû)?a.H4Dw^)ʪHhhF0x|cm{bo9 HDڋ/2<#Qܐ$1@`PqsNd]!L @Vh"@ @EF /t7 *mz ҂!"v";ASV2*TgaNd4'clw1s7} ?z(wdDS U,GM3bI!f18幒B@YJ*9XXc h3[<t:(bz~HqBL͍C|C@-1lz7b*g +sp{6hH1mFj}ۻ@J E157|0#,S$:SJM2݅qVwcauckC*VL;#$ LubٸIjRh4qI BL΍mX,<eQ(A_#0ưM,ɣ c ~fJJ C.(ad``0=?a3.N]| l*\!8稬* Kt1NcB0P]Ucj݁ WiF+Z0ncvqg8XY[J`!H*B2G]B Z*cbfEH$mv4]E$w7rx|n,,ϔı'$Ii@8GBTաD,i^@hPfwa*mR%7mB~ Ϟ"P_ۀ꺢65UYtJdTf)'$:ظ΢yB -JV`a-7rr)@@G`,{;Q#lBF0aM  !jz6!ʝ.i?Po:PN8$)Pׄnإ>G;̬j.$)PׄpW䪭ΓtUĝ@Jt`rAmU9&ps"BH6 m8uY~pd7'PN $i Pp8;q!BpQWSݧ&t,nNM9dN<.Ԇ&TWF 䇢N:춵KvTUTU5l% w˓7U(jw!!$Ɏ4  b;@pdY*C2c 6n$Q,GeE5*tcE]>N8/.F86}n/D<@%bCw*c"rhQ9 YjlO!IR2H6)v1؈TORܞ7 44ޢd ,?8(;(sjor7rz^ "4 cCdV!ۖTz! B-i 9 C@\Z~Ӂr! rK-)vr  rF>,ir9#_T9x="'do>c a7U~sG3X u[ī3rVCl/',[O*1Ne /Dh4Z~SsHgV W"bUs$Dv(2o:!0e 1kM}?,  2X-a nMg; aopαh 6f*@N~5" qx,  lt)@rDN17U(ׂ$Dʘ*q,Y/Q@izD17"%  R,R90bMR'@@,Q,'(0_7ͣPr9c ;r-R9*pqƱ< ؅VOC!\}dۅ}'Ma,3 %EQ04я ZB MQO +2F&5B>Y&6]ůY~s@qgLL)sX\dc>], 9S @*!\ /ctrJ ؅[̐0U?f&1`o fb F !F'Mm>`5>b'`,mۅ& 7o=E!?Mh&o~)@Q @6C>3 مcX%ocsE{0d? ؅G CDLϑ" "7!\ ]x#o!`crEy: vbu~x(@]] ;;ad- @Q @C>_| 巸(zE%|L]xxd->%'PTW~%3g/´oqR,9B>Ӆ !F 0[CNP,!\WTb 巸)@ϊb d!?G.L_3P؜@B>3MF´ʯ9`!)\N`gF|rWP/`, ">VL_JAry?;⎹"EQ0<яڅkNc ]|6L6\x9 ;'+Ќ!֮]8˫ 0ZO oW!c n|rVVh&˯c1"ϠIC>:& YȎ],C$9@)|r*F'c&oϜ@^R dlم[z!0@NϖR dvid-=cCN gP!\ۻd-erS!\؅F05OR$r$f,^*s-,'J!\`|uaZEU0@V!ls`u`rK(#˯e`Ó@ ~{%3hՅkMrȚC>fcV&˯U=\ { /Ld&'J!" Vח#˯v=B>g.?C#ǽ[Ce[ 'Ђr+]sҹ\N0٬'֕򙡐O>П%;9& DVN eA@fR DrF9Wq,3O!("2  Dq X+!AN`"圀i D1nN@ :Vl 1`jn(; yFtrV#Aزrc=Wz z' C@ , AX0$aat}. N^`@8F0l+'~ZZ &;__l+mԛrj $I5B@Q`Z0& !  C@ , -LdZ)Z_q| @BPZVb'-%I$I2B  B5 H{1ә2g`g'i`$ 2G`HbgggqMp['(dA$8NTUU8rǏ@ggaIPU%b`6뿋|BF6BG?) _|`4>GrKl6~ǟ|KIxSO> 1UUp]m6jjjq^7=AcCcnG'6<{ 8 lxKŻ*++_x5R\@?VѕR8l#{s#>O c m햯sAo Dx'k_ot֟9X[[)vaq#iՂhkk$i[666r6Bh)++CssKNLH$_~ۿɬgãØ_OP}78#@ss3ʝ66s2b-ϫt @C|ϛa7n^M S lgoEQtQ[[GP{Yn\O{#CXX\HYjjjQ[[nsӍH$o0Ȳ 5$EQ-,-/e\1 յU￟cIMMm<^P'Xj{{[YcC#]nBo2+ȁiBPM7RY!?3EJȜsJېe=O=m3B8NL|^C!˭!!kjnn Mc~|C bCVV՟௟6nݹih,}<{3Tjt:a5n߄EmME$wh: m0&0fVHH@``ap8C wv=\.cǎcI޽whii54 @}}#*> !F&5F3}O ahkˇh4dA @/t#ԞRUp8aaýhkmmñcP_Wӧh ,FFnȼ#@]]jjj-D"7 c _W0:6/\oyX @yD;R^sj;u4p8{f@ RG:^Co)8XYYƺgxhx5?[W[J2$yE6-#ʍ[7htr0pb/4_qͰب8$t^㣇IP^^N{sD}]z>P(IR/8PUOֽ[ `iy@dG[0|"B`|bL(84WUhin14$yBɩ8uuhkmOY8X^^Ѐf9}vo!v?v\3++0,s똁|>eccz +e[[A֖VݸU sll㟿=CO$\l-Uc4D1Y§f@YMܺeTVT, w_@UՃI0͆Ku7oa{{Hϱ7X\\4++˘;Пh49$ -)R 8_7͕rt9;R~G7ܼ٧ۮC`!ΟAMMg0;7c1Qd1ylz܆ÚNg9i!=A(Mz'` PMD 5 pM&c pC*sbl|T]UU5zTUő#tw.U55X[_K&bg Kb9+\Bo[n]| .X̱^lQ:;{%w|CE7 PYUO$i#66UEQ OD0Ua(TSSB z/Ucx—'OFq=s6wv\=wPÉfuįƝL$p$2PUU33ӻX )م? _ٙqcޝۺm/]dbbE\iO(M͆{"sדX^oz"Yim} 3`A|Fϵ456t#.$yp ?O>G9&&1=3N\x)[ǏDkoL vo@`aeuk뫇vTUB! <|^ D ~ΎνdžLH7oֶ&MBkk+l6Fyfcc_W}KKogg=/8~rg9z/n>VWWDvp86|{ȱS'ON:p#c{˚ichm!~H @F(ʸsnK{QUU X6$IGt}򋋋fTh+loo *G1s=ą }~~nh! e$ Dl!TϿ,~5?r1<2ťݶw>Ip=A 5-+ Mz`{{ `Ӈ0N'Ξ90 =PVVvz_ ]hh ~H҄w"o[2 s}Ͼ׽hoHkPUUݸnhя W溈Uhk$vvp@p1('NУS4whJב҅gϜ^Fo^F=796y).0@ -֑ FG1??9Z$_ <6 Gngph~_s"UU$ UU!2EȐe$_x /fE s)`a~a##WI5→粲2jxU{s-gNAeEtzee%ΟIq¯Q㠡.WEޏU1Ceˁ퉷w ]#C{9~^\( ]]#V#@ v܅׍$ı奥ELMM¯jjj@CC>_ϼ }`vx-~qji߾sSI f~a>rg9Ξ=B;{ A-ܻp8ezX!@cc3>Ohf㌌g|.1ϋ۷ol'&1djɩ LL$lhlPwHBhQ~cxM$X+ !Hr*xނ~k g1cp9$&& l97xܾs 1/@ga,,~Ս!hhhĉn&) ιMwR+Bsuu3WDw=ѱ|o_tp-0ctIv;7uWv*>' !P_[Ꚅ6^I3xhe$Ӊ /~O}(+ǒ*'pn^xO?>=zL1j)^ث p3Ob4\>! Vzs IҁF9.^tQQQ3rLl. |zf87q]9ҍ3pПDG{'.\FF2BUBSSsJU™3gEӧΠ.UUU6K<?ַ <ҳI^qa//5s^8 2<ȫt wH/,ݎv؄GUHRUJi{j@/Z!TPgl| /}EU>Ck=z1t%rTT fC[[jݍw !P]]@ScN0$yBwI;{P^z.(!e oUU.]MWUN8ΎNݶCÃX\ZL*FsY v{RCP2[ $yBUUtuvOPģ04<Ύ.8v"*s^ Gz}ڦ[p? D00AZ[RZ[:"y'߃Ic? /=郣95n9׃ƴ2}1vUhjlU3$*T?v"ŶVD#x5~br/}B܃o#WK鮛+B½y|Io@UUljjF1fzq$IB3BgcxǑ.cq^~Svت[uKQΊ ^ΨB8y:;g'1=3.+@Ue `{p*p\9477`HLzx(siOh2:U=/M7ܽtrd  j\.;l6\pbeEn-EBPl6>ꮙŗl6ܽiysy456xa Iz]ӔgϜCMujjjbuIA#wL2~rj/0^w?rѬ{E`HxWlGq jP2( !2|#o~\kx.^I+I~W~ǏȪBp-8w|Ҿ <[̫*.^?OO6<ۨ=Uz|S[M)PP^N&D0 K)xavl6BUN*lܦ= rngk؉$*j;-qmP(Eb]IV!I}vF ;BJjª 2{O8&BrOfAX0$aaH!  0^6  I}+__SNDWt: (]h , AX0$aaH!  f?g]/ưY" 9 "pHHd#E9)H (HIV"mEdY{|x{z{^؞~ݿ=׷WIƽDDc@d0D4~^3p]t!\p5 >|<_l'DDXR*q?$"i⨝ 2` "1 2` "1 2X*0IoKRA 5Anf;m>f,2:d3Bn"ERjRjuǁ*(u'[ K twf1Ӊ.tf0`P@`i* (\G԰Qba\`ob p1 k%,Xu!cmkK}G0äcYD~ %8>}$7ǽZZi'㾣f- P-XZ/clnZ`; mlT8szr   -ZwBeqj@PpXa~k}hXatzkD>1Ve7ϟ@Rs3K(Wq? FPڬaln W`\%\hq\ϯY?BxG#qo J kD|wY\zuk*R`f!F`Z?i%P +P m e lmOv+츷4؋'`^*%9({PiuJHwJ,YQٚT6*58X~ .5[7~9N[c\+m+S@1Pw-Tޞn9PM/-|GwQێV_]Wm!˸>!LQICN ;Bp]M}l*uH!P,UqyU@'K̯l`b~rkt)0\W0$%u"Hq\(f~f;xcI߻mE;t)2D:B`fa3 kws£61Б@hR2D6#Sm\܆R &QxB (tvdP^`2V[!01ƾ_DŽX)V0:&)3AW.əfޮlpeа! puzKe~hQz5X,- O@\]z0!fpuin& `/8ԷumS:Y/8\9M\^hH)0_ZzB0B (d0ׅ\JU_'amyTk\./> džzSf$,vwv BRµY 8v%(@)p7{:Rq|w巵ϰD\:<2SCM{&s|ۣ.*.O䵙L@LJzpd;qG@w:;z{^ h$N+P 82ЃGޔ`p49(33'#b᪭_'Μ8OSF_v9'Ќt"p/8qYKJ=]9  OAGƊR@_ww$5g+~qNy SG#y@7^|1 QOnoKw90Zp/9}Çz!%H;>:\zfXY'npN )F#;ݘY\G mgBƒ}G0΃Ny0W_5'0SC阗 R ?ԋC}]X\+#bzo6ѸԪ@)!Z^ n #=+J*]oN^tdvvmsdžzQaeR:UwB #r ;`oz:r냟?X79QAQ%%z;1 Qَwہmp`Io\BG.%.۪ƛ8ut}~[֛KJ\cf4Me Lb5` 6s޸\KJY ܉@6pN. _H_8'p7.o+8'p;K\s8'³U fqN`³򛄽6^Oc{߈*~I)05iï'Pol%ï'ox=^7 Nw={[{kN =1(PIeo+L`P`T9#U~ 䍚`P"X7!VeԾV~[aڜړo Ǩ9Eʯ_0aN@Ӥ '9lΥXX)zԚݕ~@ Ľ-`PKt3'0QHƕ_K|ӹۊ4 0ȟT~ڙ95OT~[¥ 0y NGׯ vw6ߖ l< LWSF%_.hNp]ga΍`yhV+~I)093@f",)^ďFQL xB*+\O  ɵ9_ "mP.4;ߵԗ~}=4 ;PT4*ۿJ!0vsyR&T~[{N@Huضgbqy0sBR#\+8gFg0ήw;*5\ 4 3~zcjOLa oќo+tH_ ΍ΠZF x3i ov&N vC>A5(uaWcɟ2Lp!0H!^#Ө.ot+| A j"ot'v Ԛ g3F ^SgF"sΐF%RׅYFۆ|nUֳ.o<'Ǿ} $ $;nIhZf7R L'oN =32ؐO[zԅY&oN 3\LF.FWf7VI@2 !6 n~ɺ@ !7[] oU~Yխ9dq !I!\L»*=9D@C>abku Z]Iʜ@ !0H!0:Yd¬&RRB`:!0(\] [C>}\G yV~˛({סi{Nu᧮SvW&&ՙb A J u: @|!0ԅ#\]_}l L0'Ol 8C>aluaV~c..0'}캒O1C>!:^]0W*۾@tsfC>aB`i-ՅP*ڊcN e| Aׅ0:ʯ΢&|s'D\*x%`Ыβ(" N~< nuaV~#9Hd) Z`uaV~S'9p + Յo_ٙz+i' m.{_>ɩB !b|j]ڞ@(pې.oI)0@`АOvׅY]_39'l$J>:خ ?uA]_cy=`אO)׽ k^ | ~ k9B? »¬KJ`J).B%=.N[נ bNO,<' ]C>5"9J> (>R Lۛ&\ɇH'ޜ@3S(!ڝh.n3Dɲ{N_4 !l%s~k79C` 4lN\#X'D .L0<j30_Av Q)RLxF E(ɢ<8%` "1 2` {]W ҈ln\x|?~! "X|ҁk'9%m7)%E&Oz. mN|=\6 ˲}V6 㸨k]rdzv?QE_ǿ !>׿DV_?O=x{gy]s¹? m;Oه{B_;ߏ?(~5mOF0rxc}[o}߻(,,O< `'>.>k#ޯ mJI@1-!n\˰ !6|_w"^d"5 "1 2MJ)][Er%(UF)euR3`r:;:G)%r,'zLL}Wt]raX!B6E&[#CG}6ίQG߈>@Soq\77ƧO}+kA})gNRy;ފ~ gN߯koTgg__0@Jahh8$xK/|:HH8ʟo7*r M6J5 +q;Uu{' 2` "1 2Q?[!n5;|ocTضj7"P6E&zp&6Z\6ESfT|ًWDw[)S7hI \) |ƛ~_{`zvӳs{׃3,ffT< !Pkt_ p` "1 2肐#Cgg0)~HԤ ׃q?@~ۛɏ}(6ة{Oh_1\7öSLkoT ?^s zp&gzKkoTpM@sqM$ Dc@d0Dc@d0jFJ d2tPq]jo-݈,o;`XX\.>߂?hRbllR P.WR/>va)%7Yٍ o?}g/b`p`<>'ivRJ<>s0e&Vdo涍 2` "1 =x3"T+! jaV8Me[8׶9nӯΖ6y{=P o^sn^r dn_yT) ahhpp]4At`I ?7Po|'\*ū_u =48>Gێ{['esjV*f7,Tcڮn}T2OY^ؤoRy2RqZ 2` "1 2Xß-k{Y*"F&}vݬ ~ytu}%e(|%7]& @d0Dc@d05_-`IENDB`photoqt-2.5/img/filetypes/crr.ico000644 001750 001750 00000025175 14134304102 017454 0ustar00luspiluspi000000 000000  g*PNG  IHDR\rf*.IDATxw$U:f,$(@Q+*\z}|+ "*^ê9,&ĝ霫GONPӡyt::u ]"ԺA1$cHBǐ! C@:F,3߂' ˵+A aL@{mWP6| R>& bE|eR*Y" -³vZ C@: t A1$cHBǐ! C@:X!N5YAPn8e R*T2 )$IlA0@EF#D A&c$D!(ARG#Hc,/،1&V{FִU`0)@8CE,,yzsIJAG#f`:f0d,!䟁3X4 .s!_>R*,l Mhvvhu @I0$N#bQe|3hls hmDgA"I/a/1)1#a8WbQNP$Y&GU H?b |&H 83cÐRɪ ~cG˜;X$X&E0L֮6"cHD#B"r@PD, (d]aGBBb:ŒX7KFZH"U_3X$~ڂ d~濫FJ&ov  C7x׽@,LO!ȁJ"ڋ/R#nHC,TxG LkBdsHYjݕ$ ¡AYJ! kjeppYP RC*HO5pUeⱈ&f++v.?$K`vN9Ro 0tUhd!LhjJ-K  <#QFHTCeY4fQ,1D>xƇ @ X tiʐe$10{VB0`frll:x'F, ,55\IJ=ܟ^X@*`OO5+0Ԙ  uU-1$7M; V @DIS'`U5pYT2pkszWKBh2C0h`2N`a} A73 05zڐ,en@MfMXb jݕ2E19_ЋL"ijƦ&H DmMS3AP713>p_C2{TVJ@l M&XM9s2gTA8|w݈`5!fMݷД]8QĢśeY`/E(D#m^aDQ}TJ;=> V1 ϱa @N8ͭ8 X _,*h( au4 `1sU~+?(39'Z?Q!$+sD#:hnE<A4@,B2$ey1A0`4dhٚ~y ~`I*6ld!(C :au4KTdR*IKw A4B4!M ܠ@z0fWd-H?;`7,̝\L ͖6},VS90X$.P) Z4Aܖߢ?_HPoU@9eGIrK! *L뮀('d, Y~B@T V o)<$DU '0 Q2U~=%TJh?$D(G  N9V!'_,[ 89'@@Z[~Ko&'BQ/Dh 5X~xN`Zwl[ >s$DP eAmR   VJ-\N`D?9b[z +BHW9bEh[,z %o)%'P_QU-u|~<  Jb巌[{z /GT-Z~xNO&%Ei[ u  $c۫Ry?([1s: ʩo)pÜ 1U'bIuНY 2zuЏ0d"/bvjn~jQߢYB಄cubku╦-Et}k2aL B EB:*~fEPϖR@ c iw1& 8;#!Rыi?EcG#91^(&{kMUs["su-R* Ƈ3>R,R4@>p'0@c މ1Vt\XA'ty#oi0S ԅ0buH+ 0T*4c'_ynkGe1"! .]@]؅9ij ̨8'(%S~Lց],Ձs^ģ hFC>B>sۅ[9js!5w"ÐJ WsaU!J?TauatN`D JC>|*q Wu%'*}ѯi&U`J.ԒPHuȧ"pc ˲ 0Y~Ոr5|*p`H%kk&˯QCNgE;h]xFvaZj,+G 0& X0Y~5Bs5;3̱V.L_P˜@M@! 4ƫd&˯UNO%b&˯UNO؅+h&˯v g%d cC +`2v2W&˯ TqV589)&dkSd4sIVEw29zlvLijj"R*^m|*qLՅoP͜@U`rd^C>eLՅ[T+'Pѳ.C>evy˯"#T<'P1ېO`L@p4"/Ͱ T<'P3C> []W'J=Q@C>Hb/}Hse?kd Ut)3J W?T2'P>_cȧdL=9 WwseϐM,aL!J0oR]tN P_Y(HOE`ardS ™UL-~+ T1],9 |kH&bt}d1 +y|?C$c<2 R$:&htvd*QK!ϫ݇j1YyNK!@S@rEM!P@0 Sȇ jI9rE |ȇ 4'xC>!Cp9ECB>ZJ (b|B, Tw9H!P1sD :4>`1@$L dV)(GCJ% Ah!01{c3+؞!]k B7cHBǐ! C@: tLAfb%D6+(]:HRqQ;  +(]p®*rj j(xUj I(L1h!Z$C@: t A1+Xc ̭r( `0@ mJ-*R_(0>2$ adhn788фFt:vzlܲ7lDh,KOd2d2QZ 0"DQ\$\a*x<)JfB9$ x,wF&b}$+ 3~^޻>^ep{-N9t\x%8̳t|}O~T@Á&ttv{Z۰k׭fˊŀs~="g|oܻRe\v> @H$~w'xip q>to&˟Ex"Wxeh4m_=8B8߇}6] \atYY=`Ak ~ƌ[/|WZ}.)@0ģ_? %Gp۷o ]xZ2㙮ԛsϗdB˥ovc >v#:XO.c+/S98hb^tɋ$ bٞs@/(D xG4&NpO/|^gb8hmsp}gbޒ$!P@ܢ@@ !|K{bݩ9Cwphfs465%{ (f~T ?oƦf466Ժj1H8۾}32H&_<tO{E z(kUj4p@X]ce @(Vl!R+A<ˊ_ju7x.d,Ϲ薜h& `K6\z?gzh4`0,ٌF߰]V;p7xLLck֮pA@gW~F#},WgvZc `!:o}jIV'vēN*6/*bQ\K_,dîU0r___ ^`N.j"؏W_~QQ{p YR0? = Eo{GMOsa+lQ8d/{W'̖AT*ד  f z[p' J2q93%I¦-[nƊ&!2zD˅ёggfY^68 99zs$~1Êoَs|>:IMFrnә xI鼯ucbز>l67@&  + h_0Y9dIVlӵZmY݀^dzl`aY flhs:aZZ $Y higYi{YQlozWG~,bزۇO^$I¡MeY.lwuZ,HEm[Z[g{J0:<($mؘQ`е*/x}*{￐,+R)s9AxƲ؏V.xdZ7!v-Cgo($ hii5kpyx`Zw, 2 Lb`=em[Zpށg~b~hGy^ {<o" ٧VAkNY'>SxcNj(1ήU`,avƋd"ՆUSOCgת:TF?3Mn@ [%pG{h.gDܧ>Cӥ,yj ~D"p_oV [ݽ6o}G?͗`TM5!X\QKi`_*8^mObvXmaRI fmmNl?Ĭ;]=_@4 .J %pa z=$~Ѣh2Օ f jݼv,pg3߇)B3mNXm*}@gm  lܼEQ[χʲ$IX~>С`q,?W|JDߑCYֳc'D1DFE8aWvc::H( i7Edsl{}Ԅ$Ixg^Q=O?Yc ]Vc#bbk朣g8m_'b!.WggTn*$YcMy Rm@>AU6o)6ÑL{:tts is:vz9[6k֭GGJ*K{{ ʺ[adYF{ ;Oܥ0_վeoWOQR: mΎ޽a|ly6lmsbcRN I@@ٌ=_`_`@Yf^&.{ϕXacvx\,s斖U}٬S{vł;ff9oL&#:\. . sy29;nhi{g^_۾J 26l܄K/BQ?'{qhh@k[]ȶ;-AN̻`6lv`!$9e6m9]5KېH$  ~[݈޹k c.j^Smf3tw͆-=ۖWsl҃斖Јze6{g{׮Պd"F1(N$ ;N8*~g=W/`Lܲ5h4b牻Q|\yKHSO;q_- ♞*J8ԀhĕoOL݉D).xhjjY"ɤ88mNC 8UqfWg7P пވKyYR$I®O_/<'y(Zhko]fcs϶b˹6b1(sV|+_W:fWhl*N$gO1;3u-s68}َ5kgG"^P$ <w3ysSq$YƩ7_VE_ܻ?`֫,r/uЖgLl6}8 @Ȓw;w,}d{~^xL$pavƻl68}m`X'Rdhim#`HD$Y_v[ykMwO#28yyڿyx2l/9a(2=B׷o+h8L&3D뢷v rlY!V|_p2֮K}Oΰ6 H&1鞀3ߏX, ٌ&9ZW'`E"7AѭŽccsz%"!rYˋڷ0}P wzDE[q?];Z/p.CJYcSg3s>g._IH%lzPWj }dR!nMՆ Bǐ! C@: tLUAhQş ww)9Ƹ"s " PHbAQt100iOxۀDkW;:]EqD丳S}!`iD{w'U u|׏oƠ*ڻ;{1`&NSr"Nΐ@ 5Mu'CPp^LTLW&+$QՆڦz  #B@bf4dfAF(8نuhjx|Iۄ!C *A03|z1PX@_J@X00QT@0ҎuM *TD@Ve44z3Ds{KBX1``h@x[5\sA0A4u4kl47C1`@0 c1No7|~*@ ( ں !lϰO._Q  EURݔ1a{# aXHF@VdzS M KDLc =`‚` 9`AS eEFP-;9GUc <ըi7 @PM%\DK $:Ap"7fa6kEUUT6x? [x aXchjCÑơ m4 alf3 kdEFy90re5:$S=] ֪CS[ ڛ!ᷩ4w吩!#T7$JpH`H9GyAi0+$#r9G LP[tsT_l ;˙f+ӕQS ]``Ge'g3"Mr&u 5y317}SN@3$Q2.Kf 'sJf"ǝm'?,1F D 0ol/IBɘ=e&2]D7A9ȐGFZfMSf hG9 (-9(0IΓ[~r1G݀p:"fۅ֮v{Cz9zb9%r9W\wDQS? c =]I+-2Vb\^T P݁ Q[ݽ^x> ':2c p #-9l丳AVX!oEo\ݎu?m%i< "ǝwEAPTd @D8$ NNQ uX&eHgk\XlxDdf[ ΄o.AL+ͥi{;ܔ"70`ѼӢNZL0h?vaXA@mNH z[~cj@YmH8!!- q < Xl9rG! F2,1 rG! F,B9c !*ɀrGC@X=&pN Gdp|N"sC* wd7zƿB07Z  t(XaXfAz$> C9H17톧>9"njH07SN 3X~N9"fbPNA kFZWH*C_h:P}(aU~Mf{刄*&F5? Qcfo Zr`G-ZO9":,`z 7  4c%or= NdEu.`7sX.'``a 0?Dcke.`7Z,6 W@]KvU'+[~e('f-&c Ս4@Dx||7,6(lpN X^c8يUePPW 8Պ]T7 ᜀeߏ{v&j+RLCcoX!'`ie{G(@mS/b7Zru^OWQo^@Q:G,;Z~E6{=K c ۚQVSeop3Z~c9 c =^܋t ۅ{V ogo='`)`MZ:ݽ=Q]AքUeP'l3,%*8j+a1ϡjl,38de1C? \ž24.L`<̗0ӉݞC@`G]x Y~f]OW9tr/zuzg }㵟]XVdTD HX0zPȧ -UO4-ۛ  LJ|(B!VPY~A`l('`L+#|w*B&c}K#Y~u,9S^!V+ zL ˨i=S ,ُمk<0T/ |L0p va|d5F C>(Tb_u z#R.F $@Jd56@wJs)+Y  JIuaYQN_CRHĻمێVN]8lm&˯IuN ewQC>XuኤkRH=䓨c.@m |*',!Dd5' $]LљT&˯l7y9@|tzS],f('А&f $AU.L_"Wۅc* 9,sp?ڽՅUUE%U $E*z WbY~eZd&V $ 8]xX_aYdrX=B*d $DIG h ,ka |mћpua-vc*_8@U|n $0Y~mC('Ёt!?ݔq 06],$ &v$!p'dC9:}ХR'10pa],E6뻞@@! 5d&˯;' |*r%3 r|hn'˯;' C!zO v@`䬴5te8^[A!.eՇ N Q'L? d#'D!H=za!?|"J|轟 RN8'z{V! ĺ&J>a&b hCf @DPU)C&֜@D'`C4(R (`\^\4Mrr0iK;c(D~vv=d=A^ Ɛ! C@6 l Aؘ> \ Aƀ]DꭷoDj-AC%&FHZUA D,5MB $Q$J`юPgJ%hjnBum jpm !"ܙn7ӧNŜYs0s !9JT7)}}}P>2&@$Q$IC5^:)i#N'VDQć;?}Q] DNNƏS0tbp\I1144kwpS1osYZR%g-],CQaNׇo|[((QA$8NnabL: sgiQTXIAP[_NH@Q,;k|ܙnӎL+1_og!33ƍ qspy`ِD1aB "[ZqFq>./sϋ}el?^X'|5zJL?!beYC7!rtJ).^]eK"7'7&c ~ԽZ|Q]##bZB7$Is^T[0e|pys*15AGgDDŏ{ ce?x_ R΋_ϞxT9"2$1݅{c2x?gxMK[ٹ{6o7`QPV~?z>. q0 7ūY?h%7'K-9G Ek[+[Z?~_ܼfjOS8&M'-ļ90q#<@iAf|98 ᩮoD,Mm[Q^Y3O;C1dfd:ɨ( ܙnSXBfLg ݰBye9-?jp>lUEx/[jɔ[rg1t222LCP108#-xoxw188vsCaa*9G׋?AumM}wcXt O=N.Yn7232M=0t:t8?q\.r1}4\tޅ8w9AGgGz}^ٷ)Ms^@Gs]~!,:!π86v8(-)ŴӰ+<+u?LC,Gnpj2ۿ/+/ӵ'sis>D()mFO6_Y!Inn n˚[c74S˖OXUU(c{Ǒkn¦㲋/=z9#_EQ /瞯we#4dWv6-p!z&Nw5s_C[{NT}π0N{7Xq) ̄ۓ,ӴEQL1 $'*bٚ``p zzz[ojnWe,Y8<`rq11,;kiҍa&O*$E~TU5ئpl1 sQm:NuqI̚”OE"C{3ҌY={R,\pnBV 8AQSWq[Ip)A1]sgA3 zQx(~i=v~ 7aۇ#7';_mrgj D_?T+"Ҝ֘ 8 c (S/󔦈nII 5錺_0_tLA15u7!I# 9dYߋNttkzbo|t_5dddmRTgvHKKӵ*&B-aGcÝiˮ<[B7Aq:8N)cϝ|wA$݇؁@@5Ղ PTEϴՉ-ݙ,F]}vޅ{v9c&x j(y5=$yyc>kĊer3Ꭿ| W\PZ m +}o[f%;;?=?wz߯ii4dg9~m1Lb@bY8EˇG- ]_|aA!^\w*Ms9$80xtcU$5Lrs~lDƐK; ϻ`h).-heQF ((!1J)sf4485X>H (0Ɛ'NƊ˯%^‚ˆX܎v|-{dbC$ Nwu7.b EKP)8AJK8W9rPkx7QP EJ.EQPUo{M-Mxp͊1=cHw4m 4~%#7'wĚׇMl?}<;uuM5;ٗpS^45EFfFejDw}n+,¹ωiv5m77ƹ TG q ^}8zd}Wă?gn ϟ´iq,88 [c NchȪjT77Gbu(/d@C`0ÿDS1SoލiSqwD?7yW}J]&.X[MT.7Y3f =yIxe˫أb+pQ_ 2[ޟ ?UUbos~\z%OVza 瞏!+}7?}>iK; Ċ˯Di4:8PTXw~ ښQzҋ>ܜa '햿nOh$ag _XxGpaL[@!ԒR<0`MSV^ 7w}WVF|JO%JӞs%cÿ +@Hf͜iS{ߞ1mniFeA̘> غ ((/}? N>iyq:jQ#7;%%H30D@#PM9ܙnO*kd bD`挙;5;+V`/G7\.ϝiۦ&ڻGe$IҴmz'keQ*V\~Ym7CM]N*N?tMZ`x5 z՘֛n4 TbfUUqI 1a7+*,L,|ڶMA`nEUU\|EXh_ڴյFtJ)N?4M>܄?\T^37j>i;F(s57!9"n_9 7j㲋/6?F `#[B˺[u.(=UUq%N״MQq9E_ӦkwWw~x=رk%D1iz4.>i$C qp1hns:*6lޤiZsp*V^y|\^/sQG1h8`|$I-6o1}:G(B$H:XAma9V\v~/mZ^ + 7-QP=/߂\U+sex=xrў Lh{q&C1e̙9/wݿ7 `+}ϟ;_{5ߌ3OM0}4L.ANv6UE}C=jߟstwn\,+ކÍhjntx}^~ӸkKὭ;6K̚kkVƬ4-; p8@nNJLI`%831#T+ڿoo4XAL+bά9y!Tx$cr)Au/CL!UUr\ ;{ÿz`+ | A1$cHǐ)j&ʃ1`gd%l`\[e|^F.'! I 15"@@  VB` bf&D"t:I((2D]]* 2a dbID $$cq!I|Th*Ԣ> Q$! ̅DSSS D"3H&3s]|V)eLN%F{{>UÐc@*p SS Ȳn'fPh4 |yAz@,$\7;c$1$Ytv   @'q N"MiKˍa͚VUAF LLq䄥P{d}}3~7mH4%188|^'JHC (ap0j$Y F"DA:5嘧n7266cwU@pb#b"i$4@ 9f%D"P r2"G֍p$gwJbI ʂ,2ф%Iq| gC1RYG?]SfvWp)$K9L \.?`" HD" >;QxoML8G8'i@H@]Eny1n c I<64Ap΍u֊(C& 0$YtwG<{VC@8&'8ujj~tA`, 4D]7׀IA>\NFWN Uj1tcDf̜!n066S (% ϭI=s'"k;3sOT9a0pTh⬯61̤7)wRhPP%7G8(zd Hs+`o|n7 ԄwjA`P`8yr33qĨ/f@yB jk+]\<x}}㚏"iu89jk+9P_F(*O_8,I Fi] 8 G0먕-zh4 ,p478v?>΁ݵ)ŖRpotBpB鲫^Ⱥe)o)HPN@/$ hlvS55xA`8yrz (B `ժ&Ǽ mmvWTR)'"pTWWm9jjBhF0荟NF ǧ>qLт`PE8 YHhCZtvZ(<׮]Q=_M9褵ֵںpcc߆:o4~ߒ>r (0֯oGkk-(9D\وoL(;('p#k!Hdd~p!뫱|y+p-fVlD^hHJskmE}}XhDvn^mbޓj`PD]]ZZjH.1X4o)r--t芔 jn5HM# Cd( ?(+TUU uuU οVxod~_Y 8 Ea!˲@.'! I+ |Ն711[TzzưbE#jkHA`0{KB*+8|Ŗ_+m[MހE,ɨOt~?kgF[~B , a F[~KN0;eW/8T,G QN&cWwm(' HӰ[j('B@b˯  LA]7eW/u7YlujeO0#VjN+  ǨU~'HC[J} 9?'@@,zsN0 X~K9fՋ_s$A8[ ~ eTo)ᷜ Q6Nr$DY_V5|  B9A`GN(X~KA x>'@@,zPHx>'@@jqT  JBz{lqN&-Q-QWZ~R LLx3'@@b;٧x9'@@_x9'@@h1x[ ^ ū9 ,+kRrƀl6h3?Ux/|#q08xpS*n6^k B&?QHdpio 蘅- I x^cS o Aѕ3 X~P xa<Prfkauawمk-N 8Z d+f|̠0{;d'+f|̀1'oV_k 9'C>fՅ,ηz'8*cF0Y~pX1]xQva: ''(:c]8Յ<ph vag.L_g├#@N>naaua{}\]J 8.L_gㄜऐc&˯;'`8-c> ؝M1u'˺zduvl|9gkƓ}Ȳs [B>f`],1h4ayNrpSh k&˯:'`1c4f.bY&n څ9Y~] X"nuM $Y~=9K !3X nw,ʜ%,؅r{X0UB>`ՅK= &N V>|xH]Xΐ׃X0M1T˯֛'NJ)v#<Y~ 0 0\1vY~=9C!Ѿ0Y~99!YX]xi0O &~´ʯ0k?CB>P }OOlp=:.L_ctN,bz:h4A_ctN P򱆂]! $BNpEYVzTD12'PP  -!g`~B>$f`ahB>$r%KM@!p6==c%`|™ y==sE@Q(CNԜ@Q'P$TdYAww--uE@^ANECC5 | A1$c*TVV]O tdJY{Wp]w@hip ~=Թ+ڱufHd9@ +~[\sȲ YAƘMci | A1$cHǔ7ѻW(:gAVQwGV,CQ (B07@Q[ Xl6cM*E7"SLBMQd2Y[nP9PѧYFӏ~ $$y PYY\֭ٹ u[, (30-kƍO]k6oՆmxXb( <}Etun$ab"(}}<ǧ?}チ/D4H@H&SD x-455bǎ/}נ'cLSOŜdLgAeگ{ 4^x5\uՕغu3 i,LM_+_xw7cHx=Wih'C`l{Ýw{3MmfjS矿/s~ 0D1wߢ܍.# p:uu+q啗;o~$^ye/: (YV I'dY( 851梉Ik_/VO+jm(N1W_{<-[6As^µ`/SO}H@`@dtt?/|&WaN;9޽oarrJSUVfMW YQ]_W䓏bpN"p:$&# o}֭tLOO?>!d {G1_*t6 7|#OaFe\xymgY ~?ޭ q!9{N"nFj*ᇇHKHҚ?7t*`˖֦-o;8ra>zX {kZSFq6EQyU&lC.C,6m%p$$&C ?ƒ>y-ظqg UعZ x/Fc( Oࡇ~^gLUFB`01@ t:_7A'9fMx<z!ڃQwx^R5,s! &axj_;ռeApӚ׻=(XOj:f``_;k|]݋$^|x≟wgBP?*ߖ:`rr ##O莵{+W.gatt >"2 c H$R|^~x(nΝbm^UDQ|U k:!_-^}u/[p[ڌ $IH&S8yr˯zf=E3!(#Gȑ} 7 [4?UAv~3i*܄/TȲ.s'v'NgoĊѱ--MH$`hhh̐HºuMM۽7RՂp=_o~Wױ\圽 :ex`( G[2u?:;ϳ:f֮OM7is!22m4]B`(?oW[?}o/o:,Fl޼w}'V477>^&|ŁGL H,1&l߾Ny-V\>7}nu_eLMMi_oOUUUhhʕ˱qzl߾۷okQSS mF~,+Xv5}n3<7wDJ̚jl۶9t ` qǭؼy&z_YYj46֣ --hjj@MM5q[иPQXvoKtvǎ\*Qq;pqDyǎ@$2D"\.w"܈u+.51.b466v-%عZ| | A1$c IENDB`photoqt-2.5/img/filetypes/cal.ico000644 001750 001750 00000025514 14134304066 017433 0ustar00luspiluspi000000 000000  6+PNG  IHDR\rf*IDATxyx$U;ˤgfdf@f_墢 * E \D﫲 * 80 $=kgO:tz:N0dyy9U9U]S!( !P& a`& a`& a`Sg[֯HE`0${fޘ 5 (}L C"&M]D",0B|a`0 a`0 a`0 a`0 a`0& a 3PJ!Rp8P(P8 A 0M0L0<8(e% LB ~?gzGn|zܣ`6m"ǖYV 8@{#0HBPH{z)x}>Ji? ,pMMl2!n#?vxgBH+LD) ߿̶ Øt=AݎBr6c$ 04:ɩ)B> (pMMQB< C# D>! FQYVlCV$Ĥ#H} ia,)/ݖ)`fJI7g"χA|f&qO{V6"!>}CL sxQ !aU (bpt ?!$2'0:R+  )=iO ` C!NLyD0K}ch&1 Bx0ntLN@XrOڋ1>2  `Wӕ]ah& @)ŔATP3>^, JwCHk#) 5T [Z~!mPBaac֎`w šRG+ ieĒ(Rw`Ρa0aAT^T3#D!`sh!w3&= qP PQu:E]N9ߏ~M j!`'>G#d`p㠊>#ր]}N gU2&W=&< NL=p`l…Q6 H}]52a14ua<o{q(BW 6(صap$R -YY(ȵal3A7(CEH&'(SSdWu2BrOohH"0\dgs=>J)sraez"Y~G7 $ Xf;0ٌU-Q&H&qp!?7GuUlUNDDa9aP^RWJ\; ,IJ& $8PV+¬ێR {v(ќ( H DssB7YVTU!jQh$UX~R^(\RM –y& H @8cr28'(7*+cӆ=Y X~c90H,D '_(0<ʊVuLBA2߄? ą @dY-XRQˑc"Rp<,DEI1LRԓRP*F!L,N"Ǯ\0 D#\-9> MP~J.smMX& 7>a90`wTvop` [O`&bRNLi%$3=3' Li=]9gd9 #gF#0`hLY~%1xN #-Y˯Zo/Qi0d'ZwPo4zL#WLa0dEio25zLo9'!j&Q`uY~en=0Aed0bN #ekM8Fʨ[O #%_J- `Hׯbo)'4Z&QrLI5o"Ds: 0`$,ҥFRD,NMY~9&y1sL eo29'j `^,ɠלdteM ' (M7o': F@0G[0<60S~'X~%z )'`)E[wFF 4D-Cc8c3 ! opghoKN@H̡ 8щq>ީ`4o!'Kv5mBqsrbDo2h='; 33ÒYBxց`(dG;tWTsP(Npr##㑯gi4Z N:z0<6'+Bzv/2Ly9)SI؅WDQDr!t(n1^ۅW9>4+ |w:mX~ǘWF5Ф ۅ#_'ʄrx!oљ]Y~ӃVr)!څ.l*@ 9M @"!t0.,|h'#WZ hF =j.,A9@!t@j.,A9@*!!aAJsB>׌FYJs9C>逋څ;: ,ʠ֜j !t:z{$W9ԘP+:UofU~E9U @C>@vaVW-)':T'VuuafUj J"82IGef_u ,h\'p`dL]vafUp=T%J|A.ܣ0\U6' ~nW((E}EQD7J):{ (.s! \v6Q S0Qyم[ 3˯ T.')٧p.Y~!BIױF™.,!Q`H t3䓞c:{{3bf_!": d\I(f.,C@@K!Ʉ]U6 dTI9p{@hf_cΜ`Đ̷ x}b_ !' 9#7Q𑶅 3˯1JCN@60r'̷ x+' ̅|I Uf_㒎@eRcY`f56rR谄|\uLy> q|hNQl5%pJ#LLMab73'2pP2XȇPr 0@@B> zH5' YXȇP' IXȇP7ɮ'WXȇP7 @Ej uJ#8[֑ /q 0ξ~H[G31FJ 00L 00L 00q}ldee)O ~^/fp>"Uk rLBI@0`0 0`0 68Uw)E(̮`M$RI }QsDCJ!tGW["V] 'chx]]BӉq 8l6:\˗˖vmN,&'qX,i9WpXy!Ys` '&! "L&v; (/ǒ*t Jː 4P#@)EOO/vލ܅CM14<_$XVamM o;n?+ayٞR<c.I5EQDEy9~|PR\,y套O֖[XA_IFG,]=رs'^۱MG1::@0w{ՂE u8aMD avtt/!~Oo/~/΄=DӉv@EoqG_ U)_\.<Ò˲Zq嗡TVV~͸m )x03xgљp 1<F$} B&n02:жᤥKP+WvMMGё #Rؘ~Ӄ uu P5  Ij_ZR+/4.,_ ys^ QrՍƽ{ƿC05ЍpW^} vv5kV_>TjY^("n 4ۏ?=<^ݱC֋~k.??7<64BXU]_3u8nyX,,NJes_^z/Tӂ.!ē^Q."1o'#C͛pm Ełq׏ylI7g}aW@fjO>Ki-..oVUDaaaғnnݷ?fl޴kVUc'lӃv{HAnNNJB-8Yg59paw$7L/cUI(l6+~8CWw7;ceWDyy9jkcxиo gUxf8/feKOBEyDQDvV֯>`OC*1]PJ9v1|o btlLR"77Ghܻ3331۬[[H9C]]-q|{s(\h`0ǟ| ]u5~~v^ϑT4-dsgzZRիVÞ_B6YE^˜kmEo_n/nJ) qکJhNpW;܊xyް5(ofK=1 q‘8EJf܈RrtiFpa]_<㒋/Bl'{zÏ^+>9q1a 6*2>>.}7;;E*8G1'ȲK,;>J)rsrnژ =^YEz) Ǵǃ7zv|ӗ+_:Ef@GH)ɲZ E{\֬^GAl26Sj߁pMNiF)EVVnMXWS??/U|܋zE0#WVV, BѸ7coCmjSJyy]SLEY sO~J0āCpO]bbbBRv-髃R4bɤqzz{]VVjׯQtTV,EgtY֎n~z h\ 塔a||"fb\RJ((ի= ţ(8e'P^VO(:|IB|Im@7B$AO"n9o1<<w_Gs`+W }R\rEhk];—` _|3XUR+M j122ؓ0ZHܶ.òVZ UDJ!Ύ ֭uk񹫮[o?^MO޾>ڽWU+}X)WJ)JKK`=,p===9Bƙ$cOV (qчķo%o-هV4/%%%?miQ/RF`" 7 h炂|oQXk+&\.MW @qQQ2YQ47ʼ?^\N;:ݣYt!",3zpccc1PJ)rsr4xgW7dF --J&\.?p@OL " q'/t|>\.8hZ+n:Im_;3>q\ĕrA)Ż uuX(ץP8 ߯iaռ͛#_ eB$p+:w!kb!$-#9J)%}2Ph3`$+W\5'JKk+oޜ8>P99'^O5}-??jNBIZAݍ~3f>L_ʑQlټ Y$LxUNK v$"UbvzzR7/gn==8tvu+~پ9&Gpwl733}{,uEO9M7gqW&^LqZUE,Uႏgph8t$BaCpM_o@a5A3,OٲnnKg[6#77+P}C#|OT;!)ϗr`(W^ϵyy(t$6Ѕ 8{Y n&_(',I>^y5Y,$nÆ'V,[* %4А΄#0LxyI١[#n ڎIow~;‹/JڦǕl"l\sرs:b|Ka1AA(ƌg==K/C}E !áÇ+V,Obp`ڵh>z,f!457c~ 9Ҋ_{lB9{.H׋7:N)%̭YVñVmv%ucZ,lټ| )T]MM8$myD(.*u:'kص T.^Me]+*  b|bMGW^Ů_\c2;;go; izRU7V7}[_c-- mzq%Ѱ^ ݛ6mjMbXWܜL{>n=v G.+8++ _st&@f pwPKn8s` {9ɩW\tx T:rIK? ?_O@Dn>-{%!>49E;֬^bXeӦDQĻ GK (={Y߁fЩPJa6뿌_3,]$]AFI7ڦdl5c";; I >~Ux: rxW^~|a|cJL-B055%iՊM6\LEX\Ғh@ >s)Bii)o ˗-+Dn޸|}7zYpIp杈ܜlڸ8A88hi--),̱:XGŞwFC^ݧR mXpmzihmk?w]# }\|˱t.QAf%_sގf~S߀ֶ6-X-8زp8lI8䓱SJaoyTDebraL&|kf*pOwQzժEQ߿{*BPW[nZ_]{-:pAZ߉I$|> AL(Ǻv%K`2 .?p'ur~o獺Yjz~btl CĄ PJMSu|CfAdȑ-H% 1 ! \YV)#BBsoB*(-[@V"Hكd LIG!hk-f87r\W:=6}SVS+!4dk;:zHy}D!hr 2fL[2cຎB|mݽ郬D@8vC<&FP^.~6t0Ơ*Q*ѳ{?$H;!Es]4Y$ff1;> MTcf"& )K6"c(/0;6r v@Pr1(J0 9'FkO H*2SSW73F#s^$O#4/F_4p" 6Ӧ꫻V)cqN̶`Kr \gyƫ@1O_!M ڋm$Ć`c(>WBvr>`8(dMKRF1%@M5BV(Ϩ7@f cP+ecX탧*P*|1ZiZ~H6T%l+>ioX0tTMP+e_ uMu?&cff.anb;l`0>s9 0PXZ0052|D&H6¹u~l9t] *"Jjj8 !,1d琙Mg(2s4 0Z74STK{:kWjLbd9PcX64S4 hMP"Q_XU}4qYR[mp15ԏ(u| 8H4IIdΡDƨ% 0ƐGv!3P-afbmH6ҡ"ј/n, OBdb 2Gz1K/-j&$ bɔ/ީ$!071|v11J~ZN@ 1$[}TD|\ܒ%ET`DMH6sx2X")kH+Aš^DqZY5L^ꧺ @A[fIQoYىa0f i̍("$[‘2q9Z:oi}YkmT('`mP"1t 鲓Q 6lfm7('`=‘FK[pOَ^ē)5o9k/$QN$u$]}{y-h%khF%H{>ȑM%S޵ªמ՜@r 01ֳkߊE؃&ر1Mi{[~9Xkv9Y:9b{d0fX~-2c()'`vw!D-\N?xAx->f('PHvha ]9dEAg\IH;h>*"&)'-$ %seعaa̖,LB߁+ݷw%o$ZI)'- Q[zlmC~i49 ame%D =Hd98Oc/ίTuSVs=P# $9d%Hut\rn |24Mgc$r$h,DT"=u~`C_\ks.{V0R6B`Cd$RmH5 ZZ@S4V[$HJJ$%$++3.ef6:vBD` $vrs1IAŷ̶5ӯeM0ryL c@ Pi tN_n˯K#  <qTu 0wo#PN`=$T-,C9ܰ6.  d 'Ppj߹>ZO vTu a;vTu' !|]U~݀ u=V6jN@ۈ_!*9ЍHj%9&IJZnΜ a Y~(''@@4_뇱 ONhQ-  [~8PH*a  o#%'FJok(hu_{G*9 47aJ Z~TH  ,˯c6rHsL0'@@sk#'@ N'Z~gbm GC\c~f"0-hڜIh"=5Nd˯sQ #'fdž1;v $Xa)}Y ȖFRN C63j5$dg1rIu&,_+i=@_QJ;Jb1&!=5K^7ShV-x c=A-b rK-/yM":zoo9.s!}UG5 O8ZIғX 0ư0;6c(>{9; 0ư[PՊY~K 愠φk'j'[tA$a~vgy'8PZ~9 ~L6dXaaf)rғcSscOcav2O?603꿜@ 1C qڈ_rF'i @ۅD-'|)bS-f\鐆]xgO9,|)#HO:YŘ|v@\F,U~9_ 3څ ]sVujN #pN7HǩvL.L_wcre1sZ'o-.L_w0r|"kB>"|Zg]  8..dusB c yB>vaz9qj.C>4_vU˯ Ys S!G]xWvg9qdc=ar k!].1$huacjx@C>N0Y~ PP ,qU@Յ+ZGI:vAL `J+i^|szouSdr (! j[0Y~FwE+]x#0Y~뜀J>~1 Yd <3D 8sۅ x"|:hLd&˯*'$+var B>6S ;h&˯rY큌avlW!OC~j0Y~}M-'5X <)&UOk3d59wRC>NыمU~g{ "b!G:m.LU~9W`zd)|lǦd n[;5˯KP0rK|1 Lcvu_a 8p r V«ߐ8*Ä 9 !Gh^oD ~ׄ)d NlP|llua's JC>vS5lY], ڞ!Ma,!'م7.LU~Caj肭 S)1L bf]::*Iғ'дPa8X1d 7vZiTEz;A.| -b (Zg1CR _z`L$!hىh<ٔU^K!`LBv!-Ä[r#$ X(C`SNB>y ؑ,40݋(|B c60%1(ChN #!!YU+3O^IeztuwSب'e%&؉ko=rαe8rQWȲ ]o7.{11HH4d2N݅C+phkkY$Yu'!Iٍx-oė-;qNꝆOí9${`#9wq~/߇:8G$W=ѫ69}{i?.o wWD+ `B ٧_>::;WWތ^q38X{U0C$ɰ_ov]Q.]2VQepTUޖˮYL7m1sLA|[Z|랯`ii{#Z;K|[}&gf.ç>v>waP{! ?1>t1|"Al =чg? dhIsXK(~v}IFM3TU?}ۘrCgaW UUWf!nއ.5dz\|O1T*a>:sO=fgL٧nд':o};L/$ӧ~cu=tƓo@]qĵ۶E9 L:*ʶmiIOem8bرT*W^} GsԾpCV޻εcg/^tKl5hk{mW! 7|[܄cy {&R@SU<׽ ]?|)LSe>gJ,0躆=\ܺ<}tw8XHUw`z6WH&m < )s+ND nOof/}/u;{𲗿|c5 !UO VU+Hyd@;{H$Mm_n2AA@bD2E"VEEdE!! @viⲩc/a4BåuBmm^7I(m_j4 ME,+ムv(JxzFcGOkkǯ]sC4k\Ǿpձklmc=|/GƯOSwtvbϞ}x {{G$ɸk}sgqmo4Mío3寸QR6ϘUO c L*{a;Nݵe%I;s9綊(VPs\.ca>~ ?}4׿hmm.K8Of|0%_Z+/KXZ\ fQ*-ngWNr B @&=~3Mѫ S &>3ݷo=^7 !ҒQ\uOg `'mG>׿On [^++nGp+o-JϱkNʫ5}81tξ>ƗB&/(.?,u {;d%7ö=|_{1t3t Dގ={/{ ѷkJHzr}FZZR;:pʫjudEDH$ގ.ލ={aؽg;:D">^p !s,J'fT+IdY6w9ۮNzI- ]eB A@@! B A1B~$Q c"(UECF+CsJ"٥m$tT4 Y- rnN{G"קh#2~'? M׶.}JŢ5p۟%@<N\1I]߯$K+] A1$bH"ĸ+&<crɬ) j]kQL ʵπF}/vksk] 1 N;wH۸TMÎ;m7-vn6*lAKKvkچvώ)҂TsVWXFWwOfϩW 'LczAl_ix&H"ĐD! C@! BLπ$ٲ9A(Jmqm=|k6AIcݮ BsbH"ĐD! C@! B A<{IENDB`photoqt-2.5/img/filetypes/pxn.ico000644 001750 001750 00000022756 14134304220 017476 0ustar00luspiluspi000000 000000  %PNG  IHDR\rf%IDATxy￧{fzu@@q!*`׸/D$FMnɛ{oY$h#Q\PQdTp``}:fyE9u DH ;>ܑ7>Ԝypq CF 01J iz `6sdlA`8J9! ,ho\@9~c7V('t̲N0pDoC9m-3iQN*г@(%E0^oG{<'`ՐborN0X~!Us$a+  *VS*'@@$U~-#R9"qljT aso_'r$DB8+= BNX~Aܞ  gchh s$D|p}.@@ą-қvC!"vlA`uoN'[~9"6\`ޜ1H0xc_r$~8PVo5'r Ɋ{߸. s# E$l 7Z~c''E9E`-kŽ4HboRCp! ڃ]VZ`tB]iIv~P܉j(ݿ;䎩iZ~\oK~n [c8֌hQpR}sW $)U~mAGPQ|%7ʉ9!#~><菗ejPNw""(qLܐp06|{N3C0*i8=ߎԱƃsŽ,0 vV# KZpDvՠ#} 0T[@-Tʯ 92'*PqVP^GYU |.kjN Ȝ{1>֌* Z9Pj;^BpjNU~b cmҪԳ 3zƅSp0+Ŏtge=N9,ҏHԙ+ɦg?/±`-5[.\"vᾖ_i 8[|p hj؅k =9 8WC]Ӊ!>F ;4/I_#(2g @wgGYȲ)p]8ժMoNH#@|1.67څSʯCQ)%G84D jDb&˯8!',!cc񷚾`d5'#}B>!sNʯ> Y~-9@oȧ3ъsۅk v 8BNz.\L0Y~-9 @oȧ>#[],b眀.P0Y~ 0T/'`_ V11T6c!g؅<$~9 @oȧZ=\Cv.Lߤb)&|L8]Ȳe5,v^ O, ju.mm&oR9K,;lX]aԕ)'`+:c.|FՅk;$#cc(;G؅kK0$|̀s`ۅk_Ԝ@}Rsvq 3:5'THtqdz[Kce%d1 5 $U11Է$.km$;'<i zV&˯s T'!'|eӐYXV],CRKBNz賓OC>&|m˪ y$k?|@OufV*g?r B>f 06 3:dP켐Bwua(&˯:'`t|:3c%a U~bUQ:+s,_NW],ʜ%Prď.avar @wqFTV-~Dl90O㦐$T]o_ȮŠLސOB>f],''Ĝ)pBȇIc"&0Y~] 011'`PhڅT&oj`fNXN>N.D.Lߔ>!;ܮڅ.L~0H吏zdM9zs~C#1}dMY؜@@!S\ WuۅHL(c:=vhi5@蜀'7K}G  IpzEϛU8@)|,C` N59ct DR0*'ɇAD#bTɇ $'/!?a B>Tu Eߜ@l")1H!rbN r + >xB>ac h:+`Q#<@1ҏQ9`i:<#I3as8Uaz Ķj0Zt ;cAHaH"!  RHa4}>22@?A0PWА4`ղ{p7S (xԐ4xHL9$Aś6k7j(e g}:h RHaH"!  Rt=@38뼸^w7A 5  zDx<@PCǨ8 zDd'~!DD5?1/_p$)*麖E1ӌF%D!/- כ5q$o/-!$Qx";; 1ǎc1ix9Y((~1l`!9Eoĉψ#wضsBV̟{)~󟨢ׇ?=}_GXv(ͷ5/ZZQNur$'ØZ yo le} V&w{)Ι99ٺY3چ}%mO| %R?O<"!fge⑟~`񕮏pW!3+S02(ضsfW_yybu.A4Pjjg[^ܲt}P( &LZ4S^y| 1chjhģO<\^:,jokt3A 'AD;a&ܹJຫqK5ޏǞz`;ƀ1zQ&+?:'HKkyo[ `Ͻ:!th9yy٪(< qgz͋u/Xrf9հ{>uu~@G]{"1HlvbAUUV1 pMj3ģEs#YƓϽmϛ5K{oء+l3>ߺ_ lzK0ixcn޺N*ضs7^z-ͦixpR.m=bݻ# '~0bHHl+oO6❢`ڔӱ޻4WeY5/СʡGU ؤy 7,Z`g_nG X80c8?n,8? $IFg Ʀ%Nщ^}_z!!u!YR~O}\06n»?%Ѩc6,B:q٦{GK@~~xMW 0^//Ӈa1c]r;X~#uc~kpEW⚅Wh߀Ǟ|]`4gp꤉X^sǏ=ߖt_]Y I/K+ޫhs1bxqCI^ҼUK”3N3Y} >zA`Óew݊ErP%]q2.8~f@0GxMEzK8pR.F˦~9*kh`tUDQ08s麚TwL޻04~m^}sz\Qvᕿ|ϗ_#GX&*[o$V921 !uANo_Q0iDdx4/k^¡C 3͏XJ,Z01>Poo؈PgDHF0@Wh4H4 E 87]9\ٴlA<+x⽏>l?bx|YY(6oݹjY+Dtpaxxrdgk6W?v-&\p,SɲsϞfV( d$V9:;z{* łહklҊZvSO?- ,Xk?&>؄z H(jjtMOOGzzzlSnΑWދţ>_QK0yDSG`9\1zI|u'Y ()?yaAn 2Ξq&}[§|EqMך( &2W\vрG"j@HqBJGt508f,6sO7;+ Z¢a 4ܰx!22.f۰0-]I+` xo< Imƴ)b((WW.EZZ|znX]f⛢bƴ)|XSZ0D'y?Qk{C(-?YY}ىkbb~#}KYÊa+mD ( cמͅF%t8VGف f/JWNigS}9Gv^.^[BsK.V{ 뷅g ß^;`Myі@ xg^8, $IsdAAaAoYeƝ7_?=V[f<+]׶ٻ,̩ }˝7Xl!nD$#DERܝΟuna1a-c9w h?8iƛLnXA SlڌꣴhtmFaA>~bt(uDa ]^}k=mx3J$)s/O4+i`$6";+ x{rp%1Yx(,r΀/˲ I&+?pһl14vczko_oW!#E\/r HzI&7'ݸo}DǸnoӵ4⏫נ=9c9g rcs }# $IgUƺ?'m!׼SE|i3ֽ19,uZxMh7:$&ط0@`DQEzZrs0bx&SY3a30z0G]m7"IxٗTl#38 T}7mMM uuxt~~tW|mX>ǂcذB,zІfy7 ;w)c=kbyϢǂa+0rOv}-v}WsT?$nAOf#Ɋ%8q<3}x^4L#>l \ǂigK.<[ڱyvk%)YʪͶs.޸wQn|_4OEuU"Y8`T9`BT ">|+^?4dg`Xa¤ XnL9mW5/f'@ qƩ? a m5hmkl~1IeN>?^~DUw}u;kcƌW]ng$NG -MGOiw|=.pqGKe~k y9@lUxʍ-J@f$QX4 ݿYYz'sfNOV" Q~joo}i\kqx0jG`9mݡ9*5/t5K%Yi6 goML=T\zq-\ U:ΑewW̓ ށcyVCW8gN/! ѱsFuiVa3 (1_! 2;`L3Ό\/?]{/@]8;i ~JM*! H5h(#(@sˠ>3Θ@CAZ{A,xMǃ?<$~on-׾y%ZPQN;U:IA0$D C@) A0$h>E!Fx<;jϷ'(;5i: p/@) A0$D C@) A0$sEIENDB`photoqt-2.5/img/filetypes/mtv.ico000644 001750 001750 00000017577 14134304171 017511 0ustar00luspiluspi000000 000000  iPNG  IHDR\rf0IDATx[l} I(K%K|N (iyA=P>EiE_Z}KNI @nveIeEQ(^gVFT$\8?؀8=Zk0Drzq 0, `X&0La`0&`I- H"~a;][G_N0dsߴU@UT(UcbFz<0a  0, `X&0La`0aiT#%YGa{](jrJE(GlI 2B 9$C$tPEKe(UMDdt:F41Lah>r"Ԫ ":kB(UJEAPBn'P8X<=ĴH'BXBZ7?Eo0Zj=yttbbG+P.Y A(BMhDPU b/̽vX,^MtP&OADP 7Q<(b`tc+,&ҒlJW!cl2VTw(KH%R(یa0iO᭕-j#;R(,-A@頤u+F= WP\iԪmwf<0Ѐjf֕"UdS7;J+D}~+4 (Lܕ̞q7,u "}σTJw(,uB Ăr|і {rHԄAema@DȦnfOIݭ]xBYXx/ND(4If_ @;XBttj >0oV \,g e]=,dq>䓜,}7}qۍhwԝg_94  wו.;7YY~l/i9e9@8z\EO,f9 lsN(,:H! #\4a9Y~T-pN(,zh30:9NѮ(.^Ok^^X ۅ"2HZA0 z.` BP{o@ttu`qX~Mosa0IO.^ذn~h߭-c_眀>,a\&ZpS ! dchlNtY~ST sF`xՋZ; =u$ 8FRV-f!@#BNg}29E !Nh5px ==cڄn|pU~lz{>|FEhsT(+_@XRU Tqw@Dd rXFGx x h$i}vUmxN`ƈ/Rv`B#PꯖVPȢ*䐌P8P8)$i7EJDK5e.io|z~`7IP$0[9nm M9}\O!ę? - Z8 rZe5 pNg0_+pN$,LKipN,Lh~qNek fe8'ivTm>}=v۶ z,U]y=VZߣ\Sh7,k Xp A 02˯hNasy5_+1'4MtzW>XqA 0Mv˯ VNi /X~ cX~ cY~ c Y~ c /Z~ c/[~MDZoN1-VP 018'/_+5'O_5'8k0' R`d62.h5M-'?9PV_"%gY g˯s᳜@0MRd "/i~ZAU{X_P-\ZGWUk?|-DA K3K*'gDHft5AZ9_ RUGb&J9﹏~D]q=^ N*^.giNa'-P ^ K6ܱʊJL$>`˯yilhUUMDx^ B}ӬGjL"pva6GJ$P:(r pPD-A!VN T-䳗޳ud]+S˖_[ZN@&66[5Gl<+C>hvaڏWr"BX7 TEOl/'IP VfW|섈Fڅr._O`$c7Gv 巵x!')0iK.̖⅜g(3c<ӪHKyɖg(㆙U̯x.̖7ɐx.̖最O ˫Յf\p|fmbمR]-+C>yrH"Wڛ _PU\+ ]?Ζ_gqcNO+p]-M9 @B>rw߹.̖_w\%bv\W]-M Ji«󫮱 }%'*p" wIWTf˯;qKNtȧ%wTf˯{qCNqpKs.̖_w㆜ઐ8]]-('`퍋B>-$v #ro 8&DZ XWm.̖_dNu%@h[uazrCK̒m+x؅I ]|vӻ0ɖ_@{MR8[Y]fLl:}XOmp<Ԫ mf˯՗hzm|ZuN lJm9B>-A.̖_Μ@[/!۱.̖_Ѯ@K!.̖_Ѯ@(g!pq[~K;h|iV ro[hm%`0[~Izr [W l * ̑]yc0[~C+s @C>vS3efo0iEN6rȧ4 7x*'`pȧ%ԫ.̖r9C>-l 6v'Дpȧ  wed _-P"JUa 0s"MYpȧ}?ʉ3Μ%3D, r+0)'`Zx ;0-a* @m%$?%40&pqVsR 1øfr*V_jy0jN@ -Hw~ ZTUq"!Cl]XzpDutBEB=0˃3 X&0La`0a C4uz?1IXDаoBU:}< $$OO644o@EQ80 ya  0, `X&461SNJ5 flf?,6:,ǨV(ʆۇB!D:"۫Rd$FO]B EalȲ|ϥbH$PKRR֯/dttt8w\ !,_bbzǿX,{S˲P_B \adtf'"dvX^ZDΏ:|oSyo!dST7o}=ADHn$' gyiGq놡?1~?6!v+gxӧ =N,Bx{z|p<>x}׿Y $Fx$fCrs79=ήN'X_ߎեUݶ}?y* jO>y;ΕH:g!1 M%SX]^,j$Nu^z^vð4g>nvK$̾frmmͫ7l`~vBQw=CXdqa޾kRO= ܘ3bn;!f,Ϊ*f |8Pj4Iv'?g-DDO]m?yj $nOJ`'<9? IKX|ho +Tq߯߼H,&N- @r# K#UB6Ho142tf "<9v2;Dfw O̎0׫ h@,^A\u++ Lc9׮:$aqaLVqiXl`ue_cǖe/ &h.n3XL I('^8(g/~k7Ϟږ,kvԃEeSOJ[-Ce._7MMZ !ꊜ$I|0P8jfTݜR s/'cƧ \L p~]γGPȟĒ$ tc,)N~ EQLY=UUq- "fw 9"/]Ϝ*,f8=Sc}mOϟj04_!0<2lHVV4,$amu kmoܾ|cybRX(酟@WWӇrw}ݶ ޽}^-`owO6wSo $ ɍdi(ԃ)Hr0N,˘z8Ƣ\*+SC9ݧz8IW$'D"Lag?}Sj`s3sH'O;<ܻwAo_nٙYC3P( +po3X`bz]ݧoI T\>m` ##y*Fʵ+m^k]zyI!;mP`ηXL m`dtg;|=5çO?qtǻsA !s]_]چp6'&mUB?ܻS'h,Z8$Iz8հJ C|8n7 ou{Ds߰,˘|0m ttt`t^| f>vz}pwnF?q=z6%T궛پ>ܾw[w{A"&y fgf񳺓NW]MH+׮%ݶ/Q*p?׺ۺz*.^bX@UU\q×NW9|EpR{ P{zmݶpYÀZ IJOG'm !j7wW?O'"L?F(F$)vɍ$VΜ$XLbhGS=F`H4=s 9{&i4>9^wta`% | XBZ43n/|2\ !N^'!,~2R*6zeW|"B~:zN 0p7mj~03%޿s}{`UU108`mӁ/HF19O [[YI# ,M Mj@'%0"JW(6H$a"vvXmf%\ZǣBq.4lW{_oaԹsՅ/ c샱o=X@7o~;|_ǣB:mggfO%3Z8 P184'N!1_BSm̿A~? "dwJf<ƓZhS+B:%$I6Ƣ\ "—eɣmfPT 2 fb,9-QsZ?$a{{6.19]FB#n#VאHBe$VٸXjOc0pT(jB~$^Ϳq9XGBuQVs/ @b0 @lgzq $\8,s q޽}󯱲Ұ]5 UBd L`(8lw#r9|B`<7 (HD7KQ+a~9 8S ?8QPQ[| @``P -?=s0cSsP0CD@ZŤ.(cqTU7108`#> CohRo{v_F MP7>[woB?,/MQU__F" 4Ko~xŇ N:tt|=m.2ۙ m| !E]|?g}W40OZUU1>9x2Jh__j]h%ǚbk2щ__W*EX!RUߐATUx*J > 0La`0a  0%I" 1BQtWF $=mG?0&0La`0a  0 γԎ!tIENDB`photoqt-2.5/img/filetypes/bm.ico000644 001750 001750 00000023214 14134304270 017262 0ustar00luspiluspi000000 000000  v&PNG  IHDR\rf&=IDATx{|՝33,;%v \H\$p醶I x\ ~lPݾl_\)4MZR 4,mi ~ȲlIfرI#iF~>':y9sA%]  AX0$aaH!  #(|f-] N89Z2 +[ EV}NAhDÝ+@>' b@K!  C@ , AX0$aaHQ #NKi@oηu.sB!B2dYf Q!%6$B"YA?~O?^?CȖ $trrže'%  @0@ꅿ%168C2䠌/^H6 Nsu#D!{^tvW7(3X6 Aٹ(X˙3%2x`o]M]u<ܐFЌAQv!B>'C t }h@?Kݏ19$~?&L{Dtzy@NJÏD`Sï$N(<׷C ~?Md4$Z`p{}{Fw10mnhZ?  a` hp)z+bsL5$ Ms1ˎec2玞Cp; Բ,$=Xᜣ5!R]fZ\^ cC_O8z}$:Ap!sq A0*Gsusƞo! c lO|&0׷^\fXg ȲͣbrPFƌL$ JcE1H w{14 ($쒩n,Q .A6CQ"Or|vmCp6-) tWE7clDoWB?Y\Mk0 $8]Nr3w5v{SfUpN 0n +(<ϛW _^|^C2GcDM# { gX.X7.9ҙu2kBCeyȢ*DId $n@ޤ1x:< Y~㥹 7z}@o[L`RԨ`2g70<'0lZ/A$9/c7ߧ"B@-@ H:ɲ\ PNSHDo殌Lh XFp %H&[~c0 D~5j2n@'Yd79sr/1x: Z~ceh?N2RcnFFUc k00׵[fO 1~V" ig݇5Xx{y}hiMwU s'j+k4gCwKwx@vʖx0sN [㚲b-5->A1sN c14mNU a` o|5' {h3  xdM'`~8?]Us. 16.l ob0\9 W!OGק֐]δS<1/Y~ul9s jVۖ4zX.L_}0[N0<̛1vaYr!d 2.L_1~9$>jGOc 79  )@KGo2.Lb OR~_~؅\̐0 |k$ZM$oj0zN401*Oԛ.L`9 .Lb䜀@OeՅb 0 |t$~fY], W|aCG}Gxf7}(rd|4~D,ň9c @C>va# ' $;zΐva'`(Hu'7d5FOPO2\]Dad5F JI1k1d5&F BI  ׸!'v0JGK],9 B>:Յk|r=陝I46P' 0әՅksӓH0؁jc|v)]],!9;.L_󑮜@%xn;؅kJҕHp9ܻi*Vf`hk#˯IIuN 6ֶZLƒ߶t&O e0f.O i0d^'Ļ0Y~3#F,ĸ0Y~3&0t5%/'u'.L_ː̜`ɐ مF :$3'X87d& &V$hvaZd $H ׺ 'cN aO`uaZHH(مzE_+wN@J#B>tC& }~Tc rH&09<؝ (:?ʉEϜ@\@!FbK/'dN>a&t ,A =Y(CA h|ZζГ B9m0eZu F9MQsB>a@ (h8~0$Th/n `4GEQ4W7Ud4=UrHUg0t 9y99V^#˒ 0 $aaH!  C@Fv"+++$"F~?|eT`]:ܹNPχ H]؅ocrj*T Y$ %oS+9,&dߧA@0$aaH!  ހe\%{}d-K=Cɐ |S}n&鲌Ӵ(p8ۇ`0 @D$$A w ¡(:@@V p8EQ گ$I; S&A 8OS|އo>EQpղطfA铧w &~a\{õ#,;{1500͆硸S/fb欙()-ဢ(1?= ~OQ sݸcgmMǗ_y|@o ˙feOTW. ¦{U˖/.ΞÉI&,J&|q9Z\kP<\ᚅ+??&j֐p֌1(;կ#16$eeʰ5e n܊؞?G?_8*050#`#&)"qh!p%9AaY! ޻0w\ղG+ŝ΂ [ߊ@ Z5+.7dwœ}vʡ7cяRa(O_{@(ΟDJMse||cղ3.uש7^{ONqc ΢>ݗ\( T656aQ U'mP u03v"g\远8q ,Nŷ-u4::pwq1is|T|7zV\bzp 훶N^Mw|?~M((P^u5u8 (Oph!p >e>j1O=\wu/:q~E<ӈP(9$faO]|:qJӠX8sgϡL&08~-M-l@0`9UqCm܆ڑӂ `k{?U'c#둝֩P( h2Eu_/q¢BL9}Կ{+̘5yyivf  WE/R-Zu ;鴠 hlhFY/d(_\ni?Q%fB|>M7l'G0،1x{8|𨲌1,\>1BpL*Aņ M{#|i'=Q9ǮwT7{lomܡϛsL8NS•1/.#ktڱh[0kqQes`t@EQpkemQu /U#I~\<[~#N'${cɜs̚3 ţ>koONC`9ΎQeKJK0}tU!187n*6TP7 ^@c}j]oXV= ~EaQ![(&bƬ>Fڂr(P!Ѐ,˸q]w_ƹơ(_`(``8Yu>O3#vc!;'e"~vh!C8rHre!Ј({0sLղu5uK7aAV?7 ěZn㊫9;7Ft3 EF}ֆʣhgfqI1fΚi1@N/ߊ=}?cY%}ڏ+n7:;:#6EQމcWvヿ}Z/ݎ{߃ nx\4y_:M#>Ca[8?ξ5YEx#ufVwW7}1eY߇w<=cws'n].88rrrP ިϏ>ӧNXdo٢2degj,Ĉ(܊aͫ/_6 <\4%%P(3v<Á5?}矐 !IҨkk7#v;A`6tbs3|ؤI1s?U2n⥋c|EAac9Zn|q'G}VT\Ysfzā,CzZPyyyF1|̸t/Y~QXT^"\gÍN.Ŵ:3YP{3.&R?N' uwd?ujUo@1Qc?EQ xw!8QSJv\;tuva{xqw'O$i-<*IR @W.NASg4 x7& d N8zy|Mݟ W0gh*_XTٟM @'`xw37ػg/?CvN6ƹEɉWRu =^,H41ɘ6}fLsB4(⃿}iw}f\wW0%7n~A>Ob),mm8Yu>h3 @ IM}]CPJnce ^n-23O?4-7o`H-T5I EqoĈ xc%+3ΤU@uM@9&`( _nO\2>p_٭s`|q|fg $1 cQ}/nyѐO.9B\Y*RsEEST%zTL:^bs]/‘$|-Vݼʰ9xͨ=W'Xr咄υsW t=$qJPe\{p\HGc ;t9^Wg6? .@vNzW(()-VOUǪ4{"`o<֏Y&hO@#6nӴ%/An^j{b1eMeϞ9kw\IOѳKy}v[ln^.շ 4hZ30ui*ڮ|?BHT`ƦmҼ˱bu>:Q8Vl{Zkc? HT`편PŅLh2l3w޷V=sSJxm=h*+2=M8!aƭw{. YG:lߴ`Oy@2[vݐ1DtH( vl߁'T˖-,Ýw9WJ'bC&yg݁A@}]=NT;r]$3$c ">_Wev;xL2Ҙ( V޸W.W=ۍMnIc sߣIw&N"0!$`[2juH\n5 6nYaw72-8<$I_cm]A0c֌ ;$~Ϛ6ÃDn^nA0Y+k``[ۂ&]E t(zQ[S7vy~ۚNE`meBv1tw`ׯZ;nweT $I{¹GG]xr>pF*_]]hinA[K@Lh"L164!$~;j٩L}5( fΚuoo/U+1|^9{Ϗ{&z9ۑmLz 8{,~窍1 /Irq+.W-X߈=avյXr9L 0B^"Ξ>Zve 5|q1x*6TT-xfZ0Ъ< 8(8 ~7e?%%1=EV`媕e==l&nC-*Ï̝COCpwg7K˱ƕ1sddc#1xjw. t庰fb,umP/xA98ըno֑C?DAnWIO]Q#9OEQ {1cBO14H , AX0$aaH¨N.Ey$I}\e`?> AQuAX0$aaH!  C@v,Fv/IENDB`photoqt-2.5/img/filetypes/x.ico000644 001750 001750 00000025463 14134304056 017145 0ustar00luspiluspi000000 000000  +PNG  IHDR\rf*IDATxytWvjmYd[dY%IX20d$$aa o0 /@@$H "[޴KuKR%ZUGٖs'Zuuw Ad%<'@D  , bH"! , Zv?к Hv8g!Hb;UxCK>y5@XH5 @% b/ (4i bH"! , bH"! , bTDYJ) 0 aPpX(ɽ,fr&Z̰9 DHAļR@!A J{6g &ΐc1f$ߊ<[-I V py_w9 0_$Ģ/%M()CeYJ `2 DQŒg xE~ksp-,ІM()2 Ce#9/A%k0&gY򣪼5`h4@14Ƣ/)Q}*C~^WHdڽI!!!=f=ػJ@2Eۋy4]>%ƶz18FHS|!   X14B0$Д a*JA71y421S! %zӢe|փ1A@ Ĭ'-wE Ϥ յt1ُDB?$ p-BJl(,1H B7$mOק S}&DB4J(1R :QT(J,*DBp) PeX!d1O2plL^ B$YX4WH! _V+]ah@ b>Iwː J-Rdb\ t1Q'}T@p)Vf Q̐WhM;g ޥG% 0ELρGʦs04´KqR\;`87ޟR8 _< 0pIxwMțvdp`6qg0>L9c]b`r-f $f 0G6ې$ ]#XiB0H.C5yf,X9fS$~0987|caC}P—l2.O"`cΐf y90hgԩ``L:1]G& )9K0.-,1!t; fs3 XFKc$VE(a1qD0rQ`I~%y1.gw9$lX9<@ʥG X&l.-H뇊̱+ Xsn '('-$ l.GA^z$ (/(?k-'8J4(k1xՆN昰mSz[Ԭc GLHTRb[ڍUf7rCıyI*Q]QSk-qPN :HԐ|kvU#bJWN* jhY LSN@ Ƹ@E `1񔈀$y9ػ6%?G|`Ճ$IH{+k6%u@B[k* 3hF C%eݔboFqAfؓ5W)' иs * KHlFڱk7!ߚcF+9 P c˵fʋl]wQa#I&Bj6HOՋdo"/(Eme1q 8gRVxC Ql13gȱaZPoEIA0Fo\ks;+ip $BL+DAB0,Ȼ"I`r 9fXL\-noL_}9M(* @\3Xs̰暱b͘7Zo2`5'0ījZH4aR}rI$ΖhahrB@$x[~u.H< F .H8rC@$0@oC9#bKWiQN`"qOHİR7Ihalz,OHWM2W -ᰈ z6|zu^d+yB"o\Gwԉ)7/ "12;| z2O$F SUS\1,Bh’?cqg˯2='`<` EN# kϜ1<8kG NTM  d8潾[9gsI>5Pd '09C yReXጡDX? V79_F#axʍgLO-QΜi WW00g &c_#zDz.dE' }X睕1@مA@Pfh3('  Nb괫v, _7@f O"j1 Md],a%'p>Cr+auq'A_#ۅ3"O$8ƲHD!D rvlhVsM3RS*!x"ۅ8nDpVM3 MN #gԉ !D{amvb&oBɄ@f @!Døs>I, %r#kB>A!ĜCߘS}f2dM X ,R̷ 79{N #࢐Oܭ؅i&oRI@ jǑ'ŧ20Y~K:[. d],)s |zq $&輐va~9ՐۛjtOBW&oJISIBD#_dMk?$|rucijX~dM)CK71iX]x7~RCN9d|gƒiT],iGJRI1:7va%H` |$gSo&o") ^"!Q ]1L7ms>)z\ֆ|2})+vc= Y~R*I18R`^.?IuN u!DjNbuaf+9{ rHT|EҪ 7"RHǛ!\vҪ 7H~ID TnKdua'@r B>3'AՅ*K*rpg^'p.o$;'|z33䓐19eH|([~'$3'W&|(Ư0Y~C2sIQ' 7q p$+'XHN>@< ˖_'i9'8XB> kҏl(@`55^' ׸H\wҨ.L_9hs, ěva-Յ$2'_H|20Y~D'?XI|2 ]xdB'M98coT],YjN`%|juvaf-3 M7'P'Hl؅;'P'؅O1 Y~x̱|8L!b>5 a~,F$t;P]^[%&pL#^ $ vevD`=('I 1^ք|!@v'Z&9è#@T ;D&b hՐ&Ě&| Aksщ0A-[SAqvpB> :G0X1 S A3Dei!X& U8?`X3H8Cװ6ﵫ~!E Hg=8Ai Ad1$ŐDC@Y Ad1>-yV+Adcy٧LU>;pmAd& >sNUnACs#5%"]0QK ̀1Mt$ Ad1$ŐDC@Y Ad11 H J0Tix}U*$ BDH8L&ƹ܎1;Ej:!p8@0=c yVkLUEQRDžj|>ilqKE:s}|004I̺X!L&lyVj݆];f[KKaʱH$! x'?$݋}{4Z{nO( InN?Vr} kpՕc> =3p8g5 dBqQ!UU0^{ػy !I/GV /mu'Ux:UErQ;~,xnݲ%Eڟc~nOǞ@OyQvVA{n}xOasE9hi&\w5^SQQ_Fcbr]Qh)H!jIB͆Լd }..6ݿo7jՃwS翂;F8g]sG|mSO˯ĺ/݋)G=u9[:s+ZaXT;EttiꜭoS6y KQilCAѶSߐ*"`sEj1;3;Cgoj;Ʉ-̀ɤҐN|GЯ-]D۩3>]ĉSg$zk%vPm:;yY-Z8U(/+E}4g >w^q Z8th)}$䣵jS ~};?0Q;3MwEͶ*@)}{I^CDH -N̺ݺqSjkk-SL8 ݽC +p <Ϣa;jkPS%%a=) 2$Q"8vJSz#'ӏ%3.Ŧ}C,xQZZ9&,WcL~77.z JKp7ԡ(Ixxţ8~SN= ìˍSg;ohf8v4_;QjmQILLN4 cX\\Dw"lܯ(.B0?uފf6_6l6lފW]}xϻ?0y?}9@4pC02k_?yz$ E8ؠ=7 O3SmvvlWx;Te1|oۿ]H<Tc_<ع&Ҕ,JDɉSg]L&{ Kt, 0:{g/3 bfV}e%̬YcSN_QDmm ?7߈|oBC!GORlSZRíMOg ;-47'TCȯ= ?Rq\ɔf\n,//kϮ:Tߏ2h>]<$ZSu*O݆5ԠGN"b{MjӁ pkm ‚|4DfC϶<+L8ݒ&ۓ ! gb{QTT}{vaSybۓganޣ{ M'>d /zUn*T @0 wʣxYw%*hEpiaqks#`2zk%vܮv ,niRmY%-3LLMcl|R{eSdrssW-/ư'O+6+ȷ.ynރtjPoSl#":z 3 pͫ6 \Fܗ1 DRJpsg:1x-+wwC0h_sniŢq0Q013׵6@~~~.;QD=x_-7 fs& 7Wȣ(T@ c fE%!ּ<: gA~P H`)M<sNQj++ؒ$h[;`{ 4Ĕb` %M66(~J9Ckkڽx݋׽*y؉d)z0P.4gȖ՗c %8a.̸ܺD{n.~` T1íͲ-7D]OCO|;ww:S'_i3!8z]+~܋֟i gx̎!l(uk1ڸW(FgO?n|kOF?@6-j@.Woo浰O⩧şPd\_x m׿VJA!X,M>>?~]\\B[\o I();݇p Ĥt[D[\15[p;ކ3~_g5ʳůW'3 zXqadL*''N!ƾf1pz0H.J%"z^~H(Պxww%M#r[;V_20$pݽֹfNi'W(= PpKrD b(+ rnzu!9ޞSi>^A,5\ _~I!wq#rE\Js])`0(׳.I(/ԫ(Ȉ\ՉmQ,x"I0[sq;o4 Bpκha\H.s axt~E]O+SE^S$yRPea^l(OD BJef$~&ށAu4wQ@^ ;p J$"+IȷPX= //!6< kneq4u.46@Kj\WicĈ}9%\줧0s]xݫ%7'ˈ`P9G Z8&O|kGCAAfcl¯u'69GNݷժ|x`x70<SC3g n7>{pvm$+瘘r5T0Md¤ '{U ZjgAKS]g::9V+hQEgO< ^v%tNrưwy {|=% Ꮨuͩ6ͷ"נ ZDI67q+o`Io*-DU[nSܳH\w>=qJuFXb<+#|_ }/d1щcٌO~#[6oBue%mz $+0E"Ϩ6-/+ESC}OD pjSςWA+B7+4‹GX,x'0^:چw?];)W\Rsy2tE$fAiyA7je`<'t @aaZKmDdglCgkn.Djh p #mɚy5yc=B7Ad ښj೟ PO e|M UI@1p45&[3,}X妷(-)˭íM؅c[:3qF45Ͽ2q9LM9T.9GMV\w5xϭWd6S $bS~yIPR\Qn7](JQA`v2Nn'=79W 0LkT݆;|#F8Ճ;Ӈ ãuaiy@pyVk.JP]Wk>];jE@_# *ϳz/>[tD2ȝ0:m:y%}>pκp57wQMI@N6[JPQ^͛PQVyod4f<_gf>ϴ Rkΰߛ7Q\7XssQUU۪"ʊHb|EfHIV"! , bH"Q]0"ZfMk՞c'(h"S08|j;U' Aƅ"! , bH"! , _ RۭΉIENDB`photoqt-2.5/img/filetypes/bw.ico000644 001750 001750 00000026763 14134304225 017310 0ustar00luspiluspi000000 000000  -PNG  IHDR\rf-IDATxy|?Ȗ%G;>sҐ@{ wKn[B[ _r$RcR#Ķ|mY$Ky~2&5#i$hg=} aHdw`$& a`& a`& a`A۶bkZHTJv_ B8¡lުoNVԬ7߀(& B]$" 0BMl00L 00L 00L 00L 00L #kf!$$+#0PB((E ?(fv 8i06BՊEȴZ} @i؇G119 Q@QЇ=6!$ 㓓p(â|x0T @8\.هNoH l"d3` pwp~qxtd1d_F @0:@}@~ 8p{<ǃiF@! }IHEOi*0x78?Q !x78Ī43T $a`x dCHpN`xl<]aLdsLte?|#fcxllï%|~?G57~`Igp! SnF' `qǤ@c#C0Bx^M] !pN0'+ `(t JcִP1 yEn7P$Q3L.tVx ۡZ}\!}E}/ugH&fפO1 ;Cp`dlCl#uרDIՍ<^H~ mPJk': P4SnިRLOvWT;&`b ]ZEpnJb6O94:{?!d:w<K>osՒ2!ALj`C{O! <Bi[5d5âJ8_7# &IR %f,J)VgvfI`E&  Ӛi`2#i&µ]N4M9HY"ٗASI8/ٽKj[~# #!ml],'0&nc'0 F Z~51A)E;O`&woqNM&8?]g`9 #kjA#B0`ąPDY~#%2xN #.H˯V/In0T'Tw Hi0TG* 0`J- 0`,bjh FO Ce `PY~9&Ѯ70~L1UoTl?&Y~4j|`FL,^ [~#H9&ы7`Y~#!MFT-)`OWH1BN #b޵:R"sLgo4rN #"V7rN C1bT 0`(&,9 (.I5o)0>N6H|B$t;:H C0H CChjkd"><35K!;z9S[N/1ޤ7R)'@Z::g]k!u8֞kjbo$RN  dljweqohdwSoH@J @@qց~=ƞƛT th(UE41:^X07RR!'j5mB0󡱵 .sjbDo4='r@kj 65kB.Zm]{=߁dwE='rlk3 W >}MhH9u`pd4%+Bgk0rM*F9BӍK)EkG'GR)!t UM: B019[GaBl kVt/ f۫NLǃVcم76B9at/hĄo-BF'cf_u$ 6t-sC>PܠcԷ 3˯:r=: V ]8ha_IN@.R.1˯J)'K \Tم7>%'KPQ]1FЕDs¢ƇvJ0rDn O׏nۅ71h='6(ۅ71h='%6е]Y~ !hN@V'ҩ]Y~ hN@f'p!7Ь#8Bg;]Q&-4+ B^ۅYŜ& !xu0М$*~k0j4%B ģ Mmڲ 3˯RN@SEoO\'p`hD[vaf@4%ă]Kvaf&!prst[B>R 'yW$t2˯&;9 lȧ͆@C>׌]5yvwY~5lN/y9 lG312knI]Y~A@rI-|7څ 2˯> $9 ! \vUf_ %a()0if'> ww'.,C$'!'pK'0d.z M"¬ʯItN ǐO`nua5hf? $D5GJvW5 $r?@*|T5pʯY~uO"HJGm!؅Y#Q Ukx 3oꑨ&sC>Gp`ȫ 3o C㼟@ C> 4ksAoWVRi.9 @|ӣxǻ_%9H!x ") 3˯1gN@U0bGmڅ|b_ !'96!pcՅטt!'9څ k<PEfC> ă 3˯qGN fxOȇ(hHpY~9 4,a!1[]͆I If50jX>EC>소4gεp\|:ކ%(CFzzLVF,8!8{ 9|G8.Z@@w 0G@B> 6P#'b (a0G (a0M 0&TB+ 0&ڜp`hy>`0 AYk/3  9Yhlɷ0*W`& a`& a`& X22`6O!^n'lY?;?xGĻ2!KA ~4k;-<ϣ8A@D,!!xZ-VdcѢE(_"愉AM?`㭿W_ODd?ʊrl߶ Jxv@CG׾q/ηD! HK3jD^n.JK +W,Ҫj@!CC;>8ȟ(+?k غBFFGozB`Xh"Ԭ]/ۅ=wcey>nB<샃8|E<{E侤tlc66῞{jjpp ףH8ԈM_H*K}mGNNNLflc~#)\.|Cܔ9[7hS55WG;:W^Aْ%kU+UB$I«1S妛F]CN_Cv^#| qƦf465Cp'?+dRau LD{G.ٺ5l@}}xꗿ?rp$2<$O |;?$=zTSCZǃxx[Sn7j#8iD@͆~ṭB<ぇx\՛t'O<{cc㪉8\T?V[&t:wF?QFSx?i%CMg?G~t^q8sCCQ}ԙIݰD~J!xw/'O< xo-UvEꢎh>8r)G9|%U8lFOvI_ _8}ppgrB6@ ApmK[Z[!*9xGcs3?+>Kwɟ۶l$IydefCw܎_qUWΜh(j^} أ :DGq*꫑DZ6^B)q8pX\\3ve7+:FFFwIi X:0Э]O<(۷/VJ)222pާkʅ(FrqZZ[ݚUe&,** ۮqLN:5eR& I*+ʱ|2E'L|aoBxMouoGE,)-Cر}{҇%%Rv$'7|ˆ6R,[Z][ ]]DjU PJa6QZZCql8wcXoU(&="sX,y>z< &++ k׬bmGp)60<ÒaQԖJ !3Ptk>p*+U{cSJ5q;&(-danGcSsvKJJPUY ظa}XjkSְ`(t|am 3g,jޔrJs+rrƦ& aۭ\$ WB^nn'O&DTmR.S χQEm򑞞 ):^YY֬^>y==x7d`-QIp^6[qzC$-Yʊ;֖r 0066E*'`|brrT2d|B%A}pѤ }۱nڈBt:Q/cMOKo9Xfuϸ\.7Do+20EqxQtvuɶy6nq ްcl|B_bҒ>cQ1霄$\4Ndgg(23#^AWwH+/&A g cuuzQMh&3B Ӳ?ݖVWaqqp5"33.kϝ[w)`0A%IBm}=~cSd2`||\L&,.^%gU;jݟ/qNYV]$TWU- ~nMXZ]@oOKl Án8y 'NSahҥw**t:L&re Q~_GK2r/9=[ng?I\{5Q$O ێ8l\\ H ?+W+>jq}ɾlb{2)YYkVP)[q`fhxÈ!%K8,_ l݊_~.ٶ yyD1>q6 a̬\۸~N sFzɺ{p )8+BI&fJg=>QEp_~#\_R./ Ӛ,`B'dcee(//{#`HKK S|K+zzzv&Fd2a/ {2 6B0v͹yLfhbnǀݎ}w:~ۭQXP(Yy!ӊV֬^ܜH˗} /3Y.e,!Y(..un>\wo&p&sX"vqu xWp߽`m=\appg6ʶݰa=L&EJ)JciuuX$ nMS & @Aͺuꗾ+EzzDQjt9Q!-!==}~(%I_݃~\E#M΅}p̎6R Պuo=ΉJC)3 Hv8ֶ6,! Ŭ8xmhUW^6 Jq߽f% yСD2eڷ`\$(BxJ)(-)mz,0q;:`kmh %[9 -@0lR|sw#=La[Z\f3֬^ݎSϤdxYY,Msc Hkî;!ttv*~H9æ~?^}5]\pnfSdCC8sQBޫ99ȝt-m$IBͺu(^,7sϫM# Bf};p15ֶ6:"+?,:+k[&D얯{u pY8_Wp`?s7al͛uE$I5W]-6)jܡÊ(ݨVpd`bb~!?q2%~ B0==䤲%%%Nn~>??7mDFFV mc8q捛`0J)*zl6>_p xݵ|җڟJ)x D\ $ʗ ׋_ۿБ}b`iuEז8 (*1^]U2hJBeCS[OiI2JnhP6 8wzcc g) fGFW^_8P}$BgW^z~Dvl V,[6il}pPjjEA+Mڞ:}###]ds I%㎃ٳ7O=5ǖf*|#wGxCDyY!I"&Ntޡx߼y Aץ1`GyΝ(..hUE sJBX$dbZBv[[QRRy& p?EInKeNQZe|bsssq-APB09DyXnmT 7mk Ԕu DZg]x~CpٮܢϿpDF)EE{P^VS$m.zrή.dQYYzaMj6R&a曰T_]\(q%x#?//aC5'B\k'Bpԩ;B_.yIf*EMХgC=N$aiu5|G@-7݄Gz 9+Vhzgݗ£~S[oټ9}Bcmv;vC6M@|A<ǰzʸ? k4'yyyӟ/$֬BFGGq)`CMMLJ), l(X]=$IL IV\n^QN<7^uWqmX,e/~$6nXϣӿ|KT8-mm=vEy9b38PЀIu @)m$!IRԵx݊G^ĠLAK -Xr0<?#| 3G11P +/7ހnt%TTq0 ,V rsrQ^VkVc%۰ufTꗻ^aw Qv dXTBh@n8w]ظau+$a?Ƒ(E0g!DQ5k݇D{G sl6kcwٳx?hm-l6Fx=״4dee7nݗc(*ŒRf|S}p袒c' Q)/ZWEO 4Pu<Ap1$bHŐ! C@. \ Ap1)"aŚDN!0@BHē*b$IɤZkW8ףQzp0>!$D!0 @(H(p X U*$ٲ9cP8A~҂J Pjb@B@d€xBh#cEbH`lއ!%*W?ϣ0(-̃B c`H BM}L6T;<`eEXVU@Op0$Ow#aBj ___ƴwHqUcYU1^!Ȁ`M]C kWHhX45u(B&=CchD,b`4X"kVq( zB9X2{ОB8 o+ 4!hPENc@8AD\_!8O9|"@U{Od>ӞF:>w8ш%t:Fh>X$ K$90jUbq<6>,@Hx]`L#@d <$* -&cd"2`.&fۭO?Px2GBP(km\' ++aUH Q!$FX,$WÀxx&*X4 2? ,IlL{]W\80NB0DrV / p@ \h~4u |B"Tm5BN<8a0`ù>Ǣ<\@p5S{ M,鞛hhCt<BζJ a]CZz'ʦs5  jVN0;TUZOΜ'U܃dYyw͢pQ8 f AtdhEB0~&7Q8O$qǨ8J:,A}eɔ J} VYfo`Eb8k$ HAMY*K-,Y{)'>$)PUe(ZB*K P_YC1_f('$@A5uyvrĚr8S.S9 wQ,ںrx(ᚥxs}9A78L9=AmyWQ:(aJ-B9Imy!/ʒ|l\QB{ؓu7SN@$PQͫjP[^Θ)B fFZYS ˫P97c@0Mob2'pr i{~Y*1D(2!H)Q8ʊ򱬪NN8ߦY~ͬt%'PeK "Eywd H Uh7Kmj %cy䡶a$ݳap4U ]Rh9Bt_ ]2񨾤e1<h8x U*䬉.< ?EiAy(xDwZUU~bؼ($pJ D.(D@-9CSss$D N oL  À, ęHHtqjNuT1it7K{xs#-28㠜k@=# tᜡA9w.v BPC;"Κ1 Ho&$U'|` CcxbF1 pɤ3Lc;xӏ^&pBNp4 f]9ch\7X~3czN"hH&hx4u_MEtohhhCsм7/;3Lbq78!'L` 8u'e1H, mmEΤ7o&='<` cQi@,՞9cHC;bd 8o6zx" Er7 *@[Oǖ9G 67a3}hlsq*@ Dmp0!m[T%pbJf]s08ƱPM0 #7.zv]OXG;05fC0s]XUUmC5k*v G|:C>Cc[f3d V FB>cќVR.L`-`Fwp=d*V X_B>9gmuaf+-3B>ֺpMd 3X/'`] 41p=dIae`*3ĸ?{pՅS5䐏 U8؁^ ;k K![.Yڅ',Cd)Wrbk @C>FPȂՅY~mvIrl|̀—,T],*9K @.B>fCck[-`&˯%JNs1)ro&˯ur9 ^&B>GXX.zkY@D["G_`zW3i~\nª\K/Y~- r*V g 9 OY~[\r' ]8Յk&s9 F&B>-1U&˯H 39 d_pDŽZuaڏ\'u0k%;0Y]Յʯ\O {9 B>fIՅ*%9 c_ 8.l]Xd3 dG&B>10m} ĘjNڝl"jRs 00Y~C6sYs}hv@h qd+'`x%;`Duaۇ"c*'`z |1EU^.z T'伐dj&˯s 11'`И4-Ҳ pjbNxpQhۅT&˯;03'`X|%;0i~\ 0Y~] 'B>V^p0sV&˯ q{5L1.L_1h31@!S.<.L_9CS9 |LEJ.6a&˯1:'8Lڅ4c8AH,.蜀g1NR'+Lڅ_: IRls/+]UxQO 1􍌡g˥&֠4"'P''pџ`\N }Sȇ rQ9`J> r %nXɇ DR]\N@L|'؜>3a-CB>aYf{-RT!pR7|dHlƥxN08҇ڲ"0HJ8zJUgHLs/*Jq=gL-:LAXp1$bHŐ! @T lc#.YJwB@a#E|,]J_R[7dM ?7KPU {u:h \ Ap1$bH,jmNLLf?j2UrYLcd!! Zi-965R8Կ"x$~GrJ)'9q9<(Wnd9qsW"Ȭμx<x=ߚ ::F{W7.65]F8>%Ũź+~Z\EQb`?` p|K8 JF-pɏރZ!L} /:rVf;naxx֑fqUpx=|^5UX^_˗aŲzTV7i^( ^oǟI HUƈ!I44^/G/ly !/QGAEY_o܋7rm~c~ L/Ggtfkq7 }xqe߱eӂGgCXR[׮Á}75އ ׬̼:?hq˞/~2, FgWOZH&Uz8x^w[ yC(..ZKcg_@GgwZO5``is*BB82~_’j};%͛T;Kc6'# '~o|{h2g_Ox/ATUUZ\&\niƂ "q DQ]ݽ}xO-w܍144hkk?)<_1Ogl,<Z;mm}i004c'O!v<GpMcO7.8ǥf|CG?}k:Vg)%^:t bUT9G{g4\s/CHKHՍ}!O/hlk<g8yzzr}3O< .>ï~\p4Bê_Gaw 1HWÓsgr}öo2al,^Wj/hG1*v@eErlB'08<޾~CiO9|q' ;VǃRN?9.])_+}F]ex< ٍs/l v~VU/9x4 7rK3!Oݏ"99%%H$Bh‹?{Oֽn/~;|GUU!^uuQ`BJ~I~??1/61۳ |=8x^TUB&pM-_?|8茹8V~߄v鳍ŪU+fd 8vGf+?/xwEumT`QP[7cMm?=ѠCl0 ̌uK|i W x/>>goeZel2W-ݬ%Kj}] Gp9QjhޟϽkuڜswQ]]$S-)gŊeCw{+/00{K+eضyO4tL1C}>vEލ_߸ΨFG/#f?H?g 8x[ބ>(֭^]m ^6+N :s4^=Iey6o\{u[|Y;{r3 q\#NkԵyuU%ؽ()+]\Hڿ|eH[7h֯/\Bskیa'0vͪXNW\gyY)/ӵy04X<SЋ!mmZ-ddӏxzrCcع =<=(2w(..FJx^<9b8;kۂ|z;)|)%*˰uӆYR Istv1޹ &:Τ*u3Oapp.|5ksffXϋ;c'&lSg=;+^^V6X"ї^ypn۴'$wB $c&営)_U+aՊe֞e 8u j ɌIou`l,k۶F{Vu\\19~vlyƒ6m@qI{ցv]WVU"jC"ףs_mW PXukVZ;!)$*+ʱes8_> nڿw^@J<¯70kU+{<=7NC&TUz[Rԫ]=x`-fygF<߿ߕcֽۖq&(>k /2xMRmF%G $;mAAA>Ȍo${f .|QYg L&Ս^ }ۺ]TUb捖 g\ߓE[x5!^=8_5kWaYݒYؼ>-ף4=8tcG)%1tul}8I8x=v`*Wm IyGU!kқV,3f$AJTUV`kӊޱM3dq<gWuRH$ɌH}>o?/YƠ&9y~?8+CEQVZz]ؼiiC}{vч?eȒgK]GAAA#@ 0k~ݬ~I Yvyy^7؇&ٵ^y޹͸:W圣D."SXVW-XCn5kQSU @E3I3󡸸5UXbl;l–M5۫W[/C&kz<UhuuK0X=i&.j[W|lBo^w=B~ QR\"_)t1ك|"%n `(nlܴ+y?>~]#ONZR>i$ 7qr+8;OZ;ub=hXl)|>oJCx >ofOr!ϒ8@[ķUUI6lHQZ\+y)xbB(s]gnSqj&{ι~#$bi];qJ^ CJc6܊>>k1)ž=tYqz9#(n$$={߉*] aO5w]׿.iЕ l?/oqx(>W1:2Xq@Wţ/(k_jآvS|UsLNqb_?Aq~?n^J__'kY)Q]S;rꌮ%τxFw7Һ% @Bq'Ͼή\_fS! 2l_1|}q^}F(!߄6ɧOu5Xjj108K[iEa zVGNi@rG%:{\-8C8U⁏M 0qpR" _'|7,ٵEE-6BKse>ښj|[h0dʟ*+-ww7 l$#&(,*goو/[8raU^/ۃ>Ar~pEml,^BH/M ud\YRBFٵ?~yNmxѕBٵ{[qnAiy2_"LqGtHuZhnG"~ׂ{%fՊe w>6*.oK7|^9Cbc kWī=mߊbR%e==@2c±p=z NXCD*zg묎kzLXq1IEWw/::?QǴJyy(/+Œj,Òjj,Ǚ1F5n=Uw. J9Uceeeشyv&^%¾@2հs} |bHŐ! C@.&[EZ' ǣT/E^f;ABQ8єۥt\h \ Ap1$bHŐ! Ptxթ-IENDB`photoqt-2.5/img/filetypes/jxl.ico000644 001750 001750 00000010323 14134304151 017454 0ustar00luspiluspi000000 000000  PNG  IHDRyIDATx]Y{x7X\G ı apC"EQE$BK"|وBp8D$% #pk{3ݕ7;SMwO__Ww__3PB %PB n`%Dh/馫˩*DIFNWU0:(:(:(:(:Xă겈 #D\4 E n5Zt)'g'S:D5RM1128 B&-Qp ۷bc<ٸ$NKd_!sQdѾ,v9]Y@ ޜsN$!}8}6E$g^7 F>xbDu{G؄ >cp柠O ]Z<71A#|":BxjFuA`Г‡h ˚-`zxl88yZ{"<>`I`xwg"\ Nv?@А7 `RaR!r\0= .Q!<`HHO)%\qX<06n<y $êQe<$l1oZl5t*b ;HHTKa<8 pU`Ȣ2XGPK$ E9^X/dRbV0lDЙʖHW% u"Q5UIǮwg@-7k>/.@*'Z.fHv֣yreIM̞@,^sH*7U[i"W<.'e,,PE1`X*v K%Vv$e/L#NR:OP[Ț("8Q3QO93:{uH!}>ZFWcAt" F7b\GQKj(J8AZYYޙu!.h$g`&^Kfb K_3G@X ,Ad pc,AT p,[,%(xO8m ,AD ( v<0,A4 ( v92,A4 ( vFYH%cSza)Q$[3f H"% ""A K=EA,A,X *#@X385E0CQ#`6'X-A_K1DEf3q(ZH`>-A̗%"Q" ?Ku[N3B-L@~,AB!?4Ƈ%_'>ۣZ^4 |`7x@x*k׿D%[1B"%K@ToY@3~ 袲Ko=yh%Gn_S@OSYK|uwDKe\E0s*Y_d[Kj };KnCpOw;L w(6چ]"%'O+nm D0s:)K oÁ4L:Pd,4i{e! c dg{[`k0@|!ZsjHrtәS4q`80-R8HsryƓ>41f l dX 6fb0Dtv f j $ȶz>Z&Z ڽ'E0 1K Z`Gibh̄"f D X q2^3MZK >"8̀څC `k'._d[*f!` p@ܣ+#,n{&.fZm Dp@ l螖@.yHD0S%&qAN{`6/KI~KU[v|QX nũW"Yw'&.fjaY W\Ɖ,[wD- -+Y q8_[[j \ 4N\| e'N!,/s}b '.̝, KLₓ;8 oUhD0gK/ =}"'X> YY qb`p%p M CLN["\@X4q"i%3B?eC ,`wyMZ n܉E0 %ġ`&ZB[ ~]JD0VZ,m+ xNg[&`&%0֞:I0F/ 30p JK.@E%`9 4P!,|}-h M-(`-I@,P4a&Ű@k L%p%Ά2›yQע:J(JLM$Td _Vh?N+L+CYC_H=sTPP ~e"t| Ч`[FϷWRlwE*$~e?8YǾ|W\f!o>ηlTxt K]I}[a$ݸ#Ϧ'g ӟ凕pi6,̥3Fc74qfGwo m`lL{t)1Z\hI:jZ;|znJ伲1{>\]Yon'BpDڑօo}֏E<;exU1DZݪ~XAl>*5=n۫&5>zɾSl|OZ\zw@̇\yoQI yMm M^/oqB}NX%+ve$cMծ&ܐUjo>ngŊE?2y~ݽSv_w #QS.bn{bMs#A.O<)!Oݐ5+[fz+x|ysll d{>s >-ab_rܵY;#l[9Ғ"x!OzӺrldrnφe1ֽϼ7]#ij,;cc3((ƲǏ?tyc"35hW[;q-^]mq˝Ts}=OոqkY` ;7-|zMhK^_soYo3Ϙll_tl0ue;_<ËY: ݑ{TWm]e}VZL=m2Cy [R3!/_~7.Cˌ3?I]޶/Y3 WlLH\}Gh2k\XFm&F5h<.Rk0a0B#D!]&7"$7PP -S5٦2aB؇#(J(?26CZIENDB`photoqt-2.5/img/filetypes/dcr.ico000644 001750 001750 00000023200 14134304107 017426 0ustar00luspiluspi000000 000000  j&PNG  IHDR\rf&1IDATxy|\U?;d$MҦPvTDRqGDAG(QD(Pަl͞I2̽<L%ܙrgnν=@ [s] r A1$acHƐ! #'*pX h9+3K(+O:fs"B'$C^4M*$a"}74@6 l A1$acHƐ! C@6 lLB+01;c3!hMV"wPE(1(i8e9GdIE,B&cPUP(A?"E&w=cYvtEp9Hf c X#c^xG y/*1AxG(,(E%$($)j*FƆ?ԋ`(MvzƔG1󢸰s*QTPS%, @ 00"Awcdt1pOױiC s*j4?@yہ`($1(nC̫^M"@$X4#*FƼƢEb"m( iGL^⣁`(VA]0yU9而1AthC($  @Bz;E?QE  p0`ad̋\W$3Ș2Ca.Hf א"EcQ֍0$2]c >oGiPC+H)`!!2r=#D# aRH@1(T{h,)B0 4 ^ 8h,H4bj(4heHFLc3G}S=@Ї] |G:!X,j!)PiF,"@{w:a$S1S T͚#a]=` Mz #B]'`:E4u6# 1@(֎&a6$aaaxd=],T9wFic\u53D 1sLy"ѳz& Ȓl dcEPč3>2}2"$Sp䙪aI\,;L5qX,&hhh4lX,MDB ϑY6G}Á. Mj?VK _!8xw䛦anH&p$fן>-bH@d s] ]pQXPd&<'‘0Zma$SCqQ)y|L3Z Aڻ[us쵎f)B]m%@qa s]O{W+:T5h] @YOYQVj:Horg%E6!\Nc()*CEY~S{rIB0y|Ts]O9$ j*Z*-.ڣP.ē@RT@BEeX\w4/#CPUB@WفbU$Y11oJTP5-)8 ,B@,ByPA‘E&wud$.Ap9](,(FQA1.pZ&Y~#ᬸBg~,YԒt6]BQa#BESbPT,!ȃ, #6Rqo-mͨk|EI$ifqqƑG~SWy;4ɖlb 8@a#+Bf|(??v!ݖd TO]'Sd! 2J&-@9! 2K-IVrA@dlX~SB@dlY~尜  2lVq~$DflMuQEDm v[3&rv%]ff'@@rhM` "#dܾ9"mLX~GskMub4o5'@@Y~SAVHYc\o1f 1kjM {HYato*''@@ 3X~sn[H17TME rֺkDV17 '@@,buQhM X 4f& gݽXr`G[~S!j &s$nbM'@@Z~UUXf Y~S FcD#ض V&sMSZN7uT nACK=T ؅Y̐0T=wO,L#|2 -{Lm>ks0FO$0Ol1],Ƹ +䓉zB~1],9C @:C>3Aمc#oᜣǀ9ö|2!\WEXmd`9 &2qpQ8 0d+t'ۅ"˯qhl6LNp+[!L; c>.L_C` %d~.L_ca % w1vV؅k<0T/kL w~uaZט%'`6iM'!КՅi_b@(!LWLaOW&˯1BN H!t?Ǯm9 6'c0V'p1<2u0kcGsY0j'3:yu b(Zk 8]N '`O9pGo2Y~͇9 du; bo. f.L_sIN 0Ϡ B>& awCd55 d1k1:v.ՅkncYO k1!|2Vh&˯ᜣ; dEC>{L5ij؅kY dEhhI],!9F|MdBf!'bŐO9dޞ&˯`a, 9 UC>3mޕ],V&9+|2?.X,NZl'!~' ɟתpߝ@[B>@d 9C9 C>Յ[BY~mc & ;Յ^],$9 x ;V&˯~i  wkO2{+|2 -{7p1ڜt'0+O晰 7o!ژtxrȇ3GϏ{3EQHlm~*Y}Um렐OZ:ˉ s'B>)M84'@ҭB>{ҕHZ(C ~I |82^tRȇ lsB>al9_ | 4'H(B>adR $tD4+ AFSUv4y|]i'b"A!\#JKqGֆAz'C@6 l A1$acn7N'},$3p8`08cp'?뮽ܮAI\BAY&.R LcLׂ4 H6 l A1$achiHvnє㌃li4 BdYv#/ߛ-ff` "шnw&!0%`+$IB󡳫M͍hmkAww7P5 $Ò%G%Gcn\\ Ѓi)m#7~}gCw(_g"yH࡟>$%,$IGAA!JKKQ]UuX`!-Ĝ9Up5l#Ivځ{544wx1{;N̙SNX ֬ŚbEx>s4652|>G"8dnwQYQX`/Z(,(c JLAC>o1]nTVҥ¹'w" &#wߗq0::юMǂs?znx*8spXv28.Lf?7*@ @ />XBdrzȯ_ۓ ! C(/+<TD"8Ѝxk/7~&jn7Yd;M_|q=^gH$.~oO&BNĺ}'BMumB$Kٌ?ioд|&<3)'Ƙ|k! @7:{P9>ŜO'~!U14$9&gx?>DYc @rN4={vAXi~ˇ?S2 mD%SW;!v9[D4MN.=O>-74<&ع-MI7Y\.7>l\nL6N߇>XR&rgp ·YpՕ^ MBC(Bo_/cv$Rk[+~@ҟ4M7Qo88O݌3O?Htb1 ē ^{UB\ A̯6y/J(߇lڼ O>}юEI`,;i9>.@4E__/^_ȣm[tO~]U+Owᙧu|͟~#&5U5…_~?ؾc[wuԼm ( lۂ魯9Yi*E9UU!Ijk?<֯^V@3CRO*6m~u3܊ x<(2cgքEQv7<~:8m_ƅj,{577!df ChEU0߻>\uպ+/%=1xGشyǿK۾әЌw ĝw|i"m4M^:FW>d : i*ƒKtvli9޽ؽgc{</Yg Ȅ_/,v^1%X4J## 1\Q5JWm۷'lHyߺrpՕW#?/?ח#-0PPP00%$YB4,Y|\WV (1 A1>|T:Qh4Z@+B^^d ! XbCÃQ88ӭ{+)X}krʆ 0p't Ցp΅6#ח!-0аOW(pXF @Bn*};a6t8jѰJ$ [~|e/d!<*7AGt/QT\?W+>Ѝz>_\@gyNnH E(,,Bqq#a:kiuZdI,S~4 ~[m~CWtwkqq:S@e(,,UCQiN\ظsSMLN;wn1::UU 7B@ed1Dx"TU(UXXY6; N'pڪ !9CgGb6|4ME4;x~^5s}f&]yǗ?E @I>i*fkB@de\;,Xbn\rѥ;!SCe⋇聁aw[Xz.N8D\r Q5j":LL @-M<1YhBQhBpxEwW\ UU_'"1H$|~~{ ! It{B4՚aڽ_ڝx_!XN2 @)1]e  dYE#좞dpp{sԽAu.ϘTױ|>\]ә}~~pB""1b̧/Ts>19*+:##[0-s?9UBhni3|ǯ%w -vFd20߫{ds:CWw;3?O;9<{[qÓs_@~=[ܵ#,CKkuh =A&|U=ry_n޾^<ģ4I,( vܮa~m݌e&0v>J nbʅ15M"֜Vo{Yl߹F wm55sQS3wFk&4T`΅1܆=ݦ 4 m_@YiYxbc옯%Kغ} `sP^V>@-юp UUqg]s/F 0gK01!<' Kj5s8X}ލUUFF28ysl]eh,9˯lֽ{Oyy9N_}&pꩫu/7/89FF *b)pڋt 4  Oϖ[}|:XK9VW4VT,YZױ01N!I5Wv(tkף(Jx|L @asY̟͟=W^~ts\(sBgWgR"0nJڴ|‹C;CP64 W޳FW?oz۶oQpqhZ!4(P(>l۾ = +p '^zMӰ p庿2&|obU$ wPU 7}###D.lE{,_w=^y*x|8e # |i3kn8 @?5rݓ$ ا0ww}wl}b_^\}q%c2 X,k؋o3M:B\g_ٜ>WAQÎ=GzXB|kRri>G{'ģ_ys##^tuw QL6B} AkG?rN=&;\.-  qc㣗T,29q$VwqBd H6 l A1$ac~_ߎ  ˲.#[žo箟1Efs~3aN@ ! C@6 l A1$ac#.W{IENDB`photoqt-2.5/img/filetypes/otb.ico000644 001750 001750 00000021400 14134304176 017450 0ustar00luspiluspi000000 000000  "PNG  IHDR\rf"IDATx{p՝￧gF3FKB08n n6)/lH\JnȲM@VY0ezYFьi}=c Ytࣞ3>>} W"Ap1$bHŐ! C@.Fk.嗟UUW t"~$yov9k_Y&  I^( ,+$a+8%ɗŐ! C@. \ Ap1$bHŐi&1` +D!0‘N+Hd2dYr0%$I+ IAEc,Jb||XiȲUsF6c H@0 0$ c@* #!KdsYHSJ" PD0aL揍 #Od,sɶMN"6ZrUcT Š(ڳbw|fPUp8XHpH B_(Tf1Ȳ$֬i@ %  OFF&7TJ1eG$2Tjk6"  @y022ޑ~@aItu cr2Q& "8FNeuLMHC ȁvM/\;|}Œ #"D@UY殛 + Xƀp8H$n?P(X XdRF(Zo=R [o} X*SQ$ N+c~.˪HXy`ar2ﮌtByc|| bWmT:`a", <ȲX, rs He$iKOgSSI[Vv6s`H&Ӷز%JbwdA2);`R)VSjYVNצl&stw{}}a $ϔSa5|a!W!LNN 8uv^TUEg4!O#[jH$ΖMQN,H g=Ȳ.pR D$ZPcAΙ3 #?Gahha Z+4z{G0>>;1$i<9 +c,7OAuu 099aݿ# gD E$Wxҏ55|rwŰ5X,`eTHdIW%I|2OgfyBKTYv?>΁ܽ)ٖBSCE$47Zehnde>o!Lj('/$UZ.\*g 0RN Hr IṾ@vTSfk-tr@΁J/V^v[΁*V^:2=>WdﺫW7"k6Zf6R,z,@9Acc5֬i,L {om]U|,rz!ȓjw^*+Kw `ݺ&-r (֯oFcc52(9$+Vaݺ&Ll, v$<ںBPU^݆sQPSSej ~ScXy !(ε 55D"qÓŒ @&`ЏLɜE9a!)[ٜ@CC5^BgH8rMMA,YR$&&19t@U9wDQ{  {>V8mYol_ذa9@`(Ȋ/JHeȲyDA$ zL5`p4([(CX~YLOBE7gۻ᚜m-067`d;:_ܽ+F[~$m- a:wpoPN\HS,F9B@߼{C9@@F),r$i̶ZiQN`*S% '9Lf[~:  Lj*꧖,cTRr~$[H97'@@, aV[s$!X/n a-o!1'@@U-|Hܖ  Bʯ]9(4-"  co!h93 c7o>h   B[(N Y~P6;'`GsH,a[Z~%qfNȋcsqrN[~9B7BpjN p7_p(?`psജk1 LcS8X*h'\#qNȑ>G8/NO3aX,Ç{0=pd99 c ##8vlWA_[iȲ3rfo>dsNXqdGf]gX+rwҸ[( 8ZdY{X|޻c@{G(/NO9ӧË^>z ō|q~8qb ;4tXg-'1LLL鴢k?#H&{p7_pR201\{PwOyT9'(\[h% N ԩrAsN1]ur?>Z0Y~ î9Gc H G.}5c@:-^1,cל@;)9҇xܘgVbd.r͝,aǜ 05cs]XF[$ZN`69[ 쐏m~_t4oVW+&3bYm`Y>UqϩSC0R A.<v vaZ+.V M.|Pyd> U1A¥ ;'P6j >a)T,9C>|g}}}Ɠ~(3% \1R؅kOcc% \1luasd3 T13 3ژ9RJ&v Luacœ,6 D1i,q:RJ"N]8R,Cdu D1p_QN0:RLO 0vcvuBdu &Vd =z:of'˯)EN4pr fƒyf^yxJ0E1.|FJ~6OA_"  7|@]x;D_cfNPpchW&˯[0''`9c43Յ S_wbFN0ps  S_a~|!k#˯;1c?B>9pΜdu7F O.|H8Y~]9_Oiڅ} jx 5OȾ r $)Hl  D1*'Pȇ  -! t c OSȇ LN`qK(C֦s]lAX!3@NPU )4' xt5$ AXEQBCC>놝S}  `AVȑ&R݁ $bHŐ! C@.& 𣢢$"OmS/_L[O]$<[˿(d yDQ#@.I  ODQD$:%A ^|cJ5|7|=.BH fal,oQQ^z9&"^|,j9A I ظWذaZZV!:;"ATUŞ={co6ɔߏhk;x[?o|hiY^ TBGGWO "w3)-I"pO~]w 6lXQItPۇ-`ajj=nnٳ7?Q'?m} {]P@EfWȲQ[Gp㍷Q( :C9`!㡇~1a+_w@ #8}zv=[o*yrVE`!N_䓿4%ۏ{ov6uᥗ^!q]:3sϽ'aӸ.V??6zX:+ N=㖪:W_}ݺK/cǎ!Ux188}cwΝC}}mf! :: Kk8|=lvs:#*1px wyNYÏ~muA`X9c. 6lXr^f^etwb׮ů[]ÈFQWWkS! 0 {]++wqΠٸq=aӲE8/[7/FD]:444. WƍyV\UUuWZ?vl0HfAEsw|֛劢ҢoٳETU(j^n|)Ruus!BH } T:gۺZ|Kb( .`>t ǎӢUTUŇ?+W.VeNY0úor16mP׳ O&gX,tX9j,YRQo+ ,A@_zzt߾rTUUcumH&>%G E ,c8ht_Ζ1 `_02~K06ߧR)]w6'6=$)n<39[UUo $I@pG8<ҥ usTUU+ 19hx^' T::Na?F'r>* @Ƙ%@s*+ڇO >s2ioQ D9k0fټ"| O0$ǧ0=նxzv6\hbCw|cpp>;rWO`bb @3Yz,`CIvQ=x<EJi##a[o_I2; 7č7^`Md2p8nXtc_P;{a$g||&c~k.X֯oUWm[pi. lc=ݻ,*S•W^O/< z09PU.*՜,˘ҷUv0X[욀ȲY( l߾ O? Wy <3z YzUWDfA0 UXn-riP+11C:ka*¹P>[Ypα|y36lW7F8k!k"]lpQ!8APP۹zȜuu5ǛoBQUO=1:w7"ǫ]Խں^ W^? 4&&b/BOiݟufx< e 9nS/{>^~5|C磹y){q)$ _ hm]?ZX9v ;vl/y<|wIRِ,KUΝmLSG>rٜ[ XEQufmZ6z<}ع`չ@TUM7]t:}a93d?ǪU+ho (+;&v~v;q⃐[>F<;}n;&/ooؼy>qDccE$:?_*7܂lݕD~UX׷K7a˖Kqzgk  CbŊe{sMxװg8vG1==}"AuuVZ[73ف+؂ZZ_UUo}]Pq[yQ__%CuL=!ȓ8[%qN 3B$E" DCC=V\+(͖;wj;հB$K.G?zAf vY!(x^Y --gYGn@H٪ʡ48 aW@. \ Ap1$br0$5޷| l ط@v $BkbHŐ! C@. \ A!0YT1$IENDB`photoqt-2.5/img/filetypes/orf.ico000644 001750 001750 00000010755 14134304175 017464 0ustar00luspiluspi000000 000000  PNG  IHDRyIDATx]k{wo8@  #EV,_`)w_T)yjR QPSFMJi,#~0QHJ!@A;q޷3Ltwf.Slo{hE+Zъv'D ۗM9o*_\^hqb@˩a{IV l¶"a;ہ@mg=qE-H- L\6#HKJA(XMMLAaL.pR%SOQp*UF,aSvK ;alsJ" `JYB8כZXE@b/G+n- `gξ';&xa."NJ]Y,^P{Ү 04"$6 @ZXGm ЭţQ  LM.dLF@ΪMDg25 E􀌸o8xX!ZyHGGWrhz@5o\PkO6t,)]]frSj[!k(1~] bqrAD9wUR!{δu0@IBܭrUi]J|p'm5N2b 9\- TJaAڸQ!DpIǍx;m Du5imQ< W(UU*,)as=NCTۜ* [ %QJӞT۲dl]Lx$qBDxaGO I0c ؒ`cIUlI0k%AT'FX%(xK(w X"DK$!Uh`ۛUHFIw0p%L I(N'  6?IADH0c$A$_@CDQƇ$$iCQ@3}P8'XڼK0'؃y@ơh Ix8-$I0c%A&̏%$1og 'XڼI_n\7 `^$pH/eO$qȋ$( A`1$:%yM3G̖!/ <4vz'B%Wp$Fw&- ;1Ab%WKm< y$o'wxQo9O%J l~)}M~HmYrhc~;NK$ؾ09IfXku}`֤$<x䄙qq?3IIc|g 2!$# Кy><l3I [5>ongN DHHI&oqǥ ̚$'JVOx~"~oJ ^8H}7yƣ81 fLX`@3H"* $`$?I-$1QI @uh%LTH8YN LY[R-KC`1I Gpbx4M,a""< fL, ZxU4N\l,_D`'6 U̚$^qsO~"ĉ C$NL3s"8I ~;wH0뺫$]z nowR0* p@\#np$uM.r%zN:>W/$1;\H) G`ȉ35H7$]q`ΒQ 78qI0cΒ*lj OpWk$ @{' L}NMEA^s\NsO7$=S>i;O9H{%8{'"FsK nN f^Iq 2lj!{aJ`7 / `v6|"pI0ㄝ$Χ8q$i$ӇzÁ`l$W)N4 6:|J nS{'&q%N8 f|%[ko? f;K`@q4H0c <E+ZъVE(' Ton;; 3 քlߧ|BSϦGZۊ@Bc1h6}v_.10V>KWXlƴ.q[75?àĆq7[ٖ^{ybD)`Λ~ukkXv8z3N_V_zw al8p=fq)on~,1!R1x⧏ Z/;oUAZv~+P쯟檩]p8|_͈t'E+~p3@(͏&;;CmA>^m9,uCbU&za=,#2==*U-`vt`kktR}Rq1}-=K8pN !vttM?;sW eG%1*n韧WTPs_hʡh Z^{@BhoHZ9U!rP\sO>fh:TRJ?t|<^F7^?+8XjMMC6|& 3h: Hh'/a2c5M7;J@g t]oh@|M:V2"`*@NƝǬǚT#D cX?`G3o>a>͛Z bR̅#_Xa6}ҁ\Rv7MΰTO 3~v7uj+~ Aiz*3o؆:M/Mp##PA#zLs7| ]Yv]BIVX&=/@Ԝ.c "1Aw²6V]CMPw23M&ip"έ^UB KfCOhrۧ[FǓ/ ЖA {HQ>-ҭ4ow]$*\ޫKWu_ڐO@%k7m?.RXM[l=tޢ֬px|2.z M}l<#Ӌ_v wM7.Ru3o3Ws#}fgrɗ~ rܫϟim6,|>ݭ`:kvzo~bhmn9;8jݷMl-Q }w.(3/Ut@꺟sn_,"wu` ط?sZ州Z.Ӯ@ VE6rޕo"BmtY-v jGf۷XJE%|y)֯m|x "|k?9Z l¶"a;Y ?D4|AlzJlhE+ZъV*$>IENDB`photoqt-2.5/img/filetypes/sr.ico000644 001750 001750 00000022707 14134304242 017315 0ustar00luspiluspi000000 000000  %PNG  IHDR\rf%xIDATxwxչ3EUo.L30&:ƦPB HK p !!pC H!$W lcS;ջեU[i̜zeKHݙ)yw4{vw̼w l>HƐ! C@6 l AG ._v1]r6AD`َ 9v1K/|$7(I $a&%! C@6 l A1$acHƐ!  L$cl9D YCKae N. . NALHTB1H}Cb$@XCQO lDA'Ã\orrqgB"%$ c p=>tuchxaY&C%0#DnVJ򋑗 QI]!HYߋ6 #S|~?mCRn ҢIO%, @00hhAw_/dE |rOoƠ( z0Y4.q"4 z}kmįc aIBSG p2x3$I C !$1t.r9$f(:zP{A)uPR~7amHT;C}[#rL>-#èi?06փ  C?[ :cBCkr8݇$1 M-ތ1 =M!, 00tz3k42\sA0p=mꫧ`86laH&cL?>;ЇA? `BR]}݆MFؐL@iaG5~Bz)H$ p샬nʔ0p!BE d Cn*En c pP ?[ZZ{H&  E+,-1 v܍`(X  RK$Y95-unE]kifff`’d* 7͌%^~lFD@#Hù!S6kZEAeS5F#!T4TC0,1t2Z6]Է5f@0F;Y`0_ 6V#$H a"b^NTW&08DkUwcmn*0m=hlo6y2"$rMձN0уX!l9*i0+$r9LP[Q\k76F`rcy3<1*c>$ 8D=Yn*A@7:u M1Gpl}+Lc yrnlKG-͵F4w¡6` !9=fz}9s#+n&?#:+@ܐLDq^*NQ-c,qƚ׃C 8`88 0,s|x پx9 @LAӍE3 sܘY4ݐm,rcޣ#()0Uvftd{ ׮DCIrC s+9GanfMKwS4!jmnd6C9 GVsgtuiۉ,̝1NљC Q˯QI#9@nsg):"sx3=?x2 !0A!p`δYX8{>IwPN 6$ q{`<,=98Z P9A@Q^!+;egpXʏ-B9ؘ#n@8"yٹ׍H^6rpGX.Y(/B^V.DQU? c  +Q_ ӕo8H$2Uwbz4?G P1Qr:q{ܬxܙm?VD(0]}ݨ;Ԁkc $9(EnV.dYFX %(@D8..8EGd0Ȍ1Τ,RTҒX& D; ppgR%TRFsXz)q =ԙT~vaL4A@}+C@- A rGA@N۬7^"9  +G,5塜XH}wsor! t#߄F9Ð*oPN$.$S7PNqHwkE_켞 9ZTMG*Rt7ZUMv^Oќ0"L,b F&B(lub4o=  `D   ƨD~oM IcTo"-'@@$-;H07^  ,D* -0k5"Z~%sX~!A³"!T5'#t%jMd9k$ ̖x9,g[~!5s$D|X/  Tco"X5'@@Jx-HTa5oB\N6C 2'0UX/cryik *ZJʖx tY#'`CmK=[ "n [쁎^Xќ0ۉ5PHW ubW>%)M44vC4'`,}Fccg^cN47@}Eih`M+,-$aO~t@$q om4I ;Y~e4'`,}V+4iedYƮ谨;QhAPf,)1jCy1`;ƀд'RslhM,'1 `W^+0vV9\Ζx1{NRyhj/:! {k!s{?7̜((@KgkBkQd+Y~g4'le1ƶfT4V% W-] 71f,!1bw~HIrg!$QӝdX~f]Og9rYCݳF.,* 7̸ )G{ofQp>Ӿ≇Pw]@Rќ$g萏 ,R@}eWFsfXO0QG)o<7 M76WC̒0i,mQo^a3'`J$ {'%W]xĚvaY0T4U)&wЇ,d&˯!'`*'pBvarDB>z va|d՝ќ1$1!|!=؅?6]XQTWw0 5U.Nڅoj1z?Z|hב溊F,dMF Z ^TS嗮)è9=B>z G aɱW"oʉ'Pi +"c!]` 46Vz݆ZO )y{H.L_` U!=md5cs߆#!=) hzW],HN JFC>GX>مk<0(|L:0Pe0c A  1Ң!+WŠ,F9 QB>zP8V0Y~M$'З֜@Z{E2+#v]i.,0*ɮc"vՅSgZ~khҝH[0jGTHY,!9C>z ԧ0Y~Gr)f A* ל+'r0UGcRR],C t-;Ouaќ@SH5.],' DƮ Œ1R_Kʜ@J@$ڏN'BŠZTR"Mhh7GkՅ?J.L_둪Ŋ!{M؅CY>tuhp$ǣ!בhu?Yik9E$8Q[A!-eՇ )@B#7)OJ@S@4EN D!H?Z1!?|"hKƄ|辟 N4'zGV! $*J>a& Cf @LP)C&ќ@L'`cG3fNC)zBFeT4V$.*HLUa)H1lDAN>>:; HْA 'C@6 l A1$acb<232@60#.;q 7A[ x_?5vvT:cNZ|2xV>Áҷg.(Lkp0ʾO Ɛ! C@6 lLRk10A]WQȲ EQ Em8c%O~VߡLU2'!DA@XفjTTD8Y1v#/7JJP6{ŧ攡L/"5阒$!<D wFB5#=&PR8 552EQ.8΄U!Q?ЏmoǚkhlnP̿e`Zq .X3N[s-NBQaA"˪3_|e:?X܃JE<쟞,˸+pߘ g~W׭uCVWE/7 [oM}<-GA$Y›o oyۖpQG]C=6:^/-8\x1X O8 n;chmoލmNN@D|؈sc,*V1Ҍmor.ڏ@?~El|sS܃2~?vم J<TuRAeG,z\JıgEwޏŽ 8H@wv ]> ` ?;aP `cCRYEzRfq6kh!@Gx8xŗ_JwSlGEU% HSoO(ؽw~o!+8Մan FFFCo&@$z ۱qKC0Ahji}_߾(/uPE Q\TO\՟Z㥿mC `'vz~m#N3q(w:l%AAImљ@t?tnfKxgn{]; CGv`u u1s\aɉ{*I՟e{llSaYaznt p1Fsۂ|,Z\I|FgE=^z ׿Bcs#14CC$UX}].\.aD|ٜ2Joo7yu`s(*մc p80tքRQ5  8DQTwNws-(˛v|#:ˍ|U>`˶ENI +2N=T ? ! QpΑeoljw߉^3~8D A"p\\I7&ttvq8DN9ykjkp׽_ }O$9pcά~~ }{Bˆɡ^:X o}O稨,p8hVEQ0o18Ly(šuk51$e] ;? {pƊX; ::!HĪիBFEL7յ :;n2 GSK3^xϸ+}@(@ 'C쌳p'LVl; h5{zbrf`0{G*tǭX5t?;Q\TUt#Iw5}4s7vnVu38ԙ1/] ?߽w>ڵjI?|Igxdkֿ7_9kx $Uc:NÈmq9]jȜ$ ͨ BG-H'IMvs#.NmND<4̱0$)Be\|ErAǫ#JBO9IVWt朣.< چu @#?/U b2!  B*~Uzfa%MZe]ع{`AХ3 ‚uO1Gfffݴw?> 71%$Beq8g ?B0I;oC>\բ#Θt9GqQ TT/nmkLByfdfT<^uq)(H9{\淡(&OcAUuss&MqΑ3fH W`@,1olBSsSmrP:c&onEQpsp]n1EeV|GDeu%cI (>ܳKg͚t9ŢTukMсg9V2Mo4qE=v`nRz W=8*_/":/~;pєp8pi~<݇I;c )Zr|QQU귝x rsR2WXܜ\ݿ.q }x7FC! DA- ~xmZU7}tx S^E-iUu~ع> pݯ/;@˃A}c~_ b驧%`1QR\Y184u3lX:siKQ6,̛;\vtv<,攡 Ccs⺒/gqVʖ#''Wom~i @صw7v <dee!,KD_?`\vݸ?Efff̺wVcq-ۃޞgW]y5sԘ*t $WPCeu%jj ϻ\pA( . -b, KFQ\\ R (YrTMoos&t:_ ,Lˊ!F(bjH>O˽e^n1}qe,[Pėn7]wceEYKT$&`P\j(Y~Sܰ2q| >uk([wכ6VL~g6`(/9raŗg/~LHQ9½_O8auz4|G="Mf.xEJo}ҙ_|6 [oE]}=3N_W_/]WCE|s/>{%5XO._v,=5b5(A3`ܵ{EuM5;;088@00En,Lñ SN9˖ODvvha->yxᶛnŖm[WZ[144`01Nx<^L+)pβqܱv!rBk3B"Gq Kۍ8o#qβiyhidb| |,NavY  =h@Oo@e8Nd3|L/bv TP(_hkoCwo!pfzӦc(*(^@ x$&.jEmp3|;L]j>ȕEő>c"<2Se& (*,BIq N>i$Pj(Psv AFJG{iE]b< l A1$acH| p0rq1@ (ta]A1$acHƐ! C@6:AҭIENDB`photoqt-2.5/img/filetypes/dib.ico000644 001750 001750 00000010245 14134304114 017417 0ustar00luspiluspi000000 000000  PNG  IHDRyVIDATx]klٻv"4PhJDGS$h*CZ_@ QZ TU*mUR jCãIs=|;۹ݙܮ}xoo?3P 4@ 4pۅCc#c(wŽvTFؑa6@hvaA@x*] aU*Jx"nD `3\0-F%j1K8Ϛ|SݩXT)&d-\ɳ Qin/vKC@~r¸z+{,jB4E@ +b3-ɰ[-2l *\HΏvɎG/ F983v{0gQ(M,LGm Щ QP9;-pV WnȢ]5C,k"~ZsbH+b;q Enm222a!$A^g"5iAk8Zs2f]@*,CB4 %0b !gơ  bq ^9HZTsחfJ yX<1n8<Ma*2?LY0= &6 8?p5HJa<xr f&GDs xiޱ0;7 :?!XU 4%" +TSS`^S$6t%# " !-eSoM> )3`]w4ni`!0KsHV;S;i m@vuRf:vtc.$~Xt)@xX֎U}rHLq96nLNo ΅!IŅ835w D]|RYe ]/Q<7 hX+LTʤbdڼ !*ݗ`@jqfZVL==j eL #<Df%/@X*X*YQ%];0KQ˜~DYP v1,A4 {p fp `f߬^Xs`,A  Y( f "HfDAFK=D0 r`;,AL+Eq@}PX], uK1kj "FvByPLCEI@Di|YY( /=K%5P]^&X* xIeJ" H :5> D0K~L|vaY W<ĚE0BoKM=O[3pg'/gď'/YxY/,ډz`x^MEIڹ8`0<,;pԮ&Xi gDDy =t&fn bQ@܊kp%p!@b k6KB. &fp.T- &fb `0Op]E0K# UX8^ C@@ =xyDE0 %XuL g j lG>f{ 99C x ./̇ 80{ ~})@|Wj-A@Y #v%`@E%`PZKy!@uh-Y(-PTZJ MTYJ M*^]]MSN~;h& |\B+?&`!Lۇ;d,|}D O.@hva7G4"k- Ǭ'6q2n=kjrUHİwLuܛ4hĚopmȪ 8WM9\#??SxkG] >Wַ5{5jݕ'/0 dy9fחF_z'1Ġ45nv(t! g]j o:PuOhr{CBWt00 lA~&Rxs*L&mMַj=1;iֲ}I; ̩M4ݺQ$֯X$7GCЋ?׫rwO\f2Jg_;|0 N!2/ShIevZύ]{9љkvyt1*J%3_]zKm$s}mvydAA2vZ3կQγf sgIjTJՋ@B+VZ̛M@ p :"Ĩ"\*߈ϴlmܧz^i4N/д xaBJZ(a*SuD] b@Mz샷 +o~ئ,y 챟QfpzE_ŎL Rl̋S.: Dp/́H?RLVz{ԧA#x:P[ֵl +itg? 0IR2 /I_U^>pՊ )@MU.Ҭi`:-w_X% @.%WT> BާdKz|l-W !Yl/)w$ QY?$ cs$lj?76|&v&zW(ڞ;$7쯽Xbo+GAhvmeLvheZ9PCyH9->?9`áG'JthGbhտJl<[vx&=oQmkb_~d2@VNO9L ȁbSWZctJ9gr@gOG Pe*9%XPWYUUj͖@/&Aһf#z(x38@8prO.Bq18Ej^uZpzrB2'ЁZo)=Cw$O8饥.)`4HHxqYT/(tF A9\F,]cU~&  -TH,sQvC_ H 6Ӑ2R_;$8% A |0"1֓778tuaFEJn\ Pԣ%0"IK&߰c(oGr巐0Ċg7`1}W@cT-chSNtHK$pHEoNm7[('p&$hiOTHm}sh?Qo@B3 e A@hB>U~ F x˯QW*'`H[pov u@@ZU~ ~$mͥvOP#X~ ao.5'@@,bל s$Du-'@@Q- t&'@@-Y_H=~ = 3T+l#2~-vXJŵ,U~ XN dpQƎ&-hjO2'n1p?< 'mcqLH– XZcFx?E)7W$d{Z[pbvt90Q+d,- Lʊ--#-b,)1tB8ўvzC$ÎfOTņ\0~"C҂x"*0brҌs7[̞0$v/2D` {$dOyT9'`)P@{on5pG;Yo!0sN2Z>ٙ׃d{_v"X$s>9L-!1 `wk d% H`gK2V,ْ L00ñv`0U2ƒv],aƜ@{OOQK` ]",a`4iЦ;:T͉%8L߼1[N0iCX.04k$˯ژ%'`J85&ˊݭ],c) ]GmcbҌ T=ˋ#˯%'`J8AGmRv W[̐0Vg1tX.L_m1CN4 D hՎ] 0r BB>-Y| 0r 0QS巕,9 Z!-Ǝf Ō9ȋSV9C @*Gڅ[S],00F πJ!-0[uaG2'aa@0Y~%0TNkт]ظՅkrѐOIMC>Z;aGA 0LC v.L_c!0f1rB| Y]Pva %z|@0],(9C!-.( t׈a? |@*.]1_8#'䳓 75 Yakh *ɐOaB>Z 0_ kf,Gntpr#錯.\^,!=sXȧՐ!Mv40Y~͇^9 @ʒjȊ.],D@@N#6 >'PP0cGmW&˯@fod' p{/LiU]scd55 DFC>ͦ huOvwfNY~kzb('P 7\d DQS aNUm뱮n*'X16gڅsޗCDr UC>Zp]8}d.ɜ@9M!-oZdN iN@0N>f!U])C0Y~9`,c|BpkdZTTgB>j ԄTP-s |mQ]x$vamr 94ۅk?O@`Nт ׾U -!mhN +#d+1Yݜ@^0OsIuۅ{-HU~9)_N>f etc2Iq: 5OH b?9B_ $1[z91! JFC>! rY |X$s92TB>aRù2|Z(C$ל@Z``)C%@ZPB!08@>N`u  C,&s(,7qYL?apc8щbhiN<@ Jw&8! C@6 l Aؘ> E D0a E"SVy]k_ ,_wsMy\Z>.Y L IǥEQeJu ОE@1$acHƐ! ހVGr\6`b:zNHR?O<G, D(!IɎ@ +ՙ"q ut  "2< \y QW_ſoڔ5 $A$xnyzjhF̘>D19 ܩc&㵷((zPW%眃/\ys栤xtv@L 0p 3pڧ:'۷IByYf54`e .\!P/^|ͺʲP<߼jr2|kpW`֌Y =KFFO$c,nB]mm~R vߏ'6l-[:Ae 646⻏߿6"c8dvܵ~=~KY(عw/ˣbCi3M5]>xw3`1AG} $DNA蜕c:`ܹ(z!1Istt|3;@'p>GY aOC1Qf8Eūoxތڊ> dX lݚъC}=?3HtOxP񠡮^pq1 A7jjsU1njGm;GRN;BEy9ϝWƵkOXSSr_omB$c =<\$quA F#t8|,[w-͟_hnk3T h2EQ |⾇P8|=j8 Y0w.fMN—3gWL8Yvj\reFw|c-O AuUU^b9p!~aVFV89J^\/dt|Ď_<Ģ储qGV{?pRm@41)B0l O~._: v04419qQ[Sʊ>ϛ7㾇'۷sNB1$*0H̨ܘcD(J,8>s}7{/ضkW(XI<А*>^<g{dtBuEŤ nW^z)^睌?3/߿ V_v}˸ Q[] AJl۵KQ$|GK.u/FQ!lٺ5+P[S3=cx֖U[|~xױp|]]u]%%%T/OH򤣫 ]]K` =MuS '39TEsq׭⩧ΩmX }ܦMpõU0{L@ 0$iA4R{"dYFx`;>?zytGIq#N|cz7›g?s5kpǺuXp!DQA؄y38eHoi} 3>o׋VJ+\ VS|}MXS~s/uwbάY4O(s9"yu/+-hU/Ć JttuaOC5E @m(b:׋ou#q + Ξgl|IilT:??p?06>,"0 $DoKVeBQxKJ_/XMGT/S7?+B` ^}:k_ݻʛo?ĉKχ= <sZ!h9dY}pHc`p06UIF׀6AQ$Sd1fSmc:|N_8N aJ8pnBǓx<@p $iQ8ǂsQ?}zc%  QDAc/ޒ/ϴ/;["OZ Wb%!*lHMCw߿]onNT..:Е(6k=  4#9 }7~_'g_96oق`OOc=nA')C?V{]cc{~{A53 I>پ?3556 `!#P|};ڸQkE gQD">ݹ/ƍ]5_">,CSќND"x .]5UUe6 @|m>޶M664`%xwݻ3,]w.\ƙ3QY^WQA@,GOo/>7}o~Ƶ AW\WQ:b]ݭ[֭DvCDQ/ZΛVHÑdg\ oǬ3,=Z$,ի[n1EAHMa@2iC\lcbBC@h **BueeA?/6nĒ h?$( 3xs!lOUe%zlz,_ؐ-Nl.ŲŋƖ>[ݻݍx +w܂ ?IΟ$9ǍkעAJtiک(X}S6T,b36Μ{w[vٿ;Cp !M("aX|9xJ\r%46p@eg p/իVֆL *VH{>e̗ޤ9̛3 >7_="B !<00s:(/+CUEԠޒ8$iovLBA5:fim%wQ0> 5[I^R6r0[1$acHƐ! -(`D D0Ir_};/@ 0(ǠM 51$acHƐ! C@6 l5sNȣp|IENDB`photoqt-2.5/img/filetypes/jpeg2000.ico000644 001750 001750 00000033763 14134304146 020127 0ustar00luspiluspi000000 000000  7PNG  IHDR\rf7IDATxw|Ɵ+:ݩےlƕfll` Ih % S^B lnIVnwΖ{;ݝ̗efwٙ}`p8) p8 ppR.N Iap8) 'G'KEˠ0ep/7ۍ*+-U?$w8N6vP$Ap8kcN Iap8) '0\8 ppR.N IaFs!$񜬜 @!  G( JDzz:AN,!!d }v+AxdEѰ !Nф d3`2RʅB7},yW[ Z1H9nE2(G9 p!D.aB@ +2{-yۅnk/-Y(ʛLsxWpkͻ[Y (nXVL̝Iyu`|'N=^Ե6tD !IB:i ҍ\8 @tv.;* _k/ܒӋʐE1(vtvW\R? nuss.A@@cE}[#<$H8icp`\I>}ЁF=qmxhhmG$\FAR$4xߺq&ڃ. ' nt[{MkW;l+'A mAW5.]mlā ]}p8?| p‡ nɃξ{ v[ܾ*(zmtIANXpP1^[dEpy\:@< 'n$K ǻA( + } qc^8⾷ Ց nWH ǝrƻ8IWBu%YGv1:TԢ1azfQoH+h@.FD tzOT7ס{a@Qa1ǻAA)EfzF4Ե67j!pP YN~+t4!ٖ2tKR|,͵AC)E]Ֆ<"CdAz)?C%2eHukasPRd쨯 .EK20oaMtunWCR\X@\CNF62-qYPn#q F&ƥΠ7`Rބ,[Y~9zC~v.r3r-;)w,&sܕ+_{Lq`D*b`!73 ǻ(gmjHo Q``0Q6i :.흝0ldx_JJi'N @0x&NNЍ0Ɛf0M*D"o8x*?{  s1QߛF4dc?oqA D 1stcpf`4g$ś@H0'0\ ǒ93QJhT1(bra1fLG1vm±s'0:\€d0aF4,`H4P(Ŝ)0eB t, 6ݛ Zo,C9y2gBy 7f%EŽJdàӏw.cUaBn!rp:gG@Q  t0L4g Ӝ! z?+^o/o \PtunWJk:D* ӜLs&dYGWE@(BCC'=d}H !1&oT6U`"23{(0 0Am $KRq8h␣ >e|]yTaXq` NL72HnW8:^os- ''Nt7^{ 'jV@x\8Q#VPq{ c xupHd68T^O 'D"o,;N ^E*` I>"7Vz\8%Y~cQ^_@*'wPă7TR9N 'bċ7ܞ\O 'n7oP pD8?N`0upLZ~éGM'3f'3&N}R)N gL$7TR)N 'l8 ܮ$h\wS_)1,F {\8a1,o~B!q+'7T $ N$7T t$e/ '$7 $gNh$7T $gN$75N 'h*8H9d scEY~ú@ B07~@KGkXP'$ӟ)#"c[47ac喤Rh̖P t&G@JMBj[QR MHh̖p $zI/r(7+%{;r+<4EkR 8dXO (!v*v(hhoŽ.f\ pI8Ijݠ*7(o@}kcBhJP 4$zI}W+ޤ,ccNRw7T(oKR!ن򺝣> M:l {##N Z~!N![r ܒ'k/6Tl|*[~C%JV [j!Jeo8$r@R  teX!UM 4'^@!mͨh +L֚rt][~ÃnN8B{z1r'-bs̱vqo$z ~*oVoم%YBEcn D\O SUv᪭ ; >ﮮ6"ANCxBFn @"'7TxG[n 'w{xOGeYƦ$ V'VH $H7.LN0FDYO ! mM1֋Idq %DJ(v%][~K" $r$]^n:8g|IB8B ^ + n:'0,'va6$]g-@HD\{ '[kqq- {[&,35N nhD]؛]8Y~%n9*j=Y5 A>Q;*Bpx]O+˧S م7~8XDq][~q|Ǖ  HC A- so|'N`+X{ovqd#^⪕U| *N„ڸ7ވ8hi  `kgVC @D^n{\x5N`\ o’,a'5d\UƺO" we]gm߸fɈ h'pE8g@D AvanM<+N OGDXddb. ab][~ʦjc'hA>рkt sobhz1D z G.-O _g?]7)e@L@$lچ.kwvՈdvaEQPɳ&T6U=|"/1څ7U@Td 4ށ_vn+qo8 @DJ(vteX DI hfWߤ#qQT Cم내 {-D;N O/gg D_v`{,5||% T8 qRtvanMqݨB@`x?c.-I4rO4ۅkGڅ7 4Dv=T!jnԅRȮ'0fA>k.GK.-M$ - O" r3zm}&qXvw(.]zPBʔ'01FӘj+xO𥌊Շ9'Џꦱ r}A><'PByןkD@OpƟH $Â|<ȇO"' θw=[q*$ 8pJRq%'7N (HՕ|8D`,q (ƃ|8&8Q1uDA'N#2*QgdTX8NPB9XsӨ fKs88s8) '0\8 ppRQ}& iF# IݨpɅσ$j-?DA }8vhD_,e9ADENuQ@a e@e烀N Iap8) '0\8 ppR.N Iap8) '0F a@<c`CfcfB jpP%E,ː$_W*PD(` B?!dX塈PYQ@ E(= $Y$K` nX#U !)${BEPJR_J)((ʰ Q#"rP][ G CvVJ'\vn˛$`2`NOG)iii!GfE]}\7J(`iH7tC} ;˱eVբb⅋7xvUUhhj6Ȋ ^l`9X8oh4B17#l+ߎo;+w n Fc 0o~Xz!3kF㘅'z;v ~z5ԡjc SJ&cEqȁKP\T콝clRH*|wز}+Z1tBE`8%X`233#&zcJ)ZvΎWe 'w~ ^]% $"PLL03ĒԲt^D ؼu yp\K⅋=TTWn7y8hq)kvl޶} **ՁQ.  '`Cq`Պa0zCB_<> hn__5G^|X؍R ͊|Ͼ(׼:QӦ3瞏{RTT]uX,8%Wk"`k-cV8U>+a +gKOdvs}.VM.90J)\<]t}äA&jY=?1W/3#}:5zn+{ϰu>NV:q+\#c=ǘlS, ‹XcyyFaV_y'Lf/>swtNX^:L&bH=jj囍L ~ly]c|͍KeV1Cߗ O N9t<3x<KX7R2꧌vǻp՗cGŎxW_FuLn(f/{jjC?QO>4nttvtަ&\yxC_Pttvƫx RǸKQYSR]Jٗ+/Cv~u=p\cz>SveW < T$\.#txРaE?7zzz: q}`9FׇyoGxȲ'{ 6o oEA<؟PL՘JdX,p:ޮ>n]93gd21It]]umxgxE@LAu]3Ɛix>J)vT}a0uJt yW kѶ=k0{,0XsfF^n߯=[cȲ N?giQJ?—_YCZ8 œPS[_{wnGGP8j2ᴓNŚk "Kk3/>>6@@)(ǫfJÂ棻o&>SՁ;[oƫ>]IExWU*-xwLJT-xϏcy|Bo_/l߆^{ dEaOԈӦ4;ct?b66A1c ɲg^|5uщ"N8\rEX`!,f9DcS#/j*#VY× vEe6++ ӧNò+/>X;+-Wm8[oqGԲ[}jɅزmmvΛXp7 شu3>SEQ W]믺ii& '"7|ߴ'w: 'Zv>d2})Zy۟W^^;󑟗lz F,_s"y汞JdJl'N~sQu[ڰuV̚13$H7@VfVXZR܉w:^~5n:dfx}Ǣœncy8qڻkSQh18ꈣEVf}Jp57ǍUߌvUXy RJQ]S6{fFnL-:/ĵW\_"#u_uJ'OѼ|)::U[d)~sѥ0 $y6> gipp~_dͱ]wBO>Ҽ^xV<|Xkn7fQ6oqG>;T KwM Ɋ9z$**Cn ,`G:!44k~V!(=s}\t! ؃(8pꉧu,X8!̚~CgwGttos㐃=ȲՇ~sSݯ [oUk2S7ef?~U;*v[RT;aĽesgQGVto~(S{$ ,c>u6mPT ?}℉ol JXeYFVfnh7!c & 5QdEsS$ߴ^+-lQ<rn76lڨz}%h؍`CT?EPR\oCS#5Zn߆޾^}_)=NÖUظyBH *w 5ma)hʵ熏>b5̛̀(D~^^ħ=eY=33SuqTOc X8y+vFtt{ JJ0D!*|̘6]u_͊j2+~fLS19x hA=50(#^c R-/ECSFSKTNbW[ keS`J3ܤ:7OA}Cʹ%%X,5 uRu5Q[_y-O:x݄BՅ\jzz{51Bx?Ghs5u5Syy?w>'%P|kPK1w8!F!ddd ''W!20dR.X1N81@E4:bө9-k0qb1X媏c 8ޱ;g8b ͻZPPXP Sj8ظyfsoVƐ)D)}8'NBk ÏDqQ`@ᘙ SZڰ BȰg ٬j }(h߽[^yy,{{=6hs7<ϰ^!6}}}ӌ3f[c0 Vvk"wn7^zeͮ&ӧMvBhWյ58A  KN=TGU@$KFN,!xC˯(/??(jWY5Zf:ݞF܄.L([ơynlQ܊h:劉p:QPYQ:w HK I`0's@lnJ0ى]-X2P:yYQݥ4@n3$Ip:oOyyX0o~ȍJeMED^YS%';GՂw,(*"I%A_ǣ`JݦA(H<3S pU̟(BaIv{p $ vZFPj }?ȊCZo/Ao'ؗn7ӇݟAfOI῟|յ58sqWd2iN?@PjRc?{n(2ZZQ[_7jdٲ%`fW^ &+r@ٜw}>ˀo_0uE@܉koZwn|E(뾸nrQ_w݆~ۋo sfƴijEQQqʊ:,^tx!DBM$jHFRu:44ER\p/_ܮ\,f .<Lq  Yn>Ph~0sY}tXWpf0KRs](T49$IwAoGk{o\Y3f}C5KNjWF&GAӃh ʊ*za]NmP]S5_3ρNn$HY-!Ucy(ajGߦgFǣ)r:^U:Fx$rsӰifs~Ö,HfL 9qm'ۍ/ut1 YY(.*⅋qaG`K;pɄE  ( ܷ .{8o(@ks3`1[Tŏ֏QrΌ1K=wv;M&pӭE|{EAnNfZթBަ-./DFFȲ%ӇZ[Ueͻs5L..'Q\Cx4oGgzDق B! $Il@16bwoz}TRo'"`jTkn> :m8B[o?m}7K~v3_YY\/PtK&fk!%Дd9`nj3DK?CցA)Ů]cHgz=>hMn}zMnRpՍנcd)̈́[o?\qo#,p˯T ߯^u?ٌc yX8O=n'oסMuߙgEQ̛;O3{(1eKe%:9uRl+ߎs/:7v3vTc (zc >f%J)MMOp4M!˖c |N=mzvv6/=4gzz{У[ᅢ5G#?gBvv6tÁjW{ok-r1w܄ۛ"h 5Fg L0QuBifojkq9CE~~>Jaٰq&l 2o˯ ]I'֏ҽRe/ROQ`Ur<>|&a#;ᅢG|\Ӏu5UÖDٔ2֏sUMnV^M)6ܹn|w1h c0g,\xޅ͐d XrA/bӀMxg^DNv232 "tvvh&{1>uZ""Ik[+yaa`+4fO{$ݴe3;!'00OPJQP m*p}Uk.<Mt8ggwRM-^؀/8 E'_ VpѤ"z)H.lJ)NxTywPQUeKBa=6mݬ^u$/X%DŽ1cVS]p;~!̚n|+ͨKNN;%,oK|;vcwⴓNO%hO`;5/RmgWfۏ7>dY҃)'^~^unA?5 QfGŎdåiiieEQP4_p*Us >S|hެ:l['uV×SN89!@e,[kyc?ii*vq1 0o1gŲW58( fϘ=OZGWRR,[4c ?8'Ep57\lԲZQš2w}۝(+HXi'|Z+:=:8Nt Cܯqw4[œ9gk} pe=#CfF&NrUXu :Z1 K>\tP:4.Aqk~xpPI8;N3RoYIjz)xpƩ dQR ?2Ձ@`(8#_Ŋe˃Eǭ9?,XH]c{fݗܜrM 3#3QEԲx/O3Άh z߅G>gHcR,_z(x07_/[cD 00pX?N8zjdef\focHKKB{nн^yɢzX{1p{!Z:l_߭]+ǰ!FyX8!?8sO,” 10\8 ppR.N Iap8)^oBOIENDB`photoqt-2.5/img/filetypes/mos.ico000644 001750 001750 00000024314 14134304162 017464 0ustar00luspiluspi000000 000000  (PNG  IHDR\rf(}IDATxytՙ[]RK-/l˻ 8!209@kdB/@ L0L!dH&a:`K-[,[{KVzԲZwn>uADF¥A`H"!  2`H"cmpy~2H}!ξY)/ŭ~@@f9r 2A$ S!Cc|i 2`H"!  2`H"!  2`bZ` !SIV"$6EQF8,"  $1%ydgy|H%$I1@$Acl,0A$ɐOٌ1l YY<lEnn68) AB!>x_`bb9PUU37ݧJX8` CDQy펯~ $ñcTV:1gNl4  @ 9/4 ADO0| jkpdI@#nD]:~4pa9"iHnv~@a|A ؄!PctȼÑ#n!")@I?Z[Ƃ "D@$tw) g >Ct\#"1Hf!r@7 pF 6<@o $3x ]$÷06$Q` 02G0NwSBY1:(U[(x 0R al,t"I2zPSZ ?hJ ɇ` `4[DALwSttt(wD I,t:3Y-$@°008Ewdtc1$` ua)k j.ß DM=i0Tj1<:b\Q\čGQ@D!;7ՅBZ[f7ȲC\kiȰ۳&G1-MI1tw{hTc,ZZ.B@V aymTˉ_-pѣnh`d(-7z| M ݚęj>O9̂ΣȐ.l 6DƳ1 h`" $y݇1M䓛 3Ng.rs&+5YWo/Q $ Yl6n#@($  #qxCv6?Q͇ V"zn,֏bL D-cyyyrL&Z~S)_O`ݺ .֥d[~B DH ɶ  ;w(_PN`:$ 1F9B@茾_ͭg  t#xE9B7Z~('pB*Y~B L|naMZ~ڿD  N2JNT@@$dUMmm]OH*HN   ,Z 4bL Ih_djNHƲC&H17ȴ 0FCHP,dVNHoh˯V8'3r$DܘJN9"nfՂs$D\(QX~9".˯'ʦhnR 1W+m͜ ~O9B#j9B5xjNP,2_X5'q jx2F0>0-LVjŊ9Q܃.;-zce˯V@Fcѣn92X G1>n 7:9 c nwOV}8w{vA1ӋLj!| bllxv=R^&,j@Dׅ!_Իc@KK%\2'`ihkGWg֋W%45uZ/hՊ07{bg!cϞ%̳ƃs޽EU; f{GZ~b wo'v7WC^+UMf XJdYkҊ>A_9'`XpehnX0Y~ì9Kc chjJ}5c@8,tD!o5'`zP;%癕1]81wB&sHg`XRZaV,#dM%'g`jG6bhiMbujjDGM1 0D u>Kϊ7>o c)`D|Y~Od Rb| c a44X.L_=0z6W̐O8م/f J|8ݖ W_̐0|6#ho7]80zN4oGdؿ}}1|buWg0$I6f 79'`xHVGv.l.0Y~Ssd|va +z| As؅>02]Xy"o80ubH;F.|k|{ik3zT|h m=C @C>z_ w.L_ca %b6Tua %jV1]ՅkL0hY,.d5.F ]Y .L_cc@H!d ٓ0Y~Osi|㔻pd5 M嵏--)<3'0zGsZZ٩lFŒ,&fjN U YC>zppr² T'0{G$va#˯HeN %` 'io?Y~-@*s)|qpgBN0ZTt!`k=RMTnjlV,d &Vqp)_՛''9] B>z؅{UGd.ӣ_N I!=Pk>n'˯3'TĐOQ_],>9 @&|T73#'4䐏f*^ $E(p{{g~GD ,W 7IvN !D#oȇ)"vݻA$`"9B8 YP'uD^^N2sq |1[@rB>~,!c4 |8Bb9CW|H ꗪB>alz,) 1ڴb $Qȇ N9N. 0*(Յ2'v^ ;(ڋ!áC}(*CccGP& %aH"!  2`H"p8rv@ |mb 7_&6<__?1vvT]]kWCtA*y.,CE",0T-KDC@ Ad0$$6RNI,k"PVR^$4a`q ĒMSl(Je qٸm"3ݒ$%{4H yݞz{IU_ǐP!VQ׏Z|Gt,˰())Bm\X+W.Ǽyհ)\Fkk;{188q!77%%ŨDm<,ZTsQRR =  L`ٰe˛x'$?Gn faǎO~p8,>c̝[q0v/[~G;cZC0gN֯?W\q19p: t0Cgg~};hl܏*!lp: PS3W3Nҥ79: f`z{]OT.zX|;{}X0>|.ǡ<{x<ê? х.oosw|_i%j8x<#_SOj(bxx#طRխŅny睍k&}73ƴ}nc^`>;w~i6yUz=\y-xg5uW߂`()Bpftq]?AssKno=«K}3 osx>47Ե=1|hjjN~ݸ瞟cG$8 q裝m)Y~{6b6@ "8{5[;8[omŝwXAWǟnmqس C߯N^o'AZ[ᣳ^h(bITr[q=*2P7'|s+l62v{pFB$ 2<<c==1|7ؿ%%_]]=1<܋xսz-@ؾ7wEpH'jw/jη>WsՃgNg,9(..c 5c);o+Ba``55UӖPc F ??1xcWesK6tucFՅ_{lXtQ9cxoҪj%%E_e,WY 0:Egg7> vTB:;q`+ͫ$}@(88Î;Tm6\{p…J$ +6mz##1ށW^ywy[m}CU3sV㡇~.磺/|4xhiië߂ As8yyiDZsi*c Cسigl6[}iAoo`ļj7ߏŋ@eA Iʊqݮj[gh7 NYq]K DQ*OT%"njGw`˖Oz7,:h +'O߱c7|Lr6=5mR,^ p~|6U/_w]8QĒ$1믿]A>?}Nr2?0e⋿hIEHy⥗ƕW^#$3CY֭[`oAww47]{ޡ.]ꪸq M8zSW]u,Y80\em1:2 R3GtB& <2Ys{l񍍺 dY 0o^ʹ\ػ3wv쨏uVd3!I2vܭ*4SQQ~?B4VZ%KʲB'< UnmmGoo"Ҵ#p'l5>\(<;$Ʃ]`dc8}vee%XjygdrCܚx8C]ΊЄrN+nώ:or"MMKFDl蛎ﭭhoWl$cǎ/^W?c ==}p=18UkmDu cn >˾B~v{rkAId"̝[=oCCؽ1;Ů]֭FAA~B#'jkj:$(//EEEqMeTVXվly7|oYIt@#,Oᣱ}{=A@GG7lwex6 [Fww**TmՋP(oǠ˖-V}7x7~?kQWH4Ы[ MxظӇ%%EX&$IVm{-,t Z߅gggTնn̓wG.9狚o~\vuKb``1l$ɂ NN9e Nn45Ν>/\Xkz)39Ъ76Mt,˸sQ[;O2006\r5Mضm~d%c"~ۋYt"L7|~ƻؽ1g׮]BgB#A1:Um^^uq Tmf+Kek7}` yp啷w#QބЛo-I2\}D}gnx> (z @Nd91o(+ +KHE /݊KaHx$4~<ظ&k$& U@'$cٲ%3G}g͚(**J؞,NUw;,K HE6ahтٻ7Hb@'$ 'Tg";[tXܝZ&I ܀_~MTUU$5ǎy=M$A3YkW%+3jD3PY5p<8eش>} O [<ԟ(4 $ jl޼,ZTp8ͦÅEGms& H$p)M6o_ WL 2;w&K $$Xb ̉=|]j9JKEf`#^0++ n"KoK/==n:,Y0}k>{|~z @Ȳ ,_{@yWll6:Um;> 5_$SWk0/ϡ*gQ6^{…n@qq≼صky@HȲ2p)kf.77Gu5l\Բd!]5D$IȈ$Y[1,X07p{qӸ5~=v̋^{ O9O ҴyIP]]+$yJKKTm;:8+AEQTYCjE$H"gu3?߬&l۶ ã(..I)$(8+DI0YVv=ic sTbdϯQ}d@n*`gޱ";ny*8х>AI"#@8G.ǴRLHUceױmۮY8}xg.8RVVΊPLo .[omE}}UWmsVcÆq5W?Kqy& ΝD8EY55eQ CCCqtthӍ͠P#`֬2x<"CZ[!vܿc #h4 *yIB&==hm=x\1OF8y < m\ ƀa45u~ 0=F0 4_ys>_o8JK}(()9E94! 55ety"jjJ-ٶt9" 4$gŖekjPR*oCK ҁ $`HNKݔY~&fB"A9t H@qWͯݖsWqWY~9{O9pUd0QwJxFG<цsQPZZYSY~1L ̙3y\C!kXU>QBDbzvMjz<""TVGH. c pfLH*+zrd Zn: 000 ' T_40 Z%"/"E(*V8IopʯL ,[6f@#8DQȊ/H$dȲ:zIJ|Ԏh37S0{v9" %  %La; D˯~k^Bހ SFt>O[g '09$)Y('p!$hޜ[~ӅrC@ʸ7h7  a0Z~n ΃0 3,r$aLZQN`*CY~Ӆ;3hjRO9kV;5g)f@@\U5Ơk  rJ-7p~$DN7]ܜ  rU,֜ fMHa-o&1'@@dU-|H7ܖ  BW㮜 ҖtwH7YH7" Y~mcH,^(I$Dhߐ-- 83'@@Ÿ˱89'@@- o&85'@@s8.N NEuhNf7pZN5%'vhNsE8~mm!9(7'[~i BΜAss7DQ@$2Ç`xY :Fdo&ȲsrzzQW>VUֶA13 X~!pz i?EqIU~9G ڢ^gg8E+A`8} Ow suCC0 sڅv 8Bc#8z-ՌÇ[lef Y~3Ǯ9 ȑVDge!څ v ^!ZvVW؅5oY~D t&'`k1M=f jjE Μ,0YǨt8Y~s]0R A.m_T7$א찟- U'00F`G0Y~Us#B>F|{=dV XV c NY.N7OsXRի [~oOu:Or`VLjv[0Y~1]RvaZ +'`)0;c]8ldV XJc45 ךX%'` Hg'0^]8}k]Ȼd], 9 B>&i>t(?vaZ|*V  hvaڃ|&V 'MkȋX=cg;jj9PWׁg50Y~MsY |'i>r}}QB\l^L!sHڅ? IKy g5y$ Rw9 d$Hl -!@@!O mAXY.'[chkAX@OFRPȇ MccWF) @!&IC^cc9!iN -RH hh2I׀R}  `ԩNȑM.݁ $bHŐ! C@.&+BaaaID`hhxcR =l]wm,a$IĿ+xO\͞]5k.,LAD$̞ǥ:sEQ(4 ӵi,-! C@. \ A$@[qNh~\朏ւdDQ̺j#c A`H$dD"Q7bT~  sJoHLDe|^($ ^b~QZ@II UPUJD"w}'N. CUUpx<(.aƌ2̝;˗/Ś5+j \r<%kH ̆$cǞ޽ү.`AQ!𠤤30oX k׮Ě5a޼z9T(* / !Z[;t0plǎoQPQ1+V,ƍWckrr LC҉)@,G4 hkCG߼ ǃsga/ak]ߟStwÏ~;wΧ(*ϡ>駟UW]o~fxWQRRL"`$"Hͭկu}޽/궆^( 8q>0yCaXx!&A0|w{ D"ێ' eB33!p8`7o=Uc9zA ƣ zkDQW9Ǐ~|70?gޙr(QPWwvuE@RP(NU9dYθ8WĎwc T?Mw: X ش]{jjf FWWP[{ǎ@{{'-Y 7(kFh4`'O68vFFb9ǫ;&}*C(ԋNߢ_yy{qDMQc6`mg\;A7o㣏/nWC`AcX k'鴢( >?]WwǎĆ WO: &466鑡ɐ8׃ٳkt;22x< ,TUEmm=γ9$!iC"!CQTL6}@pN"0v~ E(}I꛺)I.|մ`EQ/^?۲j,áCGcO曷;/ tu@ @%O`xx|ήO$d Fщ?ï>nܹqSzEQĎ o+gJO<޽q _};v܍@O95q]pUW5VU]usꡯ=/xG C`24p 7p$IiɩWa͚xΝ/㣏!ʺmbΗ "'}t;`$._݄'{TWj( |>nx/'[QS33'ܵe: bmŬY9CQ6cӦkpd#v~oG2j Y?׮W ,FB@fάu]o6_R[LI!$ k֬+܉O?=7x￿gδgkX `$6Gf&/_k 7^˗g(׿[l@KK;{?+aH$2߽]_U2 +F( x8W׏6=zMMg&7MWƚ5+)d$DD"Q<و'svNGwފR+_لoF  ."_ ˖-(/I`~[d!za˨硪}_f~1lܸv=2MMMF]tUUŕWŋ/>?kZZNJ-[۷;J Â3q~?WU>lٲ6Gkk >:T6 =Z{̜Y5kVk_ی|e#ϟ  IpQTT'DKzvnD{Ep|,^z>vNƙ3m>~R$奘5 DzeK|̝;>_X "c ^Gw_[*TUkE TUU+׎VǑH$'3V4!no(oHLFbNy<W =$C@. \ A#Z+$;!I){h'6F?4q)A8Z C@. \ Ap1$bH0D<$UIENDB`photoqt-2.5/img/filetypes/heic.ico000644 001750 001750 00000014525 14134304137 017603 0ustar00luspiluspi000000 000000  ?PNG  IHDR\rfIDATx}lg33%M\;)8$iZQV%p TN?*ǝĕ zp IT:NH8NBJ8KU˕4 u88ۻ3ޝٝgG⟲Y;ߝ$HKF@Dai@1Dci@1>wĉnJD>^:]ǵ 'G Red80"8K<@1Dci@1Dci@1V;B\GpPh4lض ו›Բ,|ނe0 2(N ضZmkTֱրm;p] yӞ-i r`/z{0 X0$P;X^TRYߜB樂mFZmR^?>&akV7E>O󱍆WX^bxccMW ct@Vc~~׮U8wV[u%J __ F.ghBr WQ7w`~~ڏٺ=C.?W-vsd]~rF"! %ח#9閟o'8' :4@ȑ3s?H7ssN/@@##8zt} ۇ;`6v~oG9_ػǎadd!"),wܱw9~oo9?7@EG܎>VẲO)%LP?`R({ LK!)7\ETFB0ޓcs9ؿ`s)$ !Y9~3"]қľ}{Pm5X[kGVcpZhV~7V9>ȣ0B"%`ƍq 6 n~E Àe|;CVw| ]U~;55b`!  da zz,~y:'W~ !'p ؆W"}]'oP+mnykW~o1'8'f X[97aPdv]0(2+i8'@VV |ʦߴ_ 0(tavzsz 0+^w1Օߠ C`~^9uLo'9˙`PTO9uī*STeT,7oIoP9l 0(bf?o9~7, 07!o':' ߤDf*AeuN@p7Sdk9m@`cW^9oPY&Gy͕plRQhօ\QV~< vC>aB`m^b](r?%`jv'l0+RaN@YHqe?{R&¬FK9eC>vbB?jׅPY>iP&:򉂔caAͼo߈}N@v'lׅYWRa D][ Uf7^iHu9¬&#s (|мjԅYMNRQ DAs_N]c7![sy2BWުuSS鹟@ !(;ݫ i@ !(߫ Ϧ.o~ |ՅS0+铖9T; cuaV~)-s wQ^e70'xtr'.oaN HӐOؚu' ~I $iaxqׅYUCs@Z|])abrlz#9D C>fg?ʯzbU|G]_5 !P*Ub=T [suh¬,9X@!E`Wa:z-Tօ+~C>Q&aօo sN O]^w sN ʐOض³]5X͞" ! 0پplV~'9 -wQAsu3gׅ*+ǜ@d!(lՅ;{q D: D _}&9Oov|tsNC>Q[ު.qQ :¬»@4sC>aZ]x0WSsC>QhU*~|Ѭ OO/鿱('up'ZR>˗0+z {NOuSfRETaWca XcģY~ 0 vk /UU#ħy)hi̝_sa tIa-oN ppȇ(ya C!JnNw!07!4ٚXh!JŎ S75|Nm.|Ү9MƆ`YQZ9"D`n})@s0<܏Sf?l"M~w`"JDci@1zӓvQ@Z>m|SO|mzHeG?w#rAȑCʖ@*>|'NzuݶRJ;Ö3Mry?Ns]-[~{{_妨7. ҅㸉}4ky{2opw^Ϥ~~Z$ Dci@1D2e,~~۲T,άyg!fƃ*_NX[[/[3moZ(EN"nV[ 6QP*]g>wr'gY?_J=7w%9Оs|CT hRJ7÷iLMM\{P._[ss󘛛>?kqsQ& ;? Hc "14ȸV(Z\Gyk033sxWޞ PzCC(tPȣJ+y,"nm/'p[}a,x& cz0e8z% n0>K@& w=ܻY36<5U_. cc@V^S-~wNzM,⚀;I@"14 Hc "14 Hc "iTa~G˥ <B,..V[k+*~GZ܆aGbe7& z晟g~spСS0 =;/"<>0 }Qy's0 čDXmW "14 HcZ/+Ls{LSHJ&ziuXdqNt+e{1|K:v|\{xxu]{=׿u]mrm4Mі.N!#“O~ avz^0D*w%ۤzAkQMR,SOh7RV΍UyFM4?@Dci@1Dcie@oy*iDz,_]{/޿z+B /6(xHc "14 Hc "14֓tڜIENDB`photoqt-2.5/img/filetypes/epsi.ico000644 001750 001750 00000021361 14134304123 017622 0ustar00luspiluspi000000 000000  "PNG  IHDR\rf"IDATxytս翷Rklɲell l l&81 |Ƀa{d&c@;8$$B¼8C ,Bl}fmH-V/Uwh$ےz~sto~[2AA$acHƐ! C@6 lk.CV.@fA9{Ny\Zl|j$Ek""C$A_d (HȲDD2@VNO9L ȁbSWZctJ9gr@gOG Pe*9%XPWYUUj͖@/&Aһf#z(x38@8prO.Bq18Ej^uZpzrB2'ЁZo)=Cw$O8饥.)`4HHxqYT/(tF A9\F,]cU~&  -TH,sQvC_ H 6Ӑ2R_;$8% A |0"1֓778tuaFEJn\ Pԣ%0"IK&߰c(oGr巐0Ċg7`1}W@cT-chSNtHK$pHEoNm7[('p&$hiOTHm}sh?Qo@B3 e A@hB>U~ F x˯QW*'`H[pov u@@ZU~ ~$mͥvOP#X~ ao.5'@@,bל s$Du-'@@Q- t&'@@-Y_H=~ = 3T+l#2~-vXJŵ,U~ XN dpQƎ&-hjO2'n1p?< 'mcqLH– XZcFx?E)7W$d{Z[pbvt90Q+d,- Lʊ--#-b,)1tB8ўvzC$ÎfOTņ\0~"C҂x"*0brҌs7[̞0$v/2D` {$dOyT9'`)P@{on5pG;Yo!0sN2Z>ٙ׃d{_v"X$s>9L-!1 `wk d% H`gK2V,ْ L00ñv`0U2ƒv],aƜ@{OOQK` ]",a`4iЦ;:T͉%8L߼1[N0iCX.04k$˯ژ%'`J85&ˊݭ],c) ]GmcbҌ T=ˋ#˯%'`J8AGmRv W[̐0Vg1tX.L_m1CN4 D hՎ] 0r BB>-Y| 0r 0QS巕,9 Z!-Ǝf Ō9ȋSV9C @*Gڅ[S],00F πJ!-0[uaG2'aa@0Y~%0TNkт]ظՅkrѐOIMC>Z;aGA 0LC v.L_c!0f1rB| Y]Pva %z|@0],(9C!-.( t׈a? |@*.]1_8#'䳓 75 Yakh *ɐOaB>Z 0_ kf,Gntpr#錯.\^,!=sXȧՐ!Mv40Y~͇^9 @ʒjȊ.],D@@N#6 >'PP0cGmW&˯@fod' p{/LiU]scd55 DFC>ͦ huOvwfNY~kzb('P 7\d DQS aNUm뱮n*'X16gڅsޗCDr UC>Zp]8}d.ɜ@9M!-oZdN iN@0N>f!U])C0Y~9`,c|BpkdZTTgB>j ԄTP-s |mQ]x$vamr 94ۅk?O@`Nт ׾U -!mhN +#d+1Yݜ@^0OsIuۅ{-HU~9)_N>f etc2Iq: 5OH b?9B_ $1[z91! JFC>! rY |X$s92TB>aRù2|Z(C$ל@Z``)C%@ZPB!08@>N`u  C,&s(,7qYL?apc8щbhiN<@ Jw&8! C@6 l Aؘ> E D0a E"SVy]k_ ,_wsMy\Z>.Y L IǥEQeJu ОE@1$acHƐ! ހVGr\6`b:zNHR?O<G, D(!IɎ@ +ՙ"q ut  "2< \y QW_ſoڔ5 $A$xnyzjhF̘>D19 ܩc&㵷((zPW%眃/\ys栤xtv@L 0p 3pڧ:'۷IByYf54`e .\!P/^|ͺʲP<߼jr2|kpW`֌Y =KFFO$c,nB]mm~R vߏ'6l-[:Ae 646⻏߿6"c8dvܵ~=~KY(عw/ˣbCi3M5]>xw3`1AG} $DNA蜕c:`ܹ(z!1Istt|3;@'p>GY aOC1Qf8Eūoxތڊ> dX lݚъC}=?3HtOxP񠡮^pq1 A7jjsU1njGm;GRN;BEy9ϝWƵkOXSSr_omB$c =<\$quA F#t8|,[w-͟_hnk3T h2EQ |⾇P8|=j8 Y0w.fMN—3gWL8Yvj\reFw|c-O AuUU^b9p!~aVFV89J^\/dt|Ď_<Ģ储qGV{?pRm@41)B0l O~._: v04419qQ[Sʊ>ϛ7㾇'۷sNB1$*0H̨ܘcD(J,8>s}7{/ضkW(XI<А*>^<g{dtBuEŤ nW^z)^睌?3/߿ V_v}˸ Q[] AJl۵KQ$|GK.u/FQ!lٺ5+P[S3=cx֖U[|~xױp|]]u]%%%T/OH򤣫 ]]K` =MuS '39TEsq׭⩧ΩmX }ܦMpõU0{L@ 0$iA4R{"dYFx`;>?zytGIq#N|cz7›g?s5kpǺuXp!DQA؄y38eHoi} 3>o׋VJ+\ VS|}MXS~s/uwbάY4O(s9"yu/+-hU/Ć JttuaOC5E @m(b:׋ou#q + Ξgl|IilT:??p?06>,"0 $DoKVeBQxKJ_/XMGT/S7?+B` ^}:k_ݻʛo?ĉKχ= <sZ!h9dY}pHc`p06UIF׀6AQ$Sd1fSmc:|N_8N aJ8pnBǓx<@p $iQ8ǂsQ?}zc%  QDAc/ޒ/ϴ/;["OZ Wb%!*lHMCw߿]onNT..:Е(6k=  4#9 }7~_'g_96oق`OOc=nA')C?V{]cc{~{A53 I>پ?3556 `!#P|};ڸQkE gQD">ݹ/ƍ]5_">,CSќND"x .]5UUe6 @|m>޶M664`%xwݻ3,]w.\ƙ3QY^WQA@,GOo/>7}o~Ƶ AW\WQ:b]ݭ[֭DvCDQ/ZΛVHÑdg\ oǬ3,=Z$,ի[n1EAHMa@2iC\lcbBC@h **BueeA?/6nĒ h?$( 3xs!lOUe%zlz,_ؐ-Nl.ŲŋƖ>[ݻݍx +w܂ ?IΟ$9ǍkעAJtiک(X}S6T,b36Μ{w[vٿ;Cp !M("aX|9xJ\r%46p@eg p/իVֆL *VH{>e̗ޤ9̛3 >7_="B !<00s:(/+CUEԠޒ8$iovLBA5:fim%wQ0> 5[I^R6r0[1$acHƐ! -(`D D0Ir_};/@ 0(ǠM 51$acHƐ! C@6 l5sNȣp|IENDB`photoqt-2.5/img/filetypes/als.ico000644 001750 001750 00000021202 14134304212 017432 0ustar00luspiluspi000000 000000  l"PNG  IHDR\rf"3IDATxyxՙSUVwK-YnĎ@ &ĀY 66sI&ynd- f̘,c-vmZ.KjuU?Z-ھ?SNz0Aa$bHŐ! C@. \¹ nv_ 0$:r ~t(a;]X0w]zTM3{0" A# [ɗŐ! C@. \ Ap1$bHŐѵKJ&BacB UU*4M%I"xx,C$@*L iE" /BT5vz$IGQzQ @7$}=Ad4a F5tpB$ !iTMC8AWO<EE( !2 UHRиut! //_FUĸ@e%(UGs[N@1}m39zz 0xJe 2 @ thhnE(ƌ퓁1U֎P8zIB$QҊhTEQETU1sd> QUFp'#?M8tbZmD‘  2  @8ҏDFe/ACK+Ui&2 hjkCxpl uv݃`Vfӡ!H@4!Feɾ zzcC;2 1t -7:! K{UUEHXQ`/F8ݕ1޾ fw)$ @O0[Eh}ᐥ.$iB0P 0U]5b.Bu! c@qA1PUduBa)@;2 ( DU[ 㕅2bI!jP؄| UlBfĒ,1hhnILA0!9V;tsDbs2HY²0ݍvHw|14)d00I%FZNC4T5 :b3sgpY6 ,[?f,;OCkG':;q$م6Κ Qlubɲ EV\FQ]_?܆u1ٝ1$#ylla<F^Om|A3&Kl 9k2,Q~[~c.[ԿTչ HF1q[U<|~یVPd;chnkG[GcD0X 7!~|( ݕI\̜sTa"$ ( E,}WQEEQ[~{PcKH0~\!|\OB>KRoۨ@Ґ$ Aiq׌(V AiK-YF $ EPTX`x>%G'27Y('<$:Ȓ)ey(*,DiY~SrAz1m$xLv !cڤ2(3zd('``ڤIM{1cdyo*!PUK9#$A"̘< Ei!>N:1@$qHx|N6 /,ӧo{.$)0g̘AN6!2&Niӧ$d&HoPN@a)8m` !$I„qpZV Es1oPN@Ib(_qtpB: ( ~0,˖ c ݽQyxNh<<:GBG$My'OqE" ?Uڅ,IP<(̓$I| -9q1 ̚9Ñ4H2D|^&TUE4"д,QQ(+)2(aEc8u*-o7`RI ΈNg  ?$ƐD7-9ma4 eC?f.wd,"'dRT')'0",m&ڻD A@dBTzCY%ׇ H,쮌('YKoRcC@dx\Y~%huyN s Z~zyqQHd7~}="dopz$DF1Jݼ Q`M7Hao*u="#0X,C ,'@@dY~S9"mkM~?ܶ 6V  "nm7r$DZ- [~M9"ebMH79zH7U  R"fm7Yܐ  Kocq  ΖTprNH UN q7  (o85':4.Y~S<uXN5 ?`~X~%~9)'B$[[q ݽ$[~!I>fN BckjF]S3dIB_8'*w18 N 8^c:5C51ttw*G$n&rXEela,14nZ;VN 8ZTMjysv\78%'ho@ckk¡i ]z,ℜ# ZyV״CW p. v 8NcJDU;kA+@4ÏGdvW,sh4+ЛZ;:bo \>IkpT֡#WV1lhDM.ÏAO0z5s[[Q]ߐ։+@yu ZڝJAU~sMsN>1DU**]gE E2Se!hdMxNF9 'kqTFZ1tr],sJl-C>Pܘѣη 73su6 VF dwmY~Ajl$ dۅcf;l)z!L3.00Y~]r#!L u]U~srdB>`]Xn V?N64val#|pval#|2 lm&oa u X^2Flj&ona" XZ2R.\YU^F,`՜e !l 1VT֚C<d+ -o*bŜ% !l`u0U V XNrF-]],j9K @GB>w0cֲ ZX)'`)P5 ǫrchm],#a],vɼ`O61p.D &14X/䓭}مsW],!h5a TY3䓝}jksb&˯ʄ@.!lq0Y~Y9 B>&vakorȩ1䓍c `uLo,Ō@!l0p&d? D19Ј م_$ z9'|"cvxY~mO.ȉ8%ic S_瑫*fcۅÑduZO k0v@b *du06 dMں6͊沙Ț8= :;v:l2.n dMA0Y~A6s7|2pp_'xN> 9 C>&n>Z>zua,2&ndva>bO_@F`(ސO60Y~K6ri WB>^Ee!5hid:'ć%CՅ+* ,.&9%/㕱# /NIR|:o L,כU8|rc ==ꢋd2'P$ IWr'@rIM!TN iAXL uH7'`X(C# |ڤPȇ M:9]G9|Ҥu6,A$-.*BI]kQ1TգG+d#BRp1$bHŐ! C@.Fov? HH$P8] }Wҫa"g=hvz2y29o^}Eo׀ M(L61F& Ő! C@. \LZk:VL\P1N>W&igH ƵW>b c`AQ(Ib'B@ ~2H?̨뒗ERU$cgDb"NBQ (?t0d)D%x@EơӧO3qi31 w,$ ?OЛq"7=|kIP[WӿEggL%6bɍ75$ /{;؝S&O?O1ct4r$#_90磤<\|J̟M$uA9?V}Q/n9f̘Iee+ۉFU,p!JK'$q~#G7cɮI G"oh}o?܇#/3bs;7/_3N?]w;:=/My9ǯz?gl]rGA`"===x7f&<ÿAɓYs看5+׽9įq ߝ?oVܳ$("x<_󡬴ߜ7ܴv¿◺>8oΘ'~M-Z[[Kf^ɘ88ӱ~j~Ƥv ߾sW_e|GxzxqZ̘>c@si2kUUQXX?߼ wurqOtO\1d[0mdΦ !lR\~emk}W_ 2 ضhii5W_| gf/V,_%%SU]m(b(..ƃ7@}?MJ7z_~Y㋊yzk9>,̞}m#}u J,&ݶxl6B$ѭ ~w٭Kq_"@7PHQ @~~>6[Ӧ7ҫBe">8xP;͜kV񘽻 H  F M0o\^ݶ~lݱ{^c̞M 0!3_cw8|ݶ0m/,NG @#(k+sL6 ֯7/HUUWT^;rzuL3bbҥx]Xqr(gZYqO}Fɧ}fiv@~~>N9W\v)ni .^~ߕ3ٌ1a7"I|ms?|xke*c 65W} c  Y{cY^cގGl5`lي-„i`4`ayFP98J01^;}-֮ZI`Ls:elyR݂$I]늢眣vD4l۹5Yf=Q"LA4|b7N]`_smēOB赠H_ V[ºի {zsaz-h"0 mhoomc񷯇iChiic۶# MX"HW^{nۉKiz7n@AB_~o6@Gchnn[ZoǢE & 9p~/#[F  rCt۞}YX~(ÞCsSLƁ?$ČGG_ am&saI/Ǯݻu_|5kB>ayXqr8]ƀ@61<#1/o}}hfTU̞ vł .0ċFضqԜm/.%IV{*>;r$+*kn4#I/%z{{3h45+). /Y_ヌ^|Qw~6Gi1 Bs̜1׭֭7K.!'h\dsބ6pGel݊SN鶿Ÿ?9ni Jm㱭GYE$nKx?趝TV֯ם'B`|Q6m؀"mkxi.`t4!IevCeu'.tMpebRpnۆV s<3t>\Zq_]o^֯Y3+ !ٻ`$DVey^Wtm?s7gVOcq zXPz7-"lߎFݶ_-,uiZ s]Xpm' tH@P!`yF]Y;7 شaJJJR9NMn xe:0!<֮\]pXVsS'?s/Z4k#???4 \ueǐsoX_ٙ|6QPn LwcBb㺵~}檫pW'<~ 1cp=ˇwD0&v(c:sZXXz"C@. \ Ap1$bt_ʒEa'E1T'BAqzJvAd|pPE#)  ! C@. \ Ap1$b?JVj5IENDB`photoqt-2.5/img/filetypes/vst.ico000644 001750 001750 00000022134 14134304252 017500 0ustar00luspiluspi000000 000000  F$PNG  IHDR\rf$ IDATxy\W߿zԲvɲ,3 ! 0x `3ؘ<'<M$^jI{UwuuUum{?Ւ^o}?,z~}}2AX^ Q8H!  C@ , AX[+Aac)\+a箻q> E }LAhD!2UU2T0^;!  C@ , AX0$aaH!  Ldc`/d%  @a.J,9B7sH6;$6f+1"d Ơ2A|>~Ba(r BU!nh،10InrW^T"d cPQ { 2|3h,2 vWE`DB@ta BQ\of`P+@ZV.[QT^^#%L @:02.C(Z| BUGxi زA"wcYk7Ywr`5MMpY En7FDi]y7\$D #P srp _ SC\Xaʸgxe"+$1DȀɿA]"V 2 ,cab1"Bׄ0($ o*IE# $2D_|a r4 9wACV2V>$7"al+&v2ߏю0Y`hP]jUdCXBwdlOkB(l1TaayыxßChiD K܈PUO aZGG,@}=|Cl1={.#obV ۬\s؜N\Mʛѯg7>'t sYѯmoy!ۖt͐9'WߔA9  rK-@9! rJ-)ׇrA@|X~ӪV! rG,)Hܐ,yz 9!漎^k'@@dlzrZO@W0,ٚ7_!dHRho:[O@W0zZNm 5bMu3oշhN zs$DaX/'@@d^-i{:9"#nM [''@@dз7U  f;oo:X%'`FY~S*9"-fM{刜bDo\0gA"elMXrst0sNH 3X~S>fHf 17Uc̗l /LgM|9cE>wS">o,)cœe@( \(/v h"5f0gd9k\M{h\1цh\:̖t0SN=j|W99w]*n67̔0e `B],9F0SZ+X~ 9S *˘辈&O/鞫v"dMrq0UX›WUwubɤ^ﴱ7Ur'`J`7=W~g!c a߰2XF Nc--ar,i1ec]s9xW'B>_Jq)L]-`䜀@L^dZV1 `nкO>sپn\Un,NY.L0jNCлf r,햳 7 0U^@$wV" 73r3 ^`J7fԲ],AUdL''`+.䓋qQk؅3VNQ'G;2],gv!sƼ B> n9څW-&>߬ sxȧ+A'0 -c|v5˯,z R!ѼvWkva,va# %|rYd)F F sC3S,A9K;TK]8n'oa!ߜ1@|cc1u#]0\| g-䓃z톳 70XH9] @VC>uvaVg{ 䓓j؅{;ލp1'[:b 3W1?:[W,D9}32 nNT2t?0Z璡[g+B.L'/s'X^bdzZO@WO.`cqj Wtd&˯KN@W!\@.f&˯>KN@-! t.L_@@/!ht.\ (Y~r+t2],9 @+B.L_P@+mLw!u 秫G_㰖N p-etmvۅkbʐOa+wcmyk>ș6—R],1Pns9ctX \Mwd51+2'J>F1L^|k9+F+ͳ 2s=9 dUX]8],a5''dƮمcمkIr@!\j.L_ˑRgd!\],% dZB>ݖU$c+>Zl2 U,/."0wr^,JsL~l|]x<gPb1[ (oh8#pFB>q NW&c !_vri\ 9-`NN 廉B>HQ(Cz! (!=z[1c Xɇ B9M`ɕ|@H*B>k2 $UQ0u;O~%:4KR >tkx`'N(J7q cI RO , AX0$aaH$rѷB0 @8Fhy9a'?} L! 0 Mk#|K*[cI0lNnٚ\P ŀ 00Ơj !  C@ ,LFky(rc s0 ƿ@$HVFBUsR jZ3y!X(Ås8]jWU^/GF0ׇ!LM"C@p [oǞ}w~lojBiY9yH,k.op:sVC$Ihkms_.LObϾ|ϣ,'$IXގ_I %f=ދwwn9tN3BCWi^ ΓA ~~+p 1xqIt+%)< osh4oWo%bJېeggp/w}㶻ݞ80~/0?wSxSOy^)NM u0 IDKH% cxɇ?)7BY{EсE7߹ggqRMY&tLgӏ>X׋߼lOp̙X Z[iŪ4!0s9'>Ov_Rvnׯ~yi,E .Iv_Oc7O{ͼq1߇~?ׇaz H:c&s <OcIXJubAW{;Ҁ`Bg$YKsX,AɓvDa{!.99+ yraVȲcDz~ ִ^7iJSo|%w ;Q^Y 8>&F{`aޓS smRG;=g\#@(8q]_ZIp79bI>[{oPӅ҄cyEN'{я 8JHm͆+VI0`_/_Fzrӓᜣ2Ў c 4yM @Ii)Eol6XTVUJYsswӼͪ|?8J!(7JJKq;pm-Oq!Tm -ť?~?^F" <o;R/@cX Ƥ3DW%'#?{ c,)-_~kxɧPT\ E R\r ?ꌝw1;\]}2a (aH cC8['>ROҩӉGo>ںD11_\޽8z75%,wR榧5 `h84''4?x(>Si7UѸ.ݝ%w}c#:s6-7=9ع{7@MTX4֓'55f>ؾ)+9GEcemg$l8t8N;?p{Hm5C`PV}>۶c'c >mAPU#(-+KX9~2ip11:qMOy'v4e韭 bdp0avaPd;wc˶m \ق5Bgɠ00<8߯w Uj?t]/Iw#(+/&H #b%8p4;@4Aۙ3I9~->VtpUEMb%H ,˘Tv?͡3ar?|p1CǏ'b[^ Ac1gg4h>p*& Xmܼ6n!TCm}}ߍ bx3d@c-.j*_SW˥h?w6-GUMZhh܂={niq/\@J[F 5^{ @:)=ir0㿇h$@qI =Μ47@\F11@NiY$IڴF1ߏX,>hjޭ靛3I^ġcnzK#Ǐq/v=;-۷1($$8XTNsmcnzO=QLM\e=p8Isq"f_aw˾BEU G+ضs'M!0(BM=͖鬪*|>Ӝ+hĨ( Z[޳k^4lrhm;wb{SSBBh?{:&@cFFk]C蓙2ưe=⒒@ ?x(6϶b9ρ 0(sHR峀g@_a %-w[oM+W0=1N"kyPhYޖEK8r% 㞙]H#";5/-b<9Ņ3gF75aǮfocawK lۚx38vB%>ah yȱW\gރKIW$l<"LpK(k 0 B8NTh*?vc9`s^$-;6<~wC8vbѸuY,xͿ" X ZO'}꺊poCQQ)ĝw&܌Ehkm ~غ}Ҋ,/<ſ4$m_V[q-~QEW[[Ҳ [`Ͼ}*?!=8w% Z|Xo~ҋ>C,PUX %.^8 |iՍs~ %-۲?R~BvywҲ=UAc&@$<m@Yt^8[ijaРwMa,%'n8㨨ġy!D# .utPE PU{[>gj"жx*Da\аđ5l;0줪*.9>0@}! <|ㅮ x=;+]W/ohDi4 $&A˅v*=W^>pް c Sr%j :BбcJZJWff5 c~ ;Sq ˅} w?c7QW߀C<;y\EE~cs3IenxU?.,$,;96*wdh9|k _ !PW Vr; xq?} |:;05>Hzv-{-rAQMYUص WH$pȑkyE `o_aK# F/g?Y ]W]Rrʬ;ʴr,E`vjnK>D#Q0QRRʚj4lقƭPS[PlYW2f՟%I8(%f;>+tEb q EUCeu5jkqȑ5Zmk҃PU5eZWIIhuH,aP0$aaH!  +6R `ia$mO]D)SIe0#AF!  C@ , AX0BZ IENDB`photoqt-2.5/img/filetypes/ps3.ico000644 001750 001750 00000020327 14134304216 017373 0ustar00luspiluspi000000 000000  PNG  IHDR\rf IDATx{t՝翷%-ɒ,_ر1&8!d&00dy̙;'0 2lCXɐ@b^mٲ-KՒj=%uwUԒlKGU9GXn}pJ|7 A@. \ Ap1$bHH˰nݥPU5m%B' `߾SxcR֭[{ Y&  I( ,+$a+8%ɗŐ! C@. \ Ap1$bHŐIi&1`S/D!1l+ G" HȐeԒ$^W$ $YV14C0" ' T_гcEG_@EE^#! L KqpPhr168eD"B<@*+(-AIc!ƴi~oo`?ё)>Kqy& ΝD8EY55eQ CCCqtthӍ͠P#`֬2x<"CZ[!vܿc #h4 *yIB&==hm=x\1OF8y < m\ ƀa45u~ 0=F0 4_ys>_o8JK}(()9E94! 55ety"jjJ-ٶt9" 4$gŖekjPR*oCK ҁ $`HNKݔY~&fB"A9t H@qWͯݖsWqWY~9{O9pUd0QwJxFG<цsQPZZYSY~1L ̙3y\C!kXU>QBDbzvMjz<""TVGH. c pfLH*+zrd Zn: 000 ' T_40 Z%"/"E(*V8IopʯL ,[6f@#8DQȊ/H$dȲ:zIJ|Ԏh37S0{v9" %  %La; D˯~k^Bހ SFt>O[g '09$)Y('p!$hޜ[~ӅrC@ʸ7h7  a0Z~n ΃0 3,r$aLZQN`*CY~Ӆ;3hjRO9kV;5g)f@@\U5Ơk  rJ-7p~$DN7]ܜ  rU,֜ fMHa-o&1'@@dU-|H7ܖ  BW㮜 ҖtwH7YH7" Y~mcH,^(I$Dhߐ-- 83'@@Ÿ˱89'@@- o&85'@@s8.N NEuhNf7pZN5%'vhNsE8~mm!9(7'[~i BΜAss7DQ@$2Ç`xY :Fdo&ȲsrzzQW>VUֶA13 X~!pz i?EqIU~9G ڢ^gg8E+A`8} Ow suCC0 sڅv 8Bc#8z-ՌÇ[lef Y~3Ǯ9 ȑVDge!څ v ^!ZvVW؅5oY~D t&'`k1M=f jjE Μ,0YǨt8Y~s]0R A.m_T7$א찟- U'00F`G0Y~Us#B>F|{=dV XV c NY.N7OsXRի [~oOu:Or`VLjv[0Y~1]RvaZ +'`)0;c]8ldV XJc45 ךX%'` Hg'0^]8}k]Ȼd], 9 B>&i>t(?vaZ|*V  hvaڃ|&V 'MkȋX=cg;jj9PWׁg50Y~MsY |'i>r}}QB\l^L!sHڅ? IKy g5y$ Rw9 d$Hl -!@@!O mAXY.'[chkAX@OFRPȇ MccWF) @!&IC^cc9!iN -RH hh2I׀R}  `ԩNȑM.݁ $bHŐ! C@.&+BaaaID`hhxcR =l]wm,a$IĿ+xO\͞]5k.,LAD$̞ǥ:sEQ(4 ӵi,-! C@. \ A$@[qNh~\朏ւdDQ̺j#c A`H$dD"Q7bT~  sJoHLDe|^($ ^b~QZ@II UPUJD"w}'N. CUUpx<(.aƌ2̝;˗/Ś5+j \r<%kH ̆$cǞ޽ү.`AQ!𠤤30oX k׮Ě5a޼z9T(* / !Z[;t0plǎoQPQ1+V,ƍWckrr LC҉)@,G4 hkCG߼ ǃsga/ak]ߟStwÏ~;wΧ(*ϡ>駟UW]o~fxWQRRL"`$"Hͭկu}޽/궆^( 8q>0yCaXx!&A0|w{ D"ێ' eB33!p8`7o=Uc9zA ƣ zkDQW9Ǐ~|70?gޙr(QPWwvuE@RP(NU9dYθ8WĎwc T?Mw: X ش]{jjf FWWP[{ǎ@{{'-Y 7(kFh4`'O68vFFb9ǫ;&}*C(ԋNߢ_yy{qDMQc6`mg\;A7o㣏/nWC`AcX k'鴢( >?]WwǎĆ WO: &466鑡ɐ8׃ٳkt;22x< ,TUEmm=γ9$!iC"!CQTL6}@pN"0v~ E(}I꛺)I.|մ`EQ/^?۲j,áCGcO曷;/ tu@ @%O`xx|ήO$d Fщ?ï>nܹqSzEQĎ o+gJO<޽q _};v܍@O95q]pUW5VU]usꡯ=/xG C`24p 7p$IiɩWa͚xΝ/㣏!ʺmbΗ "'}t;`$._݄'{TWj( |>nx/'[QS33'ܵe: bmŬY9CQ6cӦkpd#v~oG2j Y?׮W ,FB@fάu]o6_R[LI!$ k֬+܉O?=7x￿gδgkX `$6Gf&/_k 7^˗g(׿[l@KK;{?+aH$2߽]_U2 +F( x8W׏6=zMMg&7MWƚ5+)d$DD"Q<و'svNGwފR+_لoF  ."_ ˖-(/I`~[d!za˨硪}_f~1lܸv=2MMMF]tUUŕWŋ/>?kZZNJ-[۷;J Â3q~?WU>lٲ6Gkk >:T6 =Z{̜Y5kVk_ی|e#ϟ  IpQTT'DKzvnD{Ep|,^z>vNƙ3m>~R$奘5 DzeK|̝;>_X "c ^Gw_[*TUkE TUU+׎VǑH$'3V4!no(oHLFbNy<W =$C@. \ A#Z+$;!I){h'6F?4q)A8Z C@. \ Ap1$bH0D<$UIENDB`photoqt-2.5/img/filetypes/wbmp.ico000644 001750 001750 00000012657 14134304262 017643 0ustar00luspiluspi000000 000000  PNG  IHDRy`IDATx]m$Y~{>vvww;|gߗIdqbgb~$RPCPA@(1bN8ȐñBٹson?nwn?fogfwf=]]SӛWLu>]]d׀Up]R 5 ՄE|8ZLr b!$@k0} l"))Py-fsd{F_6FeqMsr+PřU\rF@DE Y]%HjI@T-5B3{ @huXM%σr[]fr/x+-+jˈ%$5md{UC@nn &cWR%$"<-KF 2,&Gįml}F$@Xpd}y ȔҴ@g;W=¾gwJimn|) @~UuI r'<8$ܨEMMK2n9NȓRDnȓ`IrWڎt&4;/Yo'rW%IYbmV~r0MUNWH d *]I{$J-%bߴ.N]tfonRe-m6W% Gd  Sh%KTEpټڲ5*dS(Ueq&̎Jf԰-H #,0) I I^$a2$AhHu$HP;zIV*`I%)$UOYv V+Vv V=jVKN+]PGu3|aKT' ? vXu p`U' B vXU |p`HGV$$qL tp`G? vXġ [pI2T !lC@; 8.IJP L{ L`{ L8s-$ e9,$2Ӗ`CA$AhSK\t? v@\W2cU4$6%A`ڤ6.+k78 7". @c; KӒL&, P0.r鮂;A5iWq s WMΘ-I$9^zo1*I)]@KYvY ؖ.A 8#sd%rcb di bmrX5 v$lN3nK $c|;kTʼnE!bhS>ỶE!LDvMͳߛK"vg$ doՀ[H%$;SD0N\JpE?$`aq'0L8D0nI M_d`/@bטnI+ ȏNTK&6\NK&N). Ĭ%Ɖe`+|bI#4g xw8Un`q=K 6ſ8ͻN\loGPI18 V-H8$%e.N\C%x8qH#:IbǶ2?kEJfoo`G/? 4:GkGI_%(?N\Slgkz!gxZ`]!{qڒ`GO> > >tc$$W:qIü%'] ~N\{lSx:qIӼ$B;wb/H?/I5E֙ʜnxHpsNT,l2i܉="v@̮]xH*KJ@̆׉e{Qq$):ViD*pp=$'*I %Ui6N$hI ĴuS @u5 ; @΍܉&NcJUJ 6:'s,%ٹ`Gg \H@L+$a,IP 2Koԁ;|`H ˑ@3o+lRߗ9U$(Y}vI$PH- Oz@]d-i咠t VsJ HpZ$ 9%z4m3fx FCְ5a!0qwυ\(YDo )+`dfY%o@Sہz[z;PoQ5Q z {p4X+vHaP̺U#QPkͶPUt>iC! \m_TYG~#EeJ$uڈr?3 :T2RBYɓH:TMΡ:ZԹ ͟=¬@z(}יYYjϝ%k?*؀ r?Kbg$Y8!"BB6@ثT'|Gm%v.ߪxjH"ԥ@@. `W(lD%5SBƞh["!j)Edߜt>[c G̔h,o}h_(Γy N[h,H?1"tcQI%V߅Fۻ2_ %@GQ\: mw8I$D)1zqI<~`LL";s1ɚXF}ͭ^u [LM-P&^qKR9۷/bЦ>mcNnA@K{%];`oۆ Pmg}痬o7yb !W0} Λ z~4WDch,qǹ?{K_QWkCF!L$i4V'M:GRehR<]|zAL 0جf46DO&K1c07%8WiToI 8/|Qϓ4 (׻2~^e5oLK|U@d/W~0F-t3l);W3?2q:4R==jv 1 r @PM7}C>zm2Y|t,*d4Y-|ŭSwYb?V Yl?\Gۊf ;"H19AXR߃?0˗Uc?_Ro4C b]%.RDr͕golm\R;JBI63- 'Ʒ[)v '\ΦN7_~b~h\vOϛTzkw19nzUٕ$% r.A }_rox4p^ʍ[bw!h\i2]vG5K 5wnȟ<AXԝxwE`g%ٕ ȶqu{@#=8KVϵ4;gK yjl$68GZnc6Q?'D&H1#u@2 1H\<(Ҭ[7o"b4NQ:!DF>ρw:s N%aNv7f.]X1߸gym۬qB4S! ou;F^^pxHwƾ񜹷iW &twN|Zâ:z;1>W]d&Obn(xk-P-` 푘=<cy{NKkX;m+CI RY`X/M@dDњNffmPԆ&+(IfZ 4S(wE+WLk,m68i] se4c󷖗o{ %7v P|U w ҭǘS;0h]teIЕ}{5~l\;o-Z@c M:}Rg@smIxEȵJQip@ز9\峋|זvJh6\nM^}=ݭU{"LGkE@~j{Jߡ 8{.ota=nz2A-9PػYŹ53`]"w^`h85wmѯ~)o Ltq+D\ٝN P/ bü;;ͥk[B[zd},oVq*iazhzƋfs#8?ޢE~CMS:Q#Fy Ť !ǯZXW:CRз*2ƌՙ9lVC"Y>9P^*j"-dz;PokPom<mP!cX +S_5a kXNnRIENDB`photoqt-2.5/img/filetypes/jpeg.ico000644 001750 001750 00000022116 14134304144 017611 0ustar00luspiluspi000000 000000  8$PNG  IHDR\rf#IDATxy$UY޵ t7K/4mۨ3·QQhqQGut~( =ra\"@ovUe^YՕ;7qyJ$@y! C@. \ Ap1J vnۊIxs/]Yز,]@AU>& 42D@AU༼ɗŐ! C@. \ Ap1$bHŐ)k&j1d%L@gcB B||UU_$Aex< <E!I h& N0Ơ*R  /N3 I<χPP0$=A @0*qŐJr!Ē!TUEAUd0(hknFc0YIC!@x ӳHeՋ~gǷ a.@S06p0$UYMN#A1f sbHRX֊6xd!D 2Y0n_ 1TcSH3X G"@ @D02>|EǑ/fy7٧pdQ(T:cQ$i Cxqj#2Ɛd0C:# t @:Ex|QcH3OPfBHʠrIO c9əYB820O2_ 34@ yL{D.%F%š Y $SiˍN@p ٹB3o#amH1d*t&c+c d\6`%PWDHS*º,H3f7C $Riz \l>gj:hVhj!8Ɛ砪c ( f7cLx^ kHhVC @4cuw/BA4$ b87Ÿ0'pښՎ<@{c0@(  Pբ,QQ(\,)y"1LG5Y~ep$vΈN Δ:|^R[ϿNtC\h, l:tOI@) 3uCooPN`qH巪6 ;F9SNn1Lb07by!i=yHC1[E{$)'7bvSNlG)'7c 1  T^J)&\  s_^^s|=BwJU~GMVN'@@^U~녛  tlo5uz$X[)n ao5u=Be\  bjpcNZ~+?'@@ԌU-UH(Y~V|5^p10F&or.z!21I4RMNA}Μp00<:1Ȓd:W":G4'[~I9 c ӳQwIaznznWOb'-%+޾ 5 ~,1'&7 McK$p|޵wX'|prFb ŷ.jM۲S;'}Cc  vYxbFhbT3v 8FcLL``$\SBg`SpzUJuPߺ`Ӝ#1h,}5}c 8:k,.:n=kNP:zSe!Nwم[r. b:t=va}6 Z|Pܢc}Cη WJ9al+|agۅ)ȠMrB>Ftp&˯N)'`K(ћvd5l)ZB>zS ;l%|`]XN n[T1 .L`mڐGmn&o}zN6PKGo`k0Y~ chNWLjv%mj&o}a2 XZ T P^,`՜eH!<6! sB>F?F.^kمk-TG11LLY.L_/w,`&˯5,F' XBJ{M (V6/d$B0]C>}(ۅ{̳ ,d$9y9`>cř 5.L_;0r&"!~k|9fh.va9M ]1؅k? ]ћz؅ʯwN`ǐ`.Յ7Y~9 ]C>F?4Y~Osu|:' d.Y~^(O=8!cB¥*ڞz'PpJGoc؅ʯz +؁vt:0Y~G0L|\Hazn+.L_ ^O0prJ}C}h ͊) &N?z.\,1 '97%+=W&˯;0 '9c !>Y~݇Q9]`>qo.L_bDNfxMGЫ(8:0,0Y~ݍ94,qWC,\,.FRˇ #}ŐuH()xQ0I*OZJ9em|5YkPȧ~00azv.~gN*9HALNXr& X(C@@@!4 |zԺ&AXj(+!kSKNB>ai uNLb ,}A,?^^T^ @q]{ `x͍!W~{|VWJ. \ Ap1$bHŔ~444N *$ N/MY}W%<E~vvlެ[b GQ,7+R lc& Ő! C@. \LMk#jRԻ,>[|OIc ؂8\.^ê)B$xފ>#@.#110I"ːey#STU|uu@Q(]tA'Ic`pHӳHR񠹹+/dž qNǚ58</pϽ_gյ8snfQ/pI"BsS3:jJYW²e[e? |; #]}x{EdIBP#G_O>>ids%?( Z[[OKvୗ^M6";F+sxxwBh2Y`r~+_M+$! gz"y 8t|[1 񛧟ie-5?>K/{~hB~{|;/5عb444^+ qJW9c?›wƵ{/.ض,W^+^C5Y#$Ib[.Fa]53;}=_xމكez 0C 쬫% CC-]wnB$axdޭ'N4+-FdtU $7}x'{ ͯHY'я?(_&[WB$D"kvslo ݷ% cHR=WO>ivslwJ;ߏCQ_1y=cn;4;3|L6˲[m^8H$$bXE#{g[[EUUEϧy{Iׇȕy"֯捛azBQ$I#>z䤮h%+wt )˲?+|>ņsǎI// c$?/>_yuqzS˗k6q?ў^Å\?q1:;:zQ= Qo2D _GGvVP( b= [CCjJ\x+/{}8tة ykK .ضMwۮVk$I8ӃGӼo׋_>я`yw|` q8g&\u4>79c)_'Wgo'>*{9$I_ ,tè>9?<^JS`tl|^sɪH㕃5m߱l>я&TUw MlmXj8ry3 k۰m]F?s"[#񠥥ElL>m}庎zQ(_9! h3NǹlHp%<,$!`|bB[?m>#I@C:ظoGQ[@0=(B- ͑$ CҴ}{[;^.f'UH((.TP pd$i.#  Hl?{ LNMi~5PEg{kupqW^YVUc؈NS@`SJUn3,3τ$I ~vLoyĄsiMliiASc# )  ,CQ-]B _( _]vtt`M Z PUUiP(X6Xjл${!l6 U-vb0x"ѱ1>|Ͽzz{+z}_ tZ[l; r91)T^]a5=[`,>>plxe)^/xmmb_D[1JR89^w~ttTZB woR@p틟(FBDQFUevv4 2+WO|-Ͷ'օ5(Lppw ۷z1nB 3zp0m؀ݱ2C.=kiU!dEOtsKTz"$oᦿ>۰ /_X|Q"L&BE# p[vĻ.mg_Ks3n&%IBKs}qI %5S1HYz؈eXf 6uټ : ]]]e.5K5띋e4m"aKk!>?bYg_1(ǃP0Ԉ@ 0_tudߩ$ ˻5m'G쳁Q7xF HR܁!,㒋/›vD YcEVi_f*xr%d2_͋ʿ~I/$ajjd/ 24z*+/l-!zj455cJC O ϟrY3Zp!ֻ$6~9Vtw/\q[Xol}F|J$f# B!4m?08>G<#$!2:WAѱ1M~L&xp~|>GE2$>[b(>}Oݾ_FU_,/Ϛ 0saoۦiD"DH`3!I$?܌?q+^C>~=1]_ىq? fѢيpk@9/+pW׿~ [z_.|PwAlXl(CY.U|%9ǥoڅs6mŸдsgGoHx#$}xΝx[.ŹAwW'~X^+GࡇGE2+WuQXVn9o]XVd{ ^|%M 9Gx5ͻwcRs'&紐!} QPbll xdOс+W bGF008yq[?˖#GI~c%;.vA wrcx귿<>{'~:,Fχl. `xdBH(Q(訶{zx[ C.=d~Ee+j.^ÎLH޹y솪y|l[,H4ÇE$RV8Z XQ'sոoQ[qݵۻm[z![x<5| ~p҂?w:;oXeZiiiƇ7xBm#9֮YpWːi 7Kꢋp ӟG|뾯c->x<Fƞ|mmmqvaEhO_/}O8rccc'fsX~mmXn.ؾ wnތP(Km="7xOyG(֮]nRcm C\p\72RU˻p߈|a}{kn,'2s2l޴1`B?vk8ΠbbkK [[i?_ŎQ>a6B@j~*| @>! C@. \Lٷ$QĒ l(*5?Cz/LNFdaەu\h \ Ap1$bHŐ! q JIENDB`photoqt-2.5/img/filetypes/vob.ico000644 001750 001750 00000024444 14134304261 017460 0ustar00luspiluspi000000 000000  )PNG  IHDR\rf(IDATxy$U7"2*ꮥd{":*>t8yQmgsAQ\Xlں}ʬ##+ʈ5"9sf߸q] S"A01$abHĐ! C@&Ƣ=\ 8y O8o7!.I>& TbEp@9 ,+|i L A01$abHĐ! C@& L AE+0$+Q@H c sȜ###C$+]XDVVQ T+$Y1I _b9D$E<|ݭ1A`X`P氣D =A a $~ 28)sH$!cai VeN*+*Pt@E"  %- A_{6c~?ӉڪJ9>T!H `rfKKd1Ճ>w3Y@0J7j*aEZ  @x' GcK&gf X_ F"@d/065X, hna/) 2i`nч)@b6 0<>Pyi!Pwj`cD(%   @(wj Xa 2ư ;5MU@$˘Ahe0X_(tW"@y|@NV3af~!HA4_ODc1-oq H?1/tG61_ `Hw8lB\[ҵ?c^}$ 0ư !9H4V`8X  9a9ԵP`$IB0.t7T!` XE sW Æd P}H($1X,x<^!>ۏh; DcqCM2c #wrh$*w/snVcX Ǽ,Ӣg Xe^\k,cp̋p4& 186f! t c >&gf!" : @?}FbbC$ z[-|Q|WM0XDQM{D)c?f0>=C )&KX-DQEsq,ئks %څ!X(9j"+Y1Y,6Dbzc7q f-1QZ ‘Ƽ1O`Q(&`alr KADQ H61WwN0T$,AO&gf137W4"O9;쥥Xs;X ݕ,"Ju4C Q¥뻊"B}TZ˯aaɢ8 [\尗s?>9*tu=KQ_X~! h %V+j*+_gD%V+jܺV6 .Ttirv,ZvH 5y(/GM] ,@9m(m6ln;9RlE,矒W+ɜ @2lX9ԆJt15tc`rj @Ֆ 4j^-[s? @#[*в< l)/ǎƭ(sÞ-4P \eeԈN.paETq+6},Bft,@rI[вeCVsAvԈ5b 1c FFT,Ǽo P,sj@eEʝ;A01ɜ@eXtHpWWp!#D B$A<.Au1Q`XPj+AӁrg7Ÿ6'T4HDr^t98b8b8$)!@EaZ`X`DQOG =bFt󢮪 eNg ,PbVRD3\k-9};; }t-T~?]ȶW+"/dVqx)'"$,3YjE` V! rN;u9h?UHso//cK9!Y~ ݕ="f j1F9$$DNHV͗W+ɜs$DNeC+_/Y1`H;Q˯~}?"do0~$DV)7y?"3Ho:u?"+0L  ,`Ɯ 1j?'@@d^-iaHHZ~:j>+'@@dDֱW+f ico:%'@@,ZHƊ<'@@,2X9"-_,Z1CNk__{NЌ-P9Bz9'@@X,P9B5EeHL'$ ,iYN4DQ݋٢,cp̋px,ZI^CŔ0Ȝ0Ƨ?O"wrf`sVl9Sc (XpH(sM1[~ӡrE/1-,ophյ&09En7b $]5kgt5F/!'P$z>002jo)@Q И)$3zg,Z)@Q @31qt{Lg ˯;5'`xH~TcB8s\vafF2'0c@}C[\]1E؅dY@9C ڐO.7agdɜArB> ',d"C RR|rAۅ_/Y~rOYk^.20Y~sQr5!l )"# %ZB>`]XN f0U?1],A9@!\.La Oad3aT9 @B>ײAd/ @X9] @6C>@Hڅ=׿ oakN@O.wrBwEd-z Vrc S¢ǜ. !\w0U z NEu]],@o9] @GB>/@Wdz J⒄ށ|rge&˯ >'+(D'$: Wava3 B #Q]}eYY~u # \VC> q؅.NW \VC>z\9ϐUp_ad5  \]8a@$˯1`9 c S XvU&˯qH ^TX 3䓛cFFb&˯e ],.L_Q@H!l0U56 U9Z.&˯q)DN o`ԐO.X[]8d5> E9c(KvW5 e@^B>s5po,' E%mcY S#_ T Xkӳ ~9!Bc0g@{ua1a$ L9 QMKX~R$Ms L= Q;^Hd\.f IУ.L_s˜@V!l.,!AN k`OIڅϜݸ0Y~`rY3|rZnO_󑫜@V`53nސO.ب0Y~K.r _|86}CMd;'$%Յ=X ["˯vNɇ㒄^O"CdH)CxL|dN ͖U8|c KK[XorHK(S N,4_M!“fAl4 |B?dP-!~B>oO@Q(C&H\Y I7'Xe%DQ,1y8leEJV( @b_{`a`t e8s֣ 3A! C@& L A01>ݎB aCm7ހ{]k (GJNq`!&"X,4ȜC$`nGE@01$abHĐ! ހņRJ٪tS6]I!2pQ!bWv 3l"c UrE6[ƿ'2p6Zoi Q!I&ۇ  cvvPsl%tԄ];;{.4nY3ph!GmQbj(`2dIҀAc w}9Aeዟi_p(sJ鰔em'b^8y?ǧ`ϕ>ކ/.+m(cޗ6r b^ hnlD{[vvteeP . YG޲Rw/yV]uuv7y՟F(~_ҋߌOđ .Hm53c 3xU*,J޵ ]z -QIT@H1֪viɇXb1Vj c1O7ވzH_O8Ư8Cwxh4G:m% 33O_pǝ_:CH,*\.߻Wm,GWWw|KK;{Vmii):W=uf'?>v'pLW4>{H$aƼ^}}x ']U`XpAU̙nD"~GO`;ضm<݂ǟx?鬟p$~/ 1~)o~K3ЙYs}{¥ǃ;$aӏEŶ;;QW[8A@oYv9I(rOb gn˧NA$:++Ȳf476)כ֝2tuWw8ݞ c p_>tu<-..K_jǟop!Ծq`ýe ޭ6 ߟDT-ZV6 eNJJJǟx?n7p VvG?qv,LWgaPl[S]]L1~ᚫ$$YB($N (GX^^c-. Xǁ}Pt"0{ ` ccPlֺ )ﲂ '-wnf޲/2_'_ ~lv0с7_tѦ"qq k݇?CU&/E-[12Z[w`֭m177iZCo_mߏ23S$};nG[p!2*+n?U/5l-j$ mm⚫Tq/i`$k9GuUvsb۩i h$I.;(8ٙr]LLNgQ;;:[>s>߇|<ݍSZgkIep(#X :l6uPlۧb! Gyvc]+bxxD]D[kk2eN'>QOE0>[),س{7qMzHx~{KuH&Rl)d / *~_MM5z[T],s~UXsRU{oH!s6*E`yYfg߻.צwV ^~UUǴwnZ眣#oT&&' vgSeJEA.˨EG{baLOϨ,+qc8t ,K6ssT13ŵsjUl;77cG"ʜNT+@$!X`qxf61Ut*\.ۻ'`e;>ٹ9Þݻ4 PYѺc;[(D"xP%㘘P~uel 8٩x Qc,*؈͊1WpIԗsjTj?84y'$k_cfvVy`H6@esNTWW)=եcajj #߷gn*z/++CMMf(s:Q[S;h,7?OsA @qIO~3T]su*Bgd8Z߀VLLLlwK~ʒ] 389SC+38ԟ傫\󝯤f3#()2fg5G4oi ã>O񫯽*}1 ̉gSlG011rz9GWw+;Ӊ)O$,,.(򲴊J[U[ P8refpw#lXusH>>b*g:;[v`H6AE: Q p{6(t)/nkh@ %IoiIq8NlкH'\AD‘j;>r};?476s=wpLK~Ie ]眃jŕjI+e,E^1UXl  ! jkcҌOz wp h ,'V䷷(n;ՅH$" NL(R>3 I*Pj]S# ҂7 =--4؄#NM~} c gKCԜ2YVY˪@X$ v*^H;%d 0[W[*D!]] *PVcϭ!HAP^\ .|߸DX$.`UVGAdr1dwLcrr?O6R,ؘ}r_<:x`?*_U NWU'WʔR Vuc$!~2&&&pm+EʬsJ{w3gRF(mMJMjNՋV]5b'jߵ Ţ~ʰ W_q#`~aA8qϟ<,x?*ӧ>ir@DЃx~g`sضm f~`*D;UuQT]X8e _%%%ŁchokÅGn^0sAtKygT%z@yPhCCv@}KRQ(++S/ XNk3YUpfuimM >y?^3{>M k3,˫St%NyDXRюdX˳EPYΧ_B(|ד$I.Kq\!Iލ7_tb[ϧ0$*(--NvݽX^)Zl&uV=ȨA~,.T5VD0;^@Vm6p/:Ʈ KSczf6!{zT(M @7q۶ʻ24__ZqScaIUFFF: $*evեl73;D}X<*~sm(W t1LNMQd5债Bf@s֡-eP(Ģ_ @`*[,hW$(W-Z c gUEN' jaPox úI.ppy@yÐg!I&Upa޽n;;U?+X\\T}׋xIU%uu\X&jK/3$*a\W޾>,//c`pHq[ZҊl6>tHU۾gqK41{9U߽g.6v9T _$*Y-ZN^;]QT4wu QU(z * #d p^U[{'HT9OjݑzzTyO"2vޥʟ?ţ8vxN!UwӪ*\xh&5c, ?yVUJ7];$*I -Á}vFQ{8RAM՟JW\~3_@o_,_0`E|>|/'T}9;[o/E /ⳟS1uvM$;@PRjwO>{nmGێ֌.DꫮwLNM)>[oo:r.Wg|>߶X,xәp |F'2bG~_QC2ˮ  $ &6HUlGq`3H&wOIg.\sUx{S_zcع-ͰLLN er!.ݟs?0=wu2$BFX095I,=Bw5h@e476b{KsJPsDiiiw"Պ>p=~KjazURzl|&w'_ĉ/fsWPu8p\طGPh*l6Jh$a}ȍ7͍wUWګ6@ҌAz$ (RQW[Y@1wW5ǿ{9OjrO5hpαoyhoG]jvqm7cЀ;ow2@6;a'$e;Z1<#,ކ{ȑwKs3KY]%(MGo 7|T pH4ٽ+[,Z)m$Yƾ={o~_w]Vz1 wkRwQۍ.U/na֌[4()Pg'~Z $hnnWE\vŸK/i.!:qu֦'! hokŹ 9;w\Jf 8W1i sQSS榦ޑdYnǻN\~%x1<'p"X~WE8`޽Kp%iQ'݁$G.8wٌI,+JJ(/+Uۍ*T(++[]ᧁ4emndn]߬C-|e# ۍ_{-JMl=7?epa/-FC}=fg3Yq`~U%Ք]ts0y6H(\1TW=WUr ejseFHL Db= L A01$abH(W\WAQ\qd;~CAQqqvZ6U!Ƞ501$abHĐ! C@& L$(IENDB`photoqt-2.5/img/filetypes/sfw.ico000644 001750 001750 00000023312 14134304233 017461 0ustar00luspiluspi000000 000000  &PNG  IHDR\rf&{IDATxydU{FFdFFBUVdm ZJۍmL(#jt ǡ8v=.ӊreDqP*XlҀUTgFFƞw珨Hs=^D9?|w{e80%B@D  C@& L A01$abJ\tEu.p^ˏ\]8_Cv' D+@NA@5v C@& L A01$abHĐ! C@&h0?Th+$jss#!Aʐey՛-DQd ZDAHC Pddhx tr.9_߳cy!D688XּpR4 䬌x8X(T"%1Vcs9rVFz%r E@gw'|th"$x8e)p\/_h 229š)"<Ͷ -ǐ^Ik)C<U!HJ geB1M9PTm$ @cHS}mg2D6mwSBP9ф.6DerH%RAPEVJˏB[+@ FX~=jzJZF1wl5$``Ȧcc޾0'3(P"29] eY NF,9< |l#_KOKkbz| s#sX F8ՈElU Ȭao! 4 c f 4 P0lAmY1;<)-geL6g (PcA"1|&qcCd14M6 @$K #avxR|9sY۵ 88,6K~S9o1&nj0ư4X(VR 9yC _]J8`Z`Ytsc6VEIe072Wqa~|pBW#6-aF]Qe;5na:*:5,fƹ5HӥjɋcX`al  #DwxaakNgup{oVd3gg.B@pw5=,J":;5jYgIC,fpw; @6W#k- ,j U7դNmbzΑN9e9 @n.=e/.c?0MC4m[/#m z}@m[L`R٨nkYkm  & FBmoͿ( Զ'4[s;'@9?@@4&Z~r! J-5r  FK,rMUߚ*$DShoKG9$DPo+hHQoiHQo0~$[O{WЀOՐo9'@@V,`֜ |HU``XXЌ̘  `][hwSf  Yo-'@@4-!sHЃV̔  F/z0KNY~k,9.fHУV̐  jFϖߚ8eܜ Q:փ1nN #X~k Uco=5'@@T,bԜ f`8o=9,ξpِaˆߚ)0pcSAG<'#[~k C0yT<ciFփ"''`x`!b$aB&NN@c(,b# -1i2l:t3gfLMco!'`hs2&^@|iC(y30V ZF*#tńZYO`I9C c ˘>3]ѴC&؉1=SʼnESY~A NcHƒ?9\6W,?c pc!1:_|y029J9fփs[[kɊ1y̍͵ ֎s3A6v*ԩ>00ƞF= es{etva6Nп[{e dZ[g61WN@|'Z :%/Y~UAo9} 0-=`&˯:-'[XiM3],꣗.1T2U4 Yī Wu.@ɘ|ulGMcFڅVsO@PMGmV'c&osCN@WPKȧ)_~؅\Ѝ|^>Ӭv̏I֠n`5䣅ULԵ],A9}@!ѹ],E9 j!&KՅb4д|^U!ӌ 륺0Y~ۃVЮ $aCp2_dmfY!3Q'o{bN@O3м],AK9 @B>hw&ˣ Whm?M @C>h2\uaj -')huȧ OҌ],C+9M @;B>̀19MT&˯6JN@OSڨ.L_@@+!Xd6Z ]4QvW&˯Y Dڳ:v>O`CtՅ 93 McN1;OӾdՅڙh^`hYuavZ/,㯌^h],]9 !H0bwVTf`XX ˯NiuN̏ϛlfuwal_v'2XB m&˯)ԗh~-|uMԳ 8䲹Z"F4E=0Y~C+s-|TG%0Y~GrMC|TF 0Y~GrMՐI|µ׸b? j'jO30Y~ L!'0ܼ@s@k; 0!4Ӽ՝|BvafTS|Tf.ry0Y~C3s C>jS0 ל4#'9 مk>PG(U&˯yYO@Ŝ@@!&0Y~͍ 4$ik‰HY~͌9 4cH%Rcs2)<kCVFiOrvQ3'PPȧ=0 ,ɇ J9;Pc?B>@Pgnx T' !Y35 T%TcQȇ 4H#9( NOן齟 4I9N%,!fQ#pܐRU0~rrN3c9;Džcy´~{p 4 A01$abHĐp8n'A5J\){LEG>=rr߇ *D >WD}}p?r9 $*W9dY0AXU}$C@& L A01 hvcau^EQ 2EY(`p9ի0VcJiE-AHcr9,/b cb|f;%l6tz:ep b붭p8` G7b:n2-c 6 d:.}uϨ,HeV$Xmֶ\7@P("g/%{9LMN!OT,c .9rߋnPW'Τ3翄 zpptttC{Vu7~ȯ!cY/|lpc7*+2s=M= dYoxz#s$Ic|t18]NصW^s%0[qI<\W X|u-"aUՊ-2l62 "1?;P(TX@. >x"R! =[s-j@A0:<~XUNj˯b(< LX_WO'cp˗NV/$If!(H8 T H=j  _tc- n&']]FM%B(l}w`;rfO:^8Պ#:;;kP vqݑ𖷿?xw/4uHZx%iūGooY/@:Fx9ܔNŐdJ\$ Xc T `c]^صvbo4.K9fC2W]3\qeEekTlX,D`$b>~txqn/"DQljF`_9D#Sr9}lUSLT\bw{U^v)z=.T^kڏ}O>$ Z\u*l`;6+jIgH$T11k P}}E !H1x,0rvP}}JlHׇucfH6 vۮx>J٧z7w;q"0"eso~ɏ~Ҹqns_.:tQ9G/Zҕp+)1,0;=[U3151 #߆l6htXDz`HbqÍ7cʚU1=9t?z!޳W}{PpbtxTsYֲu>_.@)H҈,G 4Bʅcq9uKv|~&FdZ@/mFeބQRcUz2 Nt_x?n-8Q$I]W4 Pd2jyV[psW_yuuRMro؇!Y(BCx :8\9@GG{K (rNz:?pnb2LǃNs8]N}\++}(>_*C˚]5j9t:3ÛaQc.WE4O J}]]resӁn ޷+ު=׾5|Oa|tp"`Z[ p㓛q8UX7+ lU@lvXw\( /r|hSCW  e!0X\Xtˋrn{VVVpSKH2'ycȲ.|}×o|UK>.8ߣc++,-y8tɡ^ymD;t=6$5P(?Џxx}z#?-)w\lYx5H6;VVOEy7`gϜ-pزu v܁WO篟zX]]em1B`[ @ݾn\wƙg_~8ɪj lsq͵`ƃl" 6XrX4D<\6ׇ3w'؋~>59ٹ I f8s2, <oϿ>9=5Cسo=oy8pjV23qzz 7$ cq$ɢ`݆]{va=Z}-/-cS6 t:P Y <^:|;nYFcX\XT}Z(A:n]]%ɤ3Cn_7 ,]f8ur\\.WSʐ)t2.q3;K>(^uݯpazҙxfjˡM?߲u ?EA/mEא''{}W 02N h-$-@s`>f\n F / /_dangN7whՊ-IW9"/ f#ZHZ"+KYZ\R}vCye3'f;vٵs޻mH'^o Tů}}xW$ )INO܎z;dEQGF ߳Y8G;vtv ( Tc{pÅ;/ġ7Cpt@$Ȳx, <8b|tsC)8W;Ρp:onX><n?W% m4H HK'p˧\.\uDIgj:f{vخjz $IP 7^t0$L$ [|+.rCݨs>\rb%G \~v{051UUzHAs~Vxƚ朣deߍ{u9?_IT:Y!(BzJ<^>?>KRC s^w^ewtbhPUl c >w~N!oBTu]%' }jq6AsEOaEK'ުV,V v-.}w~וehDQ,c.tz:ǍNO!ŵQH7Ї!/ߋ~=(?uefzK߀#5.oCjlZ/Ď;*UQl܂#7APpȐzp;\BOKN|g0x,t:]͊zp pC-aϾ=pw@Q;?E W\}E pmsp\Spv82Aq⓷%;W8 vFE (C{ۯ|;2 (KX_rhpT ,CHlt뇯׳oE$ّ?.]( :o~D BO=CJ "W߈N5T@ C t*6G[S?/~g dѣ$c4v.a4$:GG:-0_1)ah x mݽV@"@ 49Gȿb!Be$cLh r HL?11n" [C !w҉86בNA3HaH'co e C*Ex;YT!l Ap+w5ԛf#J$a;94EX d3)C꫗)9FX a U}ںH D¦٬Hs`!GI*¢1dYtWdHƢApE*F2B $tnZm*J-1[)ڡxH^ȤS9NKZ:1b})a($ͤ-5lJDnaws ~Z0@jj!,IX c #oo1XD H^G guȲT4 \_ u{Q2XHRKdi-vw r-8wlU-1`- 9=^KXU ¥L%m!\_D,u, ko"Zlc -D 1c vrC:㭲ĉ%TU]1t2Yы;9ԌLwQ嫳=5յE1dRI!KBs`WhEumrj  8mh?h,'$ @U5>s_}cv* mfYHut@p.uM^anwo{L1Q[4  53,@64ޜ˖_F9BS[)]v.&Vγy hgOIknEmC鮲Mՙ_z8f2αO9M(-s+ jQ+_f34A=py@]=.OCxa59~>'p@9U"sjL@xk|t/7M0Z~;Y_4Yw@Kt*\noyo@WgU-_c @#moMmN._c3:zQ]W;\_=M (A_}3:Pr)7u-!rq=7̳i:,z>#Jbr!ЅWzΌØ!SY!kjAv^9d!_0qH9'D^vr N= #B*O:qm5\Coe>'Pwb. kjA*G"zd,L*IB8w[Uz5SU{.?Z2_ t]Gj@HBpBM]j $ R6l&)$Ig9n/}: Ɠ,z ޅz 0ӓq mv/巜 XF߭q[K9a19GxO9  ʂR߲ro@@5U~  Qbr` ,z%%o?xdrX~rg%CO $[~HaD  Lj*g !,QU~ˁ@.'HCWO93ʍ!R9=H0Wٌ3s$Aܙ9fYN 霜 Q<&j?Ӝ99xjՁr$DQ  _8)'@@*_=8%'`_(+g_>;y?;H]b5pkoa}9X9%K@@h&gݴWrv9B#ymcHMs9 s$zlbՃAH]X~ .'8p-{v#!NaCn,vj圀l c@V_;[~5=r56 xsON&{5Ӏ-zSNC`3g58"{/U4 D\_CW W $!ܶ^o89;[ܱ0p꼢i1t*-zzNvC"zٌU~b'Ggkp/Xđ_X='`;f/>G"zapo[s ^B XsWV Lvq˰n`5v([rl#1w6X*%Y8G_}0l!1DXTl؇1dl?܏Y,d-'`_t߿0T"fȀe!bav3oƚ+ڕƊ X^!s|1=a~KWX-'`_O)1;k >ҒC_c~B>% /.n@䯝 vw,q~)E`iヲ Ȝ]8He!oi~@YE1 tv 3W-V XJ|Jy-BZs& XF|JՏ d-B/"0gN2pi !,o&oyM1cW‡fL)Ervg ̘8'`j`!fTȧ$],9R]|JMkم_X~[Ҫ1'`Z(Uȧ$X.׼+fO#!R`~0Y~@n?eL'e T&.L_s X6~r|JxĄՅk*r9)0|N)/&.L_a,cE?rvL`Jk.̒0Htȧ$ۅeYFp,f 9 YB>%80d3 ܘ!'PBN>V o^],9 @q;X8" "T8'P3ì!kd TD)AcLvaZJ/ ,vaZJ. L.QB0Y~YN Z>+yyG c\T!v \],,'P[Eg S³څ.Y~-͋@yRe|JمU~kyʙ(H,!cˠT>3'PWZ?c8U&˯(WNg-C>c]k-mr'% Ll)qDم_ V091vV ˯CN 9 C>%A]U/}v9'|Jz0Y~B)s #C>0Y~C)s C>F7\X],#X1.rNua8r9(K'`HOI`!_Kv쀪:9;C(Z(Sb,vsva:sE Yga t o^xxѣ0Y~9w1/> } ۅf1)%u0@C[;վEZ 8"Ga>LK!?泉B>a hOB>QI hD)6'zB> `!RDN@0A9[lSȇ Lɫ9mO ,|ļ h(:á-4n]J#AH2V( @`9lXg ;Kmh3 ZA8'C@  A8p0$`}5>a!AX $I$~=g~mZ *k) @gW7FƑոm5AvVn@$Q ,cLBH  A8p0$`jh)dT5id>R|SiB9t:ir'ɨ2P\nx_DsKiiUu5iw7_zޡ{J)I>bۛz,0>^t~ϗԧ?cRX|2PVW5MG_F2nBWeŶ 6?1x,9Ŷb2*rEu7pUf[zDVcDNCL$xXy!ݍkBo;74(_ T)̢l{)#Ţ㨩:*M-gUEaj'w>Yl"] d2LIچ?v{!<-]B ASsKA19b1թ!ggTsM܅-hBon.Qqz=mr"rI(5T [0pc铂zzP]Ssal6t,˸Ӄޫ}m iZHRkkk1<:5B2pe%H].LIǟ?`Sceyna[QǓ8>>eBGFۆX[U;C.+stv_Ƶ?a cGD GWe\1P6Vu<&*K%XQ9fmŶ7o~R$&jjj0<:V=yϤ, oQbnfZo1ŅyF'6x!pα bvyv]ݸwbȤӺ$2zŶˋ DNTnWUUctlBv8 [ N% BsKKSOӽ܂nmV>L$[;r$c;G!GUu5dYFw\V}^cwOcȅs>WW ;:ix[ c h'lz1<6~{@}Cn)x,JW[[M6̴*w]`c!@x`gleba+Wŷٔvct|B=D"׫oB\яήn./l;7;T*Up]VÉE`l\dY$qȒ~-<ٽz!^+C#oh@ k5&Yv 7o) v«v6Uejmmb70q~|'6`ff1yC,ڇ+^PpsqF?c@UWWctol&;:=,v:? ~?ɟŭmc8:<ij'ۍM2}B7 6Nc=zU1O`c,]\"1ݐ`c㯈a z6kX_]-خ7o1 0269ON2n T+=gccuapcwmqJ#l}Wz9bf|ei~jBSU$S*V:njn9bGyl#t ?Tl78t MMo !˸?K_'؄bd2AX,@e Bk[Bh o W_llKVH- 0D,+6DGW7psfc[_L飇_QBã_l8?x,ںWLK3f ߂\҃޾kt=cQ |& &M1 7X, IVa'C*5v\laowu_?,JU( M&N`>_*SAXZc89>ƓGwK*ģuS !؈[ʅBfK ,Ft XZrS#zx0@H~3T9ֶK4%1L=yjWR0@@+( 6#x\U TP N+6S]erB+ =<88-B8v%TaYO+I0y_d.\(4`~vu~qTPerαCm>\齪if1;=XrٓG8>:BSs晈oQv3Hӹ`X]H²' +<@9_">󟁔ULY|ςVyW3 |> ۬,/ ?Z$`[D"GMjjjUڊ;oGGx}\я;X\WL B  IJ,!E 0=e #w୪BnF8+9crHpF? @-c O>Tl؈1ݙE.:DYFrPA9c 2#pnʌs66T齊޾>W[x>f?PL@ XN8czpkxjyy@lmi/VUBJh2l,'LD:#2;008v7sPB51O~oSX2n"v){=A]?^|_?ή.w?F"p ܻι)ЫTU{lo+s`U,O`vn7Ϳ*QTG,,'h0wfU,@q! C@  A8ǀB*Aۭˡ8!]<Asb;E' A! C@  A8p0>U /vIENDB`photoqt-2.5/img/filetypes/gpr.ico000644 001750 001750 00000023131 14134304135 017452 0ustar00luspiluspi000000 000000  C&PNG  IHDR\rf& IDATxwxչ33Z,KC3`CcM KҁpB.憛`:$!М !q-YwiUW+m9ZYvvwvw{?!3;s93ap$R;@D  C@  A8p0$`x ?lvzpW t"1 oz[9S=ߺ+PU5DNEH]8PUF@Vvz@  A8p0$`H! C@ L\+09]JdaиA(FD $.EKV I IH 1US `pd?BAD8،1Ȓ NjB› IH@"1#a wЇD45c@US"7BQ~!c^~dY&! @00h\oNS|;a5P\0 *Q_]%l @00Bhnoעsm1pp` PUV ₠E!H~: 6CDUW-A'D0EcG3BpZL Fr2AFE}{Bj? ã~7aoHt?`OO(CRH B`?kʜ0HÁBEP5ёlwCs 6H i0 =D 8jي C0p2'[L"jĶcN¡lwV@8ԔZTDTնumhh @DU-% X%w ږ: I `:B7ga>sږ: 1 4Ձ {o! L c =hn(.I;K c'U`^j*4!}X c_c-"*ES~gRW&1(1ۅ_'$64ξ.4wZ8pr,ub)zpp$g7!pi4Xs,sEB Kq٦T(c ]m}?Z-lL#6<˜Xy/dIv7 a48ږ?Pڀ$ (o~ IPWh& c c1o Hf1y 9?fkIݎv_}D0̀z}  +!#PZXbUac HYp+.+3Ue>e7Xzd"̂@ټRy9 By_L&;)'8$sq堪Ҕ.wo27mPN qR*[U|+&,pJۡ@A,^Pm[!JJPYVB4d6C9 @'˪rguiۉ|,\ Oc1˯jPIC96@n*%"Bzz9oV(X~!5Yw@%Xp)rwFobWU+PSD, or!H8lJe*-*+Q_h+?,Inum @𥇡"B+qآdNpM2dr!HoWE+P81b ! I%d">W~$oM w"K1?6+V˭P_e_YmsՏC@{\Z/.G˝7$)eJ `pd?BAD8Ȍ1Ȓ oE(/7'ߚX %&wЇ&l-T 0!dIFQ~i"jdb՞s@dnn.Y$e'%oԶaJM\$!ǝOGW{'fI 4ÏK8mhg!`MgTBI$4vPN`:$DF0T05PN`$DډZ~[ &J4'M9IiSPN`*$DzI70A C@LX~! F,B9Ci!*rC;@#XN cDL09'`VJoè* btL7pz?B07Q  ,dGaZfMIrz$1 9sr$Dʘ~ 99"ejMH07qRNH +X~I9"ibMhNpٱQ#2ʄW79>Է76I1ʯL?`}Vb_BDkA"alMC9[}ñ7 3'@@$ ,]O9B7v&]s$ndMhN`v9 v& 8Fcxw?a)hM)9th\hjݶRtcgoLzpdum %ã~l=6{.lMXN ^chWI=jhjbMXN 202 ,Ihjƚlw8,v ZTUŮ{4A5ՠ1]8(9&k'`ZRYO^@486z'-"I;-1Nk8ea4;1[@-`1aݍuJxkvWq doX='`+`>qp7G: $?M8-`圀C`_c z:20PZ-ν7q&r FchlEMT =C[3dMz9[c }CYjcale*Q˯,I`,?|kwcĠ{;^مUMEMA#dM+'`y|Pʄ]˾IIWP6XHOHiP\E BoDN XVf {5D[&]md5,y|Z4촩]r̊]u{+j],i* XRjZْчU6م^$In#0Y~ӋrdB>Œ1 7L'L  ]}Kۅ9!o1{N0%cTQp-j* IGUU4j#o0sN`d' Lu)U~1̚0O:څՅX7D5zkؓOZ`4uVfz>S'`ʳ  M! @5yua3L' ߦ.L_S05'Tp(+#!C|Յk.`"3o{TE 1],,9SXǢ?c MbfaO_a)FZ,~B> =ٯ.9GM3Y~͈rY|ұ_H8vahN`09cمwd8@_SȪڅ{ǫ g.vd;'3ì!tppMd dEI>kAc zd+'*!td& d\,1T&˯mHrV INOuaZ@KȘX5$)Z]h0Y~OȈL]'H'' 3OU~mA&sUU^; # sQKU~mA&sږ:4uY?c4R ~d*'ֳŎ!>UN`OX~UڅL&v II.:)S@blN0Y~I:0LIvۅ<&rMƮ'`HOz``T0Y~$Ih4v=B>%jއ],@J0mɕ|@.]wG_ctN@I!>O#IrexSz ҨOƈ2DPגzN  죐OFDS@4fDN ᳉B>} $$SB> D61"'L }?AdXN tb'CV!Hv=]ĕ|J$%N]ɇ @*99^ I6' ݊Pd'ab4MCMs+;j F2TA#1M(),ƶ;g@Ɩ'dM=A8p0$`H! zlaƂA.|ˮ%j-AC<ģ_.ކVV5@$l5Aك) ^]\BFkPeߧ`H! C@&H*sh9ce$Ck*iNFԒU Ec%H]o҄n `on.ʱtR|dj>l5T“ɉA$A8Nw\CK !97dq !=3 ,I`!B8$ @0 1 ]=;oa[ކ@ s=TUVaݱkqspgbqكdYSO (1 KKQEQa!JKJQcŲeXX( 4MKjIںZpӿ#’1\.^o Q^VՋl2XUU(/ȯ $I 2|}><`݈D" mc,D}c.e|+5ZZ?n\.+%cqk錍Xz,H>$c ~?;Q0ONJKV✳6ak%! @czm፷4D8GZ;g~[C\|ѧtDEvnC??gً/Aʄ;h;ю|~|Ncn @otC/ǫo믚 ر{'nF|7^31}}xp_ދ1SL1LIi.j[M>݅>fp$_zlwԘY;oE`^_/nhhl0!uػo/dgvG$HֶV睷כ=ol)]4'6@os5mkŸ]PGq$V-D7χzy/~pccٗEՋص|;̹ӍB՗_U+V,\/N=e^L^J8~?{юᄶ[/ ˖,5XeY%ߍG|,-_.|X|%^)vnS^zy Һ?NZ_$I.P}}8P[}9ncsxM^y8R\egՋ.s-UU1/<ݥkM-ضcV,[N0 kxO]gsx1v-8c 9TUic(/+}EKjȲZb~Eƪ +vuݺUyYN[Ӡ,d0#gMђ\6-ͺ>|2 ,CRH3Vq{_^UV7 Gq I+$ %q;ΨѾHPehߏv/EOhmos/0ܘiχڻ{ߋa‚B}FC 6>\P8ɈKǃ]w#NF>})r:eKắz4-d0 3\h`f\O.Wpw4柙v݃~ȃBY4!rWȞ(XwZ|kqѿ\\T^_/n?Q^ZK/T}33$B999Ҁ}_Yb ***pqF pR`@ù1!ď;1_{k>ɋq}_]=oq.k8LFDTUV6ohlA9V: G|PV2* a+orN4 \Ӧ|wiI)nP5?quvuacᘣטv2@$rssuomkEkJOMR/]@㚡#o^ܤ3Ͼ'ؽN`,#v?wlwpQ^Vu㄰=GA0 !y4tW044D2ip)jN 48Xb%V.w[?ޥ3DNNJmۃ4 i!PZR '} adMpqަsuӋaǮ4 % m:y: ]+xOdte'xpeW0n^_/6?0f`4qºصڇaqםx^@-}"988ētf3B0BsT}Wwx 'oM@'bJ!U]kh0$9Dž_׮v|o _;1666O Cb˟_3?]4sTvi?ضs;ANYBr|k=C)3O-/bEXh1GFюlBW]v^델a_{[ E>s9'.y5< }v,8ں;ݰ-tFx7~+qI)#0́\/~pÿ Ab\yٿZׇ͏=+PH9+ +tfŒ|96["F!Ёip)a+We;U/1G!ⳗ}4 N8xYx䁇Һc gz:ͣ83S]cZ[^?oYHs(Q\P^Vf.^[C<㺭v"ٹUUt4 HF4,q+yi\}UJz{,cո7 ߻FT|JtlJI-'/Xf?z sHSN>';uowF 0pd1Ʊk 7`E`qig'9^HsqY(sαha5nCYBa޼yI ~ߟvnC'8#?'߉V!fD$1CAفήNc$0UUrPXP2,B*rT~K$H,D/,% R~?/K4nߕE]ލnqvr).,Bu©W[)+jJ澊 KX0$)%a-! A8p0$`H@$@QuAXtqk{g|)+ G$޻qua_A8p0$`H! C@D gEIENDB`photoqt-2.5/img/filetypes/icb.ico000644 001750 001750 00000022134 14134304251 017420 0ustar00luspiluspi000000 000000  F$PNG  IHDR\rf$ IDATxy\W߿zԲvɲ,3 ! 0x `3ؘ<'<M$^jI{UwuuUum{?Ւ^o}?,z~}}2AX^ Q8H!  C@ , AX[+Aac)\+a箻q> E }LAhD!2UU2T0^;!  C@ , AX0$aaH!  Ldc`/d%  @a.J,9B7sH6;$6f+1"d Ơ2A|>~Ba(r BU!nh،10InrW^T"d cPQ { 2|3h,2 vWE`DB@ta BQ\of`P+@ZV.[QT^^#%L @:02.C(Z| BUGxi زA"wcYk7Ywr`5MMpY En7FDi]y7\$D #P srp _ SC\Xaʸgxe"+$1DȀɿA]"V 2 ,cab1"Bׄ0($ o*IE# $2D_|a r4 9wACV2V>$7"al+&v2ߏю0Y`hP]jUdCXBwdlOkB(l1TaayыxßChiD K܈PUO aZGG,@}=|Cl1={.#obV ۬\s؜N\Mʛѯg7>'t sYѯmoy!ۖt͐9'WߔA9  rK-@9! rJ-)ׇrA@|X~ӪV! rG,)Hܐ,yz 9!漎^k'@@dlzrZO@W0,ٚ7_!dHRho:[O@W0zZNm 5bMu3oշhN zs$DaX/'@@d^-i{:9"#nM [''@@dз7U  f;oo:X%'`FY~S*9"-fM{刜bDo\0gA"elMXrst0sNH 3X~S>fHf 17Uc̗l /LgM|9cE>wS">o,)cœe@( \(/v h"5f0gd9k\M{h\1цh\:̖t0SN=j|W99w]*n67̔0e `B],9F0SZ+X~ 9S *˘辈&O/鞫v"dMrq0UX›WUwubɤ^ﴱ7Ur'`J`7=W~g!c a߰2XF Nc--ar,i1ec]s9xW'B>_Jq)L]-`䜀@L^dZV1 `nкO>sپn\Un,NY.L0jNCлf r,햳 7 0U^@$wV" 73r3 ^`J7fԲ],AUdL''`+.䓋qQk؅3VNQ'G;2],gv!sƼ B> n9څW-&>߬ sxȧ+A'0 -c|v5˯,z R!ѼvWkva,va# %|rYd)F F sC3S,A9K;TK]8n'oa!ߜ1@|cc1u#]0\| g-䓃z톳 70XH9] @VC>uvaVg{ 䓓j؅{;ލp1'[:b 3W1?:[W,D9}32 nNT2t?0Z璡[g+B.L'/s'X^bdzZO@WO.`cqj Wtd&˯KN@W!\@.f&˯>KN@-! t.L_@@/!ht.\ (Y~r+t2],9 @+B.L_P@+mLw!u 秫G_㰖N p-etmvۅkbʐOa+wcmyk>ș6—R],1Pns9ctX \Mwd51+2'J>F1L^|k9+F+ͳ 2s=9 dUX]8],a5''dƮمcمkIr@!\j.L_ˑRgd!\],% dZB>ݖU$c+>Zl2 U,/."0wr^,JsL~l|]x<gPb1[ (oh8#pFB>q NW&c !_vri\ 9-`NN 廉B>HQ(Cz! (!=z[1c Xɇ B9M`ɕ|@H*B>k2 $UQ0u;O~%:4KR >tkx`'N(J7q cI RO , AX0$aaH$rѷB0 @8Fhy9a'?} L! 0 Mk#|K*[cI0lNnٚ\P ŀ 00Ơj !  C@ ,LFky(rc s0 ƿ@$HVFBUsR jZ3y!X(Ås8]jWU^/GF0ׇ!LM"C@p [oǞ}w~lojBiY9yH,k.op:sVC$Ihkms_.LObϾ|ϣ,'$IXގ_I %f=ދwwn9tN3BCWi^ ΓA ~~+p 1xqIt+%)< osh4oWo%bJېeggp/w}㶻ݞ80~/0?wSxSOy^)NM u0 IDKH% cxɇ?)7BY{EсE7߹ggqRMY&tLgӏ>X׋߼lOp̙X Z[iŪ4!0s9'>Ov_Rvnׯ~yi,E .Iv_Oc7O{ͼq1߇~?ׇaz H:c&s <OcIXJubAW{;Ҁ`Bg$YKsX,AɓvDa{!.99+ yraVȲcDz~ ִ^7iJSo|%w ;Q^Y 8>&F{`aޓS smRG;=g\#@(8q]_ZIp79bI>[{oPӅ҄cyEN'{я 8JHm͆+VI0`_/_Fzrӓᜣ2Ў c 4yM @Ii)Eol6XTVUJYsswӼͪ|?8J!(7JJKq;pm-Oq!Tm -ť?~?^F" <o;R/@cX Ƥ3DW%'#?{ c,)-_~kxɧPT\ E R\r ?ꌝw1;\]}2a (aH cC8['>ROҩӉGo>ںD11_\޽8z75%,wR榧5 `h84''4?x(>Si7UѸ.ݝ%w}c#:s6-7=9ع{7@MTX4֓'55f>ؾ)+9GEcemg$l8t8N;?p{Hm5C`PV}>۶c'c >mAPU#(-+KX9~2ip11:qMOy'v4e韭 bdp0avaPd;wc˶m \ق5Bgɠ00<8߯w Uj?t]/Iw#(+/&H #b%8p4;@4Aۙ3I9~->VtpUEMb%H ,˘Tv?͡3ar?|p1CǏ'b[^ Ac1gg4h>p*& Xmܼ6n!TCm}}ߍ bx3d@c-.j*_SW˥h?w6-GUMZhh܂={niq/\@J[F 5^{ @:)=ir0㿇h$@qI =Μ47@\F11@NiY$IڴF1ߏX,>hjޭ靛3I^ġcnzK#Ǐq/v=;-۷1($$8XTNsmcnzO=QLM\e=p8Isq"f_aw˾BEU G+ضs'M!0(BM=͖鬪*|>Ӝ+hĨ( Z[޳k^4lrhm;wb{SSBBh?{:&@cFFk]C蓙2ưe=⒒@ ?x(6϶b9ρ 0(sHR峀g@_a %-w[oM+W0=1N"kyPhYޖEK8r% 㞙]H#";5/-b<9Ņ3gF75aǮfocawK lۚx38vB%>ah yȱW\gރKIW$l<"LpK(k 0 B8NTh*?vc9`s^$-;6<~wC8vbѸuY,xͿ" X ZO'}꺊poCQQ)ĝw&܌Ehkm ~غ}Ҋ,/<ſ4$m_V[q-~QEW[[Ҳ [`Ͼ}*?!=8w% Z|Xo~ҋ>C,PUX %.^8 |iՍs~ %-۲?R~BvywҲ=UAc&@$<m@Yt^8[ijaРwMa,%'n8㨨ġy!D# .utPE PU{[>gj"жx*Da\аđ5l;0줪*.9>0@}! <|ㅮ x=;+]W/ohDi4 $&A˅v*=W^>pް c Sr%j :BбcJZJWff5 c~ ;Sq ˅} w?c7QW߀C<;y\EE~cs3IenxU?.,$,;96*wdh9|k _ !PW Vr; xq?} |:;05>Hzv-{-rAQMYUص WH$pȑkyE `o_aK# F/g?Y ]W]Rrʬ;ʴr,E`vjnK>D#Q0QRRʚj4lقƭPS[PlYW2f՟%I8(%f;>+tEb q EUCeu5jkqȑ5Zmk҃PU5eZWIIhuH,aP0$aaH!  +6R `ia$mO]D)SIe0#AF!  C@ , AX0BZ IENDB`photoqt-2.5/img/filetypes/g3.ico000644 001750 001750 00000024407 14134304077 017207 0ustar00luspiluspi000000 000000  (PNG  IHDR\rf(IDATxyxսgfXo=x!) BR4->}ýOJ[%rY ,-%@IC65%/-[X4Fyi~#Ι39 .>H"! , bH"! ,FNՋ IRk%B%aӶ*W/-| 0 Ad Q$Q&_ , bH"! , bH"! , V`"16!ӒD!6EQF($" # # I2SZl`6 |H%$K PI!ٌ1<$f3"//99fp#! R @0"z{}pzI)?'2aP^L`dYafc,6X,t44t ԙa NZ!HdQ\l pQ--q nh#$S @q]2PX;o^ lp<$9ọ,y1yy9#4 ,X~c*2D^BkHD ԁ|z{}pWU'55x堤1FJ"07"9fCHȲ(/Cqa`a$O0J>99f //99 u~ bul/Q8H4BF:(* aBa#q, Ítv|@,RWׁB89$c Иȵq Uv#kM06)%o-@Q]]+)Ako|5PN`<$DQ,=[~cr! ʨץ7 |"$s5$DH7޺('@@$_=u4 B@$eY~c]aLZ~ڿD  4GU~SU(%*Ε no'@@MY~cAOk ד1x1zN k쉲9L47HoDr]] 11j0]qi NHĜ@ @$ٯ]k.ܜvaGQrΌ d $㢍=}IG2jG2b0Y'YǩvzV,S_ߑƲB> b\TW{"sH@F @004F 7d~)uu!8م\2!'Q0qqqm5],%r#_vf m<7 d8r Ng>ƣX~]dM2z d$њL 79'{*䓌FW,0Y~Ss-C> dMz VIǎe],C9 @B>ɀ1ۅǩќ~] @C>@ Z~oO5:uuO@wO2dzO@WO2Wͺ W_i?] @C>@ juat%jv>V&˯>KN@N>}K_@ |2=؅oH)5 W;'V['prN],Asi|Ǎ 93'{'9 TW;ܜxf(=9 @|A*dLcp) \2)5Յk&o&@J C>ZՅY~39TR&I kke7I~)L$7.X~}d5 DIvބ;b ˯HeN %`֌څrx*'T i]]8?6Y~GrI DV>|%fb׀"'40r'څ1}Noy"qRHdC'(vv3<Y~ 1%/'dS' Z~;kpT15W&o'f!]]xr0$#'ds'LgU~d'P'9D _odN@@!"#mhoWdn $$I>7:' $a ]x߾8pX$b"9|l愬 (:"g9Z c$r1 |"hY(C@b ~ ZZ(Czb4'WT%!}SWcyTL6Pȇ IĐWW{N H|Běliq"  "jk]()Ƀ"aGe_{>0PSDAA.llRR;0A bH"! , >-V5u#~CӶ*?ظô4Ad gzrvѾ+Vp8s"B% rGvȲ Q!4 L1jX$, bH"! ,&0q,$I_zqxs`if65J1m$Hc0Djey^&6E"@"(r&4Ng<~A2L&PQQsgcѢy7o.JKa2 AFIۇ&w~ ٌ̜YEaɒ3g&;+H ?n9҆v::x08(8fbΜ7o.ϟX,nF "s_|ovދ D;1`bXj%.Ys:JK!I-<|A|!?s'o3 "x"s\p9Xl1,KB ݨmg.yTubrsmSO]}TT HuI)lLNqpo{ݻw Ō˗[oUW]! bǎ]x?>ӟw;߹gq*L&Sal۶--z} 1ApKiӵKQ\\W[ۥL8|E a[k@{Ͽ/&)yMMغx:; 7Mp[`D?_|QIc ؿ0:z?`嚎 a-x饿i#Q,qp㍷'G?^^- 1Q[b[~02@L B1phu˙c.tӏ{ޤWDMM=nv|5SAJx?v7Ύt3eĿOw9iwy?;hGi Pq8z?=how)klmu'?ǎե]k< =N !9r,LI(~ܹ;ݥčdݞ<;Vzzzv )Ku] 2 M @8ömoB,_ ˗Y` tjc۶x7}$ v{.q9kfXd! a6GɓyKdB\tyXrqǽ}Q g~\~qmdH8l.;33gV_+pC lr JKi IRu/**Yn;x@Ld3O1`Ӧkv0* c @Pu:`6G[):8 #K(aŘ7oNԶǏ7a`AZC0/@n-j;YᇟĴsH碨H<P@e8v̜YmOO^cL$X̘QAccKJeUU30\U?G < &`̻eƺ4B$bŊe75fWsVZ;{zzkOCx$IKnt@0V֝zA}}&wخ.*sXLXVUpL100CSSkԶ < L$8ըPرZl8zΌ|7½>ʸ#N=u9.]N׏O01C6776` $I‚'sתsϽ`L#7jjT?W}_>8 ƾ} "D|8Cw?W3fvNf$`6~&eewu?ڜy8%8Y<ρĞyÎpe7[o}d/?A&=t0 <{pݿҥ``dIp晫p3~snlp>L̚U-c Ν J"}~ut3eee%xlbX7HHp8 DQ²eSņ WdJJU$a֬*<捰Z-mso{l<'oުf7 }ubD%̝; ?|/|Xxǰl =F ,[X+M7]23,+sso±X, ƍ!<I`7K/Q]]Z `puW&<$ V7x W_;jj^瞻7p5֮=}xג$K/DUU>cڵup{5 &Oņ W F~~BOɂ!x~-[6kڈpYtvO;va܊ 'ʲ45ȑj:tǎբ ]]nx>Bc<,3;KxZkמ%K 7W e'bv$qE@GGtuuQ@Yӌ<e((ȃ 1 .W]rq͵3f%%ɱH|E F\^݋|$`ժfQQ!KQRRu/V@#Ϋ ;PP?ҋ< Ȑ$,vc(**@II!N>y5Fj$I! @ل">v䑥ĉ!H'ݕL_O"R , bH"! ,&[UAdWW]vc=M* 8î]{$¸Ad1$ŐDC@Y Ad1$ŐD(ZIENDB`photoqt-2.5/img/filetypes/fits.ico000644 001750 001750 00000020416 14134304130 017625 0ustar00luspiluspi000000 000000  PNG  IHDR\rf IDATxy$Ue]UwӍ@+Mc 84(GG 8^GfrAGTFmD}}+++*3+8^̌Ȍ=OQ'Ɖ G"Ap0$`H! C@FJVm9\U V 4mG^ۥUV(\c"B#$.Be$a)T v C@  A8p0$`H! C@&_8d%  ްTw%H@I&JʛA J.n7$ c$D! Ơ2D ƠIpU?c3Dwq <^/>Sb@B@\a J"Hp0TYG\H&Dx4BׇZ|`HB@ @0(0>8X$ j`3L"4G$8 -6 Cbr^DF2s5WUD&&]XߢE]n CQDt1(`_//D twBI$0Hv)x$n(BatuHrD"o@ !25Wtyv$&'I] HcHD"tw?K[0F r ,cIUQ ݔ$qCy1$2bD_᪊h(za r"97KVrV`un)Rd;C,B׾=)a&t`DRCjU&eKXs;ooC;t$8%)[,[b"Sc "ЙC͈NL pU4u$cQ0A@<PKm7ߐ=[c ?=3eә ݉ЈF:@p2 b[Ew)YPsS*}O$0"9c&G%YjB1Q`Y m4>8L bF9B0 mK$.R 4ocq۵M Ip""R9vC\nn00ۃȜ61DokPRQ%n,]R Aؼ\0D4^ {&AK ,OYy &(.ڦ0#KL!bVh# J|L]2K9doo'`_oj&"OHfsrKJ9+|py ݎgp8ά*2@Ɛ́r3̂BYuۨ-p`d \p8Gie%HsJJP{*,8eUjXΘ.s&(EղzZ~3 MTG-]b_" ?0TYtl+\(P^Sb/FSǟ:Hp4+o6Ljj!݅>|A+Ct]eHLF@,4d4EN&c`冻^\^+l-p1[I! !"<^<^@I&S$3B DvCcH^?7[Z[^ Л "HϜeq۵| 9gm oq$p>?'tif"/m |pf |X fN0-r'@@G>,Y5rӐƑ'oLh=rM'0 azT5&g'@@U~N0!,^U~Pk3\OЕB[~io<PK38wzB07Sfr~H07U"̋,7ߡ9Bf'H17p^NZ~1sr$DN!sNN UU1jno8)'@@d͌ܖlpJN^W+VfSr$DVX-v bEogA"clXgröcqo69'@@d,s$vlbH)1Dpl /lg~9cHc*Ͷf s(?z.؇ThUgf9g\M0{QD,B=HD5cvfrBa9 2A@?'Nfr!g>$.vwbЭ45NfrU{"9^  t9wf{>d͔ruUnmhw7(96zg-2z1p47A,'Z~9 c щ 94d0{S3Nll'r"0A@?w-`圀s 45`/I+[1'Y~39PsSn7a;.LjNC$8ރr^d:.LhNWyjg>#2w],1NN}GcbxHקdU1hq!#nZ&r],rB>d՟fDC Xj1]&mhڸ} 47ss,)yB>C2: X~'0wN tua.,.L_CBNRIǐߟ .L_CBN2MǨv `OM,",됏!YpB_a!:fޜ59|t1$E$8j98f191;̙0-c@Rvὖ 70dԜ9S !#w]X.ts,9| i]xN,Ì9 W9*i'clj@˴Bj&Y~ s Hgm9Q0}uak̴X琥ꭳ{i*l Kѿ&ǂ>`20Y~M0;cL0ߏ& t%'`^V00bd5'f :cۅk^̐(%cAN$…ܘ!'PT!)tuaB +9c U],9)WZB> Յ3#˯u ?'P89tvaZU1Д@|@U<`], Hsy|ccHD'ѽ80Y~ps!60?s .L_KsBN OB| 9Յ [O ?!B>ƜVd EN8t?+#T&˯}gN /.!ݙ.ܓ],#_9C[|tMMuۃD,#_9! ʼ0Y~ c vcs1&[؅2;ژ2sFc@S]fk+]c֕|du @!9]+Xidu9#OƎممHXO@7prم8ZO@F:1du.F'so >!Lۅ6סM(ca! F!05 (?r8O~0%:= >F AU 4RQ sp?d\%A 65 |-XO頗zp0$`H! C@&`bnVn7B@aDI/)wPh1֝y&d $bK9EB1` 1u$ A8p0$`Him@3QZ<Ց Nc fS }GA`lWU Up Ac Om9Z[LB톨dZ2Rv2AW|8W%Ls3.*~N=99 }}FƠ $ɅRTUנn,_+pb{%iF41x ݎ]rIZ3?y NUUQb%{ N;1>ZszU*|aيu>&h;7=x#a$4,.*BEe%-_3֯-[~F,GUQL#z`yF~kiZ Ρ5!co!8:FUM "HFkO  œO%Κ1<8Ayx'aҥ薭W`P][[ӣ-OmAMZ(G1ynQCO8FAvƽߺ|Gv(ޮ.vu_?֭÷[m;1^z_F];$ ܻMY#(p(xtGjr4AqI $iӞH$O$xK-Wee`lD PUL6( Bi rOU%in7 x1߯i /\rXj5ʼ3_=TUE,(:۰ơ״(ԧ?V]]] +WBI覯܂O}3o+^|W?| 6lڌ;廐$ sCxb'Xr%~_BV9ADg[+n1;PQUy WKnC8®Ҵk ”عEn X||Wq~so@_߲[j꬙p 5+Wb)̻(i+*+a&y}H{EEEXvf8OuIra婧bC*)1 %nJ|.,~?eزlz.>^rQy-O?N*nLGFڷOufEQt}1A`ƃۮFv8P13܏ˮ~p$>A%( B"HuPV^ACd"a  @@XH8i$WRZ[IQTUW,nfHKh Kǟ@%)x4==ʾ'tVTVM؈AD''!^  Xt 4m#[;ZSm 3yQTUŒeX^D ~579I@YN"p\pQUS[?oٟ> /$.ݾg}6KҮuQw+;v!_'6߄(쪫=DFс'O#ŗ] .+Wj˺(A~+㇐BQUe .r;~SY# a;oc;oǥ۷cyvB#eބa,Xn]λÎgq}}];,Nw~#Їtg2}W]G@K Ҩ\=lۦۚ;[n.[Hˣ*:ɧ7u]]o[n3\@U,\_g~-ʽ>?ۋkOhk[pƧ">G}uLw߅^z6nBG}Գ& $aG7#M_z.5=ÇO?p,fZ (,"pb\uɫF{K ~x޽_ڛkXz((tM@pU$ kX֭u7}w'z֛ޮ.z vm+'1A Ej<ӸwD>7pΡ2|UUwkv44blt$v[#~K/nݖpUEUM :MIi@suς2r2X4v¢0 qq)oY3C@XA݅1[% " $`ζ6͍܇Q_ /x,N aI&`}[uw ,D2˽^TX ('`!pU׭gA$H40to7Az˛qιͨ«/KMUU$6v:;?[:Z[C9s\qgQRZju>&#|uy3.5ز,Y,e,uϜxxBptTolYW߁}D44wߕvk>q)JJK } 'ccכobeYsӱhRx>C<k/oHD / ]BFRm }EUUvu /o^/WeUTL{"ˈxcH$`.BiY)**+QUSuuEYy9$ \U-ė$ 7>vnX"YZ&ܞ)Ug6LmL1>e' JWp0$`H! + $A˦AIci*7l3 vN@ ! C@  A8p0$`?eT_NIENDB`photoqt-2.5/img/filetypes/pam.ico000644 001750 001750 00000022027 14134304200 017433 0ustar00luspiluspi000000 000000  $PNG  IHDR\rf#IDATxyl$}߿u5} g8 \{ĊX+Y`[n im9Xb$b'ql dk3C9rxݼGUGU]pY~ݬc$ |! C@ < Ax0^^z Jvp 3ꝡt+'O" +LA(^Uh_Q0];! C@ < Ax0$aHÐ! k&' Je0PU Ȳ Uh~ ~- A ,T0@QTlSxZ4x2@Q=9cq @*ԇkb@B@X @0 VC&6bI`lߛU@JIa3(*$C8B}> a.$EkQ,a#m?6%+nby=[P*$\ @iLW8 Eo1-ǽ8hmMhoz cs+،J61 -+ b3ĩF+HB`M-#VLXZ!qH3H@2`aegv7Kaxz0 @,0:e1Di-}gMhv8I8g|3u,d1>JwEBJK|~j2&PBbx&`UM*$_{R:*">1ưjr[+$4 +s@lj Vm!BuAn-wWJCw30 VUT[*^pĩF8uгe''@9|pYd͵<E8s*Ґ@>`c NnFq@&Pf[~B9!0:X<\c 9Þ,ryAPM\Fr9עZ_ fdU h O7R,[ꇚkf<8֢Ii*Lt1 q @*ԇZb \Q0і:Ԇ @:8gPU)ahdIiRvrd ȀVF@SYH-FalrOC@XB-r{  $˯Q('t̲vC@ c5k;Ȅ0-ﰉºE9mHȰ 'Zd5 S ~$)_|dUE  JO Z'@@f ]{RHҲc]IwSk/Hao!x5'@@ ;Y~՜ QLkZN 쩜 Q<Tc0Սr$D[^ asoS9(`5~^ o!Ȋs$DX~]vj. iu /@@-F LD\ a[~9؜{s$al-7Hckr$D0`BB}9"0<˯QܚȊꦿul[~ga-+paN;xJO`:5@p(9~<#*pwtZD _\l5 . xCpf nM#pׄYh߈+- +O+p=sưȲ;nLczOl'x]Cӈ'w?r06́,pZdYE,֢^-`lJn ewNW d+ ²;O0Lܐp05b!Lkh фc%go!8='>` kqt Ϝ1,=4dJ.'(?.kNOuJ˸5<qCϭ3LE9^uQ_+XpdNU MMGdXad:)_\V @ܑ9c_Dwa:Q[N CZ=#P&c#gf aSp0 L{x<2ưKz.( &"H9]nqPNwF0\;v؅3-t/'lTalvaC+aaywǤ![J&"Xߴ̙1E2n {ʯ&öN)W'SJ4p 7h`_+al9G dr|̀3r],ℜ@ 8c<6}2k*N 8G2B>tax*> Y~-9Ng3^η p l}bv],b眀`'.wc Z j&oYaj~9 vghd!3aln}a&oUl+;! [<7Gv.L߲b)&|L.Eŭm"˯~B>V]ƀM['9{OaeÆՅ3,J]rC>fVuQU&˯KNVPp0< d%v CtC>f pgva-'.kNe`''` 0cX ˯mr1m2].!?Ͷ]`yŠ`p"L_02S@Yn!3!Zw69 MC>fc0Y~vN` 9Vȧצ!0Y~/CNzg!>eՅ<ʵ`N>N`pՅʯOఐpưfRualP_Ru+ [ՅKm4Y~9k`+5̐)_ ch&PΒXDYrr TtՅ X" SjJf&˯*'`y''Pš7"0y? c'7|̠™U~KvV'`|61Bdu/9~s=],sIs|JM]8dfJ+6 lۅo ؅OtN>N3u.0Y~=H~;j!3azd;9HIK#1™vazJ(^(c*Bhv-0Y~Ms |Lg.=4d0 HżX%lۅ )Y!00ZEYepyeglNڃ9B>e3F @F'E!( ̝|h  r ;r N'BW~ ]!:C"3'`Lt1B>a[v- ;:O!1tm^=!*'"8PV!gDWn %+Tu lh дkL-:L~{p l Ax0$aHÐըU bxf7?S ǟ?sÇ,5%.HgE!0>4 H < Ax0$aSn)7ޅw1$H$5q8g>IηNRB; -<ㆪ:UVVBI(rߣMeR/IPYYQr $YH&W6zƞ|>IP# 8z ǏcGq@+& j8o}w'zo|WH:7;Ƨ^h6+O}խ< cZ%ASCWWWOsŵK ( ?ޅ ˤ+E@0l믾9X ݛ H+W'053wox7E2JJ D8Xt^i b!&plx$edm}Se|kTiE3#{Kf00CWҚwcie 3_*J'cp!ff 4OƭۖϚ'I}u|jZ;]=THHlo—~)ܸu;ɿq6ⱘw7o#aiiw,!o~{H'1$qjZ C0=3g ?9b|R "7$6_~(f1La`hC,DqoД\p@꽋ͨr# X1//~u鼎?G8q03zw/KXܷMw] x ߗs͇q`Ȳz(~%iGuM<7~'|뿆@uu^ǝG{W9,amm]ws6;{wl`l㓦=TVVf>~_70ٹ=DEߔ~+* ˨ 7|媪jJW16>r6ywl;M3ϴ47̩{5t߾݋d*WAC}9u)$V!JܘKFM (` =wceqfW/_sW/! lwj*GKYNẂ676qޏv ӭX)\8WȢopNMq]$ yNCr>DMYd㹫PUw޽? 015{چA\|s;$V"N8Wh,x$V9jNJaH8ЃQLLlvI4A 9nFcy@m=Ď,iՓuI|i4U x @iQUQ׽6M2W:/ ` W/]ԝ=~xm A` gtf-;2XY}MHfṫ-CXs$sq_p^UqZro` <pܵf16>MUU%ܙ[OA`1r:,k+7p0s6kjjĹ3!i;xN0KA;Πe-lǙ9LI{ڴ83R20$V9"KyWƆC iW<~GxB ._<5T7{ % 3'N9qlm(|W!8~j[*w"f|jkBO勺{nfɗ}o{ЃQtB I{aN~&;yZ[L2]=wurE snA\G?|_h^ x+:0>9$ImM :ϟŮѢ8~ڥ3>PK^c?Dc{W!4EU/2,!suPi("~80`,$ t?={b3ّÇp uqwrTUtsXE@U~N:pdׯEtfgODۡG* B1ګ!o[5?{M{ qr'O"{ayeM%t]]5.w" =,HRHerQ*z a ߧZƞtz쁙!Ƚhb #̉|x弍R$,X&蛳 >[w`l&r6ĕ ٝB8t0w0h}cCS`BE47gninąsL!؊P0o}ox}?L&Z{6aQU67g]]-͆*pa$c'4XGpoPK}?g\dfv>{ Aµ+$|EUN&hTWU#x=>2³ ¢y`zn^i~|72B8ėH&q/9B45\ljl@EAP$$ޚq|~AkK3=ryt;C[$I*d*p3O߾}$fĢQނ*c9ıv͸D (~7K{$I%ԄB '^j'o_{3ĢQӊubp!&g!PW[ ,+*^y DAcz"~r@OxoQSsy`G/.;Qe8/+oo/у(3SR8ǝ#K=KRDW@NFqgjnmc{+d!J Sa klaM`Yq }4 2=c9s=cyZ[(1hoխ.t_(awo ]gq^~sL@xq mmKm p"!uk?sg]s ҅s093h;myM;ʊJet6@X P$WZ?{KUTv<@@]w]g &LI0r\+v\̩h??02H+JJZNs,1ݦmpԉ*-MСT+KG+I0},6p ZZvIxvBmcTbDC>y!5oʫo_ >+.˻Z*t 4B[o~/9*2ƴi-ژBQ_z.tLJ~UW:;󯱱o!@jW}DI_|x8k֞uU67᛿Ullf離 ?{Z詗`pmWX7ǵ+y\+meˈKTˇ *$;oObpgPUS  4@ < Ax0$aH.|ڶA8IƮ^3o߸]Q q}n;]' AÐ! C@ < Ax0.ҬIIENDB`photoqt-2.5/img/filetypes/wmf.ico000644 001750 001750 00000021724 14134304265 017465 0ustar00luspiluspi000000 000000  #PNG  IHDR\rf#IDATxY$[~ֿ/eUefZwWow1xm0,fxll43yȲ, ` d|׾wV][גd-qx52#2cz<' l01:HƐ! C@6 l Ag / Q aLqp?/|g!⨏ q8e(BHLpƐ! C@6 l A1$acHƐj&16/qT$Z.KZ X$I o 8 8p\pN0x0F@ ` $R*Ϣ\ȡV)CDpY?ӱc.^|1py|C`PTM#N\CDptvp!I"$J|: _pcS3BWH$2G( |:Էr#)&09/8>%, @_0T+EwO'eI׷3cಌ|:r!&gp8]E!b.-TKEeO$QDjb3.D$:֫ם)o\g@!w6!u~c 8~r17&, @O0)FW1TKEnoZ.FtZ. T) bd6/$]er5Л)[BX0S )ctQ. .\t@UIT_}H*2GlaHO'Q>uSnz*@ @$|:ah/,o#alHZC3uCQePVF¤sb.YFݔjU yMr h, pYFk7@@p ֪ʰWUR.b2(BU+9َKM>\cc1DԲ$?4L8:qEBp(WS 9dI2ŜZc(f8c[k(r$ApM3c{CeķPPpn6$aa!:BrQ6 {1dG4 0Fi0c#I"⛫ DY3 4ՄRc#sc™dHwh0 $-pܦ:Sln*+mpXF(uL 8aɜr+C2\:Vc(8 w(cxǨ r [] AllT#6#A4=5xcG(2ݏ1*e7!KַB @ cMr M\l˱ []aB9 <>o8lB] 咺x,K[_}@Ӆ䴡gm앺pwL1\:M-ɐG#0>o`̘SIoF9t`r&bHƄAۦV~A94SNNG ׮~hX~kY{ r  87έLLab&2h)˯r  p#n EרMxm9~='@O263w"<p0FLaSi˯v"{/nHT0p8ý W[c_WC1@dljKWvr'tpTZ~?)' >M!:cYe誃pp:19kƙԂ>,|FR:Bn WxU10Ps&N| Q_t~ ߇W-L@G":JG ?6B6|*r)Y9zFp2JR>r!ZIeit 8p Ssn;ɜܕHMj VpAp/8.IZ X$I݂ @ptt!8ǝ3fY~%|1hNNmު$'-%'P@|sw\B?hPo8ogN_Gk˯$v('pb(t;6PN Bwz;vPN,$(߸~iH][~:Y~շr'! t O('Ѐ >$˯jh=$.ԫQw(:E_H Ea3oE*ÀC u=BSFm| a*`UF$fb͞9B#eUz9BfFNl 18?}r$v atod 1fN9obCa Xy@@)˯K{ bF˯Z^VLinB5w۔_*H,  TRYx+'@@ _Ǭ co?p`Nq`˯Z@r9 zPZwX.'`` jkO?B`2?రW5's5.$.KY[D"KXǯ7qAp\cc1}f*0ƐKb{yõƘ\[KO!⨛hhbU/CT'U+~,$1/Z'f@EĖ!Mv7peQ/N[~-}F XCXWZC"xʒSz~_0A@b/lȴ%1a^v5m0P9-̞0PgXi1B6ݘ+M.' 9[Z~b@U|V=.sOxqغ--`最co} +1^)~ob*C/'``!@W-el@pϖW?p3_NC>BlA>Ak|~A!t=dz[KOP)4鰌1yl.ܰ9=j̸Qkw8 Ȧl)/]l9s'B>z(.c[[_Y~l VZ|t m,[.X~w!f VB>!=,m[~W 0Hs3ɡtH.\c 2ǐW̲)`k P'PȥSԪUX.l\w!'`*Pv疰 sαo*àH8'`'W;-`&pcoc1sFȧ. .L2 DN|]8e: pa`]OV!=ڥ؅?5],C9C c B>|va{Kuiѧ Y1bNWGLb>m5n;0f9Ʒ ( &'`8ZGvW+el0Y~( j %b΀Յk(!04B>|]@Յk804B>Fb^þQ Y~QriY]Xe7kD%ÁA.L_ccϊ~W1uƈd5> X[ 0& 70Y~Mˆs#;3Xo&˯yeN`$`N!مk>F$Pd5# ]Lј]xSG0Y~K#'|=1no*WPW&˯i8zvڅ9Y~MpRC|Nc4 ׫ 3'0Des|tѨ0U E֐?9U&˯VN@׳Œ!.ܰx *BJN {N@7lGKg>e`9+|>.kGBN@'~GTڅO[~{"z4?kуd z4[|4dz;|ni[],C i!L,aۦ!=h؅ZT*C Xt=mz*|t15 GT~0A@b/z |tsl@@ hH!'Ut׃]xSs sAdt߯#uIIlmL='0>*a`^D:;݂p h I7W1>5ӓgĖBkTu LcXA`|vݞA5@ z1$acHƐ! C@6B0 ((7*?~_$[ p8?w7;nUspC*&bt8N}v6\$I&i!$C@6 l A1 hPF1^8lڌ[|$i "]j\n\.9GT c^ocJӽ~oTJ%ooq=p:;Nbj G3bkp8xϾQZ$/᧿!ݟ1|~]-:,˘z ilǶ_9dҩF/1|׾t=R$_:"?O}?E'%,'+2yZN`k9}oB$]1S)/n'r [*"J9?#? w X[YB>aaw;>xOW>?HkY֓sbbbvTB7+4c bjq$:[*4?=j}#U@OWQ@3^&&0>1qT2jC>Gy"r}>y$G]Rp`3e2( 1 IC쒶 GUO\r+ 8؏'+aTe]0ΝMRA*DU sL&q?陁,ϟ"61B?=N3M1rGAȪ ɤ.O,#8/`2:0pXV?H\n~MV$)l/<^oi,#qt˲L:qɩ)ctRV~G^Ϟ|Ã}]S w W .H9"ss 8ff (%E.~~T*զZ<\!('\r1y'&pᛪݐeg8$&&:n8<CRA.lnG71 5uy SKG3Ɛɤw\X`]y Խ:IɣN:An^V"Nu /aHONGlZjX{:E[zD;nJ$PV7މ oO矴s|?p$T*( @Ab26>sM>Yc?en1y<.^{gb{Yn^t:r  psѷ ~~]ƛ&OGswUڽo|'H%j>lYw]҄y-\ţ:Prsg r kk[հ1B>xr1½jXڱ- ɧ- e!k/@Gl|i`ݎmvϞ6!^BPZe\x4?$Vjn|| |$ DxnS* a?1_guy i;1f;tccT= 9u\ɣ[>=._L`YH.?oIZE*y:NzY|َ!{dөj&Byf+Nzų8؏\.?h; w1 Œ04#CPS!O HFŦ8X[YT:īܽd2@3|} w=ҩv\6\nݳ(X(phߧZ! 846_VbmuE/o6pne/&V*чV*ߏ77 ރ74{o)~o5M$_ɟ =l | w1|!qϟZ.7f{D sc½x.!8w\>NL$ڎ3{jq\u~H61$3^ }$I]@6\˅7=y㖯ݺ%&GQ,7s@IT+erIRU7Vㄔ$ruVqÖf\.6ͷx(=kqH N;Ֆv@KL6RcvV"˶<ۃ@>|Yqi .\{|>??|(I 1Jӄ[6AXc $auev=ŹU,cmD\X~; br*4(O8p7>$u8l$Ba)Jxڜc;߇k7n/P*}( 'ԛrƭ; Ӭ 8sP(xm" A@:nix[un}l!qtAP.P,/7>5B ^T>xvoϧ7<:(z x 1 hMZA*̆qy ܽ6q5K̈́x,c5x/_<︭oF Ԥ&$J}A9L{/TZZ/]GhzoDSb嗋x ?|.qep@ p{^WGqH>_74 9lngApˍ\s$ek+--7o݁ 1w|ˊ/?(I岨vX0U<Zfr{[߅o?ݵDGbrw?Ԭ& l 溙PT|k.A߼/5mr|NYCt5p{>RA?|>WzM@BHNp H"`sc@07osǃ{Gæb[؏Ǒf~l5Y ,ڍ[WA8#,|sPFp\mdv^ Gp%~ {pMJ&X_[E6i(٥ɱGo[ȲV3l >s̆ @622-, T_Kq g;V*X|e:&VxY=(gfT3p1=;66kg&{T>?gf(F ^[v(_Y-wMLvxx8&& ;$g/51{rص+c E%]x,3ZA47h >N`!9 EcqQ\Xۓv>m E[PQe5к@0.хrSU$IBY먕і>+𡭣E6!rs9GIQ m2apz ]TO grܦ[eHribc(SJQZ\fle4x MWL.ɜ@3Ҁ  azUi8(-.CU\WEc 9A94 HG~^͂r5wD!fLItхD" ,B9 GIq͂( #?ϋYGMFr(Dz  @UbpI> Tϳͬz4}('D9IyY%fW o~AWiqTGw~iY~3  J0o1(/CsI0j̜M@fL#?P('0$by]=o8p!J`8jLHd?tX~E`r> }BY#Q*Q\XA?>"A( ΡqpPYBQA1U(1FLPTM5(/88I9$P9e*# c04PxX,C1Q!I.声ECvaX4+.F|hhѳo:Ht"9tQT W $q$dE<$%r!R31'iͲS+Ba=ޢ 5. p<4wBјsr$Ĥ7]A@gw#r$DX 9{]5"X ; '@@d,b}a(V 6Vw(W[~3!n 6s$fb'@@h^~EQf Y~3lp0ǰca -hM;#@>wb߁] GōΖtI쳟#&c -r " bOND[\D7UMN߃P䪯!rhjcv7> X>W1p$v!XC\W$q4) ZdE۲k>=>Ö~[~edN 6ԡu¡(W6zg-"0'`KH>vi?xw׃Q_9]q71FBNhzg=dr{`cs{8.V N8`h "0]QӰ*w-`圀]=bL@s[=s}"9,3h`N6C{gZk'pUQS]δ 7S-0?u{}&w5;g&oX5'`C,tIdV X^TUAM>ݺZUِ]var҇|p L@[G `&˯>Xm? c B>F}Od՟zK,yB>(Wn_t!˯$sAK'`I'Lr1D0l~UOk̝14ԡ5U f {؅k,V XJ A.܁}Pl`&˯X!'`$cT=f˯ F3f9@!#~#,=+`," v~ څm̻鯾^!#ׂvaf3L-z|@`z-ff,YGt0'`> uU4HB\2M0ܘ$Lo g)[!# E_ZgzWB>F;b~.L_S`L%Q@| \i?S @ʝ|,]F 0}Y *ր1h |@>\]X.L_#ڳ@V`(ע!~z4c&˯}g1'CTQS],!9F|F/0Y~ Y Zћ;3d1 d!'`5cu{Ҷ 09cv8ZkGA`|h6?l'˯]to5N ՅUAA9]!px|K(#˯c`Lߠn0p;^]fՅL &C!+c&Z],èt1ՅFY~ LRX8稩ߋ`轟B>3l> |du0z|=G/] e 'PY>yITmlOZk~O|''vkAri |$sO mAE'܋!V lN@Pȇ M2'cyJAsuiR 8H!03R:v|DqRA FU4bJi.&H^v7k cH.+wť{`WֆAz'C@  A8p0$`R^/e!AX DQ /|k-AC%<\J>(Ĵ&"wH[J].U9E0AXƘCi  A8p0$`H2?1AwUU@UEq |ğ^u z#[ҹZ4ز, u;&ttcppDL`=(-)EUUfVœ9s1{lTUV_䚋6D"x"y  I$I:B}2 ˕7#$i "lkYl{Z[[ S~1׋*,N98.FyyAHk!"x1l .IFQa!JK1mt̜9ٳ砪 G1Eqs]9PUU|/+!Oah1Yy&yuGisP(PMMظ%`1bqybx<ւޮ`Xh ֮^5a9!c!`MgC{Y  @nBر=|\qٕ?G~~f2sAkQW_y å泘5s6 7r-k$L ·uv-v}ضMb\8oǯ |+y˴9 ᏿Ǟx$+3Ȃ(&] 99dž?몘v|(:$!QsܵO?ڙƦF[1Cc 2zAttۍ31k,TTT # ͺ /oz ol} we^ HHF!qӋKuk㚫)'/CEy\.FQCAtuub}ZǩQ7x<@,|p$)_wn^Wc*߀-4,)R#=文:YsVSUӦNT^ZQʩ =&8(-)EyyH`(jJck人vi*܋9$=(+-Tހ(r)y'(ksw$9G~~>f͜|KK3/o>P(I,cT2`(%K5}+g@x@+CKK::R3@z 8 W =ݚ>F񯗞ǖ6䓖]:s̃큢Zxq000lYpBMeBC#Ek (Eq Ukēh4m۷bC,:s5.",?-)(1jJ?:c (W7G3'.YGۋ׷O\vpk >xb6H //fz3:Fk[ ~SNg(.\o7TvhyeYFOO7^/[љz/I.PTT{vիң8(Xtx_TXb1ܵ;wg~d5jZEwhjj#= A>{@uxo`>$ M\j-."KUi-!ApoD_wm1>~)l|E[7~p3%#= J7?0eJe Ɔq|?ޏpp$^xխзCt=w{,;T6`8{o_6W׋_ |`EEŸ+cuGpúgaO{2l@N̝3KEL)8肏ai+o@#()S2Ӹevu9o~F"V8_߁kB^^E;^Фٌf/}^r9^5|fq)=:eX,(s ލ|+PUU;c huu4/).$fϦ*7ĥo۾^HCWo17k?wwpI5vQxo{WWWg}m|Q]=3e١QO C0&=.b?Á[LsQۃ;~w|$ .8.KU8|‹5֛شFV[EwMlȒ$ П(P|7}S$"I*L i`U( MM{Ýxq1 p˰tI8$JPA457፭EcS9u٩5kvN@Q,^=B?,mظ%\~߷ $ W^/ QXPIrAeci/C~^~:W\>&^;gҒRJY z4p]hhl44֣;kVY4( NZz2=s,gFh2[+?)V,?ҪScʿxiӋ4 tF Qg_ކ/2w!DkQPP|<އ>, (DQ;rz}9>+/d[X3NV}do{;^H+AWj :j|WߞCy_ Xx"xZ(--g;pa+{V>1EUѴA"ދޞ1GZaA#׀c04_ZRs>םn޳ u݅Ab1EQAaA!*018Sq3E(**zhL5O~ a!9;媪bݚuߢ?ŞAlGUUŪV("KLSNӦcuEWw|D#P.O^JQVZDiI)<dPUN9 -[1᝕PkšQu| ,wq1WUU r%҃@#((/@EE%?wEA~·6Qu_VUU0Ul՗ @d6A z"C@  A8p0)Ia%$IdJٳ wa!A,4oHh  A8p0$`H! qIENDB`photoqt-2.5/img/filetypes/xwd.ico000644 001750 001750 00000025330 14134304272 017471 0ustar00luspiluspi000000 000000  *PNG  IHDR\rf*IDATxwx$ՙSUݭR+Kg`2 dLp66a3ƻbw^swh`0 690&QYUghF\`m8؄ .v;j(S" 0QLݐ1̓>(wPDm&Q"E| ~O",b! 2 @M38p8,<#,jf) 2% Dr7l~?rDCNjFdo`D$*0@[1ICT$*Ȋa c5|w(HTsxҟc@ @B0Ʀ=z"cxt\}# L=ѩ;\^/&}~N`"q[^H$17$q`a?ݕ1ϤP8]! 8pz!+9cӵP ,PODJ G  b.Cu!8 ˅1c#D"JVϏ][ zG&!C())uPXs~tw`hg> GD *wp^03daw`chw=3 !ppEAVt @Q" Mϐ11 #c2 !00A.Z^ņ,hEp$֮^wդ $c daht ccwcG0Ҥ a6IuaI8g޵ 9ڻ{v|w!8a6 9$A|w%c0?je7øˍ8 es?>9e۬he7ctPN iH`6Pt1ɄJ]-YY~S9@R]T5JحV]Ne>oPN yHT 5ypYdDT@rX-4gvk j!S&K,'?L9-hQV:yxsXK,XXŬHhm] @TU8&Ii9lV+76s?7I('$qV8 TaF Þd,)~)' @ b2d (4j"d&HwPN@)Pj1dD8Xpkk b oL,PGw A`p^ ǃ1>s0$I(t8PfAE҅1ǃ Lt 4<ɯvVQ_ ^P 91Q IJ,fm(Qb1C8)b`(̜E  @Mvl9G$A8A8,GD&$AhQOG =DZTE]UJ$&vq l2b6'j=:Lo.`fN`4 Z2|ݻܑioPN >$DNȴ7>D"hLHg,cG?'0 u>]spF LC@d[~SgrH,/]9g@@dO-] 4(' *&K,'0d EAǔWKQ|?"Īl? q2U7Wy?"J Q`M#Ho*u?"#0, ,'@@dY~S9"mkMwm?"mjM '@@E۫Soҿ itlM#H)o*%'@@LY~!) fM" )7Y  S˯h1='@@$M![~Ss$DRo.( bBH7I5'`8e9](HI@W # @0‡{cpdhBQ",oĮb Fq}CCC"w`x`sVl9Cc (@ `QM1[~SrE/1O@{ǴkM` .Lbo2SN fݡfK` CChw7uM!VŐ(j2cb}+ (*٦XrE-=J8ue{[0:^^t07Y!'P{nmR5m0 ` že#Z~SsE'1x''HD;k\^/lE(6{#jwWtON0FGo >/ȋ:rN#)b <n=0B 074޴.\9w`p8^oN(М@Qc na!`OK³,ݙPs/@fb1~>h,0Y~#.@ 9w`tb"w-F'c&ofP(hɆFh*~0Y~3C,'] 9x!l}O[wqۅf $ db G-d(HP dv" 7;JN @K'».l*r%Ʉ|L\7BN` Oۇ 77='P0j'p .Lܠ@@:!LÀ 70nt/ d_j&ona: Z2B.چHDY~^sl|zՕh,C9 @B>ـ1Gva_Хd; nf*zAO9 @B>跮 W-'+]'wyӢ/0Y~r,c[B>@` C# W#v?'+G': Wad| Bb[#Z]8}EAY~u m] ]C>-15e>?pO_]2_N 0yLۅ.LB?9 B>@ G¹d- oN oCߠB>Qp p^3䓝 uu.LCQ!'s(O6%'va \ )ira*Ms9B d^왪.cpGN gP!l0p&d-|rȉz'[礳 ,zI@r"مcU~d-xr@NXB>10U->r@V ;3@jvaO k03ϝ| 1\ז|ua1+ dM9 b]I}.j5b$ffN kP!luwk.E"[d;'q0R'Ȳ}d5 dT43“ kb9,2&Fd]xՅkLڳȘ9 fڅCd5 dDC>} dxՅk\H[f|84;08]&˯tN -MK(= b&˯tN@JYhȇ.MSɾ`-N۰rJX-i(;cs1:>Nd2'P'?A^ɝ $}5Qȇ OrI |Bd"'Pȇ C9@!'I(C&TB>o ATsNa8E1߿ (Sa&A]T LUg`R>ت 3A! C@ A00>Պ| $  ۨ _~IZKD$?[IN@ 8b!&"HW_So@,S ؜Aa`H! C@& e2Y%>[Ԓ"4ه  w:,f3$)3CVɣ 9Q B;B-H3Jq}Mo&I$Ic 1pΡ( C  _>T|2&)?c'.(q=A`sEO|'ʲ2@8{K/{$qN88ȲGrx008ԟ:1:%%(+-YƆ,ZK,¦&8NM&(S@ kI :jiނ@0p'✳LDev?@q yX_Wٜ;GF3 c ^WU>w{EZP!(/gvj޾>4oۆ@ (ػohQ| 8lŊY 9jkj`&^jBTB 4b  1ݧ:39GEEnu3rO>4^̈́wP8-۶Kx9x\+(/OܧѬc _A@]mmZSo6eĠ~y]80,8pc%lZ?c~x l}fĜs8QYYy1::H$Qi>&\. *CM&֦bo|˖.WD</{zg^|k7:Sy]r1.b ā`,f36t^~5;_|O<4nxݬ1ˍ{1r~E矏s:3"V5 16>`0ٜ8 W ͆ꪪ748qܱ:?v<4㳧NCGykV—ߨ:}ZP<_k~_]m-ly/RłrUWSs`bb"a2TT8Rd,GGQX~Z-[pGh>މw{@g$W*{Ѫmwލ~黷 Ž[K/}Goؐp*@Ǎɸ5z;ι,b!h9駞~s,[Tg^/y9z=$@Q8qM׿ڿGp GBQxQ|Ǫ߳z*ܸ:WjpszGvs\xy8CeT kșD"{׿o ~Ϳ ##ǀ( .8\wx?'l׏{ľ}_$lXx&SQݔ`YE \E|'_"`'w?"˪3ښX,AQ\vExooھ@}]f@*pQZZ7oFuuj< غ};zzzU۟zI4ݕ8稫MBqssnw~_1Dr~>w& 9N'.BM''}rҷB@,ŗyնw^[7'=eeQ#s,с93` 7q. mxڽGゑ Ј(qaQmwŗNqJ9$bxdd41χֶvBGW?d((SyCiEŋlyH FEe˰32mjlĭ $9͆ꚄmFFFۣzI{3H*`Xr9GYY?\]`ppť $sW\OLx5Xn]R RsXf% 0::6kCo_FF%w3k/H&''lr:,~$I_̀ 8種ފR{9rzlꔞ%IBCC%cQ]1k6ۿw@q{rg chjl4}~j FA$3Nǥ]&nf,\ b14x\.׬}E- `e1Q]Ԕ}D"nFA$1OnQҋ/JmC}}n^溜]P--?::ֶY3۝p%% @5m: 1EG⬑ HYkIsT8 ^$<^t-}ۃN g}6+ D-XV4953"HRF\5pP篼'tRZN49(--M0Daphqbfydמ=Z@d2 .e- #A"9xMf3/^? xY]ORUU,ctl @tli{[j%N;唸C__AO0 6~7!Hp$GKkwOKA0X88Xl)jjjtɒؽwBpg(R!55c v{b IA}/jJWlIQa܇266p8޾>ε7446kV{ֶ6#79YY| ,rҰي(pWz6$I+-[LuRk[=,}2pQSS=+<G0B{{GePp@_6d``]== mĵS@044WTh$I9Ï|~a~;);faOGp{g F@#(bxpz/--sB7Z P1`rr##q-$aU`AQ,Z0Ȝsڳ3| ڦM2z@#`޷ =eKhz|ϧ4x*^ߏ{8X hiJbEݷ>0P__ `tt hj)g[ $E} }wIߕ$IJF2øW,.ƾ ֭]73<2>h^ fCUUU^YƋ/p}" 8b\7HTßz j `2f*puSc9?ߟ,  $2޻qYjV|VQ|q;;KVO50iƓ*&(BE )|k.Zu& 8!VG[jڏ3N%-޾9/~YMksTTT"IkQ^>׷Y 6-%$'K4˧>#x/\uueR.B,_jāq/*쳪m+**pp8*e9x\+-[+ -[qQl~ ;Ĉ-W9.^Zwth>^囜ďgpVVB "B?S(hB\wժC`axxw۬rr҉ |Io/k탏>Ï'd2Y>˖., (_DQĭ7ߌ5Wz8~xkNն/¦/ߨZ SQ~a4M0vޣ (bR+++l钸٬XfYfK/Ip  8Ҋ_Í7b*mw9ܕ8Tv`˶mD\EQHJ46~+֯]ُ`/n 8Sq?#YU A$A 5>(\}4{9稭mnJX;| }Uf _bcph:^Yi*9 L=wϱx"@0(λxPmkXp \`ܳ矧vfLL̿uuuh| f+`&,hjt< =w5q]U :x#hs֙8lm&jм7J95zf3V\p9Gái tjͻ6\p޹x@MM ~ s_Rmt:q)e}Um0]qE@h;++]l A d2a%x5ر}7ߋ,Kÿm}h++'>(7^ľdnG `2(JZBp$ ]p>$IJ.( /^?٥:-E0֒|pхG V,[ /2ް?ɝD9N;E+*oKYHՊrTTTʉ*T8Z#ċ?WoOe!hAQ= T?+185_(یc`LPG$~Q=EQU; ! C@ A׀) A$-#;aj{\(DATF9 "! C@ A00 znOOIENDB`photoqt-2.5/img/filetypes/aai.ico000644 001750 001750 00000020730 14134304050 017412 0ustar00luspiluspi000000 000000  !PNG  IHDR\rf!IDATx[lY~!E])ɖ,ٲn*[7 Ne &d13/,Xl: bv f3A2  :Ytڲ("E],CdTS?@aO"a x0, aXð0a`7j0~.vq $_aivp w|UQ1i@B)N ÔQ;0a`0a< x0, aXð0a`chf*$$de ՜RrerP E)xO9,VAHqr|T,BU?#vC*S!!ADERB)P 4b1h6b;ۛH'SEXʅa~(!R')Hיw|\6c$hio h62.$38>@(HF&7ީ*b1$It^Dgo'| > 0PQOڢ_ "(9;Hp%Z,16d8J ͡z6%``,@%p=(҉4«a~6jX@Sxoc~OkadX }ֆ:F= D7Ps\Ԝ}^ Jj3Z"@sa567:F ! `wyp@8J8jf'\rX 469bNMlv @ D#H Ȧ^vsnOՆ@&V.x/NDHƓF#8 Fk: DS[m= RE)AfUQuʀ^a}hn> oOr"B Vֱ^^w 645ٳ%r[,pNDXt鴥}+,#Hk9e9 Av)ӉVw{W5dM]>)%^Vv._THv8'p,R]A ~G T"UQ!4wIGs]h6k .]5hj?/R)Rw\@BdXxTJNTFD5Ԉ`34 ڻު[ٜ@>W&*VG #KE՟(J*|>? ~nzm8ڋp=[.;;{A۸-9HnT7r[K8`+xH)sV[~K|O\X`x?TjY~K~XREo9pNMXRmo0U&r9,Lըd8'P TI8'VTE c9VTY?= c9VU^Oz[~oa?j c)vs,e[^ 0`3ohN!``*&oFݕr,L[^ 0awo_[9"`-/Xq``iRJN) Y~9,h-/Xq*{ 0po9(Xp cX~94n[s/;,. xGȦX\΁kߒܓHEb&Qͭ!~g0-%. xCG^ CRVgV]S-l-UqON@D8cސ:Ԝ;r+RpSN@DH6l:!vik`-7\-JN:[[Pj%oP^VTw**:/x[*pÇZ24m2 VgV;{8g%,\'D ֐LG ή"{3G2Dx5\\'LkskH4'A8=(z[N Kw{X++"Bx5zqrN5@DnGSم/65 pjN@D5cOmrVgW=gfo8t? UOҖܰD]+" A8uVN U-s=U ϯ;OIߗ-ജZHU7o]-ജclȧ-.̖_qJN@DH TUQ>R0[~-I 8R ݐB0[~C!'`)fB>VS ϸ.̖ℜOU>_h0[~rBg|ȧZdom{N1PaeU/6mfom{NParnfomsN`Yȧ rjual-ϼ!j])Յ[캟}l'a@ Bt#pljmZ!@W[_T9S lof˯mSNvPO5Ie2bK0[~:S>]ua ;'`+uȧ oش]-.9[ @=B>Հkl'v B Յk_%c]-9 B>Sl?l-(SHk_]-!XONn@DnElOվFՅXS Ԭ0[~GrSKe;8؅HHE ܴՅ z-9 ka^լ.FV#Lc? ِB$_]j0[~OD8=Sdw:0[~C.YN&OUP =2'PpKr, }*'PUpeb }*'P5(|\g :c˯{~UB}!jPnua|N`z9vq %Vf˯!A8خ^NrN>N]-9K!)؅l X'XMS.̖_oReO5г {T+'`pȧ*W]-ޥ9C>Ul6V'Ppȧ '^';`˯:'7B>|AV "B*eba9Y+pȧv?ʉ3ʜ@Y!@XlJ0N¢@|IX@!RYNw]'?؄JsP( WaQnNdSYήrȇalH%9CPU/7466s @!Wx&%! {= U-;}:"LzK)[-|7VѶSgIɧ kEEU_i]| "eJw?;?/鸯W0`f@ <1z⫿U߬DUQ17=PMY.\Ӏ""`!/J>64B6[6Nd+G$151r; e@ |4j ^dss%W_^. E)IGh,T*U~$q'efp1,%"H`4><". a{s/_}~`U?ϳkf<^xgK{p:PBMh‘ϑ0>6~w6 FdҔѰ\SZy] @ mюT2L8Ncbl__Z_EqJNMMM7ŋyzGQ\JF|G#뛑1~lx__7M]Ol**% Vt}r6Hhim|hLD8~}Ouݾ{}I6ˋX[YVdB훦LrF53^9 ^(Д/}g676&**F& rjZ**ɜ @ R)CW]GgFn^fHg8:^dϒKݝ]<}bEܹwϼp鱻y r9?74 Ywn׮W/ݓ Su nW ,LW ?=&bbl²a=`0ptxgt544hj~R)%:/t$&LZTU1)ڂm|~8l8 D<ׁ.!VWb:,`gL<@2""ď2l7<:7^J{NW_-b}m.Nh=no> Dss/_`{= ׿_ ?x~wkׯ{(q>4 Θ{>޸*==Fv#,wSp=mw;oTtUUUװ)S]Xt A؋a٬~sJz.杛r9*Je(rgιeLMWM=! za\T3$Ҍ`LMLqY7igmG`ZZZt__YYQS_Q 'k}x;>}fyAݗsc ! }=51:GcُӕX,VLa(DTQͻw>J0SeBSttt3SUݗq~0lTڰcX H`{k?CŽRڇ^=˲iS[nҞ<MM+3< p,s3sljn0O@#"ttv◸kPN܌?CCh {#u `{K6~5( BC;G?)d%"S# ,\D^oHVk۰ >36t*X?埳f 9jYJ&%'09>?cJsOS|OZɪ5ejOA5ݪ"4B*in "B"KQ8s <{s{"҄_ռH33pwLưfu "{55ް zӕ 2 Bc!S[r9*WB>$B,2.YM&'to,"j SMQԔ-;ɐ]/U}:K+%Z EMyX5[)S?Z4XsEvC#CPm|Zh" .\*iM#H3Cgbq~p_ƞPTsaۡ!_'|w{c~7~4l`{t=?"B$Xx_`d,(._\іL}`8 ^myoPJ[T!ۃ͍Mݶ].v]ܓ!5Sh[ݹwPI+?tP676+]냂,F2kgȻꌆ'0h>O9%LSUWz ՕU,/,&Hv6t^Ԣ&)D {gxIpÔBOA̝9BDb\u/^vC|6051W?u@xGh4@ɕt~o MM$qƢӡ\6ߘy`?چs~B6, lmba7pkey}@o~'''3~۴}ʘ[oZ4Kl杛"!}Vzg0>3lW>—,)}öCCr {R%ös3s#o<1 lJ^v ]]@86UԴ^Cq-E5IаW1ҋ;|^ ?08p"Y<|a\D|XpfE5;;;`A7R<5lJ0d⍩({>zh#հTL`iQͅe-@K!`v≶FDB屹--|J7oDߵ>öK KX_]wS&p||lwWTUwEOOaW/^aksPkmu K K]CTA0l/K#gW67gD~Kn3~1IV7Ј{Rw@9?@i6û9 @W]=H)jn@Q< r2 |>*-{#4hQ@JC(H)o[izhlǝ{w*~p]+T%_(~gq=äC˶0_XxtBARJ4o~~aM_IUv?@0Ǐc|?|Օ_kXȔ9E :g*{j;[*E(S}g?'Oջv@JYwRʒ-f}ӂߧ}gx0, aXð0a`c0m40 fO>{?9#8!|İak aXð0a`0a< xx=IENDB`photoqt-2.5/img/filetypes/cbt.ico000644 001750 001750 00000011204 14134304075 017433 0ustar00luspiluspi000000 000000  nPNG  IHDRy5IDATx]yGw<㙌#'ue+D`p;""HVv7+Z.  v! Bls8D $fxvNx.̛OWwu~_ޫWG~U_Cnu[V]ĭ{}i f BWl + f-$+$n1/N&`׌Aw @JG΀z%?U/ fjLX0IGH݂I B $  _D1ZI;DI0sMI;I0S  NSbM] `S1@M9p(^H`"C@3( b4 f.V;K'I0cjg ,mj 뎘`S˯NA-+`!Ic|{3W#Le$=1-lH2%2x\TԮ: "/ TF@&- T A#H0S$P`Ĥ]zϋ@ %xfz ǗfSYIg7g{ H$w (K>%K4s J{ar@|~qv:P&IIypɸq7' LqR@_z@X&BN2@csʜX&Bd$1{sǕ91 ;#! $κx&H0k@\+q +~@%j8J{ZyƋ 3&, dI g3H"* $`$?Ǩtt $ fLTHPZ,'&6 WN`$xHj$qEL@|23U:K ^\f.“`Ƅ` 5BH1$>A H!%7wB8A@%D8qX$$K6=߹"뾒@<2%4W'Fhcx$uO/WqPI>K녀8a`y?k|@|8q$$qCL/X'35J Mpw}8|l$ $~guI0k^ ) -;Q KxhN~Y: VpChuD`iHK qb'jD! @[WqZ`%/J[s"&X ]$(v$&Xv \`"p` 7I#.8qMI0SQIg 5>kJs<I ^N\klw/ 8@ܛNԚƕJ >8qI0,A5%#`UH 8O8@<ŅH0G8+ #wϟl;FX\e]?p@v$`~IZ$`PZMVu@uh5, h OsJ p Wc%  OsH @(Jw4c=M/P[o>ԭnu[H. +)JyHK7\y]Y4e& r}`2ZQ[BQab:F `\Y5}vh`d2[B֮pugJ|XvdJF՞Qawh=SuiVOvmއ;\'tYw.d{]cCw1NyUlX/+V}ҏ29} RcU|Ч~/rG?:R{pO97ԞE<ٰtjGz/Tq͙&fh(рډc{ll^>9_l PeisOWfk9Dj^ (c%Ӛ޿;!D ')v!)Kץw]Jz gL veæIJu\@Ym_y.+Pk/JJF] LrK4!%vMlw ~ٵij\(IkΥ?z{4yx N6LXkF;xk~Y`kAQ%Q2ܯŹ'ic3F!`S{j^{>խjڙ?IXUXY'.7~5o&߲h+4͙L&ɴ4ؾ<`» `@zkdBznk$: o-o4Z͸(^-;/d_1Yl?F{[Aw Lӳ1*q_z(HR|XiFS%I妇LG _S}>0=q=MO($b&{^~ohvؐ^LS*EW^c&g^4xM.DmTғj߶@+B;,HW­49d4l~%M`)3y/8XGOT?*;F9+ S @ZU V:nEmiکɮwO@[c)l?1+N;c0owo|Oa3kY@?3>Ҁ j{<'ވ ZԣOޯoZǬ p)GoOP7P|lnJ闏?_AA!z~ik9kRc}| =gmT>76i%!.LNک?\RӫfrݡBb _5Z|F޲;cMar|7D1`dHti$d5.ۿ?ho5L-q8M *&",~ͷ/5˯@zw8{~E`Ntx- F !&"<r:{,&m8}k浛w߰6hh+BO?s٢Z7]ƍtT~GGN$[[;;ڛQ]C/+ߑἑД}xqzrfmWnhK֞vXsKcLYpplTP]!kfȵ# Dw(Y=/cOځ@Dm)ySKҀ\Z.$^ڃխnu[ Y."J|ȐjUHvFx TIa2?` 8j@Õ͢5gTK$+OpAdvXJpZ_ބ{/%"AF(Ǵh^`eHT ұ+NZA@%1bZ4h"}@N3LuD;\D0  t`;,AL+'q}PKý%ٜ`pk BF6uPLC\&I%"g DfY0KÝ%Dnz^N  a-L@n,vfN3qa  (6'"C&Luj@ڱv݋`s%-$Ѷ@HE0 iKtGvwy!iK2ޝ,! !]Me-+vydc\E0S*+Ruznf-[%pE@52-f73֕Y<1O'гf!e 3ڼhbT'e [h/cē&Ij%&@TkM,!K {h28okM$HXIdEf!n  wLeCrwPwLu賛y&.41f l d0Y Nfb0__:S3/TV#`D-΍"%OI-@Rr[3YQ8_NF`iBf/ N3nE0g  к{D}E,V ],?D0 K D^8#,v[~ND%9[,mc]Ν/̆h DN!}}E|Q-3N $l Ng &U3o@ڞa?E0A{#@N+#9X0,6>`Q ć<"%% $ybE*,,R[?wb)D0s<;K`)IڹcN0l,5D8o sac @\pr'Hac @Ch -U,,yb`(,W ,pgU(9.`J`AF/f%yI/fja `P;`G7 īplV/6KPHg ?z_ "i+Y,s ,A>(j@31p,A{q,O?6ڳ*ƿʆPh ~' , ) -CU儂g ܮ-'?K`" % y@' N@W# n~wYB]Yx_ =umAPDEQD!; gt!t r|`>0D[ Mz>B0O,@(tA7GM3LVE=|=FR%(TClv-3%M ('4Uf3sI5)2?=8Wk[.kq@@?m+}5rQ & ~ޟkv#>ix[^?;^t-W@2K|D'>Lu~٪OP$̩Etԩgs 0.:&>}"G2M=6g +sJo *}t\r 9̼H؃p_H:Jt*ڗ?l'gϻUǜwt$ M@l3'tӏ?tY˩Ë"}i*_?=^rrʱ豳WMBs5ڼhǙLF|:?p>ySGMm}ÚR- q!Tdnd$@s0t޵!i)DG~oo&[ި>Պ4 P/;k<m҂}_ԚL؍&Zs(cJ( yULm5Z_C[?$PXuWXVkP+}䶚zhjE;du p哋gk{msdCQcmwt2ixM˄j @.Gf>E [ՠe2[3ЮJ35]Wp#/FQ%%@ۼ`'^gy@5'tR߬_6ErZw+QV䂍nEnw[W~)#4!Rk @vU$6޽O =vs+K(͎7/G m85th5^mm|=,t *@ R?)Q]@[}e3hopa7>{NU߬CUwg.GyZb wN`@v髣*]/qxpRo&L&@lmns[*(fŸ}"`ͥR[wfܯǙ *ve7w8YGZ۸I9?#d{Rk ;(ط4(̾W^Of-sV)چ:/?t]Ҟ!ʍ7,IҘRAHȭYGT֭1l҄Niܧ|Z3aՂZVK %&GnlUKߜ'Ho,rut!WaAPt`vc z KZmϧz7p[-D= ,h{o ۠$Ⱦ jk"x;t3b?CD/h{n;d|ӛUbOT& 42D@AU༼ɗŐ! C@. \ Ap1$bHŐ)k&j1d%L@gcB B||UU_$Aex< <E!I h& N0Ơ*R  /N3 I<χPP0$=A @0*qŐJr!Ē!TUEAUd0(hknFc0YIC!@x ӳHeՋ~gǷ a.@S06p0$UYMN#A1f sbHRX֊6xd!D 2Y0n_ 1TcSH3X G"@ @D02>|EǑ/fy7٧pdQ(T:cQ$i Cxqj#2Ɛd0C:# t @:Ex|QcH3OPfBHʠrIO c9əYB820O2_ 34@ yL{D.%F%š Y $SiˍN@p ٹB3o#amH1d*t&c+c d\6`%PWDHS*º,H3f7C $Riz \l>gj:hVhj!8Ɛ砪c ( f7cLx^ kHhVC @4cuw/BA4$ b87Ÿ0'pښՎ<@{c0@(  Pբ,QQ(\,)y"1LG5Y~ep$vΈN Δ:|^R[ϿNtC\h, l:tOI@) 3uCooPN`qH巪6 ;F9SNn1Lb07by!i=yHC1[E{$)'7bvSNlG)'7c 1  T^J)&\  s_^^s|=BwJU~GMVN'@@^U~녛  tlo5uz$X[)n ao5u=Be\  bjpcNZ~+?'@@ԌU-UH(Y~V|5^p10F&or.z!21I4RMNA}Μp00<:1Ȓd:W":G4'[~I9 c ӳQwIaznznWOb'-%+޾ 5 ~,1'&7 McK$p|޵wX'|prFb ŷ.jM۲S;'}Cc  vYxbFhbT3v 8FcLL``$\SBg`SpzUJuPߺ`Ӝ#1h,}5}c 8:k,.:n=kNP:zSe!Nwم[r. b:t=va}6 Z|Pܢc}Cη WJ9al+|agۅ)ȠMrB>Ftp&˯N)'`K(ћvd5l)ZB>zS ;l%|`]XN n[T1 .L`mڐGmn&o}zN6PKGo`k0Y~ chNWLjv%mj&o}a2 XZ T P^,`՜eH!<6! sB>F?F.^kمk-TG11LLY.L_/w,`&˯5,F' XBJ{M (V6/d$B0]C>}(ۅ{̳ ,d$9y9`>cř 5.L_;0r&"!~k|9fh.va9M ]1؅k? ]ћz؅ʯwN`ǐ`.Յ7Y~9 ]C>F?4Y~Osu|:' d.Y~^(O=8!cB¥*ڞz'PpJGoc؅ʯz +؁vt:0Y~G0L|\Hazn+.L_ ^O0prJ}C}h ͊) &N?z.\,1 '97%+=W&˯;0 '9c !>Y~݇Q9]`>qo.L_bDNfxMGЫ(8:0,0Y~ݍ94,qWC,\,.FRˇ #}ŐuH()xQ0I*OZJ9em|5YkPȧ~00azv.~gN*9HALNXr& X(C@@@!4 |zԺ&AXj(+!kSKNB>ai uNLb ,}A,?^^T^ @q]{ `x͍!W~{|VWJ. \ Ap1$bHŔ~444N *$ N/MY}W%<E~vvlެ[b GQ,7+R lc& Ő! C@. \LMk#jRԻ,>[|OIc ؂8\.^ê)B$xފ>#@.#110I"ːey#STU|uu@Q(]tA'Ic`pHӳHR񠹹+/dž qNǚ58</pϽ_gյ8snfQ/pI"BsS3:jJYW²e[e? |; #]}x{EdIBP#G_O>>ids%?( Z[[OKvୗ^M6";F+sxxwBh2Y`r~+_M+$! gz"y 8t|[1 񛧟ie-5?>K/{~hB~{|;/5عb444^+ qJW9c?›wƵ{/.ض,W^+^C5Y#$Ib[.Fa]53;}=_xމكez 0C 쬫% CC-]wnB$axdޭ'N4+-FdtU $7}x'{ ͯHY'я?(_&[WB$D"kvslo ݷ% cHR=WO>ivslwJ;ߏCQ_1y=cn;4;3|L6˲[m^8H$$bXE#{g[[EUUEϧy{Iׇȕy"֯捛azBQ$I#>z䤮h%+wt )˲?+|>ņsǎI// c$?/>_yuqzS˗k6q?ў^Å\?q1:;:zQ= Qo2D _GGvVP( b= [CCjJ\x+/{}8tة ykK .ضMwۮVk$I8ӃGӼo׋_>я`yw|` q8g&\u4>79c)_'Wgo'>*{9$I_ ,tè>9?<^JS`tl|^sɪH㕃5m߱l>я&TUw MlmXj8ry3 k۰m]F?s"[#񠥥ElL>m}庎zQ(_9! h3NǹlHp%<,$!`|bB[?m>#I@C:ظoGQ[@0=(B- ͑$ CҴ}{[;^.f'UH((.TP pd$i.#  Hl?{ LNMi~5PEg{kupqW^YVUc؈NS@`SJUn3,3τ$I ~vLoyĄsiMliiASc# )  ,CQ-]B _( _]vtt`M Z PUUiP(X6Xjл${!l6 U-vb0x"ѱ1>|Ͽzz{+z}_ tZ[l; r91)T^]a5=[`,>>plxe)^/xmmb_D[1JR89^w~ttTZB woR@p틟(FBDQFUevv4 2+WO|-Ͷ'օ5(Lppw ۷z1nB 3zp0m؀ݱ2C.=kiU!dEOtsKTz"$oᦿ>۰ /_X|Q"L&BE# p[vĻ.mg_Ks3n&%IBKs}qI %5S1HYz؈eXf 6uټ : ]]]e.5K5띋e4m"aKk!>?bYg_1(ǃP0Ԉ@ 0_tudߩ$ ˻5m'G쳁Q7xF HR܁!,㒋/›vD YcEVi_f*xr%d2_͋ʿ~I/$ajjd/ 24z*+/l-!zj455cJC O ϟrY3Zp!ֻ$6~9Vtw/\q[Xol}F|J$f# B!4m?08>G<#$!2:WAѱ1M~L&xp~|>GE2$>[b(>}Oݾ_FU_,/Ϛ 0saoۦiD"DH`3!I$?܌?q+^C>~=1]_ىq? fѢيpk@9/+pW׿~ [z_.|PwAlXl(CY.U|%9ǥoڅs6mŸдsgGoHx#$}xΝx[.ŹAwW'~X^+GࡇGE2+WuQXVn9o]XVd{ ^|%M 9Gx5ͻwcRs'&紐!} QPbll xdOс+W bGF008yq[?˖#GI~c%;.vA wrcx귿<>{'~:,Fχl. `xdBH(Q(訶{zx[ C.=d~Ee+j.^ÎLH޹y솪y|l[,H4ÇE$RV8Z XQ'sոoQ[qݵۻm[z![x<5| ~p҂?w:;oXeZiiiƇ7xBm#9֮YpWːi 7Kꢋp ӟG|뾯c->x<Fƞ|mmmqvaEhO_/}O8rccc'fsX~mmXn.ؾ wnތP(Km="7xOyG(֮]nRcm C\p\72RU˻p߈|a}{kn,'2s2l޴1`B?vk8ΠbbkK [[i?_ŎQ>a6B@j~*| @>! C@. \Lٷ$QĒ l(*5?Cz/LNFdaەu\h \ Ap1$bHŐ! q JIENDB`photoqt-2.5/img/filetypes/eip.ico000644 001750 001750 00000023544 14134304072 017447 0ustar00luspiluspi000000 000000  N'PNG  IHDR\rf'IDATxyt$Wy{{U/}6fx:fl0',^$BbY `s9 1i4m]3]-z5]]]Oݺچ` «_Q,KA"!H@e,.CLw%* @ ǻhYB(`u}-P$Ix=@$ 0= ]5Շ` n.`acxWq` 1$[ t5D!A0:,8?> LlAHt%$f/Cd`!P +eM:vR$IB|8X]_C$٘7ݐ1٥9ΌoMchjs4 P+alb Q@BpCHHtQժ V1097)p2cja#c:OZ` 6., h2P=#dYFpf4-pʲ fR1Lcny5w,``삮h + (ݡ +邅[2 U``X7:gYY@lbE˝n(s\  Nciu9wb{h|+t*  r5W8ld?b3sL`b~8"FH@erc, '/龨ud ]/Z${~ 6ح6kbAg3 N H'$ CFq~ڜȲfhr7AL9!@Eq&]ve[leM_=)D"j.[QT[sJ o(q('?$1r+jʪ4( 2 Q^#]Qwj~J  2d]v=[sN6-?*D,J%.i/. ŖeY.Vʨo"s}/H`Ga VjO@οj/r]X)'8)-(A]M-Yi y\CeM@,H0waGa 8)YaZQ uյvOpRM"DbC2d.ڋȽQcʲ 9pp~,j5Ν[~rG]aѳ٥yze,U ;jC;wb1ŕ$C}(-(f$IPVEX^]/GH A d,ÅAXUiźtR- a? c 3h?I W}cfi-} BibHN 2ưlo;|A(z3MMco!'`hm0Y${149듘*d0Y/ "Z1cPw/s M{?C c sSy2ưLO+gN0Y~_N"ZAH;c A!6ݝd [~zO@g9qk*=.,zG 7 ⬪f pn_C;1?Ew$$q#' _E _V~A6p+ ic>cڅ.wtSi]cqu  7!'+' 80],E9@"!Tvar6r>mIt!B>B> lԵ]X$7h=' k]8: S4 _ .7Mh9'iP3 .مuS]xS_ 4{" vpua=l9 dM;4f@Dt =܋Q @LO`^S h*|Χ(z.L_ ]!T[Յ 62}kJ.|QWW],RN hJ6B>E>r.ܡ!0Y~Vre}N5bfai,ZC+9MHȧ3C!T :.d$I!˯BN O*W0̨],&XhN WE2;KvᖌTD=d4 ,9 @;聰]xbuم#)jL2veh5 .UMY,!9C>]ýJCuaL~u% Q],$S9 B>*d5}XYK_N #Po!TǢ'5Յo6rO mאO*<\]Xm0Y~OHlO'Է 3ưHU~ A:siANB’$t"}Gm"Յ x+'ҫň! /D 'v7,Y~Br)|Rg3 م7UHGN %WC> .˯H_Ñ@J !pBp;F_꜀WM$cD + _ "p)ӡ-d5 . 'lxLXT0Y~I*PMIv |lO@J!Cf0Y~ CS'P'] ۅkn $%!v]v aiusd51j|x#䳲@)$R]qYij"9vz ԨOڈDV00|N  tQ'piO }5Qȇ 2Z9`SK!$jM!z' $Ql|B/Dr'H̸ADs;H&'S$I9 I4' 8232X-E#(-(P)-} mUDDp3܇4lπmYOƠz01$abHĐ! C@&&r!B?0~GmS>AoZ 2bGur?9m jEc),H{2ȾOabHĐ! C@&&1Ȳ I ^s KmRRSџdI.TCA/"08<=+um6rP v}uس{JK` J,Xu\EC$~ ԟamlfZaZوCF^ cuu5fVrnTk_|n&vA[,|>Ȳ~~=@pߋ~!⒌1X,ج68"??娮QS]b88!H9x_} M1}W"2'o~upf[sv5c p}8|n,}^5~\ n(t(N'l6V 3-X^YF~^~ZKKWKF*9 Y~^EϾ<}Tyj=K1szVg+Gc_}ruΆ$Ia(8P܏?=yoWVp9j䍷Dm3pa`Za`^gnv 7p?g/oW|얶ONFM؆{̓<Өw)-)꣸]j(FGBǿ<ıIo8DO>jEm=g~+U_ :338?@pKl:to#Ȁo>~IֳX\Zxq\}jQ۝:݈`0/(vo-y݊~ v?J‚08<ı[%YBZG=gգ8!nz|֌YKKlpw8!S:h:{'jҒRm IJK.jhj?WVჇjj H RF n @L/݋gp豘&^FowZ&l21dYsײdT8瘞Fm=ܜ\HcZqՉ`2@gO7v+5;wè(+ec.E([]朣Ku@m053~4i[QC܆wؿoxvQ!@vKqid9T/^c?ᕗW^V>ӄ5]٪΀cYmEH8Xp:(,(DY[cCA~ى Yt8QLQ x )\,.]c@$ VʎTĵsZSM s54ciy:` "rE_mxC#ɆwYFs]_}s 7-hioEiI)vԠ|G9\YY60]_GÙߜ?Yd݇*E_U!$1Eru| _xq_sq G,"vuwl[SY={Zd %E8rHLFGg@Ak o>WxtW»tt̶GFqQ[;\{UuBCS#!$ eMߘѾƨ;"\s51wǯ;;%xV3Hy-GɛnHcX(+ʙǓɒ}{2v23lŁ(8|wp{Iݖ`9B@CTUTb}ImZ*JqmB3A'(bWN<ã_Wo\-c g[sC())IzQpګNe::Lh z $}~7G?1~!`pՊ= ^ج]AxJѢ5W] Ñpv;hnm$) 2%+6 L A01$abH| 9Vz]@zjŮ9_m<׷O5A9^m<]L' AƅĐ! C@& L A01Tfg<IENDB`photoqt-2.5/img/filetypes/koa.ico000644 001750 001750 00000024553 14134304153 017445 0ustar00luspiluspi000000 000000  U)PNG  IHDR\rf)IDATxw$Us:L&m9"%\/.WQ$Ir^y?WHfPA z_ f0awgvN={l:i~g=p@U>& $ iP A$Ĭ!  C@ , AX0$aaHѵQ,KAkXh U B 5f66v㓓1" Ơ) ^FG*AM8c`3l6832<822Bb@B@$ha j <x) B|6@0qxas8HB)A*C4-jpBf~>!#7wHaH"11 N迚Ah!y%%94 b @a 7f,(Ą׋pff1 n P `J1@p1֒ {,HiHd` i \whiF`|D $z0׋g˄ǃ)!"(!AS uv hldw{B$` cho/E$$aP&&0c]z{M7"y  0cY9$pt!&nOvQ's"I!!GG\wE``nw!A h-CvUo d 8ƠP&&=.7)f+B;T3`&KURn7*CL PRk-$Ō%"\'0J1 5$ի5!TEI5 00>2kjolD Fд${"eAsLxᤚ v;ҳsR0Α2hmȈ11߇ކ:KX 0Ɛڛ8iHN*LZ~]M]DB0Bi!GZ\$f܄ `T=uRN0$`s8`W݁,gZ~}38`6@y󐞓cD45, Z_S|n  4egsoFvuD|SN $ (X +Wd !8G(Z.͞ZYH-FacrHл ˇwxA&<h]tBL9CdH4';<7r `w:M @Áܢ"d/X1cP `w8@zn.2r8Xb89uS#5CHb6s󐞛PЮ=1pa;`s:aw:!E>=?*o55 o"d @簧>kqqJTr7pjNtN-! fgA?E->fHFΆ;΂/qFN+NF- LA@ďY~ 3HM߄oj?kH*q 1'U~ON !XUM}M Ys?"̵7Nx@JR#bO[~#!s$!RkS8'@@ȓ"HH՜ !O Y~o4rMURL)g rt(BU~Rk XFx qRxsogʿ=)ƯZj>nv_j-ċTFB*R^cpUS 2vhJۍ%V!r2 U|Xs n{ij`T h# rb詫`uWa%˯QN hɻ@JM jo{jUKQwXk@'hO7zjg!~;iXcEo$${N 1:VA VcF{UEhe-FI@ h|~9Fz]S a/ [~#!s%B#]-Z1܄ֽ8ɜHZk4tTcۚvaFFRBcW3%@ مIH_yr<20aA0Y~c:'Л<9:^޵f&olT=uɓH_O<.Z9ڬa&ol`,rI+3|R.L9Ä|A.|c)hpD3hh $B>GÄ|b c A8ګR.Gs#I`@84cI]]8dm$oa7bޜ@rТ Ơhwx(D3abΜ|Я]"dM0!3gNӐO4EAO}s:$4UE# 7)a<HpN 0+;$1|h],MsS!`Zij0Y~r %l&k'.bpdMzN'TibԐ?B>9% 'bf&oȜ@BഐE3i讉Mua $d4J'LV.L#Q9^-)1lrᮽl MR6njW&o998]1&' Y~S2s G̶Ozk1&OdN >u%b~՘u'dA0Y~-C('P@L;$ՅudS9x';p'0v..L_Kb&Vă)pLvaZx'Z-3مk]ⱟ@ԣu:S]mO\ ww16im ˯EuN :O <,뜀=N>]gPA[ 3-*333*pTB>qπ ~>L$ | D4r)370Il Clr&  QNPȇ B,0(!3~ң1kCB9)N>DDF!05t@SUtTO$Ҝp-6\#AaT} YX{Z [W:VA !42`桽R ڰ AaaH!  C@ , #3 7>oP ݆}O~a @q"l޶ A$ v ,o@A0A$ 1h:i , AX0$aaHD7`"SRIQdtoq>]!F4h UQ l6l6pΧw lgfhhϋ!8EQnِ`AQLҟIȐ*4S?UUEO7jkp8[Z0!ii7>bXq-]4hA61ᇪ(v;ii _Ap 6 x5MŶ]pc{4_t1+_EFf`# ǟ]kDq">||rrav~k~ JMS}9}#D "HN1Wn[M3||g+5XRZK. YYr9Zo" ֊Vګ/} ":VYhm[jasؒ"0ƤڑTIlx/+5sΗc;kO>ah0~&Z 01}!c8VYaCsQ*Y!tp{mv;>wݸ+ 7^zw~jY]}}{=x0E`7|8\VF;VE @`atx8VY!_w=ngs坷Lx쑇6c Ã8ZQ;mTE~W>rޅo} 99Rܜs4I."%чŸ~ n9GscZZ"tc@31$u\jXtT{>{xF#גQy<˘Q^? !px~(`A@ݝ{=hv|+2qqWo֮r V[݁vp0IK?+VY՚8~4Ec‚Br 00ߏw=o-qnS^V&[Bo&|/txM048}?~A迊kkn[/|;Wx zgn~>Fg=7--8Ѐ¢b*^czB<瞕jEo~ Yن^߾#]o=^ !E(4 ,w/oI~[hڢ+霵Fê͆?6}!%IZA,^Tsn_گ^";7wwbo^.55x11ǃ¶[XXK/ö;\V|AS͆|bh`@}^~>/mx8GuU:Z[_uu!l#@Vv6g^/o?s3юڰV^;wbIiivǎ'o'R:S1q! ~kRB~_Ƈw4/e)^XXK>|T]SC۶Kx=8稩@vnEaq1o]OWj`:SQ";}p>jrXeT6Keù\ ͍ HEag?vm3́w ($ @L]Wx'_|1E)8c@[sT-;v[slݵ+Ch=q]w}-X5CӀ [6#[ѤAxWD;;]Vv6s !"!01-۷fu'5U}ҎFC!/F-c W@h\ܼ._|P.nir Bdfeam=_$euHD_OO1E9qG@r--=-Wb UQBw\> S-LKæmN͆-۷Nk^@g'ګ8_ԳUUrvNT;M % eǏ-]+׬='ڍ7o^wu8@g' 'jzjk/8E,,;x4I棪*t,_ E%%g-j˖>* :$?FugbNll(*madfe5t@ƣT {x'zO'7AS#Ov8-4sZ9ؼ}Ǭhw:yG`?N0Ĉ"8}Rm77#paUs b Ƚъr Vu7.\B`Ö=^9Ba3iiޯ])|0?}NBlG ?z~9sә+4J HbB۴1k֠dOQP7:T4\{˭榛p:я|':to"nl6ʙt>Jδ4Á JÙYY[3008 3}"g%WUald 8$Qr?;c[믣+|:P4꩟cG/RCwi͆\IA?,LjsR%[Zcl476v/f V]{~E%%ӯ6lނV55x ߙݎy H39yy!ԡ!it  @cY8ƛPrܳh3PCQ"XNn`00cj_XT'R8\p\*D͛qў=g94Mêk>-=--24=e/[*16` 1/^ 0}ᜣ q.z8$by1c톍Ro~cXd)r$Jw~67sӃU`稭FoW^Ďζ6ׁ3@g$fXa[:^EKBPx1m_}O<{223u aǎ>/)B9{{pH纍hV` Muߵhٰy9RAꪫݍҕ+ɘJMpٕW_ m+ZuyɁvW^ƹ^; 3, >k9czp ~Savw^ LCqDۥ6'@4 6mڍr {etݙ>T  / F ql]7=#;9H3/;;;=W| H⌦iG>.P};ob-\x@S]mH)1ݎ|}R`Śf3a-/Z.]BHB`mRL+gl^ @B <|J {I藳b ~rȽ 8xMx040EQ*<1݁_H}䌙)8hill((.2|4 K/G }US}:ZL)ЙH={p%j0^wbݦMIHy9f\O߀/|#n oWw,mHڶk7KXBa׉[wBz\SB /?$޶ f@o@H0~Shom};Ϡd}>TWU^/CޓgşoguwqXbgZرu#$ B4E×Io= iM۶;HCX-8p#WXT5GmZ8RQ!EV@  ~;/>\91nwq?7{EVvNXqbx %6M]n݌@e @mۛ@I,$UU]!վ~iJ)3k<],^o>0mM V 4 ۺs)cơCDQR@`pmHn_ 4Mʵc뾛˗c\Rø׃tp`]Qߑmv;lnВ*$UUuN\OJwٟ> [b-SnYL 1Ə,.r4c h8~\Bݰ1zشmu6 BcHF@"܊EKJwBbii)ݟ^p_9uq_z2Q]Uݶ+׬EEQ,tw,ih-;w> !f5!d2.\MUf\HKO!=#W]s .޳e~-T>Nx6 YY((,ƭ[pKq%Ēe˦l./Ž{;%4 [D?yy{qw: :|㡇/e(O0tW݁gdP٤_Gi;u~ 2T3`6HN*+PUQ sy CcF#ny(2 ! +2JpvɎʊj456)$i [Xs  @U݋Av6*G݀oۃZ47лJ0$i bym^&UcLwжЂ6mv  @x=X\C0څ01ȊECtvtY Eܞu,!Ow˃H4#P& RY,r.~ 6]?7 ,@`ߖ +sP(P 1P8iv$DV Ё!`aehA?W +B AVe,- u؟ [W  Єuû)?a.H4Dw^)ʪHhhF0x|cm{bo9 HDڋ/2<#Qܐ$1@`PqsNd]!L @Vh"@ @EF /t7 *mz ҂!"v";ASV2*TgaNd4'clw1s7} ?z(wdDS U,GM3bI!f18幒B@YJ*9XXc h3[<t:(bz~HqBL͍C|C@-1lz7b*g +sp{6hH1mFj}ۻ@J E157|0#,S$:SJM2݅qVwcauckC*VL;#$ LubٸIjRh4qI BL΍mX,<eQ(A_#0ưM,ɣ c ~fJJ C.(ad``0=?a3.N]| l*\!8稬* Kt1NcB0P]Ucj݁ WiF+Z0ncvqg8XY[J`!H*B2G]B Z*cbfEH$mv4]E$w7rx|n,,ϔı'$Ii@8GBTաD,i^@hPfwa*mR%7mB~ Ϟ"P_ۀ꺢65UYtJdTf)'$:ظ΢yB -JV`a-7rr)@@G`,{;Q#lBF0aM  !jz6!ʝ.i?Po:PN8$)Pׄnإ>G;̬j.$)PׄpW䪭ΓtUĝ@Jt`rAmU9&ps"BH6 m8uY~pd7'PN $i Pp8;q!BpQWSݧ&t,nNM9dN<.Ԇ&TWF 䇢N:춵KvTUTU5l% w˓7U(jw!!$Ɏ4  b;@pdY*C2c 6n$Q,GeE5*tcE]>N8/.F86}n/D<@%bCw*c"rhQ9 YjlO!IR2H6)v1؈TORܞ7 44ޢd ,?8(;(sjor7rz^ "4 cCdV!ۖTz! B-i 9 C@\Z~Ӂr! rK-)vr  rF>,ir9#_T9x="'do>c a7U~sG3X u[ī3rVCl/',[O*1Ne /Dh4Z~SsHgV W"bUs$Dv(2o:!0e 1kM}?,  2X-a nMg; aopαh 6f*@N~5" qx,  lt)@rDN17U(ׂ$Dʘ*q,Y/Q@izD17"%  R,R90bMR'@@,Q,'(0_7ͣPr9c ;r-R9*pqƱ< ؅VOC!\}dۅ}'Ma,3 %EQ04я ZB MQO +2F&5B>Y&6]ůY~s@qgLL)sX\dc>], 9S @*!\ /ctrJ ؅[̐0U?f&1`o fb F !F'Mm>`5>b'`,mۅ& 7o=E!?Mh&o~)@Q @6C>3 مcX%ocsE{0d? ؅G CDLϑ" "7!\ ]x#o!`crEy: vbu~x(@]] ;;ad- @Q @C>_| 巸(zE%|L]xxd->%'PTW~%3g/´oqR,9B>Ӆ !F 0[CNP,!\WTb 巸)@ϊb d!?G.L_3P؜@B>3MF´ʯ9`!)\N`gF|rWP/`, ">VL_JAry?;⎹"EQ0<яڅkNc ]|6L6\x9 ;'+Ќ!֮]8˫ 0ZO oW!c n|rVVh&˯c1"ϠIC>:& YȎ],C$9@)|r*F'c&oϜ@^R dlم[z!0@NϖR dvid-=cCN gP!\ۻd-erS!\؅F05OR$r$f,^*s-,'J!\`|uaZEU0@V!ls`u`rK(#˯e`Ó@ ~{%3hՅkMrȚC>fcV&˯U=\ { /Ld&'J!" Vח#˯v=B>g.?C#ǽ[Ce[ 'Ђr+]sҹ\N0٬'֕򙡐O>П%;9& DVN eA@fR DrF9Wq,3O!("2  Dq X+!AN`"圀i D1nN@ :Vl 1`jn(; yFtrV#Aزrc=Wz z' C@ , AX0$aat}. N^`@8F0l+'~ZZ &;__l+mԛrj $I5B@Q`Z0& !  C@ , -LdZ)Z_q| @BPZVb'-%I$I2B  B5 H{1ә2g`g'i`$ 2G`HbgggqMp['(dA$8NTUU8rǏ@ggaIPU%b`6뿋|BF6BG?) _|`4>GrKl6~ǟ|KIxSO> 1UUp]m6jjjq^7=AcCcnG'6<{ 8 lxKŻ*++_x5R\@?VѕR8l#{s#>O c m햯sAo Dx'k_ot֟9X[[)vaq#iՂhkk$i[666r6Bh)++CssKNLH$_~ۿɬgãØ_OP}78#@ss3ʝ66s2b-ϫt @C|ϛa7n^M S lgoEQtQ[[GP{Yn\O{#CXX\HYjjjQ[[nsӍH$o0Ȳ 5$EQ-,-/e\1 յU￟cIMMm<^P'Xj{{[YcC#]nBo2+ȁiBPM7RY!?3EJȜsJېe=O=m3B8NL|^C!˭!!kjnn Mc~|C bCVV՟௟6nݹih,}<{3Tjt:a5n߄EmME$wh: m0&0fVHH@``ap8C wv=\.cǎcI޽whii54 @}}#*> !F&5F3}O ahkˇh4dA @/t#ԞRUp8aaýhkmmñcP_Wӧh ,FFnȼ#@]]jjj-D"7 c _W0:6/\oyX @yD;R^sj;u4p8{f@ RG:^Co)8XYYƺgxhx5?[W[J2$yE6-#ʍ[7htr0pb/4_qͰب8$t^㣇IP^^N{sD}]z>P(IR/8PUOֽ[ `iy@dG[0|"B`|bL(84WUhin14$yBɩ8uuhkmOY8X^^Ѐf9}vo!v?v\3++0,s똁|>eccz +e[[A֖VݸU sll㟿=CO$\l-Uc4D1Y§f@YMܺeTVT, w_@UՃI0͆Ku7oa{{Hϱ7X\\4++˘;Пh49$ -)R 8_7͕rt9;R~G7ܼ٧ۮC`!ΟAMMg0;7c1Qd1ylz܆ÚNg9i!=A(Mz'` PMD 5 pM&c pC*sbl|T]UU5zTUő#tw.U55X[_K&bg Kb9+\Bo[n]| .X̱^lQ:;{%w|CE7 PYUO$i#66UEQ OD0Ua(TSSB z/Ucx—'OFq=s6wv\=wPÉfuįƝL$p$2PUU33ӻX )م? _ٙqcޝۺm/]dbbE\iO(M͆{"sדX^oz"Yim} 3`A|Fϵ456t#.$yp ?O>G9&&1=3N\x)[ǏDkoL vo@`aeuk뫇vTUB! <|^ D ~ΎνdžLH7oֶ&MBkk+l6Fyfcc_W}KKogg=/8~rg9z/n>VWWDvp86|{ȱS'ON:p#c{˚ichm!~H @F(ʸsnK{QUU X6$IGt}򋋋fTh+loo *G1s=ą }~~nh! e$ Dl!TϿ,~5?r1<2ťݶw>Ip=A 5-+ Mz`{{ `Ӈ0N'Ξ90 =PVVvz_ ]hh ~H҄w"o[2 s}Ͼ׽hoHkPUUݸnhя W溈Uhk$vvp@p1('NУS4whJב҅gϜ^Fo^F=796y).0@ -֑ FG1??9Z$_ <6 Gngph~_s"UU$ UU!2EȐe$_x /fE s)`a~a##WI5→粲2jxU{s-gNAeEtzee%ΟIq¯Q㠡.WEޏU1Ceˁ퉷w ]#C{9~^\( ]]#V#@ v܅׍$ı奥ELMM¯jjj@CC>_ϼ }`vx-~qji߾sSI f~a>rg9Ξ=B;{ A-ܻp8ezX!@cc3>Ohf㌌g|.1ϋ۷ol'&1djɩ LL$lhlPwHBhQ~cxM$X+ !Hr*xނ~k g1cp9$&& l97xܾs 1/@ga,,~Ս!hhhĉn&) ιMwR+Bsuu3WDw=ѱ|o_tp-0ctIv;7uWv*>' !P_[Ꚅ6^I3xhe$Ӊ /~O}(+ǒ*'pn^xO?>=zL1j)^ث p3Ob4\>! Vzs IҁF9.^tQQQ3rLl. |zf87q]9ҍ3pПDG{'.\FF2BUBSSsJU™3gEӧΠ.UUU6K<?ַ <ҳI^qa//5s^8 2<ȫt wH/,ݎv؄GUHRUJi{j@/Z!TPgl| /}EU>Ck=z1t%rTT fC[[jݍw !P]]@ScN0$yBwI;{P^z.(!e oUU.]MWUN8ΎNݶCÃX\ZL*FsY v{RCP2[ $yBUUtuvOPģ04<Ύ.8v"*s^ Gz}ڦ[p? D00AZ[RZ[:"y'߃Ic? /=郣95n9׃ƴ2}1vUhjlU3$*T?v"ŶVD#x5~br/}B܃o#WK鮛+B½y|Io@UUljjF1fzq$IB3BgcxǑ.cq^~Svت[uKQΊ ^ΨB8y:;g'1=3.+@Ue `{p*p\9477`HLzx(siOh2:U=/M7ܽtrd  j\.;l6\pbeEn-EBPl6>ꮙŗl6ܽiysy456xa Iz]ӔgϜCMujjjbuIA#wL2~rj/0^w?rѬ{E`HxWlGq jP2( !2|#o~\kx.^I+I~W~ǏȪBp-8w|Ҿ <[̫*.^?OO6<ۨ=Uz|S[M)PP^N&D0 K)xavl6BUN*lܦ= rngk؉$*j;-qmP(Eb]IV!I}vF ;BJjª 2{O8&BrOfAX0$aaH!  0^6  I}+__SNDWt: (]h , AX0$aaH!  f?Ji? ,pMMl2!n#?vxgBH+LD) ߿̶ Øt=AݎBr6c$ 04:ɩ)B> (pMMQB< C# D>! FQYVlCV$Ĥ#H} ia,)/ݖ)`fJI7g"χA|f&qO{V6"!>}CL sxQ !aU (bpt ?!$2'0:R+  )=iO ` C!NLyD0K}ch&1 Bx0ntLN@XrOڋ1>2  `Wӕ]ah& @)ŔATP3>^, JwCHk#) 5T [Z~!mPBaac֎`w šRG+ ieĒ(Rw`Ρa0aAT^T3#D!`sh!w3&= qP PQu:E]N9ߏ~M j!`'>G#d`p㠊>#ր]}N gU2&W=&< NL=p`l…Q6 H}]52a14ua<o{q(BW 6(صap$R -YY(ȵal3A7(CEH&'(SSdWu2BrOohH"0\dgs=>J)sraez"Y~G7 $ Xf;0ٌU-Q&H&qp!?7GuUlUNDDa9aP^RWJ\; ,IJ& $8PV+¬ێR {v(ќ( H DssB7YVTU!jQh$UX~R^(\RM –y& H @8cr28'(7*+cӆ=Y X~c90H,D '_(0<ʊVuLBA2߄? ą @dY-XRQˑc"Rp<,DEI1LRԓRP*F!L,N"Ǯ\0 D#\-9> MP~J.smMX& 7>a90`wTvop` [O`&bRNLi%$3=3' Li=]9gd9 #gF#0`hLY~%1xN #-Y˯Zo/Qi0d'ZwPo4zL#WLa0dEio25zLo9'!j&Q`uY~en=0Aed0bN #ekM8Fʨ[O #%_J- `Hׯbo)'4Z&QrLI5o"Ds: 0`$,ҥFRD,NMY~9&y1sL eo29'j `^,ɠלdteM ' (M7o': F@0G[0<60S~'X~%z )'`)E[wFF 4D-Cc8c3 ! opghoKN@H̡ 8щq>ީ`4o!'Kv5mBqsrbDo2h='; 33ÒYBxց`(dG;tWTsP(Npr##㑯gi4Z N:z0<6'+Bzv/2Ly9)SI؅WDQDr!t(n1^ۅW9>4+ |w:mX~ǘWF5Ф ۅ#_'ʄrx!oљ]Y~ӃVr)!څ.l*@ 9M @"!t0.,|h'#WZ hF =j.,A9@!t@j.,A9@*!!aAJsB>׌FYJs9C>逋څ;: ,ʠ֜j !t:z{$W9ԘP+:UofU~E9U @C>@vaVW-)':T'VuuafUj J"82IGef_u ,h\'p`dL]vafUp=T%J|A.ܣ0\U6' ~nW((E}EQD7J):{ (.s! \v6Q S0Qyم[ 3˯ T.')٧p.Y~!BIױF™.,!Q`H t3䓞c:{{3bf_!": d\I(f.,C@@K!Ʉ]U6 dTI9p{@hf_cΜ`Đ̷ x}b_ !' 9#7Q𑶅 3˯1JCN@60r'̷ x+' ̅|I Uf_㒎@eRcY`f56rR谄|\uLy> q|hNQl5%pJ#LLMab73'2pP2XȇPr 0@@B> zH5' YXȇP' IXȇP7ɮ'WXȇP7 @Ej uJ#8[֑ /q 0ξ~H[G31FJ 00L 00L 00q}ldee)O ~^/fp>"Uk rLBI@0`0 0`0 68Uw)E(̮`M$RI }QsDCJ!tGW["V] 'chx]]BӉq 8l6:\˗˖vmN,&'qX,i9WpXy!Ys` '&! "L&v; (/ǒ*t Jː 4P#@)EOO/vލ܅CM14<_$XVamM o;n?+ayٞR<c.I5EQDEy9~|PR\,y套O֖[XA_IFG,]=رs'^۱MG1::@0w{ՂE u8aMD avtt/!~Oo/~/΄=DӉv@EoqG_ U)_\.<Ò˲Zq嗡TVV~͸m )x03xgљp 1<F$} B&n02:жᤥKP+WvMMGё #Rؘ~Ӄ uu P5  Ij_ZR+/4.,_ ys^ QrՍƽ{ƿC05ЍpW^} vv5kV_>TjY^("n 4ۏ?=<^ݱC֋~k.??7<64BXU]_3u8nyX,,NJes_^z/Tӂ.!ē^Q."1o'#C͛pm Ełq׏ylI7g}aW@fjO>Ki-..oVUDaaaғnnݷ?fl޴kVUc'lӃv{HAnNNJB-8Yg59paw$7L/cUI(l6+~8CWw7;ceWDyy9jkcxиo gUxf8/feKOBEyDQDvV֯>`OC*1]PJ9v1|o btlLR"77Ghܻ3331۬[[H9C]]-q|{s(\h`0ǟ| ]u5~~v^ϑT4-dsgzZRիVÞ_B6YE^˜kmEo_n/nJ) qکJhNpW;܊xyް5(ofK=1 q‘8EJf܈RrtiFpa]_<㒋/Bl'{zÏ^+>9q1a 6*2>>.}7;;E*8G1'ȲK,;>J)rsrnژ =^YEz) Ǵǃ7zv|ӗ+_:Ef@GH)ɲZ E{\֬^GAl26Sj߁pMNiF)EVVnMXWS??/U|܋zE0#WVV, BѸ7coCmjSJyy]SLEY sO~J0āCpO]bbbBRv-髃R4bɤqzz{]VVjׯQtTV,EgtY֎n~z h\ 塔a||"fb\RJ((ի= ţ(8e'P^VO(:|IB|Im@7B$AO"n9o1<<w_Gs`+W }R\rEhk];—` _|3XUR+M j122ؓ0ZHܶ.òVZ UDJ!Ύ ֭uk񹫮[o?^MO޾>ڽWU+}X)WJ)JKK`=,p===9Bƙ$cOV (qчķo%o-هV4/%%%?miQ/RF`" 7 h炂|oQXk+&\.MW @qQQ2YQ47ʼ?^\N;:ݣYt!",3zpccc1PJ)rsr4xgW7dF --J&\.?p@OL " q'/t|>\.8hZ+n:Im_;3>q\ĕrA)Ż uuX(ץP8 ߯iaռ͛#_ eB$p+:w!kb!$-#9J)%}2Ph3`$+W\5'JKk+oޜ8>P99'^O5}-??jNBIZAݍ~3f>L_ʑQlټ Y$LxUNK v$"UbvzzR7/gn==8tvu+~پ9&Gpwl733}{,uEO9M7gqW&^LqZUE,Uႏgph8t$BaCpM_o@a5A3,OٲnnKg[6#77+P}C#|OT;!)ϗr`(W^ϵyy(t$6Ѕ 8{Y n&_(',I>^y5Y,$nÆ'V,[* %4А΄#0LxyI١[#n ڎIow~;‹/JڦǕl"l\sرs:b|Ka1AA(ƌg==K/C}E !áÇ+V,Obp`ڵh>z,f!457c~ 9Ҋ_{lB9{.H׋7:N)%̭YVñVmv%ucZ,lټ| )T]MM8$myD(.*u:'kص T.^Me]+*  b|bMGW^Ů_\c2;;go; izRU7V7}[_c-- mzq%Ѱ^ ݛ6mjMbXWܜL{>n=v G.+8++ _st&@f pwPKn8s` {9ɩW\tx T:rIK? ?_O@Dn>-{%!>49E;֬^bXeӦDQĻ GK (={Y߁fЩPJa6뿌_3,]$]AFI7ڦdl5c";; I >~Ux: rxW^~|a|cJL-B055%iՊM6\LEX\Ғh@ >s)Bii)o ˗-+Dn޸|}7zYpIp杈ܜlڸ8A88hi--),̱:XGŞwFC^ݧR mXpmzihmk?w]# }\|˱t.QAf%_sގf~S߀ֶ6-X-8زp8lI8䓱SJaoyTDebraL&|kf*pOwQzժEQ߿{*BPW[nZ_]{-:pAZ߉I$|> AL(Ǻv%K`2 .?p'ur~o獺Yjz~btl CĄ P}ЁF=qmxhhmG$\FAR$4xߺq&ڃ. ' nt[{MkW;l+'A mAW5.]mlā ]}p8?| p‡ nɃξ{ v[ܾ*(zmtIANXpP1^[dEpy\:@< 'n$K ǻA( + } qc^8⾷ Ց nWH ǝrƻ8IWBu%YGv1:TԢ1azfQoH+h@.FD tzOT7ס{a@Qa1ǻAA)EfzF4Ե67j!pP YN~+t4!ٖ2tKR|,͵AC)E]Ֆ<"CdAz)?C%2eHukasPRd쨯 .EK20oaMtunWCR\X@\CNF62-qYPn#q F&ƥΠ7`Rބ,[Y~9zC~v.r3r-;)w,&sܕ+_{Lq`D*b`!73 ǻ(gmjHo Q``0Q6i :.흝0ldx_JJi'N @0x&NNЍ0Ɛf0M*D"o8x*?{  s1QߛF4dc?oqA D 1stcpf`4g$ś@H0'0\ ǒ93QJhT1(bra1fLG1vm±s'0:\€d0aF4,`H4P(Ŝ)0eB t, 6ݛ Zo,C9y2gBy 7f%EŽJdàӏw.cUaBn!rp:gG@Q  t0L4g Ӝ! z?+^o/o \PtunWJk:D* ӜLs&dYGWE@(BCC'=d}H !1&oT6U`"23{(0 0Am $KRq8h␣ >e|]yTaXq` NL72HnW8:^os- ''Nt7^{ 'jV@x\8Q#VPq{ c xupHd68T^O 'D"o,;N ^E*` I>"7Vz\8%Y~cQ^_@*'wPă7TR9N 'bċ7ܞ\O 'n7oP pD8?N`0upLZ~éGM'3f'3&N}R)N gL$7TR)N 'l8 ܮ$h\wS_)1,F {\8a1,o~B!q+'7T $ N$7T t$e/ '$7 $gNh$7T $gN$75N 'h*8H9d scEY~ú@ B07~@KGkXP'$ӟ)#"c[47ac喤Rh̖P t&G@JMBj[QR MHh̖p $zI/r(7+%{;r+<4EkR 8dXO (!v*v(hhoŽ.f\ pI8Ijݠ*7(o@}kcBhJP 4$zI}W+ޤ,ccNRw7T(oKR!ن򺝣> M:l {##N Z~!N![r ܒ'k/6Tl|*[~C%JV [j!Jeo8$r@R  teX!UM 4'^@!mͨh +L֚rt][~ÃnN8B{z1r'-bs̱vqo$z ~*oVoم%YBEcn D\O SUv᪭ ; >ﮮ6"ANCxBFn @"'7TxG[n 'w{xOGeYƦ$ V'VH $H7.LN0FDYO ! mM1֋Idq %DJ(v%][~K" $r$]^n:8g|IB8B ^ + n:'0,'va6$]g-@HD\{ '[kqq- {[&,35N nhD]؛]8Y~%n9*j=Y5 A>Q;*Bpx]O+˧S م7~8XDq][~q|Ǖ  HC A- so|'N`+X{ovqd#^⪕U| *N„ڸ7ވ8hi  `kgVC @D^n{\x5N`\ o’,a'5d\UƺO" we]gm߸fɈ h'pE8g@D AvanM<+N OGDXddb. ab][~ʦjc'hA>рkt sobhz1D z G.-O _g?]7)e@L@$lچ.kwvՈdvaEQPɳ&T6U=|"/1څ7U@Td 4ށ_vn+qo8 @DJ(vteX DI hfWߤ#qQT Cم내 {-D;N O/gg D_v`{,5||% T8 qRtvanMqݨB@`x?c.-I4rO4ۅkGڅ7 4Dv=T!jnԅRȮ'0fA>k.GK.-M$ - O" r3zm}&qXvw(.]zPBʔ'01FӘj+xO𥌊Շ9'Џꦱ r}A><'PByןkD@OpƟH $Â|<ȇO"' θw=[q*$ 8pJRq%'7N (HՕ|8D`,q (ƃ|8&8Q1uDA'N#2*QgdTX8NPB9XsӨ fKs88s8) '0\8 ppRQ}& iF# IݨpɅσ$j-?DA }8vhD_,e9ADENuQ@a e@e烀N Iap8) '0\8 ppR.N Iap8) '0F a@<c`CfcfB jpP%E,ː$_W*PD(` B?!dX塈PYQ@ E(= $Y$K` nX#U !)${BEPJR_J)((ʰ Q#"rP][ G CvVJ'\vn˛$`2`NOG)iii!GfE]}\7J(`iH7tC} ;˱eVբb⅋7xvUUhhj6Ȋ ^l`9X8oh4B17#l+ߎo;+w n Fc 0o~Xz!3kF㘅'z;v ~z5ԡjc SJ&cEqȁKP\T콝clRH*|wز}+Z1tBE`8%X`233#&zcJ)ZvΎWe 'w~ ^]% $"PLL03ĒԲt^D ؼu yp\K⅋=TTWn7y8hq)kvl޶} **ՁQ.  '`Cq`Պa0zCB_<> hn__5G^|X؍R ͊|Ͼ(׼:QӦ3瞏{RTT]uX,8%Wk"`k-cV8U>+a +gKOdvs}.VM.90J)\<]t}äA&jY=?1W/3#}:5zn+{ϰu>NV:q+\#c=ǘlS, ‹XcyyFaV_y'Lf/>swtNX^:L&bH=jj囍L ~ly]c|͍KeV1Cߗ O N9t<3x<KX7R2꧌vǻp՗cGŎxW_FuLn(f/{jjC?QO>4nttvtަ&\yxC_Pttvƫx RǸKQYSR]Jٗ+/Cv~u=p\cz>SveW < T$\.#txРaE?7zzz: q}`9FׇyoGxȲ'{ 6o oEA<؟PL՘JdX,p:ޮ>n]93gd21It]]umxgxE@LAu]3Ɛix>J)vT}a0uJt yW kѶ=k0{,0XsfF^n߯=[cȲ N?giQJ?—_YCZ8 œPS[_{wnGGP8j2ᴓNŚk "Kk3/>>6@@)(ǫfJÂ棻o&>SՁ;[oƫ>]IExWU*-xwLJT-xϏcy|Bo_/l߆^{ dEaOԈӦ4;ct?b66A1c ɲg^|5uщ"N8\rEX`!,f9DcS#/j*#VY× vEe6++ ӧNò+/>X;+-Wm8[oqGԲ[}jɅزmmvΛXp7 شu3>SEQ W]믺ii& '"7|ߴ'w: 'Zv>d2})Zy۟W^^;󑟗lz F,_s"y汞JdJl'N~sQu[ڰuV̚13$H7@VfVXZR܉w:^~5n:dfx}Ǣœncy8qڻkSQh18ꈣEVf}Jp57ǍUߌvUXy RJQ]S6{fFnL-:/ĵW\_"#u_uJ'OѼ|)::U[d)~sѥ0 $y6> gipp~_dͱ]wBO>Ҽ^xV<|Xkn7fQ6oqG>;T KwM Ɋ9z$**Cn ,`G:!44k~V!(=s}\t! ؃(8pꉧu,X8!̚~CgwGttos㐃=ȲՇ~sSݯ [oUk2S7ef?~U;*v[RT;aĽesgQGVto~(S{$ ,c>u6mPT ?}℉ol JXeYFVfnh7!c & 5QdEsS$ߴ^+-lQ<rn76lڨz}%h؍`CT?EPR\oCS#5Zn߆޾^}_)=NÖUظyBH *w 5ma)hʵ熏>b5̛̀(D~^^ħ=eY=33SuqTOc X8y+vFtt{ JJ0D!*|̘6]u_͊j2+~fLS19x hA=50(#^c R-/ECSFSKTNbW[ keS`J3ܤ:7OA}Cʹ%%X,5 uRu5Q[_y-O:x݄BՅ\jzz{51Bx?Ghs5u5Syy?w>'%P|kPK1w8!F!ddd ''W!20dR.X1N81@E4:bө9-k0qb1X媏c 8ޱ;g8b ͻZPPXP Sj8ظyfsoVƐ)D)}8'NBk ÏDqQ`@ᘙ SZڰ BȰg ٬j }(h߽[^yy,{{=6hs7<ϰ^!6}}}ӌ3f[c0 Vvk"wn7^zeͮ&ӧMvBhWյ58A  KN=TGU@$KFN,!xC˯(/??(jWY5Zf:ݞF܄.L([ơynlQ܊h:劉p:QPYQ:w HK I`0's@lnJ0ى]-X2P:yYQݥ4@n3$Ip:oOyyX0o~ȍJeMED^YS%';GՂw,(*"I%A_ǣ`JݦA(H<3S pU̟(BaIv{p $ vZFPj }?ȊCZo/Ao'ؗn7ӇݟAfOI῟|յ58sqWd2iN?@PjRc?{n(2ZZQ[_7jdٲ%`fW^ &+r@ٜw}>ˀo_0uE@܉koZwn|E(뾸nrQ_w݆~ۋo sfƴijEQQqʊ:,^tx!DBM$jHFRu:44ER\p/_ܮ\,f .<Lq  Yn>Ph~0sY}tXWpf0KRs](T49$IwAoGk{o\Y3f}C5KNjWF&GAӃh ʊ*za]NmP]S5_3ρNn$HY-!Ucy(ajGߦgFǣ)r:^U:Fx$rsӰifs~Ö,HfL 9qm'ۍ/ut1 YY(.*⅋qaG`K;pɄE  ( ܷ .{8o(@ks3`1[Tŏ֏QrΌ1K=wv;M&pӭE|{EAnNfZթBަ-./DFFȲ%ӇZ[Ueͻs5L..'Q\Cx4oGgzDق B! $Il@16bwoz}TRo'"`jTkn> :m8B[o?m}7K~v3_YY\/PtK&fk!%Дd9`nj3DK?CցA)Ů]cHgz=>hMn}zMnRpՍנcd)̈́[o?\qo#,p˯T ߯^u?ٌc yX8O=n'oסMuߙgEQ̛;O3{(1eKe%:9uRl+ߎs/:7v3vTc (zc >f%J)MMOp4M!˖c |N=mzvv6/=4gzz{У[ᅢ5G#?gBvv6tÁjW{ok-r1w܄ۛ"h 5Fg L0QuBifojkq9CE~~>Jaٰq&l 2o˯ ]I'֏ҽRe/ROQ`Ur<>|&a#;ᅢG|\Ӏu5UÖDٔ2֏sUMnV^M)6ܹn|w1h c0g,\xޅ͐d XrA/bӀMxg^DNv232 "tvvh&{1>uZ""Ik[+yaa`+4fO{$ݴe3;!'00OPJQP m*p}Uk.<Mt8ggwRM-^؀/8 E'_ VpѤ"z)H.lJ)NxTywPQUeKBa=6mݬ^u$/X%DŽ1cVS]p;~!̚n|+ͨKNN;%,oK|;vcwⴓNO%hO`;5/RmgWfۏ7>dY҃)'^~^unA?5 QfGŎdåiiieEQP4_p*Us >S|hެ:l['uV×SN89!@e,[kyc?ii*vq1 0o1gŲW58( fϘ=OZGWRR,[4c ?8'Ep57\lԲZQš2w}۝(+HXi'|Z+:=:8Nt Cܯqw4[œ9gk} pe=#CfF&NrUXu :Z1 K>\tP:4.Aqk~xpPI8;N3RoYIjz)xpƩ dQR ?2Ձ@`(8#_Ŋe˃Eǭ9?,XH]c{fݗܜrM 3#3QEԲx/O3Άh z߅G>gHcR,_z(x07_/[cD 00pX?N8zjdef\focHKKB{nн^yɢzX{1p{!Z:l_߭]+ǰ!FyX8!?8sO,” 10\8 ppR.N Iap8)^oBOIENDB`photoqt-2.5/img/filetypes/apng.ico000644 001750 001750 00000025633 14134304051 017615 0ustar00luspiluspi000000 000000  +PNG  IHDR\rf+LIDATxwx#ys-m]m6I+9]bEvrDZ8ɵrٲeɲĹq؎$GX.H.{{ ̹`m$0f{Cg0sޙ9aJx;@D  , bH"! , {W4\EQ2W T9ǡNoc+{_|e)DJl6;@(2$Y" !9bH"! , bH"! , bH"k&R1u!&+9H41!0B$) I vvs@4i@#ce ygaa!I3=c 6n@nN Q_W.8te@a!agv ,AؗBHF 8v P^Űl$$ ȘNc|j?E9=986,1=39 JPET$C`a#C`ŝSٌAQxf{QQ^5p4?@h @y04:_>1H!G^N)$ 2B.)f!]¼"B3S G7|"$`z08:Y1E`aD800~  !/?$9韆$q #zٿ1x=tW @fC g~ ƧF *R(2l@, )\_;0;<0`s@ gv^|I1v cC1sy?^ B aRH@o2M(n$!XY2 U(n 8P8ЂiΪ)VRVaBh4ct1s7mD{3Ba%C 6K!?ԋ^ Xv;3 HrT Y@0~0OZApBӹg(^w tC@g&12>"*gLUc 2ݍ 8@,KDX:7Bk$Q$:Uwhf7مqZcM 8NSX6n0e<zݝP7!=aذY 8.ӜQp:_500<6)enmc͢R—nHC 2\iܜQ`!X! g%@QA1\NWH֡HkI@ >vj9{9QN A@YI9JJ w(F~^ Y~%觜@3̭%E,tW41e,”H8䣮z5'#O' P[v#?&!İ& @E^ ́L9yXrmj$Bj,@9$@yiVawv z_S2Y~9> ą AK+P_yi;JJn ,q7/@\HV_ pu!6;j*kfYHwCs2 r]y]ua-@9J˰~#VVfnc2DtN`ray cfdYPu t[݁"@a~1l6acz&HkGyɊOq!H!v*ʪPV\<^\@$(B` 3`6 Eqm?pw!#cӳSpa}&K@Kw "Y2$)p8$KP%Rsv8N8Nm`+1Ly&"4[{]Zx$=8p:\p9sTφlo:Gro $6"4 3K-B , &ZOH(BW&΅- vr@@F:,Ir! t#]D9'' Jt'@@ٖdG}ez$SUc9l 0!LVU~E+k  41 Z~ޟ "w D<{s$f,Z~g3kMl k/hD֜ &=Y  RƸķÛe9"ejM )ato2\Ȟ f& CY  ,d]Y^#Ҋ,' r$DR,V XwbFoU  cfop14:)τ%17B aoX9'@@*dz$jeM 'u 2ta5orY#1,҄щtaEoX1'5(2:zZ14Fk1zzceoDrYO +&c } p(%vX "Y&'`y`a3(J+gS3h<I2ECxX~LN!ޣ1h8Puxug&mmo;MHS]'N/mYe ]Y><[~ܜy^И;楫,hS'`Jd c|4&2SG7'qdՃ39cgLL)]uu1Y Zڏ!],b D#hnl0Y~ 9@2!7؍As5ϱZjƨ='`H6Bw.|פ`I ֜m1],Ƹ ~kѣ_-& 79'`h2qL.Y~# `>g§2U!7(n +'p‹Yf8 0QwGva:kz] nt+G8qʠՅk !=?3^ua #'`( X .L_aFY;J>f`.|uakL0H[ f&Bd0U5.F d\cR-.L_cc@Ə #|1_ d6'a0VG8㘞L]2vd5϶]]8=zp=d5e.'0zGmT}'|(@ڏc!=em]'0],1@ Ϥ B>ZɅp]G0Y~MMsif hpzOۅ5.L_sޟ6 c2aG8?S]X.L_9PHDC>-& voP0Y~C(9B>znmd e4Z%5Zمk=ICN@ףŊ!9c>&˯`n`Րp153 ۅke vX9zzd"XO@'~G؅/Z~gkU8-'QM!=P_],ق)'dcGkΩ.<%7k`ãSN@3F_ ,Vn_0Y~=r @4c|@d>ZO@J!}X."@{w &#oz) |g.q ޹xfhC>t߯?g$f1*ʫcFm|Etii=ˉ@!> 8]&'D!a R  -+!cs&'ЕpN (^ I6' 8cqͶx !  !lөҴmt@|> 4PXYScEzu= gX^cǗFFTIe7^>ug49cxc?lnwt%%F]*ԯǪUbѲRQsǾٙghEAmmXQz@00;;/=0_?:f60N_śoSB4v;J˰q&\}5醛mk,#9ZZ<`0}3EYYyꗻ`-,GWWV_jl޴Wj\sx&\[ѳg:n{ݎnه{AH C7e! 6,=pQ /=>C$Oc|b޿}W_u->gUW^ӋjJh@_/p]Xl%;w΋ή<³ ߄_Kf%tl(I{YnSXszg'`pȝe3<4~GGEEEOx@C~Œ?1>'5L{u[R߿.C-Yn6S_~K }sO=6Զ'{o8ZZzc~,,$b?ħ$t9Pf(mk~k|5),/'[N`tt$?q&Vyg)|/ĝK_z33ÃxOwh_̄YlUȲƦIpЍS_g~|c8|8"_o~s1`;š@0PL*(3/=Ѹ8c _4c}0+} 9G::R1?Gnn^Zf{m6.2X>EV azzcz }{~x4o51$%]ݝ|P(:[۷5`(--NT+'ӺMIJC#\~v]M۩V  bE". _|˸ʫ˰ qs^ b{x7F#k/ wۃw} _@Az@QO~Wp>1\ |޿UW^ʊJ8N00aYۍW^} |h;՚mKhl@//_}956>'t9N\(,,D]m.{>sO~ת]ݝȲ^xy_Z'9SJ{NO~s|O>ڕle,A$Ȳ !a'>=Ӷ}i 3=`ajz ǚc_]n˶$ M{+s=3EK/=Q~8qli?Z۴X00sW՞s>I<㨪$I1oYEA}{PVju=0ќѢ7lt8Ѱ}b"lݲ-{~?Vwəm16n0p$]rOUUۖmKcvvV7`aϯΆ]wOlWb6^iqncgît@ ӛys?Ч}y 8Nn2ưۗmj>zGjipЭj.#??o2XJ88v(&&'b[fjjj !nنki;}"/=w_PQlݲ {/|!Y1򊧨XڂV8GD\{x۶nGaAᙰ`MԮёl9ifͷ>CUlr֔/q]~oxC:"Q%flJJJPXXD ?5"ZyHv4<.eeشqs!4<Yٯa`OB`xxO#C>۷5hTB\ګú| m]j)Ȳ),(D^n^6Q1M'T]ٮ[.zraGN٧cС&yQXXYEe<| u ` CNHatt&fdeXF([ ]] sr4p>,χa_v_)޾^JH.kp[)%``8Ǣv0ǹ1y4Apa ]C׾|EQX8.|?Bnnfcߝ~ wC۩6޵GdAeU\eBcC#M ;EE6OU&g,Mٙn w4m[p^w5Fs;w{'''k/aݚnPQUGƸm7n؈>cqAss^:|a)))Ň?ɟ\NW$ \: ;ogɸDW!Q~1A(866'e "5ʍM #z5kq%{.JK^]Vd\ \y  {p[lxq~!sj;7GIV9ljUa<'k\C)3cFXX䪅p:tPTTǖaزe\XBK />hr"lT33pyjQ0Yq$I:wBXr[A3mv8N磰E(**B^^v:ddne~cjz7G1R sԬTvn΋!lۺW,B ''}~3G*sf?ɲDFz>M?f]k.?!Dj*ʵ&ڊ]_~׽Y ذ$>BV׭l-7ݺN/$darrzSOr׃Ό|CM/2RF,CV+hM1jeW0<2%UQTF1bqM$IFC#LgOvPpUbKՉ߽nʏOEʚ1Hm&0/ pi΄8~(XY ]Ӓ!< PWl9(..-[UAc~OK`_1ɩID& }l6q۝(((XCGbph0q:ػ UW_pO=+~Z;NrѮjY5_UJE8y>/f#͇13A) صk7v؍w+֪\v娬R^[o}ݙj1McP9g% -WM{Ӎ.]aL#@Iq nw"cú mѰ+W֚~A0-@ @ߒR޵yWr\粸?3C QWn.Yrsqw.Ʊ=o@Qt'[4+PM{p8WUؼblvކUoȊ^-oE#}(û?g}o9TW`ݚuANNBLMMNcZ۷5$=;ݻ^n>0CM>Fĭ7UXQ~r*˅G;22WVt׬sZrzMa g4<<=g>n6{dYW^O}ۍ6 kV۷nG@բ( 6oڌm"8 EQeV\ ݿs~,@QSM'p:}QKM#c8r&"Zg߯z.#?Ҷ.s)L򐩎V=Ӫ) а}G;&<@<$)M tB(k>Ne-P%W=pܵSC}=qۮZ֮Oysݻ.Q5pAzS]ۜr(:ܘ REQPXP<%{.pkǏ翌r~dD2^7n-oE<@UeUܶs'e}"cx(JepBK!&6u®S,((ĵ\o{ot-z&{ (26m܌/}јxB(xWnk"5+翌A7X#//(((}?"kVQ%Z( *w|~?D鳹Jw #&'c/2yEeTO܏?x7paz.,|a!7'Xn=^z9ڱP̔]Ӄ3'ቯ~g y]ʺBMM8͖;p =Z`D1A%`ddCà z(+-CuU PUYB0 W)vÏ<];(rfiq@w}LnbbiI)K˱}/ =Db4L'*BB&6L8 HvDC@Y Ad1$} 9W]s c`Uy:wsmga58ླྀ: .4@Y Ad1$ŐDC@Y Ad1$A؛IIENDB`photoqt-2.5/img/filetypes/cube.ico000644 001750 001750 00000023362 14134304104 017602 0ustar00luspiluspi000000 000000  &PNG  IHDR\rf&IDATxyUSU3$$! 1d_EDE+r"^xy_A+˪D.7 Ifd}f&egOOWy9; AEPQ8H! " (bH! "FJu\-] 0v^YaIYr t@Fh@H#)+zVU>9ba` #ZFþABQ[~B@p4{ydI*;%!0`8h3C@ ?al 0?G 8 T:L ;,x3Om+i 0H[yCP=ChQ@f DIUO$e2{:D4!$*&kB8C cYc F=d+7\ ndf FsX:Sz1wa$G Uc ("i")$kj 8 *ܛp.C+k Wp tD34a#$ǃe\Ns+Tvdt!5 ++*k#rB0 IļJo*IJ=f,#`i~!1 qrB0*9 .[bY0Gs !*$sPP_S>mC5%N l[[0#qL `~5ӍjQK9!H( XRW a )M1_F3HTprbj8bAo|rub*8S.9?`(ԔylaPXPQa :,9Ǟv  J%΁R'6foM  M|86˃5^4>kؓu7.H2̃5K森iJj݌4-iTN&)qZTy3@0fCTzX[ ;$K@%*푗0,U>T1<xHIE.6s0tQWCo2dk1L*yU-'0ʇ]GCg$[& jJ1ҋP4P8$ELt1 Nˁ >7.0qT<g,QQDA@υr ‘mY,P8 ZA$)! Z|;v|w473@Sm9|. 0ɋK\N  /Fc\3-@ XDր*@І+tt^  f  {rdM  sre  [Ck-7r3! rǤ%̚E9)H1kaH0U7Ot.|?"'d_7Ȫ=E a<T 4@U~~ѢX-S7pN >|C@,R98Lb̈́b a&okN0WZN`r$Do^c F*'@@dI-Pl9";LnUN +X~ej?b co&Ȋs$DL[~mv.00Zm  2c׶ctNm $DFX.9An(D@-" m} iceo&9'@@ ,2_N6f{:  Án{X~Ů9YQ)o=,GMxmwm ;Z~e*'F9Ux#҃щ0^llMA`QN8{q{ nDbwЖL'`` !:U՞ bGKdC1mG/S !'`o`@8nDG> iRp3s[ ,رY^J.G{ 4wt֋P;Zz;Y%v SCvLq1' p̲?LY~c'a"Ŷē,05w# M'`;H$elox0s 0t }P}k*@OoɜCȰ"0݃h*;ͪ-'dN>Gc0oC=^B̰jNF&رd cc 3fU0 Ob[KBQcYcDEgV{;HZsFL'c@U9nCi.Z E2v [\309()B>Fمxˎv"9K A# 0`ks7v 7X!'`-H# 38yAߜbu`F'3䓛f0t jO+C߼`e`:nŹdf XBj=l],y9 tgw#,[],9s !s8vaA`/'`^ 4wch{a&oUL+!Ѡ)S^^],Ō SrAs(*`/s'`>SfkՅ5]x;J߂r8'`!69c4c ˯N-1SNTO.duVU&˯0KNTPO.CK Z:M`&˯)1KN o.L_ (L|0]1kZ@Dۇ@7 ̐ՇG3e޲0vaEQc,&aOr|r `ob (4 y.L_0.@N00iҐO[uaZYU9 |&k筺0Y~GȻj'+0U]xk. S_ 3@r|rF&rT]AkY ȟ0Q|r LV6.́nZ|#! 0] Ę7,d: EYr'qՅkȋD B>Fc],#_9 @wFT,Hx *"=s9O w0c';|rAVՅgVl+@`:_'dj&˯} aN 'pDȇI"-0Y~m 0t0'`QhfڅT&oq˜`|]x˾va O81N>V@` .|d-Bf'`ܻ&c螭0Y~@ǠK|rtuva-glN {ON\ wMڅ[N(sۚ1``2x܎Y)708ۥMAiDN 3OA?@0#䓠Ari ̝|h 0tdHKa']N@L|O&!ۜ>8"CUg\ ')1B>aZ ,RU;!iN  5ÐD'abUžAU9%:<#)`$dօ=.aia L'4DC@E A1$QĐDv@?B0h,H$:a)?ӵ" !"x9P`>V]rC 0 _K}XTa ӵOMDC@E A1$QĐDހGI pPU1#8rUPS)[Undٷ|?ND@WOFF ! QFMUbْEXt h?zG O@婏u:esUN&lO$(Y)6) ($`sfPQ9G"/PMAt:-]*x@..7^ۻ?0H4宒̫ƚ+qѹg K!4c#_߽Z!8l8<axx}^Z'8VC(Wu* "NJ}>TV~a.n‰+aْE@хۿ{/&E8iJ;Zv4`wvvɍojeI,GWOzMa/pe[oFSSxpdYƖmk9_|Ϥ?g xs׀]|eϐe6=0XԀ }W^v1pJ231 Cprhe-!L<v5'%矍M:UZϰ^,\`H$gRjwTp{o vmӿ>4|7 ΅Ҿ2{ 1G*W~pǞD81#DQȯDQKm;q>;nUU㰧pwy6>?~G008.*++,q9~yu{55o{jKp]8Su u#;6ouC+W.|IU!9Be* u$I;gsxEC{WOYW_~i÷ɻ$Y_CCt-z=ɔel/*֝ :+.Cum D%pE : {f\*4CxW\Nn++sbqģQYO(ɹ70H68,jl@*ڈC]g4 ,#D@cREq::6/z<]ZP[{ %Sq cqмzTvaB4=׃[n}&RRO$u; PTU{dm\w0*AEY0;r_qepXɤtYj].\Bj\Al8m=++a:ݰq>$r!D>eep\%۸% I=8Y2s>_5p''5UƀX{f!b˶]۾O}+غm>D`r*=(R,kA丣vI9{UUo.<S5Twb/O^dXYԀeel9U-( Ϗw4c˶z(rm|w?[mYPQdx=0I,/^C1*i>/>[vs~?~[➟OH4g'q^SahM@t~9jñȲyDmaO\Tmپ =}*c}v9GZ:|:* ciʆPX,YԘ>lM̫Ƃt{oǻ(^6 .塱XfnbtzZoX9DIs(T5 /UUun8pJ :{-I"JKz6#Ӊcҫy*R'2A}M&ڷvgD0d63cy׿>c_&tu3 QbJDTW|+9;ӿC_Xtyy)|^wA;,+p Ld@Uz \1`x?d x,`08c*A[nvF[co]7\! _v)ef/w<_7e^zZ1:2olscXID֝`;NaM_ Bv*A@Vwv:VrŨux_=KOᄏ7McsOXʊm"0Yg]u4aͪx85,0{\fgWUnI|on6-%(ȌiF184=K\s񧿽y꭮TƅX~b]w ̏lo?ú6Ҭ(߷:I$!?~6>z=,]ؘ2m F`s,Pg Jng^|Uf׻{p?qU}WN1$2B0;k]7+tQs2Tl޺#ኢ?~ZN?e** I"TUE(AV/  W.NJK M:,#O`dtoއ>uj:l S1\5F9_0rKUC@QpΙW_Ǟڨecx쩍x?bqS55  ˼m.:i]K}b˯jmjGϋx<>ڻ0Մ.:e@O_?n{pJ{VpCG_|} e@ C?49֟|"󉫱v^.߻]^x.GO^/z0LXw YJO0A7^9s\[_NGͯŽwݎŋ,q? x'p-_wi *-jC݃ȭ/osMߙ++pM_ӏV0}{=Вx|cx׏W}GQ'uVGZVYg<3\{GL[YD,YԈ/~_⾻D}ByVǠըƺukCa˯ቍ׷lOYn.J}>n->}ڝ<,T7=[DPpHV|`~ݼ6P Z'B8*+P^ }? 8"ԅ բK3Lp{ܸ =x7yv?xCãD#ǭc/ 7j*%pz\pΙXv J3T. #s}׻xkhk8 ac()q 5ܳpΙaɪiv v/݀~ ,<(pv WSښ*TWVjf*y5[_E({3Uh_=]2.|㖛D3EAo}A " #LBEx=TWUbA<4,\jzȴ&" ?8~?C@4E"$p\(/+żj/ÂPYQ搴Nm\-.]3;ZMk hlj1mFdF јm;$AA (bH! "&*(j%T:-v?Ŭ Ae{R: /4@E A1$QĐDC@E A1$Q& NIENDB`photoqt-2.5/img/filetypes/xv.ico000644 001750 001750 00000017712 14134304260 017326 0ustar00luspiluspi000000 000000  PNG  IHDR\rf{IDATxil$ytulCr!3}r^JF8,پIc$HH%6A H 'AY 0qؿ8Ql]Ɏ}asmnnv-'?,S=r>u}C$$0 , aX&°0La`0a"f௽!,2 !߻o{?l`0Cb1 Rz,i0BHǮ0a" D0, aX&°0La`0a""*䚬 A ^a0LҲ4 q-x<-AH@rf4 >s0 KOD4-$؂!xf*!"zۻdv64 HYz/aM2;kq45͍b,T`Z&wA. ˲=Q[б Zp͍-~*bX*@`em;[0-Dd賉`Y2;;/ :,rzkUi`em,z.#Yd`\L63XN/<AA/R4'[X`#Plfֱ2ݨ\K3?+0 8Rz> @"B.g0`g^? XN/0uO Xl0,+kKj:? "nk~w ,%!d7 4,%(XLrW^lu`8Bfg30S;{[Q30L@{ @f;}d )=r8,FQXNAJV^@ a84 GX?0 BA/p̯j.lZxjax lDtTvLVzك=DS$εu=p]=hL6_p\9y  1yR;+ΰVn($$qŷM-Ը0S[.(GHb%bq!RJ4'qJq6o%pN9,eޅ 5}8x54Y~죜la(.\x Ɇƚ\m-xMɖP([,pN hknK7A!RBipב ɴ[w G9sgP uI\q)%ho=oZL ?>J,"('9OHjG{ZZAf{>LӀptIHm\;؊X,gX"n"o%::0/P%RJhZ]qew=C00`I=1hZ hjlAsc  D"lx{H`kg+svV(i5DqCsSq ҄atCa,XSh@<ӊAgaI)tw1oQ܂eo.AxG|[*Ŝ@q? Fa=x*ֿ\x?a`jۖߊ s  )^Z~+s/x29``< {9#XϨ\^ D|?[  ~,7hʯ}41=B! 0RW-&@Tg:UV.NEv?U>Z~+o f 0qb[ Q u4oD5'C, Lr,L[qF,'TMP- SAVr<XP[.Bז#``*Fo%u՘2 0Ržcv-rN@B}UgXrj&F'b#^J\@(ܺqHw׃y V~:*V N{]L >6L`o F%,NVuZR"5=Սhڅ[)ys"ncSO>}nN90[~+G՜Wpx䳮 آ(zvaV9LfFYsժJvh؅/|p XZYTluPV|ۅ>J˔!SB>^`&Fb# Z.lubN`_40>]"2ŅAUc˯< ;c.La9X*"m.̖_oQ!']xQ! [T (#|4|LP zN@4RJG dUT ("Յ|Eva֚'VNj~esQ.̖@͐P.LDXeoB`%9C>^..̖_7'+7jn*j@D vg5ͱX]6S=]/`-J ȿ/W\.Ef˯zXKNwDZcn4!/0McSO]-jBDj.;l(qb.<ᔇva*Ms5*|?;Gva WmكlM($"l*!W\ W}X~5ψ!4ܱ 7<j!HMcfoxeN&1,!q.̖!L r-a s;_l"n r @XC>^ H`s{cSO˶ 7x s Kvaz3l #O# ۅX~VH-{pR WfoT0-S\(|g[B-H QN58q TN^]-ċkpQa'(U]-ë\K3/7F/zr[HM`u-xω]x vdoq;'U/|;x2$`m9O ɪ^W5jg8S+n'P= qȧ  80L),0Ly*;'`+eabC> d* :.XUAa<2M,L\[':GQ=:.tp507M #OۣV3 8a" D0, aX&°0L$IBQ <J6߇ik-0i-ڿfvp޶a4 {5R4M3B0a" D0, a-Q&y}~T Hi?y|:s[kzXW~XDm|ss5ߋPZ{~==%KDO7?vkVJ KGLYrH!{mLoa<5^i$8|xjQfƭv)T }}l,DttN/t|c^~ESqg+7M,.-"mۇ79C9imݒ ~@ARho?gvn~kkk !5mۛof0AC9, p۶xCӴ021L&YPNhmil9TTʀ@0:6b6h豯Q%XMx5GSa^w lln`fvƶmgg'nߺh0ABIRhiimn簺jktc"R*_(K׀@q\꿄;%...`%Rfm>|0fϯG2,ΚjѲL455y*LBi iYhjj7C}]V*iR%@Jsp=<~dۭg&qa`xdض#VM}'KX,~HH$hkms}&H_^{kF :?#է?~ǴW*kh|4~d;]12:'6aoQ۶p}Gk` \Zixtv7'`|M*{tdЇ7,^@Y$>Dcc4}dt4gKDX]]mہr҆`9܉Y@¿ze*Q2NJ iB+(]^‡Sv,4667m޿-J 0EY, ov<{%饔Bܣ/1EYCm`b2x:GڶkmiŃ{ןQ@*\T21<:|wwQ~ \JFYKZqضA.?!B3,--ڶ{ε,j %}7nܴm;3;Mu"2|4D0dCl[WӘ_]Rbdtv2وp[+ttDT?ϥ}|pd%^!_Z\zVGfx [,g++;4`Y}ĵ:o},.-`qi>GԄmbmaD8JáPA"UO*24BqXQEu̕(fqHOp R8gS(4at!+5FB!e~ 8(:<)%ˆJ 60 R ->J4 2!4wq<^kҫ+ lɿ?N (4R`_#ălΙ2[;^Ća`x>x5^nBssg3+7k@a 4P /aDP(`tl}c'1yx@@]WBB"O'|g ?EH˝)GB#( 'VN"Bzu s%vh Au6^}UO} $ GS/B`ff [K;.^ ?8 ֿGBKY~D`>ދ*8.{tНmLNMta wՃ ˲م[6BMHKD'5x 2"T >|dntl|B,?[-@: " =|҅Bg !b'b_?pP&dN,}dtz FFھƺ{Ν*B'Ғ-812jL 8,z\s}} S3K%ɣ#T`Ngh148'ƑNKӋnD(>Bc~˲ptvv">,OwmtuvU( b@ A4]3JR׮\+)4߱AKp!~÷}kDyj)%:;:O|bLt 475A[rfl6k@#W ~o_w8Sc׾l>bkfG(b*":ZP," !L]V{ګoOPZ, /偪>g?;3% DkBgi rP&Ύx1$7j)\:" if ) fb00b<GEm}ē9-JC]H\z,@S7cI3߁qO3`(cEhgY@}J%VZ~AT%HrbyC Hxh4frfo`ē8=b$ ’J4TWn kg-¬,8kkQsB+!P"f('$@׍uv9zՙǩl\ SN@ ָt!Pr𲈀@ύ +Pu(, @K@uU8sy4Qτv2ZW:IQsKr?E %3U_PJD) LŒHLeȊ8m1'gpPSE߇J g?N򫃋qnN`˚f @sT{)IVwdHY0t;p9:3DZZ~'"Y~C jF$&sqqu;8hqbE9zغyY@oJ:ܝӑ"[~ss Ŷ  QzJd  QrJe QZCG -wrs! JGVBo~ݢ $Dc5O$Di7W8g %*GR|?ʯ~$D P-#WՇZ~Æ| zC@#X~s9xv EH\kN(%jN`V9pti0P$n Q8r$Da*'@@,2r$D'` 7_ ;a4Cs$D~̵Zv / 3Z~se6'B$D+3tZ7'@@䌙-` lN`z9B; XBt[/'@@hGm}ְUsIV3kX~ ,0 ?^X+39 l#"At c_[?&b$Z7W8gPNcc87ǧjkZ)7hIo>Hu0(|l>s0<~H5r%c;eyӏVfBNX"}H$O~v匡shiQp`͏9󊀥@hTlס4Y~s䜀yo!֞ &xYVpzBb:#&Kr?:7gMq1Oشi!Ό7bo>='`=` S#4gƧڇdJ*T'`9H%od$s+ I<6S^ Uu?aS,%^_p2/ g }Ag*z XGCw k) p pz Y~ì9kc@dLj 3Y00`:ƾ~Dyfe!O.,2wJsE'o@Qv bhig6 ϵ?o̶`NȧN5:a&oq 3INOkTIA=I Q)ϾC>@LUv[jfs=#MM),!bڅSxՊvaV:0 "!RD8}HY.Lߒb O)?8Yu oI1CN<0')M7z̐W0̆|߭0],`)ऐv>sڅ+F _fC>#e-fd#-'|& ,p;lq`&WO)sp.L!) VfC>Cfʌ]xϑ؅eYƑ*F FBe Z~t70 O )va <ʐ(dB>4S*t.L_!) Zʐ_1pȧ[uar'j'30S]xo) S_3~9}d!RT 3 BU~MK9r c0_ȧp.\lkf #Vs|J0ޠj)UY~͎9]@/3|J0Y~9]HO]مk9 Vʼ(FuaD[P1(~9;X)S . _0Y~LN9I!z&͉d<30'P|Qȧ̵ k.L_{Pʜ@q;#Yd Ox0'c|g a.,QGf¯s$mc85T\Y RG78cNF1-MN-Zse3uvpvX\ 4C0_ݯW7!\ v/s;10ItO<<֬^{PSSߠp7OFNUcxan+x7f!Xrt8UsL&O~0FϮ^<_5u5pǻq׾ǟ|RNS!^oi'2^{lR XՃxR#(n}xyϾ'J(xU+I@8z|^ϔdҷq:/}c'`B`58 엱k0x_}/)W kX3$V1$bq?/]ޜg=_<;]'((׋v`b |L_1?>S$I]r*c'g28^Ձt:h,k;Á*墾EQPSÑ.s~T*7ŦEo5g&Ep8F ut!qO=:}C}p碦 c{ vރɩc~uzn'>tMTbHCQw_+.X䕜k@:^g_OT-\tb^+ ~GvLt9-+.}jH %Fpl#/ڍxb:11꿞wd:MM hjnZӁaMۦWTp9r @qgV}?>uⴻ$Kǵ۷^7탉s~u?0`g'>gZnNm]=Yꁃ8pze4 8ZX1ڂWlB@M<td O|_gPW_HY@QQQn\4.1LLNi5]xAtZ\ŭӡ^4+Xϧ]Z<)JA֐cEȐι@8E$j/J!F΃DBQ@`f8ǒMM'e T԰NL93D"1 :N~$fs,[DSH$A}@TíIZ0>B>$ >5V^\f!JCt656kZ$ )8GgWݱKq={VX70$Zs//~ PO?<5^VcogzlYcPd?zWtܷ]u98`Lqm43gov2v⣷ߋ}3v:S 3"~~Э-sװ8}6M`!OϨ}9 C?s]܄o4OQ9=|y+9ڎv@D}^ރƆzBqI#>[4c`Ǯq( ׾\@&@*dGڏ_yǻ{s=_z άG'p=_Fn&Ni Gso6oG$A0=p7SCav u~hll}"pӻcO<v|?Ə5V\˗:P!&&?!O^7]1NgCʏZvOj C ^>+; :|;6Grx$EKk;ZZKsbk *<>":z4}=_˷^Lh J2zVw Twފ&m, eݚո ` Aɯf)e\b|4W ʗ waٛ" ! Fx^ߍn-g2u>T.m+"U~W>oyB'WkBW׾x>uG.P>_|̼ `r>xg?;d^AE 7v3um-o̎?fFSc=nv;>[6ṫ`_%]7aISl27~/ ?c]!O̻kFee.igK߄.ۊz-s\r~zfz zn'^ze/:19t2y(2zQW[ ⭗__sޤF}i/'HC\|y R;,_+.W\c(Bd.U~ֲ%X܄ZPn]Vrc.B$0z1E8AZvP]@sS#VXeKW-˲L?HB,hx}^ZV!ƀY'Ḏ87m>7$vff]Xz @6 l A1$acp88ATnfg?|ArJa. ŽA1$acHƐ! C@6 RIENDB`photoqt-2.5/img/filetypes/alb.ico000644 001750 001750 00000023312 14134304233 017420 0ustar00luspiluspi000000 000000  &PNG  IHDR\rf&{IDATxydU{FFdFFBUVdm ZJۍmL(#jt ǡ8v=.ӊreDqP*XlҀUTgFFƞw珨Hs=^D9?|w{e80%B@D  C@& L A01$abJ\tEu.p^ˏ\]8_Cv' D+@NA@5v C@& L A01$abHĐ! C@&h0?Th+$jss#!Aʐey՛-DQd ZDAHC Pddhx tr.9_߳cy!D688XּpR4 䬌x8X(T"%1Vcs9rVFz%r E@gw'|th"$x8e)p\/_h 229š)"<Ͷ -ǐ^Ik)C<U!HJ geB1M9PTm$ @cHS}mg2D6mwSBP9ф.6DerH%RAPEVJˏB[+@ FX~=jzJZF1wl5$``Ȧcc޾0'3(P"29] eY NF,9< |l#_KOKkbz| s#sX F8ՈElU Ȭao! 4 c f 4 P0lAmY1;<)-geL6g (PcA"1|&qcCd14M6 @$K #avxR|9sY۵ 88,6K~S9o1&nj0ư4X(VR 9yC _]J8`Z`Ytsc6VEIe072Wqa~|pBW#6-aF]Qe;5na:*:5,fƹ5HӥjɋcX`al  #DwxaakNgup{oVd3gg.B@pw5=,J":;5jYgIC,fpw; @6W#k- ,j U7դNmbzΑN9e9 @n.=e/.c?0MC4m[/#m z}@m[L`R٨nkYkm  & FBmoͿ( Զ'4[s;'@9?@@4&Z~r! J-5r  FK,rMUߚ*$DShoKG9$DPo+hHQoiHQo0~$[O{WЀOՐo9'@@V,`֜ |HU``XXЌ̘  `][hwSf  Yo-'@@4-!sHЃV̔  F/z0KNY~k,9.fHУV̐  jFϖߚ8eܜ Q:փ1nN #X~k Uco=5'@@T,bԜ f`8o=9,ξpِaˆߚ)0pcSAG<'#[~k C0yT<ciFփ"''`x`!b$aB&NN@c(,b# -1i2l:t3gfLMco!'`hs2&^@|iC(y30V ZF*#tńZYO`I9C c ˘>3]ѴC&؉1=SʼnESY~A NcHƒ?9\6W,?c pc!1:_|y029J9fփs[[kɊ1y̍͵ ֎s3A6v*ԩ>00ƞF= es{etva6Nп[{e dZ[g61WN@|'Z :%/Y~UAo9} 0-=`&˯:-'[XiM3],꣗.1T2U4 Yī Wu.@ɘ|ulGMcFڅVsO@PMGmV'c&osCN@WPKȧ)_~؅\Ѝ|^>Ӭv̏I֠n`5䣅ULԵ],A9}@!ѹ],E9 j!&KՅb4д|^U!ӌ 륺0Y~ۃVЮ $aCp2_dmfY!3Q'o{bN@O3м],AK9 @B>hw&ˣ Whm?M @C>h2\uaj -')huȧ OҌ],C+9M @;B>̀19MT&˯6JN@OSڨ.L_@@+!Xd6Z ]4QvW&˯Y Dڳ:v>O`CtՅ 93 McN1;OӾdՅڙh^`hYuavZ/,㯌^h],]9 !H0bwVTf`XX ˯NiuN̏ϛlfuwal_v'2XB m&˯)ԗh~-|uMԳ 8䲹Z"F4E=0Y~C+s-|TG%0Y~GrMC|TF 0Y~GrMՐI|µ׸b? j'jO30Y~ L!'0ܼ@s@k; 0!4Ӽ՝|BvafTS|Tf.ry0Y~C3s C>jS0 ל4#'9 مk>PG(U&˯yYO@Ŝ@@!&0Y~͍ 4$ik‰HY~͌9 4cH%Rcs2)<kCVFiOrvQ3'PPȧ=0 ,ɇ J9;Pc?B>@Pgnx T' !Y35 T%TcQȇ 4H#9( NOן齟 4I9N%,!fQ#pܐRU0~rrN3c9;Džcy´~{p 4 A01$abHĐp8n'A5J\){LEG>=rr߇ *D >WD}}p?r9 $*W9dY0AXU}$C@& L A01 hvcau^EQ 2EY(`p9ի0VcJiE-AHcr9,/b cb|f;%l6tz:ep b붭p8` G7b:n2-c 6 d:.}uϨ,HeV$Xmֶ\7@P("g/%{9LMN!OT,c .9rߋnPW'Τ3翄 zpptttC{Vu7~ȯ!cY/|lpc7*+2s=M= dYoxz#s$Ic|t18]NصW^s%0[qI<\W X|u-"aUՊ-2l62 "1?;P(TX@. >x"R! =[s-j@A0:<~XUNj˯b(< LX_WO'cp˗NV/$If!(H8 T H=j  _tc- n&']]FM%B(l}w`;rfO:^8Պ#:;;kP vqݑ𖷿?xw/4uHZx%iūGooY/@:Fx9ܔNŐdJ\$ Xc T `c]^صvbo4.K9fC2W]3\qeEekTlX,D`$b>~txqn/"DQljF`_9D#Sr9}lUSLT\bw{U^v)z=.T^kڏ}O>$ Z\u*l`;6+jIgH$T11k P}}E !H1x,0rvP}}JlHׇucfH6 vۮx>J٧z7w;q"0"eso~ɏ~Ҹqns_.:tQ9G/Zҕp+)1,0;=[U3151 #߆l6htXDz`HbqÍ7cʚU1=9t?z!޳W}{PpbtxTsYֲu>_.@)H҈,G 4Bʅcq9uKv|~&FdZ@/mFeބQRcUz2 Nt_x?n-8Q$I]W4 Pd2jyV[psW_yuuRMro؇!Y(BCx :8\9@GG{K (rNz:?pnb2LǃNs8]N}\++}(>_*C˚]5j9t:3ÛaQc.WE4O J}]]resӁn ޷+ު=׾5|Oa|tp"`Z[ p㓛q8UX7+ lU@lvXw\( /r|hSCW  e!0X\Xtˋrn{VVVpSKH2'ycȲ.|}×o|UK>.8ߣc++,-y8tɡ^ymD;t=6$5P(?Џxx}z#?-)w\lYx5H6;VVOEy7`gϜ-pزu v܁WO篟zX]]em1B`[ @ݾn\wƙg_~8ɪj lsq͵`ƃl" 6XrX4D<\6ׇ3w'؋~>59ٹ I f8s2, <oϿ>9=5Cسo=oy8pjV23qzz 7$ cq$ɢ`݆]{va=Z}-/-cS6 t:P Y <^:|;nYFcX\XT}Z(A:n]]%ɤ3Cn_7 ,]f8ur\\.WSʐ)t2.q3;K>(^uݯpazҙxfjˡM?߲u ?EA/mEא''{}W 02N h-$-@s`>f\n F / /_dangN7whՊ-IW9"/ f#ZHZ"+KYZ\R}vCye3'f;vٵs޻mH'^o Tů}}xW$ )INO܎z;dEQGF ߳Y8G;vtv ( Tc{pÅ;/ġ7Cpt@$Ȳx, <8b|tsC)8W;Ρp:onX><n?W% m4H HK'p˧\.\uDIgj:f{vخjz $IP 7^t0$L$ [|+.rCݨs>\rb%G \~v{051UUzHAs~Vxƚ朣deߍ{u9?_IT:Y!(BzJ<^>?>KRC s^w^ewtbhPUl c >w~N!oBTu]%' }jq6AsEOaEK'ުV,V v-.}w~וehDQ,c.tz:ǍNO!ŵQH7Ї!/ߋ~=(?uefzK߀#5.oCjlZ/Ď;*UQl܂#7APpȐzp;\BOKN|g0x,t:]͊zp pC-aϾ=pw@Q;?E W\}E pmsp\Spv82Aq⓷%;W8 vFE (C{ۯ|;2 (KX_rhpT ,CHlt뇯׳oE$ّ?.]( :oUƐd0kdáy?1c8x$Ɗ 4VV-4 t Fat !';(A(CSm-JnBWH2d`|CC+!6FaeQ^\L"@2``|탃y@rpx4&  U-HL;|<0W40x<Ŧ r sx4OholM!l <0C FaSt|#$ePMhˍ2L6:0 !)ô*@ !07$C0ńI3961h"Q`8bX" !@8YUhTsc<DVCK$L=n0C8h%Whz!8,e,#aSs2#&˅n ,[jH-*) ~|ĕ'⊌㽽kr1DR#Ѱ1ޱ1Ʀ)C0r`ܒdKlV58.hsns}k3. E@$%nn09<`c&&p﷕kypK.\ָ86s @$GKZ/c  $ Xhf&q$(+.;=t68$8keP!Xro>?U9" eŖr.c H~#0G9GYq1EE~ ^/]BD85G(x8ۃE9p"L=EԚZ9 c F9!%&pU%%*l7.L9!bIBcEŜKQHXYiʶeʴw8a yjP]RblcEEr сionTN`r!H$XRSIKJMх,WdfHhv[Mp|R+,B9̰]d0nB8ۍsM3-lH̺ Ȁr,H(-*ʆgb'sH @ԗceCJ.) ldd)',.)FԗA`̐N9K:c4X~3PN@ $Yz_Ѐr2C` 5e8Kjjl)9Q́TX V_VJ#0A9cp"ʽ^ԕX G#aa$ ɜ@/v?"9‘/(/Gmi)±"F2^nQFǃr^ snLZ~M2'B _I=! da ⲌNCd~qK$a3p*aFcGHhǢ*{<@3[K` EbI{ÎOy'ܒ3-@65-#o h`ROYqy1>-"0A Ⲍ:Z~j΂0,B9! Ho6~C@̛C ̄0|X~m/oPN`r('0y ž̴{rNOН*yf̜SG$U7?pG'@@J-ٴ bo8y?B7bH]07S  dlpbNZ~9H179cr$DN$ 9*Zfr$DLY~G,Hʅn8%'@@d,a Vfr$DX)Ms$DFX qEqH̰7S  4co65'@@hsVX~3Ů9 Enutn9M$[3:b0_Xʯ1'P8DZnp糕U-G60hm7c֪k<ɜ@-rqʓ61 q H Zcb8!c cx'z{iRp`;l-Hg'CY^ ^t YG4 'Y~3.9[ @s?|C޼xD`Nf0;6=i1DqpNWh'`;`!! Y4/L\:s:w '[~39[ Cr갯DF?zFGqÇvg4uc8߹O>UV FR3}}9ݸG3ja* H(Ý>(jn1 @Bqa3W7S9r χp,Ke%)3:Y~sÊ9 9t?%0]"tJܰZN00M=NT '.h&oX-'`YtA5e,in9WoI~UN W c x|Z@3<9Ur !Iم.L_cBNRHCk#0Y~ 9@2(cT;N-o&o~H& XBC>C>FۅR9V,!|4p(d9HY~;̜01]h|sx7)˯'섙sT!# S],a:'`F ̐OHX0Y~ G2'kiX0Y~ K2'2UN 1]ؼՅkrOW!#qݤՅk r J at">d5c4GNT$ .L_a!#Ld&˯91KNP萏pL`VU-d5#fON>V _HV.]1`]#d5#fON>V`.QT:'PPH|zL11 q+vakz ($]iChݓLfVP/.8I_KPȜ@A`:iʐ! Do:P],֣P9 @ʒj(.l],֤P9 9u[#7y ?'WbGoW&˯@Foyd' pgOLU]sVZT}|"S!K|&~)o;Y~-O\q3'KGoN.]8Ukľ*`ǐޜmNU+rOЉ| |tpf}d/ɜМ!`̴ gY~K2'04'`m'.ܮ.L_ctN@wk'.ܙv,Ȝ vPGoRvJ_`dN@7Oa!Iمa&˯1&'(CC>F.<],cfN@tm!#0Y~KjhPǜ@0r|8p]XUUT⊾9`z' IO$ݙi 1 k:sR.l|@.^{ƐP[ 4VTvdi@!\ b?9J(SHl 2!BWN # tRȇ tN`,뾘Pȇ E2'ГuN@g!6'I0Qȇ LH9M$(C&%@ZPJ!09@>Na4VVB L CLKQ$Y7p EL?arc8ۇu?~MN%aH! C@ LZで B0hȼǥ]܂[(2m=MVA$gh  puPI2o*@ѩ9AƓC"4 H  A8p0$`r QÐg? ^3c 1ps\KAWU[ @<iהn[ tͼq]$AM:yu*D<^g۝:Сpݽhmo>z0<2p$UUvPY^XԄ+V`(/+ZZV=>?}Do(EU }r=^E8r}[FU| XhV45+дx1*ɳ!"=p#lDr=ԦMNDA@Bq)ϛo #IBue%V\˷l՗_ kFl+Cgɡ@0L{e(ɛt \q%r4Aj/cz+6]^?Rq1^CO__F!2004g]s V[:kD< $qO^]72:_}"@6?8ǟz 7}+PUQ.ܳG?P8_}==W[Lk{;|Aҗ! w? .;` fe<7mms΅ ]Ow~$w1yQvk7?^%XlrF$xgW\\ GL(@vaa /=6[0^^ƎH$F nۆ1k#?8c'O? Ǜ5-Gro/ߢ띿ssByYļC]UUH+1xi'$I+Ap #2&lX˗-CMU$IB(FO_Nࣖ fV¶r{];wjE̎R?\Q|n7n۾.L{|,G߯9i:O< _t kNr Ynbt.c ~o>mNx3{UU!nzp{yD{kAey-1 5$)  ȑ*aiX qggYÄ^׋˖HLċ |sx"q " {9xLr464 H՟Ӌs.ŷ|W]vm:?\tlUEHTU3۶ᮝ;qڵ ZEQ/+-TlHٜ p\X؈u睇-_+/׬Am' YQ01]B9GD$L%(**²ŋ5G͆5[MEۍRr%'+hR$4fC$gwPƕUy瞋g,k 'hnmEsk+jjp͸mv\q%(r-=L=ι摍$I>9 026U[ƒaM%# 󯾊vᾇBogu婜v`I{O$4?̓~w/|]]={x"[2hEkB`"*yms ىG݃Peex ei@$hHLĒEmִ59D8܌{y?ٗ_Ɩ/Ʈ[n D׫P8x"cb(zbC (+d,CQ].lڰgziEeYO=> **4; "<11q,XEQP]q܌7(th ' <2W*56k9r)Eo7hn@,Z@ӱ{{~sᮝ;>2p^i[|rFx=LD"{ Zs%˕v#^yv 7p1<⋶k ɹE 4A-=9sAEy|B1ir+B0EU5MohR{#cxts,\h9}7q(֤.˲(!Zm?T^?m>%@` =SUUE_cŦz0Ѩ`sMt̎_]|>Hٗ^JDsg|?{Y(GQ|ܬ*S͢3קFfcMKxh"6ּC |?F;(8ֆCǎi:T9ǟ?@v[bŲeEi:>?z{M5z+4 Gݻ{sQd!Hg<c ˖,1PRE|W^t|Yi)j-/P|Fs1w{w0:6F#IlPU~ ClFcͪU(**n1QŰw>ݷOw`ySSA;P48c ==x]†Ե \ (I?(l*2\v->8rDl))dEAo?z5.v۶rv[Z o܈7-zK"fQsښܿ{78VÊ%GG6]p.߲ŒvKKJ+_AAB( .߲we꼅@#EE ;n]}5T:ǯ؁_R^Wh^L*)֕K ^kw"_ݱ e9 %%x 2~_EYz!K Gҏ_bxt_,qz</o).MUUQUYo? ?x 'yRUQ]܂n6VYRTUExKۚ7̄R/ݻQ_Wgxz |k}njgLoPk{µkA].nތڅO_z)DQl,*@ضu+.ݼ'Oo|qq9}vEy9.ԧp7[ʩ((**BiI jjlR\~=6oڄ ׭CdɬlPebJ~Qpg>O^ty%{y;y1; IYi)>q#tMP]Uez 9+"6Y k`חx{N:^`x|r񠦪 ˛y&|Kq:BQ6T9&= !Yc (r娮B}m-jQYQ1(uVU\/ `庉(hnoz}?9_w7ƃAbF;1xQ]YMMO|޺.PU5KF\w ssyv2N ?8~ a4@4Crr5UUhCcCjQ16e!ֻ]9}&;9W磽٠u?DA( {L5 2y_xQ]Uz,^ QVZ=a4${?!{+tCs>̢(ذfMp>v 8~CߙVksJ*+QSU ?bZa'[l%g9b&Ӑ  A8p0$`H]L\@6Ii;޽[&;#"yǥua_h  A8p0$`H! $xIENDB`photoqt-2.5/img/filetypes/viff.ico000644 001750 001750 00000017712 14134304260 017623 0ustar00luspiluspi000000 000000  PNG  IHDR\rf{IDATxil$ytulCr!3}r^JF8,پIc$HH%6A H 'AY 0qؿ8Ql]Ɏ}asmnnv-'?,S=r>u}C$$0 , aX&°0La`0a"f௽!,2 !߻o{?l`0Cb1 Rz,i0BHǮ0a" D0, aX&°0La`0a""*䚬 A ^a0LҲ4 q-x<-AH@rf4 >s0 KOD4-$؂!xf*!"zۻdv64 HYz/aM2;kq45͍b,T`Z&wA. ˲=Q[б Zp͍-~*bX*@`em;[0-Dd賉`Y2;;/ :,rzkUi`em,z.#Yd`\L63XN/<AA/R4'[X`#Plfֱ2ݨ\K3?+0 8Rz> @"B.g0`g^? XN/0uO Xl0,+kKj:? "nk~w ,%!d7 4,%(XLrW^lu`8Bfg30S;{[Q30L@{ @f;}d )=r8,FQXNAJV^@ a84 GX?0 BA/p̯j.lZxjax lDtTvLVzك=DS$εu=p]=hL6_p\9y  1yR;+ΰVn($$qŷM-Ը0S[.(GHb%bq!RJ4'qJq6o%pN9,eޅ 5}8x54Y~죜la(.\x Ɇƚ\m-xMɖP([,pN hknK7A!RBipב ɴ[w G9sgP uI\q)%ho=oZL ?>J,"('9OHjG{ZZAf{>LӀptIHm\;؊X,gX"n"o%::0/P%RJhZ]qew=C00`I=1hZ hjlAsc  D"lx{H`kg+svV(i5DqCsSq ҄atCa,XSh@<ӊAgaI)tw1oQ܂eo.AxG|[*Ŝ@q? Fa=x*ֿ\x?a`jۖߊ s  )^Z~+s/x29``< {9#XϨ\^ D|?[  ~,7hʯ}41=B! 0RW-&@Tg:UV.NEv?U>Z~+o f 0qb[ Q u4oD5'C, Lr,L[qF,'TMP- SAVr<XP[.Bז#``*Fo%u՘2 0Ržcv-rN@B}UgXrj&F'b#^J\@(ܺqHw׃y V~:*V N{]L >6L`o F%,NVuZR"5=Սhڅ[)ys"ncSO>}nN90[~+G՜Wpx䳮 آ(zvaV9LfFYsժJvh؅/|p XZYTluPV|ۅ>J˔!SB>^`&Fb# Z.lubN`_40>]"2ŅAUc˯< ;c.La9X*"m.̖_oQ!']xQ! [T (#|4|LP zN@4RJG dUT ("Յ|Eva֚'VNj~esQ.̖@͐P.LDXeoB`%9C>^..̖_7'+7jn*j@D vg5ͱX]6S=]/`-J ȿ/W\.Ef˯zXKNwDZcn4!/0McSO]-jBDj.;l(qb.<ᔇva*Ms5*|?;Gva WmكlM($"l*!W\ W}X~5ψ!4ܱ 7<j!HMcfoxeN&1,!q.̖!L r-a s;_l"n r @XC>^ H`s{cSO˶ 7x s Kvaz3l #O# ۅX~VH-{pR WfoT0-S\(|g[B-H QN58q TN^]-ċkpQa'(U]-ë\K3/7F/zr[HM`u-xω]x vdoq;'U/|;x2$`m9O ɪ^W5jg8S+n'P= qȧ  80L),0Ly*;'`+eabC> d* :.XUAa<2M,L\[':GQ=:.tp507M #OۣV3 8a" D0, aX&°0L$IBQ <J6߇ik-0i-ڿfvp޶a4 {5R4M3B0a" D0, a-Q&y}~T Hi?y|:s[kzXW~XDm|ss5ߋPZ{~==%KDO7?vkVJ KGLYrH!{mLoa<5^i$8|xjQfƭv)T }}l,DttN/t|c^~ESqg+7M,.-"mۇ79C9imݒ ~@ARho?gvn~kkk !5mۛof0AC9, p۶xCӴ021L&YPNhmil9TTʀ@0:6b6h豯Q%XMx5GSa^w lln`fvƶmgg'nߺh0ABIRhiimn簺jktc"R*_(K׀@q\꿄;%...`%Rfm>|0fϯG2,ΚjѲL455y*LBi iYhjj7C}]V*iR%@Jsp=<~dۭg&qa`xdض#VM}'KX,~HH$hkms}&H_^{kF :?#է?~ǴW*kh|4~d;]12:'6aoQ۶p}Gk` \Zixtv7'`|M*{tdЇ7,^@Y$>Dcc4}dt4gKDX]]mہr҆`9܉Y@¿ze*Q2NJ iB+(]^‡Sv,4667m޿-J 0EY, ov<{%饔Bܣ/1EYCm`b2x:GڶkmiŃ{ןQ@*\T21<:|wwQ~ \JFYKZqضA.?!B3,--ڶ{ε,j %}7nܴm;3;Mu"2|4D0dCl[WӘ_]Rbdtv2وp[+ttDT?ϥ}|pd%^!_Z\zVGfx [,g++;4`Y}ĵ:o},.-`qi>GԄmbmaD8JáPA"UO*24BqXQEu̕(fqHOp R8gS(4at!+5FB!e~ 8(:<)%ˆJ 60 R ->J4 2!4wq<^kҫ+ lɿ?N (4R`_#ălΙ2[;^Ća`x>x5^nBssg3+7k@a 4P /aDP(`tl}c'1yx@@]WBB"O'|g ?EH˝)GB#( 'VN"Bzu s%vh Au6^}UO} $ GS/B`ff [K;.^ ?8 ֿGBKY~D`>ދ*8.{tНmLNMta wՃ ˲م[6BMHKD'5x 2"T >|dntl|B,?[-@: " =|҅Bg !b'b_?pP&dN,}dtz FFھƺ{Ν*B'Ғ-812jL 8,z\s}} S3K%ɣ#T`Ngh148'ƑNKӋnD(>Bc~˲ptvv">,OwmtuvU( b@ A4]3JR׮\+)4߱AKp!~÷}kDyj)%:;:O|bLt 475A[rfl6k@#W ~o_w8Sc׾l>bkfG(b*":ZP," !L]V{ګoOPZ, /偪>g?;3% DkBgi rP&ΎxUƐd0kdáy?1c8x$Ɗ 4VV-4 t Fat !';(A(CSm-JnBWH2d`|CC+!6FaeQ^\L"@2``|탃y@rpx4&  U-HL;|<0W40x<Ŧ r sx4OholM!l <0C FaSt|#$ePMhˍ2L6:0 !)ô*@ !07$C0ńI3961h"Q`8bX" !@8YUhTsc<DVCK$L=n0C8h%Whz!8,e,#aSs2#&˅n ,[jH-*) ~|ĕ'⊌㽽kr1DR#Ѱ1ޱ1Ʀ)C0r`ܒdKlV58.hsns}k3. E@$%nn09<`c&&p﷕kypK.\ָ86s @$GKZ/c  $ Xhf&q$(+.;=t68$8keP!Xro>?U9" eŖr.c H~#0G9GYq1EE~ ^/]BD85G(x8ۃE9p"L=EԚZ9 c F9!%&pU%%*l7.L9!bIBcEŜKQHXYiʶeʴw8a yjP]RblcEEr сionTN`r!H$XRSIKJMх,WdfHhv[Mp|R+,B9̰]d0nB8ۍsM3-lH̺ Ȁr,H(-*ʆgb'sH @ԗceCJ.) ldd)',.)FԗA`̐N9K:c4X~3PN@ $Yz_Ѐr2C` 5e8Kjjl)9Q́TX V_VJ#0A9cp"ʽ^ԕX G#aa$ ɜ@/v?"9‘/(/Gmi)±"F2^nQFǃr^ snLZ~M2'B _I=! da ⲌNCd~qK$a3p*aFcGHhǢ*{<@3[K` EbI{ÎOy'ܒ3-@65-#o h`ROYqy1>-"0A Ⲍ:Z~j΂0,B9! Ho6~C@̛C ̄0|X~m/oPN`r('0y ž̴{rNOН*yf̜SG$U7?pG'@@J-ٴ bo8y?B7bH]07S  dlpbNZ~9H179cr$DN$ 9*Zfr$DLY~G,Hʅn8%'@@d,a Vfr$DX)Ms$DFX qEqH̰7S  4co65'@@hsVX~3Ů9 Enutn9M$[3:b0_Xʯ1'P8DZnp糕U-G60hm7c֪k<ɜ@-rqʓ61 q H Zcb8!c cx'z{iRp`;l-Hg'CY^ ^t YG4 'Y~3.9[ @s?|C޼xD`Nf0;6=i1DqpNWh'`;`!! Y4/L\:s:w '[~39[ Cr갯DF?zFGqÇvg4uc8߹O>UV FR3}}9ݸG3ja* H(Ý>(jn1 @Bqa3W7S9r χp,Ke%)3:Y~sÊ9 9t?%0]"tJܰZN00M=NT '.h&oX-'`YtA5e,in9WoI~UN W c x|Z@3<9Ur !Iم.L_cBNRHCk#0Y~ 9@2(cT;N-o&o~H& XBC>C>FۅR9V,!|4p(d9HY~;̜01]h|sx7)˯'섙sT!# S],a:'`F ̐OHX0Y~ G2'kiX0Y~ K2'2UN 1]ؼՅkrOW!#qݤՅk r J at">d5c4GNT$ .L_a!#Ld&˯91KNP萏pL`VU-d5#fON>V _HV.]1`]#d5#fON>V`.QT:'PPH|zL11 q+vakz ($]iChݓLfVP/.8I_KPȜ@A`:iʐ! Do:P],֣P9 @ʒj(.l],֤P9 9u[#7y ?'WbGoW&˯@Foyd' pgOLU]sVZT}|"S!K|&~)o;Y~-O\q3'KGoN.]8Ukľ*`ǐޜmNU+rOЉ| |tpf}d/ɜМ!`̴ gY~K2'04'`m'.ܮ.L_ctN@wk'.ܙv,Ȝ vPGoRvJ_`dN@7Oa!Iمa&˯1&'(CC>F.<],cfN@tm!#0Y~KjhPǜ@0r|8p]XUUT⊾9`z' IO$ݙi 1 k:sR.l|@.^{ƐP[ 4VTvdi@!\ b?9J(SHl 2!BWN # tRȇ tN`,뾘Pȇ E2'ГuN@g!6'I0Qȇ LH9M$(C&%@ZPJ!09@>Na4VVB L CLKQ$Y7p EL?arc8ۇu?~MN%aH! C@ LZで B0hȼǥ]܂[(2m=MVA$gh  puPI2o*@ѩ9AƓC"4 H  A8p0$`r QÐg? ^3c 1ps\KAWU[ @<iהn[ tͼq]$AM:yu*D<^g۝:Сpݽhmo>z0<2p$UUvPY^XԄ+V`(/+ZZV=>?}Do(EU }r=^E8r}[FU| XhV45+дx1*ɳ!"=p#lDr=ԦMNDA@Bq)ϛo #IBue%V\˷l՗_ kFl+Cgɡ@0L{e(ɛt \q%r4Aj/cz+6]^?Rq1^CO__F!2004g]s V[:kD< $qO^]72:_}"@6?8ǟz 7}+PUQ.ܳG?P8_}==W[Lk{;|Aҗ! w? .;` fe<7mms΅ ]Ow~$w1yQvk7?^%XlrF$xgW\\ GL(@vaa /=6[0^^ƎH$F nۆ1k#?8c'O? Ǜ5-Gro/ߢ띿ssByYļC]UUH+1xi'$I+Ap #2&lX˗-CMU$IB(FO_Nࣖ fV¶r{];wjE̎R?\Q|n7n۾.L{|,G߯9i:O< _t kNr Ynbt.c ~o>mNx3{UU!nzp{yD{kAey-1 5$)  ȑ*aiX qggYÄ^׋˖HLċ |sx"q " {9xLr464 H՟Ӌs.ŷ|W]vm:?\tlUEHTU3۶ᮝ;qڵ ZEQ/+-TlHٜ p\X؈u睇-_+/׬Am' YQ01]B9GD$L%(**²ŋ5G͆5[MEۍRr%'+hR$4fC$gwPƕUy瞋g,k 'hnmEsk+jjp͸mv\q%(r-=L=ι摍$I>9 026U[ƒaM%# 󯾊vᾇBogu婜v`I{O$4?̓~w/|]]={x"[2hEkB`"*yms ىG݃Peex ei@$hHLĒEmִ59D8܌{y?ٗ_Ɩ/Ʈ[n D׫P8x"cb(zbC (+d,CQ].lڰgziEeYO=> **4; "<11q,XEQP]q܌7(th ' <2W*56k9r)Eo7hn@,Z@ӱ{{~sᮝ;>2p^i[|rFx=LD"{ Zs%˕v#^yv 7p1<⋶k ɹE 4A-=9sAEy|B1ir+B0EU5MohR{#cxts,\h9}7q(֤.˲(!Zm?T^?m>%@` =SUUE_cŦz0Ѩ`sMt̎_]|>Hٗ^JDsg|?{Y(GQ|ܬ*S͢3קFfcMKxh"6ּC |?F;(8ֆCǎi:T9ǟ?@v[bŲeEi:>?z{M5z+4 Gݻ{sQd!Hg<c ˖,1PRE|W^t|Yi)j-/P|Fs1w{w0:6F#IlPU~ ClFcͪU(**n1QŰw>ݷOw`ySSA;P48c ==x]†Ե \ (I?(l*2\v->8rDl))dEAo?z5.v۶rv[Z o܈7-zK"fQsښܿ{78VÊ%GG6]p.߲ŒvKKJ+_AAB( .߲we꼅@#EE ;n]}5T:ǯ؁_R^Wh^L*)֕K ^kw"_ݱ e9 %%x 2~_EYz!K Gҏ_bxt_,qz</o).MUUQUYo? ?x 'yRUQ]܂n6VYRTUExKۚ7̄R/ݻQ_Wgxz |k}njgLoPk{µkA].nތڅO_z)DQl,*@ضu+.ݼ'Oo|qq9}vEy9.ԧp7[ʩ((**BiI jjlR\~=6oڄ ׭CdɬlPebJ~Qpg>O^ty%{y;y1; IYi)>q#tMP]Uez 9+"6Y k`חx{N:^`x|r񠦪 ˛y&|Kq:BQ6T9&= !Yc (r娮B}m-jQYQ1(uVU\/ `庉(hnoz}?9_w7ƃAbF;1xQ]YMMO|޺.PU5KF\w ssyv2N ?8~ a4@4Crr5UUhCcCjQ16e!ֻ]9}&;9W磽٠u?DA( {L5 2y_xQ]Uz,^ QVZ=a4${?!{+tCs>̢(ذfMp>v 8~CߙVksJ*+QSU ?bZa'[l%g9b&Ӑ  A8p0$`H]L\@6Ii;޽[&;#"yǥua_h  A8p0$`H! $xIENDB`photoqt-2.5/img/filetypes/3gp.ico000644 001750 001750 00000023151 14134304166 017361 0ustar00luspiluspi000000 000000  S&PNG  IHDR\rf&IDATxwWV9hF9ɒe!YؤeͲD`c0^a ^e9=, f ۋY2,6VҌhrӡ}hFsMuMUu{]@ Ws}Ap1$bHŐ! C@.Ɠjmk .pMxK)GuH>' Q)/ZWEO 4Pu<Ap1$bHŐ! C@. \ Ap1)"aŚDN!0@BHē*b$IɤZkW8ףQzp0>!$D!0 @(H(p X U*$ٲ9cP8A~҂J Pjb@B@d€xBh#cEbH`lއ!%*W?ϣ0(-̃B c`H BM}L6T;<`eEXVU@Op0$Ow#aBj ___ƴwHqUcYU1^!Ȁ`M]C kWHhX45u(B&=CchD,b`4X"kVq( zB9X2{ОB8 o+ 4!hPENc@8AD\_!8O9|"@U{Od>ӞF:>w8ш%t:Fh>X$ K$90jUbq<6>,@Hx]`L#@d <$* -&cd"2`.&fۭO?Px2GBP(km\' ++aUH Q!$FX,$WÀxx&*X4 2? ,IlL{]W\80NB0DrV / p@ \h~4u |B"Tm5BN<8a0`ù>Ǣ<\@p5S{ M,鞛hhCt<BζJ a]CZz'ʦs5  jVN0;TUZOΜ'U܃dYyw͢pQ8 f AtdhEB0~&7Q8O$qǨ8J:,A}eɔ J} VYfo`Eb8k$ HAMY*K-,Y{)'>$)PUe(ZB*K P_YC1_f('$@A5uyvrĚr8S.S9 wQ,ںrx(ᚥxs}9A78L9=AmyWQ:(aJ-B9Imy!/ʒ|l\QB{ؓu7SN@$PQͫjP[^Θ)B fFZYS ˫P97c@0Mob2'pr i{~Y*1D(2!H)Q8ʊ򱬪NN8ߦY~ͬt%'PeK "Eywd H Uh7Kmj %cy䡶a$ݳap4U ]Rh9Bt_ ]2񨾤e1<h8x U*䬉.< ?EiAy(xDwZUU~bؼ($pJ D.(D@-9CSss$D N oL  À, ęHHtqjNuT1it7K{xs#-28㠜k@=# tᜡA9w.v BPC;"Κ1 Ho&$U'|` CcxbF1 pɤ3Lc;xӏ^&pBNp4 f]9ch\7X~3czN"hH&hx4u_MEtohhhCsм7/;3Lbq78!'L` 8u'e1H, mmEΤ7o&='<` cQi@,՞9cHC;bd 8o6zx" Er7 *@[Oǖ9G 67a3}hlsq*@ Dmp0!m[T%pbJf]s08ƱPM0 #7.zv]OXG;05fC0s]XUUmC5k*v G|:C>Cc[f3d V FB>cќVR.L`-`Fwp=d*V X_B>9gmuaf+-3B>ֺpMd 3X/'`] 41p=dIae`*3ĸ?{pՅS5䐏 U8؁^ ;k K![.Yڅ',Cd)Wrbk @C>FPȂՅY~mvIrl|̀—,T],*9K @.B>fCck[-`&˯%JNs1)ro&˯ur9 ^&B>GXX.zkY@D["G_`zW3i~\nª\K/Y~- r*V g 9 OY~[\r' ]8Յk&s9 F&B>-1U&˯H 39 d_pDŽZuaڏ\'u0k%;0Y]Յʯ\O {9 B>fIՅ*%9 c_ 8.l]Xd3 dG&B>10m} ĘjNڝl"jRs 00Y~C6sYs}hv@h qd+'`x%;`Duaۇ"c*'`z |1EU^.z T'伐dj&˯s 11'`И4-Ҳ pjbNxpQhۅT&˯;03'`X|%;0i~\ 0Y~] 'B>V^p0sV&˯ q{5L1.L_1h31@!S.<.L_9CS9 |LEJ.6a&˯1:'8Lڅ4c8AH,.蜀g1NR'+Lڅ_: IRls/+]UxQO 1􍌡g˥&֠4"'P''pџ`\N }Sȇ rQ9`J> r %nXɇ DR]\N@L|'؜>3a-CB>aYf{-RT!pR7|dHlƥxN08҇ڲ"0HJ8zJUgHLs/*Jq=gL-:LAXp1$bHŐ! @T lc#.YJwB@a#E|,]J_R[7dM ?7KPU {u:h \ Ap1$bH,jmNLLf?j2UrYLcd!! Zi-965R8Կ"x$~GrJ)'9q9<(Wnd9qsW"Ȭμx<x=ߚ ::F{W7.65]F8>%Ũź+~Z\EQb`?` p|K8 JF-pɏރZ!L} /:rVf;naxx֑fqUpx=|^5UX^_˗aŲzTV7i^( ^oǟI HUƈ!I44^/G/ly !/QGAEY_o܋7rm~c~ L/Ggtfkq7 }xqe߱eӂGgCXR[׮Á}75އ ׬̼:?hq˞/~2, FgWOZH&Uz8x^w[ yC(..ZKcg_@GgwZO5``is*BB82~_’j};%͛T;Kc6'# '~o|{h2g_Ox/ATUUZ\&\niƂ "q DQ]ݽ}xO-w܍144hkk?)<_1Ogl,<Z;mm}i004c'O!v<GpMcO7.8ǥf|CG?}k:Vg)%^:t bUT9G{g4\s/CHKHՍ}!O/hlk<g8yzzr}3O< .>ï~\p4Bê_Gaw 1HWÓsgr}öo2al,^Wj/hG1*v@eErlB'08<޾~CiO9|q' ;VǃRN?9.])_+}F]ex< ٍs/l v~VU/9x4 7rK3!Oݏ"99%%H$Bh‹?{Oֽn/~;|GUU!^uuQ`BJ~I~??1/61۳ |=8x^TUB&pM-_?|8茹8V~߄v鳍ŪU+fd 8vGf+?/xwEumT`QP[7cMm?=ѠCl0 ̌uK|i W x/>>goeZel2W-ݬ%Kj}] Gp9QjhޟϽkuڜswQ]]$S-)gŊeCw{+/00{K+eضyO4tL1C}>vEލ_߸ΨFG/#f?H?g 8x[ބ>(֭^]m ^6+N :s4^=Iey6o\{u[|Y;{r3 q\#NkԵyuU%ؽ()+]\Hڿ|eH[7h֯/\Bskیa'0vͪXNW\gyY)/ӵy04X<SЋ!mmZ-ddӏxzrCcع =<=(2w(..FJx^<9b8;kۂ|z;)|)%*˰uӆYR Istv1޹ &:Τ*u3Oapp.|5ksffXϋ;c'&lSg=;+^^V6X"ї^ypn۴'$wB $c&営)_U+aՊe֞e 8u j ɌIou`l,k۶F{Vu\\19~vlyƒ6m@qI{ցv]WVU"jC"ףs_mW PXukVZ;!)$*+ʱes8_> nڿw^@J<¯70kU+{<=7NC&TUz[Rԫ]=x`-fygF<߿ߕcֽۖq&(>k /2xMRmF%G $;mAAA>Ȍo${f .|QYg L&Ս^ }ۺ]TUb捖 g\ߓE[x5!^=8_5kWaYݒYؼ>-ף4=8tcG)%1tul}8I8x=v`*Wm IyGU!kқV,3f$AJTUV`kӊޱM3dq<gWuRH$ɌH}>o?/YƠ&9y~?8+CEQVZz]ؼiiC}{vч?eȒgK]GAAA#@ 0k~ݬ~I Yvyy^7؇&ٵ^y޹͸:W圣D."SXVW-XCn5kQSU @E3I3󡸸5UXbl;l–M5۫W[/C&kz<UhuuK0X=i&.j[W|lBo^w=B~ QR\"_)t1ك|"%n `(nlܴ+y?>~]#ONZR>i$ 7qr+8;OZ;ub=hXl)|>oJCx >ofOr!ϒ8@[ķUUI6lHQZ\+y)xbB(s]gnSqj&{ι~#$bi];qJ^ CJc6܊>>k1)ž=tYqz9#(n$$={߉*] aO5w]׿.iЕ l?/oqx(>W1:2Xq@Wţ/(k_jآvS|UsLNqb_?Aq~?n^J__'kY)Q]S;rꌮ%τxFw7Һ% @Bq'Ͼή\_fS! 2l_1|}q^}F(!߄6ɧOu5Xjj108K[iEa zVGNi@rG%:{\-8C8U⁏M 0qpR" _'|7,ٵEE-6BKse>ښj|[h0dʟ*+-ww7 l$#&(,*goو/[8raU^/ۃ>Ar~pEml,^BH/M ud\YRBFٵ?~yNmxѕBٵ{[qnAiy2_"LqGtHuZhnG"~ׂ{%fՊe w>6*.oK7|^9Cbc kWī=mߊbR%e==@2c±p=z NXCD*zg묎kzLXq1IEWw/::?QǴJyy(/+Œj,Òjj,Ǚ1F5n=Uw. J9Uceeeشyv&^%¾@2հs} |bHŐ! C@.&[EZ' ǣT/E^f;ABQ8єۥt\h \ Ap1$bHŐ! Ptxթ-IENDB`photoqt-2.5/img/filetypes/im24.ico000644 001750 001750 00000022707 14134304243 017445 0ustar00luspiluspi000000 000000  %PNG  IHDR\rf%xIDATxwxչ3EUo.L30&:ƦPB HK p !!pC H!$W lcS;ջեU[i̜zeKHݙ)yw4{vw̼w l>HƐ! C@6 l AG ._v1]r6AD`َ 9v1K/|$7(I $a&%! C@6 l A1$acHƐ!  L$cl9D YCKae N. . NALHTB1H}Cb$@XCQO lDA'Ã\orrqgB"%$ c p=>tuchxaY&C%0#DnVJ򋑗 QI]!HYߋ6 #S|~?mCRn ҢIO%, @00hhAw_/dE |rOoƠ( z0Y4.q"4 z}kmįc aIBSG p2x3$I C !$1t.r9$f(:zP{A)uPR~7amHT;C}[#rL>-#èi?06փ  C?[ :cBCkr8݇$1 M-ތ1 =M!, 00tz3k42\sA0p=mꫧ`86laH&cL?>;ЇA? `BR]}݆MFؐL@iaG5~Bz)H$ p샬nʔ0p!BE d Cn*En c pP ?[ZZ{H&  E+,-1 v܍`(X  RK$Y95-unE]kifff`’d* 7͌%^~lFD@#Hù!S6kZEAeS5F#!T4TC0,1t2Z6]Է5f@0F;Y`0_ 6V#$H a"b^NTW&08DkUwcmn*0m=hlo6y2"$rMձN0уX!l9*i0+$r9LP[Q\k76F`rcy3<1*c>$ 8D=Yn*A@7:u M1Gpl}+Lc yrnlKG-͵F4w¡6` !9=fz}9s#+n&?#:+@ܐLDq^*NQ-c,qƚ׃C 8`88 0,s|x پx9 @LAӍE3 sܘY4ݐm,rcޣ#()0Uvftd{ ׮DCIrC s+9GanfMKwS4!jmnd6C9 GVsgtuiۉ,̝1NљC Q˯QI#9@nsg):"sx3=?x2 !0A!p`δYX8{>IwPN 6$ q{`<,=98Z P9A@Q^!+;egpXʏ-B9ؘ#n@8"yٹ׍H^6rpGX.Y(/B^V.DQU? c  +Q_ ӕo8H$2Uwbz4?G P1Qr:q{ܬxܙm?VD(0]}ݨ;Ԁkc $9(EnV.dYFX %(@D8..8EGd0Ȍ1Τ,RTҒX& D; ppgR%TRFsXz)q =ԙT~vaL4A@}+C@- A rGA@N۬7^"9  +G,5塜XH}wsor! t#߄F9Ð*oPN$.$S7PNqHwkE_켞 9ZTMG*Rt7ZUMv^Oќ0"L,b F&B(lub4o=  `D   ƨD~oM IcTo"-'@@$-;H07^  ,D* -0k5"Z~%sX~!A³"!T5'#t%jMd9k$ ̖x9,g[~!5s$D|X/  Tco"X5'@@Jx-HTa5oB\N6C 2'0UX/cryik *ZJʖx tY#'`CmK=[ "n [쁎^Xќ0ۉ5PHW ubW>%)M44vC4'`,}Fccg^cN47@}Eih`M+,-$aO~t@$q om4I ;Y~e4'`,}V+4iedYƮ谨;QhAPf,)1jCy1`;ƀд'RslhM,'1 `W^+0vV9\Ζx1{NRyhj/:! {k!s{?7̜((@KgkBkQd+Y~g4'le1ƶfT4V% W-] 71f,!1bw~HIrg!$QӝdX~f]Og9rYCݳF.,* 7̸ )G{ofQp>Ӿ≇Pw]@Rќ$g萏 ,R@}eWFsfXO0QG)o<7 M76WC̒0i,mQo^a3'`J$ {'%W]xĚvaY0T4U)&wЇ,d&˯!'`*'pBvarDB>z va|d՝ќ1$1!|!=؅?6]XQTWw0 5U.Nڅoj1z?Z|hב溊F,dMF Z ^TS嗮)è9=B>z G aɱW"oʉ'Pi +"c!]` 46Vz݆ZO )y{H.L_` U!=md5cs߆#!=) hzW],HN JFC>GX>مk<0(|L:0Pe0c A  1Ң!+WŠ,F9 QB>zP8V0Y~M$'З֜@Z{E2+#v]i.,0*ɮc"vՅSgZ~khҝH[0jGTHY,!9C>z ԧ0Y~Gr)f A* ל+'r0UGcRR],C t-;Ouaќ@SH5.],' DƮ Œ1R_Kʜ@J@$ڏN'BŠZTR"Mhh7GkՅ?J.L_둪Ŋ!{M؅CY>tuhp$ǣ!בhu?Yik9E$8Q[A!-eՇ )@B#7)OJ@S@4EN D!H?Z1!?|"hKƄ|辟 N4'zGV! $*J>a& Cf @LP)C&ќ@L'`cG3fNC)zBFeT4V$.*HLUa)H1lDAN>>:; HْA 'C@6 l A1$acb<232@60#.;q 7A[ x_?5vvT:cNZ|2xV>Áҷg.(Lkp0ʾO Ɛ! C@6 lLRk10A]WQȲ EQ Em8c%O~VߡLU2'!DA@XفjTTD8Y1v#/7JJP6{ŧ攡L/"5阒$!<D wFB5#=&PR8 552EQ.8΄U!Q?ЏmoǚkhlnP̿e`Zq .X3N[s-NBQaA"˪3_|e:?X܃JE<쟞,˸+pߘ g~W׭uCVWE/7 [oM}<-GA$Y›o oyۖpQG]C=6:^/-8\x1X O8 n;chmoލmNN@D|؈sc,*V1Ҍmor.ڏ@?~El|sS܃2~?vم J<TuRAeG,z\JıgEwޏŽ 8H@wv ]> ` ?;aP `cCRYEzRfq6kh!@Gx8xŗ_JwSlGEU% HSoO(ؽw~o!+8Մan FFFCo&@$z ۱qKC0Ahji}_߾(/uPE Q\TO\՟Z㥿mC `'vz~m#N3q(w:l%AAImљ@t?tnfKxgn{]; CGv`u u1s\aɉ{*I՟e{llSaYaznt p1Fsۂ|,Z\I|FgE=^z ׿Bcs#14CC$UX}].\.aD|ٜ2Joo7yu`s(*մc p80tքRQ5  8DQTwNws-(˛v|#:ˍ|U>`˶ENI +2N=T ? ! QpΑeoljw߉^3~8D A"p\\I7&ttvq8DN9ykjkp׽_ }O$9pcά~~ }{Bˆɡ^:X o}O稨,p8hVEQ0o18Ly(šuk51$e] ;? {pƊX; ::!HĪիBFEL7յ :;n2 GSK3^xϸ+}@(@ 'C쌳p'LVl; h5{zbrf`0{G*tǭX5t?;Q\TUt#Iw5}4s7vnVu38ԙ1/] ?߽w>ڵjI?|Igxdkֿ7_9kx $Uc:NÈmq9]jȜ$ ͨ BG-H'IMvs#.NmND<4̱0$)Be\|ErAǫ#JBO9IVWt朣.< چu @#?/U b2!  B*~Uzfa%MZe]ع{`AХ3 ‚uO1Gfffݴw?> 71%$Beq8g ?B0I;oC>\բ#Θt9GqQ TT/nmkLByfdfT<^uq)(H9{\淡(&OcAUuss&MqΑ3fH W`@,1olBSsSmrP:c&onEQpsp]n1EeV|GDeu%cI (>ܳKg͚t9ŢTukMсg9V2Mo4qE=v`nRz W=8*_/":/~;pєp8pi~<݇I;c )Zr|QQU귝x rsR2WXܜ\ݿ.q }x7FC! DA- ~xmZU7}tx S^E-iUu~ع> pݯ/;@˃A}c~_ b驧%`1QR\Y184u3lX:siKQ6,̛;\vtv<,攡 Ccs⺒/gqVʖ#''Wom~i @صw7v <dee!,KD_?`\vݸ?Efff̺wVcq-ۃޞgW]y5sԘ*t $WPCeu%jj ϻ\pA( . -b, KFQ\\ R (YrTMoos&t:_ ,Lˊ!F(bjH>O˽e^n1}qe,[Pėn7]wceEYKT$&`P\j(Y~Sܰ2q| >uk([wכ6VL~g6`(/9raŗg/~LHQ9½_O8auz4|G="Mf.xEJo}ҙ_|6 [oE]}=3N_W_/]WCE|s/>{%5XO._v,=5b5(A3`ܵ{EuM5;;088@00En,Lñ SN9˖ODvvha->yxᶛnŖm[WZ[144`01Nx<^L+)pβqܱv!rBk3B"Gq Kۍ8o#qβiyhidb| |,NavY  =h@Oo@e8Nd3|L/bv TP(_hkoCwo!pfzӦc(*(^@ x$&.jEmp3|;L]j>ȕEő>c"<2Se& (*,BIq N>i$Pj(Psv AFJG{iE]b< l A1$acH| p0rq1@ (ta]A1$acHƐ! C@6:AҭIENDB`photoqt-2.5/img/filetypes/zip.ico000644 001750 001750 00000017445 14134304273 017502 0ustar00luspiluspi000000 000000  PNG  IHDR\rfIDATxy[W}Ih6b%diR )KKB-  m &!JHiZhBKJJ&z8XW-3r=Io9#ɓJz﫧~{BH q@q!F@HQ`!F@H6xU.tJ13;,}U+_{>AUU_! Y! *]ס*T/gt $( 0 B $( 0 B $0VBМ9&ct d M`8eCaCa$N((LH-0#J`!)u1KBF}Mu眂؂B1d,3Dr> ESs-0~!j*MAjaS!G؂h=$I (k )>c``3dT~ w6O"6ԃ|ֿM zGh +|f1q|RyG@d:~dc $ho  "T]P[ތ1Lŧ129PPabf SiWK O"1tݸP"d0<5bh~ue,'Gpl;(V09;Ԃ;Nc"|+Ȫ &f']]x`( ]mO@1C:,!0kNeU @F Jn*Z|a:8 e8c %t6%RyןV6@l3;[>Uu^|l @Y%SjUSo!p|bC=8133/(@QUOЅgXJw1̥&8[uޘu1,dGb>tk7 Z1L``lhqt9zG1>=Ag&8c;W0xoFjvϪYtvCQ%RkLeO}0 Kݍ1Q O)g#SFCOX$#$ˀ.\U?b}}\3OWQPxUH(T1abvo$8C GQ*6WVElh^ʱPo9A}c!&4խuݷ솦n\X,U= ز~k~ !Tm)%##P@i(V`vCaGݝbko)%IS( ]p֎r$YSEuUAd#% tZw(-ضD䰭?;6mC]?R[sSa%jml-]ScTmَh/T[#6D}Pamm#?g'֭mgܒ B $زnvnގ*j7O8 2TGc6ܼ uq8@ 緟e|RQ@qhzw!܁ں `|fdn^/j}chmlFC$[?1ۦVuG{؂H(w NCXߴ MH-0#J`!)u1KBT>Zh#kyg~ Wە׆*F8&f'qd.z/JPDK֣>ZMӠ=Bu0K2¡0¡0B;D;)c c{ m[ w.9""UNj*N}1\qJ63hJŲY~h`✣wD@lavoYcP>%(r%*'0F}KPK.=<'%%1$gO b;J~ B@,cWoO4 bJf z'3fZO Pә1˯ 5,fK 2{_;ƛzTA qKo9J0֧D\m%< Ps} P䷜1El 8}bn--G(HE^[ RJ~K> R6#'ЅL6S#Z,UQ[\zN>> eY6˯NJ~J>~rR_C%Z'ۂd^.->q_#zo9r O%ʭ'> b_J~> bJ~K]@@TJ~z &cHgx04>.~,-ղ> LhW{ot*ŭR- LO &c =C %x삎U\[|}006=C;Y_9ǁPT!ZPJ~KzDcH.r!,d>,8FpaZJ~>_8xULƧ |H@G_z=!Z%H%ZzTbXqe4MÁc0ZrTsx{=_c ''Fq|&;_A<i} q>y9c它f RyOWhu!&J@8ơD/x^UpY+1{pl |T[>A &cDWRX:D0˅< @l{}JUCV⥮0++2xu=ʹ7>!io= c*T[/'5t`tzbrc={ߓ#_U6p ܄G{~_spgPU+wUhtJ~M>O~˛|Zi^iߘnadW197e7V\xTk 'od֋UqL'fʅZ^Tc8N\J~>@9M>VŒ1PɯYOX* r#.u]Tk9 x"56U\X-Y~\cŸN.o\oJ~m>WM>V8].|3 /嗾m>V4X!W.] KK~U*]n=nW't -huoxAPɯr Lj=W&5>^g_pS&+م 8*N7l1L'70>pU,6ħ=‡]T.L%>We&y1sI0c 3 *u H7q qمu]GW?4XJra*u\}˅82褒_Wc` 8rS W./_WsO=íM>V8=pmTN 8no5wu׆م{}J]J~ɩ>SM>&eva* zz qLǭ]J~mO`l 6Xf Sɯٽ-|%40\1i%TUcb2>SB̜]Xut,`g-=Cߨ|̖] ˅tocr~ a/Tv X~mgce /ΰ|Ŏ>K7X!w77p)%}@|,qjv˅s%TcV |:cFʅO+>BƂ>Sta-g Lǂ>`yOv pV-`b= M>VX,9\J~gOL9R1X^.L%9G Tc\psTlf TM>݇<ʅx f3O@M>sSBمx q(TYh>u6pEGm5&?e[W& !6Py@YGnɧ|lS W4fF@{5<J eM>)j!If ˚|w?! 8H+>r0A\ɇ/)OPu%B>:^&B\>c0$Q !.ichmlAU8bfh> EUl[R>:/uRt{ضd=!eG=!F@HQ`!F@Hƚ*P!Nc~~~Q?U+mZBsdIw}盫oW6K.(qjBs,cۊnW4t!M1Ct $( 0 Bhm@?s܇FV^rj U8i*Qd*1*U]בN!%@B1,,ːe10 /@ws7_A$ ukwbMwp9b=17#HXM{EkD8:օ~Dq2 IBrHuuhhhƶ6l޴oŖ[܌H$BaP"  ;= lhۀŠ1D2&6{c贞1x"{y䜣6E6\tx7W ;ݎSZ1ec Cg*)Mn&]1c.GױnFggDkF d00o1u^S6,W ] JgCMM Br@@ 2ɫ]ob<ض\<3wsm!JzE\[Tii/nhc+ 3_۾}'phGCx ;m8.Z1CiҎ/}hZD}eafv3ӆRON?!/ m q˧?_z:/GԔXjBPD$o&5`_&RnIsq|W70c SӸm> 2.Uڏt$AucszR`!?'ھ6OUѩrsrY/pN 8֋{߿ .ضoۀKPTH$<ֽgx>'xA;b x֖oj]בf1;7A9z4|[oM466@8cW*FF =fוW-Vюxq|3^ mʫpG>JOnEP9FFGq019a1^T Ͽط[6m\PAT|7ooK~67v܇7 Z&lt D$.j?oi]A| 7 p1trݱ33}?}[ky'^

vGڏx 8x??7oD~;( 8Ggw}놖øS]NS(ΐ_߼ݝ?j?YBFϐ[gjhK.{oj ,/t*+$9 I,Of^Kpqj=Ǭm\%߸ON<^$&&'MEUpOO?Lk嗽nwzs<3 ?执O=i٘[݅ ccdt bE0Vд o kgPUw]cy{ލc#G@HQ`!F@HQ]-ElV-rvpgn^vc%` ]ױ]+pVj캮c L1 W*C5cLfq !P_߀0 u\׿2rzLbyX׺7}`Dk@uqG?QtQ؄ 51'DW4t $( 0 B $L Y.:U` yYTZݖ83?[tk0B`!F@HQ`!F_:E'IENDB`photoqt-2.5/img/filetypes/kdc.ico000644 001750 001750 00000023200 14134304110 017411 0ustar00luspiluspi000000 000000  j&PNG  IHDR\rf&1IDATxy|\U?;d$MҦPvTDRqGDAG(QD(Pަl͞I2̽<L%ܙrgnν=@ [s] r A1$acHƐ! #'*pX h9+3K(+O:fs"B'$C^4M*$a"}74@6 l A1$acHƐ! C@6 lLB+01;c3!hMV"wPE(1(i8e9GdIE,B&cPUP(A?"E&w=cYvtEp9Hf c X#c^xG y/*1AxG(,(E%$($)j*FƆ?ԋ`(MvzƔG1󢸰s*QTPS%, @ 00"Awcdt1pOױiC s*j4?@yہ`($1(nC̫^M"@$X4#*FƼƢEb"m( iGL^⣁`(VA]0yU9而1AthC($  @Bz;E?QE  p0`ad̋\W$3Ș2Ca.Hf א"EcQ֍0$2]c >oGiPC+H)`!!2r=#D# aRH@1(T{h,)B0 4 ^ 8h,H4bj(4heHFLc3G}S=@Ї] |G:!X,j!)PiF,"@{w:a$S1S T͚#a]=` Mz #B]'`:E4u6# 1@(֎&a6$aaaxd=],T9wFic\u53D 1sLy"ѳz& Ȓl dcEPč3>2}2"$Sp䙪aI\,;L5qX,&hhh4lX,MDB ϑY6G}Á. Mj?VK _!8xw䛦anH&p$fן>-bH@d s] ]pQXPd&<'‘0Zma$SCqQ)y|L3Z Aڻ[us쵎f)B]m%@qa s]O{W+:T5h] @YOYQVj:Horg%E6!\Nc()*CEY~S{rIB0y|Ts]O9$ j*Z*-.ڣP.ē@RT@BEeX\w4/#CPUB@WفbU$Y11oJTP5-)8 ,B@,ByPA‘E&wud$.Ap9](,(FQA1.pZ&Y~#ᬸBg~,YԒt6]BQa#BESbPT,!ȃ, #6Rqo-mͨk|EI$ifqqƑG~SWy;4ɖlb 8@a#+Bf|(??v!ݖd TO]'Sd! 2J&-@9! 2K-IVrA@dlX~SB@dlY~尜  2lVq~$DflMuQEDm v[3&rv%]ff'@@rhM` "#dܾ9"mLX~GskMub4o5'@@Y~SAVHYc\o1f 1kjM {HYato*''@@ 3X~sn[H17TME rֺkDV17 '@@,buQhM X 4f& gݽXr`G[~S!j &s$nbM'@@Z~UUXf Y~S FcD#ض V&sMSZN7uT nACK=T ؅Y̐0T=wO,L#|2 -{Lm>ks0FO$0Ol1],Ƹ +䓉zB~1],9C @:C>3Aمc#oᜣǀ9ö|2!\WEXmd`9 &2qpQ8 0d+t'ۅ"˯qhl6LNp+[!L; c>.L_C` %d~.L_ca % w1vV؅k<0T/kL w~uaZט%'`6iM'!КՅi_b@(!LWLaOW&˯1BN H!t?Ǯm9 6'c0V'p1<2u0kcGsY0j'3:yu b(Zk 8]N '`O9pGo2Y~͇9 du; bo. f.L_sIN 0Ϡ B>& awCd55 d1k1:v.ՅkncYO k1!|2Vh&˯ᜣ; dEC>{L5ij؅kY dEhhI],!9F|MdBf!'bŐO9dޞ&˯`a, 9 UC>3mޕ],V&9+|2?.X,NZl'!~' ɟתpߝ@[B>@d 9C9 C>Յ[BY~mc & ;Յ^],$9 x ;V&˯~i  wkO2{+|2 -{7p1ڜt'0+O晰 7o!ژtxrȇ3GϏ{3EQHlm~*Y}Um렐OZ:ˉ s'B>)M84'@ҭB>{ҕHZ(C ~I |82^tRȇ lsB>al9_ | 4'H(B>adR $tD4+ AFSUv4y|]i'b"A!\#JKqGֆAz'C@6 l A1$acn7N'},$3p8`08cp'?뮽ܮAI\BAY&.R LcLׂ4 H6 l A1$achiHvnє㌃li4 BdYv#/ߛ-ff` "шnw&!0%`+$IB󡳫M͍hmkAww7P5 $Ò%G%Gcn\\ Ѓi)m#7~}gCw(_g"yH࡟>$%,$IGAA!JKKQ]UuX`!-Ĝ9Up5l#Ivځ{544wx1{;N̙SNX ֬ŚbEx>s4652|>G"8dnwQYQX`/Z(,(c JLAC>o1]nTVҥ¹'w" &#wߗq0::юMǂs?znx*8spXv28.Lf?7*@ @ />XBdrzȯ_ۓ ! C(/+<TD"8Ѝxk/7~&jn7Yd;M_|q=^gH$.~oO&BNĺ}'BMumB$Kٌ?ioд|&<3)'Ƙ|k! @7:{P9>ŜO'~!U14$9&gx?>DYc @rN4={vAXi~ˇ?S2 mD%SW;!v9[D4MN.=O>-74<&ع-MI7Y\.7>l\nL6N߇>XR&rgp ·YpՕ^ MBC(Bo_/cv$Rk[+~@ҟ4M7Qo88O݌3O?Htb1 ē ^{UB\ A̯6y/J(߇lڼ O>}юEI`,;i9>.@4E__/^_ȣm[tO~]U+Owᙧu|͟~#&5U5…_~?ؾc[wuԼm ( lۂ魯9Yi*E9UU!Ijk?<֯^V@3CRO*6m~u3܊ x<(2cgքEQv7<~:8m_ƅj,{577!df ChEU0߻>\uպ+/%=1xGشyǿK۾әЌw ĝw|i"m4M^:FW>d : i*ƒKtvli9޽ؽgc{</Yg Ȅ_/,v^1%X4J## 1\Q5JWm۷'lHyߺrpՕW#?/?ח#-0PPP00%$YB4,Y|\WV (1 A1>|T:Qh4Z@+B^^d ! XbCÃQ88ӭ{+)X}krʆ 0p't Ցp΅6#ח!-0аOW(pXF @Bn*};a6t8jѰJ$ [~|e/d!<*7AGt/QT\?W+>Ѝz>_\@gyNnH E(,,Bqq#a:kiuZdI,S~4 ~[m~CWtwkqq:S@e(,,UCQiN\ظsSMLN;wn1::UU 7B@ed1Dx"TU(UXXY6; N'pڪ !9CgGb6|4ME4;x~^5s}f&]yǗ?E @I>i*fkB@de\;,Xbn\rѥ;!SCe⋇聁aw[Xz.N8D\r Q5j":LL @-M<1YhBQhBpxEwW\ UU_'"1H$|~~{ ! It{B4՚aڽ_ڝx_!XN2 @)1]e  dYE#좞dpp{sԽAu.ϘTױ|>\]ә}~~pB""1b̧/Ts>19*+:##[0-s?9UBhni3|ǯ%w -vFd20߫{ds:CWw;3?O;9<{[qÓs_@~=[ܵ#,CKkuh =A&|U=ry_n޾^<ģ4I,( vܮa~m݌e&0v>J nbʅ15M"֜Vo{Yl߹F wm55sQS3wFk&4T`΅1܆=ݦ 4 m_@YiYxbc옯%Kغ} `sP^V>@-юp UUqg]s/F 0gK01!<' Kj5s8X}ލUUFF28ysl]eh,9˯lֽ{Oyy9N_}&pꩫu/7/89FF *b)pڋt 4  Oϖ[}|:XK9VW4VT,YZױ01N!I5Wv(tkף(Jx|L @asY̟͟=W^~ts\(sBgWgR"0nJڴ|‹C;CP64 W޳FW?oz۶oQpqhZ!4(P(>l۾ = +p '^zMӰ p庿2&|obU$ wPU 7}###D.lE{,_w=^y*x|8e # |i3kn8 @?5rݓ$ ا0ww}wl}b_^\}q%c2 X,k؋o3M:B\g_ٜ>WAQÎ=GzXB|kRri>G{'ģ_ys##^tuw QL6B} AkG?rN=&;\.-  qc㣗T,29q$VwqBd H6 l A1$ac~_ߎ  ˲.#[žo箟1Efs~3aN@ ! C@6 l A1$ac#.W{IENDB`photoqt-2.5/img/filetypes/ptx.ico000644 001750 001750 00000007126 14134304204 017500 0ustar00luspiluspi000000 000000  @PNG  IHDRyIDATx]Kl$Gϱ7z7> jw"ECPȅ<QP8$-$Њ 3  E+k/g힮꿧jNvM]}U#G9r8Í=ꎥyeBSwTmMCMGwT7-ݑFNt#'@w; ny]q貨 um6MJ,.ږ$d@8ʮRBXŞRe.@ckЃ+:Nm. RMVu5BLC@}ywrDAKB->!@svDP X_h@?gugZoFO:[:YEt!P_h$5.7FTOవ;תh -,EfM¶iO$"GagU@N9 0!7u+f](ޞi)LT y@niBj#}MM :To0KчS@*,C:MBHs g X*B`m{P`+\ȍ;%[Ң<,,m ;A@K<^C^۸Cg'~`S_~1 Y_˫CE{$:SICEa =19Cb tP pˁ iLKE@qD%3PŴh^`HT#}ұ;'TKF@TE@H 1-t1Iiyp(R֖ІLHlWShs>`Lϡ}~N P',,aR@ϋE~>d ĺ Uɡ29:n-B $!B_P"N '=u@=2T{PJeΖ[G^1cdP+LR񊥻 y+[TSbuu{Q:ӍZkf=D0<%0xa'Xs `%0fa % R XS ,[S ~ Jl/ҮJ@h&8aU3 ǴLJ`&h\%0$̴&녎# Q3&,& Hg $@D3He #@P?GfGf>GfP/2q@p4kn #&X0DʅCf )D "@R3PF -K`"ڻ&KC"p=PK2fٲfR)p- }o`j"IFfhʓ惢fK`} jW];@mt)$E0 iKJ@sy;fe3v#:KҖ@X<vGw@x0<MWJt%JD@cWe&8/U%&WLUf; tbwb% L-YHYy`k<1F#`;)K XTXB('K M{܇qeM,S!K {ho&F`$,$p""ZT\@,-PۍWif#/#@iT3i PymM([| fb0bFS34oTV#`D-jbdB,&L(b@ⷓ"IM]ѪQiX_3z@\q8[)$!f]'X3[xD-Y` *8牳,b-A,U #Gg/YY8,~D;D0s8KME޹8eMB1 BtpD`iXh-ډ6`?b,A4{&nfm bQ@܎5QDDf](5 Z% -K( ,ABiⶊ`&K3m ",tMno 8@܃N[Z)-}Mv} L@j ?zyFfrK"qA'V@fAP, 8 8{,D:)@|6o!-A\,xP-C*P'!.C*P'!.l d&E2%% xJpqDp;Pw=e~?SFuǐ#G9rO vPlyB蕗GW? ku:Gia<^@7rtX9N-jMuPwعfm Qg7>)n2@0~xo_KX2'`n#?n~#4RI*[z.|'" gհF!b^}F^F O#W-^}Nc4 !PB3%$C$."HFۮ \ Ap1$bHŐ! C@. \ A]+01?d%R 0 `BAP "RRCsYAdpH"$BB!hBqgAdك̌,d"7;SπH $ 텷@/T5! !RCPT>?]d硨$08a`P5 M=Σ`Rp]=^`B$fzW C ~?Zu1/m3M@&bBdx$  :{hl?3 c !5F>L,PHbۆ:) ?^ ܬ<067B %ހ?CmCz=a$QECsTURcQw~?a$:00|hh?T!UI! !-Ic ^v* og:h' r" ~v4[rUl@0* ޮtGԎ1txãaHF!*vuXڋ v kC|ּ\NS]¦D@.QjJ>z  /ЛjDic$Tۢ(B cӎ٣߃=*HH"(A[uU-PHM%VmF]c5 !UM@՜:T 돢G/=s دѢi+cUuG!37ِ1hjmgK3:tx۩`$R[PB >+ *j Q$:Qw,ɶ0 IΚݍ1fv478ڎXKΓ!Ǔf K2dcz(JGoBeZvTn;i4Ȳ= 1kiQmcBmC/ِ@A{msaefdA{``"PXMbH" I2rR]#';9 jۥO1+f@rmqWM#;+6`߃ƪ9Gs17;G @Effy9HOKOuU ۟چ*uj!TԔӼq@0 Ƀ"KUdYFa-Z~c. M58Ʉ` 󋐙a^qH7ε+)'#$cIDŽIz)͓fٺJ$o<z)'#zLE`\A -w_4 Y9W4(ATa  @Tb$R!Bdfda½ QDc D @ Ǵ3Ӓ80x9ucfq9 B#E1cldef'*+̩s;?,@t!B̚>E7E%'`9rHor*F 2ӳ0dfL51B0f͘)Ad4}+ :('0 'pC-*|tx/ U ADu `G 7; I Cg7.o'h!8oȖUPQ[7ۣ3dt7V컞ju][캪GKPw+=G @ 5!tÃ}8P9Cq7쾞1_7ʎR4ه`ߵ'Z~c9 q~c:!qCyAh/l;&5hikkȊ1چJ4TzGRY~cg0'PkÜc1TMՄ@yA.LxaaNCg*J>mK )8PuvaƏ]s?ˌ1>|4ذ}va&sMSQ^uVCl.\0Y~n9[C>f88hhC d5'`[`YSp0Y~2[!3PU+Jm O8'kl)!5Õc| &1o}Umk'rΘR*\ԗUqtv|3d5;l%| lnByA \15 m]sbm ސ!P^Yfk0˯MX}=@b!9.iC0Y~u7*cF|^.Lb圀Ȑpn30c -dM:s4Y0'`+ NuUBQ#o*д*-hœG,ov70qb9K^f|`.lUY~Cu}erk] Q>dV[OR쐏dVZOR  WY.L_aZYuJ>v`.\مi_kb%ZPȧ:5!3B* , 9 UB>fRPمkmHUa0Ei؅kRHX+cqlO]f1SHٕaՐ9z)JUd.'zǬ}.\gI&˯45%9_8TQvd'.+ c4\xM $;'hǐǀ{.ld71'VC C>fم5d?s4&q=`ȧ̦!ImC%j 9H8!c(4.L_̜@RZSB>Fc],C$LZ1vql:0M18::p4f0Y~9Ӯ'|̀ GQUO_'L|]87CN:9[M ~ո)c.L_j**L *n Ͱم[BY~]c^r k|g&˯;1#'` |찒kva0Rfndu'f'pk!P^Yc`@B@! هNx:b ȉ|=GgP '0h"23NVQ'Y .-mtb=0r=ZPȧB>Ʉ3N]bcr1_M!cTN fAXpN b uPPB9[q8SO!  b, 99'+H5|ěukILA;qHGm A$AA^ʎ/d-XO堇zp1$bHŐ! C@.F ,$;>1 ʇW޻ƶj-ACd'gr0y,%Zxb jtȲFX#0Bt#QA%o3008%x<p>14-߇PC @zzzLź4t#$ ~_?IHS5\|%~ qqh9~w09buдӲIW^~nKk2eȲ,aܸ"LŴqP2%,৿7lu <У7b_G㩭;oF}UUqW!8 L,Y7G_ߘee꫖m Bf;e/Zg/17cmǃL6-^o &N"j!ЄR}&Mor;dyK1nرs{۟Z2= A˯Y[nUlOO76l^Ve$ ۶W^nٌ |gPR2uF'MXAQa]x湭xxΛ~CKk $Iz[<Pz--wh9jjQYY9>NašO`ɺ?qtzzzaz?~\5W]^uw, ߋpw/ٴjhǡCeǖ1={wxGJ!@UU,^nYEQyF$s?-**!7'2oؾK|!~&( fccWHNsgynKG}wX1lzjWrwiVKk ~>|ߔi;oechhǞS}(l IhgbͪQ7ϣxƮ=_떝3g.V>JEX*iooÿP]Se>| u (Jm]M!8MpMe^[nD_#pA<3]V9}x5Ιg=J5mطۛC`{{IB5ίko:n6,QA%-lꎵ pwl;d/Zo& Ek[ ZZz<9x fϞc;y/1:$PU_x nt@rwoxokkk_?Ŝ9ؽ{:;(,7r܄eB+`e?x?25+nW.7 ӑ_ٳnǯuӳ=kvTB_|`0qNOhͭ@eUc9GYkj񝌌 ~ (g\kQO= u.X9~MSq'O ++˴-!"a}PsX~ϏYYYQmࡃ(.*YsFgW'v 4MÎ#7tr 0p]ܥ-[z`?^|鹡7 شeCċT>,Y~b-|KkA<YYXxi϶6g1hjecXh)}b` 4MSutx7/`>H!~ ػoΘHL[3B 77^pqT}>Z{1ŋDlNv.\Cg;Ht4 ]{=_Bcؼu# _?Y58m,K 10wܨDIQABh0aqpD {A{{ۈSLsi k֡xn7~=lyf3u_|%!u QTUE_ÇhI1oμzc3h$O_-y @M}=e{z=^_nn.֮ƍ+KѴ]dgecѢ%?>pzgOdo1"1B%$ż떭AwOno_z4՚w-ՒpXhiDIQQyU5U#ddd`0!xHD4̙=V>f˺Xj-222,;AEccE-=QFB g_F|ڂ9î_{3sI7tzBą.Jx[9{%"( vU +1FL)9sG| c6>l{8a"= @ !P\T'|999qog9p$`t#;+EŘ}f̘9̜1ӦNBॗ_0dIet͸K K[MX$232\";;iii]B /77\wd*V\yH($ K5d{ظɰ%|#KɔX~pB +c Y=i"qeWGNEqoш4JCۺe v:G|*}ݺ شeH@W)0֊'7-w ƞKe<*̞5Gw{{K/@ÂDR 8^ywض ݲ3gĪ!3XaӱUQٟY(+G+b[t}1w}QB`„X_G7_z Iv|{eݲXz-LSbN4\sn eaztvziX0 ==ذiP rUqc !W? &O[ӈate!Ï>-;n\l]s᫪K=wݫ[VQl޺u$)b6G_no~AB3HX3/-[z`?Q~2_zjXQw~TW Oqw[ގў“T\FȲl9aƌ/ۿw4]# '?؏SVK/ g dIƃ>K.4b(((D B/o2/\m跑)8-Hzja Td#2gŏ~cKuE]i4$v1 sQMZRu Ő! C@. \ AaJaudY>۲m27&ݳQߪ'H^j2҃0n"eE& D8}F;݃Do#%"Noyxp~PJ1ΡB렕=V'9z;Uun~pxg~O붻8Z1j 3~xˎedywpgq/RrR **jj<  R]ivXY%"h{Xb66navBXp]KwOVK}QcPb; @ _ mxY[jqG86lk ;XQa!j"4d^UW!Gm''8R2MBallـ9V);k' \!ݔ#R-,3M `g} >ޭf*Oy+R* uz\z_ .WѪRuĖ$0 LRZ A\ llu0N-@47pAio\>U6*[C^fB0J@)KS( ̴s%R޽|7\a ̜r0+3QWM."h6c rrpi.M%s|:]7668'V\"[vI6ΫVכH,GCQ+%[vnqSl|u2'9Q10,#_Lȭggޒ@\Twvsb C 0s10UՇf7}(` JXxh!n<߻ RR w9'03WgEX9+PRr6~~j  =z .JxënlV9'0` x:㝸 aTJL?0]G~:o*J5?9Q0q{#׼KS.R a| 3Yq+~!E7 +ϗ1=3fnVB)5ڇNykbEcv|fd]fg`q?Ȥɟ]ErvFfN@]G"4`L ((OaU~#h1xdAQ:;r oqa0-V΂`X{jU~ǵ.{m2ϖ+o]8{O;]2N M$qs'*qNB1*l0($A6~?.U~#N'oTtww=@z QcPPK9&)q:'`${5`P T~ǡ&v\ݪlŽ)4V~Ǡۜ&ʯל&ʯ_: 0hliC9-m_?t`XVW44V~aN@ 0ȟW~;' _P3<'e; 0hdY9@zg2W=> @ݍJ+ Μ6_Ze4M\^dlN@`ke * @AJN%˕qNv2"sވVnq(]*~diN  "v|cnXbjk5Z{3M︲0'pl+o7L$ytuߜ낙ͥMj+دC~_N'9L`[kCK"^[> @Uwi@@Dp8e}{"Vʍ =sz?6jܛxi\=7>m.`osϻZ}ȫswiV(XDJ͸_IlX/s Am;}p]`U/D4XOZ2"f{&h `mTnT ;O ptra7VD NF fR|j~kԅ^I%_@mN  BI㢇uaV~9!0?"0+K˜@*@D9;qvF¬.MHe8{o߻p'H"h`]p $~ Q|vR~+;uaV~Õ9T!PԅY WR'C>7F k;wd7IHM $̪s/uaV~9tC>Ky]h%yN ؐOەՅYX'C>o0 euaV~ $7N;#v]HV~ɛHl5 o':+J@2 !0$.ob$iN qՐOpͻ I@ !0p0q ,I@ !0.jb¬&ORq ADyw3 LIHD= ՅYM$ I _f7ْ0'{$j'`q.o su&X!!8؉~uaV~SxNV!8}fW-N|7qWf7Î7'N$N>isuaV~O zxs@R#ׅYFsC>; yq]_}9'\h<RϠ0+z cN y' ՅYOXs|Bq¬~ L ٙՅY[(8Su~ ]V~u5?oȇЈ:o "v;]E*<|s<՜8%Wsc|!0l @ps w!J|@C&AOwpȇ(9\g9N>w6O !3DI3HQQQM2'04\VOH m`{qi@x͏(\eXyk/|sp^Gi[|DڊD "14 Hc " {;ȧNa /՗_q"eZw.~ܰ'u|¶DiaY0QH}$Hc "14 D̺?g8jiN]06z^WDP(`u;]2m @Pm{zO srb0 ?ƫ* WR \Ky[>=/KBR /~E|w>pGx_nAq\_/೟,;-0!^o_v=cE[7/ވ|[tF1^=yO'y/3xp(O3M4?{D|G4 Hc "1P1/%;\6 8@aLy5koj }>4QTrR ]/N{>ffg`Zno.t83> sy|>vLk?} __^̅ߚeᡇ䇈e|? c}@W+]v s(kׯ]821R}8'|\0\'ÏsK "?tl㺮~v%VWxܰ0Ρ\g> >+Ul-y޻Sn|h{*eu] %AIdž*Wys<"Hc "14 HcC/B4,k2=wY J0_4 Hc "14 Hcx$IENDB`photoqt-2.5/img/filetypes/dic.ico000644 001750 001750 00000020340 14134304115 017416 0ustar00luspiluspi000000 000000  PNG  IHDR\rf IDATx{p՝￧{F#/K~ 6X`,8Ylao UPݛJ]v`X@ ߂$Jdy,8d $~zZc4=gh$l=}TT3{|99 ADA A1$cHǐ! (V7cǎ PAߟo9gcz|AH-^2$$*8dɗǐ! C@> | A1$cHǐ)j&ʃ1`gd%l`\[e|^F.'! I 15"@@  VB` bf&D"t:I((2D]]* 2a dbID $$cq!I|Th*Ԣ> Q$! ̅DSSS D"3H&3s]|V)eLN%F{{>UÐc@*p SS Ȳn'fPh4 |yAz@,$\7;c$1$Ytv   @'q N"MiKˍa͚VUAF LLq䄥P{d}}3~7mH4%188|^'JHC (ap0j$Y F"DA:5嘧n7266cwU@pb#b"i$4@ 9f%D"P r2"G֍p$gwJbI ʂ,2ф%Iq| gC1RYG?]SfvWp)$K9L \.?`" HD" >;QxoML8G8'i@H@]Eny1n c I<64Ap΍u֊(C& 0$YtwG<{VC@8&'8ujj~tA`, 4D]7׀IA>\NFWN Uj1tcDf̜!n066S (% ϭI=s'"k;3sOT9a0pTh⬯61̤7)wRhPP%7G8(zd Hs+`o|n7 ԄwjA`P`8yr33qĨ/f@yB jk+]\<x}}㚏"iu89jk+9P_F(*O_8,I Fi] 8 G0먕-zh4 ,p478v?>΁ݵ)ŖRpotBpB鲫^Ⱥe)o)HPN@/$ hlvS55xA`8yrz (B `ժ&Ǽ mmvWTR)'"pTWWm9jjBhF0荟NF ǧ>qLт`PE8 YHhCZtvZ(<׮]Q=_M9褵ֵںpcc߆:o4~ߒ>r (0֯oGkk-(9D\وoL(;('p#k!Hdd~p!뫱|y+p-fVlD^hHJskmE}}XhDvn^mbޓj`PD]]ZZjH.1X4o)r--t芔 jn5HM# Cd( ?(+TUU uuU οVxod~_Y 8 Ea!˲@.'! I+ |Ն711[TzzưbE#jkHA`0{KB*+8|Ŗ_+m[MހE,ɨOt~?kgF[~B , a F[~KN0;eW/8T,G QN&cWwm(' HӰ[j('B@b˯  LA]7eW/u7YlujeO0#VjN+  ǨU~'HC[J} 9?'@@,zsN0 X~K9fՋ_s$A8[ ~ eTo)ᷜ Q6Nr$DY_V5|  B9A`GN(X~KA x>'@@,zPHx>'@@jqT  JBz{lqN&-Q-QWZ~R LLx3'@@b;٧x9'@@_x9'@@h1x[ ^ ū9 ,+kRrƀl6h3?Ux/|#q08xpS*n6^k B&?QHdpio 蘅- I x^cS o Aѕ3 X~P xa<Prfkauawمk-N 8Z d+f|̠0{;d'+f|̀1'oV_k 9'C>fՅ,ηz'8*cF0Y~pX1]xQva: ''(:c]8Յ<ph vag.L_g├#@N>naaua{}\]J 8.L_gㄜऐc&˯;'`8-c> ؝M1u'˺zduvl|9gkƓ}Ȳs [B>f`],1h4ayNrpSh k&˯:'`1c4f.bY&n څ9Y~] X"nuM $Y~=9K !3X nw,ʜ%,؅r{X0UB>`ՅK= &N V>|xH]Xΐ׃X0M1T˯֛'NJ)v#<Y~ 0 0\1vY~=9C!Ѿ0Y~99!YX]xi0O &~´ʯ0k?CB>P }OOlp=:.L_ctN,bz:h4A_ctN P򱆂]! $BNpEYVzTD12'PP  -!g`~B>$f`ahB>$r%KM@!p6==c%`|™ y==sE@Q(CNԜ@Q'P$TdYAww--uE@^ANECC5 | A1$c*TVV]O tdJY{Wp]w@hip ~=Թ+ڱufHd9@ +~[\sȲ YAƘMci | A1$cHǔ7ѻW(:gAVQwGV,CQ (B07@Q[ Xl6cM*E7"SLBMQd2Y[nP9PѧYFӏ~ $$y PYY\֭ٹ u[, (30-kƍO]k6oՆmxXb( <}Etun$ab"(}}<ǧ?}チ/D4H@H&SD x-455bǎ/}נ'cLSOŜdLgAeگ{ 4^x5\uՕغu3 i,LM_+_xw7cHx=Wih'C`l{Ýw{3MmfjS矿/s~ 0D1wߢ܍.# p:uu+q啗;o~$^ye/: (YV I'dY( 851梉Ik_/VO+jm(N1W_{<-[6As^µ`/SO}H@`@dtt?/|&WaN;9޽oarrJSUVfMW YQ]_W䓏bpN"p:$&# o}֭tLOO?>!d {G1_*t6 7|#OaFe\xymgY ~?ޭ q!9{N"nFj*ᇇHKHҚ?7t*`˖֦-o;8ra>zX {kZSFq6EQyU&lC.C,6m%p$$&C ?ƒ>y-ظqg UعZ x/Fc( Oࡇ~^gLUFB`01@ t:_7A'9fMx<z!ڃQwx^R5,s! &axj_;ռeApӚ׻=(XOj:f``_;k|]݋$^|x≟wgBP?*ߖ:`rr ##O莵{+W.gatt >"2 c H$R|^~x(nΝbm^UDQ|U k:!_-^}u/[p[ڌ $IH&S8yr˯zf=E3!(#Gȑ} 7 [4?UAv~3i*܄/TȲ.s'v'NgoĊѱ--MH$`hhh̐HºuMM۽7RՂp=_o~Wױ\圽 :ex`( G[2u?:;ϳ:f֮OM7is!22m4]B`(?oW[?}o/o:,Fl޼w}'V477>^&|ŁGL H,1&l߾Ny-V\>7}nu_eLMMi_oOUUUhhʕ˱qzl߾۷okQSS mF~,+Xv5}n3<7wDJ̚jl۶9t ` qǭؼy&z_YYj46֣ --hjj@MM5q[иPQXvoKtvǎ\*Qq;pqDyǎ@$2D"\.w"܈u+.51.b466v-%عZ| | A1$c IENDB`photoqt-2.5/img/filetypes/amv.ico000644 001750 001750 00000022412 14134304051 017443 0ustar00luspiluspi000000 000000  $PNG  IHDR\rf$IDATxYl$}޿Slu8هpyٰ,$2[p] $~e(@`!ȋB 0l@6b$-@{exn!;$Kwת"9k..ON:uA/j j A1$cHǐ! jφO d  ;3S|~_F^kI@9*2TD$Ц91$cHǐ! C@> | A1$c4De0`9DM!V8GN瑗eȲ EEu $D5! /Hf28NpJ!!'I9oڌ1(" %Bs(p0AiOv@P! @VK&#N+iJ pΑ$$ LD-0555[!0 2?H$}tD: pӗ}/{Զ9I bZڊP_0$&`NYb8H$ q}݌A8NR)AQa9$&%#*7 `!/IXŐdp a)$ $r#L"ng'H #''X۫(#D&׻8Izlې|؟܀ÛhW d6[a$23!"J! /X;8pSWlպ+ (#L:14@T @{u@e, A` L 䀴Ks90ưc vV6]` }읜(H :- >!/IFVz{/+1jὫRC(j$1 c::_E` ;GX;8Q@! u"AthRX~͠ 0@gs3n_Vp<3okwrKЄ ͸Յ*>홛!˯_O9===lj-7%u۫.8vckHL½° e9զ+xӃWz.ok!Ju ru655F,~mhS+d\)o|rdI0cمk=n RB>VC*jq/G_pKN#c5]xCvaڋruaCvaڋr%2ww\o&ouPsI\!!U!;djN`ɡ9W@!y.HNTY~sB>v+Ncb5Ӭ3wP-NN 8ZԐ|.d 9g6:V.||mՅ[;rB>vd-JN ᨜#X޳/c]عՅr!;f1dug9g%vqc8yZj"!5G|l6BuaZ.%!;dY.l],V9 9^n#c5U T?'PUpcjW&˯@FoU%WB>SvUc,F/Q@U,2c9yk]XdyV)'P8 $nYuazj"^ X[Յ+ U~c5Tjl/|]?Z7+kuVN6j޶ {#˯wQrl|]d.JN gkNpN>nA..L_cwNr88k'T^\&˯3'`!)|F ^J_`gN2Og!Q%d#,s4cJuva9+D娿C>vP0Y~RgaNb8 l>cx.,2wW9|'rAr.څI'X?*~@{a'7څ?[YrDbcԜ@OK `EVFRPʜ)Om#%X0,1Rȇ jU9CpYAԚ{ѐPȇ 4-jB>a9]BgB>@4!Qȇ J%9ML!p8jNOD vpV  G YFgs3"~kkI8d!61n}M~Hǐ! C@> |  !@k"T:Tl;M_:A@ei @ow7!kkY% Eu u -h | A1$cHT7 5E{}\߯VZT@>G&^` VeLFCqS`ۗSZ T~)r9du"+> 0 o?1G? hIq| a_5R]wpx|ySsT82;<~{X^]?~[KoӟBŒ% |7ae󓟔=$I~ ߤHLJ?WWߴ0hl GG`PqAׇ"L|Q||\mmm7ՙ;'!Lÿ[]׾Q'w+MAlno‚>G6Ng0@\㎍>gSSn~KoDh 5?&AtykmomȣG/@`1a{wg'qpxX V&i7zj!s{o㽞ͶۻXq1Dwpy H&.7ot[[Ed} KKe+vQLzUdYƵW}Ͷ'8^H_-, Nkz4(@`N |Ⅹ+l% |:9Y^-,`}k˒c644f;9ffgMr矿Ӿ. Y1ׇW5-."H>'1cQDŽlOW߹SQ!0@:4ɴF=*./_6xuܽuarzL,E"XZYybx`{3^\fu};Ѩn[[l>] KDlG-y:PW.IGonj*-2>Cq?/-UsN #؏Űdaai G''m !`$:ëylhee' qCUq.jGP!w,qq܌5۪zZ1D ZJ8LP0A//ݻvRa\3S/_bwW` ύYlGHdb>D{[%7N] ##"u  O $:x>>VyL,˸{e?E[ڊLmnocva;;%4FF V(Zrn\cԑיֆGh>Bc GG*ۮgO.9Z[PtJᓉ [,֍E߽3,>ԫW)RJc#Fu,˝7 DƘb1 @!$mގ{z_x<4yO'&4Ղshl ?\Ž۷+ؗV >x2bGG%_cÊ`#hnjhmwwf 0a@y-[u4?-G(> ![;;eK-ӑwʕhfyCʕ@oFwggnG|v֞y5%lJ΍j =.(%hjUimiÇ/ @ư[$w4\y-yfeoL'^$ )9RԈ\|r9MK63JCPA0ͲZ' r3i` ]vwφ,˸ѡPhag%4`?ZZhP2pDQE PttpeC;!XWg:U޿Ns!Bwex:2bz@P YXa_0pY>y9b̡{775jtxXs, !u `qyò (llmgtpd 0s\m <L5,˸{떦) dxض92wOPs/tyd* @ Al9B x24$cE;̌{9ն6 wwv*~ޛ9Dߝ;mgd2 @TZ -~Vrj hY_z,_ldQ݃{eۓspʶ[\D"<[^e!vt˚y:9|Rǟ%M$lr?owP޽áPIǃB. eVMN>AY,`2!( ~:4VRײ,]/E_3DA/~ o\zV(lw?ÛHDy%"KK8.[1 @YZ3vc6stvt?1`aB /(8gq݉"[y_H $?C456)[ Xe<ÿ_kZ(ٟmj~p'EѶ rn;;m ᚺΧ @Wg'֊4bGGϞdI-.bUc^ 7\@'&ը/ BEeOevw=;,G"xBem>;7n^2WABiҨBdqxi;Rz߯y._5R%Բ^1 @1nl4s-ܸ~ԓF(JŇ/||lyl/ T@H.tRPs`əJ2bԴ糳kr>=sZze\e ó 4svu_G]-.,x9߹Y(TT$Y|bzZm[' pXs ¾}^Ԓe: C~F ^zy>s}n(jxFGuE~?@~5_ O H MMie gy. C`P*uLJc#F Hԙ{>6َ1gps˗9GޣUQP6I{$|46Uk^wasaWzz.|h9G]]o2 Pj?Bx¨hom-FK$stut{vѝs jk"2wS;9Gۿ_ vdYSh8 ~7=`)%5q$YD BKO/#jSo@AL-yZ]B +߮u󚔏9/9>-CAquA1$cHǐ!  ( X @"X tGcc6"DQGz-MC91$cHǐ! C@> |DꚻKIENDB`photoqt-2.5/img/filetypes/pix.ico000644 001750 001750 00000021202 14134304212 017453 0ustar00luspiluspi000000 000000  l"PNG  IHDR\rf"3IDATxyxՙSUVwK-YnĎ@ &ĀY 66sI&ynd- f̘,c-vmZ.KjuU?Z-ھ?SNz0Aa$bHŐ! C@. \¹ nv_ 0$:r ~t(a;]X0w]zTM3{0" A# [ɗŐ! C@. \ Ap1$bHŐѵKJ&BacB UU*4M%I"xx,C$@*L iE" /BT5vz$IGQzQ @7$}=Ad4a F5tpB$ !iTMC8AWO<EE( !2 UHRиut! //_FUĸ@e%(UGs[N@1}m39zz 0xJe 2 @ thhnE(ƌ퓁1U֎P8zIB$QҊhTEQETU1sd> QUFp'#?M8tbZmD‘  2  @8ҏDFe/ACK+Ui&2 hjkCxpl uv݃`Vfӡ!H@4!Feɾ zzcC;2 1t -7:! K{UUEHXQ`/F8ݕ1޾ fw)$ @O0[Eh}ᐥ.$iB0P 0U]5b.Bu! c@qA1PUduBa)@;2 ( DU[ 㕅2bI!jP؄| UlBfĒ,1hhnILA0!9V;tsDbs2HY²0ݍvHw|14)d00I%FZNC4T5 :b3sgpY6 ,[?f,;OCkG':;q$م6Κ Qlubɲ EV\FQ]_?܆u1ٝ1$#ylla<F^Om|A3&Kl 9k2,Q~[~c.[ԿTչ HF1q[U<|~یVPd;chnkG[GcD0X 7!~|( ݕI\̜sTa"$ ( E,}WQEEQ[~{PcKH0~\!|\OB>KRoۨ@Ґ$ Aiq׌(V AiK-YF $ EPTX`x>%G'27Y('<$:Ȓ)ey(*,DiY~SrAz1m$xLv !cڤ2(3zd('``ڤIM{1cdyo*!PUK9#$A"̘< Ei!>N:1@$qHx|N6 /,ӧo{.$)0g̘AN6!2&Niӧ$d&HoPN@a)8m` !$I„qpZV Es1oPN@Ib(_qtpB: ( ~0,˖ c ݽQyxNh<<:GBG$My'OqE" ?Uڅ,IP<(̓$I| -9q1 ̚9Ñ4H2D|^&TUE4"д,QQ(+)2(aEc8u*-o7`RI ΈNg  ?$ƐD7-9ma4 eC?f.wd,"'dRT')'0",m&ڻD A@dBTzCY%ׇ H,쮌('YKoRcC@dx\Y~%huyN s Z~zyqQHd7~}="dopz$DF1Jݼ Q`M7Hao*u="#0X,C ,'@@dY~S9"mkM~?ܶ 6V  "nm7r$DZ- [~M9"ebMH79zH7U  R"fm7Yܐ  Kocq  ΖTprNH UN q7  (o85':4.Y~S<uXN5 ?`~X~%~9)'B$[[q ݽ$[~!I>fN BckjF]S3dIB_8'*w18 N 8^c:5C51ttw*G$n&rXEela,14nZ;VN 8ZTMjysv\78%'ho@ckk¡i ]z,ℜ# ZyV״CW p. v 8NcJDU;kA+@4ÏGdvW,sh4+ЛZ;:bo \>IkpT֡#WV1lhDM.ÏAO0z5s[[Q]ߐ։+@yu ZڝJAU~sMsN>1DU**]gE E2Se!hdMxNF9 'kqTFZ1tr],sJl-C>Pܘѣη 73su6 VF dwmY~Ajl$ dۅcf;l)z!L3.00Y~]r#!L u]U~srdB>`]Xn V?N64val#|pval#|2 lm&oa u X^2Flj&ona" XZ2R.\YU^F,`՜e !l 1VT֚C<d+ -o*bŜ% !l`u0U V XNrF-]],j9K @GB>w0cֲ ZX)'`)P5 ǫrchm],#a],vɼ`O61p.D &14X/䓭}مsW],!h5a TY3䓝}jksb&˯ʄ@.!lq0Y~Y9 B>&vakorȩ1䓍c `uLo,Ō@!l0p&d? D19Ј م_$ z9'|"cvxY~mO.ȉ8%ic S_瑫*fcۅÑduZO k0v@b *du06 dMں6͊沙Ț8= :;v:l2.n dMA0Y~A6s7|2pp_'xN> 9 C>&n>Z>zua,2&ndva>bO_@F`(ސO60Y~K6ri WB>^Ee!5hid:'ć%CՅ+* ,.&9%/㕱# /NIR|:o L,כU8|rc ==ꢋd2'P$ IWr'@rIM!TN iAXL uH7'`X(C# |ڤPȇ M:9]G9|Ҥu6,A$-.*BI]kQ1TգG+d#BRp1$bHŐ! C@.Fov? HH$P8] }Wҫa"g=hvz2y29o^}Eo׀ M(L61F& Ő! C@. \LZk:VL\P1N>W&igH ƵW>b c`AQ(Ib'B@ ~2H?̨뒗ERU$cgDb"NBQ (?t0d)D%x@EơӧO3qi31 w,$ ?OЛq"7=|kIP[WӿEggL%6bɍ75$ /{;؝S&O?O1ct4r$#_90磤<\|J̟M$uA9?V}Q/n9f̘Iee+ۉFU,p!JK'$q~#G7cɮI G"oh}o?܇#/3bs;7/_3N?]w;:=/My9ǯz?gl]rGA`"===x7f&<ÿAɓYs看5+׽9įq ߝ?oVܳ$("x<_󡬴ߜ7ܴv¿◺>8oΘ'~M-Z[[Kf^ɘ88ӱ~j~Ƥv ߾sW_e|GxzxqZ̘>c@si2kUUQXX?߼ wurqOtO\1d[0mdΦ !lR\~emk}W_ 2 ضhii5W_| gf/V,_%%SU]m(b(..ƃ7@}?MJ7z_~Y㋊yzk9>,̞}m#}u J,&ݶxl6B$ѭ ~w٭Kq_"@7PHQ @~~>6[Ӧ7ҫBe">8xP;͜kV񘽻 H  F M0o\^ݶ~lݱ{^c̞M 0!3_cw8|ݶ0m/,NG @#(k+sL6 ֯7/HUUWT^;rzuL3bbҥx]Xqr(gZYqO}Fɧ}fiv@~~>N9W\v)ni .^~ߕ3ٌ1a7"I|ms?|xke*c 65W} c  Y{cY^cގGl5`lي-„i`4`ayFP98J01^;}-֮ZI`Ls:elyR݂$I]늢眣vD4l۹5Yf=Q"LA4|b7N]`_smēOB赠H_ V[ºի {zsaz-h"0 mhoomc񷯇iChiic۶# MX"HW^{nۉKiz7n@AB_~o6@Gchnn[ZoǢE & 9p~/#[F  rCt۞}YX~(ÞCsSLƁ?$ČGG_ am&saI/Ǯݻu_|5kB>ayXqr8]ƀ@61<#1/o}}hfTU̞ vł .0ċFضqԜm/.%IV{*>;r$+*kn4#I/%z{{3h45+). /Y_ヌ^|Qw~6Gi1 Bs̜1׭֭7K.!'h\dsބ6pGel݊SN鶿Ÿ?9ni Jm㱭GYE$nKx?趝TV֯ם'B`|Q6m؀"mkxi.`t4!IevCeu'.tMpebRpnۆV s<3t>\Zq_]o^֯Y3+ !ٻ`$DVey^Wtm?s7gVOcq zXPz7-"lߎFݶ_-,uiZ s]Xpm' tH@P!`yF]Y;7 شaJJJR9NMn xe:0!<֮\]pXVsS'?s/Z4k#???4 \ueǐsoX_ٙ|6QPn LwcBb㺵~}檫pW'<~ 1cp=ˇwD0&v(c:sZXXz"C@. \ Ap1$bt_ʒEa'E1T'BAqzJvAd|pPE#)  ! C@. \ Ap1$b?JVj5IENDB`photoqt-2.5/img/filetypes/cr3.ico000644 001750 001750 00000025175 14134304103 017356 0ustar00luspiluspi000000 000000  g*PNG  IHDR\rf*.IDATxw$U:f,$(@Q+*\z}|+ "*^ê9,&ĝ霫GONPӡyt::u ]"ԺA1$cHBǐ! C@:F,3߂' ˵+A aL@{mWP6| R>& bE|eR*Y" -³vZ C@: t A1$cHBǐ! C@:X!N5YAPn8e R*T2 )$IlA0@EF#D A&c$D!(ARG#Hc,/،1&V{FִU`0)@8CE,,yzsIJAG#f`:f0d,!䟁3X4 .s!_>R*,l Mhvvhu @I0$N#bQe|3hls hmDgA"I/a/1)1#a8WbQNP$Y&GU H?b |&H 83cÐRɪ ~cG˜;X$X&E0L֮6"cHD#B"r@PD, (d]aGBBb:ŒX7KFZH"U_3X$~ڂ d~濫FJ&ov  C7x׽@,LO!ȁJ"ڋ/R#nHC,TxG LkBdsHYjݕ$ ¡AYJ! kjeppYP RC*HO5pUeⱈ&f++v.?$K`vN9Ro 0tUhd!LhjJ-K  <#QFHTCeY4fQ,1D>xƇ @ X tiʐe$10{VB0`frll:x'F, ,55\IJ=ܟ^X@*`OO5+0Ԙ  uU-1$7M; V @DIS'`U5pYT2pkszWKBh2C0h`2N`a} A73 05zڐ,en@MfMXb jݕ2E19_ЋL"ijƦ&H DmMS3AP713>p_C2{TVJ@l M&XM9s2gTA8|w݈`5!fMݷД]8QĢśeY`/E(D#m^aDQ}TJ;=> V1 ϱa @N8ͭ8 X _,*h( au4 `1sU~+?(39'Z?Q!$+sD#:hnE<A4@,B2$ey1A0`4dhٚ~y ~`I*6ld!(C :au4KTdR*IKw A4B4!M ܠ@z0fWd-H?;`7,̝\L ͖6},VS90X$.P) Z4Aܖߢ?_HPoU@9eGIrK! *L뮀('d, Y~B@T V o)<$DU '0 Q2U~=%TJh?$D(G  N9V!'_,[ 89'@@Z[~Ko&'BQ/Dh 5X~xN`Zwl[ >s$DP eAmR   VJ-\N`D?9b[z +BHW9bEh[,z %o)%'P_QU-u|~<  Jb巌[{z /GT-Z~xNO&%Ei[ u  $c۫Ry?([1s: ʩo)pÜ 1U'bIuНY 2zuЏ0d"/bvjn~jQߢYB಄cubku╦-Et}k2aL B EB:*~fEPϖR@ c iw1& 8;#!Rыi?EcG#91^(&{kMUs["su-R* Ƈ3>R,R4@>p'0@c މ1Vt\XA'ty#oi0S ԅ0buH+ 0T*4c'_ynkGe1"! .]@]؅9ij ̨8'(%S~Lց],Ձs^ģ hFC>B>sۅ[9js!5w"ÐJ WsaU!J?TauatN`D JC>|*q Wu%'*}ѯi&U`J.ԒPHuȧ"pc ˲ 0Y~Ոr5|*p`H%kk&˯QCNgE;h]xFvaZj,+G 0& X0Y~5Bs5;3̱V.L_P˜@M@! 4ƫd&˯UNO%b&˯UNO؅+h&˯v g%d cC +`2v2W&˯ TqV589)&dkSd4sIVEw29zlvLijj"R*^m|*qLՅoP͜@U`rd^C>eLՅ[T+'Pѳ.C>evy˯"#T<'P1ېO`L@p4"/Ͱ T<'P3C> []W'J=Q@C>Hb/}Hse?kd Ut)3J W?T2'P>_cȧdL=9 WwseϐM,aL!J0oR]tN P_Y(HOE`ardS ™UL-~+ T1],9 |kH&bt}d1 +y|?C$c<2 R$:&htvd*QK!ϫ݇j1YyNK!@S@rEM!P@0 Sȇ jI9rE |ȇ 4'xC>!Cp9ECB>ZJ (b|B, Tw9H!P1sD :4>`1@$L dV)(GCJ% Ah!01{c3+؞!]k B7cHBǐ! C@: tLAfb%D6+(]:HRqQ;  +(]p®*rj j(xUj I(L1h!Z$C@: t A1+Xc ̭r( `0@ mJ-*R_(0>2$ adhn788фFt:vzlܲ7lDh,KOd2d2QZ 0"DQ\$\a*x<)JfB9$ x,wF&b}$+ 3~^޻>^ep{-N9t\x%8̳t|}O~T@Á&ttv{Z۰k׭fˊŀs~="g|oܻRe\v> @H$~w'xip q>to&˟Ex"Wxeh4m_=8B8߇}6] \atYY=`Ak ~ƌ[/|WZ}.)@0ģ_? %Gp۷o ]xZ2㙮ԛsϗdB˥ovc >v#:XO.c+/S98hb^tɋ$ bٞs@/(D xG4&NpO/|^gb8hmsp}gbޒ$!P@ܢ@@ !|K{bݩ9Cwphfs465%{ (f~T ?oƦf466Ժj1H8۾}32H&_<tO{E z(kUj4p@X]ce @(Vl!R+A<ˊ_ju7x.d,Ϲ薜h& `K6\z?gzh4`0,ٌF߰]V;p7xLLck֮pA@gW~F#},WgvZc `!:o}jIV'vēN*6/*bQ\K_,dîU0r___ ^`N.j"؏W_~QQ{p YR0? = Eo{GMOsa+lQ8d/{W'̖AT*ד  f z[p' J2q93%I¦-[nƊ&!2zD˅ёggfY^68 99zs$~1Êoَs|>:IMFrnә xI鼯ucbز>l67@&  + h_0Y9dIVlӵZmY݀^dzl`aY flhs:aZZ $Y higYi{YQlozWG~,bزۇO^$I¡MeY.lwuZ,HEm[Z[g{J0:<($mؘQ`е*/x}*{￐,+R)s9AxƲ؏V.xdZ7!v-Cgo($ hii5kpyx`Zw, 2 Lb`=em[Zpށg~b~hGy^ {<o" ٧VAkNY'>SxcNj(1ήU`,avƋd"ՆUSOCgת:TF?3Mn@ [%pG{h.gDܧ>Cӥ,yj ~D"p_oV [ݽ6o}G?͗`TM5!X\QKi`_*8^mObvXmaRI fmmNl?Ĭ;]=_@4 .J %pa z=$~Ѣh2Օ f jݼv,pg3߇)B3mNXm*}@gm  lܼEQ[χʲ$IX~>С`q,?W|JDߑCYֳc'D1DFE8aWvc::H( i7Edsl{}Ԅ$Ixg^Q=O?Yc ]Vc#bbk朣g8m_'b!.WggTn*$YcMy Rm@>AU6o)6ÑL{:tts is:vz9[6k֭GGJ*K{{ ʺ[adYF{ ;Oܥ0_վeoWOQR: mΎ޽a|ly6lmsbcRN I@@ٌ=_`_`@Yf^&.{ϕXacvx\,s斖U}٬S{vł;ff9oL&#:\. . sy29;nhi{g^_۾J 26l܄K/BQ?'{qhh@k[]ȶ;-AN̻`6lv`!$9e6m9]5KېH$  ~[݈޹k c.j^Smf3tw͆-=ۖWsl҃斖Јze6{g{׮Պd"F1(N$ ;N8*~g=W/`Lܲ5h4b牻Q|\yKHSO;q_- ♞*J8ԀhĕoOL݉D).xhjjY"ɤ88mNC 8UqfWg7P пވKyYR$I®O_/<'y(Zhko]fcs϶b˹6b1(sV|+_W:fWhl*N$gO1;3u-s68}َ5kgG"^P$ <w3ysSq$YƩ7_VE_ܻ?`֫,r/uЖgLl6}8 @Ȓw;w,}d{~^xL$pavƻl68}m`X'Rdhim#`HD$Y_v[ykMwO#28yyڿyx2l/9a(2=B׷o+h8L&3D뢷v rlY!V|_p2֮K}Oΰ6 H&1鞀3ߏX, ٌ&9ZW'`E"7AѭŽccsz%"!rYˋڷ0}P wzDE[q?];Z/p.CJYcSg3s>g._IH%lzPWj }dR!nMՆ Bǐ! C@: tLUAhQş  f BWl + f-$+$n1/N&`׌Aw @JG΀z%?U/ fjLX0IGH݂I B $  _D1ZI;DI0sMI;I0S  NSbM] `S1@M9p(^H`"C@3( b4 f.V;K'I0cjg ,mj 뎘`S˯NA-+`!Ic|{3W#Le$=1-lH2%2x\TԮ: "/ TF@&- T A#H0S$P`Ĥ]zϋ@ %xfz ǗfSYIg7g{ H$w (K>%K4s J{ar@|~qv:P&IIypɸq7' LqR@_z@X&BN2@csʜX&Bd$1{sǕ91 ;#! $κx&H0k@\+q +~@%j8J{ZyƋ 3&, dI g3H"* $`$?Ǩtt $ fLTHPZ,'&6 WN`$xHj$qEL@|23U:K ^\f.“`Ƅ` 5BH1$>A H!%7wB8A@%D8qX$$K6=߹"뾒@<2%4W'Fhcx$uO/WqPI>K녀8a`y?k|@|8q$$qCL/X'35J Mpw}8|l$ $~guI0k^ ) -;Q KxhN~Y: VpChuD`iHK qb'jD! @[WqZ`%/J[s"&X ]$(v$&Xv \`"p` 7I#.8qMI0SQIg 5>kJs<I ^N\klw/ 8@ܛNԚƕJ >8qI0,A5%#`UH 8O8@<ŅH0G8+ #wϟl;FX\e]?p@v$`~IZ$`PZMVu@uh5, h OsJ p Wc%  OsH @(Jw4c=M/P[o>ԭnu[H. +)JyHK7\y]Y4e& r}`2ZQ[BQab:F `\Y5}vh`d2[B֮pugJ|XvdJF՞Qawh=SuiVOvmއ;\'tYw.d{]cCw1NyUlX/+V}ҏ29} RcU|Ч~/rG?:R{pO97ԞE<ٰtjGz/Tq͙&fh(рډc{ll^>9_l PeisOWfk9Dj^ (c%Ӛ޿;!D ')v!)Kץw]Jz gL veæIJu\@Ym_y.+Pk/JJF] LrK4!%vMlw ~ٵij\(IkΥ?z{4yx N6LXkF;xk~Y`kAQ%Q2ܯŹ'ic3F!`S{j^{>խjڙ?IXUXY'.7~5o&߲h+4͙L&ɴ4ؾ<`» `@zkdBznk$: o-o4Z͸(^-;/d_1Yl?F{[Aw Lӳ1*q_z(HR|XiFS%I妇LG _S}>0=q=MO($b&{^~ohvؐ^LS*EW^c&g^4xM.DmTғj߶@+B;,HW­49d4l~%M`)3y/8XGOT?*;F9+ S @ZU V:nEmiکɮwO@[c)l?1+N;c0owo|Oa3kY@?3>Ҁ j{<'ވ ZԣOޯoZǬ p)GoOP7P|lnJ闏?_AA!z~ik9kRc}| =gmT>76i%!.LNک?\RӫfrݡBb _5Z|F޲;cMar|7D1`dHti$d5.ۿ?ho5L-q8M *&",~ͷ/5˯@zw8{~E`Ntx- F !&"<r:{,&m8}k浛w߰6hh+BO?s٢Z7]ƍtT~GGN$[[;;ڛQ]C/+ߑἑД}xqzrfmWnhK֞vXsKcLYpplTP]!kfȵ# Dw(Y=/cOځ@Dm)ySKҀ\Z.$^ڃխnu[ 88t`\Mf-Ȋ}}H(GO%ZzTX)ES2{ BbzGG76: 0Qt (@Hf)Iz$AbU}mpqvmCp, dHTHXc CC {O?f4EK `)+5xKp8`qOEeX"CY1Hl1шHXIwLM-0J:1 1ީX2}]-6$3Kg*Pprʹ81b14;:j,!~~ cpj.-r8ZoUͽ=S]!(bof(mʱ\`(#Y|>x : j^l6o@́Kj֥rR!IXX]mȶʔw(a 9~z{.JM!:0e-ڛ PN@3$YMuudknłr7ECBL9͐d:XV_g0VY~srad޺WF1qt oCXTSJ۲7Ht&h B7#9[J e0 ,27ݸC\C{rB@,『߼@9  N,B9! J1-@  Q\lͽ9tHQ o@ h+( T-H߇r7&-F^  tgo-1='`Q ;zU- Rno>~$+vO X~9BfH}07  ƨ|n9`j͇TN ` QF|=bɤmr$DACc[~sN9"o&-Cæ[ˆ]r$DLY~r7Ew  l~N 3Z~s9"gl͕LN hќ fCBEs$DnX+V 7  49GE,b՜@VUKKEfulj90L⯇[32l?`0CbcŜm@tcp;:,,U~KTN`Ϗ-820ÁvYnBXoIz,0c_w7T a 4=HZd(W,a͍TN d1H<%G>4^;X~ 9K (ىpxƷۋAS,b`?:|xUHaGoXa?K c '1X2 -`,'1Ţс,k&]x;-b!5ichN1`_w7yT9'`)P|ۋj %@Ko>U-f XF23 zp98uwgagŠU~KA*'0`:%1p{:;M0IYƮv1 e/Y~s%H.'`z`& @$ץ2Rv],aƜ@z%0]"tJ0[N0(C1z4RNBq,ci`*-c)p۠9]#Y~,9S !do*ىd3L)B>zC,ΎvL9^Y~YrCB>z ﴐ], 9S @fzO1Cd-.f FR!XN!b%oz0Y~KC&'1hN09S 8`z0Y~KC&'jМ)АeM'o'Y~KsB>hWhb;;Msx7˯'sLg!b0i0Oua> +C>aB>lՅ[>R9^C + T&oyI† R#|A.ld5 P9 dȧ!b;H`gA L0̵H4] X=h!b.= 1 Ʊvakxʝ(\i8o7L.\^Bq,9TȧӐ!\30Y~Gr%%!bjpd5' \q9B>zS0Y~MLs%3|f.ua jV2H|BT sJ_S/Q@I`2nʐOIK ]8cm#˯I2>)QN$07S 8nՅkJ(X%7GU..5l]C(UN`ŐoϝPr_ M)Gۅs#˯uIE E)¹@_ $(m'.ܦ.L_S윀01N>f!U]3:0Y~C1s @&F!؅?lkCh.K(Y~mC1s |"6 M.s0Y~Hqr 94S RՅg ~L 蹟.wȧT],%R1'PL|l)8.*kW9`j'Io$ݙnD0ksR!?l|@.A!($6&XXUYU|JGj)(dgN /Oy#%YcRȇ ʉ^9`2I!(7S9ѼbN@!0@O9IQȇ Cfr8ߜ&`@:A!0  D2I!0( U rduv aau5$AH0CCe%*"Uvwv"( c ͽ}z=k+% @@6 l A1$ac76bUqyayS$I"ẐM+ ty_{.K/m&FFG_6oF_ y9h<[P/ 8 EQ0261kns/ 7ވ֮$I4"Z(#cx}Vl~͒(E"F0᜾C!淿%O$Z3$ra8sl09#Gr>o43t/t?x)'SefSN<N>Y`щ9cɂ `ܬx{Q[S$yƍXTr,833ooߎA @ oH4X,އbl|\9qޙg6OFvˁW3tv4g1(1 Zӱd2՝5]4vkEYP0s↫t|$Ů>*w  @КVt1hitSN8g~: e.ԧP_[؏>D2] (1sQMJ4Hi^;kZZf)LUU,oj<xHAPb$z4ƨp:QQQ1gn"M;c͓ffsJ+O:I# @ `:jx9텬'XA$#P$ (!c[8ѡŋ~>*~,?2 1,nlԩGGIAP2wكizc+sUWVruupjI" (x#9eoy3ΘEQ0q̵WJ8{p:gI+c<.w  @pαPUY9H8ڊ@kkNKPW駝62()|^hݐ4\<IJ((_D9/iBN1usucP RQQrYC#5  @hυ׮]89T^IS{1d45x졇xBm!>,hr oB+C` |^/GpkzS <[O iM$j_v> Fc7goH EASc'MJD<?l\v}$eǕ] [@ؒ$h:6"L[  iZaa~2vt\~=kxr *MǎBè1iEUn (I[ pt*EŋSv*Z &7̧@(hX^ll|#ccXdIoAMN'j- T$ 0_tQj.]%G$8xn} )s/Lи`catTL E]MF@BP5kpg? >~8W Ѵh*4`:=xmmA]mmNˆV DQcXˊYQ&TU-[sŋ5~w/xonahmtFT4 Q9󱤱Q>=))0@WOO]n6xl ՕXs꩚ƶEeE|SNK `՚1$?lMWEQ+`,;}#R#7C}mMϫúU) p$&s: 4֭qDђc D~+uvjO; ˗. c 09e4olm{8,"[Z흝%A*gsW^v>M Wk*{7}t$ @UUe {-P0|fQ'4}ŋ ,qرgy}VL|G9AE(,W2@K ~1:6zݯ%CQU$I#ttwW_Ů>ʩ3pUX|y04$s[oռ8mp|t~H9$F҂?/;"(*瓝? ?˖,_¤GC`TqضM?9~shZQ6ˌݽhͨ$xm'"Z:,X9kkľf p})q[o-w3 MZEQpkoe6\x!wcٽb0ՍqwX+\q6XDYO9?0bͶ w~x{P_O_$sJX`ܴ #xp;G rۍ ֬? t \.8$,-%k ϗ`D ,hy }_tXx楗cBywydzM7޶icO0 *Nx=bْ%Xs8g:f 46p]VNw}KrÆ9'c8s7EAuUt-oW^=7}څֶ6 #!9.GN> p'şVt\.WN9OmviN! pvGMu5kkQ_WJnA:~̀$IElN%矏ׯG4Eph FFGF!+ χ4Ο磮@ڦqs d4{pYslz]BۍK`YSӔMOwBj[ژ9a! A1$acHd]Lh Laڙگݱ_q Dwwzʒ A1$acHƐ! C@6XfIENDB`photoqt-2.5/img/filetypes/pdf.ico000644 001750 001750 00000017634 14134304203 017442 0ustar00luspiluspi000000 000000  PNG  IHDR\rfMIDATxy\W}tLόfFemPIA0&r01H <W y^(<TR!0v0X<,ͪ.q-4}OO9w9{0Atp0$`H"D! C@F.w={Н+A&_5ە܅PU}"$,C@.CUU Ax ]/?kw`H"D! C@  A0$`H"jA`11@AQUu Bp(p($sc2F@ E0Ơj*4RKXJ/#A~fA¡b&$ME9'! lFc((.czaL -0P5 `faa9d -hN$!I QWHA5,alflژ30)- g04fljD2>  F&G10M׌Lkm1躎Y,йn6u", h'bH`nydžΦ-Wr&!BP!SB^)e< C2D"@X*`rnW1HeRRfֿM00-c`|}geC:H2$e``HBA)8:cXΤ086 ES>4 (5.z304 Bk0=?٥9W r&~ނ`ˮ_Q//"WGA*HVAhtW WXJ7 ZHVAT,gRNwc)DDU\c y\!esVVU؊o0ư^+g#_;_A %)PTշ87z}8?6䙙 XEU=%BTJP=}XL/X J5 ,g|q,gR.vC@1<9Z*9i`$WXb TM١>Š^P 聢R$VwX@H=uwaAUݍ1 ͌)gyr#$E='<EA!o5xq= ܔf]g?TB{af5Z)' <렸! 8u,+g`ON`V'}%˯x%'ɳ2S՚O—,}V'@UU;Y[X]8O0Y~Wtap|֗Uq-㈏d/^ xJ* 8..L⅜gO0c d;@֝~OOO=0¯z.:[wܞ3aVpԣvak/n^OgߪO=u巏,6最ʐO=d>+6ܚpPO=0Fua/,9Vdc=W'Zt  83؍a @_1qz !su X_˫ =)':+S~0Y~]ʜ׷R-!an}Յ.._OUP ,y3)م>ܒp()|<:00c dun bC>:qº{,n 9-!zWA)8j&˯1r *jY \ s8K_W 8* مqs]n ԃKՅm3 ;8pD>w vcdNl:vT&˯7q*'`x*c1T&˯bʾ#k!zR} ۔r'`x5S87 [m&˯{=[`J>98a]19 "Di,vVVu=TؙEz08 .L_aWNWC>Vc)Vd,*Y~]9 _C>3ɹ+ WؑO=0Յ+h; E  7i6,#d1 X~C>gbua3vKs~9nT.|Nn $`0Y~Er ʐO.].L`R, |A.],v=KF*|c +d .s [@@!b؅0:e؅l $OIO pG{N`~y 3d 0VZ~\ ,s)V~8PYh9ζGc5}ivS6%ܺ0aFN`}õŐO|l3NSa"'PD!pr OB>$V*!z')]O(J>9j0%A\ɇ D9Sԕ| Ԓ(+4|T(Ʊ %'b4MCP:Z GLyF SPTŶG/۞-YOˠz0$`H"D! C@ !;0ds9d2k++O=~޻Uj-A!K2ᅤ\] mkne p&β .iAx1S}z H  A0$`jZ00RɮjNN֔U` ,4O 3p!2dYt!%WP1_$AeHT*%tEZ EQPP u~9¡0BcߍB>ǧ?9~+ ##L[7oqбD T$I/[n>DcB^xŚ G҂w൷߁{wv:NJ:2:j1~T HVŸ[ZM6FFGW,p  ];Z&&'p7ۏG6-`3=gH|{2_/~EҋÃ(z,wK/K;=/E| 4-+@ 0pہ[uVVeUU T slEo6ˌ+%ÏoݍP]CE MF!3 Hj1>oZQ2MMӐNg019#Ǐ?'<_?(_D@?Ww=v|pBs8B.R)+ 7njOr;x/>]|`̀촼^F$IF(j: wtM7moy_{"2LNLNG/ڎ@P5 8z(ſ_ϛzǞǴ|^j]~}c 84 "؄=Q?֖V֣7_2tV5$6 H$C=k3s-@UUkh>"3W~E= 躎;wa}OLM"ELxÿVSr?Fر}LlƶmBcq'b7/K/'AB`3sk5]P_ BuvVڝ5U9ٷ"vRؾm;wt`9\ E11buHlsɩI9k}kK b 1)@ks 6un¹eۏ!#YV0NC$KPa*$69Ǐ8o-[ sSɤY#V?o-0jc=I6U 8񫣯+/&WZ޿FB!GXJSmSdƀ@ffg13;kپ}r Hjs Ude71=_+6D<;oH&fYr9ZF(ׄ8vAJabrݽ=8~8{{*ߍik2Ɛ'LUU(`BwYAPB|ja}X׺p(lk p-ѷ]$4, U硇#҂OSؼionvl ,C"ś&W,_3Ȓ'dZ`yf|;c½5f_s  ',ThE%?B0MMxG? v ]7e,w}g̒B;:r+$mmp< X"cnnTx,h܌ٲN* @ȲNXGlJ۶n77}7sȲ ]]5@QLLMjlj,\L<_21f BhlL1ш& `Ѕʁ_܇T*qS?@ @-0M7&p@9⠸Jaazf coټXs$5pԶ_t g!K2  B4aBٶH{wt/>Hp095a ͣ+\~:sT{acggaM%$I<נ|AcqZuף?=3|OqqShosD Ec Rc'㩏|4ŃvħMbu3`@GE/Bz?~ ;ޅC{q5l:06>qd}wKo= @moSF?D"AwCD"^{4} aYx!BX=臟=qDX$DYv߰ Ow~P  ֤sC'}'އ=v"̈́ X^x{vC>-ؿR"oqGtYZm1ш qqpmw`hkkc Y6j#\PO=>Q1Qur| _>Rd-hokǺV$>[O7ė><ػ{8-i $ 2~GLTt:ڃX/ۥ3t]ݎ~gz"V` `rBx AM<  A0$`H"D)s2}/$/!˦TeK/FB#cAxszMD! C@  A0$`?c`IENDB`photoqt-2.5/img/filetypes/bpg.ico000644 001750 001750 00000022774 14134304061 017444 0ustar00luspiluspi000000 000000  %PNG  IHDR\rf%IDATxwxս̬ժ[%WtllR( @ $7I(n.IH򦒞7H%!!`BUeVeSc-Y%y<u"$ƒ Yj2Gk~shgٰ] 8*@l1}]jXx]-\CpU)͍Aټ\00Od3w`dz[ ,H Qqa9tthhx$110>1}BgY`$PjjmF+C8:ÿ9Go:Gs ,!/ +tBniՂH,Z" x$K+-TeenQ zq.r V(@@92aMsf  <x Q]Yέw <m[fMgXr)b'TUrO5[]07U9v @$.cQb˼ !PVRʅn)0?7U@ $A@cqRx<@N|(F]RȒ'ߧ%y,B9 0@iI9,$yB-H,X~Ӂr!HXhh@RHR|-^"?g7WYI9/^G<dMtPN )$iP(GңPY$cQu/Y" ,F9 H_ac0B _v4j.,Ɏǘ7U8;RN`."1ZY%ť !4D$n:#{𗠢 )$Ir;,c ã,*QYVu+1 B@=XPƢ"D B1Ke|^%K-k:?0;1#cC#AtacyN3$Cw DGքUU(q(USz'eOdINt8&e!HX~slanlªZ,HLf⌣SpSN沊q"'XO`k4FN&P~`7Uh=! rٖߴ@  ueM  UiM ̄.Y ̀2 ʌ  B&U~sg= [~ӭ6jhnkD 3ʯ3ƦrnXŬ*ɵ C_-7v=_!V(J 1eɯ7ܚU",,֜ a-. c]o1겜 1Vr$DFXO''@@d,9Go+r$D9g]5" q\  ntqzNW*vYH;[~S3C8cwo:  RTqrN0S,H8N]Oui\\4ogq9c  lmx=‰TqbN5Fw_'vێQxq7U9'Cǁ6th%cal܆x18:&'x`!@cst=Q3UUDKC ,p('`G_QmD||Śtx57滙FQht7]Z;>'hP5{v!4:4e147|f{n,η̜}pUmhBw_CWMӰ{N :.n g_OxoAS^$DZqsBo:}= c cQ4EU }44ێx|µ߹Z~S9 ı{EFS q @cn^nsF Ɋ1fu5@Y~Sg2'nÜc1.tՅ@cn .LtahaNh{v d/EUqdMlcGþ툎GL d ;l/e7~Sl.0Y~n9[_!l88@ d5'`[`aONd5f[ly'C>g dMӰi'CB_I¶XOj*61Dc nC8j}UO 1v43Uqиqvaf;l%|A.܃`&ovCN6N'[hjF{3,Xl#| ϰd1vaڅk対Y!l+ va+,-f|g6 3Gߜ9GsdCvn!%]Wle@ d]xS8,]O6 [E_dzWB>h8vhuaZ'`)u' [0Y~$]Lم[c&˯JNR3J>v`.ܙTךX%'`6iO'!ؒT׺X!'wJ'ǥ X], 9V c X;.L_;ߜ@Z!l`T00_N owUC>9Յs3S8Zk 8_N /`O9Q]#,C׵r~wL:v[< 4MÞ̢],1@`r%A|& aWcd5 1c9=h60Y~ c h$ 2a'p~n],s' 44䓭sՌ.sdur"Nd]46c&˯seN ')!1.L_!@KrY[1Cvmi_l:FsȚ85 8`OΔdu2 dqr'va(J-du"XO KO68d66?e&˯Sᜣ;k97|du )K9S!Q]8:%50RN4q.8{ualLɐVU&˯zT d]-3Y~I6ȸR'!܀`嘽@F@!3e޷cb șg_8TU%u1 ,\( ɥYNf'Vϝ Q'piOĜ@w|"HY(C l=B>a4]('`'B>! iNPȇ M"'kyRAXC9sI@ukAXtsI:i ,kZ: BCzPT"A!QVnJаo{푫 RO. \ Ap1$bH$B G4wk^ MKmZ $x{?vI`QM-NZsRV?dY?M] 4ba#c $ Ap1$bHŐ2?`fLnE{st1l#]S_C$pX1I]-{î0!`8cәaéibībj;=J˰dR[{2|6n؄ k 03M6oO71J{yiP[ƒ{<.e؇?E9C9FxG?>[Mo4?_|26}.uwpQGCשt+@O W^s~#Yrx<;;?q)S9Gn[`Z矎(xgq-> tF,?oߍqK ~Ѿ88sś*;~fK,zN EPݔۿg1B!~-x?fBqaWNW_*ZZRnc?p=־,,Q<ˏMwvuU;wouJm$ {ů~FSOm_ <|D4!8۸/zMtͨnҒl`ړg @lЅ-/}$w4žLf$~? QZZދ.#Ë/x|"goyZ$\yx+%$iUU~J|O-NѼ8Hr{CVt2Yك?UU9w~ w|ɹ-|vn^{6,^ MS 'B 7_>ם]\!***pS m.iq&C'ᩧ4\\ q-w40)hgl:?ظaYQ[[gh[&A@gCG" ŝs6EE~ߛ>%uK2AMp'.WYI\F&bUGMsχ1:66sFoo3¹σfS[4>q t]'] mfQ-e䓖P4f%I/@y?V G00cس!^GuL=\ wޱcհ~ci#Hr$KغmI]d?wh4jhI8 `p'w"j͡zuU8K{]ϯ`rj tAQɲE?2{!Cs5|d$iO 9h"TMC$FWw^zE<i__+/ (x{[zۓtZ 1YxQz!HW_ʼnupM6EQ!42t@iI)n8%I= //+GuGB5DPWBB9 MFGG OlaѢZq#h<LރvCb TUU2ࠡc$AdI#W<#I2j-ǝM'݉~9 ]!Dkk v܎ ;0:j<)5M3 TT3] $Ĥé" y%"] @`Cd0$|Y{K/ ̖]3rܝqX9,1x SY4|[wO ڭ+xGq!( hvtt>@q֝+.bdePu oJkG so26mYTQD#i@4: 2噱|𙛮Cc^O| }nn]@$ 쑙S@Ȳ 6eHȺCQCF 'ή?I4%AwX?M,}N M6߈z5q0::Nl۾2ZZ[oK~%+>[t;*+*sBо'ơA&8}Zwx{s߅ S3PVVnhh,a:8k੧w޾^5kMFC0pΦAA!E~TUVaQm-=Xxj>q -]7Us/c^PmhH$ѲDD>K /nM7lJq38 7xՄ%I8J((( $SSĕ?Cm㚫? f_۸'6Hr >q *;->Ѝ-Xjp{.z3Շ:9s~ (,(w3F5xjïwlO7}$91~A IJJJBzA56u5MO~v/v`H2ݣ-fa#f%I{/%oimwނV,B!"1H\,׿5ʿ 1E2u]NYgm6;ϿnzS -,9Y0D`E9 xN~wboaˆ 6{LA&۶ognnB@QUcGO {y/HYg\!<=}IJP"(KHҤ gm},.xυxO"ܿ7^JN(4Ph۶o8 ,O݀VX H躎=r#p r%WKp: [QXhZY $ W\vk(.8V&n-_P. ֟a ,eqnW]@vJ[ ! q>=w@OwVVW\~5>ϽK!#>V ϿqpPUǃO\y-;x|{s[5mIaiƛq/@AAkέQHcYLX (QU˗kaF9q 1 /peէd6m<_y}i'!~?֭=|2\tPfNA0Im_ "H1| K2<~JPVVU PQ^21]צ^]،3J}.twh@ .e=ab#sPV^Xl>\g\LCʊJ|X#N>I:֟8o[msp;6#zÈB/P`!jk배z!h:~rH#쬀31~UF0jm?SX &# C@. \ Ap1I$AVGeC$ٯ2~1}_%9+t;CkDh \ Ap1$bHŐ! (V*[IENDB`photoqt-2.5/img/filetypes/wdp.ico000644 001750 001750 00000022560 14134304152 017460 0ustar00luspiluspi000000 000000  Z%PNG  IHDR\rf%!IDATxytTUǿիTl$[@PhVm{`QTDYfN=mNOQ7PFeB@!RT%ޝ?*EBH^o}9Vջw}1AX! "s!  C@ , AX0Z/ĉBQL [OLxo$ ( x $eu/!  C@ , AX0$aaH!  j&1`_N[ ɰ.ᰌPHB8,A( c( p8D8"DQ D^H@$ I ۃhm߉0$Ip^#1nv;\\.i AB!>_^~gWr18$p8 ^?vrs](*A^6 ZHℱ4@gzhpXFss|()Gn+01$qB]--~r~+c3( :4ÆnlH:$q󵣶@k'=c$uu>A~znTHb   5`ԨbfI@1Ԇ~ 2nD[[gZߛ07$` mF8ddFlB{{DH $*D!z~/~^ôI+8$*H#GZtsՍFZ3 cs ~?A0E U}# @?Dz?/@O pX3wIRtGBߐc mmhopX;pB>GmP6@JE>$~Z}DQ8:Oo @ЋH_B0G4l%QBu!8`0l-*X$g+)5]!2SAd)$)3kSN%s<؈Q[LI"yhwm/kñcD~Emm$Ip:#Y+aC DEǴ7ݐ169rbtA`mFsq$^0l:"g-H 8C!;;$ 6C-1 LcxZ"nЊ#G4 H>p8DCX(nPHBEE}9ޮwHNw]Q*/ftWc GxaՍtcx 2տ?oCM b@Q0b` DCe+I!b=֧7a  Y#v[΁A9v9~ד sE)&z9vp5X7Db h spi Dg94X~c?6B#98묡NU\s -qr 799A9(0|x>{i@t, fF$z?~Cӊ@pa ưauxO9?aMgN`K$8m'7$DZH7>PN7$DʉX~[n R-],QNdHZo̽I)#xE9$Di@@7$DJ۞6oP=! IO˯^Ǘ,S="$ct3,%I'YJe I%Ӗx X T`+Hoe|SkZwX+f'`J`S}Cggv2t.XF Nc8~eeeMR{ s߇U-b PVVcGþ}uekOyʹo:0rNTydQע 0TU5!%c7v0DW+*< Y.L0jN7Ny5c@8,aB1jNCس@rYc]vedM # /ѐOc^µ G, @ar!TQGyLԔz 5}#@j2,W'US^^oUq&C )|RA.h\g7DאPOI61tt{dMF'`H| .Lb;SǕ D߾# 7!'`89#e CUU#m̼0I{֡8D, !|dM/z ^IEw6],E9] @2C>vaft+a&ocN@O*`ۅ#S-d9'T|Rwߞjv*+SO@wO*݅VO@WO* .L_}zt|RA.dz JT1>v&˯>KN@K%нpfW!'qЃ],F9 B>&j޵+3vaL2*z A\m&˯1tN cאO* va^si#|MtwڅkdҝH1lR0c ˯H-m`ԐO*]8vaA_zi|R$.kҙH! ¾m@_Μ@Z,!dmM F_󑮜@J;>蹻p?6Y~Gr)T1݅pv巕,&$9 C>.\"_7O$N:r)+|RA.|TJ~4OA_" uu $]IZݖT*V $ *D &'4r't.ܷ]v& $MIمi_둪zI ]#˯5IE=B>s`:= $;'P'D{ر^?Y~-Lsb"/Ozڅw8A`$DsCv$dNh@!}F$3'P'3#%$/'Pȇ 2Or1 |B$@@!XN@0p0|BOtB>o*+-Wb|BD yT@Q(Cz'ޜa/JJ +ƒ\8 D!Áƞ=5&A0$aaH!  p]t? Nw FUv̛7D ( kּ{vvj*--qBL& 4""JK?WoրsY!4 T4 !  C@ ,LBJEԲjyR6i}Ŀ~" @Ȳ`ҏt:alHf!+˙~1B!B3re2EAggP^f.BCQ88q  ͆[׿c LL㡇~I.w >˗?u+2aԨPrg?'l۶п8ɲӧ@O+AP^^|mm3](ڑBnn. qi1jHy(--A`_%FHb1ׇ}kҧhCKOu|%c޽N1_u @p:(*s= 'OS1vpH4B1"͖|ݴl]eQFKnW=K/;To+1f,[Ru97bڴ}NߓM0D]]=6o͟q㍷{ǖ-_x_b`H (香6mj[˗B{{ccXljۑ#G`;t:2x-Xm̙s7x9ttt@`08ҥ w7?Z4ӆ ƳϮT nŘ1uS6 =Nf5$DeL2gRmcٲhnj,^ƁUmǏyna< ºLwEאÎ Q#U~Wxföm;+Qmt:h| >,' $ G76}AJpݰJdYbT,x5:4c ~O> MM^>̘17}](G⋯ц6@cn O 9Hc)ƀs?¶m;lVz<`!>S|'=xp.]ܜ}6ۅu*6444Ǐt>g0+$1 2&L_i}hP^~?+1lP,Yr7s/fͺ&?e2Ј'\z oҤ˓*lc#E!I2PUU>/x<[Ss۷gA #//_ 0 6ĕY-[ks¢eXm׹\YXn u~E!E3fi$&AQuXU߽,xQUu@;|r%^{̜9]7M7 i(bĈRMm0B0zA`"8={LڶV7nVm?dH,Au"nߍ>z9 cɒ}nկ";;['s_~bF%@9p8HzA3( MoڶSmwgcKI7dYACC!0s\YX.1,l6{8QMVWhj!;M3^Y1nwp$|slؾ}v\2V&*V;]taLj u#1z<ӚrEEQ~ ӧOL}@OL(5:~=)-ErmxQT4,8~ uؽ[ ;%%Cp}wF@`bᥥK`i~y/Ag?{,$++ <W\ǗnL,˸+p-7i~͸qw>BQ>b%//?.8NL]8*MpiW&_?"6L0+W>{^}0'|.Q*+|cXl%Z[bɋ#z,^L 8p +V}w(m*Z^v#;ۍ;mm~ Fh Hg}q# aqWǐ!Ex`b(Jdj|6M;+^/ 1s4$&faXsg^|W;NLxN W_}%O ڵ+p?\|tݺg^C_d.[^oKR󯦭Vt7eII(,,/~Xhӈիj,ʐ Aa&lWնq#TW# e3),'?S4w>],@(\ӽstDGcٲ?.yvy -P#䫶ollƚ5 ,` H YG`P1v{bksرcjѣ]w݊n]7M}kq|+x]նm{ QT:<2[eezڌpڶɋ^XK~ EvOzͰl1ޅ 6ij_R21?oV ^9jxu6mIXQsΙyYw .5Lw7bNZ hhhCgߍ_~MM^QAS!/fl/~jagƵm x׿~ڶ+cΜ1iǩ੧*_T8vc޼p+57{z: `ޟo ~w9r@{W pIpx;_[o[|}ƏSAPSsO=یyࢋs",]@Sw!L<SL>Ž{h h$cǎ2Q_aÆba(, ÎN444Сxce](x(+ۧv̘']Q̘17p86|&\Gp9_>jmnn /%(D!@QYy0)ǻqygǴ)k֬Smkяgp 9n-> oۊ]sGʠMĉϾTm1oLt9mdÁ[nALUwcQjS~p=E,c٪m%IOk2Xs|vlMO^o V^yk4+@aOk& 䓿aU`ɒ((,0 ஻nŅv߾rZjƶR^{5Ə }nZ ʞqHGLchn'Pmc+c*QFb;!W֗^z=c ln^z@Ћܴψ?]vQLWO^{-_6 މK) 73NRӈW=#9?رhja]4 I0ưdxG0q)'?a¥Xq\4ݗG3/hy-;s K{mش (-so$@--4 B#'[/Wsqygkލ?v;ƌXnʘo7a +VJն_<I,2N 7|j@O<|O-s%0Y31zoذ ۶,"rEQP=AY>mߢ-hoo3o."7;w'aҤPZZ|Uf!ąl9.좤t:,:EtvF܁с( F(l= u Cw0oݯ*|s8C>I% *?WBL5cA`Px>444iDK~;$I.B~~ d QuչKlf4]յnDY #U0H|҂+G}_>}C $ `9X&0La`0a o{Ioocr&UazvΕ[e7oK!fݩ vd2Vh+`5j8B<h%oӳsuG"2VV|#v+Ǣc !#9ӎgwYu$(p]ð"hw]EQdtwtkxk $}q. ms=>!:ZE]=J{, csaB8Bow>#BreیR>8'`twuUowѨ+G'F9k $pk:tSL8'` HGrm'@<ڂ}pղ[@=IG[+Av !m`p+F#R@=GR[!Fq|`7˯A8'P?,8'ֆ=X~HrN&, ڊгc± ,H!?6hfЈ@MX%8~`! IqjBet16b5 j8/#I[jz\CQE'`gې5CwG1Ȳ:Aқw9'щP/3$B<юl>Vlۅm]} KEAK$x m8Z"aHQ;~l.lq1 ip< h1|N>̶sa`lloCmPU$8'rJ%-F9^O`rJYWs!0 XڳBް:ݔ[Bް]ш8'Pr_,F)``,AuLX~ڽt]x``L\w˯v}=t̪kA^O1-7 0˯Q``L-Fz,)e5z 02o#1'4{-Ə#h 0MVoCl=)ʖߔK- 0MQ]l5Jr,LxA 0 5˯9XQ&|``dMyk XüaMX90^6s,!V``/FkN_Y~ ל@@4Ifm$`g9.p,,/ ]11B~?_!?#"FƑdw~is淜@ Grn$a+ͻcooG?[~O9 aemw'&w]kVi]3 ~ ZVΑDi=?D"jX.; OƧٮZ_rəf]5Mí8VnY~⇜/ܚi "l 9:L93 2[[Hu&"3&P({(Y~nzNwP,q+1M3WVJo >}Em7^ NI,,4ʊ0d*xa`# O֍s""&fRM]BNLbaN/->k  Bh:CD(*F c qWs5@6oNLps4Xva6G9'䡜@w'&n]0[~Au$< X% 9GrJ!xvw-&2鑜'Z n.Y~Sl5 /<)B>f.30[~+9O @=!)ۅo.*vH څ5!U~ 9@#!1Ŵl<#|@q0[~9@3!!va . ^ XѮ-څk/ Ҝ̐HepbU-֜kHDH/"1=tS-Ɯkۅʯ1'J:cn ʯ[pSNu`WNJv0[~]rR!B>V?`d]va 7\%θ}!+.0[~GQUr>'*p"ce lu'0lNP~7=P @}u]$[~]ݐX!k.<]lc˯+ 8.!7Μ7ɮ]3vazBrιঐH;w]ؾȖ_o@lN1 "./cձUf˯w(/rDvC> Xs-vaz]1@NvJ 4].̖_TNvRl s_ocwNVbNJsd0S]}׻8M򱂽Յ} "^XuNR4.\&S;E!ivr<[~= "~ b*î,W{¹|cvaL|\ HDXIq{xua"L[e琏gIC+Y~SGʦ9+s C>V@ƓɺwaMs @B>Vinifo02'`1c6{[U9 r @C>fS \]-d‚i䐏 < "!|Rua+rM =!F$Kl 6fC>ֱ[]x,Lk sJ3_V5 w_QJSwAT*;sD 75}V76Ɲ?hH8 $J0)'`j8Y9!qf |=4[800it=!q7j &trȇa\M9N%twCea*;a;: Iֵ׸ x"xrm9=f> *+e0a  0, `jb(ZZZn'0rU)|G 8S}Z;?rϝ3 10֣( g.4M0x"ڷT%xa  0, `X&46)}HA+DMF8Uh{SB9]0y86VB_HV>N%";BH{"TMslP(ry"Vf KKAj|" _W:} /rW4|wWYO Fu8^z9tuvDtϽ&m_P}C___tuG~ٳ> PꠗqͺؙG񎷿v$aiy1]Ssgknsn?BPB/_ S8uN|>Rޜ$@5ꫯaccU"5;kh)Zj;海λ,Iʻnƛccr)*UvZfq0BKUIJ0re[ױz(@$M,,,:T@ 48i. [V)ψ׼*#k!<'_6Jfk Wo{ψ \}5~4ڂX, Y>B|>_s VFu-{UŠȲi@:Z[MhDLDBn%pix\p$ Sx߯W팲,{?!߬z Ts tg_8Ɨ_x&aq᪦*|=,tz8ugM@ ZZrsqĉ{.0"kױo_hۅB?qĉ(׮]k]xj߅fbg*#I<Ml2S OTQJ#,/|+R'&9ܸ9Ob(tr3gpdjS=AyrmNat] ک.^Ƿ]]8P(0=,aye^}po  C\7l$(cgxz0[Ο;}I᫯bԉ8x 'O6"˲c彍B䏮㏣xS8?mL'#^=tgo/:ݞj5po/}a$knqhHxBh`3kP(~@ ZZZpqh?T.N7Da|'i>. B!jG~CO~IcAFЅ hiiZqwN? $ýOF^W'\Gt}{gޅ+W!UXVuDKK/&F矃Z,V݆;?%ZZu S/;9Ô aʰ0La`0aL 8$I;aBȲ\w $(P>iwa ׮^KW.]kq|Q<.C q~ G?}[x_#ƻkNeH35o3އ 0, `X&0L,io @͒ݥ樄Y$Nof=)Ԋ~DuS?Ts>!ZZ"'?HVhՅSYӪE5[DT Q{ IcKJ=_z~?( oO{vN7Q쀗Ω00a  0, `j%i0^AQuj/]Botof%/_TsN@a 0La`0a  0, ``~@PIENDB`photoqt-2.5/img/filetypes/exr.ico000644 001750 001750 00000022551 14134304125 017464 0ustar00luspiluspi000000 000000  S%PNG  IHDR\rf%IDATxyzaavĕ  k0Ac'oɛM<E@% A1D3 , oLOtW}(z``fk}Ιs8zvUoݪ~ ‘Fw   C@  A8p0$`j 2 ι2+Am߀hv0)xEDFn78x 2DQ(eY;= C@  A8p0$`H! C@F L$cl9d%@gc$YBT;AT"*e qxxq!dH'$:(uюP]aD(dY>a`3\z<FNV6 @B@$a!mM@TC7sEMm=Fangr) A$YB4բ+LF(ZފA1"9YFTƐ$CI4dYFS[3C(E=ഈ3$ lŁJB a!*F' L&+$qڈJtG#)}ފ#!'3D 2A}K#U[L@GgJLw@ -(DTi}§gC 4 P#ByM%"ш1`g*jF "ꪕ ތ146`[b,5Muvv_ p5͵ꫧh5ML7:CS[3B]?ކ` C1ƶ&S{#anH@y45xH^  As ɒ];ڍP`f"L @`gЄ,hm$Cw4pc;M?[ZZH sCAlڻ ݑnc+H ԔZDDEѶ8_}e8PSi 胨(ZJ-3c!6KJq8N"$ù)vVdYFIU) 0WB0-146l (DCK#tx9٬Q1Gv *R$:YwՅ n1PXZi*0u;hdFHYr݀\Fr_9V3MB~2WT9|/j7XۚqP-E:!ys9ǐ\dg2eXorC0~Ly}?̔},lrc'pp!/{鮲aP tJo4v('?$*7Fi[9r(]х巶V @,& kۉ,+ cхWԩќ@54@۸1<<$CH/X~A C 0~X޴Į=c{۔ @'#+#3m'W^6dde .oGi5 H!rqS1tH&D8=t$Nu22T7:$ p8uxd 1@9pƘ0f(xn\7^('5B&CC 0xPZ[ڄ`WR`Vpu{| ʁU?c -[V[E)/Aan|?t$2U`XPC+v#*E! 1A@NV6re@ ~@Ǫ(0mM8pƝf} $:9Kp!'+9Y9$ Q1ڳjOT!2Apvr++31Է4$eMR(,BNfmo"L>~_S{'$7Г,87)&6)k@IPNxH7>./1)G/JNr@@塜@oHԒboa m8 2aM_`8 2e H TM8aOjb9''@@U~9T ^U~Ӆ  tE*o,'Kao89'@@Y,:s=k%´/H}07zraH17ц*H17  D~r$DRX/N  co"(9btGm0{5"X~EkX~A 4P`Y Zv )%f,d9{$ ʖx9h,G[~AYO9">l`e={Hv 7^a'$>0]>lp0aPPc.h^9tH]e{PQW%;lΖx 4#'CYu9J%Ħi:ΖD찞1ؿT}l-ى(ESo5>Ix TX{=[RTU{2$a;QhAP^kl)1j{UO^:شwCAHq70p[Kv "F5chioŖG*8w7^0(ہqAPXwC~do"X9'`+ 5 Vc(=X}Uν7~zr0PY{ŕRaع7i&ob00|JwAL;c 1-w0E67史R:ݳ*xg%ŕ7@ F]Kf𾝖}1Z'(K=9+H!!+0 j!˯>eOgwET4XYWM_JNGw'O%I6څZ~K- ˬXi=K (^ MrR] 7%Xe=K @qU)*jJ`Zl#0Y~SrxB>@`.Lbe Oa0c dM9=9.sI,!B>B>@ ei,(&o1{N+cT]8- SbL _G [*X~K&̜0IG;,S]W_ L{" R] K,"Y~ӎ@0H)(FEMi ˯( 4j=S|t/Յk̔0+䓊~0Y~MA緩hg{ZB>z#0 \ 'b{T)Յw.L_aFYI,c1}& 3$˯0KN#-ʠO*eWeŕd5#f .f wECd57JNМgE2+XvᭆT%{kj9C ٕ|bnhuⴙk "f7(Fy zHaO*HGuaZriK|t&-ՅkiJJq#}9@|R0Y~MON*} MIT.L_"W Œ1P_[Μ@Z@El߷ M͎ՅeYF U EJJQQgĪ oN.L_@J;|Fy.d LIPҐ]W_aيtRr= JuxY~%ڎtR"N#Յh +߃d1 ~B>{ћXua-vᣖ|(9bt ' 4HVAsua:%'Ќt!I 06],$ &Npىva:@ 2R)cW.L_"k]O iOjQ»Qݠ؅l $%=!\ (vlGk mMdu0z|'sSHݛ!0QrV:XN((2^'5j)6b%̺0>aV%HhB>)V&ԟ }6Qȇ G@\+A9Wȇ pb9D<AXXN 4 W!+hN@8u%T@e좐ADsN^3 n'ab$IBqe) s 4yFT`kNDhږ*""qưCsy6 HےA 'C@  A8p0$`T}@~?@ց1+FggT㎹A[ px'gvjQTg As1"v sHG͘&>=$C@  A8p0I hw8ЊKZM~V~D"F0} w!O1D"D"}q`ep<3 c`Kes!Vy o&\.!Ӈ~+f^!<Ox9=;;_cՅ_|kIY3f'p <# -1xxCMsK3^kye"Pbp18g0.\Uۯ}]ҲXz=߅_hiw]C=~?pD`H,$Iv4̹۪mC[84QԳOtj=w|v h4?/ Ͼ]15$b pqm?s5 R˅/7}_{Y>߿#GHMC*t]w%m 0!1d N?y$ +Yocu`'Ԩ+.W]k`{*h0I>?22-&0^զ1̻e.Y7}9`۽%x/W0އ~!X` ud0K$IF0D}c=k=X|7fHd΍7cɂພX GRX,hX.Xv+<_} _3/|¶cDzOh{w\<"]?G5DQD{0eXx鵗P[_iUؼu3Ə;8HdhPL:gp⪥W\yx5c٪8̳{m1_Eu&Ǎǂつf0P^/aK{p\u(b-t]gIeH4=z9QXP~?Y (WUkRB L;9=f>g^/JJݝZ I.<̻ejPgV<Ʀƞg(b꧰@'_p!n]הVf>WSNԾA}@`\.S2 xXt7|5edd``a @eb&jj048 2N>i<޳@w/IV^eGBOY;*\uŕyv1jHMm(Fp1oOSm[O?o6>LJ dbdef&{Cff}c~ z `#8҅if;߮~Ydff"n{-sq#jjzzIf6Ce̜qn:ն--8X}P駞א(!I5;Fwt$ SJa1_pΑ0R@\.,g>N>iie XS1 3I3[$Fip0}$gywWuRۚz%98. mƮ_ij9xLw c4$IoI8p~S*zl۱=mde*| ثC?= (ǴuSB$55e[ E[Y1zh,pR7Nf6.tV n elٶxдՙ3fk&F p\e_3o;Eñx"ddfo} yyn9$IB{{;*}vl۱m4msaXxT(Hl 999Xp 6|ZZ[5ιc9u457㡟 GƱ'2 _?[#IN߽;?sijqmwRYeH _񒓝_7$a֥3Xwʅ1zhSӊƔ &c͊gEKWyuaSg1!D4Ë g+3/ǰ¡qŪ PNV}OXA?>iLYyV^w< kG 詩@C$~?@xڛo]˦_jصa3h $s÷t$ʀ3r4$YzU>ڊV<'AYL?nlj=P[ncF@$8st ʪrzK,1d]DYХ!#o;?|e @jdS|BiYiۈD"xbr\1< C s(a_Y)xM{gDhOZ~׀6D)^Iokxr 0)>m:fLYĢ{_KҼo;wг ،XLY̗ya vޕ%IdI(E/oH?4]kgj+dHl xoGea1VaS+ +-2~?^̚1Sg^FHl 8T[e+@[ٽw܍QMrxM|O P, ??rssU76`K't$6s^ynVm;3pmwẫU_pay;DmCcY؄n< TTUvT̹枥.vdjb565a͋, $6~_Q]r1\{շp֙j J<ԓL/wz;=2_s`ؼ} BӃo{7;\y!iAYKb>Pmu;pхSLnL7$IuQqYg(,c k󫝪;kq8ء \8sӞ#gP6{>'&fep޹vinLU\.؆g_z^u{[c((s,nqY hjyzp $1.kٌXA'ת҅1$W4]s]8LնWv_-2MyڿzlںfG 1457O.CGGjf߈SCcʲqca} v/?ʋز͘5;4}s b0>Sm;j(,o~eeYM݈ӦòUikA[W^wz{RWdI0ct4Fն|N.OιR9}v51 گ:lܴz!iƄ^y=c p7&N8os\pu_;CY]oPʚwuu!&a,cԈx #;;NH|eY#G]{p3]-ts:}_?X}ht_ӊ q$I{U[S/cp WJgUcAP7OmK4p?hvFwԬȲ :sQJe)37B! C@  A8׀ n7/$+vk27n@`#W .A7Sua_A8p0$`H! C@*KL4uVIENDB`photoqt-2.5/img/filetypes/wmz.ico000644 001750 001750 00000021724 14134304265 017511 0ustar00luspiluspi000000 000000  #PNG  IHDR\rf#IDATxY$[~ֿ/eUefZwWow1xm0,fxll43yȲ, ` d|׾wV][גd-qx52#2cz<' l01:HƐ! C@6 l Ag / Q aLqp?/|g!⨏ q8e(BHLpƐ! C@6 l A1$acHƐj&16/qT$Z.KZ X$I o 8 8p\pN0x0F@ ` $R*Ϣ\ȡV)CDpY?ӱc.^|1py|C`PTM#N\CDptvp!I"$J|: _pcS3BWH$2G( |:Էr#)&09/8>%, @_0T+EwO'eI׷3cಌ|:r!&gp8]E!b.-TKEeO$QDjb3.D$:֫ם)o\g@!w6!u~c 8~r17&, @O0)FW1TKEnoZ.FtZ. T) bd6/$]er5Л)[BX0S )ctQ. .\t@UIT_}H*2GlaHO'Q>uSnz*@ @$|:ah/,o#alHZC3uCQePVF¤sb.YFݔjU yMr h, pYFk7@@p ֪ʰWUR.b2(BU+9َKM>\cc1DԲ$?4L8:qEBp(WS 9dI2ŜZc(f8c[k(r$ApM3c{CeķPPpn6$aa!:BrQ6 {1dG4 0Fi0c#I"⛫ DY3 4ՄRc#sc™dHwh0 $-pܦ:Sln*+mpXF(uL 8aɜr+C2\:Vc(8 w(cxǨ r [] AllT#6#A4=5xcG(2ݏ1*e7!KַB @ cMr M\l˱ []aB9 <>o8lB] 咺x,K[_}@Ӆ䴡gm앺pwL1\:M-ɐG#0>o`̘SIoF9t`r&bHƄAۦV~A94SNNG ׮~hX~kY{ r  87έLLab&2h)˯r  p#n EרMxm9~='@O263w"<p0FLaSi˯v"{/nHT0p8ý W[c_WC1@dljKWvr'tpTZ~?)' >M!:cYe誃pp:19kƙԂ>,|FR:Bn WxU10Ps&N| Q_t~ ߇W-L@G":JG ?6B6|*r)Y9zFp2JR>r!ZIeit 8p Ssn;ɜܕHMj VpAp/8.IZ X$I݂ @ptt!8ǝ3fY~%|1hNNmު$'-%'P@|sw\B?hPo8ogN_Gk˯$v('pb(t;6PN Bwz;vPN,$(߸~iH][~:Y~շr'! t O('Ѐ >$˯jh=$.ԫQw(:E_H Ea3oE*ÀC u=BSFm| a*`UF$fb͞9B#eUz9BfFNl 18?}r$v atod 1fN9obCa Xy@@)˯K{ bF˯Z^VLinB5w۔_*H,  TRYx+'@@ _Ǭ co?p`Nq`˯Z@r9 zPZwX.'`` jkO?B`2?రW5's5.$.KY[D"KXǯ7qAp\cc1}f*0ƐKb{yõƘ\[KO!⨛hhbU/CT'U+~,$1/Z'f@EĖ!Mv7peQ/N[~-}F XCXWZC"xʒSz~_0A@b/lȴ%1a^v5m0P9-̞0PgXi1B6ݘ+M.' 9[Z~b@U|V=.sOxqغ--`最co} +1^)~ob*C/'``!@W-el@pϖW?p3_NC>BlA>Ak|~A!t=dz[KOP)4鰌1yl.ܰ9=j̸Qkw8 Ȧl)/]l9s'B>z(.c[[_Y~l VZ|t m,[.X~w!f VB>!=,m[~W 0Hs3ɡtH.\c 2ǐW̲)`k P'PȥSԪUX.l\w!'`*Pv疰 sαo*àH8'`'W;-`&pcoc1sFȧ. .L2 DN|]8e: pa`]OV!=ڥ؅?5],C9C c B>|va{Kuiѧ Y1bNWGLb>m5n;0f9Ʒ ( &'`8ZGvW+el0Y~( j %b΀Յk(!04B>|]@Յk804B>Fb^þQ Y~QriY]Xe7kD%ÁA.L_ccϊ~W1uƈd5> X[ 0& 70Y~Mˆs#;3Xo&˯yeN`$`N!مk>F$Pd5# ]Lј]xSG0Y~K#'|=1no*WPW&˯i8zvڅ9Y~MpRC|Nc4 ׫ 3'0Des|tѨ0U E֐?9U&˯VN@׳Œ!.ܰx *BJN {N@7lGKg>e`9+|>.kGBN@'~GTڅO[~{"z4?kуd z4[|4dz;|ni[],C i!L,aۦ!=h؅ZT*C Xt=mz*|t15 GT~0A@b/z |tsl@@ hH!'Ut׃]xSs sAdt߯#uIIlmL='0>*a`^D:;݂p h I7W1>5ӓgĖBkTu LcXA`|vݞA5@ z1$acHƐ! C@6B0 ((7*?~_$[ p8?w7;nUspC*&bt8N}v6\$I&i!$C@6 l A1 hPF1^8lڌ[|$i "]j\n\.9GT c^ocJӽ~oTJ%ooq=p:;Nbj G3bkp8xϾQZ$/᧿!ݟ1|~]-:,˘z ilǶ_9dҩF/1|׾t=R$_:"?O}?E'%,'+2yZN`k9}oB$]1S)/n'r [*"J9?#? w X[YB>aaw;>xOW>?HkY֓sbbbvTB7+4c bjq$:[*4?=j}#U@OWQ@3^&&0>1qT2jC>Gy"r}>y$G]Rp`3e2( 1 IC쒶 GUO\r+ 8؏'+aTe]0ΝMRA*DU sL&q?陁,ϟ"61B?=N3M1rGAȪ ɤ.O,#8/`2:0pXV?H\n~MV$)l/<^oi,#qt˲L:qɩ)ctRV~G^Ϟ|Ã}]S w W .H9"ss 8ff (%E.~~T*զZ<\!('\r1y'&pᛪݐeg8$&&:n8<CRA.lnG71 5uy SKG3Ɛɤw\X`]y Խ:IɣN:An^V"Nu /aHONGlZjX{:E[zD;nJ$PV7މ oO矴s|?p$T*( @Ab26>sM>Yc?en1y<.^{gb{Yn^t:r  psѷ ~~]ƛ&OGswUڽo|'H%j>lYw]҄y-\ţ:Prsg r kk[հ1B>xr1½jXڱ- ɧ- e!k/@Gl|i`ݎmvϞ6!^BPZe\x4?$Vjn|| |$ DxnS* a?1_guy i;1f;tccT= 9u\ɣ[>=._L`YH.?oIZE*y:NzY|َ!{dөj&Byf+Nzų8؏\.?h; w1 Œ04#CPS!O HFŦ8X[YT:īܽd2@3|} w=ҩv\6\nݳ(X(phߧZ! 846_VbmuE/o6pne/&V*чV*ߏ77 ރ74{o)~o5M$_ɟ =l | w1|!qϟZ.7f{D sc½x.!8w\>NL$ڎ3{jq\u~H61$3^ }$I]@6\˅7=y㖯ݺ%&GQ,7s@IT+erIRU7Vㄔ$ruVqÖf\.6ͷx(=kqH N;Ֆv@KL6RcvV"˶<ۃ@>|Yqi .\{|>??|(I 1Jӄ[6AXc $auev=ŹU,cmD\X~; br*4(O8p7>$u8l$Ba)Jxڜc;߇k7n/P*}( 'ԛrƭ; Ӭ 8sP(xm" A@:nix[un}l!qtAP.P,/7>5B ^T>xvoϧ7<:(z x 1 hMZA*̆qy ܽ6q5K̈́x,c5x/_<︭oF Ԥ&$J}A9L{/TZZ/]GhzoDSb嗋x ?|.qep@ p{^WGqH>_74 9lngApˍ\s$ek+--7o݁ 1w|ˊ/?(I岨vX0U<Zfr{[߅o?ݵDGbrw?Ԭ& l 溙PT|k.A߼/5mr|NYCt5p{>RA?|>WzM@BHNp H"`sc@07osǃ{Gæb[؏Ǒf~l5Y ,ڍ[WA8#,|sPFp\mdv^ Gp%~ {pMJ&X_[E6i(٥ɱGo[ȲV3l >s̆ @622-, T_Kq g;V*X|e:&VxY=(gfT3p1=;66kg&{T>?gf(F ^[v(_Y-wMLvxx8&& ;$g/51{rص' Q)/ZWEO 4Pu<Ap1$bHŐ! C@. \ Ap1)"aŚDN!0@BHē*b$IɤZkW8ףQzp0>!$D!0 @(H(p X U*$ٲ9cP8A~҂J Pjb@B@d€xBh#cEbH`lއ!%*W?ϣ0(-̃B c`H BM}L6T;<`eEXVU@Op0$Ow#aBj ___ƴwHqUcYU1^!Ȁ`M]C kWHhX45u(B&=CchD,b`4X"kVq( zB9X2{ОB8 o+ 4!hPENc@8AD\_!8O9|"@U{Od>ӞF:>w8ш%t:Fh>X$ K$90jUbq<6>,@Hx]`L#@d <$* -&cd"2`.&fۭO?Px2GBP(km\' ++aUH Q!$FX,$WÀxx&*X4 2? ,IlL{]W\80NB0DrV / p@ \h~4u |B"Tm5BN<8a0`ù>Ǣ<\@p5S{ M,鞛hhCt<BζJ a]CZz'ʦs5  jVN0;TUZOΜ'U܃dYyw͢pQ8 f AtdhEB0~&7Q8O$qǨ8J:,A}eɔ J} VYfo`Eb8k$ HAMY*K-,Y{)'>$)PUe(ZB*K P_YC1_f('$@A5uyvrĚr8S.S9 wQ,ںrx(ᚥxs}9A78L9=AmyWQ:(aJ-B9Imy!/ʒ|l\QB{ؓu7SN@$PQͫjP[^Θ)B fFZYS ˫P97c@0Mob2'pr i{~Y*1D(2!H)Q8ʊ򱬪NN8ߦY~ͬt%'PeK "Eywd H Uh7Kmj %cy䡶a$ݳap4U ]Rh9Bt_ ]2񨾤e1<h8x U*䬉.< ?EiAy(xDwZUU~bؼ($pJ D.(D@-9CSss$D N oL  À, ęHHtqjNuT1it7K{xs#-28㠜k@=# tᜡA9w.v BPC;"Κ1 Ho&$U'|` CcxbF1 pɤ3Lc;xӏ^&pBNp4 f]9ch\7X~3czN"hH&hx4u_MEtohhhCsм7/;3Lbq78!'L` 8u'e1H, mmEΤ7o&='<` cQi@,՞9cHC;bd 8o6zx" Er7 *@[Oǖ9G 67a3}hlsq*@ Dmp0!m[T%pbJf]s08ƱPM0 #7.zv]OXG;05fC0s]XUUmC5k*v G|:C>Cc[f3d V FB>cќVR.L`-`Fwp=d*V X_B>9gmuaf+-3B>ֺpMd 3X/'`] 41p=dIae`*3ĸ?{pՅS5䐏 U8؁^ ;k K![.Yڅ',Cd)Wrbk @C>FPȂՅY~mvIrl|̀—,T],*9K @.B>fCck[-`&˯%JNs1)ro&˯ur9 ^&B>GXX.zkY@D["G_`zW3i~\nª\K/Y~- r*V g 9 OY~[\r' ]8Յk&s9 F&B>-1U&˯H 39 d_pDŽZuaڏ\'u0k%;0Y]Յʯ\O {9 B>fIՅ*%9 c_ 8.l]Xd3 dG&B>10m} ĘjNڝl"jRs 00Y~C6sYs}hv@h qd+'`x%;`Duaۇ"c*'`z |1EU^.z T'伐dj&˯s 11'`И4-Ҳ pjbNxpQhۅT&˯;03'`X|%;0i~\ 0Y~] 'B>V^p0sV&˯ q{5L1.L_1h31@!S.<.L_9CS9 |LEJ.6a&˯1:'8Lڅ4c8AH,.蜀g1NR'+Lڅ_: IRls/+]UxQO 1􍌡g˥&֠4"'P''pџ`\N }Sȇ rQ9`J> r %nXɇ DR]\N@L|'؜>3a-CB>aYf{-RT!pR7|dHlƥxN08҇ڲ"0HJ8zJUgHLs/*Jq=gL-:LAXp1$bHŐ! @T lc#.YJwB@a#E|,]J_R[7dM ?7KPU {u:h \ Ap1$bH,jmNLLf?j2UrYLcd!! Zi-965R8Կ"x$~GrJ)'9q9<(Wnd9qsW"Ȭμx<x=ߚ ::F{W7.65]F8>%Ũź+~Z\EQb`?` p|K8 JF-pɏރZ!L} /:rVf;naxx֑fqUpx=|^5UX^_˗aŲzTV7i^( ^oǟI HUƈ!I44^/G/ly !/QGAEY_o܋7rm~c~ L/Ggtfkq7 }xqe߱eӂGgCXR[׮Á}75އ ׬̼:?hq˞/~2, FgWOZH&Uz8x^w[ yC(..ZKcg_@GgwZO5``is*BB82~_’j};%͛T;Kc6'# '~o|{h2g_Ox/ATUUZ\&\niƂ "q DQ]ݽ}xO-w܍144hkk?)<_1Ogl,<Z;mm}i004c'O!v<GpMcO7.8ǥf|CG?}k:Vg)%^:t bUT9G{g4\s/CHKHՍ}!O/hlk<g8yzzr}3O< .>ï~\p4Bê_Gaw 1HWÓsgr}öo2al,^Wj/hG1*v@eErlB'08<޾~CiO9|q' ;VǃRN?9.])_+}F]ex< ٍs/l v~VU/9x4 7rK3!Oݏ"99%%H$Bh‹?{Oֽn/~;|GUU!^uuQ`BJ~I~??1/61۳ |=8x^TUB&pM-_?|8茹8V~߄v鳍ŪU+fd 8vGf+?/xwEumT`QP[7cMm?=ѠCl0 ̌uK|i W x/>>goeZel2W-ݬ%Kj}] Gp9QjhޟϽkuڜswQ]]$S-)gŊeCw{+/00{K+eضyO4tL1C}>vEލ_߸ΨFG/#f?H?g 8x[ބ>(֭^]m ^6+N :s4^=Iey6o\{u[|Y;{r3 q\#NkԵyuU%ؽ()+]\Hڿ|eH[7h֯/\Bskیa'0vͪXNW\gyY)/ӵy04X<SЋ!mmZ-ddӏxzrCcع =<=(2w(..FJx^<9b8;kۂ|z;)|)%*˰uӆYR Istv1޹ &:Τ*u3Oapp.|5ksffXϋ;c'&lSg=;+^^V6X"ї^ypn۴'$wB $c&営)_U+aՊe֞e 8u j ɌIou`l,k۶F{Vu\\19~vlyƒ6m@qI{ցv]WVU"jC"ףs_mW PXukVZ;!)$*+ʱes8_> nڿw^@J<¯70kU+{<=7NC&TUz[Rԫ]=x`-fygF<߿ߕcֽۖq&(>k /2xMRmF%G $;mAAA>Ȍo${f .|QYg L&Ս^ }ۺ]TUb捖 g\ߓE[x5!^=8_5kWaYݒYؼ>-ף4=8tcG)%1tul}8I8x=v`*Wm IyGU!kқV,3f$AJTUV`kӊޱM3dq<gWuRH$ɌH}>o?/YƠ&9y~?8+CEQVZz]ؼiiC}{vч?eȒgK]GAAA#@ 0k~ݬ~I Yvyy^7؇&ٵ^y޹͸:W圣D."SXVW-XCn5kQSU @E3I3󡸸5UXbl;l–M5۫W[/C&kz<UhuuK0X=i&.j[W|lBo^w=B~ QR\"_)t1ك|"%n `(nlܴ+y?>~]#ONZR>i$ 7qr+8;OZ;ub=hXl)|>oJCx >ofOr!ϒ8@[ķUUI6lHQZ\+y)xbB(s]gnSqj&{ι~#$bi];qJ^ CJc6܊>>k1)ž=tYqz9#(n$$={߉*] aO5w]׿.iЕ l?/oqx(>W1:2Xq@Wţ/(k_jآvS|UsLNqb_?Aq~?n^J__'kY)Q]S;rꌮ%τxFw7Һ% @Bq'Ͼή\_fS! 2l_1|}q^}F(!߄6ɧOu5Xjj108K[iEa zVGNi@rG%:{\-8C8U⁏M 0qpR" _'|7,ٵEE-6BKse>ښj|[h0dʟ*+-ww7 l$#&(,*goو/[8raU^/ۃ>Ar~pEml,^BH/M ud\YRBFٵ?~yNmxѕBٵ{[qnAiy2_"LqGtHuZhnG"~ׂ{%fՊe w>6*.oK7|^9Cbc kWī=mߊbR%e==@2c±p=z NXCD*zg묎kzLXq1IEWw/::?QǴJyy(/+Œj,Òjj,Ǚ1F5n=Uw. J9Uceeeشyv&^%¾@2հs} |bHŐ! C@.&[EZ' ǣT/E^f;ABQ8єۥt\h \ Ap1$bHŐ! Ptxթ-IENDB`photoqt-2.5/img/filetypes/pcd.ico000644 001750 001750 00000022121 14134304201 017420 0ustar00luspiluspi000000 000000  ;$PNG  IHDR\rf$IDATxyt՝￷իv˶l6`0f1$adX28$23a0//$a8'Ic€7m־Z{od[RWwWwTU[~paKr7 A@6 l A1$acHHr\tPT YmOy\VpxOCVr_ApP YU!+J Px6! C@6 l A1$acHƐ!  LfSEVL+#(H2 YU*c$pJ(BH QJHtUxcc1L$H* T]1QENTݨtq:!qD1 ( (D0 !41Ns6 ( ETy<B' aP8Q'&;3'slRQp8jըr}! HkxC09T1 a<ª*,Si4@ @ G"hD$Hu"dEA08tB#hDBQgb8ABqbC*].B7h K#%DI7amH405OjY:`fO(,0D'  sh0ohotM!, 0#Ct!DD,ol mqYF!FY`aDqCeHV   z=(4x cC01&&5z;GQL$n aRHfsh dj2Pa?Hf@VU&&4'ʉ9c1@ 10ުd3DqSV ca t /3$dI oߞ qY.ws, $dTCjYU,Mp:ڂAcI4OOuEUM1g+1D"hOwCHt8$m8G, #NWc P]CÓe>88t`\Mf-Ȋ}}H(GO%ZzTX)ES2{ BbzGG76: 0Qt (@Hf)Iz$AbU}mpqvmCp, dHTHXc CC {O?f4EK `)+5xKp8`qOEeX"CY1Hl1шHXIwLM-0J:1 1ީX2}]-6$3Kg*Pprʹ81b14;:j,!~~ cpj.-r8ZoUͽ=S]!(bof(mʱ\`(#Y|>x : j^l6o@́Kj֥rR!IXX]mȶʔw(a 9~z{.JM!:0e-ڛ PN@3$YMuudknłr7ECBL9͐d:XV_g0VY~srad޺WF1qt oCXTSJ۲7Ht&h B7#9[J e0 ,27ݸC\C{rB@,『߼@9  N,B9! J1-@  Q\lͽ9tHQ o@ h+( T-H߇r7&-F^  tgo-1='`Q ;zU- Rno>~$+vO X~9BfH}07  ƨ|n9`j͇TN ` QF|=bɤmr$DACc[~sN9"o&-Cæ[ˆ]r$DLY~r7Ew  l~N 3Z~s9"gl͕LN hќ fCBEs$DnX+V 7  49GE,b՜@VUKKEfulj90L⯇[32l?`0CbcŜm@tcp;:,,U~KTN`Ϗ-820ÁvYnBXoIz,0c_w7T a 4=HZd(W,a͍TN d1H<%G>4^;X~ 9K (ىpxƷۋAS,b`?:|xUHaGoXa?K c '1X2 -`,'1Ţс,k&]x;-b!5ichN1`_w7yT9'`)P|ۋj %@Ko>U-f XF23 zp98uwgagŠU~KA*'0`:%1p{:;M0IYƮv1 e/Y~s%H.'`z`& @$ץ2Rv],aƜ@z%0]"tJ0[N0(C1z4RNBq,ci`*-c)p۠9]#Y~,9S !do*ىd3L)B>zC,ΎvL9^Y~YrCB>z ﴐ], 9S @fzO1Cd-.f FR!XN!b%oz0Y~KC&'1hN09S 8`z0Y~KC&'jМ)АeM'o'Y~KsB>hWhb;;Msx7˯'sLg!b0i0Oua> +C>aB>lՅ[>R9^C + T&oyI† R#|A.ld5 P9 dȧ!b;H`gA L0̵H4] X=h!b.= 1 Ʊvakxʝ(\i8o7L.\^Bq,9TȧӐ!\30Y~Gr%%!bjpd5' \q9B>zS0Y~MLs%3|f.ua jV2H|BT sJ_S/Q@I`2nʐOIK ]8cm#˯I2>)QN$07S 8nՅkJ(X%7GU..5l]C(UN`ŐoϝPr_ M)Gۅs#˯uIE E)¹@_ $(m'.ܦ.L_S윀01N>f!U]3:0Y~C1s @&F!؅?lkCh.K(Y~mC1s |"6 M.s0Y~Hqr 94S RՅg ~L 蹟.wȧT],%R1'PL|l)8.*kW9`j'Io$ݙnD0ksR!?l|@.A!($6&XXUYU|JGj)(dgN /Oy#%YcRȇ ʉ^9`2I!(7S9ѼbN@!0@O9IQȇ Cfr8ߜ&`@:A!0  D2I!0( U rduv aau5$AH0CCe%*"Uvwv"( c ͽ}z=k+% @@6 l A1$ac76bUqyayS$I"ẐM+ ty_{.K/m&FFG_6oF_ y9h<[P/ 8 EQ0261kns/ 7ވ֮$I4"Z(#cx}Vl~͒(E"F0᜾C!淿%O$Z3$ra8sl09#Gr>o43t/t?x)'SefSN<N>Y`щ9cɂ `ܬx{Q[S$yƍXTr,833ooߎA @ oH4X,އbl|\9qޙg6OFvˁW3tv4g1(1 Zӱd2՝5]4vkEYP0s↫t|$Ů>*w  @КVt1hitSN8g~: e.ԧP_[؏>D2] (1sQMJ4Hi^;kZZf)LUU,oj<xHAPb$z4ƨp:QQQ1gn"M;c͓ffsJ+O:I# @ `:jx9텬'XA$#P$ (!c[8ѡŋ~>*~,?2 1,nlԩGGIAP2wكizc+sUWVruupjI" (x#9eoy3ΘEQ0q̵WJ8{p:gI+c<.w  @pαPUY9H8ڊ@kkNKPW駝62()|^hݐ4\<IJ((_D9/iBN1usucP RQQrYC#5  @hυ׮]89T^IS{1d45x졇xBm!>,hr oB+C` |^/GpkzS <[O iM$j_v> Fc7goH EASc'MJD<?l\v}$eǕ] [@ؒ$h:6"L[  iZaa~2vt\~=kxr *MǎBè1iEUn (I[ pt*EŋSv*Z &7̧@(hX^ll|#ccXdIoAMN'j- T$ 0_tQj.]%G$8xn} )s/Lи`catTL E]MF@BP5kpg? >~8W Ѵh*4`:=xmmA]mmNˆV DQcXˊYQ&TU-[sŋ5~w/xonahmtFT4 Q9󱤱Q>=))0@WOO]n6xl ՕXs꩚ƶEeE|SNK `՚1$?lMWEQ+`,;}#R#7C}mMϫúU) p$&s: 4֭qDђc D~+uvjO; ˗. c 09e4olm{8,"[Z흝%A*gsW^v>M Wk*{7}t$ @UUe {-P0|fQ'4}ŋ ,qرgy}VL|G9AE(,W2@K ~1:6zݯ%CQU$I#ttwW_Ů>ʩ3pUX|y04$s[oռ8mp|t~H9$F҂?/;"(*瓝? ?˖,_¤GC`TqضM?9~shZQ6ˌݽhͨ$xm'"Z:,X9kkľf p})q[o-w3 MZEQpkoe6\x!wcٽb0ՍqwX+\q6XDYO9?0bͶ w~x{P_O_$sJX`ܴ #xp;G rۍ ֬? t \.8$,-%k ϗ`D ,hy }_tXx楗cBywydzM7޶icO0 *Nx=bْ%Xs8g:f 46p]VNw}KrÆ9'c8s7EAuUt-oW^=7}څֶ6 #!9.GN> p'şVt\.WN9OmviN! pvGMu5kkQ_WJnA:~̀$IElN%矏ׯG4Eph FFGF!+ χ4Ο磮@ڦqs d4{pYslz]BۍK`YSӔMOwBj[ژ9a! A1$acHd]Lh Laڙگݱ_q Dwwzʒ A1$acHƐ! C@6XfIENDB`photoqt-2.5/img/filetypes/psd.ico000644 001750 001750 00000023271 14134304216 017455 0ustar00luspiluspi000000 000000  &PNG  IHDR\rf&jIDATxw|ս336rdl 68 KBZt7{!$7 7BI !yv0.6,YV]>3c%Y2*}O>왝9Ϝ9<paI\7 A@ , AX0$aaHHSm0pUu[ 6ҤM)O?k5(c"B#$.Be$a(T v  C@ , AX0$aaH!  C@fJ+0"MqT$Ż;W(hJ, UVlQA!m$04#A  @` ,# ׇb09tl(B`w#錋 HR1((=Ddp,#'s.ˈbhS\&$DF!H.!T50sxV0GӦW: N7GJd` `=GW"Յp?3J9N"$A] i1(#͈(*/=E"@xJ4?n(J"\0($9G)SF4yHA0,#<8=їC"40zca r4 9!F+B+Tc`bq.!Rd;Cx` wƅH$DR 5&bĒ_Cj8Li8%&,b"QcpDD M PU=OsnZGhA,D^sдǛmHƁ-1N?zFʦ3A@Wa tiH10Au+hN"h?XahCHtʘI@IPcA$gB1cmnnQ@h$ M2T(k'7pv"zkcl<Arn(rݒCws;;'|a! ZS _!8%98{ hy` Pb00!c A`ktGwcb pmX HƁ1|ߴ|:fwqʹ8!C_]z4' M"ل`8px<1s8`s%i;ZD̪"~('0$ lpzYlp躍Z9g vup=`"8X*(@ǣ%h[~ڃ PN H&Ar8+Khoe{)aC@"$CBe}pݺkW2LdM $ 9saˣp74-I Y~rA0rݞ[EelpMeM $ #/"9(w~F#)  @xJ|^GCw 5EOB @xJJ0}]]\xyM73= QzBxJLJ蔜C$̞ =?{q&PmՔ d|7ӏ39 0E([Q2W?Yo0A@O & w2Q%MC]~D28|d[f냧N/F2S:@OwRd K >|A*C1"DG,"Uc]10Qdt":0&"+ 8$Dɔ7vPNc%dXHioH̑ oR͢0$DȒ7as R 'j Q7meV[{="oV)z=;aIWl^{~k'@@\[~iodp5" ,2[/'@@ X~9c%Bp-  ҂,`Ŝ ::&~ Wo0௳NNH [~8 )*kmM+H6 V YhDJNH Y~99"(cs|-H@$- HNÔs=" f  aol X~9B;&& c >,'"f Y~ `u1"aԿz[[LsEASY~Ƅ9W|] h܍T<l~S& Xl2u  qNDCf&r8o/4UUBn7Xf 2H = Ɯ,&n<n7Y̐0潕twMpbh=] ֝ٞ +Y~eLN@5z>8ū* ߤ^櫓7QFr]OC_k Z4;b0wDx`'2X F NcjXL,?c 4ٵoao='`:Q4UA/-hٷ^&sZ-Gb{#o9'`n?Xڅhٷ-ִ 7900FsUerdMfF$gV" 75Frm ^G{ўֻdM"qr>ӣB>h vaƌ0.L^{y' d]& [~M\>ی R!IB>1X(= X~N'! ip ˆ]X6],9C @"!|]Yd(F F du50],A9K:Tp[C CW9cWS  bhܳ nÉQo>~O^9ݟ|2Ю]xd2!gN@֐O&7.,9Lߜל~ |2!pw,dz VȾbzS1jhЭPśI\ǜ>yCBՅʯnz! Uo hܥO0Uz[O@_O/ ۃJم+ !L--8dz 誗" c設Euatr壽9 W!'sK'9 J_}@ί ]|L W:'[Hq%#d59 ʈuȱ.Y~HN59ѐOu.Б™ xu$ TEAsUefd5$L:ȺOJ>F1h(ݙ td9'8;ƬG~LV&˯-kШ!Յm&˯9@vR!B>I:զ.L_͜@V`LǢCqQUKOualI;CՅR |d+'ѫŔ!4Æ&wD4ɓM_󑭜@! 0b0d5/12| ]>G_3Tf.9V1 z? dDگc4W&˯ed$'VJ>F`vaZ@&HX8n;jg&˯%zi+|2]e<0Y~-GHOOe ,مk]2@ʽu$wC>a.r!AZtR dapn{{1Չ#eQҝRV1v;w J,FbkasdNR'{0A`:]}1ғHR'70A % $|5Qȇ t@r |B/c=B>'R]O@s/f+QH5'I,AdsS ATrS (hٷ7O~%t47( UQ^sH 7)jX \%AU@~A Z AaaH!  C@ ,̔>g~>]!A # Nݔ[nU_L! 0 $?mҙt2$a$I3gMTCQT(&^'M!  C@ , AX45!\G+&1 cCUouTU8A 88%ЬL@$J'clÉIv>cM(8tB{K z{D ۍ̚3s+*P68Μ AU5.I9G(\r7EHC Cz H${w'*w~AH( $lv]nx}>Os0e0.;6 c1쫬mś^jj5Ái(WO5gbʕ5w.lv;TEfMQ J68ypy(,*BYS^yaܹ((*nOI(WYoONcނ8m8 tr= 9p~YG4AG[+:Zx`vYN?l\aVͿg4CkssJ&"^/f͞%˖a9g$jI@0A@p(&45^ã>֬g~B9IcP[y?q:me uuh{8_ ,\=EA_Ozzx/O`Ny9[w6}|꩐$F @orH_=<~[ʯ3 26?W,p;}-9_'BUU4coWlqS  `Onٌ[o4s Ԗ͸wa/E1>./qgƛ^4B#v{7РYDQĎ#\BΩڹx>4Hto~v/"0C_ghmuuC[K 6l{GSV&u?+.8 'o*zUfd ̭ҙp]PthomEgG¡P; ,\&' c8y .+t  mmJV}6$m"{DaM=ab|q`9p:#y  5`vWU`V{~<އ~T,Xs/\[{ߞ+=.?g˅~;8n]Y@?45z^쫬DG[[B|%77O`HRDDlM83?%ӧcXiaLY:ڰXt)00A@hoNY9O!c(}ù看o܅yQH$ny]VAQ?B ;.F@3$G3:(ev;5VUU|{7 Z @C}u&Pd(O{|'vCL"+o6*N',[GxDZS4ӄ8/%8p8PT\3"c;ʹ-$6S66\_q -]݉!18ܵ7b|M [`HBp≚# 69sCd L+(pZejo6$h: 8,9G˅ݹЄ~-w49[[:XVy2TU%o)>iCٿ~,# 5mƝjc!//O~|u{{Mu㜣_~탁>ܽ;$9@k2*9  K47ğPtw: T>*j0s4z%I(Wir/~.472:b*4>R5B`pT#T1U`0bZh+aw8p8}V9ǂPPTi_7\z,wGk+Qsn,?mդpQTRo~NΚz)Ѐ'l,۴>ڏy97v۪*sd]A#ڵ ^] mmƇwPuuB.YO:iJ(X}ٸoݞpZn<v{Onقk%\zŕ|frI3_9¡P Ɔ 8WP&Yc EEslJx}^b_eec nN,^:(efi.Dsd]A)"2?9K*ԕp ݩ88wE_t3<>_ڎ1?\s ^{E=$*SU7%$:cZAq(='7UQP1ǟ5b2؏oKxtʐs9759\n7/IY[UUH?={_QJ>Sv~)Md>1X  39>wi*oނ?>w|7`ᢔ;nC}Kwh$2$d84 @q{Wᑿ>$-j;\(//8L{pE} E%D֫s(7,1\.C9 r>\qN]X3,0 W]{6\i8W_|/o݊}UEϐ+{ 7]œ`{vQMI; @H5 6v%1 ,'EK`z̑,UJUU@Uaw8p8S/ބ7^yv}Ğv/<O7M 0 ` uy#1Q`ِr"錗b,x;x waq16]s Vs~_wGLݡ¡-WU454hvhV ˗㓗"9|P\O W-5 =ƢxrfMWUp(ÑG"hvZa! 514 "B1eYPeNzEUz;,Z3&Լsz q. 1h>mL}r" z^ilԴtfz `ʕʍŢs"xҰ X|.Kz7M-´!"jjs[5m_T\%˖CH 쫬ľJ!85Z$['cF"Ch'yt_$ېQ#`?m[PMǓեAx'l14{_xc+b)Ue^|Aӧqg GVq]Ӵ2_yuǁ|&@ /KNC x0AWUu[oi̼G~+?UQDsc#{ 鿡j׮?y U!@`"{{?< 7migAp8j9ix0vp `ŪU%)-V` {p 㕐X mhk9ޞ9W_{=DIe9\C`B{{?[m/9ee8i ,?u%_fnhmŞv{O[qXzu&b(ܶ-m(+_%KO Qd uuh֧@(@_ƏeP1n7]!5$" +}͘5 H6.k֮ſnx}> Dˆub.;O|eF&c 7 7Ƙ^Mgo"nm(>:H w.OÁkxn]p{<`.֬]U>cNڦwH&n* p{eElv;z*N^q*nP_[]]ٿ-MME8vNEE[^%˗kIJ+Q2c$us;״27l68z+(@aq1K6 NsĵH?5HA$lUP՟\3 VE@wWӃ` X, Qa;V%(.iw!㋯x4Q o͇UՑ¦DL_oiغnN>4w2K3ܡ b<D , AX0$aa| $Iв)A:AM%;y>{7A;y{ A!  C@ , AX0 CIENDB`photoqt-2.5/img/filetypes/palm.ico000644 001750 001750 00000022410 14134304177 017620 0ustar00luspiluspi000000 000000  $PNG  IHDR\rf$IDATxy%I}߿鞞a"V 2V@X C؄/Y-"#BH,E`+D53}]կwzu>1ャoee} AAp0$`H! C@Ɲ@ 7Cu%@G8gpMx>).1Q .8YNCHJ9! C@  A8p0$`Hk&Nc`YI5YA5)B:NB=o6.pnn㻃1@H1Rv"!ģaqHRB!ul8w P^@E<"$  "@BB@Ґ;1D6r{Bem*\.BWHA"^_A|' !˻!G?=R::MUVU>PƐC2""[L3c0Qp .5$E ob}qɝ2A? c R:͕$bQ4_BK:Vf'u~62;x4 $ kX[N!bu~X&l @A0DCX_+ڈ!4h$@h @^(sRW! 8YJ6 r5Л)Rׄ$9al mck}Xt" @ҩ+n4R*us֍$Yalm a>uSQz+@ @t r:m:c?(bmRׄ($ @, YJ]RIģMr 8YJ#Zj#dhzQ$a TRV[$1KVN P=$`RɄuۮ`IiԷcG#~24wh 1SIK e)m|@HV称8KBp(wS dIĜZc88g' h aΊu. Y<;T"Z<^! L c ul-8Gpiuh a{Feb#Ii,ό+HX=zjNr-58wlZ c k+^_cпqlW\^Q !8k]ne` M\#Jbyf r !G0: wYdd!xQM`acy`V!f! aunVg4$P KUd|+y -K 1p K}6];~[~%'8lJq$:}-sg)'pkH('pBw YטzPN0$(e,@9tC@3[L('  ˯jh?=H]Ȭ^*ԏ@@_GO-V5'`ޫCXV5%'HM)巘frf)a)`U˳F$f[ 3s$Fܙ9Bf-@990vs 'Ǭ"pZN8fq@ ' _8)'@@U,a({_;߿G$DQjٰ{NW+Z~,'0fIsS!Q,>V\mNPI;aۻa켟 ;X~0'@@M, s$DUX~բB 8N`ԃw.b`s1 L `su6(hUlc@& <ّRqWpd k3X.cL?@2ܻ l-;l/170?>Zc#ّ!thjbUe!ӇH%.c9,MϼZ'0a@J17F֋8=YK_D8huSQ`yz BX7a뫺2;\+KFl.Y~8Gpiu˶[ c [kX|״C2̓ĉbzNvN$ّHS3 mF}'hؑ_X='`;HN$0α'^B`enʑbrNf 45ե +1M*~obU~ `/'0gm1fxMu.i9 ˯00'`UGz)vAمk0& Zcjѥ~ֳ 45'`YKÐ>մ]׺ YZ3L+z|t"vზ_Ӯq?s,C>z`~0Y~̀irB>:;cڤ (9(gM萏M0Y~M5~OȘ< huaL%{!OA O`v̨,,9SR|tA,L.,2gkF̐(%Á!*], 9bwtd5? XN`#\0Y~-Bs%kf sۅkJ(=Ac 0Y~Gr EB>z b&˯)UNpTGc2vd.{9qVrc{ cXTGS e.L_K0pf< 1NCv9խB>a4 OB>QJ =D9iN^|(C&1 r c  i)6'P( !Sr0'\^PvyL!01r|"yT/΂\>F HqT6+s#C)Zu ,4cXCyU f -Ϡ5@zp0$`H! C@& PVO/ J0 c'Y,|/Ð$uQ:\.7;~9S-hDZAۍ5|!Iŀ B0 A& ! C@ ̉4 ŮSqb>{BRb>Gfzbye d ;2crse-ʲlMʎK9+i]\.<!GT2 W\zUlNVa|sp=XZ\.{/|J]p=BMm-ZZN gϝGKiT@2dFW,B|~# XQS-o}MMo~#P$ގ꯫dC8091^q/~-o{ /K:—9,e|ѽ}聥1~iֆ.֗^D60tЌ1lmn௾x48P|>?Tvmfgf~y76RJR龇Ï ֗cmu?afjzβ{dZZnRN #\w.]{}x>s/h.sLMcvzJ8{֗ߡi}:֨˸dUy?zPQQSy:E牛q*V@J1:_g?_߃$Io0߇Oϛr2#ɻLeuG</u @%O?}dR3H&Wtt*u >qcE.uu ZLD"a|w??hyʿq./ @dYFs>&2ư0?ѧOJ]]CS$~| cO`a~ϧR)uߣf>F0눍sGCX[])uU ,^oFOi@_}wv}Cykf'11>uN{uljJuu {3l% xP5TOo3!sD716ir\#.H8=xϽȿ1ưRWp#.^ė먮޳ <& lmn`rb?ɏ|K }o$Əsoy[Qaqa#O,WU]h$so14Џ]wJyMMoAӓ/u 1qxx<^x<^/kjp%w3 owSsg(j9<Ϟs.k!z!ª~Gm auy}<@ p93ǚ5{ o|3>/TK5`nvssEK{9\,++ǫ{h;s&w c#t<@3h=v?@2@_^q @YI7#jHӸsy-|h;1zskj>;wqڍf116ׁuuqO&Gp} )y箭ϧ}세nH sPQYYP" <{l@,phBeeՑy0tk>ZO1 ,!PQU?PPyөST2 Isa<nutBiͧZr~l]A2.\ֶ5 bmDEe2dSJ yIս{D,WW߀WA%446+9grGmN9F)9G睻~$H JT֧rUιRY 8 YpvgD}=m=l-W;˅ǏbeeH:\n  1"T\݈Es[{9v9;31LtE:vgr]1=5q!З;q9[cV a HE젯;1]{Yq5S,rqBE8ƒߚܼ݁ʱŹ-$slUAN)pαs/kUYUk7o Chi9s/ ^ǎYn<{ct &Ǐe]nO)r!J[z466sm(dxK9˵nÙBX~dIBoe<WU5~@ *.k=Rx|#Ogc|tV;NNT*{ʵ;n7;vw@3ßw; (3cUgΞs!?oph~򊊽!280?;Ǐ0*d᥷@ PP 1Nx+PYUsILM͎˲KWTk+&&?q55N?'&8t:]žx ^~/y9f1>6WfeYszLNmoaox a!@Cc^qDr]^Og8RTѝ1~#8s|`#\cS3.\r}5uzzd 3lN~V?qTVV)^ t~Ao]GϤR)ܿW0.\c+o 3d[0CG -O18e;wǧ~s/|67604П۷(/?í۝ys UnKW)O"P[W5:mE_y_sLaf*?. ;r .9wvs18dYFSs3^w5fS3@.7>[Wċ&+T"Cgᄎ WWVüe776'UM{meCquLlF2\F,g-wu768<9F__ħPVVwW χJTTV U/'ms<bˍkE:Fo=g Yhn>W^E ,x;_##յw55Gx _K/}fD Ah{ U5>Cӿy),MYpd:I\C4)γ㘙Bswk _ ?:u8[`aat;nmn`p_%C} DH jI~_M΃̰Gq@`akgqf;hSָz g1>6S-- B3v[/^S7kO"gh4x[_*)!L 0Ayx ϣVrGEe%"pβ}(;I&ziIp%n;'9>~E8tMY;;o$:8-z/ !P[Wy`ey Oˀ06/j 1c /U\yq#!θl޲nD}CcQyrݽq=PZq6 k@]=~t޹ ObvgWA;?Sf9'H,˻[!-;>:GoJ]ϝxKe\xϜ[vfj c^.`Pv?t9$F-ԄWDy{ON҄yJNz.KQmɱ@e\z ߄$g !p>ߐF-@YY99Ьbc\nS\~#^Y#FN˱,x /3%yT`VG8VWZ !py'>T*ozA[1<#Wv<Zjz49/ÊlqM}jeN/,.:r.v_OYz('ߌRKˆ( ZCϫYۗVX~ ! C@  A8p0y_r,DupP{?5Ȳ}߅܅{?[. Bs`H! C@  A8T}IENDB`photoqt-2.5/img/filetypes/cg3.ico000644 001750 001750 00000024407 14134304076 017351 0ustar00luspiluspi000000 000000  (PNG  IHDR\rf(IDATxyxսgfXo=x!) BR4->}ýOJ[%rY ,-%@IC65%/-[X4Fyi~#Ι39 .>H"! , bH"! ,FNՋ IRk%B%aӶ*W/-| 0 Ad Q$Q&_ , bH"! , bH"! , V`"16!ӒD!6EQF($" # # I2SZl`6 |H%$K PI!ٌ1<$f3"//99fp#! R @0"z{}pzI)?'2aP^L`dYafc,6X,t44t ԙa NZ!HdQ\l pQ--q nh#$S @q]2PX;o^ lp<$9ọ,y1yy9#4 ,X~c*2D^BkHD ԁ|z{}pWU'55x堤1FJ"07"9fCHȲ(/Cqa`a$O0J>99f //99 u~ bul/Q8H4BF:(* aBa#q, Ítv|@,RWׁB89$c Иȵq Uv#kM06)%o-@Q]]+)Ako|5PN`<$DQ,=[~cr! ʨץ7 |"$s5$DH7޺('@@$_=u4 B@$eY~c]aLZ~ڿD  4GU~SU(%*Ε no'@@MY~cAOk ד1x1zN k쉲9L47HoDr]] 11j0]qi NHĜ@ @$ٯ]k.ܜvaGQrΌ d $㢍=}IG2jG2b0Y'YǩvzV,S_ߑƲB> b\TW{"sH@F @004F 7d~)uu!8م\2!'Q0qqqm5],%r#_vf m<7 d8r Ng>ƣX~]dM2z d$њL 79'{*䓌FW,0Y~Ss-C> dMz VIǎe],C9 @B>ɀ1ۅǩќ~] @C>@ Z~oO5:uuO@wO2dzO@WO2Wͺ W_i?] @C>@ juat%jv>V&˯>KN@N>}K_@ |2=؅oH)5 W;'V['prN],Asi|Ǎ 93'{'9 TW;ܜxf(=9 @|A*dLcp) \2)5Յk&o&@J C>ZՅY~39TR&I kke7I~)L$7.X~}d5 DIvބ;b ˯HeN %`֌څrx*'T i]]8?6Y~GrI DV>|%fb׀"'40r'څ1}Noy"qRHdC'(vv3<Y~ 1%/'dS' Z~;kpT15W&o'f!]]xr0$#'ds'LgU~d'P'9D _odN@@!"#mhoWdn $$I>7:' $a ]x߾8pX$b"9|l愬 (:"g9Z c$r1 |"hY(C@b ~ ZZ(Czb4'WT%!}SWcyTL6Pȇ IĐWW{N H|Běliq"  "jk]()Ƀ"aGe_{>0PSDAA.llRR;0A bH"! , >-V5u#~CӶ*?ظô4Ad gzrvѾ+Vp8s"B% rGvȲ Q!4 L1jX$, bH"! ,&0q,$I_zqxs`if65J1m$Hc0Djey^&6E"@"(r&4Ng<~A2L&PQQsgcѢy7o.JKa2 AFIۇ&w~ ٌ̜YEaɒ3g&;+H ?n9҆v::x08(8fbΜ7o.ϟX,nF "s_|ovދ D;1`bXj%.Ys:JK!I-<|A|!?s'o3 "x"s\p9Xl1,KB ݨmg.yTubrsmSO]}TT HuI)lLNqpo{ݻw Ō˗[oUW]! bǎ]x?>ӟw;߹gq*L&Sal۶--z} 1ApKiӵKQ\\W[ۥL8|E a[k@{Ͽ/&)yMMغx:; 7Mp[`D?_|QIc ؿ0:z?`嚎 a-x饿i#Q,qp㍷'G?^^- 1Q[b[~02@L B1phu˙c.tӏ{ޤWDMM=nv|5SAJx?v7Ύt3eĿOw9iwy?;hGi Pq8z?=how)klmu'?ǎե]k< =N !9r,LI(~ܹ;ݥčdݞ<;Vzzzv )Ku] 2 M @8ömoB,_ ˗Y` tjc۶x7}$ v{.q9kfXd! a6GɓyKdB\tyXrqǽ}Q g~\~qmdH8l.;33gV_+pC lr JKi IRu/**Yn;x@Ld3O1`Ӧkv0* c @Pu:`6G[):8 #K(aŘ7oNԶǏ7a`AZC0/@n-j;YᇟĴsH碨H<P@e8v̜YmOO^cL$X̘QAccKJeUU30\U?G < &`̻eƺ4B$bŊe75fWsVZ;{zzkOCx$IKnt@0V֝zA}}&wخ.*sXLXVUpL100CSSkԶ < L$8ըPرZl8zΌ|7½>ʸ#N=u9.]N׏O01C6776` $I‚'sתsϽ`L#7jjT?W}_>8 ƾ} "D|8Cw?W3fvNf$`6~&eewu?ڜy8%8Y<ρĞyÎpe7[o}d/?A&=t0 <{pݿҥ``dIp晫p3~snlp>L̚U-c Ν J"}~ut3eee%xlbX7HHp8 DQ²eSņ WdJJU$a֬*<捰Z-mso{l<'oުf7 }ubD%̝; ?|/|Xxǰl =F ,[X+M7]23,+sso±X, ƍ!<I`7K/Q]]Z `puW&<$ V7x W_;jj^瞻7p5֮=}xג$K/DUU>cڵup{5 &Oņ W F~~BOɂ!x~-[6kڈpYtvO;va܊ 'ʲ45ȑj:tǎբ ]]nx>Bc<,3;KxZkמ%K 7W e'bv$qE@GGtuuQ@Yӌ<e((ȃ 1 .W]rq͵3f%%ɱH|E F\^݋|$`ժfQQ!KQRRu/V@#Ϋ ;PP?ҋ< Ȑ$,vc(**@II!N>y5Fj$I! @ل">v䑥ĉ!H'ݕL_O"R , bH"! ,&[UAdWW]vc=M* 8î]{$¸Ad1$ŐDC@Y Ad1$ŐD(ZIENDB`photoqt-2.5/img/filetypes/pdb.ico000644 001750 001750 00000021474 14134304202 017432 0ustar00luspiluspi000000 000000  &#PNG  IHDR\rf"IDATxyt՝￷[i-y#c6` !!a $lY <,ofrޛG203#,3acBB!,`[Z[kkkUGk}|tT[n}pH;@q! C@  A8p0R6o¦OUJF&`xm%'> YQNAhDEp@U9dEB@BUs|i  A8p0$`H! C@  A8V`8cK+ c sCe2Ҳ EQΌvA "\. .I$J4e@'cPDS1LbHRn1$ " iOHi)E&ǡ*8KN9P H`|r.IBCmU~DQ$! J @01158b8TAiYD(*~,E36x2(&&'*cf b|rX 5XVW (;$FF,c( O`U2x=BWHdl"a2J0$25,~S@2DC ~ 3t<2jh$2EhhȰڈ1 "L@ H"44t¨1L SfBHr*ag̚@xl6 cID%Y/8ECtᱱYHou Xɩ,c hӱf'u XYQ04_e!Xcq S]c"J¢,(;"iLc*¼,(FwC1(y0d:ejK aZcD00sChh4 y00A)Z^vCQtez\)IM_njAdaxt ᱱٻ18L"Und KEHdt:ξE68ص!pܖrrI$c G&Lbzcc6q r[ꫨh5D2PzLY*QZ 0}^ 0=d*^GXK 0P[v,3[Y7͟`xQۈ`91ns}^x+*L=8]FwE3AYUU"Eu`$QDMU*$}\o߇1$zmq. TW0~|sThCE9!X˅ڏQ̀BC])/ Y~ 9 U LwQ5rv/Y~rCQд4U jk.,e-  @8ǃ˗eێs+/$/ٜ@rZ HU0˗C4hq`Fx=nSFE8衜H򠮺 %Ie9Eˊy C'UhY_Aj>kؓ_^ *zfL8xC9$hlG˪ẕX~ @Txh^фM|`  ǭ^ m;b F2VFꪫP 25$b8U\E`KP[UQM?("SS+SylN.]3R$g<5D,@t:h,d* YVr($ 7~>?*f1щ,:N d/.1].xZϾNtE9[N8ymѧT"`N1wCooPN`aH巠>2ڻ)'0d,a-"0q ~%'c7:,$DI)巀LMO;D9(!X~wr QB>&L5@$d/ٜs$DIPU]3_/UUHV0o? ;zU-NO- bo89'@@Y,H]`07_fpXNY~ 9hk{8m?hj-'@@E27gHZ~&拓r$DX[N c5o>ds}6 a5ot<'@@D7_  oĶw,v yceo!9'@@٪;H[v 7Op(bt,,,'`zC## UUB"iod!;#*8Սa<ځFn9Gc (H$#;[~ N9 c 85Zh$CG;lnWOb;l-Y+jF{o45V[.Ȋ;1>%rRc/%P{F.Y~9[ @'i1d*wE4f霞8[V NcNOP{;Ҳ5c h#N;=c NP{\hmçX~㖼ˍs^ ʊ1P?B =(haT3V FcFg_ s#]+_ߤl!1LLN΢>1e;.!˯X5'`yȞCGKSe!#β 89rsĄw-F'c&˯>v ,-sC>P܌c= W9^,+ |J{:zmX~G#] XR ۅ3Y~uJ9K @̵ O.L`%@KGovwmdvrr` O)kVL>ӂ+,#|JՏP?z,n&oy0{N2Phȧp-n&oy0{N2PLGo`i0Y~ c5iNWȧ],H4'`j3S ]l-Y~9 @)B>@` aM8̘0*S :zLo*bƜ)!R`v0U5 f N)EM]],l9S @GB>$ \)'`*w/S 0f\9/Yacd  3|J0s؅7k 36'`0?dOk.\dٜElȧÜ!|g,vaZUUa@N`O)PT,vaZre+|vakmʝ(X1SsFqp&˯u1"'P6jȧ̭.,֧9C>:'ݡ~tdZ~^M9(!S 8مU~dV@` ȿ0Y~m c)~%;|JAv7e,!ǿY#Y\)s%|J۫xM)uN@wpRȧ(4څ JUћv%9t'|&k~ՅL:KM)s)>Y~Grlȧ߹!RPua:R|8΁Ý]ɬ(J G1b<2I_wN@*òLȇ.ґIS B|:oǒ e.j@!$Fi;=s |A` `x%w jA^9B>a -!PlN@Pȇ G h )t?@!07r UABs9aBE#AK ^3acCU0wn J ! C@  A8>׋ ID$ %/p=k-A!I"O:PSc#>~ne (=$鏯n9E0AXGvZZ$C@  A8p0E hgٙ@U@Fwѳ$E'PT%c$ $A*3?"2RT]c`L( p\av1UUu|9in&"\QWJ $I`Ͼ}j! 0{~TUVbYCVZ8˗-C ȼx""^yU辟@հ5c p\y}DC}=VXcZ܂MM BP?q $  TUVͫV㱶ͫ @ 2#;(r]|Ϻ[Q:98l9t||ذ~=@1pxQtn7jjql1ؼi#ݶ 6z (##ˁ,$m / k[gEXEDGB!Bkggn9^s ?o;^o^-c (LR0zmxa:3Er}?/^#^~OMuX =K|oh;]~]h-[nOSOAgDmqwk6NnVz-o*7tVLƎH&Fw#~Wf&`}?h,35㩧;vr;؁{azzZx|p_[;wZF (NݰW ȈF16>a=55ǟxgu\>ůW5ں^s曛|#.EP+EU'008#W^} ;===8su] (r C*sȊX,!ٻO?[HӚڎDۺ~z .88R4ՅwC!:=xT?}!||v^JWm1m>qȲntמDPS]M9$p\n^,kh֯e|>~tߏsja޻'V[Ѐ+?w^g*=E"ػs?y݃g~[qnRUUէ֬9s7g>0jkjH@EEإj+Y q7nUW*GRlsȲ 9Wg[]] ;?}q=wFq3( qϗTc8294}D^_zǣ:?m⚪8 +WVeLOӛUUz<֭;AS0DY.Z9c_%Xg$^~O# Vc{χpp1hjOvEuuy.OLvgfE>APfA@t:^S7l7kjm1(Lb*.84|8eOqmOD"8|!3A c`` gۦ&46.̅pij+I"\ː~np 36BUU>rBlڦX2N߯.E9GKs354hjݍ[1-[ dʙIYQ_=9ً/N)# `8{kj_]S [~rQ]]MM~`pdE6Ncdd"/T I=zϿ~H$ПuTdHʈ x?KSU>+sTTTqb 9Nӟ'B_sd HSOـ;o-jKN AEڳgwZ> .ː(E4E,}./P?Bu{4Hęj xOx_cƍ}/APUUm,0MZ]+W$E9QYU UQAF14l<\~F5%p1y8p <{I4._󶟋x N߼ E ɨ]w| +  +jE=c`p?$p? " D~|;wᓟ ]n4Zح?S[!JiƑ~AkTVVL`$&a]w+4͔Uk-Qv{"|W|S *G";:kn{7Ǘq/0#$PQQfl;k+.gpiTUc9Y~?***tZkVTT[zwg]}$2?(< 0"$C L%24^uX8m/$IeÚVeTYŲ|[]008gx-snbm$E_*; *cχ@ ``0 ̻lߌ"c 44 S6l<Կ/67v`-eY!(6_O_tѼV>6 wJa!<2w,VmL i6 ih2h rHU-2,*TU3 8|FFG5_sܱ,իggWKӋɩ)< E[;wj.x<uf8`|bQ5*$ć`a8+9nL$H$Kׂ  > K/Cڷ[MږԔKfxY  fE==EUݥI $=?!Ggs:~^LKvIYVͮnxWOk>gmźjS$s'^} Mj,VPGgGs(T2H>^|}|>\uze}60{{s{1$38׾yKb"Ja">s_, X:T4ή.SͿ͛ +jFH(g? +p7#68x[;ŗ!S$pMNN;q3?"/<a󦍺Ewރ]] *>Z$4#Iy𥫿`tW昖| :+?w].HEijl^k[[]7#(3N݆o?m b8Z X^p.8m6\~>u'P_E)|C\p΋[\QT-᭨@ epqbؼiNl[:0d;>E~ފ A4565a㩧Mqڵd&H9—%s1a!wGUUaz{ݚnn}>TUU Eeen{z}'U8q=wuA`$n *+A}]jkjfWik`$I. ,<@ℵh[wdjg+U2UUqʆ Ege!X+dƭr[N@`H! C@ L׀  ID!=~sNx{\ ͝;sgS l! C@  A8p0$`?HnIENDB`photoqt-2.5/img/filetypes/vic.ico000644 001750 001750 00000030002 14134304256 017442 0ustar00luspiluspi000000 000000  /PNG  IHDR\rf/IDATxwt}wf ^ *XdJTEVHR,'yq9qr%bE֑?ǶIn*X'V)IX@wlA ؙݝspCݝ;~KP0K0`0 #a`d0L X҂ J.` e  0 6E nCEo#0B~? ߼BF` (X]_SmP(<By0A'RD)\>H&WA~B!Cw/o07HJ%Շ @W:@!/iE@R9 !Ԃ$!bPJ14?9.,ap5bsoQb"^!Xz1fg4ofHYB!pf9 U Uq `ƥ卲![\Ăz*` 8. 6+AE (^9LOzS/w$ !|Zk DbBWW1ٵUL,-^@0ŒV`5Y vf۱ J)f o6:LRdY-I[,|7E5!XZ¢63Mz\:B,Vح(En1 b`vV֋A|`K،9pr❚#yynB0u蛙640BHxm>?U)Պܬr.n!nCs?eLGuWx"7+ v_(EAv6ToJC18?OfA;=7L(5QbmTՖxۍ&@i^Ptf͖Doa&1ȲXPTT*[,((0eRCXN !Ā(EilE~~x/-Y{9yP ,=6@ӉUeM(@ im)\U%%|R)rxa90U1ѧnKP6 I%D`eyyWZ{OȱQ[^nQx,qw$'0r0<ԖéSDݎeMYN@ LDCErsMI)类HwњD,qXN@ L >^S^Hte)Aqn+*tYD-r9'z`I+ ,7Xzv Dv Fin. )pB=, L,76 ܯ${w$'@k>>|Bwel<͆|ym6pJn~ b\Wk9FXYiԤ0P pa|AA@0ҐGZ-,X9nfPUˆB0rrĠB9=@eG ,τKrWO H> Ԙ}˿ToB07^8B0rW AA@߄hex7L7zW-[~f04Cora04C/oe04!*zr `͖_^ќ@&':U~u@0TG*@3z=& UI70Tx0T(DԜ*/`PY~!sLIcTo"i9&179 0`$-q_(19&$ sƶK&0f򻴜v~rdJN #a.[~TodJN #! 0`$D:Z~%rLqΖxL`t&BPcҜF|/f 0`(,D0kN C1R /f ddQ厁r#?©!L,E:T32FDJqqj㋋8;>n*ךts~2By ̓8~tn@G+ҫʯsS ^!s59 m!wpnb!t"3, M0B pv|PENOAd7Q̐0Xx|z[\L듨dL-_Zy񊒈ss1D&Z~ R!^]El_(ΩJZ~!0B[qA(?1t!Q2/0΍O`ͷ  &'!fxLU~ s @4VQ9 elU~ suLR.E%L"Vʯsi05B8D) $K,2os `ܰ]x,jΌY~#si/"蚚ĜkMէG]Qo)&GZ6B>\QGtwUs~fMt \\EKH.<'4}d_I@Z !YDܚ>HK !`cpǹsHKPQ]DvafՖt DG|#& 3˯CN m j;f., x H ;H{0C4'0dМ@Z@!.D- F ^ h]ncX{Q˯̄sh !-ذ OuafM szm4lxT hAUf L*'`X*R]Y~SK8'1TN@,hт]ظՅ(PC '!K|n_0QVf_C5FNPk%t#+^t.,Ƃ#c JhAk<0"kL0:E؅%I,#'rHd%t _WN]y׈a= @2+vѱ gU~ Ms)pg0!-ۅs B0,'9 @ؕY=fsuazAA@ D.|& dNOaL~*'D-Fh(Iڅ7=IUN@w).vafMc *Qva 3ozy=zo @8|hfLiU]R!fMk% "! huLT G-=:t7}C>Z@AU.,AϜ.`\Q]8 pe2 r C>jnp;Z7( JLт+1˯y 4 h"fhfp<0˯y B4.D * 3˯:'\k%t!\]xBvY~3-s @4s.B>j ,9`J> M.ܱ]Y~3mr H)24[ۅ7؜Ps=U쐏lU]Y~3Lт9`#3y)C>Z@+’$a`Y~3nN )XdO$l^zq򛩨$a3D§GG(2`9|dlIY~܆XOZ $$,8B2[!X[g!#K6B>,`9ՄŸ| c L%P, 0!:8hN@ g!À$(B> AI&' +Xȇ08ќ@>Y'* `8 aHdfgP;ǁ'opvb!Q~ CA Ntɷ}`d*`0#a`d0L 0`02Y@GV+d0cNV>s{ li#]-~~dr67Cb` ł7ސm'+$"D3 퉮!!d02& F`0LRK1BH俈orFR0 J#z$I1GI9Aj>7Q5+kkzb @A^ tfF@p __A䘤xj*Po:յ8ڊI,INg'J$S쯪:.\)]RJQXPjU !8`cc8sDffvc ydq:Q^ZjikõywX۷aN)EhM&#gyX#™\Dj D)_}߶W?S >!XsW_ϟӛZ,#zߣ?'~~oI('@ͦړ8xi۷̌lObqyc.N<(*(V{{QQV6r^|dQQĽwߍ~۞oB0EON&TBxfCӉBٹp 6UTƺ\$e%%m''137G% ]Ի)kd =W4pKRana纻w};;.xO ^뭔 8 ;vZ GF>@wp|1tߏo<߇O&~\J::dcF1Aspfg`sl`(}}u *GFd磥ѴOIϏ?G pQJNg'| UW_ffRM1?f\34?b<'^w015YٶUwc]Q o;=eBY_ǩcfnzzV͓''TT_BٶAx!}Xse۶8|@Nr`zvza,yCQAWU,/GݮB09=# TGnlȲ7v;lVk"D)ώ"$D)܉{1 &Q^ZɔDz{u돴jh7^{-(~ݪݻqѣC>l33$ŭ7݄oMM(-.j(Ip{<[#߼:.~qݘ]Xَep7''|AwEOREx19=8q .]R=8},PJd/U øAOC\8 ;bLَy|G uGG=$د8_>w!_%{ pfg_a]%ckk[oO/=z{(d{{ٛ|쪬?<щ jiѼ'`Xpѣ8իd?2<6?Pj?oF&ł#mm(9! KKmUU?js8.1+nO>>!n EqÝ ,/g?)<3v`]][Ùsb޻wv[cή.ݺϢ(BE?Qqhŷe|ž>|> r"R46 /Ogщ t!lEE4NɼXxq\8XV^UU1?35;}} Mj(PԶPSU-tIݎ 1:1!{.(0AH:υUjC<9,d[Ehxrrrz@0̹&`eugMۧkT]W 57v}>txã%dIYA153mYI vb $ZkF&oϞpyyZZd tt<^z5ŵ{`qZW(Eء\WooUu ZZ$f%d K q~F 9  ?77fef"mWܜpM55t>FF.M/U]U U$cay qU):ڊ}Sy-jZcVV04:-?D*쮬4̠ZB pfgD8gdnwVTzw jšo?+L{2xWo^ϏJ mKq`yeC J55RڈcZ aB8qPS⢢-5 GG ŏ~sXJY-ZolJ$b!8ڪzB)U !XZYA m67oYH52+4z c ^u<>CSJ`sXJB0ؑ6XM =k.WLcpy\PPrapdCFݎNg.\SrwPJNgg̶}}1PNa 65W3(fSTf + lVkJnt)rnWSpQ?:*@{5lxTQ GxݗRJbHk+~$Swpt++W/kUY[# nF_\Ě˕)QRP\tݲJ WmsN|_pqPJr'GŹeCO^޹ӜƂR/DY@mح,,.b:W!ZH8ݭ6Ay<łbsxGq{ޣ{./1L@$۳{w/R",#WRpkTq8Jǃ z7'5_+R AT_uɧĄ9WE RJq(Ka\fkTW,E$joOIlpEš9s,VupEikg @o)9.@ ;s..#(/Ga޳ p>-&N9FF02>SVq~1Ez}ID =G6XCM n$I(+-ŁzEGF_'NzB3ϧ0ayu#n?}ー+X\oh(e $m>b1 h]í6YpdekU6$x駱twD08 bxtTwF֔)3J$j"J͸kguDIKF%8P[3g`e׿h ~PRT:NW/?8w}o<9H9+kk1?n'Gn7{ߓDKKu.!:}Zvh||\mLmrYBrkuc%Y#IyI kkME$õ^m GEc}=n>v,r1;?o=0vu4f@0g~o^Nn\u \7ސK78r"$I‡~wqM[" S>{.`)7#ZZ~nopcUVmuuҋV[z{WJ)N'>8<15|z9j~[@ r۶c̞]Pg`pw , ޣ`9y׋wt^5RҒ>(50<_>yknBV+osy #Nr'c<[Xq>ZV%$ჷ܂kpCgqOqvVT/RJ7m]ׇ'}zᅍW -8ݞƄVn&8eˣjouX*I>=:eA=>я HPIŽ2yoǑVp<) #8KOUQ{1ۈw8jSJQVZ?'յexir ++Ά XX^FN>w:;@]TT6جVW#Qj쪨u,%E4g/^=##K_.ۗz@ĸ҂m (.*RܜE7x 7*ƃ$IC¿ R\Gw?8CI 9'8G-- Bd`zn]Go?swf>ͅ*c@PhKl[{U+2kfK)E^N/VA$ >\n7<^oRf$n ~We%jnݮh  d{IgN~TQq] !ёlɶhkjuY%!JښDQaaJ8ƬLFhGIqqM.}.'%( ?;~C:55PJB bJ$ w~;_T\+@ DQɎEEHikK*H3aإKۡ%I*s: #BRo?7P躍Jtfg[I^tA2vum>.y'ڥϏȈC) >k@)Gn;REb-J3/({SJ_'N6-fWWO (XZ^/NC"˫ZTl()*DB".8"z{7z^APJaXp{w:578n[bie>_(Wt(`%Ņ-Eهq(-.NxښǃUde(߰X,nh!%% uS)+$΃jfOp(" # R eÑ σFR&!XyTs !(/-U[t-<;v >+ 99U^kPΦvho"@"Z,Yɹ|D2cE7U/ߕXo1۩Fj^F(aY?L 0`02& F#; s¦ 4X,r5g񓟤lU? E }LAhD!2UU2T0^;!  C@ , AX0$aaH!  Ldc`/d%  @a.J,9B7sH6;$6f+1"d Ơ2A|>~Ba(r BU!nh،10InrW^T"d cPQ { 2|3h,2 vWE`DB@ta BQ\of`P+@ZV.[QT^^#%L @:02.C(Z| BUGxi زA"wcYk7Ywr`5MMpY En7FDi]y7\$D #P srp _ SC\Xaʸgxe"+$1DȀɿA]"V 2 ,cab1"Bׄ0($ o*IE# $2D_|a r4 9wACV2V>$7"al+&v2ߏю0Y`hP]jUdCXBwdlOkB(l1TaayыxßChiD K܈PUO aZGG,@}=|Cl1={.#obV ۬\s؜N\Mʛѯg7>'t sYѯmoy!ۖt͐9'WߔA9  rK-@9! rJ-)ׇrA@|X~ӪV! rG,)Hܐ,yz 9!漎^k'@@dlzrZO@W0,ٚ7_!dHRho:[O@W0zZNm 5bMu3oշhN zs$DaX/'@@d^-i{:9"#nM [''@@dз7U  f;oo:X%'`FY~S*9"-fM{刜bDo\0gA"elMXrst0sNH 3X~S>fHf 17Uc̗l /LgM|9cE>wS">o,)cœe@( \(/v h"5f0gd9k\M{h\1цh\:̖t0SN=j|W99w]*n67̔0e `B],9F0SZ+X~ 9S *˘辈&O/鞫v"dMrq0UX›WUwubɤ^ﴱ7Ur'`J`7=W~g!c a߰2XF Nc--ar,i1ec]s9xW'B>_Jq)L]-`䜀@L^dZV1 `nкO>sپn\Un,NY.L0jNCлf r,햳 7 0U^@$wV" 73r3 ^`J7fԲ],AUdL''`+.䓋qQk؅3VNQ'G;2],gv!sƼ B> n9څW-&>߬ sxȧ+A'0 -c|v5˯,z R!ѼvWkva,va# %|rYd)F F sC3S,A9K;TK]8n'oa!ߜ1@|cc1u#]0\| g-䓃z톳 70XH9] @VC>uvaVg{ 䓓j؅{;ލp1'[:b 3W1?:[W,D9}32 nNT2t?0Z璡[g+B.L'/s'X^bdzZO@WO.`cqj Wtd&˯KN@W!\@.f&˯>KN@-! t.L_@@/!ht.\ (Y~r+t2],9 @+B.L_P@+mLw!u 秫G_㰖N p-etmvۅkbʐOa+wcmyk>ș6—R],1Pns9ctX \Mwd51+2'J>F1L^|k9+F+ͳ 2s=9 dUX]8],a5''dƮمcمkIr@!\j.L_ˑRgd!\],% dZB>ݖU$c+>Zl2 U,/."0wr^,JsL~l|]x<gPb1[ (oh8#pFB>q NW&c !_vri\ 9-`NN 廉B>HQ(Cz! (!=z[1c Xɇ B9M`ɕ|@H*B>k2 $UQ0u;O~%:4KR >tkx`'N(J7q cI RO , AX0$aaH$rѷB0 @8Fhy9a'?} L! 0 Mk#|K*[cI0lNnٚ\P ŀ 00Ơj !  C@ ,LFky(rc s0 ƿ@$HVFBUsR jZ3y!X(Ås8]jWU^/GF0ׇ!LM"C@p [oǞ}w~lojBiY9yH,k.op:sVC$Ihkms_.LObϾ|ϣ,'$IXގ_I %f=ދwwn9tN3BCWi^ ΓA ~~+p 1xqIt+%)< osh4oWo%bJېeggp/w}㶻ݞ80~/0?wSxSOy^)NM u0 IDKH% cxɇ?)7BY{EсE7߹ggqRMY&tLgӏ>X׋߼lOp̙X Z[iŪ4!0s9'>Ov_Rvnׯ~yi,E .Iv_Oc7O{ͼq1߇~?ׇaz H:c&s <OcIXJubAW{;Ҁ`Bg$YKsX,AɓvDa{!.99+ yraVȲcDz~ ִ^7iJSo|%w ;Q^Y 8>&F{`aޓS smRG;=g\#@(8q]_ZIp79bI>[{oPӅ҄cyEN'{я 8JHm͆+VI0`_/_Fzrӓᜣ2Ў c 4yM @Ii)Eol6XTVUJYsswӼͪ|?8J!(7JJKq;pm-Oq!Tm -ť?~?^F" <o;R/@cX Ƥ3DW%'#?{ c,)-_~kxɧPT\ E R\r ?ꌝw1;\]}2a (aH cC8['>ROҩӉGo>ںD11_\޽8z75%,wR榧5 `h84''4?x(>Si7UѸ.ݝ%w}c#:s6-7=9ع{7@MTX4֓'55f>ؾ)+9GEcemg$l8t8N;?p{Hm5C`PV}>۶c'c >mAPU#(-+KX9~2ip11:qMOy'v4e韭 bdp0avaPd;wc˶m \ق5Bgɠ00<8߯w Uj?t]/Iw#(+/&H #b%8p4;@4Aۙ3I9~->VtpUEMb%H ,˘Tv?͡3ar?|p1CǏ'b[^ Ac1gg4h>p*& Xmܼ6n!TCm}}ߍ bx3d@c-.j*_SW˥h?w6-GUMZhh܂={niq/\@J[F 5^{ @:)=ir0㿇h$@qI =Μ47@\F11@NiY$IڴF1ߏX,>hjޭ靛3I^ġcnzK#Ǐq/v=;-۷1($$8XTNsmcnzO=QLM\e=p8Isq"f_aw˾BEU G+ضs'M!0(BM=͖鬪*|>Ӝ+hĨ( Z[޳k^4lrhm;wb{SSBBh?{:&@cFFk]C蓙2ưe=⒒@ ?x(6϶b9ρ 0(sHR峀g@_a %-w[oM+W0=1N"kyPhYޖEK8r% 㞙]H#";5/-b<9Ņ3gF75aǮfocawK lۚx38vB%>ah yȱW\gރKIW$l<"LpK(k 0 B8NTh*?vc9`s^$-;6<~wC8vbѸuY,xͿ" X ZO'}꺊poCQQ)ĝw&܌Ehkm ~غ}Ҋ,/<ſ4$m_V[q-~QEW[[Ҳ [`Ͼ}*?!=8w% Z|Xo~ҋ>C,PUX %.^8 |iՍs~ %-۲?R~BvywҲ=UAc&@$<m@Yt^8[ijaРwMa,%'n8㨨ġy!D# .utPE PU{[>gj"жx*Da\аđ5l;0줪*.9>0@}! <|ㅮ x=;+]W/ohDi4 $&A˅v*=W^>pް c Sr%j :BбcJZJWff5 c~ ;Sq ˅} w?c7QW߀C<;y\EE~cs3IenxU?.,$,;96*wdh9|k _ !PW Vr; xq?} |:;05>Hzv-{-rAQMYUص WH$pȑkyE `o_aK# F/g?Y ]W]Rrʬ;ʴr,E`vjnK>D#Q0QRRʚj4lقƭPS[PlYW2f՟%I8(%f;>+tEb q EUCeu5jkqȑ5Zmk҃PU5eZWIIhuH,aP0$aaH!  +6R `ia$mO]D)SIe0#AF!  C@ , AX0BZ IENDB`photoqt-2.5/img/filetypes/jpg.ico000644 001750 001750 00000022116 14134304144 017444 0ustar00luspiluspi000000 000000  8$PNG  IHDR\rf#IDATxy$UY޵ t7K/4mۨ3·QQhqQGut~( =ra\"@ovUe^YՕ;7qyJ$@y! C@. \ Ap1J vnۊIxs/]Yز,]@AU>& 42D@AU༼ɗŐ! C@. \ Ap1$bHŐ)k&j1d%L@gcB B||UU_$Aex< <E!I h& N0Ơ*R  /N3 I<χPP0$=A @0*qŐJr!Ē!TUEAUd0(hknFc0YIC!@x ӳHeՋ~gǷ a.@S06p0$UYMN#A1f sbHRX֊6xd!D 2Y0n_ 1TcSH3X G"@ @D02>|EǑ/fy7٧pdQ(T:cQ$i Cxqj#2Ɛd0C:# t @:Ex|QcH3OPfBHʠrIO c9əYB820O2_ 34@ yL{D.%F%š Y $SiˍN@p ٹB3o#amH1d*t&c+c d\6`%PWDHS*º,H3f7C $Riz \l>gj:hVhj!8Ɛ砪c ( f7cLx^ kHhVC @4cuw/BA4$ b87Ÿ0'pښՎ<@{c0@(  Pբ,QQ(\,)y"1LG5Y~ep$vΈN Δ:|^R[ϿNtC\h, l:tOI@) 3uCooPN`qH巪6 ;F9SNn1Lb07by!i=yHC1[E{$)'7bvSNlG)'7c 1  T^J)&\  s_^^s|=BwJU~GMVN'@@^U~녛  tlo5uz$X[)n ao5u=Be\  bjpcNZ~+?'@@ԌU-UH(Y~V|5^p10F&or.z!21I4RMNA}Μp00<:1Ȓd:W":G4'[~I9 c ӳQwIaznznWOb'-%+޾ 5 ~,1'&7 McK$p|޵wX'|prFb ŷ.jM۲S;'}Cc  vYxbFhbT3v 8FcLL``$\SBg`SpzUJuPߺ`Ӝ#1h,}5}c 8:k,.:n=kNP:zSe!Nwم[r. b:t=va}6 Z|Pܢc}Cη WJ9al+|agۅ)ȠMrB>Ftp&˯N)'`K(ћvd5l)ZB>zS ;l%|`]XN n[T1 .L`mڐGmn&o}zN6PKGo`k0Y~ chNWLjv%mj&o}a2 XZ T P^,`՜eH!<6! sB>F?F.^kمk-TG11LLY.L_/w,`&˯5,F' XBJ{M (V6/d$B0]C>}(ۅ{̳ ,d$9y9`>cř 5.L_;0r&"!~k|9fh.va9M ]1؅k? ]ћz؅ʯwN`ǐ`.Յ7Y~9 ]C>F?4Y~Osu|:' d.Y~^(O=8!cB¥*ڞz'PpJGoc؅ʯz +؁vt:0Y~G0L|\Hazn+.L_ ^O0prJ}C}h ͊) &N?z.\,1 '97%+=W&˯;0 '9c !>Y~݇Q9]`>qo.L_bDNfxMGЫ(8:0,0Y~ݍ94,qWC,\,.FRˇ #}ŐuH()xQ0I*OZJ9em|5YkPȧ~00azv.~gN*9HALNXr& X(C@@@!4 |zԺ&AXj(+!kSKNB>ai uNLb ,}A,?^^T^ @q]{ `x͍!W~{|VWJ. \ Ap1$bHŔ~444N *$ N/MY}W%<E~vvlެ[b GQ,7+R lc& Ő! C@. \LMk#jRԻ,>[|OIc ؂8\.^ê)B$xފ>#@.#110I"ːey#STU|uu@Q(]tA'Ic`pHӳHR񠹹+/dž qNǚ58</pϽ_gյ8snfQ/pI"BsS3:jJYW²e[e? |; #]}x{EdIBP#G_O>>ids%?( Z[[OKvୗ^M6";F+sxxwBh2Y`r~+_M+$! gz"y 8t|[1 񛧟ie-5?>K/{~hB~{|;/5عb444^+ qJW9c?›wƵ{/.ض,W^+^C5Y#$Ib[.Fa]53;}=_xމكez 0C 쬫% CC-]wnB$axdޭ'N4+-FdtU $7}x'{ ͯHY'я?(_&[WB$D"kvslo ݷ% cHR=WO>ivslwJ;ߏCQ_1y=cn;4;3|L6˲[m^8H$$bXE#{g[[EUUEϧy{Iׇȕy"֯捛azBQ$I#>z䤮h%+wt )˲?+|>ņsǎI// c$?/>_yuqzS˗k6q?ў^Å\?q1:;:zQ= Qo2D _GGvVP( b= [CCjJ\x+/{}8tة ykK .ضMwۮVk$I8ӃGӼo׋_>я`yw|` q8g&\u4>79c)_'Wgo'>*{9$I_ ,tè>9?<^JS`tl|^sɪH㕃5m߱l>я&TUw MlmXj8ry3 k۰m]F?s"[#񠥥ElL>m}庎zQ(_9! h3NǹlHp%<,$!`|bB[?m>#I@C:ظoGQ[@0=(B- ͑$ CҴ}{[;^.f'UH((.TP pd$i.#  Hl?{ LNMi~5PEg{kupqW^YVUc؈NS@`SJUn3,3τ$I ~vLoyĄsiMliiASc# )  ,CQ-]B _( _]vtt`M Z PUUiP(X6Xjл${!l6 U-vb0x"ѱ1>|Ͽzz{+z}_ tZ[l; r91)T^]a5=[`,>>plxe)^/xmmb_D[1JR89^w~ttTZB woR@p틟(FBDQFUevv4 2+WO|-Ͷ'օ5(Lppw ۷z1nB 3zp0m؀ݱ2C.=kiU!dEOtsKTz"$oᦿ>۰ /_X|Q"L&BE# p[vĻ.mg_Ks3n&%IBKs}qI %5S1HYz؈eXf 6uټ : ]]]e.5K5띋e4m"aKk!>?bYg_1(ǃP0Ԉ@ 0_tudߩ$ ˻5m'G쳁Q7xF HR܁!,㒋/›vD YcEVi_f*xr%d2_͋ʿ~I/$ajjd/ 24z*+/l-!zj455cJC O ϟrY3Zp!ֻ$6~9Vtw/\q[Xol}F|J$f# B!4m?08>G<#$!2:WAѱ1M~L&xp~|>GE2$>[b(>}Oݾ_FU_,/Ϛ 0saoۦiD"DH`3!I$?܌?q+^C>~=1]_ىq? fѢيpk@9/+pW׿~ [z_.|PwAlXl(CY.U|%9ǥoڅs6mŸдsgGoHx#$}xΝx[.ŹAwW'~X^+GࡇGE2+WuQXVn9o]XVd{ ^|%M 9Gx5ͻwcRs'&紐!} QPbll xdOс+W bGF008yq[?˖#GI~c%;.vA wrcx귿<>{'~:,Fχl. `xdBH(Q(訶{zx[ C.=d~Ee+j.^ÎLH޹y솪y|l[,H4ÇE$RV8Z XQ'sոoQ[qݵۻm[z![x<5| ~p҂?w:;oXeZiiiƇ7xBm#9֮YpWːi 7Kꢋp ӟG|뾯c->x<Fƞ|mmmqvaEhO_/}O8rccc'fsX~mmXn.ؾ wnތP(Km="7xOyG(֮]nRcm C\p\72RU˻p߈|a}{kn,'2s2l޴1`B?vk8ΠbbkK [[i?_ŎQ>a6B@j~*| @>! C@. \Lٷ$QĒ l(*5?Cz/LNFdaەu\h \ Ap1$bHŐ! q JIENDB`photoqt-2.5/img/filetypes/gig.ico000644 001750 001750 00000024553 14134304154 017442 0ustar00luspiluspi000000 000000  U)PNG  IHDR\rf)IDATxw$Us:L&m9"%\/.WQ$Ir^y?WHfPA z_ f0awgvN={l:i~g=p@U>& $ iP A$Ĭ!  C@ , AX0$aaHѵQ,KAkXh U B 5f66v㓓1" Ơ) ^FG*AM8c`3l6832<822Bb@B@$ha j <x) B|6@0qxas8HB)A*C4-jpBf~>!#7wHaH"11 N迚Ah!y%%94 b @a 7f,(Ą׋pff1 n P `J1@p1֒ {,HiHd` i \whiF`|D $z0׋g˄ǃ)!"(!AS uv hldw{B$` cho/E$$aP&&0c]z{M7"y  0cY9$pt!&nOvQ's"I!!GG\wE``nw!A h-CvUo d 8ƠP&&=.7)f+B;T3`&KURn7*CL PRk-$Ō%"\'0J1 5$ի5!TEI5 00>2kjolD Fд${"eAsLxᤚ v;ҳsR0Α2hmȈ11߇ކ:KX 0Ɛڛ8iHN*LZ~]M]DB0Bi!GZ\$f܄ `T=uRN0$`s8`W݁,gZ~}38`6@y󐞓cD45, Z_S|n  4egsoFvuD|SN $ (X +Wd !8G(Z.͞ZYH-FacrHл ˇwxA&<h]tBL9CdH4';<7r `w:M @Áܢ"d/X1cP `w8@zn.2r8Xb89uS#5CHb6s󐞛PЮ=1pa;`s:aw:!E>=?*o55 o"d @簧>kqqJTr7pjNtN-! fgA?E->fHFΆ;΂/qFN+NF- LA@ďY~ 3HM߄oj?kH*q 1'U~ON !XUM}M Ys?"̵7Nx@JR#bO[~#!s$!RkS8'@@ȓ"HH՜ !O Y~o4rMURL)g rt(BU~Rk XFx qRxsogʿ=)ƯZj>nv_j-ċTFB*R^cpUS 2vhJۍ%V!r2 U|Xs n{ij`T h# rb詫`uWa%˯QN hɻ@JM jo{jUKQwXk@'hO7zjg!~;iXcEo$${N 1:VA VcF{UEhe-FI@ h|~9Fz]S a/ [~#!s%B#]-Z1܄ֽ8ɜHZk4tTcۚvaFFRBcW3%@ مIH_yr<20aA0Y~c:'Л<9:^޵f&olT=uɓH_O<.Z9ڬa&ol`,rI+3|R.L9Ä|A.|c)hpD3hh $B>GÄ|b c A8ګR.Gs#I`@84cI]]8dm$oa7bޜ@rТ Ơhwx(D3abΜ|Я]"dM0!3gNӐO4EAO}s:$4UE# 7)a<HpN 0+;$1|h],MsS!`Zij0Y~r %l&k'.bpdMzN'TibԐ?B>9% 'bf&oȜ@BഐE3i讉Mua $d4J'LV.L#Q9^-)1lrᮽl MR6njW&o998]1&' Y~S2s G̶Ozk1&OdN >u%b~՘u'dA0Y~-C('P@L;$ՅudS9x';p'0v..L_Kb&Vă)pLvaZx'Z-3مk]ⱟ@ԣu:S]mO\ ww16im ˯EuN :O <,뜀=N>]gPA[ 3-*333*pTB>qπ ~>L$ | D4r)370Il Clr&  QNPȇ B,0(!3~ң1kCB9)N>DDF!05t@SUtTO$Ҝp-6\#AaT} YX{Z [W:VA !42`桽R ڰ AaaH!  C@ , #3 7>oP ݆}O~a @q"l޶ A$ v ,o@A0A$ 1h:i , AX0$aaHD7`"SRIQdtoq>]!F4h UQ l6l6pΧw lgfhhϋ!8EQnِ`AQLҟIȐ*4S?UUEO7jkp8[Z0!ii7>bXq-]4hA61ᇪ(v;ii _Ap 6 x5MŶ]pc{4_t1+_EFf`# ǟ]kDq">||rrav~k~ JMS}9}#D "HN1Wn[M3||g+5XRZK. YYr9Zo" ֊Vګ/} ":VYhm[jasؒ"0ƤڑTIlx/+5sΗc;kO>ah0~&Z 01}!c8VYaCsQ*Y!tp{mv;>wݸ+ 7^zw~jY]}}{=x0E`7|8\VF;VE @`atx8VY!_w=ngs坷Lx쑇6c Ã8ZQ;mTE~W>rޅo} 99Rܜs4I."%чŸ~ n9GscZZ"tc@31$u\jXtT{>{xF#גQy<˘Q^? !px~(`A@ݝ{=hv|+2qqWo֮r V[݁vp0IK?+VY՚8~4Ec‚Br 00ߏw=o-qnS^V&[Bo&|/txM048}?~A迊kkn[/|;Wx zgn~>Fg=7--8Ѐ¢b*^czB<瞕jEo~ Yن^߾#]o=^ !E(4 ,w/oI~[hڢ+霵Fê͆?6}!%IZA,^Tsn_گ^";7wwbo^.55x11ǃ¶[XXK/ö;\V|AS͆|bh`@}^~>/mx8GuU:Z[_uu!l#@Vv6g^/o?s3юڰV^;wbIiivǎ'o'R:S1q! ~kRB~_Ƈw4/e)^XXK>|T]SC۶Kx=8稩@vnEaq1o]OWj`:SQ";}p>jrXeT6Keù\ ͍ HEag?vm3́w ($ @L]Wx'_|1E)8c@[sT-;v[slݵ+Ch=q]w}-X5CӀ [6#[ѤAxWD;;]Vv6s !"!01-۷fu'5U}ҎFC!/F-c W@h\ܼ._|P.nir Bdfeam=_$euHD_OO1E9qG@r--=-Wb UQBw\> S-LKæmN͆-۷Nk^@g'ګ8_ԳUUrvNT;M % eǏ-]+׬='ڍ7o^wu8@g' 'jzjk/8E,,;x4I棪*t,_ E%%g-j˖>* :$?FugbNll(*madfe5t@ƣT {x'zO'7AS#Ov8-4sZ9ؼ}Ǭhw:yG`?N0Ĉ"8}Rm77#paUs b Ƚъr Vu7.\B`Ö=^9Ba3iiޯ])|0?}NBlG ?z~9sә+4J HbB۴1k֠dOQP7:T4\{˭榛p:я|':to"nl6ʙt>Jδ4Á JÙYY[3008 3}"g%WUald 8$Qr?;c[믣+|:P4꩟cG/RCwi͆\IA?,LjsR%[Zcl476v/f V]{~E%%ӯ6lނV55x ߙݎy H39yy!ԡ!it  @cY8ƛPrܳh3PCQ"XNn`00cj_XT'R8\p\*D͛qў=g94Mêk>-=--24=e/[*16` 1/^ 0}ᜣ q.z8$by1c톍Ro~cXd)r$Jw~67sӃU`稭FoW^Ďζ6ׁ3@g$fXa[:^EKBPx1m_}O<{223u aǎ>/)B9{{pH纍hV` Muߵhٰy9RAꪫݍҕ+ɘJMpٕW_ m+ZuyɁvW^ƹ^; 3, >k9czp ~Savw^ LCqDۥ6'@4 6mڍr {etݙ>T  / F ql]7=#;9H3/;;;=W| H⌦iG>.P};ob-\x@S]mH)1ݎ|}R`Śf3a-/Z.]BHB`mRL+gl^ @B <|J {I藳b ~rȽ 8xMx040EQ*<1݁_H}䌙)8hill((.2|4 K/G }US}:ZL)ЙH={p%j0^wbݦMIHy9f\O߀/|#n oWw,mHڶk7KXBa׉[wBz\SB /?$޶ f@o@H0~Shom};Ϡd}>TWU^/CޓgşoguwqXbgZرu#$ B4E×Io= iM۶;HCX-8p#WXT5GmZ8RQ!EV@  ~;/>\91nwq?7{EVvNXqbx %6M]n݌@e @mۛ@I,$UU]!վ~iJ)3k<],^o>0mM V 4 ۺs)cơCDQR@`pmHn_ 4Mʵc뾛˗c\Rø׃tp`]Qߑmv;lnВ*$UUuN\OJwٟ> [b-SnYL 1Ə,.r4c h8~\Bݰ1zشmu6 BcHF@"܊EKJwBbii)ݟ^p_9uq_z2Q]Uݶ+׬EEQ,tw,ih-;w> !f5!d2.\MUf\HKO!=#W]s .޳e~-T>Nx6 YY((,ƭ[pKq%Ēe˦l./Ž{;%4 [D?yy{qw: :|㡇/e(O0tW݁gdP٤_Gi;um2,ɐR 2j91$acHƐ! C@6 l A1$acTD088d%r \ֹđH$% %H4D(r@t"A A  Q0@dDF$A,P|o|c8D (SWKNJ@dta"0@$[csH R\B4E`<ӁBO!J+JQXZD:I B A{$gm"B!aQ"z s}DC1 !0 3}C3Y  |q9k!:E CD~?Qe/cFF`pHC!H)@Iy#4B"@j啀D02FF ų E"d@ LGFrWNjX8F"@  NGa<DžQ~ L rByz]'ML<@X99L& |$IHMrWx, 9ύ$ xpԔ,c iAR\B`,`5w)!ajlHy`!{SӈG>¢%6DM"A0$+sea@f2M=K4h%]pن&Ѹen6ƘRv,o:ׅx;`Ԓ$)`Kp텿OBpJ.+-͔œE0TXL`6p L"`$7a=wF, 2 #+ f´0 `tpLPz|&0`?E ٛ2X5 IÖ:z3[-5("yc  L&n7&0LL?@B0R7(* D,Cc9:dz! ۩la8c1קb1"0XPgr.o^ _]M8t9t;-sc ݖ,U0|mXuEh"dȓXQ@Aq%ީP)̛ChJC̀x$+qn y`T*cuF`øwH1,K2 R],zYt((59jo=9c gǼ"s-zmR tٙRe>˯cDCQ%'`,G!PSAqyzrG￐7Ufs C@e}%\&ٚп,gb,zPN@+$jphxb8PP\UyS &}QH4R\^KW ˫3I-_=p1xur HҪRT/w+kQɏT,)r!HRԬ({˃Ũ[U??H6˯SN@nMJJ ~*Yp1 ԯϋԤW<\Rj'b $ H4kQDC^MÔ*-˯^ aQ"&O_={ #iTw\o6`nN`U\ &3 ||/іߔ"+m'p+$Dɔ7󸾟"d  Q2mM|('p$DȊWyQN`"cd2TQN !s~$Q7kiH1o~$|g0O!ېbo9'@@Y,zkN0Y~S>}HC``LcՃs$DX~}ݾ\Ja 6n9"-nM  TSNЍU,zKNЍ,` Y~9BVr$DX #  R_=H )ߔ9s$f| 'okNv`{g&;˯ sģq\9}cCcy-239pR?~Ap"H"|[YN_/Q@$Aw[wMd|A''Ô }ee {r"?r.Tȧ@^ c (z{ob\W/kz;z_}@^(y&7Un ]k6 ?UdŤn* Z7'øw bۺZ{8g$ ## 00F$ M1&BnFz|Qd5,+sC>icyo&˯X%'`I`!27 dIFoGڅk8VO %$u%  cLhC0Y~3lN XR|f.ܖ?vaf+,%|2b&ofBN20iyx5̞̆|0ʁ} 7;='` H3c8 79'`z0,䓁juafL-!B>89vaT&on0~!y9L` @! V2 2hu3)dۅk̔0d+䓉Eb:eJ0Y~́0d;䓉󟞜6]ua 3'`*v'To0Y~͇Yr\|2c ]æ.L_sb) !Q], 9 YB>_Xd57f \L1\W&˯ Lfu&0iO`h ":sș0c蚹B>>V :2'0t'd d_[R{{ *d.L_K@KJg?iwlTf`kQȮ0냷kۛ3Յg,n_/A.Ț !Kf m&˯/"Vd76.L!Od-'ȇOF 7fN +/!1.L#[9 @^| 0Y~l2&!ys G% dLfC>Sz 7 \\N 3`|BՅ0al0s9;XvaچL [| f.|.],!9!1,d&˯=DN0s'$ ~d*'`P'#W],ev?si |2MՅkoO -OcM#˯1:'H7|1DB\kDbkcfreepҲ 5O d+'N#sB> Ė`\N e۝|JHYy'F'Pȇ ̃,,3; _ LB9m0$:CfCoN@#qtwSȇ LH:9Uegz'S7'HQ5?0-,c<8\M AX mA^>- @@6 l A1$acT}E(((y"Hp6ǁ 4xſ}1y;բa[  UoրsI(L1ɾOacHƐ! C@6&#JהykL>nAp$# A C C|sa۷3vCE]iSt9t: Tv#`﫿 A݋4F_fprSEP+Wĺ zjTTU@Ō h?ێ}pXS]G9cx葇RvJ\p?0==dYwގnE0~q,a[9ź {CpH5 xb cܽعk'K3fb`8q?ܿ~FsX1)W:ӟ4>x_^A(Rm{n,]4 x1*h?׎_|_x <#{.b14lNsm|I{y/s/="8#mm5C$UMYy(*." ؙ` w~_>e!" F|#8|ʟ u!2>Oީ|mDQDKS ?hjg>ވ#_ 0Q? &L`|2Rl$A˩sY4k?y m(~'߽W+sS-ú>rE!H,㎏ށ1My\p-)"ZOwNS{;v:$&"ſ}){ c ӡij}K.aPpQ\\_8OjA}hʫX 5'vM (.~i/M10?Ktcī#Ya|ӟ_W5(homo~M}/NhP';w_<p87m9G<:/v8|XLӱ?_2jku`G[|^kL$h:ф_9(**¡'᏿#ñ#oSxUV-'ŕ@'r_JbeLM7 ?xAۇ΋_R nVIt)ZAANmζ$t-I]]ޅcG7>Z*(HE᝷t}v6zo^t2S))HVL/7Yu/=oohør nζMn;vzzIp<2]WoyUVT1r/d98yfMҽm ΫI5lkG>mzUhdvޭ/^z{zApeد4Cö Kpαbئ}0?Ȁsab|"im ضcZ}Ӊ&((('aQ"ն:>ܲ,kG1Яo? $YDt[Rm:x,MIQTT[6bŪK^=-pv|pM(okWok:{QCEiQq..c QmKڮ+V@EEnXm_O:/uMp8ATTUpEt88vz{UQݟrNdYU3qAKWӗݚkPUUۅƆmC8t:$ wngvF-G~v! ukZM>7l.$ق)z-wkׯp9tPTܖ-((,c ro>٬R<˅D*նϝo~Fo}]WT?d?_w.d @VM=˰qF]&p8S ,cL/bxp8Ix[#{>Mm_k!"zp>ۺ؇H”m&0) &.__16:zO)צ| a\h]Eel%9jjrʤFG{yq:xGP]Sڶt+ _bgX}-Vv:Ecw=H`:4A8~o<Z =0;._P5,_Kjg %ؼu3/x,͚Ր$ [s^~m7z=ؾԗVHtt <8D8 &'1==阥xꙧt]eYFf-xfKElݾUUt4A0D$J:N;wzCI۞i:^{CT>>ݟ1TgΨ4n 1c (-+MJqbKp)K$ln،ƏIۆa4aͺ5k^rLYyvٍ~??30)RlڲQe,[ K-Mٱ1imD~I![v5:PFj++$YFtXl .|+oGu.^?v c䓌uKlzș26oHYY[pX~-CdIۏ߾[;?='qgG u-]1ƔޙVն ,yfR޽])UQCe߸>`ZyXj)Bc ޟy __勗S~f2=]=I۹n;XzkiVhLA|r]߰idHtp8PRR<%%(**Jix<_k|K_C{k{"p SmzyWdYF*YFO6#[ʲ!|0ᇱl2u@ˀ:xOϟ4 `mgpS֭zӭx_{/tSGQ4Pg_h} Ozx^,[nCG;`$!IEEvݱ Ns X,~_~~U{OwQ ߰wi֠x!s8hN3LL+u,c^4}1K Nfj Xz%Ocqb<&B}(>z֤qV&0\pv y; c{Ugң(O6S~ߔ1=ؑcl[`݆ ,C| 8ջI}xW.qdwr=N# ,ɷ$wyO"sxJ{nMwSSS Ȍ1B!CuʞF3r4ui?MH,ҸESY+]J*}.\[n#I,9GeU%**`rrRٛo homLjo$!IO4ї0$9rP],ÈolD'sVvf [9G(8m?&'&Uw$]Wu*XH!mEBg*j))f TS2eVf1-[zqJuP-ՅO6(Uߵ($Y1g5E2ϼ-D1<|~;>Cs}||^9K +5uneN,"F|#x74Wns3?G{k1._uvC uK갩a˨_+s"w@2 #~pIM@[@`:/v_6|Q"88p\?<FKSKvh,#H ;EfQzfMPS[3oԂN=vl儔HwnވW"fd Cpɜc1Htr9|?}cAN"@0FGFSOƕLOOz[)Aö]L:~IkKTj|  NqumTa݆u3w;ŎXt VY+,3X2zAqX0!O~I,_J ǰW8lDEeU%u$!0!þC}p%IBf$;Fm(..VmwL"aNHL(x?yܺc )mE94N̯,U߸jUv-bпIXr9/QU]5ﻴ T,~I=V]֤9qFն3ei`-HrHAAl݂ׯ'o_WP)Yp"1sirnشUv.ܶS9Wv khfabf ۍ"TVUbؼu3vډ۷bqb0TgcNJm۱ nېQTTQ]Soós*<ߟtpZwmw:(*.ԃ2TUUaQ"v $+" 7$IݟMʫ]e"26o݌~¿  qqaIsh1-H9GEeE\gy<3,\RtTʃk9Gr<H|>1s9 @Lo5g$M#$C@6 l A1$acTAдAph f>٧?"AXApSA C@6 l A1$acHw@E aIENDB`photoqt-2.5/img/filetypes/jpe.ico000644 001750 001750 00000022116 14134304145 017443 0ustar00luspiluspi000000 000000  8$PNG  IHDR\rf#IDATxy$UY޵ t7K/4mۨ3·QQhqQGut~( =ra\"@ovUe^YՕ;7qyJ$@y! C@. \ Ap1J vnۊIxs/]Yز,]@AU>& 42D@AU༼ɗŐ! C@. \ Ap1$bHŐ)k&j1d%L@gcB B||UU_$Aex< <E!I h& N0Ơ*R  /N3 I<χPP0$=A @0*qŐJr!Ē!TUEAUd0(hknFc0YIC!@x ӳHeՋ~gǷ a.@S06p0$UYMN#A1f sbHRX֊6xd!D 2Y0n_ 1TcSH3X G"@ @D02>|EǑ/fy7٧pdQ(T:cQ$i Cxqj#2Ɛd0C:# t @:Ex|QcH3OPfBHʠrIO c9əYB820O2_ 34@ yL{D.%F%š Y $SiˍN@p ٹB3o#amH1d*t&c+c d\6`%PWDHS*º,H3f7C $Riz \l>gj:hVhj!8Ɛ砪c ( f7cLx^ kHhVC @4cuw/BA4$ b87Ÿ0'pښՎ<@{c0@(  Pբ,QQ(\,)y"1LG5Y~ep$vΈN Δ:|^R[ϿNtC\h, l:tOI@) 3uCooPN`qH巪6 ;F9SNn1Lb07by!i=yHC1[E{$)'7bvSNlG)'7c 1  T^J)&\  s_^^s|=BwJU~GMVN'@@^U~녛  tlo5uz$X[)n ao5u=Be\  bjpcNZ~+?'@@ԌU-UH(Y~V|5^p10F&or.z!21I4RMNA}Μp00<:1Ȓd:W":G4'[~I9 c ӳQwIaznznWOb'-%+޾ 5 ~,1'&7 McK$p|޵wX'|prFb ŷ.jM۲S;'}Cc  vYxbFhbT3v 8FcLL``$\SBg`SpzUJuPߺ`Ӝ#1h,}5}c 8:k,.:n=kNP:zSe!Nwم[r. b:t=va}6 Z|Pܢc}Cη WJ9al+|agۅ)ȠMrB>Ftp&˯N)'`K(ћvd5l)ZB>zS ;l%|`]XN n[T1 .L`mڐGmn&o}zN6PKGo`k0Y~ chNWLjv%mj&o}a2 XZ T P^,`՜eH!<6! sB>F?F.^kمk-TG11LLY.L_/w,`&˯5,F' XBJ{M (V6/d$B0]C>}(ۅ{̳ ,d$9y9`>cř 5.L_;0r&"!~k|9fh.va9M ]1؅k? ]ћz؅ʯwN`ǐ`.Յ7Y~9 ]C>F?4Y~Osu|:' d.Y~^(O=8!cB¥*ڞz'PpJGoc؅ʯz +؁vt:0Y~G0L|\Hazn+.L_ ^O0prJ}C}h ͊) &N?z.\,1 '97%+=W&˯;0 '9c !>Y~݇Q9]`>qo.L_bDNfxMGЫ(8:0,0Y~ݍ94,qWC,\,.FRˇ #}ŐuH()xQ0I*OZJ9em|5YkPȧ~00azv.~gN*9HALNXr& X(C@@@!4 |zԺ&AXj(+!kSKNB>ai uNLb ,}A,?^^T^ @q]{ `x͍!W~{|VWJ. \ Ap1$bHŔ~444N *$ N/MY}W%<E~vvlެ[b GQ,7+R lc& Ő! C@. \LMk#jRԻ,>[|OIc ؂8\.^ê)B$xފ>#@.#110I"ːey#STU|uu@Q(]tA'Ic`pHӳHR񠹹+/dž qNǚ58</pϽ_gյ8snfQ/pI"BsS3:jJYW²e[e? |; #]}x{EdIBP#G_O>>ids%?( Z[[OKvୗ^M6";F+sxxwBh2Y`r~+_M+$! gz"y 8t|[1 񛧟ie-5?>K/{~hB~{|;/5عb444^+ qJW9c?›wƵ{/.ض,W^+^C5Y#$Ib[.Fa]53;}=_xމكez 0C 쬫% CC-]wnB$axdޭ'N4+-FdtU $7}x'{ ͯHY'я?(_&[WB$D"kvslo ݷ% cHR=WO>ivslwJ;ߏCQ_1y=cn;4;3|L6˲[m^8H$$bXE#{g[[EUUEϧy{Iׇȕy"֯捛azBQ$I#>z䤮h%+wt )˲?+|>ņsǎI// c$?/>_yuqzS˗k6q?ў^Å\?q1:;:zQ= Qo2D _GGvVP( b= [CCjJ\x+/{}8tة ykK .ضMwۮVk$I8ӃGӼo׋_>я`yw|` q8g&\u4>79c)_'Wgo'>*{9$I_ ,tè>9?<^JS`tl|^sɪH㕃5m߱l>я&TUw MlmXj8ry3 k۰m]F?s"[#񠥥ElL>m}庎zQ(_9! h3NǹlHp%<,$!`|bB[?m>#I@C:ظoGQ[@0=(B- ͑$ CҴ}{[;^.f'UH((.TP pd$i.#  Hl?{ LNMi~5PEg{kupqW^YVUc؈NS@`SJUn3,3τ$I ~vLoyĄsiMliiASc# )  ,CQ-]B _( _]vtt`M Z PUUiP(X6Xjл${!l6 U-vb0x"ѱ1>|Ͽzz{+z}_ tZ[l; r91)T^]a5=[`,>>plxe)^/xmmb_D[1JR89^w~ttTZB woR@p틟(FBDQFUevv4 2+WO|-Ͷ'օ5(Lppw ۷z1nB 3zp0m؀ݱ2C.=kiU!dEOtsKTz"$oᦿ>۰ /_X|Q"L&BE# p[vĻ.mg_Ks3n&%IBKs}qI %5S1HYz؈eXf 6uټ : ]]]e.5K5띋e4m"aKk!>?bYg_1(ǃP0Ԉ@ 0_tudߩ$ ˻5m'G쳁Q7xF HR܁!,㒋/›vD YcEVi_f*xr%d2_͋ʿ~I/$ajjd/ 24z*+/l-!zj455cJC O ϟrY3Zp!ֻ$6~9Vtw/\q[Xol}F|J$f# B!4m?08>G<#$!2:WAѱ1M~L&xp~|>GE2$>[b(>}Oݾ_FU_,/Ϛ 0saoۦiD"DH`3!I$?܌?q+^C>~=1]_ىq? fѢيpk@9/+pW׿~ [z_.|PwAlXl(CY.U|%9ǥoڅs6mŸдsgGoHx#$}xΝx[.ŹAwW'~X^+GࡇGE2+WuQXVn9o]XVd{ ^|%M 9Gx5ͻwcRs'&紐!} QPbll xdOс+W bGF008yq[?˖#GI~c%;.vA wrcx귿<>{'~:,Fχl. `xdBH(Q(訶{zx[ C.=d~Ee+j.^ÎLH޹y솪y|l[,H4ÇE$RV8Z XQ'sոoQ[qݵۻm[z![x<5| ~p҂?w:;oXeZiiiƇ7xBm#9֮YpWːi 7Kꢋp ӟG|뾯c->x<Fƞ|mmmqvaEhO_/}O8rccc'fsX~mmXn.ؾ wnތP(Km="7xOyG(֮]nRcm C\p\72RU˻p߈|a}{kn,'2s2l޴1`B?vk8ΠbbkK [[i?_ŎQ>a6B@j~*| @>! C@. \Lٷ$QĒ l(*5?Cz/LNFdaەu\h \ Ap1$bHŐ! q JIENDB`photoqt-2.5/img/filetypes/c4.ico000644 001750 001750 00000025514 14134304066 017202 0ustar00luspiluspi000000 000000  6+PNG  IHDR\rf*IDATxyx$U;ˤgfdf@f_墢 * E \D﫲 * 80 $=kgO:tz:N0dyy9U9U]S!( !P& a`& a`& a`Sg[֯HE`0${fޘ 5 (}L C"&M]D",0B|a`0 a`0 a`0 a`0 a`0& a 3PJ!Rp8P(P8 A 0M0L0<8(e% LB ~?gzGn|zܣ`6m"ǖYV 8@{#0HBPH{z)x}>Ji? ,pMMl2!n#?vxgBH+LD) ߿̶ Øt=AݎBr6c$ 04:ɩ)B> (pMMQB< C# D>! FQYVlCV$Ĥ#H} ia,)/ݖ)`fJI7g"χA|f&qO{V6"!>}CL sxQ !aU (bpt ?!$2'0:R+  )=iO ` C!NLyD0K}ch&1 Bx0ntLN@XrOڋ1>2  `Wӕ]ah& @)ŔATP3>^, JwCHk#) 5T [Z~!mPBaac֎`w šRG+ ieĒ(Rw`Ρa0aAT^T3#D!`sh!w3&= qP PQu:E]N9ߏ~M j!`'>G#d`p㠊>#ր]}N gU2&W=&< NL=p`l…Q6 H}]52a14ua<o{q(BW 6(صap$R -YY(ȵal3A7(CEH&'(SSdWu2BrOohH"0\dgs=>J)sraez"Y~G7 $ Xf;0ٌU-Q&H&qp!?7GuUlUNDDa9aP^RWJ\; ,IJ& $8PV+¬ێR {v(ќ( H DssB7YVTU!jQh$UX~R^(\RM –y& H @8cr28'(7*+cӆ=Y X~c90H,D '_(0<ʊVuLBA2߄? ą @dY-XRQˑc"Rp<,DEI1LRԓRP*F!L,N"Ǯ\0 D#\-9> MP~J.smMX& 7>a90`wTvop` [O`&bRNLi%$3=3' Li=]9gd9 #gF#0`hLY~%1xN #-Y˯Zo/Qi0d'ZwPo4zL#WLa0dEio25zLo9'!j&Q`uY~en=0Aed0bN #ekM8Fʨ[O #%_J- `Hׯbo)'4Z&QrLI5o"Ds: 0`$,ҥFRD,NMY~9&y1sL eo29'j `^,ɠלdteM ' (M7o': F@0G[0<60S~'X~%z )'`)E[wFF 4D-Cc8c3 ! opghoKN@H̡ 8щq>ީ`4o!'Kv5mBqsrbDo2h='; 33ÒYBxց`(dG;tWTsP(Npr##㑯gi4Z N:z0<6'+Bzv/2Ly9)SI؅WDQDr!t(n1^ۅW9>4+ |w:mX~ǘWF5Ф ۅ#_'ʄrx!oљ]Y~ӃVr)!څ.l*@ 9M @"!t0.,|h'#WZ hF =j.,A9@!t@j.,A9@*!!aAJsB>׌FYJs9C>逋څ;: ,ʠ֜j !t:z{$W9ԘP+:UofU~E9U @C>@vaVW-)':T'VuuafUj J"82IGef_u ,h\'p`dL]vafUp=T%J|A.ܣ0\U6' ~nW((E}EQD7J):{ (.s! \v6Q S0Qyم[ 3˯ T.')٧p.Y~!BIױF™.,!Q`H t3䓞c:{{3bf_!": d\I(f.,C@@K!Ʉ]U6 dTI9p{@hf_cΜ`Đ̷ x}b_ !' 9#7Q𑶅 3˯1JCN@60r'̷ x+' ̅|I Uf_㒎@eRcY`f56rR谄|\uLy> q|hNQl5%pJ#LLMab73'2pP2XȇPr 0@@B> zH5' YXȇP' IXȇP7ɮ'WXȇP7 @Ej uJ#8[֑ /q 0ξ~H[G31FJ 00L 00L 00q}ldee)O ~^/fp>"Uk rLBI@0`0 0`0 68Uw)E(̮`M$RI }QsDCJ!tGW["V] 'chx]]BӉq 8l6:\˗˖vmN,&'qX,i9WpXy!Ys` '&! "L&v; (/ǒ*t Jː 4P#@)EOO/vލ܅CM14<_$XVamM o;n?+ayٞR<c.I5EQDEy9~|PR\,y套O֖[XA_IFG,]=رs'^۱MG1::@0w{ՂE u8aMD avtt/!~Oo/~/΄=DӉv@EoqG_ U)_\.<Ò˲Zq嗡TVV~͸m )x03xgљp 1<F$} B&n02:жᤥKP+WvMMGё #Rؘ~Ӄ uu P5  Ij_ZR+/4.,_ ys^ QrՍƽ{ƿC05ЍpW^} vv5kV_>TjY^("n 4ۏ?=<^ݱC֋~k.??7<64BXU]_3u8nyX,,NJes_^z/Tӂ.!ē^Q."1o'#C͛pm Ełq׏ylI7g}aW@fjO>Ki-..oVUDaaaғnnݷ?fl޴kVUc'lӃv{HAnNNJB-8Yg59paw$7L/cUI(l6+~8CWw7;ceWDyy9jkcxиo gUxf8/feKOBEyDQDvV֯>`OC*1]PJ9v1|o btlLR"77Ghܻ3331۬[[H9C]]-q|{s(\h`0ǟ| ]u5~~v^ϑT4-dsgzZRիVÞ_B6YE^˜kmEo_n/nJ) qکJhNpW;܊xyް5(ofK=1 q‘8EJf܈RrtiFpa]_<㒋/Bl'{zÏ^+>9q1a 6*2>>.}7;;E*8G1'ȲK,;>J)rsrnژ =^YEz) Ǵǃ7zv|ӗ+_:Ef@GH)ɲZ E{\֬^GAl26Sj߁pMNiF)EVVnMXWS??/U|܋zE0#WVV, BѸ7coCmjSJyy]SLEY sO~J0āCpO]bbbBRv-髃R4bɤqzz{]VVjׯQtTV,EgtY֎n~z h\ 塔a||"fb\RJ((ի= ţ(8e'P^VO(:|IB|Im@7B$AO"n9o1<<w_Gs`+W }R\rEhk];—` _|3XUR+M j122ؓ0ZHܶ.òVZ UDJ!Ύ ֭uk񹫮[o?^MO޾>ڽWU+}X)WJ)JKK`=,p===9Bƙ$cOV (qчķo%o-هV4/%%%?miQ/RF`" 7 h炂|oQXk+&\.MW @qQQ2YQ47ʼ?^\N;:ݣYt!",3zpccc1PJ)rsr4xgW7dF --J&\.?p@OL " q'/t|>\.8hZ+n:Im_;3>q\ĕrA)Ż uuX(ץP8 ߯iaռ͛#_ eB$p+:w!kb!$-#9J)%}2Ph3`$+W\5'JKk+oޜ8>P99'^O5}-??jNBIZAݍ~3f>L_ʑQlټ Y$LxUNK v$"UbvzzR7/gn==8tvu+~پ9&Gpwl733}{,uEO9M7gqW&^LqZUE,Uႏgph8t$BaCpM_o@a5A3,OٲnnKg[6#77+P}C#|OT;!)ϗr`(W^ϵyy(t$6Ѕ 8{Y n&_(',I>^y5Y,$nÆ'V,[* %4А΄#0LxyI١[#n ڎIow~;‹/JڦǕl"l\sرs:b|Ka1AA(ƌg==K/C}E !áÇ+V,Obp`ڵh>z,f!457c~ 9Ҋ_{lB9{.H׋7:N)%̭YVñVmv%ucZ,lټ| )T]MM8$myD(.*u:'kص T.^Me]+*  b|bMGW^Ů_\c2;;go; izRU7V7}[_c-- mzq%Ѱ^ ݛ6mjMbXWܜL{>n=v G.+8++ _st&@f pwPKn8s` {9ɩW\tx T:rIK? ?_O@Dn>-{%!>49E;֬^bXeӦDQĻ GK (={Y߁fЩPJa6뿌_3,]$]AFI7ڦdl5c";; I >~Ux: rxW^~|a|cJL-B055%iՊM6\LEX\Ғh@ >s)Bii)o ˗-+Dn޸|}7zYpIp杈ܜlڸ8A88hi--),̱:XGŞwFC^ݧR mXpmzihmk?w]# }\|˱t.QAf%_sގf~S߀ֶ6-X-8زp8lI8䓱SJaoyTDebraL&|kf*pOwQzժEQ߿{*BPW[nZ_]{-:pAZ߉I$|> AL(Ǻv%K`2 .?p'ur~o獺Yjz~btl CĄ Pچ` «_Q,KA"!H@e,.CLw%* @ ǻhYB(`u}-P$Ix=@$ 0= ]5Շ` n.`acxWq` 1$[ t5D!A0:,8?> LlAHt%$f/Cd`!P +eM:vR$IB|8X]_C$٘7ݐ1٥9ΌoMchjs4 P+alb Q@BpCHHtQժ V1097)p2cja#c:OZ` 6., h2P=#dYFpf4-pʲ fR1Lcny5w,``삮h + (ݡ +邅[2 U``X7:gYY@lbE˝n(s\  Nciu9wb{h|+t*  r5W8ld?b3sL`b~8"FH@erc, '/龨ud ]/Z${~ 6ح6kbAg3 N H'$ CFq~ڜȲfhr7AL9!@Eq&]ve[leM_=)D"j.[QT[sJ o(q('?$1r+jʪ4( 2 Q^#]Qwj~J  2d]v=[sN6-?*D,J%.i/. ŖeY.Vʨo"s}/H`Ga VjO@οj/r]X)'8)-(A]M-Yi y\CeM@,H0waGa 8)YaZQ uյvOpRM"DbC2d.ڋȽQcʲ 9pp~,j5Ν[~rG]aѳ٥yze,U ;jC;wb1ŕ$C}(-(f$IPVEX^]/GH A d,ÅAXUiźtR- a? c 3h?I W}cfi-} BibHN 2ưlo;|A(z3MMco!'`hm0Y${149듘*d0Y/ "Z1cPw/s M{?C c sSy2ưLO+gN0Y~_N"ZAH;c A!6ݝd [~zO@g9qk*=.,zG 7 ⬪f pn_C;1?Ew$$q#' _E _V~A6p+ ic>cڅ.wtSi]cqu  7!'+' 80],E9@"!Tvar6r>mIt!B>B> lԵ]X$7h=' k]8: S4 _ .7Mh9'iP3 .مuS]xS_ 4{" vpua=l9 dM;4f@Dt =܋Q @LO`^S h*|Χ(z.L_ ]!T[Յ 62}kJ.|QWW],RN hJ6B>E>r.ܡ!0Y~Vre}N5bfai,ZC+9MHȧ3C!T :.d$I!˯BN O*W0̨],&XhN WE2;KvᖌTD=d4 ,9 @;聰]xbuم#)jL2veh5 .UMY,!9C>]ýJCuaL~u% Q],$S9 B>*d5}XYK_N #Po!TǢ'5Յo6rO mאO*<\]Xm0Y~OHlO'Է 3ưHU~ A:siANB’$t"}Gm"Յ x+'ҫň! /D 'v7,Y~Br)|Rg3 م7UHGN %WC> .˯H_Ñ@J !pBp;F_꜀WM$cD + _ "p)ӡ-d5 . 'lxLXT0Y~I*PMIv |lO@J!Cf0Y~ CS'P'] ۅkn $%!v]v aiusd51j|x#䳲@)$R]qYij"9vz ԨOڈDV00|N  tQ'piO }5Qȇ 2Z9`SK!$jM!z' $Ql|B/Dr'H̸ADs;H&'S$I9 I4' 8232X-E#(-(P)-} mUDDp3܇4lπmYOƠz01$abHĐ! C@&&r!B?0~GmS>AoZ 2bGur?9m jEc),H{2ȾOabHĐ! C@&&1Ȳ I ^s KmRRSџdI.TCA/"08<=+um6rP v}uس{JK` J,Xu\EC$~ ԟamlfZaZوCF^ cuu5fVrnTk_|n&vA[,|>Ȳ~~=@pߋ~!⒌1X,ج68"??娮QS]b88!H9x_} M1}W"2'o~upf[sv5c p}8|n,}^5~\ n(t(N'l6V 3-X^YF~^~ZKKWKF*9 Y~^EϾ<}Tyj=K1szVg+Gc_}ruΆ$Ia(8P܏?=yoWVp9j䍷Dm3pa`Za`^gnv 7p?g/oW|얶ONFM؆{̓<Өw)-)꣸]j(FGBǿ<ıIo8DO>jEm=g~+U_ :338?@pKl:to#Ȁo>~IֳX\Zxq\}jQ۝:݈`0/(vo-y݊~ v?J‚08<ı[%YBZG=gգ8!nz|֌YKKlpw8!S:h:{'jҒRm IJK.jhj?WVჇjj H RF n @L/݋gp豘&^FowZ&l21dYsײdT8瘞Fm=ܜ\HcZqՉ`2@gO7v+5;wè(+ec.E([]朣Ku@m053~4i[QC܆wؿoxvQ!@vKqid9T/^c?ᕗW^V>ӄ5]٪΀cYmEH8Xp:(,(DY[cCA~ى Yt8QLQ x )\,.]c@$ VʎTĵsZSM s54ciy:` "rE_mxC#ɆwYFs]_}s 7-hioEiI)vԠ|G9\YY60]_GÙߜ?Yd݇*E_U!$1Eru| _xq_sq G,"vuwl[SY={Zd %E8rHLFGg@Ak o>WxtW»tt̶GFqQ[;\{UuBCS#!$ eMߘѾƨ;"\s51wǯ;;%xV3Hy-GɛnHcX(+ʙǓɒ}{2v23lŁ(8|wp{Iݖ`9B@CTUTb}ImZ*JqmB3A'(bWN<ã_Wo\-c g[sC())IzQpګNe::Lh z $}~7G?1~!`pՊ= ^ج]AxJѢ5W] Ñpv;hnm$) 2%+6 L A01$abH| 9Vz]@zjŮ9_m<׷O5A9^m<]L' AƅĐ! C@& L A01Tfg<IENDB`photoqt-2.5/img/filetypes/ogg.ico000644 001750 001750 00000025235 14134304174 017450 0ustar00luspiluspi000000 000000  *PNG  IHDR\rf*NIDATxyUS{K23d#{!+k"" *E * *A6@ @Ȟ̾33wU==L&3{u<էk:u~A.  A1$cHBǐ! cիj(\v_ Pw[w.\W~d9ۿ DȊy?,Ce~ h0avDQ$! @0F~哛>hې$akčBepmDC /@wÐ17}c3EQ04< ׋T(4?@pc$nj镰$DJ!A =$ᾟBڪ۬>DAF8pIG^-]|Wy J\#ntd6"c >m$DJ ӃP(Qc*DJ (ot/0vW< aFiO!  P}c~- 70ɾ @#;2 1nx>͍N܁` $YƐkX^|I0>چ`cx}~20q# e+DB0 s ݐ y5-Tv!Y U( "!H&C`$I~]5)d4ԅ%" !ދCۧ=lvgspє3OT9F 1]I1tc5<stvԊȍK[rjR(Ys 0mּch;MA4 H&1B='&v-gF+[~hR1to` oD0h smVX-MXs0J~q̊ A7$S`Ejb0(-*t2aa58 ŅZEmVMRr7c4SN nH`2QQZzE FTho27cPN ~HbPZT.حVMNe*oPN ~Hb *+4*9PTPҒlw%%D& lFʹi0fm9jAʹJpŲK$'G95i fj1cftX&MFE78hlH⠬3O`h9lV+fUW{?7N('8)-.¬*28'P\P93=Y X~QN &$ Pp`(5cs(bzE9fͨլIT7ড়@LHb6 jR"sB̝9Օ0bߘ7^('C;CYq FF0烬(85 pm(-*BQ5?H\##hPyHNF#]3$=%()*C $P8?FfA X&86찘M|o ̈q|N`^̼<@""C6d!IB! !I,4"F .98R*Ecp:&Js{aϏt H1K` &f)ZD=\-9e g4h L3ew#Ֆx!Ֆ߄ IhhxH/cB'0 v–NMspH A@[~ψǃ $DۙLں('i˯_S7c@@HLY~%yNH yKQ4|?"Dveo? rRU7Sy?"dH R`=Ho"u?"%0h/c ,'@@Y~A9"ikwm?"ijM'@@$EۡQoܿ I5l=Ho"%'@@$LY~!h fM<  v7^  ˯+o='@@M.[~!s$D\ho& |&BH7N5';e9]II@kt# @ ߟ7L( ;7^"P>t# knAgo/752B"巻so9]c m]h(|@ /&-O98–߮lwEzN   `C#F✜C@x@CO,3M.NZ?Вc -h_e9vN@c hjH圣=􊗈7GU~3BBcpPCSaB eNy SSeadMHN/r9/ 8Ԍ3O- 75( CqF4],!hˑ@ d!t}Oc[~ۅÖ~ D | -dMII5ž< 7=JN '@M'D.* r9%|x\7BN g Oщ 73h='3h'pGr.L̠@@2!TÀ 7064/ _ 70~4- !bnh$iA՜f !t 0^4f+ obN@O:` hlk׼]f-4)ۅʯVRN@sO:dZ hJ…82IG]n7k.L_m@en\'_[vaj$%9M @6B> bnр],D` CCnN@YR'ppu,*fj9[Ⱥ| e15j˞]8b"˯& td/'u hqv݈d nN kCgB>ap 7wz0_ 4j3䓞 4f.LCQ4f!'qȕO:%#va d\r)j2a*Ms\ n.c7wFN c!t0p*d}2Ȉz']礥) G,ZI@& dD!8) Gdr?@|R c,%vadj? @wۅ}d?2@`|';cpp1dcCkHs'DfZ\ۡ|$bKgN m!t4.E";'rS'ȲC*d TI5ž(Od@{r)=|RM.nd'Mi LIʄ!>Y~Gr)O~C>`d/ $-G|8-E΁#MWߤ:'D%IcՅ0vc5L_꜀!K ]#a#`.N[Dr%IYP's008mO Pȇ M29 su!MhN E1ۿ ((aK`2! A14u d#BR1$cHBǐ! C@:&fbdAĉ&\.{Z /O=7>]UM2An9dY0Acv $C@: t A1I H @pΡ( $I(`AExԿk a16/YLp~T#;s3wX_Q+Rs0O\ "Gk[;:Gގ!` fsgŋp|TTT@/F( N-a2PR\̟7 G̙(((="<oh@cS;:?0 Ya0P(0w,\0Ah ;ؐĉ(r:֖c."1n9qֆ /㏇`ĶN`=x{p̛`0-ĆOg%l6\"xoM뭷A  F,c ={6N^9l] $QY잻;#C᷷7nĻmC E9ʗ/·qf&[4A@0c?w}.+cVVTSgnUW\ukh4&}sEy^;ۓ:f'K/g=EE_f#nDwDk3IkfIUcz}ȣq~܉ys16EQD[{;q/}>žaIh4&|B[OD1P(|ߥe򫵭?fSNI;AtקB{Enp-O$F17oGMwk[~v]hmkK)%">h7~pÍi1!'n펴DtH@7W7߷c.l|ј ى[oetŅ$I^vWt H<7S?ؑ6lP=[m[&OS܈/?fBN$6dĚUq)' `[ofUgY*uQ֭SO[;-\˖bY(**\hkoq! `1?~yFZE\~Wp7ṿr 1;g͝ sxW?L@ص _xpɗ/&}e%G?ĬY-P{0s/ǣw~;ZجVHr#9Ǣ p/Žw߅Qmڽ&UO?u) Iɲ.ŒŋI&`17tlkZT;L9(,,eTohĐ9<c سw͜Qs?鬬˲vE~ (((HY_9S 88稫WubVm /ZmOOzzzmg׬^ڌ?˔?n򯦺'w4C$45j;e%q>8̞ۍΎ#FՆ֮Ezaa`pmK,FMu5 @ R~iZq @eE%v{̶`]QԤFXt eCCC/_ V+mF)H"0ϧZYQw! 9p 0HU)/+Ō3sZ Z`|0Fe3= c ~##nU틋pa`)oڐ$WݬzEyb֧ӣj^jBB`^~ע„h4 OQ1~eX-Y8Umv;JKKI2eF TW7f%Td ZԽ㎸ݐ$iW@0G]bbV G87ʒdV%8FJ' U>qC!Ȓb&SUMFptH28 Q؈P(q>ٳ&1eYV6 fi~r Gxvޜ9Z,)/šCbN" : uO[I &N˲zy4>;ٍ%{zpu@WW7X%dIY6G eF9uӍ&Sԑ,˸_z bs2c($΀.; ǶR$QcCa(p '\zsYQ7E1yU&'b4 2AaP?O=RG]IŪ YRÒ d A4z:T쳊 FWldcL5$)k_1uIpgqQ< vHe&8:t?Q{2|>֬ _[eqfU>|>OU 2*X->9fVUqGbo.A]0gQ8쪂:T$z-L`6Qp:`֞1jyvdQ8YޫYI_I80(--Quxt Sgn u̿$qB0QSmOwqcR5`XPSU=>c8n\U+@?r$IG'rғ`ڴi_݋{(1G!(;g=}pؤj SSsAiyozc 9JJJ0ozH%Pq0,RCCN74BGmʊV*Ղ{<{t`5brUm֖3GB0E7w.c Bعkj c ػo.DaaAT(((U+Uopp6=;~ưfj+,_z ==Hy?8UnۆAU( 455:+a4FO;۴ {K*`%G+ً^|1+"1H9nI֪jom/T WQ'X*7?3t圣֟,x{3/Vz`1?4U.;ߏ=E}6 x{ǫepܼ1_/"7y瞫x HPRjMM;B"FH&( /[TNZm}o~v{yqOp݇Wu ϞvnjjUm%Iƒو;==0e"u x (+NOS-ooé w|?(<'N-6 no͘m9hhmkC*BE(A+۱g>U=glzӍ()QHۇP,c!2;L&؈@$x<0vov܉Ʀf 3:V%Ř3{6֬Z c()9FzQۑ$H>ׇtuwc?((/+CMu5jjQZRv f I\.{zՍ #xl(--iQ]U3an}}Fo_/N|~^(.*BeejQYYlG?ZW 'M&jgĬ1:< 2n5EP.dZRRR,[d=v;:7w'9N' 䜇+(#P5$) -?u$Bǐ! C@: tLUQܡ mb0 ~vXg*A c$"91$cHBǐ! C@: t{N9`rIENDB`photoqt-2.5/img/filetypes/cut.ico000644 001750 001750 00000017714 14134304105 017464 0ustar00luspiluspi000000 000000  PNG  IHDR\rf}IDATxyx;Òb\$GBIHJݖ%=PJg-,m<]nnot,Hi !g,K>uYH3!vۚf9~cQAχANٞ#Pd$Fq|4` pΑedeLcܢ:͵!2F#b( 1cBHPO%/{ fe# XQ_:o@ )I8 ȜK^UnƠpxT uuhGi4@tGPdHJR75c2Ǒd B@H,QHlȉdR.--PP!X =##=#H8X:]&F?(U9 E"AH(`TabdfrQS􏍙[&'+(O&Mq5"NH(F,7!49i}#A`,@21UH&) "$YH񻇇K(tB0Xd?wz@Qtf!0D&P* uB0]W̃1xc3Ӧ wt#t@Ag5rP|?IАo|Vr1(Zj$PXc63049Ptr_ 0$hP& x\.KX.AfKC34drmsԸ]pYdHx].Eڻ0rö JQ^AƁ9^m0)IBpZ E" [,4b3{5:s jkj,Z` A>'c8>2ɩ'5J 1(˯g*uQ[Sc0Op4V3c}B}W 55{9~ԸǑH 9EмQ,#h5f(_-08 hFq2L: Y*lno0 hG uu>&˅zSV%c%F}%XT[@tWͿjfK~+- DO@5 "\Սdin!@[}}wEKBs8L}Q<mj@׋MMpZJ~>mqp-xӌFʥ>.b&X\EGkmk)R@QhmEW@lsT[گ>5(JvB`̐s(bUCChj~ P%(|ڊ r2C` pF{;V76ڮ׿Ԓ_f&hWw8XKm-~'Ok p0V&G\[zbn81DRRE|􉔉#_ i2$3DS)S)Yde 秌 xyD>u>>Av'?0];<;˯} Y+VآkRO:OY_%̈1H,K~K=<˗#- .j\sw!9䷒0'0kQmt`+U{*1%Z w !rԱ䷤}>SPU ȒRz' 2WzsQT>< bJjE}(!ʙO`s{[kӫ'(ffxɯ6s: k^O%쯓 2CɯVN^O,%pjхJ~rjчJ~K> R6>'@@f֒RŽ e1{ɯ :OEQt]򫕓(HfJ~-د P͖檽+sJ)J~Kc> R+j> K~* شOhbRHrl'@@AɯVv ٥v qq&%ZٵOqS[+Pc> 8&t6ʼnq+ ͎} s<1QU*Vl-Gp<p Nc_OnZ/'p} Ba"^G&C98W|@} !Nc wlP[*; :r1H,xb wtD8W+ :76++2^C8É%Za=[c C84t1TV¾^tRX}=c !˩/L׋s8W+ *7^G45"0808C^;[ VU( Dis H8#a^6o%XO6Pc urp ;[ >*Lm1'xR ᕾ^15;/j,'``ҒWdt9acrB3N*-,28pbXT׫"BO£S*-,3M>!mPߪ\]T[6 X6f|x2/H%zJ%&xʅWVdkc )I¾^-*} nM>z+ Q0 } 7T4A` C6*_cYO2oIij1j?-_.L%QHO0ӧ|0VFOI,6rDr!P(ߊ0s@&#+Nc__/$sS(5);1sM>F)T[}hЩV]J~''0d>QM>FT[]>L |/6TkT} &AC|$a_Ig_S6G`|@` SIgra*51􎘣OTP&#g7U0YLh1`ra*5' "c ʅEA0z W\1Hl1=8l139V.\(_˓r9P@E`'i&#ppf_d@E.M>z;iv2ʅ ۷i*'`hرGo ksf\I 6ram׾}aC 7anTk_>}V=*˅=f|̵Ug/J~>]󪃚|V(ӃR%TF sWI:Gor} Sɯ'[ȜC|]xra*u}z'K0#n1B Sɯs'Pv4 88\XQtש$Y>`v%IW$-H&1c`fu*\VBK=!0,S:XO~RFS9GAqS'GK>|C`–ЯO@s0&BI>M0OM>Tld碦&B%'p>P<&Ḅps>U&>j!ĄJ( l|1rj! }ZDV.A(1%d2! DV~ߏ,sNE?c Bhׄ8UW&!F@Q`8!VWSC  Nc*ZročW_ 9GKOb˅zܮhhkߜs B,CpgnW4Ee:CN1^a b& !F@Q`8!VڀT18P( @E&3|W3S)W0<~vCI/2FpǎpX IqQW[[ׯkYer9d$v(-}eYH*w\z< $IȚvvW{7L 2ŋ?Ͻ2zNjCm է-睇.۶lAscpEQx߸%,˸hf޵ (jzo ??+2|qǭrgߏGFezq 7zF%ɩ)N/Ksgƶ9(4baSOax˰נT1p?j!e3DAO?M'? AnڽN~b+E0ƐL&6vvV{w,l7s="AoTm>26iN:B̄` .Tp$$\Ē(ᜣU=`(h,T{`}!P,`ʕD0 Ur3Ӿm( 6~m'Q~POm;  Eс_t;9}M+!uȲ\S >jQC%_m XnV^B@p`覉MJWhEQ6Th7hhCEQ܌s7mR}wNb'+>*#LD ɠg`vchnjMP ExxE>qx!텨(`dllf$9U74<7:;5NA`(C]]?N+Y"q֭X֦jGkދTyq7d fR4~Hg2G(1H+"&c1|{w܁cǖ 9~?Pyq<䓪.w"vvPhM X;wv2UK/s1 AbA\.H,쳸Dc1UE\76a?16ObA]] _@ѣ[9Z ,( .ڼwS3t/;.+ "EA:Axd^{ ك?= &Uq7α-oA[K n7}S꫱˱nkj Iag_>zI4ۍ_x!\CX CO|3}DTN:^yu45ai>$!2:A"Sͧ( ֯] /@u8GF~`ͪUhnl(F78P8JW={1 "dY?~]P72:)8;vOp啸P8QLbH.Dsc#V \s(%+OV5kpއhÑB0ǑH&$pECC}=ZZڊQSSpYQ*:v⋋ϋ@' PO`uu8cvZrez97VQ(ȏ8؈s>{}FQp^ MG`Imsړy)!F@Q`8!V)(`.=. B˥js/ ؄X(x嗋nǐ_g@t (q0 B (qCr)IENDB`photoqt-2.5/img/filetypes/ct3.ico000644 001750 001750 00000025514 14134304064 017363 0ustar00luspiluspi000000 000000  6+PNG  IHDR\rf*IDATxyx$U;ˤgfdf@f_墢 * E \D﫲 * 80 $=kgO:tz:N0dyy9U9U]S!( !P& a`& a`& a`Sg[֯HE`0${fޘ 5 (}L C"&M]D",0B|a`0 a`0 a`0 a`0 a`0& a 3PJ!Rp8P(P8 A 0M0L0<8(e% LB ~?gzGn|zܣ`6m"ǖYV 8@{#0HBPH{z)x}>Ji? ,pMMl2!n#?vxgBH+LD) ߿̶ Øt=AݎBr6c$ 04:ɩ)B> (pMMQB< C# D>! FQYVlCV$Ĥ#H} ia,)/ݖ)`fJI7g"χA|f&qO{V6"!>}CL sxQ !aU (bpt ?!$2'0:R+  )=iO ` C!NLyD0K}ch&1 Bx0ntLN@XrOڋ1>2  `Wӕ]ah& @)ŔATP3>^, JwCHk#) 5T [Z~!mPBaac֎`w šRG+ ieĒ(Rw`Ρa0aAT^T3#D!`sh!w3&= qP PQu:E]N9ߏ~M j!`'>G#d`p㠊>#ր]}N gU2&W=&< NL=p`l…Q6 H}]52a14ua<o{q(BW 6(صap$R -YY(ȵal3A7(CEH&'(SSdWu2BrOohH"0\dgs=>J)sraez"Y~G7 $ Xf;0ٌU-Q&H&qp!?7GuUlUNDDa9aP^RWJ\; ,IJ& $8PV+¬ێR {v(ќ( H DssB7YVTU!jQh$UX~R^(\RM –y& H @8cr28'(7*+cӆ=Y X~c90H,D '_(0<ʊVuLBA2߄? ą @dY-XRQˑc"Rp<,DEI1LRԓRP*F!L,N"Ǯ\0 D#\-9> MP~J.smMX& 7>a90`wTvop` [O`&bRNLi%$3=3' Li=]9gd9 #gF#0`hLY~%1xN #-Y˯Zo/Qi0d'ZwPo4zL#WLa0dEio25zLo9'!j&Q`uY~en=0Aed0bN #ekM8Fʨ[O #%_J- `Hׯbo)'4Z&QrLI5o"Ds: 0`$,ҥFRD,NMY~9&y1sL eo29'j `^,ɠלdteM ' (M7o': F@0G[0<60S~'X~%z )'`)E[wFF 4D-Cc8c3 ! opghoKN@H̡ 8щq>ީ`4o!'Kv5mBqsrbDo2h='; 33ÒYBxց`(dG;tWTsP(Npr##㑯gi4Z N:z0<6'+Bzv/2Ly9)SI؅WDQDr!t(n1^ۅW9>4+ |w:mX~ǘWF5Ф ۅ#_'ʄrx!oљ]Y~ӃVr)!څ.l*@ 9M @"!t0.,|h'#WZ hF =j.,A9@!t@j.,A9@*!!aAJsB>׌FYJs9C>逋څ;: ,ʠ֜j !t:z{$W9ԘP+:UofU~E9U @C>@vaVW-)':T'VuuafUj J"82IGef_u ,h\'p`dL]vafUp=T%J|A.ܣ0\U6' ~nW((E}EQD7J):{ (.s! \v6Q S0Qyم[ 3˯ T.')٧p.Y~!BIױF™.,!Q`H t3䓞c:{{3bf_!": d\I(f.,C@@K!Ʉ]U6 dTI9p{@hf_cΜ`Đ̷ x}b_ !' 9#7Q𑶅 3˯1JCN@60r'̷ x+' ̅|I Uf_㒎@eRcY`f56rR谄|\uLy> q|hNQl5%pJ#LLMab73'2pP2XȇPr 0@@B> zH5' YXȇP' IXȇP7ɮ'WXȇP7 @Ej uJ#8[֑ /q 0ξ~H[G31FJ 00L 00L 00q}ldee)O ~^/fp>"Uk rLBI@0`0 0`0 68Uw)E(̮`M$RI }QsDCJ!tGW["V] 'chx]]BӉq 8l6:\˗˖vmN,&'qX,i9WpXy!Ys` '&! "L&v; (/ǒ*t Jː 4P#@)EOO/vލ܅CM14<_$XVamM o;n?+ayٞR<c.I5EQDEy9~|PR\,y套O֖[XA_IFG,]=رs'^۱MG1::@0w{ՂE u8aMD avtt/!~Oo/~/΄=DӉv@EoqG_ U)_\.<Ò˲Zq嗡TVV~͸m )x03xgљp 1<F$} B&n02:жᤥKP+WvMMGё #Rؘ~Ӄ uu P5  Ij_ZR+/4.,_ ys^ QrՍƽ{ƿC05ЍpW^} vv5kV_>TjY^("n 4ۏ?=<^ݱC֋~k.??7<64BXU]_3u8nyX,,NJes_^z/Tӂ.!ē^Q."1o'#C͛pm Ełq׏ylI7g}aW@fjO>Ki-..oVUDaaaғnnݷ?fl޴kVUc'lӃv{HAnNNJB-8Yg59paw$7L/cUI(l6+~8CWw7;ceWDyy9jkcxиo gUxf8/feKOBEyDQDvV֯>`OC*1]PJ9v1|o btlLR"77Ghܻ3331۬[[H9C]]-q|{s(\h`0ǟ| ]u5~~v^ϑT4-dsgzZRիVÞ_B6YE^˜kmEo_n/nJ) qکJhNpW;܊xyް5(ofK=1 q‘8EJf܈RrtiFpa]_<㒋/Bl'{zÏ^+>9q1a 6*2>>.}7;;E*8G1'ȲK,;>J)rsrnژ =^YEz) Ǵǃ7zv|ӗ+_:Ef@GH)ɲZ E{\֬^GAl26Sj߁pMNiF)EVVnMXWS??/U|܋zE0#WVV, BѸ7coCmjSJyy]SLEY sO~J0āCpO]bbbBRv-髃R4bɤqzz{]VVjׯQtTV,EgtY֎n~z h\ 塔a||"fb\RJ((ի= ţ(8e'P^VO(:|IB|Im@7B$AO"n9o1<<w_Gs`+W }R\rEhk];—` _|3XUR+M j122ؓ0ZHܶ.òVZ UDJ!Ύ ֭uk񹫮[o?^MO޾>ڽWU+}X)WJ)JKK`=,p===9Bƙ$cOV (qчķo%o-هV4/%%%?miQ/RF`" 7 h炂|oQXk+&\.MW @qQQ2YQ47ʼ?^\N;:ݣYt!",3zpccc1PJ)rsr4xgW7dF --J&\.?p@OL " q'/t|>\.8hZ+n:Im_;3>q\ĕrA)Ż uuX(ץP8 ߯iaռ͛#_ eB$p+:w!kb!$-#9J)%}2Ph3`$+W\5'JKk+oޜ8>P99'^O5}-??jNBIZAݍ~3f>L_ʑQlټ Y$LxUNK v$"UbvzzR7/gn==8tvu+~پ9&Gpwl733}{,uEO9M7gqW&^LqZUE,Uႏgph8t$BaCpM_o@a5A3,OٲnnKg[6#77+P}C#|OT;!)ϗr`(W^ϵyy(t$6Ѕ 8{Y n&_(',I>^y5Y,$nÆ'V,[* %4А΄#0LxyI١[#n ڎIow~;‹/JڦǕl"l\sرs:b|Ka1AA(ƌg==K/C}E !áÇ+V,Obp`ڵh>z,f!457c~ 9Ҋ_{lB9{.H׋7:N)%̭YVñVmv%ucZ,lټ| )T]MM8$myD(.*u:'kص T.^Me]+*  b|bMGW^Ů_\c2;;go; izRU7V7}[_c-- mzq%Ѱ^ ݛ6mjMbXWܜL{>n=v G.+8++ _st&@f pwPKn8s` {9ɩW\tx T:rIK? ?_O@Dn>-{%!>49E;֬^bXeӦDQĻ GK (={Y߁fЩPJa6뿌_3,]$]AFI7ڦdl5c";; I >~Ux: rxW^~|a|cJL-B055%iՊM6\LEX\Ғh@ >s)Bii)o ˗-+Dn޸|}7zYpIp杈ܜlڸ8A88hi--),̱:XGŞwFC^ݧR mXpmzihmk?w]# }\|˱t.QAf%_sގf~S߀ֶ6-X-8زp8lI8䓱SJaoyTDebraL&|kf*pOwQzժEQ߿{*BPW[nZ_]{-:pAZ߉I$|> AL(Ǻv%K`2 .?p'ur~o獺Yjz~btl CĄ PHƐ! C@6 l AG ._v1]r6AD`َ 9v1K/|$7(I $a&%! C@6 l A1$acHƐ!  L$cl9D YCKae N. . NALHTB1H}Cb$@XCQO lDA'Ã\orrqgB"%$ c p=>tuchxaY&C%0#DnVJ򋑗 QI]!HYߋ6 #S|~?mCRn ҢIO%, @00hhAw_/dE |rOoƠ( z0Y4.q"4 z}kmįc aIBSG p2x3$I C !$1t.r9$f(:zP{A)uPR~7amHT;C}[#rL>-#èi?06փ  C?[ :cBCkr8݇$1 M-ތ1 =M!, 00tz3k42\sA0p=mꫧ`86laH&cL?>;ЇA? `BR]}݆MFؐL@iaG5~Bz)H$ p샬nʔ0p!BE d Cn*En c pP ?[ZZ{H&  E+,-1 v܍`(X  RK$Y95-unE]kifff`’d* 7͌%^~lFD@#Hù!S6kZEAeS5F#!T4TC0,1t2Z6]Է5f@0F;Y`0_ 6V#$H a"b^NTW&08DkUwcmn*0m=hlo6y2"$rMձN0уX!l9*i0+$r9LP[Q\k76F`rcy3<1*c>$ 8D=Yn*A@7:u M1Gpl}+Lc yrnlKG-͵F4w¡6` !9=fz}9s#+n&?#:+@ܐLDq^*NQ-c,qƚ׃C 8`88 0,s|x پx9 @LAӍE3 sܘY4ݐm,rcޣ#()0Uvftd{ ׮DCIrC s+9GanfMKwS4!jmnd6C9 GVsgtuiۉ,̝1NљC Q˯QI#9@nsg):"sx3=?x2 !0A!p`δYX8{>IwPN 6$ q{`<,=98Z P9A@Q^!+;egpXʏ-B9ؘ#n@8"yٹ׍H^6rpGX.Y(/B^V.DQU? c  +Q_ ӕo8H$2Uwbz4?G P1Qr:q{ܬxܙm?VD(0]}ݨ;Ԁkc $9(EnV.dYFX %(@D8..8EGd0Ȍ1Τ,RTҒX& D; ppgR%TRFsXz)q =ԙT~vaL4A@}+C@- A rGA@N۬7^"9  +G,5塜XH}wsor! t#߄F9Ð*oPN$.$S7PNqHwkE_켞 9ZTMG*Rt7ZUMv^Oќ0"L,b F&B(lub4o=  `D   ƨD~oM IcTo"-'@@$-;H07^  ,D* -0k5"Z~%sX~!A³"!T5'#t%jMd9k$ ̖x9,g[~!5s$D|X/  Tco"X5'@@Jx-HTa5oB\N6C 2'0UX/cryik *ZJʖx tY#'`CmK=[ "n [쁎^Xќ0ۉ5PHW ubW>%)M44vC4'`,}Fccg^cN47@}Eih`M+,-$aO~t@$q om4I ;Y~e4'`,}V+4iedYƮ谨;QhAPf,)1jCy1`;ƀд'RslhM,'1 `W^+0vV9\Ζx1{NRyhj/:! {k!s{?7̜((@KgkBkQd+Y~g4'le1ƶfT4V% W-] 71f,!1bw~HIrg!$QӝdX~f]Og9rYCݳF.,* 7̸ )G{ofQp>Ӿ≇Pw]@Rќ$g萏 ,R@}eWFsfXO0QG)o<7 M76WC̒0i,mQo^a3'`J$ {'%W]xĚvaY0T4U)&wЇ,d&˯!'`*'pBvarDB>z va|d՝ќ1$1!|!=؅?6]XQTWw0 5U.Nڅoj1z?Z|hב溊F,dMF Z ^TS嗮)è9=B>z G aɱW"oʉ'Pi +"c!]` 46Vz݆ZO )y{H.L_` U!=md5cs߆#!=) hzW],HN JFC>GX>مk<0(|L:0Pe0c A  1Ң!+WŠ,F9 QB>zP8V0Y~M$'З֜@Z{E2+#v]i.,0*ɮc"vՅSgZ~khҝH[0jGTHY,!9C>z ԧ0Y~Gr)f A* ל+'r0UGcRR],C t-;Ouaќ@SH5.],' DƮ Œ1R_Kʜ@J@$ڏN'BŠZTR"Mhh7GkՅ?J.L_둪Ŋ!{M؅CY>tuhp$ǣ!בhu?Yik9E$8Q[A!-eՇ )@B#7)OJ@S@4EN D!H?Z1!?|"hKƄ|辟 N4'zGV! $*J>a& Cf @LP)C&ќ@L'`cG3fNC)zBFeT4V$.*HLUa)H1lDAN>>:; HْA 'C@6 l A1$acb<232@60#.;q 7A[ x_?5vvT:cNZ|2xV>Áҷg.(Lkp0ʾO Ɛ! C@6 lLRk10A]WQȲ EQ Em8c%O~VߡLU2'!DA@XفjTTD8Y1v#/7JJP6{ŧ攡L/"5阒$!<D wFB5#=&PR8 552EQ.8΄U!Q?ЏmoǚkhlnP̿e`Zq .X3N[s-NBQaA"˪3_|e:?X܃JE<쟞,˸+pߘ g~W׭uCVWE/7 [oM}<-GA$Y›o oyۖpQG]C=6:^/-8\x1X O8 n;chmoލmNN@D|؈sc,*V1Ҍmor.ڏ@?~El|sS܃2~?vم J<TuRAeG,z\JıgEwޏŽ 8H@wv ]> ` ?;aP `cCRYEzRfq6kh!@Gx8xŗ_JwSlGEU% HSoO(ؽw~o!+8Մan FFFCo&@$z ۱qKC0Ahji}_߾(/uPE Q\TO\՟Z㥿mC `'vz~m#N3q(w:l%AAImљ@t?tnfKxgn{]; CGv`u u1s\aɉ{*I՟e{llSaYaznt p1Fsۂ|,Z\I|FgE=^z ׿Bcs#14CC$UX}].\.aD|ٜ2Joo7yu`s(*մc p80tքRQ5  8DQTwNws-(˛v|#:ˍ|U>`˶ENI +2N=T ? ! QpΑeoljw߉^3~8D A"p\\I7&ttvq8DN9ykjkp׽_ }O$9pcά~~ }{Bˆɡ^:X o}O稨,p8hVEQ0o18Ly(šuk51$e] ;? {pƊX; ::!HĪիBFEL7յ :;n2 GSK3^xϸ+}@(@ 'C쌳p'LVl; h5{zbrf`0{G*tǭX5t?;Q\TUt#Iw5}4s7vnVu38ԙ1/] ?߽w>ڵjI?|Igxdkֿ7_9kx $Uc:NÈmq9]jȜ$ ͨ BG-H'IMvs#.NmND<4̱0$)Be\|ErAǫ#JBO9IVWt朣.< چu @#?/U b2!  B*~Uzfa%MZe]ع{`AХ3 ‚uO1Gfffݴw?> 71%$Beq8g ?B0I;oC>\բ#Θt9GqQ TT/nmkLByfdfT<^uq)(H9{\淡(&OcAUuss&MqΑ3fH W`@,1olBSsSmrP:c&onEQpsp]n1EeV|GDeu%cI (>ܳKg͚t9ŢTukMсg9V2Mo4qE=v`nRz W=8*_/":/~;pєp8pi~<݇I;c )Zr|QQU귝x rsR2WXܜ\ݿ.q }x7FC! DA- ~xmZU7}tx S^E-iUu~ع> pݯ/;@˃A}c~_ b驧%`1QR\Y184u3lX:siKQ6,̛;\vtv<,攡 Ccs⺒/gqVʖ#''Wom~i @صw7v <dee!,KD_?`\vݸ?Efff̺wVcq-ۃޞgW]y5sԘ*t $WPCeu%jj ϻ\pA( . -b, KFQ\\ R (YrTMoos&t:_ ,Lˊ!F(bjH>O˽e^n1}qe,[Pėn7]wceEYKT$&`P\j(Y~Sܰ2q| >uk([wכ6VL~g6`(/9raŗg/~LHQ9½_O8auz4|G="Mf.xEJo}ҙ_|6 [oE]}=3N_W_/]WCE|s/>{%5XO._v,=5b5(A3`ܵ{EuM5;;088@00En,Lñ SN9˖ODvvha->yxᶛnŖm[WZ[144`01Nx<^L+)pβqܱv!rBk3B"Gq Kۍ8o#qβiyhidb| |,NavY  =h@Oo@e8Nd3|L/bv TP(_hkoCwo!pfzӦc(*(^@ x$&.jEmp3|;L]j>ȕEő>c"<2Se& (*,BIq N>i$Pj(Psv AFJG{iE]b< l A1$acH| p0rq1@ (ta]A1$acHƐ! C@6:AҭIENDB`photoqt-2.5/img/filetypes/ptif.ico000644 001750 001750 00000016727 14134304220 017634 0ustar00luspiluspi000000 000000  PNG  IHDR\rfIDATxyW}ǿ{]ݲ,C ˖,"p)\$0pQ`(8BR88 $`8q,[jWc_û;3}}Ԛ~}o~AD(nAA@! B A1$bH"(688|\A1 Ùb ^A&o^CSU A A1$bH"ĐD! C@! B A1uD0?qTa 5hjjM-CӴ7[dH%B0ie0F@ ]0]SQZ.`9b>JMSu|CfAdȑ-H% 1 ! \YV)#BBsoB*(-[@V"Hكd LIG!hk-f87r\W:=6}SVS+!4dk;:zHy}D!hr 2fL[2cຎB|mݽ郬D@8vC<&FP^.~6t0Ơ*Q*ѳ{?$H;!Es]4Y$ff1;> MTcf"& )K6"c(/0;6r v@Pr1(J0 9'FkO H*2SSW73F#s^$O#4/F_4p" 6Ӧ꫻V)cqN̶`Kr \gyƫ@1O_!M ڋm$Ć`c(>WBvr>`8(dMKRF1%@M5BV(Ϩ7@f cP+ecX탧*P*|1ZiZ~H6T%l+>ioX0tTMP+e_ uMu?&cff.anb;l`0>s9 0PXZ0052|D&H6¹u~l9t] *"Jjj8 !,1d琙Mg(2s4 0Z74STK{:kWjLbd9PcX64S4 hMP"Q_XU}4qYR[mp15ԏ(u| 8H4IIdΡDƨ% 0ƐGv!3P-afbmH6ҡ"ј/n, OBdb 2Gz1K/-j&$ bɔ/ީ$!071|v11J~ZN@ 1$[}TD|\ܒ%ET`DMH6sx2X")kH+Aš^DqZY5L^ꧺ @A[fIQoYىa0f i̍("$[‘2q9Z:oi}YkmT('`mP"1t 鲓Q 6lfm7('`=‘FK[pOَ^ē)5o9k/$QN$u$]}{y-h%khF%H{>ȑM%S޵ªמ՜@r 01ֳkߊE؃&ر1Mi{[~9Xkv9Y:9b{d0fX~-2c()'`vw!D-\N?xAx->f('PHvha ]9dEAg\IH;h>*"&)'-$ %seعaa̖,LB߁+ݷw%o$ZI)'- Q[zlmC~i49 ame%D =Hd98Oc/ίTuSVs=P# $9d%Hut\rn |24Mgc$r$h,DT"=u~`C_\ks.{V0R6B`Cd$RmH5 ZZ@S4V[$HJJ$%$++3.ef6:vBD` $vrs1IAŷ̶5ӯeM0ryL c@ Pi tN_n˯K#  <qTu 0wo#PN`=$T-,C9ܰ6.  d 'Ppj߹>ZO vTu a;vTu' !|]U~݀ u=V6jN@ۈ_!*9ЍHj%9&IJZnΜ a Y~(''@@4_뇱 ONhQ-  [~8PH*a  o#%'FJok(hu_{G*9 47aJ Z~TH  ,˯c6rHsL0'@@sk#'@ N'Z~gbm GC\c~f"0-hڜIh"=5Nd˯sQ #'fdž1;v $Xa)}Y ȖFRN C63j5$dg1rIu&,_+i=@_QJ;Jb1&!=5K^7ShV-x c=A-b rK-/yM":zoo9.s!}UG5 O8ZIғX 0ư0;6c(>{9; 0ư[PՊY~K 愠φk'j'[tA$a~vgy'8PZ~9 ~L6dXaaf)rғcSscOcav2O?603꿜@ 1C qڈ_rF'i @ۅD-'|)bS-f\鐆]xgO9,|)#HO:YŘ|v@\F,U~9_ 3څ ]sVujN #pN7HǩvL.L_wcre1sZ'o-.L_w0r|"kB>"|Zg]  8..dusB c yB>vaz9qj.C>4_vU˯ Ys S!G]xWvg9qdc=ar k!].1$huacjx@C>N0Y~ PP ,qU@Յ+ZGI:vAL `J+i^|szouSdr (! j[0Y~FwE+]x#0Y~뜀J>~1 Yd <3D 8sۅ x"|:hLd&˯*'$+var B>6S ;h&˯rY큌avlW!OC~j0Y~}M-'5X <)&UOk3d59wRC>NыمU~g{ "b!G:m.LU~9W`zd)|lǦd n[;5˯KP0rK|1 Lcvu_a 8p r V«ߐ8*Ä 9 !Gh^oD ~ׄ)d NlP|llua's JC>vS5lY], ڞ!Ma,!'م7.LU~Caj肭 S)1L bf]::*Iғ'дPa8X1d 7vZiTEz;A.| -b (Zg1CR _z`L$!hىh<ٔU^K!`LBv!-Ä[r#$ X(C`SNB>y ؑ,40݋(|B c60%1(ChN #!!YU+3O^IeztuwSب'e%&؉ko=rαe8rQWȲ ]o7.{11HH4d2N݅C+phkkY$Yu'!Iٍx-oė-;qNꝆOí9${`#9wq~/߇:8G$W=ѫ69}{i?.o wWD+ `B ٧_>::;WWތ^q38X{U0C$ɰ_ov]Q.]2VQepTUޖˮYL7m1sLA|[Z|랯`ii{#Z;K|[}&gf.ç>v>waP{! ?1>t1|"Al =чg? dhIsXK(~v}IFM3TU?}ۘrCgaW UUWf!nއ.5dz\|O1T*a>:sO=fgL٧nд':o};L/$ӧ~cu=tƓo@]qĵ۶E9 L:*ʶmiIOem8bرT*W^} GsԾpCV޻εcg/^tKl5hk{mW! 7|[܄cy {&R@SU<׽ ]?|)LSe>gJ,0躆=\ܺ<}tw8XHUw`z6WH&m < )s+ND nOof/}/u;{𲗿|c5 !UO VU+Hyd@;{H$Mm_n2AA@bD2E"VEEdE!! @viⲩc/a4BåuBmm^7I(m_j4 ME,+ムv(JxzFcGOkkǯ]sC4k\Ǿpձklmc=|/GƯOSwtvbϞ}x {{G$ɸk}sgqmo4Mío3寸QR6ϘUO c L*{a;Nݵe%I;s9綊(VPs\.ca>~ ?}4׿hmm.K8Of|0%_Z+/KXZ\ fQ*-ngWNr B @&=~3Mѫ S &>3ݷo=^7 !ҒQ\uOg `'mG>׿On [^++nGp+o-JϱkNʫ5}81tξ>ƗB&/(.?,u {;d%7ö=|_{1t3t Dގ={/{ ѷkJHzr}FZZR;:pʫjudEDH$ގ.ލ={aؽg;:D">^p !s,J'fT+IdY6w9ۮNzI- ]eB A@@! B A1B~$Q c"(UECF+CsJ"٥m$tT4 Y- rnN{G"קh#2~'? M׶.}JŢ5p۟%@<N\1I]߯$K+] A1$bH"ĸ+&<crɬ) j]kQL ʵπF}/vksk] 1 N;wH۸TMÎ;m7-vn6*lAKKvkچvώ)҂TsVWXFWwOfϩW 'LczAl_ix&H"ĐD! C@! BLπ$ٲ9A(Jmqm=|k6AIcݮ BsbH"ĐD! C@! B A<{IENDB`photoqt-2.5/img/filetypes/nef.ico000644 001750 001750 00000015751 14134304173 017445 0ustar00luspiluspi000000 000000  PNG  IHDR\rfIDATxi}=tڲCĒp8>jǶ,+mڤs#MC E iи6H#\ EIJ";Kcǖu+}hWKq/KҮ]}1iKŒ? c(D1 1Qpǭ]AJXLwן]y%ঝ 7mDDeuJ҆e[ Q(Q1b@c c(D1 1Q1bd)0UGJqNVeB(Ca"oaY&,ۂi0  D ݀i'ibD۶f0|f\eA*y70hlhBKs+ZPMxf@5l $yضV?WJ-B$F-mX5uA@b8$ `Kӳg0G&A/P皖3SKnDkso"@6(g6%/B@JLYڀk7!'x}\p`z.!di !`&FɦqƭhjhbJ&1:>/fz6ǖK@kSC\B $Si gl#}PFƇ`&(@v!S2 rB#C0<8ύE3e~4 ,ialbمLMOW"l ~"*tӳ@KM&Ǒn\. U&\)o;6 R3_4:!03*(+ldk-Bj:c`c!@:=l6K9;?\>P(E(0;?7Hg9(¶-~,RJ̧3a\@@ oB]ȄlZ\} υfgBv,uә9~y;(4:2CsR)G14ڏȾO?0l3T-yPw >4/zpT7rI)?܃АΦ7tJEK3S& &4!Y B@tQ٘! QbN´>V=ݰ,DW+z{ շt=Z !pzjM&ϜƩ#NA(" Վk # f'!WoPJwD`‚p!ՇU)D #-Ntb6B`p/RWk (D}hvƆ&!n\=e|} ބ-a(B 47=h>5IzOĢ "hk]oպD=ZCs!3s+4 015!@J)47)R m-kP_WP\{?#}Hg+Жz9/ $:t[0 t{庰䷲WCj&H|XBǚ.46,@)5h_k/OB U%걾k#4-xS].cT_'γOB{<ޅ}ˮڈ榖ˉJ~+Ud@%蚁M7槀R mXߵBJ~0-}`Ќ |\pwnCOѸ4[R , k:yz~R Mr-:>1*ձmڊQWӟo22W++ O$@:a\oކH|b@I [;p喫ձ<  ˶)"_'c!OfJ((47aWb+5J)h5rv\2=:)& $'4טB@X5K!5D:;۶p #6tvEk߰BLϦ:aK j_{.-R \ӅL6,ҙ9,䲰, Rɋd!tMa$Ј66VYXR[I$1<6^ϴ Nud[ٰ,il R00HЍ gQIH& %5.a9wQpΥ uz58KK~k9qO7=x*ҿpR\O8Մ%. yU[) \@ , oy^[p' pm% V*} rGJ~PJ/f} ZpK~+1`PՂZLT:y? 0*a(iE Kɯ>hm5VB  0ȑ:>n9TK~+t=dP\[)MhB25ɳho=r]K~GO@@o'E׉'E2Q]O v`6lZZɯO!r} !r>'"k%%b@l@J'c08褸ע\[B@tB`NCtgqd؈^rɯ"'B Dw1HYUӓx仰,!1(>_B M؉m nhGpK~>>He[x(Rg _^ٹVjy@xVUO]mG0ZoX[)M=H@wzއ*qϿp{pG霫bXD\!0ű´̲Y/;q|.~q-T"b.=[фSwRWK~s@@g'ݲBH/Fz~#aoC'B`t|}'qR=S,fɯS!D!0={=G6TZeh;+fɯsaVB [YHr W.̒ꄱO  H&\-U=(fɯ;'-NjJ5MhBO ʅY뎰'B`&No˅YPrk/6/۶qRߠbɯ }XO `]e Y}gꕽ9z|@{LBC=*!4OXah [aUTB{Î@0K~>&10ҋpk.+LPO 4 J)t uߐ0z! |ܶ\x:,'VJgq,, :l&4L\X,9M0>7x|~,GK~ ހ 6 r/>W;Ò_?LxrV~78{'VM>^;[:0K~!h *jg70K~%H *JʅS.̒ J@+rag,>@i|iR }.Y~+}@P|x_e☏ 7؂'^& !0Ǒ})fo's pfzœ7X'۞&oمksgy74_/&sav!72K~GJۗ>s۶^LyX.̒pB'PX\g*M>n+gqraZjz@ragfo !Τk@͎B!!l񂦝]XX.̒4 5\O&s,M>^}&#q\%ёa@M M>^JםraFG-jr4Fmn 7zRA{K|v\%#l < 6xAӓxH,2a,pHe7.<ҷ쿱7XO꣕M>RJNO%1zU|w\aM#5do'`T?/m~~{oA,bz6UClťN|SKxOg'P&"'Pqɇ( }խ'Pqɇ(8liU'PQ\hfQT'PVɇ( },/l! }= )%Nɇ(Ȝ ey^T <QohV7z%B%kJpZҁgcrr P(1tc8!DN1os:+./חD낑a<ښ fx%OI|3_@kkk +t]GKK,BSscKԡ״ ?96@lj'DKKO; 뺫cݸqSYqp:c~&ڹ kִzP)\?:::qrAJȳ3?1\skul|Yi S ~(%yE袞K8"۶_!TbD5p`Mhll,CZOT.7\#v^cSx;`8ىxh<SɩxQ0q㦢=~ouhlc8 )~aa5L*F@@@y4N 7&*)pםwW}d < @^Y%)%\t=E, O la0 <'T|zݑjF{ۀ.RoƮ].z|b4yo @kk+&>,BKsgcsm) RĞ{)|K_ڵk}UWm/•9N;GRT7֭[;1+`D⓿|?uG|{ iSSu \:۱kd\+5Him(x6O4M_V]:'F-՝qaD?1\ R {C "۶;_[K`H)7X}ܜ+nDbL4:::>[o3{ B[7%$Sy[2[* B2fgg* J)uݸ+>]²,Imނ{B^477WbDaxDJo7C!t]wQJ{v?Wp0>>yhhhp4V”h{veqSH1<½܏_ x!)%m۶bP'@qy{gU1[ڸ;>P.R o{(DaԀ]~h@ H)kí|-*yUWr7wJv ^:%v#?mEgJܷ?"]uV@.R%V= ~+K)ڲ> )%N<|vlۋ5"P"}36kB;_TJ:sĪza&Ƭv~V~AZ ? _y~4hg k{9^I)!;HxEc c(D1 5Man!QQV1U#D/YA"J>d% E(D1 1Q1b@c/0M|IENDB`photoqt-2.5/img/filetypes/dcs.ico000644 001750 001750 00000023200 14134304112 017423 0ustar00luspiluspi000000 000000  j&PNG  IHDR\rf&1IDATxy|\U?;d$MҦPvTDRqGDAG(QD(Pަl͞I2̽<L%ܙrgnν=@ [s] r A1$acHƐ! #'*pX h9+3K(+O:fs"B'$C^4M*$a"}74@6 l A1$acHƐ! C@6 lLB+01;c3!hMV"wPE(1(i8e9GdIE,B&cPUP(A?"E&w=cYvtEp9Hf c X#c^xG y/*1AxG(,(E%$($)j*FƆ?ԋ`(MvzƔG1󢸰s*QTPS%, @ 00"Awcdt1pOױiC s*j4?@yہ`($1(nC̫^M"@$X4#*FƼƢEb"m( iGL^⣁`(VA]0yU9而1AthC($  @Bz;E?QE  p0`ad̋\W$3Ș2Ca.Hf א"EcQ֍0$2]c >oGiPC+H)`!!2r=#D# aRH@1(T{h,)B0 4 ^ 8h,H4bj(4heHFLc3G}S=@Ї] |G:!X,j!)PiF,"@{w:a$S1S T͚#a]=` Mz #B]'`:E4u6# 1@(֎&a6$aaaxd=],T9wFic\u53D 1sLy"ѳz& Ȓl dcEPč3>2}2"$Sp䙪aI\,;L5qX,&hhh4lX,MDB ϑY6G}Á. Mj?VK _!8xw䛦anH&p$fן>-bH@d s] ]pQXPd&<'‘0Zma$SCqQ)y|L3Z Aڻ[us쵎f)B]m%@qa s]O{W+:T5h] @YOYQVj:Horg%E6!\Nc()*CEY~S{rIB0y|Ts]O9$ j*Z*-.ڣP.ē@RT@BEeX\w4/#CPUB@WفbU$Y11oJTP5-)8 ,B@,ByPA‘E&wud$.Ap9](,(FQA1.pZ&Y~#ᬸBg~,YԒt6]BQa#BESbPT,!ȃ, #6Rqo-mͨk|EI$ifqqƑG~SWy;4ɖlb 8@a#+Bf|(??v!ݖd TO]'Sd! 2J&-@9! 2K-IVrA@dlX~SB@dlY~尜  2lVq~$DflMuQEDm v[3&rv%]ff'@@rhM` "#dܾ9"mLX~GskMub4o5'@@Y~SAVHYc\o1f 1kjM {HYato*''@@ 3X~sn[H17TME rֺkDV17 '@@,buQhM X 4f& gݽXr`G[~S!j &s$nbM'@@Z~UUXf Y~S FcD#ض V&sMSZN7uT nACK=T ؅Y̐0T=wO,L#|2 -{Lm>ks0FO$0Ol1],Ƹ +䓉zB~1],9C @:C>3Aمc#oᜣǀ9ö|2!\WEXmd`9 &2qpQ8 0d+t'ۅ"˯qhl6LNp+[!L; c>.L_C` %d~.L_ca % w1vV؅k<0T/kL w~uaZט%'`6iM'!КՅi_b@(!LWLaOW&˯1BN H!t?Ǯm9 6'c0V'p1<2u0kcGsY0j'3:yu b(Zk 8]N '`O9pGo2Y~͇9 du; bo. f.L_sIN 0Ϡ B>& awCd55 d1k1:v.ՅkncYO k1!|2Vh&˯ᜣ; dEC>{L5ij؅kY dEhhI],!9F|MdBf!'bŐO9dޞ&˯`a, 9 UC>3mޕ],V&9+|2?.X,NZl'!~' ɟתpߝ@[B>@d 9C9 C>Յ[BY~mc & ;Յ^],$9 x ;V&˯~i  wkO2{+|2 -{7p1ڜt'0+O晰 7o!ژtxrȇ3GϏ{3EQHlm~*Y}Um렐OZ:ˉ s'B>)M84'@ҭB>{ҕHZ(C ~I |82^tRȇ lsB>al9_ | 4'H(B>adR $tD4+ AFSUv4y|]i'b"A!\#JKqGֆAz'C@6 l A1$acn7N'},$3p8`08cp'?뮽ܮAI\BAY&.R LcLׂ4 H6 l A1$achiHvnє㌃li4 BdYv#/ߛ-ff` "шnw&!0%`+$IB󡳫M͍hmkAww7P5 $Ò%G%Gcn\\ Ѓi)m#7~}gCw(_g"yH࡟>$%,$IGAA!JKKQ]UuX`!-Ĝ9Up5l#Ivځ{544wx1{;N̙SNX ֬ŚbEx>s4652|>G"8dnwQYQX`/Z(,(c JLAC>o1]nTVҥ¹'w" &#wߗq0::юMǂs?znx*8spXv28.Lf?7*@ @ />XBdrzȯ_ۓ ! C(/+<TD"8Ѝxk/7~&jn7Yd;M_|q=^gH$.~oO&BNĺ}'BMumB$Kٌ?ioд|&<3)'Ƙ|k! @7:{P9>ŜO'~!U14$9&gx?>DYc @rN4={vAXi~ˇ?S2 mD%SW;!v9[D4MN.=O>-74<&ع-MI7Y\.7>l\nL6N߇>XR&rgp ·YpՕ^ MBC(Bo_/cv$Rk[+~@ҟ4M7Qo88O݌3O?Htb1 ē ^{UB\ A̯6y/J(߇lڼ O>}юEI`,;i9>.@4E__/^_ȣm[tO~]U+Owᙧu|͟~#&5U5…_~?ؾc[wuԼm ( lۂ魯9Yi*E9UU!Ijk?<֯^V@3CRO*6m~u3܊ x<(2cgքEQv7<~:8m_ƅj,{577!df ChEU0߻>\uպ+/%=1xGشyǿK۾әЌw ĝw|i"m4M^:FW>d : i*ƒKtvli9޽ؽgc{</Yg Ȅ_/,v^1%X4J## 1\Q5JWm۷'lHyߺrpՕW#?/?ח#-0PPP00%$YB4,Y|\WV (1 A1>|T:Qh4Z@+B^^d ! XbCÃQ88ӭ{+)X}krʆ 0p't Ցp΅6#ח!-0аOW(pXF @Bn*};a6t8jѰJ$ [~|e/d!<*7AGt/QT\?W+>Ѝz>_\@gyNnH E(,,Bqq#a:kiuZdI,S~4 ~[m~CWtwkqq:S@e(,,UCQiN\ظsSMLN;wn1::UU 7B@ed1Dx"TU(UXXY6; N'pڪ !9CgGb6|4ME4;x~^5s}f&]yǗ?E @I>i*fkB@de\;,Xbn\rѥ;!SCe⋇聁aw[Xz.N8D\r Q5j":LL @-M<1YhBQhBpxEwW\ UU_'"1H$|~~{ ! It{B4՚aڽ_ڝx_!XN2 @)1]e  dYE#좞dpp{sԽAu.ϘTױ|>\]ә}~~pB""1b̧/Ts>19*+:##[0-s?9UBhni3|ǯ%w -vFd20߫{ds:CWw;3?O;9<{[qÓs_@~=[ܵ#,CKkuh =A&|U=ry_n޾^<ģ4I,( vܮa~m݌e&0v>J nbʅ15M"֜Vo{Yl߹F wm55sQS3wFk&4T`΅1܆=ݦ 4 m_@YiYxbc옯%Kغ} `sP^V>@-юp UUqg]s/F 0gK01!<' Kj5s8X}ލUUFF28ysl]eh,9˯lֽ{Oyy9N_}&pꩫu/7/89FF *b)pڋt 4  Oϖ[}|:XK9VW4VT,YZױ01N!I5Wv(tkף(Jx|L @asY̟͟=W^~ts\(sBgWgR"0nJڴ|‹C;CP64 W޳FW?oz۶oQpqhZ!4(P(>l۾ = +p '^zMӰ p庿2&|obU$ wPU 7}###D.lE{,_w=^y*x|8e # |i3kn8 @?5rݓ$ ا0ww}wl}b_^\}q%c2 X,k؋o3M:B\g_ٜ>WAQÎ=GzXB|kRri>G{'ģ_ys##^tuw QL6B} AkG?rN=&;\.-  qc㣗T,29q$VwqBd H6 l A1$ac~_ߎ  ˲.#[žo箟1Efs~3aN@ ! C@6 l A1$ac#.W{IENDB`photoqt-2.5/img/filetypes/mef.ico000644 001750 001750 00000016027 14134304157 017443 0ustar00luspiluspi000000 000000  PNG  IHDR\rfIDATxylY~{Uݼ)R}͌蠤&83^m.'qcl ÀA A`&Y,X#@0`@a'=#%RͫɮGRl?bU{ {DQ1R@b c(Zxo}?>u3PJ=V"__=W3^ ?8k": |(vlQhTZx (D) J1Q1R@b c(D)V#ZsNV cBhCalaldžV i"cfda&4'i1<"(X),alۆj'4` ]hmig@2/P(qlhcr,֊/13F_tua Ar9K(6z_=6k籴Gwg8_*%"f`qir yJ)rX-,`a:p#9@W򘙛DTcc y \f&Qʾ,.Q8u tw33,r! Xvp?P9( jqr݀ ,-1=7 DZ@!JkEL>Ci O0j(0=7 *#X@I؎[C V6fOV 7B,.<,P0$_aq99 `ekss\l#;6KȜXZW Dp| ]؎R.ҵm#1R1BPXAO\^]zy=PL1Zcyu NklQj DZQ(=(ZXjezl>UKkX4+T{*c !6x}  ~^bTaYXR;ʆm[9cqKk1LΌazv23 *lNJUhdT1=;!ƦZEO0^]uF\/ƦV^RC:7h ,!1|RTvU)$&, W! 0܍$cctrٲm%Yk<`f>]0d&9<7)$^,lV\0^lKl>Qf0xB<}6._mXY]h/h WhTLKlvv1nƦx&fF [Pah {uR+9N`yukB`m} #ORQ @Btwŧj6ӂ؜E &fF)%?`UhޅHXZktwCK%xz&GQ(Q69/Bijɯߕ/0=;"H ]hhC[k4Ջ΄o+mp텱 C6ӂC}G eަl&ٱU䷑(V'R_iCOwo>eAG{gՈJ~ݪ LO@ 4qЉ|Z=O!|FX>5hhvđSd@KsWNtS0Lo',=J~b; hʼn#`ZkԱ7*g#!W)mp N} 3ׁOONUw%.{O`}51\=NA{[G`;WOw/^?q݉?0> So axY'h䷑Vp'@44Zx8^RJۏӯcO4_ȱO`7i"F@=}X\#C DZ544،AWG7@W>B,.*ml]ڊ$5L3c>KEQ(`m۶q !`HA[k:;э֖6HYZRH K9L͎ko'=m#Sw]lۂealdžR20M3L& 0+$u'B Q) yljCgG2x͝K l-ֺrkoW* \84lDS%nq=K~؁@- _Y l ^r8؆@ O`|Tɯ[R|,ABb 0[K~1:D9 0sfB}i= ֡jߠM v=yJg!62B(V,pK~ݒ2} ˒ߥpK~>xm%>y#b%Zc4e} jZtK~ݿ 0iQ-mLԔ6z'ġ-)%ϤO@ Ko#`8}j!D>} jHJ~>n9UK~ں@Ro 2ȵ8%$r< H#Ž 0ȝ>-)%Hz [J~Iz q$g%i% HM!^^Gnblb6`PXVRJ9x2:gSxrKIq%׭J@rHB`8&VKx0xR"6ߒ\GىH|!˿#(UU |V ˮ6bptJWK~> m薕# %m LİO 1 4Fqt Q1HD!6}{.˶pnʅY۸ ~+ !GOV䀭\%͉c@@){Z*6˅Q.̒_oĭO [zkjRHLNb8,Fm!0J_g$,H, b7|4q ?|y7[,^O`5 2l=|7ra.U$K~à D6r'/~YĒ0!>H~7a\8_, D Ǐq.̒Hz |jffoDi=H@͕|behtʅY=QQ66U{%8xY.<œ7'#eX8M>~Zcp4م9otEO J˲-< qvaF[B+5!VKx0Q(,pBh5A ˅9o<!VO =#M>֭ sgYe7O z_2%J@{f@ě|8>~y˅YOBP͕|cJ_x },fo'&ragfo !P(]O P\ | ' +˅YRJ@ (M>~'#\%QO HB\%d@ GcR|U0K~Gk|[Oʅ6YO M>^6pqPB"SgF}%8x9`مYN~ xM>qX']%zlمGK~ɏ>Z/5GًB7^O`^ ?Er,M1f~yko>)$lfئzMcl ~N'Fz /|$)$Oi7}&6ϫ>&h 4`Qt8nO3&iO`QU-l!O] ɇ(Y a4U4HD>S!9lG}Xi "2tѓ{'zc(D) J1QլhooGkk+oʼnP,|XO4~~nZ" aM|[q5cte([կ}e!U|od7 F(*S?e|}5-[06!t){oqov]?_w~GVs 9w*SZ !gqƵP ?ZE-/phBܼ}ZBDžͧrZ4m\q槯Ogf0@C&چФ;➧RJ%!pJo\۵~@J1 ? {QmMwb9jB|xC,Ba6h|L>V0U LMO8~lr7^z̛utvvz:ޞ^ {>x/0 OzѪUipAJ6 m_,q |߿qG;0 X, x"Z{~PG˞7(Ba13p"nݾcԛP,N& &&w<ׁq!񸾾xܻ.Nhr><2QH)Q.38q$oIQ.)pY?~bGw 2nݹU9.]GWWR(t 8w^՟߸q mcbrON߽xu |B;zג|Eƚ<{, ιwwqB\|܍S ߙJժ?ӳ_ @9u5~ (h`4HiξG;߻^oqhR ƹߩw\'`4 wn\p)1:X!Br`}}EEO8ӯ^iꂐv쪽^f=T]k7 J)99|{>w}gΜŷmO|g+қJh &hq5JUdЦjoo{6'sn <s 6_qmx?ܱjN@9hõn/9Zcxs< a4q|/~GhHi%򟼔> H)\Ɇ>E#<)XDb c(D)ƻ)!aH)8 Yhp ?NS ۯy< x فi'n=c(D) J1W{XDS㹴]`unvdgupXA)W?m-K=|R=W? YՅ=fVJsW~kpA߉WZUTn{ηb@Rx/]8dz<>/dOF^x*s?_TZ~(pʧ=W?癀1FkRPhnG ^^ϳR@b c(D)V6ɻDqbf]T5k׿o: 3bDJk׿[q3"J%^ J1Q1R@b c(? =__IENDB`photoqt-2.5/img/filetypes/gv.ico000644 001750 001750 00000010665 14134304135 017306 0ustar00luspiluspi000000 000000  PNG  IHDRyfIDATx]Kl$Gy~;}އg $9[! #!p^ H$I(@ Xk^{Zc{LwqpWMWOuwUwtTSU_=ԭnu[V .uۗ￘8>zW58(a{UK#] ۓ@muv la[nzO6P- r\F@q- (ܦn -Zt!,eW:2Gj5Ud`dY5(4VsݽHv<_k"RX-A/-aa2Lٹsd;{TnB`qU%=zWisEKaW+Y4 b֟dZີp-jOIW8IwŝuVMVZڥ99F.Zc@ pk|!%,JN |TLr( tko@ӳ 906 '7# $4d2'Н0W4.KrBn)3Z"벻n>r)=s /- w%|avyPS w%krxk- 3հ8!Kû@EܴE]@nnlڕ?5OHPpW\>`jƤ-) d:SWpe ˔Ҵ@g;W=¾TI A{ |) ^Uu&(KsҺD9<ԴQӧ& d|@ `%VXI.@!yRL4I 7"v 2!@yɢVL}Q$ $g5h[b>Дr6G('u&JLLY.N(,l䊶TY_w˘,:Q2sDFP+V$K'c`ؼ9)**%hR)|U.L \! "0"IM2$At``dHHu$HHi . 3 UfisAW " @U$رbUhP vp TG-*A$"Tݼ7_qx`$A&Q[-$ <$@ zp`/HGi "/ ~@DnLP'O9_D 3'؇@[wP$TC|&E ALOI)I0c{ 8 ^(@ ?I붜`Gn?/3m # `]zoH05i-x,ˣòv`I%_`! '$&, P1-H0uaIIL236х@700 MH#v K X N'$ ķmW1CpID`py7'I3I zixmߜX :# 7F>&$`%0tf}' v?qH "XljEŝ8$[I0eܒ@b0*<$/@JkL g$JJÞS+ĒIx%ލĒI0m|?%J1kqb$rO@z"X> Ƶ7+}3f.'q%5NƉ`y$Ni0'X*H0m g Ĭ9ʼnՐ` 7 ĬÉU`uޒ7 n˜wVEi=%7prҳ2L]Sx%Ƽh:L;% <@_yqb$z)b^8?zU`ڮ?k<@lV8ZL]Cx'?u+&T %;mqb$2wI sߜI*I0mn ! <;w$$p{SѲx~v&' I TuD`asK 1r'jD" @KWqZ`ʜ%/$D8`q/W 'اRr}*t"\@(N\CL9$ %4 ')  pMI0e@0 :ɉkMN%yq3w$6$`P5'̽@ONBT A1 .H0e,I`@b,VC  I` ļz&趿~KH 6'WQ%\dI #SJ[?IZ$ j/UddKh]T.j$ (@4$ @4Z&xH32Ir #" Nnu[VDa7K=!-{>e,:)ႡL=)õ:a;ہM:@%U+6W- *h. 4:KKeě|g:(ohWZcjf ZF/L>{?MGoը0_w}w#:uټ ITMΏ77q!rL9@9Ǟd5t[gI񂔿Z=Z3#33t(.:٩m='q1;Jΐ}GX+`ǯ{WjL>D5fqT){熮}}y,1TLZ0ɓ/ՠ(\O}X[]z희qb7ZuuC4Ghs_=3݇>?~J則vM|gqUA'/De!d妻@3#YN⭷g_|,͏>}|R#AP#d 4)sR!ƫCO$N >bLJ-\!RWRN~y};f*i|07'R2%p)Xa!\!iN"88~>B~OnSdIhңr"KKpl;۶#{J0:fjc@xA!aW9H Hl>8,tqFBI0G@ͫ.<殭M2"q;f2yZCCU#kMLl02H15A诨7/ oTa 㡪@H \}~YXJVS)?lqGF3$կ8RKOj?c6cBޯ{JO|.qׁVŮ\0Pd_}b,4 P *^{;\ͷՍM g.e_~9%W&[x(@uqtfC)sy{2e?ߩ(NC| ֝oPZ;z9mECk@)'x{+]%ʓ' Q)/ZWEO 4Pu<Ap1$bHŐ! C@. \ Ap1)"aŚDN!0@BHē*b$IɤZkW8ףQzp0>!$D!0 @(H(p X U*$ٲ9cP8A~҂J Pjb@B@d€xBh#cEbH`lއ!%*W?ϣ0(-̃B c`H BM}L6T;<`eEXVU@Op0$Ow#aBj ___ƴwHqUcYU1^!Ȁ`M]C kWHhX45u(B&=CchD,b`4X"kVq( zB9X2{ОB8 o+ 4!hPENc@8AD\_!8O9|"@U{Od>ӞF:>w8ш%t:Fh>X$ K$90jUbq<6>,@Hx]`L#@d <$* -&cd"2`.&fۭO?Px2GBP(km\' ++aUH Q!$FX,$WÀxx&*X4 2? ,IlL{]W\80NB0DrV / p@ \h~4u |B"Tm5BN<8a0`ù>Ǣ<\@p5S{ M,鞛hhCt<BζJ a]CZz'ʦs5  jVN0;TUZOΜ'U܃dYyw͢pQ8 f AtdhEB0~&7Q8O$qǨ8J:,A}eɔ J} VYfo`Eb8k$ HAMY*K-,Y{)'>$)PUe(ZB*K P_YC1_f('$@A5uyvrĚr8S.S9 wQ,ںrx(ᚥxs}9A78L9=AmyWQ:(aJ-B9Imy!/ʒ|l\QB{ؓu7SN@$PQͫjP[^Θ)B fFZYS ˫P97c@0Mob2'pr i{~Y*1D(2!H)Q8ʊ򱬪NN8ߦY~ͬt%'PeK "Eywd H Uh7Kmj %cy䡶a$ݳap4U ]Rh9Bt_ ]2񨾤e1<h8x U*䬉.< ?EiAy(xDwZUU~bؼ($pJ D.(D@-9CSss$D N oL  À, ęHHtqjNuT1it7K{xs#-28㠜k@=# tᜡA9w.v BPC;"Κ1 Ho&$U'|` CcxbF1 pɤ3Lc;xӏ^&pBNp4 f]9ch\7X~3czN"hH&hx4u_MEtohhhCsм7/;3Lbq78!'L` 8u'e1H, mmEΤ7o&='<` cQi@,՞9cHC;bd 8o6zx" Er7 *@[Oǖ9G 67a3}hlsq*@ Dmp0!m[T%pbJf]s08ƱPM0 #7.zv]OXG;05fC0s]XUUmC5k*v G|:C>Cc[f3d V FB>cќVR.L`-`Fwp=d*V X_B>9gmuaf+-3B>ֺpMd 3X/'`] 41p=dIae`*3ĸ?{pՅS5䐏 U8؁^ ;k K![.Yڅ',Cd)Wrbk @C>FPȂՅY~mvIrl|̀—,T],*9K @.B>fCck[-`&˯%JNs1)ro&˯ur9 ^&B>GXX.zkY@D["G_`zW3i~\nª\K/Y~- r*V g 9 OY~[\r' ]8Յk&s9 F&B>-1U&˯H 39 d_pDŽZuaڏ\'u0k%;0Y]Յʯ\O {9 B>fIՅ*%9 c_ 8.l]Xd3 dG&B>10m} ĘjNڝl"jRs 00Y~C6sYs}hv@h qd+'`x%;`Duaۇ"c*'`z |1EU^.z T'伐dj&˯s 11'`И4-Ҳ pjbNxpQhۅT&˯;03'`X|%;0i~\ 0Y~] 'B>V^p0sV&˯ q{5L1.L_1h31@!S.<.L_9CS9 |LEJ.6a&˯1:'8Lڅ4c8AH,.蜀g1NR'+Lڅ_: IRls/+]UxQO 1􍌡g˥&֠4"'P''pџ`\N }Sȇ rQ9`J> r %nXɇ DR]\N@L|'؜>3a-CB>aYf{-RT!pR7|dHlƥxN08҇ڲ"0HJ8zJUgHLs/*Jq=gL-:LAXp1$bHŐ! @T lc#.YJwB@a#E|,]J_R[7dM ?7KPU {u:h \ Ap1$bH,jmNLLf?j2UrYLcd!! Zi-965R8Կ"x$~GrJ)'9q9<(Wnd9qsW"Ȭμx<x=ߚ ::F{W7.65]F8>%Ũź+~Z\EQb`?` p|K8 JF-pɏރZ!L} /:rVf;naxx֑fqUpx=|^5UX^_˗aŲzTV7i^( ^oǟI HUƈ!I44^/G/ly !/QGAEY_o܋7rm~c~ L/Ggtfkq7 }xqe߱eӂGgCXR[׮Á}75އ ׬̼:?hq˞/~2, FgWOZH&Uz8x^w[ yC(..ZKcg_@GgwZO5``is*BB82~_’j};%͛T;Kc6'# '~o|{h2g_Ox/ATUUZ\&\niƂ "q DQ]ݽ}xO-w܍144hkk?)<_1Ogl,<Z;mm}i004c'O!v<GpMcO7.8ǥf|CG?}k:Vg)%^:t bUT9G{g4\s/CHKHՍ}!O/hlk<g8yzzr}3O< .>ï~\p4Bê_Gaw 1HWÓsgr}öo2al,^Wj/hG1*v@eErlB'08<޾~CiO9|q' ;VǃRN?9.])_+}F]ex< ٍs/l v~VU/9x4 7rK3!Oݏ"99%%H$Bh‹?{Oֽn/~;|GUU!^uuQ`BJ~I~??1/61۳ |=8x^TUB&pM-_?|8茹8V~߄v鳍ŪU+fd 8vGf+?/xwEumT`QP[7cMm?=ѠCl0 ̌uK|i W x/>>goeZel2W-ݬ%Kj}] Gp9QjhޟϽkuڜswQ]]$S-)gŊeCw{+/00{K+eضyO4tL1C}>vEލ_߸ΨFG/#f?H?g 8x[ބ>(֭^]m ^6+N :s4^=Iey6o\{u[|Y;{r3 q\#NkԵyuU%ؽ()+]\Hڿ|eH[7h֯/\Bskیa'0vͪXNW\gyY)/ӵy04X<SЋ!mmZ-ddӏxzrCcع =<=(2w(..FJx^<9b8;kۂ|z;)|)%*˰uӆYR Istv1޹ &:Τ*u3Oapp.|5ksffXϋ;c'&lSg=;+^^V6X"ї^ypn۴'$wB $c&営)_U+aՊe֞e 8u j ɌIou`l,k۶F{Vu\\19~vlyƒ6m@qI{ցv]WVU"jC"ףs_mW PXukVZ;!)$*+ʱes8_> nڿw^@J<¯70kU+{<=7NC&TUz[Rԫ]=x`-fygF<߿ߕcֽۖq&(>k /2xMRmF%G $;mAAA>Ȍo${f .|QYg L&Ս^ }ۺ]TUb捖 g\ߓE[x5!^=8_5kWaYݒYؼ>-ף4=8tcG)%1tul}8I8x=v`*Wm IyGU!kқV,3f$AJTUV`kӊޱM3dq<gWuRH$ɌH}>o?/YƠ&9y~?8+CEQVZz]ؼiiC}{vч?eȒgK]GAAA#@ 0k~ݬ~I Yvyy^7؇&ٵ^y޹͸:W圣D."SXVW-XCn5kQSU @E3I3󡸸5UXbl;l–M5۫W[/C&kz<UhuuK0X=i&.j[W|lBo^w=B~ QR\"_)t1ك|"%n `(nlܴ+y?>~]#ONZR>i$ 7qr+8;OZ;ub=hXl)|>oJCx >ofOr!ϒ8@[ķUUI6lHQZ\+y)xbB(s]gnSqj&{ι~#$bi];qJ^ CJc6܊>>k1)ž=tYqz9#(n$$={߉*] aO5w]׿.iЕ l?/oqx(>W1:2Xq@Wţ/(k_jآvS|UsLNqb_?Aq~?n^J__'kY)Q]S;rꌮ%τxFw7Һ% @Bq'Ͼή\_fS! 2l_1|}q^}F(!߄6ɧOu5Xjj108K[iEa zVGNi@rG%:{\-8C8U⁏M 0qpR" _'|7,ٵEE-6BKse>ښj|[h0dʟ*+-ww7 l$#&(,*goو/[8raU^/ۃ>Ar~pEml,^BH/M ud\YRBFٵ?~yNmxѕBٵ{[qnAiy2_"LqGtHuZhnG"~ׂ{%fՊe w>6*.oK7|^9Cbc kWī=mߊbR%e==@2c±p=z NXCD*zg묎kzLXq1IEWw/::?QǴJyy(/+Œj,Òjj,Ǚ1F5n=Uw. J9Uceeeشyv&^%¾@2հs} |bHŐ! C@.&[EZ' ǣT/E^f;ABQ8єۥt\h \ Ap1$bHŐ! Ptxթ-IENDB`photoqt-2.5/img/filetypes/ct1.ico000644 001750 001750 00000025514 14134304062 017357 0ustar00luspiluspi000000 000000  6+PNG  IHDR\rf*IDATxyx$U;ˤgfdf@f_墢 * E \D﫲 * 80 $=kgO:tz:N0dyy9U9U]S!( !P& a`& a`& a`Sg[֯HE`0${fޘ 5 (}L C"&M]D",0B|a`0 a`0 a`0 a`0 a`0& a 3PJ!Rp8P(P8 A 0M0L0<8(e% LB ~?gzGn|zܣ`6m"ǖYV 8@{#0HBPH{z)x}>Ji? ,pMMl2!n#?vxgBH+LD) ߿̶ Øt=AݎBr6c$ 04:ɩ)B> (pMMQB< C# D>! FQYVlCV$Ĥ#H} ia,)/ݖ)`fJI7g"χA|f&qO{V6"!>}CL sxQ !aU (bpt ?!$2'0:R+  )=iO ` C!NLyD0K}ch&1 Bx0ntLN@XrOڋ1>2  `Wӕ]ah& @)ŔATP3>^, JwCHk#) 5T [Z~!mPBaac֎`w šRG+ ieĒ(Rw`Ρa0aAT^T3#D!`sh!w3&= qP PQu:E]N9ߏ~M j!`'>G#d`p㠊>#ր]}N gU2&W=&< NL=p`l…Q6 H}]52a14ua<o{q(BW 6(صap$R -YY(ȵal3A7(CEH&'(SSdWu2BrOohH"0\dgs=>J)sraez"Y~G7 $ Xf;0ٌU-Q&H&qp!?7GuUlUNDDa9aP^RWJ\; ,IJ& $8PV+¬ێR {v(ќ( H DssB7YVTU!jQh$UX~R^(\RM –y& H @8cr28'(7*+cӆ=Y X~c90H,D '_(0<ʊVuLBA2߄? ą @dY-XRQˑc"Rp<,DEI1LRԓRP*F!L,N"Ǯ\0 D#\-9> MP~J.smMX& 7>a90`wTvop` [O`&bRNLi%$3=3' Li=]9gd9 #gF#0`hLY~%1xN #-Y˯Zo/Qi0d'ZwPo4zL#WLa0dEio25zLo9'!j&Q`uY~en=0Aed0bN #ekM8Fʨ[O #%_J- `Hׯbo)'4Z&QrLI5o"Ds: 0`$,ҥFRD,NMY~9&y1sL eo29'j `^,ɠלdteM ' (M7o': F@0G[0<60S~'X~%z )'`)E[wFF 4D-Cc8c3 ! opghoKN@H̡ 8щq>ީ`4o!'Kv5mBqsrbDo2h='; 33ÒYBxց`(dG;tWTsP(Npr##㑯gi4Z N:z0<6'+Bzv/2Ly9)SI؅WDQDr!t(n1^ۅW9>4+ |w:mX~ǘWF5Ф ۅ#_'ʄrx!oљ]Y~ӃVr)!څ.l*@ 9M @"!t0.,|h'#WZ hF =j.,A9@!t@j.,A9@*!!aAJsB>׌FYJs9C>逋څ;: ,ʠ֜j !t:z{$W9ԘP+:UofU~E9U @C>@vaVW-)':T'VuuafUj J"82IGef_u ,h\'p`dL]vafUp=T%J|A.ܣ0\U6' ~nW((E}EQD7J):{ (.s! \v6Q S0Qyم[ 3˯ T.')٧p.Y~!BIױF™.,!Q`H t3䓞c:{{3bf_!": d\I(f.,C@@K!Ʉ]U6 dTI9p{@hf_cΜ`Đ̷ x}b_ !' 9#7Q𑶅 3˯1JCN@60r'̷ x+' ̅|I Uf_㒎@eRcY`f56rR谄|\uLy> q|hNQl5%pJ#LLMab73'2pP2XȇPr 0@@B> zH5' YXȇP' IXȇP7ɮ'WXȇP7 @Ej uJ#8[֑ /q 0ξ~H[G31FJ 00L 00L 00q}ldee)O ~^/fp>"Uk rLBI@0`0 0`0 68Uw)E(̮`M$RI }QsDCJ!tGW["V] 'chx]]BӉq 8l6:\˗˖vmN,&'qX,i9WpXy!Ys` '&! "L&v; (/ǒ*t Jː 4P#@)EOO/vލ܅CM14<_$XVamM o;n?+ayٞR<c.I5EQDEy9~|PR\,y套O֖[XA_IFG,]=رs'^۱MG1::@0w{ՂE u8aMD avtt/!~Oo/~/΄=DӉv@EoqG_ U)_\.<Ò˲Zq嗡TVV~͸m )x03xgљp 1<F$} B&n02:жᤥKP+WvMMGё #Rؘ~Ӄ uu P5  Ij_ZR+/4.,_ ys^ QrՍƽ{ƿC05ЍpW^} vv5kV_>TjY^("n 4ۏ?=<^ݱC֋~k.??7<64BXU]_3u8nyX,,NJes_^z/Tӂ.!ē^Q."1o'#C͛pm Ełq׏ylI7g}aW@fjO>Ki-..oVUDaaaғnnݷ?fl޴kVUc'lӃv{HAnNNJB-8Yg59paw$7L/cUI(l6+~8CWw7;ceWDyy9jkcxиo gUxf8/feKOBEyDQDvV֯>`OC*1]PJ9v1|o btlLR"77Ghܻ3331۬[[H9C]]-q|{s(\h`0ǟ| ]u5~~v^ϑT4-dsgzZRիVÞ_B6YE^˜kmEo_n/nJ) qکJhNpW;܊xyް5(ofK=1 q‘8EJf܈RrtiFpa]_<㒋/Bl'{zÏ^+>9q1a 6*2>>.}7;;E*8G1'ȲK,;>J)rsrnژ =^YEz) Ǵǃ7zv|ӗ+_:Ef@GH)ɲZ E{\֬^GAl26Sj߁pMNiF)EVVnMXWS??/U|܋zE0#WVV, BѸ7coCmjSJyy]SLEY sO~J0āCpO]bbbBRv-髃R4bɤqzz{]VVjׯQtTV,EgtY֎n~z h\ 塔a||"fb\RJ((ի= ţ(8e'P^VO(:|IB|Im@7B$AO"n9o1<<w_Gs`+W }R\rEhk];—` _|3XUR+M j122ؓ0ZHܶ.òVZ UDJ!Ύ ֭uk񹫮[o?^MO޾>ڽWU+}X)WJ)JKK`=,p===9Bƙ$cOV (qчķo%o-هV4/%%%?miQ/RF`" 7 h炂|oQXk+&\.MW @qQQ2YQ47ʼ?^\N;:ݣYt!",3zpccc1PJ)rsr4xgW7dF --J&\.?p@OL " q'/t|>\.8hZ+n:Im_;3>q\ĕrA)Ż uuX(ץP8 ߯iaռ͛#_ eB$p+:w!kb!$-#9J)%}2Ph3`$+W\5'JKk+oޜ8>P99'^O5}-??jNBIZAݍ~3f>L_ʑQlټ Y$LxUNK v$"UbvzzR7/gn==8tvu+~پ9&Gpwl733}{,uEO9M7gqW&^LqZUE,Uႏgph8t$BaCpM_o@a5A3,OٲnnKg[6#77+P}C#|OT;!)ϗr`(W^ϵyy(t$6Ѕ 8{Y n&_(',I>^y5Y,$nÆ'V,[* %4А΄#0LxyI١[#n ڎIow~;‹/JڦǕl"l\sرs:b|Ka1AA(ƌg==K/C}E !áÇ+V,Obp`ڵh>z,f!457c~ 9Ҋ_{lB9{.H׋7:N)%̭YVñVmv%ucZ,lټ| )T]MM8$myD(.*u:'kص T.^Me]+*  b|bMGW^Ů_\c2;;go; izRU7V7}[_c-- mzq%Ѱ^ ݛ6mjMbXWܜL{>n=v G.+8++ _st&@f pwPKn8s` {9ɩW\tx T:rIK? ?_O@Dn>-{%!>49E;֬^bXeӦDQĻ GK (={Y߁fЩPJa6뿌_3,]$]AFI7ڦdl5c";; I >~Ux: rxW^~|a|cJL-B055%iՊM6\LEX\Ғh@ >s)Bii)o ˗-+Dn޸|}7zYpIp杈ܜlڸ8A88hi--),̱:XGŞwFC^ݧR mXpmzihmk?w]# }\|˱t.QAf%_sގf~S߀ֶ6-X-8زp8lI8䓱SJaoyTDebraL&|kf*pOwQzժEQ߿{*BPW[nZ_]{-:pAZ߉I$|> AL(Ǻv%K`2 .?p'ur~o獺Yjz~btl CĄ PqDچ2&'0=CII*+KPTJX$` axxSS^Ȳzo{3(ťKTTYY CZc $cxx>_7!/E"@h @LLa``_yBcؼEE9$f(&&?3 /qل!ƀi&+u χHM z a`+J}z "D@ Mf+ c)n ^Z R {bePH=kȾ`"WLW )A kg!X033`0&`,Q[(^ 0R`$IDL(ss+ D<,CKÆ/1烦 P=$W MsEKLwE郞47_D0(e;`B!TSjIRg֦'Boޡ!$W4_(/ ǩrcnO"$sי( 9DW۲7ݐ19 M].9$&'/,@HpR0WAdtu{39zCp NT j18uŌ1ݳpg7f14Y@4ՉtrU $tuoBF G,l/tW41!<覆61ΣwR—nqȀ2ɉ% ?%cBwXL/c [h 8k4((Ȇ9g(,̱`|q¨-z@xPXc*j0;k8g=c!L?396m@qq2;Oo8`BYtvR]$ X,֮-0 xYnM<9\8A!X!k @ii?ӽIdpO NTVer9PYYlȾ%Jd륜@D!2 (-7UָfM)'$1p:9֯_c[Կ8];7a $ @ ]Y +v[!lԬEV5~:9>gD55e!<6o.7l$U&  qcyg+-,ꟈ7@$Hyy! a YcoM)'$IPZm*Q^^Ι.RӁ*֭*Y~ ă30#-[֡$n,|E|B(.GUU r/UB\cX5Kh @`(.B@='նYY墬p!"00=7"9B\t/H**vm烸tɏ0$I+>18j%\rQTܬ˷V@\WooY2H4B, Ba ,"s8.s<:U&&.dM1TW0D` $98gv"'lj7\jM0z 3]'ӽKZ[~X"-hmMX ;wJsoPNJH]Y F9wC@茾߄{C9wA@F:,r*$n,iQN`B*i& 'p2š,u|2'@@hU~O5'`YJ:  4G*颻mHMɴ7FrvO#X~9B3bMHM07Q  4XdcNHZ~v )cTo2-'@@jM__r$DJ1C[~sa{H17Ԝs$DҘ~^HP-&s$DR_k/- $D¨_)- LLX3'@@$Ģw̲WX9'@@$-b 7djN!`oX5'`;eR?`7c`m1  N[LV&sY8wnXJʖD~ƀ'7 "~k-腕- I X^cCG媯6ITN/bMHN !uR^tvfd2N I2~{SS^#Pr=7Q{ ',+ho;YhM+'`I`att|C FsEO~d0{NråK~ Zleڏ`оϹZ~9 @($m.%v5WܹaȲV̜.ꍎN'h9COzz2U2Y~9@dź˝҉+pܰmdM,!1LO{>jƀpXBKK~T!o5'`zP|ge .؅C75̘0DB>4j-څlaV-3dM5'0j`iG6bW6Ո99\8aYi`^9jUqjOOϘ)eh!=؅k\ jOd Rb|1?+څfOέg&˯!'`*X fqŹ Y.L_}1CN4+0c ==5]80zN4lG::1:jrT˯,:c) Ր֘.Lb䜀@Z.l.0Y~Ӌs-C>z`F0Y~3Qs=B>zy{9dF V c ..NM7C,sRѫ /Z~oO:Op6vua'`(HwGvCمk, !=Pӆ.L_a |̀j6Fua !c g/Y~rdv1F !'q0RGk"v؅k|2Ȩ-Wtۅk2Ș5c:;G6#˯ydN #`>d5s$9 YB>z0Y~ c 79 B>Z.],f&9 C>Zgua@_4'[!=X.]X{?C>z-ªG_ Μ@Z !=X OXZ]8,#]9(;Huªw,$9!=X &:kzD#'!]x$H,օsar B>z]x;F_gN@ScGk.L_'ON@3sGk l*Df`琏D S_~|!b{ߑמ豟@@!}Ȉj&˯:'PG"vxkc 8Sy1|C.$I&1@EE1\)YSP'}DML9Z d-@@@!a$)@ |H,&q |tw%u[S" !c1uw')B!0:b:=,Qe]]n!;;!Å ()GkkhdMIA1$acHƐ! L  GmSN$&t:ӟ~Go덪+Q[$e;'Non,Ci@f1צH6 l A1$acR@5Yգ+Ê@e(!8p8s@@Q75%3q @ H`0w{rrr6E_.\FOEaff`Bde9QPP5X6`TUU‘ ᰄP(5.W2F I8~g}a ~;w^`7uK<*N3:;{033#;ۅl\áC~}5 JWSÁ^ zq/mQ1;vyZ@$~˨;ؽ{n9]xg_D vG]]#~9\nzPZZ{2044Ғ#Gn,AI9Ȉ pr8E1EQ⋿Ž~O=LR%$IBoo?}}w]]= _3D&fFHp~nX¯={ϴ1Iݺ}@ &> dYA}}Bį}}p!gt}|ktcቂE @007ř3I>׮_zc3}xA 3 4ͮoB L/1^cߎ=HL%74s?/x7EE96mڀ Ax>LLLbtt i=YC ᰄ3)m644Nl\TAMy >ͽ' <)twoZ[;z],i,#''-A1LNN튋VuA7|_}cxx gjvKK*Dqqn݌#Gn,[⋿ɓbb“|-7_逭ՀeFHs z}n]gGs zzYS>Uڵ=ji?2Fp-駟IíYSk áF"$ rL3漫ÁnP8Nk$OJu12ߊ{w&Hs{ 碶Yc߾]Qg,1鴢c{ݺrt n(**[QV&jVLO&m g,Xh7X@d8Q&W+eƨm{z./rrjobfR8 ^N-??{ PP333"3oeqĻ!c]QUUU`˖PӉƼ5&TUhIyB0k_.G.": s1>>[Q^ݻw(kZ[;0>>pV۷oڵqz}w`]N Ƙ!@HƘnYV( 6mZ 133kqlP Eٷ]{+umm/o?>>yQ[ fI_i*T puHb mn03y Yu~Oő#7'/!u|ڟ2!ك#馗o%fffkoԩ?*rˍl¬ BL\έHWbu7נ]1`߾]͉Z_0kOTWW=O?'vাա#`0Ƙy>:lݺ뢾G[۹NTY^~k1?'^qݟO~ ypb5 hmڎ1^HN֕c۶-Q_"j!яO5B+8qho~(p;088]QQ!v2'נ4 ]x/Wi&`W\Ϗmw؆5kJW\B`͚膝i45Z( N'>C<܏p]Dii&edčf vVcCC#q\E`*l\wB*2q8|8{ ˯/}}7g.`˅|MKQdQ-U X9^t#77g!W%%طoWDss;&'PQQɠB,M77p<x+;޼&^z8qdYu7Gj [WN&U XD v!B[[[M}E?jQOoLۦ,CQ?~7~}_jbHV1 SSiu1[oUU%}q=qEw$+ Q_ߘ+Ȉ3((**yر5 `nnA&`S$BhhhL{/j&ڄGo%x$&`stvv^U98th\pBq!X3gӾ!RTyi@.Uѱ:p~ Gay8xو>c xE'&^;׉W^#^MttLW蜜lر wA{e˦lJ@,<CQەcǎ]ocB`ӦȲ|EH<+ }xOg϶}b33+|8gp\ڵظq߃oGEj]N{+o>Qرcm<&H@e:<17P&`ϞطogmEY/,,8t$cn g`zz>!3rPXXb[W2YS

N>w9=@ _   A1$cHǐ! #gkpⴓ] W 9{^=dwᚏMS OADd kP5 \@ff! C@> | A1$cHǐ!  L,ؒ_JaA *P5B0p!2r@$s@Pf"Xc b*18&&J%*tsgAd9RQ^Vpif@eE#bB$SUe$a`t ÃJġg?o;n Ƣ"T(/( ) !:>Mж눌1fV6 a9$9oSehcP5}JX߄RRHLoi%m_h,fVAF ##肢oT"vLNMda<A`74M 0cH$߁DjD,00$qvCQ( cOMo b`T^C4px]!< 0DaDcG t\wAi%#WEJ+ip$;fLD$U# "x^|UU:!X $μgl2T:U.`MC3ZI+i14da]1"'H!J\sWM$\1[Y.B Rk.6t1w7}OM`oNza%$ (iWM5]*Etuw۳YH@W 4ݛ3!ށ.0sqzi$G!pN}}6iE2cDG 77ߐ1({YR匣w(,(c\*t7lvx MS}:?iv@U)\wX,ɮ0 Iު ÃLjg#cCuyr"$ ]uaI\,\2FGh>ذ[ 8\sGB B_#0?ԋhlG&&)7$G!PE"\X%ť\b1:zZ vO8`[ XIQV*t7 9G;=]Mg'$ں m$ CEy+@J]3[Y &&n7s cxt;"GH@r:z` !PDQ]lzOu*Z;[.B,B@ wYQ]>h˯rDı'$ P]Ybg,F#y^iIH (ʚzp 7,de$LVVTՠqwٺzׯ\XkLNr& Ȃe4\G!*fUb 1 /bEU('`,aMZAKsgNX(EI} ˯Y('`CTVTcMZHR!JKvusf6R@! #\qHLPS]y}[3oY~Mn{:'I9Mk6,oWUE5֭وPi'LY~s)'*PS]θ-B ,hXوumDG@n\dz:'QN`1Hr@@MѴfl !BsXߴWY=3g1˯Y8 )' @CEщ"0Ih !`tۀ@yYVTע$y1h,74]E[g jjs!X&Bru+VaEe S@2Ѕ~@fAd9*P^VpyX~Sɼg1]$K(e&4EICQ ]3<9,AAȒ "3#EC82ӊU*W 3`EbCpQε泊q&'YO-9b~j˯Yh=! Ֆߜ@  a;vY~B9c! lNo.PN`>$n5 ̃|X~s! l#__ |=S7p1@ 0k_i'@@Xμ*Z uܳC拎V߮'@@X c CTܷ 8 BQ.,7'@@XƬw\kN]gp,Nů9f!}  s-#泜 lj Heto.L''@@, 7X~9p/r$Dθ 9o5"k8"> 96ox='3G؊-fW? q,q v#,g[~s! aX~ aX~s ^]Owi|5oGs9c t ;oȀgN`,^ Ft]û1ۍ-f/&c %L&&eɄ'Nx z&'y`!AK~z+gUU EGð,fx+'!>1L%x7R伓5jj)t7motq}Nj*C$6e1vZ~޷e~N xvtogɩi8pd/F=?Z~™d[y"7$ttR|h'9`a"#{o3&w#N;W˯Yܞ(JDvihd',dLN` RTMš%B>yјC09|U7sdrΘR:[7ؓחUqOFe7Ҋ7d7\%fB>v 4؅k/n Fr Տ6t9ٌSqzN5khij<˯K 8}=B>V3.u],ƹ 8[_$.L䜀ʐp120c Cd;s 80'+e>TBQ&o!um 8VtaO2vÎ Z~[sXNW!; ;E_ꘜFWB>v;Jb!V&˯#pz|| Y8i=G @֕|\]9va:5:zf=.LU~Sri!„|@W* 9 SB>v엢*_du6N pRjcLLbo΂؅ (8+cqEGn*1dp9]N سs g(ipV@A!9S]L_ZAry:fsMpu/Fm ם0 Ȼ̬3ꂐdr k.L_W@^GC>ش]du71ħy]O o1 C>v[Յu du?sq=LgKC>v6tZc&˯wH1'Bt!f],!9F|*0Y~y zx1c5oمw|=c!'`x5cq#8غ״],^mWC>vم(i׋c=!;x.lM7J_9pm9˯?|xuaMjSNRcjUZؔLf.\f ,\],Ďe0qJ>n`dv'`H=VmOXO`٣B>"@K~ 1F_cz Ϭ]n&c ܐ=GogjVtY5j;)/f\O ;餐O>ԟƚ髉B>Qx  3iA8MW0<3! XnNPȇ M&'`<Pȇ [9V9:wPȇ L9NCe$ftMC{E0Pd3uT8ZA$2e Z AcHǐ! C@> |LV@ii)c!A $ILMM-,|37O^ M3j-ACd?߿vY~5N>dVQ8dY /.[!4M0AƘ | A1$cHxOu 3/Ip*DM.ef8`Ѕ] !9yK"b3NMkMנ e!Kpf(e.Nғ( TMZJzq`жA#IMۃֶVtvhDB˱n֮mѼuu+ !1Ht1kRAHTn䄫@$v|{2F%4$bTTTzq aFTWU#ɖc?y^,c]:{Q]]mId2ij|8zecظ[O݊=gXb5'UU7}^߱Nq/tW9K/@ ʊJYsN>swՍ`,Z/>i`9g(u+x'C8e.D 0q˭7t7" q o|K:G<Q8pn-ؽgWCX @$ |;9Jc*vz!,`  G@҂*+*QUUe|Ot:kPYƇ().qm<@s<jh]UבJ%Dފ_|z)D 3xYdmބK.t(IWOu{g~&nK ҒRTUVd?#4Yqޟ?Y TW$Io3T*޾^'nD#2~= Z:~oW^oeܔ~U=4}& GC D07c())Au lܸ ~<\~qWn7^A4Au%ٺuhn^dY6]]U3N;@nAf]j$a[ÿ B;p7 VK qF\rxɟ㡇DWwg1LhRBڮnXىJYm'z9BgNg߼>44d]]ju}Rpuf4 O/j_TT/p-r䠘9555݌?~-5kB=#rn_`UUqq_\dx,.x8 /=g7W\)p ̈;N݊}Q\}嵙me,,8G VU{g8xcvttvj߼n=nPZZP4477ނ5 EBy]3+ F}|4Oe?qy˲pBHT̄#BTWPd2i+c ظuРu)t֖ SƘog}4ԓO %HRH+#  F#ڟyƻPVgvB1 #>9i}YY; _0XO:3_? "00޻ ʺ^@:zz B&: pf*k^sk 8ekMLjw \~bya]ױijkj m۫G(K! !@lڑ}aTԥY#!@([0~b"'Q6h&_Hc`ҒRC!I*(/Q( ˇ8]pI`˖ }FGGrz`A$x ccc4$1!P[[ >tx(+3Ws4~38rZ]w߉{hnjFB4 0ۃĔu u8wf9[q 0dq]{p-X \B׭,b3 q !ahx}}B4T"]QQ^ZnhDCjԬAQQlE0zgBYqWcvrYP ز7ys :^=@8:h @> | A1$c~)cE{ec岎W_{ | AaYIENDB`photoqt-2.5/img/filetypes/cr2.ico000644 001750 001750 00000025175 14134304102 017354 0ustar00luspiluspi000000 000000  g*PNG  IHDR\rf*.IDATxw$U:f,$(@Q+*\z}|+ "*^ê9,&ĝ霫GONPӡyt::u ]"ԺA1$cHBǐ! C@:F,3߂' ˵+A aL@{mWP6| R>& bE|eR*Y" -³vZ C@: t A1$cHBǐ! C@:X!N5YAPn8e R*T2 )$IlA0@EF#D A&c$D!(ARG#Hc,/،1&V{FִU`0)@8CE,,yzsIJAG#f`:f0d,!䟁3X4 .s!_>R*,l Mhvvhu @I0$N#bQe|3hls hmDgA"I/a/1)1#a8WbQNP$Y&GU H?b |&H 83cÐRɪ ~cG˜;X$X&E0L֮6"cHD#B"r@PD, (d]aGBBb:ŒX7KFZH"U_3X$~ڂ d~濫FJ&ov  C7x׽@,LO!ȁJ"ڋ/R#nHC,TxG LkBdsHYjݕ$ ¡AYJ! kjeppYP RC*HO5pUeⱈ&f++v.?$K`vN9Ro 0tUhd!LhjJ-K  <#QFHTCeY4fQ,1D>xƇ @ X tiʐe$10{VB0`frll:x'F, ,55\IJ=ܟ^X@*`OO5+0Ԙ  uU-1$7M; V @DIS'`U5pYT2pkszWKBh2C0h`2N`a} A73 05zڐ,en@MfMXb jݕ2E19_ЋL"ijƦ&H DmMS3AP713>p_C2{TVJ@l M&XM9s2gTA8|w݈`5!fMݷД]8QĢśeY`/E(D#m^aDQ}TJ;=> V1 ϱa @N8ͭ8 X _,*h( au4 `1sU~+?(39'Z?Q!$+sD#:hnE<A4@,B2$ey1A0`4dhٚ~y ~`I*6ld!(C :au4KTdR*IKw A4B4!M ܠ@z0fWd-H?;`7,̝\L ͖6},VS90X$.P) Z4Aܖߢ?_HPoU@9eGIrK! *L뮀('d, Y~B@T V o)<$DU '0 Q2U~=%TJh?$D(G  N9V!'_,[ 89'@@Z[~Ko&'BQ/Dh 5X~xN`Zwl[ >s$DP eAmR   VJ-\N`D?9b[z +BHW9bEh[,z %o)%'P_QU-u|~<  Jb巌[{z /GT-Z~xNO&%Ei[ u  $c۫Ry?([1s: ʩo)pÜ 1U'bIuНY 2zuЏ0d"/bvjn~jQߢYB಄cubku╦-Et}k2aL B EB:*~fEPϖR@ c iw1& 8;#!Rыi?EcG#91^(&{kMUs["su-R* Ƈ3>R,R4@>p'0@c މ1Vt\XA'ty#oi0S ԅ0buH+ 0T*4c'_ynkGe1"! .]@]؅9ij ̨8'(%S~Lց],Ձs^ģ hFC>B>sۅ[9js!5w"ÐJ WsaU!J?TauatN`D JC>|*q Wu%'*}ѯi&U`J.ԒPHuȧ"pc ˲ 0Y~Ոr5|*p`H%kk&˯QCNgE;h]xFvaZj,+G 0& X0Y~5Bs5;3̱V.L_P˜@M@! 4ƫd&˯UNO%b&˯UNO؅+h&˯v g%d cC +`2v2W&˯ TqV589)&dkSd4sIVEw29zlvLijj"R*^m|*qLՅoP͜@U`rd^C>eLՅ[T+'Pѳ.C>evy˯"#T<'P1ېO`L@p4"/Ͱ T<'P3C> []W'J=Q@C>Hb/}Hse?kd Ut)3J W?T2'P>_cȧdL=9 WwseϐM,aL!J0oR]tN P_Y(HOE`ardS ™UL-~+ T1],9 |kH&bt}d1 +y|?C$c<2 R$:&htvd*QK!ϫ݇j1YyNK!@S@rEM!P@0 Sȇ jI9rE |ȇ 4'xC>!Cp9ECB>ZJ (b|B, Tw9H!P1sD :4>`1@$L dV)(GCJ% Ah!01{c3+؞!]k B7cHBǐ! C@: tLAfb%D6+(]:HRqQ;  +(]p®*rj j(xUj I(L1h!Z$C@: t A1+Xc ̭r( `0@ mJ-*R_(0>2$ adhn788фFt:vzlܲ7lDh,KOd2d2QZ 0"DQ\$\a*x<)JfB9$ x,wF&b}$+ 3~^޻>^ep{-N9t\x%8̳t|}O~T@Á&ttv{Z۰k׭fˊŀs~="g|oܻRe\v> @H$~w'xip q>to&˟Ex"Wxeh4m_=8B8߇}6] \atYY=`Ak ~ƌ[/|WZ}.)@0ģ_? %Gp۷o ]xZ2㙮ԛsϗdB˥ovc >v#:XO.c+/S98hb^tɋ$ bٞs@/(D xG4&NpO/|^gb8hmsp}gbޒ$!P@ܢ@@ !|K{bݩ9Cwphfs465%{ (f~T ?oƦf466Ժj1H8۾}32H&_<tO{E z(kUj4p@X]ce @(Vl!R+A<ˊ_ju7x.d,Ϲ薜h& `K6\z?gzh4`0,ٌF߰]V;p7xLLck֮pA@gW~F#},WgvZc `!:o}jIV'vēN*6/*bQ\K_,dîU0r___ ^`N.j"؏W_~QQ{p YR0? = Eo{GMOsa+lQ8d/{W'̖AT*ד  f z[p' J2q93%I¦-[nƊ&!2zD˅ёggfY^68 99zs$~1Êoَs|>:IMFrnә xI鼯ucbز>l67@&  + h_0Y9dIVlӵZmY݀^dzl`aY flhs:aZZ $Y higYi{YQlozWG~,bزۇO^$I¡MeY.lwuZ,HEm[Z[g{J0:<($mؘQ`е*/x}*{￐,+R)s9AxƲ؏V.xdZ7!v-Cgo($ hii5kpyx`Zw, 2 Lb`=em[Zpށg~b~hGy^ {<o" ٧VAkNY'>SxcNj(1ήU`,avƋd"ՆUSOCgת:TF?3Mn@ [%pG{h.gDܧ>Cӥ,yj ~D"p_oV [ݽ6o}G?͗`TM5!X\QKi`_*8^mObvXmaRI fmmNl?Ĭ;]=_@4 .J %pa z=$~Ѣh2Օ f jݼv,pg3߇)B3mNXm*}@gm  lܼEQ[χʲ$IX~>С`q,?W|JDߑCYֳc'D1DFE8aWvc::H( i7Edsl{}Ԅ$Ixg^Q=O?Yc ]Vc#bbk朣g8m_'b!.WggTn*$YcMy Rm@>AU6o)6ÑL{:tts is:vz9[6k֭GGJ*K{{ ʺ[adYF{ ;Oܥ0_վeoWOQR: mΎ޽a|ly6lmsbcRN I@@ٌ=_`_`@Yf^&.{ϕXacvx\,s斖U}٬S{vł;ff9oL&#:\. . sy29;nhi{g^_۾J 26l܄K/BQ?'{qhh@k[]ȶ;-AN̻`6lv`!$9e6m9]5KېH$  ~[݈޹k c.j^Smf3tw͆-=ۖWsl҃斖Јze6{g{׮Պd"F1(N$ ;N8*~g=W/`Lܲ5h4b牻Q|\yKHSO;q_- ♞*J8ԀhĕoOL݉D).xhjjY"ɤ88mNC 8UqfWg7P пވKyYR$I®O_/<'y(Zhko]fcs϶b˹6b1(sV|+_W:fWhl*N$gO1;3u-s68}َ5kgG"^P$ <w3ysSq$YƩ7_VE_ܻ?`֫,r/uЖgLl6}8 @Ȓw;w,}d{~^xL$pavƻl68}m`X'Rdhim#`HD$Y_v[ykMwO#28yyڿyx2l/9a(2=B׷o+h8L&3D뢷v rlY!V|_p2֮K}Oΰ6 H&1鞀3ߏX, ٌ&9ZW'`E"7AѭŽccsz%"!rYˋڷ0}P wzDE[q?];Z/p.CJYcSg3s>g._IH%lzPWj }dR!nMՆ Bǐ! C@: tLUAhQş uYH3!vۚf9~cQAχANٞ#Pd$Fq|4` pΑedeLcܢ:͵!2F#b( 1cBHPO%/{ fe# XQ_:o@ )I8 ȜK^UnƠpxT uuhGi4@tGPdHJR75c2Ǒd B@H,QHlȉdR.--PP!X =##=#H8X:]&F?(U9 E"AH(`TabdfrQS􏍙[&'+(O&Mq5"NH(F,7!49i}#A`,@21UH&) "$YH񻇇K(tB0Xd?wz@Qtf!0D&P* uB0]W̃1xc3Ӧ wt#t@Ag5rP|?IАo|Vr1(Zj$PXc63049Ptr_ 0$hP& x\.KX.AfKC34drmsԸ]pYdHx].Eڻ0rö JQ^AƁ9^m0)IBpZ E" [,4b3{5:s jkj,Z` A>'c8>2ɩ'5J 1(˯g*uQ[Sc0Op4V3c}B}W 55{9~ԸǑH 9EмQ,#h5f(_-08 hFq2L: Y*lno0 hG uu>&˅zSV%c%F}%XT[@tWͿjfK~+- DO@5 "\Սdin!@[}}wEKBs8L}Q<mj@׋MMpZJ~>mqp-xӌFʥ>.b&X\EGkmk)R@QhmEW@lsT[گ>5(JvB`̐s(bUCChj~ P%(|ڊ r2C` pF{;V76ڮ׿Ԓ_f&hWw8XKm-~'Ok p0V&G\[zbn81DRRE|􉔉#_ i2$3DS)S)Yde 秌 xyD>u>>Av'?0];<;˯} Y+VآkRO:OY_%̈1H,K~K=<˗#- .j\sw!9䷒0'0kQmt`+U{*1%Z w !rԱ䷤}>SPU ȒRz' 2WzsQT>< bJjE}(!ʙO`s{[kӫ'(ffxɯ6s: k^O%쯓 2CɯVN^O,%pjхJ~rjчJ~K> R6>'@@f֒RŽ e1{ɯ :OEQt]򫕓(HfJ~-د P͖檽+sJ)J~Kc> R+j> K~* شOhbRHrl'@@AɯVv ٥v qq&%ZٵOqS[+Pc> 8&t6ʼnq+ ͎} s<1QU*Vl-Gp<p Nc_OnZ/'p} Ba"^G&C98W|@} !Nc wlP[*; :r1H,xb wtD8W+ :76++2^C8É%Za=[c C84t1TV¾^tRX}=c !˩/L׋s8W+ *7^G45"0808C^;[ VU( Dis H8#a^6o%XO6Pc urp ;[ >*Lm1'xR ᕾ^15;/j,'``ҒWdt9acrB3N*-,28pbXT׫"BO£S*-,3M>!mPߪ\]T[6 X6f|x2/H%zJ%&xʅWVdkc )I¾^-*} nM>z+ Q0 } 7T4A` C6*_cYO2oIij1j?-_.L%QHO0ӧ|0VFOI,6rDr!P(ߊ0s@&#+Nc__/$sS(5);1sM>F)T[}hЩV]J~''0d>QM>FT[]>L |/6TkT} &AC|$a_Ig_S6G`|@` SIgra*51􎘣OTP&#g7U0YLh1`ra*5' "c ʅEA0z W\1Hl1=8l139V.\(_˓r9P@E`'i&#ppf_d@E.M>z;iv2ʅ ۷i*'`hرGo ksf\I 6ram׾}aC 7anTk_>}V=*˅=f|̵Ug/J~>]󪃚|V(ӃR%TF sWI:Gor} Sɯ'[ȜC|]xra*u}z'K0#n1B Sɯs'Pv4 88\XQtש$Y>`v%IW$-H&1c`fu*\VBK=!0,S:XO~RFS9GAqS'GK>|C`–ЯO@s0&BI>M0OM>Tld碦&B%'p>P<&Ḅps>U&>j!ĄJ( l|1rj! }ZDV.A(1%d2! DV~ߏ,sNE?c Bhׄ8UW&!F@Q`8!VWSC  Nc*ZročW_ 9GKOb˅zܮhhkߜs B,CpgnW4Ee:CN1^a b& !F@Q`8!VڀT18P( @E&3|W3S)W0<~vCI/2FpǎpX IqQW[[ׯkYer9d$v(-}eYH*w\z< $IȚvvW{7L 2ŋ?Ͻ2zNjCm է-睇.۶lAscpEQx߸%,˸hf޵ (jzo ??+2|qǭrgߏGFezq 7zF%ɩ)N/Ksgƶ9(4baSOax˰נT1p?j!e3DAO?M'? AnڽN~b+E0ƐL&6vvV{w,l7s="AoTm>26iN:B̄` .Tp$$\Ē(ᜣU=`(h,T{`}!P,`ʕD0 Ur3Ӿm( 6~m'Q~POm;  Eс_t;9}M+!uȲ\S >jQC%_m XnV^B@p`覉MJWhEQ6Th7hhCEQ܌s7mR}wNb'+>*#LD ɠg`vchnjMP ExxE>qx!텨(`dllf$9U74<7:;5NA`(C]]?N+Y"q֭X֦jGkދTyq7d fR4~Hg2G(1H+"&c1|{w܁cǖ 9~?Pyq<䓪.w"vvPhM X;wv2UK/s1 AbA\.H,쳸Dc1UE\76a?16ObA]] _@ѣ[9Z ,( .ڼwS3t/;.+ "EA:Axd^{ ك?= &Uq7α-oA[K n7}S꫱˱nkj Iag_>zI4ۍ_x!\CX CO|3}DTN:^yu45ai>$!2:A"Sͧ( ֯] /@u8GF~`ͪUhnl(F78P8JW={1 "dY?~]P72:)8;vOp啸P8QLbH.Dsc#V \s(%+OV5kpއhÑB0ǑH&$pECC}=ZZڊQSSpYQ*:v⋋ϋ@' PO`uu8cvZrez97VQ(ȏ8؈s>{}FQp^ MG`Imsړy)!F@Q`8!V)(`.=. B˥js/ ؄X(x嗋nǐ_g@t (q0 B (qCr)IENDB`photoqt-2.5/img/filetypes/cur.ico000644 001750 001750 00000021533 14134304104 017453 0ustar00luspiluspi000000 000000  E#PNG  IHDR\rf# IDATxy՝￷Vww/x_ ~0! 2$ a^X L&@$ᐅ[{ڪNnTs+Vuoݺ.A-  A1$acHƐ! #kpYaɊ% ,0˿~-n]^Xb ο|(Rc"B#NKp(9#W(-vZ C@6 l A1$acHƐ! C@6&(0$+QUHX2G&A&!7[)At% @/ #IDG'J gԁ#1 $] ˩'%  @0@Nˈ!1QcsrZFr4@ CF]cun5I:@ba4?>@`rpOܟ{m3 (`ztj)aaH\L㠟( 0ECK :D CPÃI~`AȈ"H$2NDF \ #ΠuNH@"@ "0 9D#DDIL!c x°w LW+I!aSlIeNC  @YQoپ* FcT?( 0u=Lz?hR1V 00i\l1옅oϮrw @2Բ,`Kp @;L:B0T^eˋa͢PcRXL`c46J"$0T3BP~iQ`8~eҐ1X$H_LPL`u Gi$aLY;,-eg (ZPcAEuc``č C!{iATHr 9%S]X.dL*>%X9||k pp8j&sn1&n0 T9Ҙ*$p8p8LsaոkL#Xya@*?J?C3aS،E}DZ)-3]A G5 ji3sh1ںZSUN*Vx/h| ~ ,#Wx5ͅw8y 9W>(0ެ Q]" !5 (k3tr;9c XQ;$tqg0 i.c@[~4~ ` $CܷBe-;I5'`,G!ȃыچZeZવ2o" @I@&8ٚԿ=х, eVHUM*8uyve,"h@# hR=on'Zg6R"Z,9G߾> h:C@Mm s!߂r!(:kCrkj1c ~PWH隆@~H3@]spUA9(hфpz1f t# @1|oۦN˧O]>9Aw3DӬ&e } 0-\M^x<!1"+kZ1!un[]pj<mWQԜ@]S$']3R*\׷;݋hQGJ gdp6;`A5nn8]N&Tq|N`梙HM ^p@v sY՟IeIg EU!ArH$At)c p$o0m-9xm1ArJSFuxo%`|N`q} -Yq?z[~ }O '$DE[ e\߂qp? [ 8[p('p$D٨巘~QN` lT[0( TH('(zTD ;zTX?m ;zUvOЕj[~~)TBW`-;H0  `߂oӜ a,`ǜ Q2Yo#X|v %cXo-'@@-r$DI[(v Eco1%'@@,` Qfs$DQ[(v cfo*0z  bS aol X~9B3VUs;;ˁ,Ŝ # H'^-VL6':99zv FN$sa= D<[)V"[''`y`!{W70A]ۻd1+vr#ItnD:>po}{MCcoX!'`i32vt!>0~^K(y9P (}/hi#r wa(W=zIgбvvaI0|]ձɑ.1v]."@`C\9 WԐO45feW</Y~ul9s A;eQܬvar!r^1ۅ?f RcH$r|ʁ"+aQ0Y~uL R䌌S|1.4Z.L00~-! o], 9S @!!Ud-/f FB>۴|Տd F FB>FXY@nSۅ[0ۅ[Y0)CZ],9C Xg!ro],Յ[q`|gظ&0 @( V) guV#)eۅk0T*S~)rva'`(tȧ1\ua #'`(tȧd 1],(9C @5B>1! ט%'`vȧ,pcT&˯q1BN`V}0Y~rUC|tՅk|rCy;SucO`C4Rd5 ٜ&1{7Vȧlhuaj"c*V],Z9 AKjNv1  הT+'Pq ٴՅ]AJ*+ v ,gu7aEP*&C>FATluad5?O"`OΉC?0Y~C&XN"`OYP :T2'PJGwt zT*'PVdGg zT*'P6 lXȧ .\sY~K%(| b dsʗ(m'P`uaZ&0/'u'.L_PΜ`ːΌمLm&˯}(gN@?qGod' &vd #) ׾'cNdOP],FJ Tqvakg H|]e1pLbkc9z8Β%(S9J gN(Ou`#%(X,A r w!3~ |8(ri9ǿOw~0 XG Abs Hc[|€+gw Fj A0zGEQmBrJnys{'LUg0зڑ=GۃaHƐ! C@6 lL^v? (D"ё)s5^9S!B#(^O}Qvs1dH,H׀sY)L&1ɾOacHƐ! C@6aAUXEQy"DQ aM1W~*^Qj-IN+ d,ˈ#<Љ}{ _ѡ($omm3w.^ 梹C"kL&T2()4ҩ%9+d"Y1@`!g9THHJ ;G7|nĢ%c j18q_ɫOFSseDQĦ7?wEYrJ}EcD/?26<0geYk. ސ./~ +$I<^44cY3o-VL~ (A022x9]Osx,];va׎]x酗p̱#ͯO:mf?:oq`'~% '_>F</BMM h":mY8rH4BP ]_}u$F|o*g|^x }`oSbSv$I|? ?_suYक'ivz P 1|zY?7z]qz)$Ft.@P1p۱{jw` {>( j*H4"}]{t:'$^xjwАh g}jwH*c綝%X:+y`axx=vmUՃ"z A+o߽^gqGcٱ0Yp{H%Sؽc7mنjap{Xu*=C ,##C,+{z-\:̙7gJ!B~i$I͟杆XzRդ"000phݝxg;x酗}vۿjljC?~\ppX ;i&%b;͘` H@[/4f외{5p:PE&\wN.ƒ#o\ l/KjvȺatq}F;Vg}.tL?ی.ڇh8h `cbK\?K/$IwUf̚ ^cO8V=8?{NkWoĤpܯ; y<`A9GIO CCگ:u^ߔe,¼UEAsK3L)+:@*A՟ 8\qhln,y!sQNI0sLMm3 4 1_{v~ɑKpYAi0x4!ȁ طg"ሦX@:` Ep:7 @8ػ{/Rw$IŠU+w%Fe!Mm79 ȁ,8MX|b2TlĭC3 LWEmFZZª0(b󧛱sNM?) z 8$"!m3f@Z .ۇG,?܄Uv \XJwE$BP*x<-m>~OwyΙ8rّ @ $J}MoAh @FGo_Ecӡ~ Y݃_l[14͠ފk.7  cH&jid.щH?~pr[1rp7㤕'd2 E#zͤu^r-WRu) W Q$ 'tݶ}BI 9VZc]{-jA,߈?)Ȝs5i["yDR41|ݽyף}f!˅ˮ :o޶PfS@0 `85OIR(":Gucߗ9</]7oD!]PDڱ 糚"ѳ̮`+p6o&` N'q70;MST*q `߿ +8EQp9g`xVf5 k__vWAQ~-TłE pKjG朣az.2M{3G*42$czt=8y!úiN/wn.^XE9矃O<^SMoO7cAH4( /G~N9jwg Yqqn]o/.5D%$9[q?\iPGd!(EVtRpW>|[7oEow/CQ$ ΋YG1էU1s̒6U]݅+m;#,ဧփf,^'>u/]6P3gw\nU___ԣ(9k&~ܶ3o95Ϊ/bV<Xw뺢 +v VΨ;ن!}~DB1!ދflGk[+ JbA[iA0!JchpA~ LJDŽYAMp\P #q~>{ZP⋥Ix];j!+[W_z,^x4;98f*(hljDSK>ǣYsK1 (Am$8ಱDTZ$C@6 l A1ydKWa$IVZ._???c ̄ $ºA1$acHƐ! C@6L%~lIENDB`photoqt-2.5/img/filetypes/tif.ico000644 001750 001750 00000014644 14134304254 017457 0ustar00luspiluspi000000 000000  PNG  IHDR\rfUIDATx[$]_]3sٙ[C ˱ r%!W!QrUA 8L!Q"Bǒٝ}{RU]Lwu~R^ޞK}]]O "2QrDc@d0DcnwW B)/m%XS{}<7|p'DD6{(σ8\N 2` "1 2` "1 2X*0HrR&+%6@s:M8&\uٖe۰y #@XDU얷QYu(σeXV| c`h? @D6loZ uE)uMw(o#g104qF "@y.[Z]Bmy{;}%Ӻ4'0:~C#I?P0@WzK(oCy{<7Q`F g8Q]l`u~ݪ/V"qtjD=v6V4{fV$30Y_N3 z幫Uw۔i *X](%6UMQG@[Ff#Mԫe͗ͤ@`}CoFV5T7ұZ"04Z[h}Vӹmuc/_j*@cu(o9N귑ҍpAOz[BbB)U@VhWBuF]7^`&cUʘ N!:(I),]5|GPiQ(Os]-Y%"nobu~"g[ap+4l͝<ShkaP*7n J-*֗MB < V"7׆ܞ:X8qX6޻G gZPK`rZ-PDEX7 [kKX[Σ1a Zщvf3qnC)IӲNP>X9MLV vd`}:v6׎ bAL_ۡ>-X @_KzSB"hv4{mC,[0alN-" *;['ٯBGpAq|CZ5W].]X֗汹J)7PLP>]\nfspm"tpTal;ةVwe~,"\8Iz|i< P #cNtmqN 81|F'Rٲ 8m o79DJahGR);zjšmW7+ުbYX@ 6,3竀R<1IoI(np4rN @[ A:w|!MQ+rPܨ;~kN`sat?6~^E8#P(;F)oxoE'ӿ{ 0>yn.B_B_qlR |"8'@@c㘸^c{sOa?4,|+?shЅr ?t R6&n$dv78'p,@W }8}=8}^#ʡR bY=3wܱ7ꛑXX68'p QO8<&kBo:ۜQr#"lmNٚ8)Ry:ѓV[FRF u<%G"!ϣ7a 7Tv~U~ch18{٘  ,JrupMN/mY,;;/{;=dsq{}og`Y 3`m%6uY:X39 gW %TÓQS ӷ] - kbnXs/uo<9[1(b~w1o78'p3EUFT =8@8*l1(2*o`>EjƲ}E$U~F^O@ c߸lꐶZ7 `Pv94WoP7V; `PhR4sN@!IW7[f 0(ivcNfΜzo7'0kΜzoL`PO^5'P ʤ9uMo7L֫FگfQrS7K{MQtucNಖN0(0;e7c,͗2;'Zߩ~**`P YZԹT~b9oPv QhU~WR927'`N٨cX ,V~;8'eĘPSX2Qr7sњXƜVf2w CZgШi@+Ҝ@@D+D,l`x&) t=L"n/>f~Ӌ%bamkIofݨf;oX Li?'p~4?} ZQJ`@ӗ~UfX:.J2yߠIJPL`seW_l[45\|Fù0Xs ny4;:/"lo+EOj#+A>'p N^ny; "\rJ~K),Ys kX^誰""X.]ކ*1؟(7'-aqrOZJy6Wc;`ߜ@&@DP@:#ibg{1{o4YKϡ[ eԪeVޯ6<4'}|{8"7V0;iF]/?ۜޯ!(W,]JFpv=m!'3]+Y .sZO!( *WX 2\A(oDzCu]\|J1FC hKSX[(zJBeg3/>f,ԅU~ÜVd'ߪ ?R K֜z n|ڎ ԅYR ӓsN@RׅY?'9MO~.]/zbՅYYR"JXC>l~uaV~9ZKu8fUQw!K]qN ՐO$4 \MvfU'=+!(.o9@lC>lw^tJWf79 gz |N Wf7U9T\O U?ϐOnԅS0+9TOOׅp먄tI˜@*|"O%_<3Q D4 niH]|tЪ O'Tf7H8zD,$PfW $HO450+HrN HOD1ՅYORs&C>Qb 򫣤b|B֪ DXfW_s"Xj'@PnՅC^]_ x[ySb/[V ˬjƜ@Q='KՅ[8b qP{'V*@,4;E|B¬fO\s[290_#,2; ;Յo+S|N wL|:.|kH$1 DD͕_>Y@|y]_SD9'j9NWfQ {WL [s¬ǟ }$P9C|_:duakNˡ^O =C>,Na@]utU~#R9810wl.uaV~@O?s945~GU,;[(ok^:GUBĂ8 [FO_*^!X\KՇ).s tr'" @xsM!JOC>DI cN p{?Qzx/|J!JNs!vNO6rȇ(n\|RƜ@H&u%u],\8B_GPt3De bmo/ "K=Dc@d0Dk( t"@Vnz>qW? vZ"JN.g |۵ 3g?*8/[MDɱmsoJyp]cD ēDc@d0DڀIK.6wKRϯos6\/=?Myr?f3B%B;R F^?#EABM9ҽ] qg%S?KǷx;ul_c+*ccm?D[xϡ4}-k*pz ęcWDwWD֬&~^mOF<~JzS-ok{K/moqWi4x'qeR goݽ21%yN[SU4t||v!Oڿ 웳rdrvǛX;?qQDc@d0m uN6'mV-礔+P=-GNh 4B_  }C`X}6 h4Pe۶?09改(vh;<  IЇPS,χzq2l;ӿ[Ǿr]o~3>'o>=ro_rۿÏw mO81QSPc_"^C- }D3w}G?} ws% @.(WFG:3g?3pTLuϽƶmoaP< o;jwts%\+v~W_ I@J\.ldcƣ 0 2` J Z&πԓbqpoI^{ ##]ޚA>_d; }'^p|>d՞w?~|㟂}ڗ/' mMv3xB laPO&x` "1 2` "1 2@s,C)&`,˂eYǎr6,fE996ԣd0b]\xXџۖe~M_WN;^3_0bm|Mx_cmoƷ88S@)s1+JRAd0Dc@z㯚=1'ΖrrT>& k_5Xu̅|5ַ)m18y`ph`meȋ`*(vwuwb淽gS<<ڟc eyK:{IMoK<~u;R(|RT)#1&YA2;sF `@d0DcπeH{mwD=駞׿<=~&"rx'Nq "cDc@d0DcIENDB`photoqt-2.5/img/filetypes/ttf.ico000644 001750 001750 00000013220 14134304255 017460 0ustar00luspiluspi000000 000000  zPNG  IHDR\rfAIDATxMl$iySnޙx ;,#$`ah#9EP !HQ%.HHrC.(H(C άfmv͡lqz? ~__@d%="J` "1 2` "FϾ[\(-w~΅>u sɲ@y uܤ0Y;@d0Dc@d0Dc@d4%rRP\qf[۶+`m9e1(v zG={Eׇ;R"AFTDRBRBabP8lB݅xPPp.zZ{-9*%=5\odP4yG](x9y3ppsvٹY,\_@RJR1&!@.ZY/zkx^ c<ͳ `fzG=Dbgsݣ.=s CB`kpn$;y6.  89mv~vj nMG͍x|ߡRCgP(;'F=>h59s!8-9r\6,W`&<DZJ)lԾ\[w ((yQPJK줇ZA|Q{PT-[y//SaKH}l-o/Vjh7۩:cIFpYL**A};6RS9Dr*B <t;W%^m/3!'(0siRQff˕ PJklo\68/Cy*Zas6枚zz7\DmMc BE߳\K3z/%&b\ Wa~q^*;y%Gˑ *(ϗ;/cߠNv'0.V•PdiSˋI(.*;p~}bBk\ON3\}jf*F%`0|מ\m ?Ȕ)R 7'0@sWExw@E,=J6~k ܕ9\:=,ϗqnnW;O`4e ]o\ES*`l\qK/0~%j-a88u ˧eY,Tƕ\\%A%dErI UT0;7!Z-t]xx 9*%]CRo8fhW5nVy~ܕ9 _dZʯɿ|2* :=tZt;wpSO,ۂQ)T)T)0SeY3C>_x:]abEwuOKT-ۂ`,O2SNjsy `xK+.l=g-3 G1(RQR;ɸ'p@70 bP$7O",q0fm'Ѕ5o\L^O@Jw'AB*J~2O@ѥw 0(} @P_kS; 4zP 0hjږN>ME_Ȭ>M% %A'w 0hbi+ ”>M$m%z&ƒߠL`P`i. ]-ZvLK~''@P;gO@cJ$'e7 &wF!s%0'{?`\XI UXk Ya!0,-2'`FP_Re[vQ}:Qr$<7;}Awo;lEŔ 'zXAo?Xzw7L(T2bU _$I%A='``ky ƅa*27v'~w}dцnt΅I ^6wi_O s "8ja 3]~AFvϹjZC^2NʝtmO \OyM.Dʿ7#+AZVu+o>6\X{wN&}a/왶F[gzj\0K~ǏBaEraSB%K>&AGrVS'eo('RG}IzP.̒pO p'ʍVD2_.̒O  "umzX}/, ]He='L"h`0K~q'z q|vZ.nvʅY4 *4DY)fo'8m=~OT=ɒx'8mΪ0,})|BraK> &ƕمY3&Bhb|gʅ20K~z& 9b `orm &HqoC;,M}z@M>Qо\%ЩO@'q}d$w5jXgfoJ MO 4\֫',M$ PWI Al 7}?KRWnOZR.̒TJO P74مj%)w@ @}J؍3مOJ~z_&z& t2p,M%ZO H{OTV5raf3pb% /rafG}@V|BR0K~'>H M>! \%W@dps'cM>8;p>fW DM>k¤ 7NG'M趒OZ]%'`w#>@ו|bra#>P& sq0K~e@x`pONz LQ &7Dra'>pM>8ovat=6DمYk*36Z,5Y}i&nt],2D2l v'py2 TS'>' ?q( aK]ɇ(MBY^ɇ(MXO pɇH;]p-41mx 8mq]:CI Aw*|44M<k_?HK Y6,ۂ<&*W*rcGʝYgR@DqoeT߭~=XGd'"m0 2` "1 64[L$.:G _32⵿z $}hL9;-/o^Qotc ӏqDiK_7J)6`y` "1 2`S Ey8NnZƩӸ9͓g^0NYbNBӅ&_&LAXm8 RB|>m?|p\'=?x*N^"=|juUBXw|O m?gDz.7_ִ8vcͩbd|w9! /\'RDvb_|kY>7q!<ؖ>m{k{Kܒ|!2` "1 8KU,cjJA`}41n| xLA8Sҍ'?a?rj~;Ѯ굫O>3W~ūoLC,ͯ_BDJ)fKWx:y&oҟOɋ0? 4`L)M3&=N)^:~+S<` "1 2` "| hYr9>-$J\.7V1=߼, J˲oˆ(x` "1 2` "1 rT0ȹ`IENDB`photoqt-2.5/img/filetypes/tiff.ico000644 001750 001750 00000014644 14134304253 017624 0ustar00luspiluspi000000 000000  PNG  IHDR\rfUIDATx[$]_]3sٙ[C ˱ r%!W!QrUA 8L!Q"Bǒٝ}{RU]Lwu~R^ޞK}]]O "2QrDc@d0DcnwW B)/m%XS{}<7|p'DD6{(σ8\N 2` "1 2` "1 2X*0HrR&+%6@s:M8&\uٖe۰y #@XDU얷QYu(σeXV| c`h? @D6loZ uE)uMw(o#g104qF "@y.[Z]Bmy{;}%Ӻ4'0:~C#I?P0@WzK(oCy{<7Q`F g8Q]l`u~ݪ/V"qtjD=v6V4{fV$30Y_N3 z幫Uw۔i *X](%6UMQG@[Ff#Mԫe͗ͤ@`}CoFV5T7ұZ"04Z[h}Vӹmuc/_j*@cu(o9N귑ҍpAOz[BbB)U@VhWBuF]7^`&cUʘ N!:(I),]5|GPiQ(Os]-Y%"nobu~"g[ap+4l͝<ShkaP*7n J-*֗MB < V"7׆ܞ:X8qX6޻G gZPK`rZ-PDEX7 [kKX[Σ1a Zщvf3qnC)IӲNP>X9MLV vd`}:v6׎ bAL_ۡ>-X @_KzSB"hv4{mC,[0alN-" *;['ٯBGpAq|CZ5W].]X֗汹J)7PLP>]\nfspm"tpTal;ةVwe~,"\8Iz|i< P #cNtmqN 81|F'Rٲ 8m o79DJahGR);zjšmW7+ުbYX@ 6,3竀R<1IoI(np4rN @[ A:w|!MQ+rPܨ;~kN`sat?6~^E8#P(;F)oxoE'ӿ{ 0>yn.B_B_qlR |"8'@@c㘸^c{sOa?4,|+?shЅr ?t R6&n$dv78'p,@W }8}=8}^#ʡR bY=3wܱ7ꛑXX68'p QO8<&kBo:ۜQr#"lmNٚ8)Ry:ѓV[FRF u<%G"!ϣ7a 7Tv~U~ch18{٘  ,JrupMN/mY,;;/{;=dsq{}og`Y 3`m%6uY:X39 gW %TÓQS ӷ] - kbnXs/uo<9[1(b~w1o78'p3EUFT =8@8*l1(2*o`>EjƲ}E$U~F^O@ c߸lꐶZ7 `Pv94WoP7V; `PhR4sN@!IW7[f 0(ivcNfΜzo7'0kΜzoL`PO^5'P ʤ9uMo7L֫FگfQrS7K{MQtucNಖN0(0;e7c,͗2;'Zߩ~**`P YZԹT~b9oPv QhU~WR927'`N٨cX ,V~;8'eĘPSX2Qr7sњXƜVf2w CZgШi@+Ҝ@@D+D,l`x&) t=L"n/>f~Ӌ%bamkIofݨf;oX Li?'p~4?} ZQJ`@ӗ~UfX:.J2yߠIJPL`seW_l[45\|Fù0Xs ny4;:/"lo+EOj#+A>'p N^ny; "\rJ~K),Ys kX^誰""X.]ކ*1؟(7'-aqrOZJy6Wc;`ߜ@&@DP@:#ibg{1{o4YKϡ[ eԪeVޯ6<4'}|{8"7V0;iF]/?ۜޯ!(W,]JFpv=m!'3]+Y .sZO!( *WX 2\A(oDzCu]\|J1FC hKSX[(zJBeg3/>f,ԅU~ÜVd'ߪ ?R K֜z n|ڎ ԅYR ӓsN@RׅY?'9MO~.]/zbՅYYR"JXC>l~uaV~9ZKu8fUQw!K]qN ՐO$4 \MvfU'=+!(.o9@lC>lw^tJWf79 gz |N Wf7U9T\O U?ϐOnԅS0+9TOOׅp먄tI˜@*|"O%_<3Q D4 niH]|tЪ O'Tf7H8zD,$PfW $HO450+HrN HOD1ՅYORs&C>Qb 򫣤b|B֪ DXfW_s"Xj'@PnՅC^]_ x[ySb/[V ˬjƜ@Q='KՅ[8b qP{'V*@,4;E|B¬fO\s[290_#,2; ;Յo+S|N wL|:.|kH$1 DD͕_>Y@|y]_SD9'j9NWfQ {WL [s¬ǟ }$P9C|_:duakNˡ^O =C>,Na@]utU~#R9810wl.uaV~@O?s945~GU,;[(ok^:GUBĂ8 [FO_*^!X\KՇ).s tr'" @xsM!JOC>DI cN p{?Qzx/|J!JNs!vNO6rȇ(n\|RƜ@H&u%u],\8B_GPt3De bmo/ "K=Dc@d0Dk( t"@Vnz>qW? vZ"JN.g |۵ 3g?*8/[MDɱmsoJyp]cD ēDc@d0DڀIK.6wKRϯos6\/=?Myr?f3B%B;R F^?#EABM9ҽ] qg%S?KǷx;ul_c+*ccm?D[xϡ4}-k*pz ęcWDwWD֬&~^mOF<~JzS-ok{K/moqWi4x'qeR goݽ21%yN[SU4t||v!Oڿ 웳rdrvǛX;?qQDc@d0m uN6'mV-礔+P=-GNh 4B_  }C`X}6 h4Pe۶?09改(vh;<  IЇPS,χzq2l;ӿ[Ǿr]o~3>'o>=ro_rۿÏw mO81QSPc_"^C- }D3w}G?} ws% @.(WFG:3g?3pTLuϽƶmoaP< o;jwts%\+v~W_ I@J\.ldcƣ 0 2` J Z&πԓbqpoI^{ ##]ޚA>_d; }'^p|>d՞w?~|㟂}ڗ/' mMv3xB laPO&x` "1 2` "1 2@s,C)&`,˂eYǎr6,fE996ԣd0b]\xXџۖe~M_WN;^3_0bm|Mx_cmoƷ88S@)s1+JRAd0Dc@z㯚=1'ΖrrT>& k_5Xu̅|5ַ)m18y`ph`meȋ`*(vwuwb淽gS<<ڟc eyK:{IMoK<~u;R(|RT)#1&YA2;sF `@d0DcπeH{mwD=駞׿<=~&"rx'Nq "cDc@d0DcIENDB`photoqt-2.5/img/filetypes/wpg.ico000644 001750 001750 00000024544 14134304266 017475 0ustar00luspiluspi000000 000000  N)PNG  IHDR\rf)IDATxwt#}wQ ܾܾVhUVl%cǖK\g򜢸vgI(+%r-ɪ+i.\$ :fc@.H Hsu8{~ >  A00$a`H! c*G▃e D  =>|hp˕qn2R?Aj1IJz$ @R1k500$a`H! C@ A00$a`JZu–N%YBPi2G*#! ȐEla1h2`6 `BV$HBP) I2"#qIēi% -0Q`M[88mpX͊5`0 03H,$˜C8RR $f磰Dx6t8q $Du!X1bb.H, Y[g60\?eǦv7_Ɣ|h= YQqHր?T T:J 3A,ēif! * @L04G2-Uc.C2mp;薀d*@'Ԯl K|h ʄ@%sHKr]c@4ƹ ?btB'D CS~R]_ƀp,~dH+QHJ I2&51e629:3(B1Mt\&Bǒ@ "$L΅4+R2%abVF4$EGk ?B8Jb .kxMgdD|dW۵:g0G< @>8UVOD:5iYB$+eP4M߫`% H22 22,S ` "S!XC"i)+ST3g ExQQHLgV* Ș}ȁss87>)?wTUp3RCR2Xt1?1!G$+X(p ,~6YFߨDcD83k(2$va L!d˦ ДӁ T0dw#~$TF© dtY#wլeӎFA`0t f aL̆V Y:!C `M*H688=2Xiib JY~e)'0M95*mviY"6n5 *,ksÔP @tsCLbMo8\v ljͪ?[.P @t8gs{MطngcؓUQwM*H@ku ik{7ag4c@Loo@9bCZ{MfԎf;&ˆ6sD^i_bfK9/6wy0$@:[hq0af~XiIV.6Vs0`18ljq̆v2(T ]FVr-N4r_ }#%;UnsBRao$VB@ԄJ[~tX Q}d- :ղ ,.aOr#kwmE9EHc'p :,V\al:q'@@TW>Yi'@@T T Q̺ֆ,Y~Ú/| (Zs$DЈw-5'@@T -Y~Ũ92To-Pr3 U~k1C03TNX?Hq>r$ĺho,'` v2s$ĚYٹfQ <'@@\˯n;٥@ϥ:k-岔vC!|[.04ߜ Q6l] z o,./'@@X~G  Áq}X~E9 @FI}X~0'``@3_`У\su02NjSdz$jѱ\aTG9cODA@8}%S-˯Oߵ1)Ȳr/0@O Tj,Y~C7eq?=- Ɠxo{W1 ] 4- ߵh\еd22\(Zp:uaCSU@rYh!D7@$O`گOz'R8x5CN@&fC8yad1X2g&Yq-X~B'!dzH3G2'?:[ }? @* Geݷ ØoOA6WGU~ktCt%ʢ޸o~M1 ?fOgU~k7dN@?/pfķQK0Ӈӫ\65'` P LBַØrLߘŒa,kQh|`@"ƳXW枕1p,i8$I83C*ݘ+fq? 42)\W:]x v\/khl Té&0Ic؅[s$'иC>Uz. е~HV 75dC>TIR2z oY h;mH22/$]8h6`Z  C 4BO5C 3}H.Lߪ92B>@` ; VF 4|R*C>9 1bld[hX ,>ZqvaB|4p^ 7],5E9 Rg#b [],E9m 8Ad 06v`17^O5T.4],##k/'YX "/ũi\zua-'Mrȧ Iq3v~W hk? @B>?mSg4jZ~d+rbm @C>F`  X~+%Z hJjVPuaj4%T1?0Y~5Vr0^ǐO58>X0Y~kN +c'F@va0M_͢b>u.!Fd.؅%Iّj*Z T1`^i0 O4KvV&o㰘CN> <ѐOYua6Y:j/9;D4ǮYua6OP|T0Um`]N`!j 0JՅ* K=r0hO5luJۅ9?NF9@6L_c|01b$Y~Zj"RFYjO5U&˯~eN&pvԇa|*Md TW꼓O#PŠׇ"c)'P'9;)S U]8/}ɺ TMB>|Zd/9U TE|螴,ʲ Whs|*M]XMuaj*+ɧX ?u], TNrB>ZɧC ؅V&˯OrG9S 0^0Y~ RN`WG T¹vaA`lN`@!¹bڅkl*XPȧ,څG0|,9z^OMX ?qzH}9 `Ck36Qȧf7iclNT݃9 |M /9!|.T*'PCϠ ~re v!F"#/'^B>> B#7'N| Ahܜ@y"PRcPȇ 4@yJ $xq"|Bì5'P 8r19D'a$Y.0 HI860TF3q8 Zv<7^5 U-:LAh00$a`H! S``ZA?` DXhކwyE_}}R]I݉}2RM &6J5eHCDc}:h A00$a`Hko@PR-LPj8:ujڭXF%a(p2dL 7bl9pΑ' 2 ]cLڴ(k:F*FQa6`ק3 dF1>y/OLa@,$I0Lp9[wNܾ-^@I T`lEF4 0`>FF*9O?;u7w0Aŋxpza 9MVtwvmG !8. ( \]U2jM|pS#?Yk&I\EXR9̇BE7^1*!R7|-[L_?Rax /`6tmH&Wg2Mv[[4}t7[XEW~v 1l 'd `UQӁϺ`\}&1'njo3E?1zۻ0ߌÑdcVv؎V4Y,☚فA<ӇɂGb5$VkSi,cv.jxf\zq\G+~asHd2@}x~ AUǣ=K7f Ա:k^Vbjqvg;#Lbb"@eT@68}sUg2̇E۴ac=$0٬@0Zp{ыWɫoWXsi7B TТ(oM7^۷omxk^o|b|rj]Ckz70d2BfhjRŷر2W~>nSu3}/ ~'pt}Ǜ~شiK GVZ[}|>:x9$YvOs4\hm)IxVإDZ#J!).=]F݊믻FU3~D?/VY\k'p57 ڑW8r5.PVk:ڋ6HҊ/w<_.oVpஷ_$" ѢաjUs8\.|:J/afv - &alY_1ZI{q> 8$Po,& !H/ ׯ|lW{nV~1㉂EQ*0;zaEdJtT:px-񓘚QGoTW"/$X '3;7Px! .ivx0`KwJd MKĬ?" ۃi^#H+uVJ1,Ș23($&/NZ)·v..6ɋEi{GaPW^M6k?Q!xdŽ[k*ZEr ɤ"`874pؑJN/#a еW!NlMMMhȈؓg_CUpӑp P8k X,feHO|^|?/ڮyG?,_10$KptwubtDc1x[$`v7_ bxt|2lj3}KD"h@[eTy>Jnvz+dz"Q,edg$b5`*G@j6Pކ۶{7Ņq@,󮳣 MMMجV;ߎ{?1(T* dD!Xs^t&d C,۷lF{{v,Fc8n) Xldk?/|{4)YxdB3Zb6#sYRlxXز7t}t eJL@u*niEtvګ_r%G٦$NSvVA4|(-$5 Q,GBf6tw1r:ws,>|G?]ndtg|#ߧɂuG Go8;F 0QTDfrtab@,PW-=]%D"4wٝxMGV3C_W6%TC tAL^khǖbz>pQjUF -nƫnmE8X9R%8dž.\ew?WPl[omr+L'|Lh0ۋÞn{[7_Kعc$)<Ӈ`뮘Ȳ 9Q .HJg$ej_ ,,OBH}lrd 2[$dC!8}j ;a]sl۲)q^8q3svi` u (з p7l2 Nmc8oR;{,Ӊ{w= XMT\\I!8<0:2F"PEHVաTQV_MV+.߿3hjd3 :_DqU׿_|?"Z @ JgS`˥]++fSRz9a;fN/cOo}p J!22]!'J8GKfյڱyㆂE1V*hnv ˸qk_</§x?7m&laG:F08F'UW".AquclbRKvlۊO[7nP-K@4a6C7|BItaNZ`;+q7cݦ?Y=wK6/z:T5!Xf\Q 7/!kV֥<0 =]ؽc{њUݦ]`&}?D;яܭvjuW_h%HlT=ţ2ǎ[ު= sX,|_J-N;o}04&:NOW'k;o)~QqvnRx&X,& wMo(Ç/ _=ο|pvXJOKXawqپ҆&KSY@g]x eyVpq?|Ak_ T':Cw>B,/nud o}iCOqn*k j.V.֛Elò,cCr7xSS^(yUAfEǍm[pGpp{=.gwH- w]E[dW_uJUmU 2ǵĵ*ގJs@t9q#8z.D1Ua!8B,V^O3:ڱp u|U"{1Vjt@w교;vl߾{ X0[ B,vl*" A00$a`H)@D 0[Y?u 6W!+,AuC<ԱWx A00$a`H! C@E=)"FIENDB`photoqt-2.5/img/filetypes/pes.ico000644 001750 001750 00000021073 14134304205 017452 0ustar00luspiluspi000000 000000  %"PNG  IHDR\rf!IDATx{x՝g4,۱'vbCn8nJpiIK %҆.^hviҲRrihpb;DzeYJ43c,Ilk$Hs}$#4{Μ~ ‘nA  A8p0$`Hp饫EQrV 4"z0vx @Sr~%$ ( ,sHL@C|i  A8p0$`H! C@  A8V`"36rp*Ja}]9qx\$)PԤ( 'BB"c$)`ttH$CQ8)=1塨(^xyFB@d a dBcG1::>`:9$#!"BqE()"!  MS066>1gIOıBc(-\*acHҀ1 ;QȲzo?׈#8`A)n!HP(~&:$al, |y$H 0~b!&B0b^,]Z|B7::Y:##Ylސh1 Cgg?q%'0phpD$o 3et4 q*Jd @$Iuޡ\7$s "3E矎?QZ 2`Q ~ | Ȕm# ,$FLgj_(4FO x\F08jg!FFGM=2 s¢CCaȲb+aZHf@F5їKcddzSPѸZp8jJCp h2[B$IuS .=~JƀH$ޤ^ & 4 q( (, ԂPToP891qp#F@0xJK}066E6s\JJ `A)i8瓖_#} s55l4\*+PRC(4`pщ @&cn(#3%1BY~!(B^]BHpQ^^p8FF!I260r|<{Q\랼[_d_8̅4 8pɎ,x\$) EyyD5a3صY~ӥ K"0 I\[1|x'\-ƦXv yAO F,n]*̐YAoozmZ~t N0)˯o8`  aٰ. 1kF9)HCPfMO`{u{2k%˴ ;zTV;՜9g)ـfVc  t%זtڛ 8q?BW`M'H07  tlTqjN sY~9"cjM<  2ƬtpZN*Ɵr$DF^S[~SE  *tPs'l  jTP}NH ;do='@@jBMZ  RF-iMDN gNH)omGSsNH[~S9B3tkN 簍7UpȲb0[w`c1 okCOO6?`7Up2ǡC V*n4vp0;ѣ}pc߾cD쵠cv$''`{`!' owA13 X~S!z alnwTW--=nq7]~N I2 c3^--'lF$oe?[ @kk/s^NzʼnT~zzI30>޽,?Y~9 c ߉x\ִʟʺѨssO>jMl';1ġCݐegOyT7X9'`+\] h% mmhk sĊ#.\΁Ck&ozX5'` `!Ł]?f %a3S>V X^/>Nsht.sHH̰bN :jMم;aV-d5'c`zLj6ahi9S5Ռ9;,0SǨii8Y~2K \!#H؅k Ob XR|1H$}h&˯Xe?K @k?iGo~varOONW~Cma&˯X!'`89#lfֶ 'Pv^4f XF 鱎TT˯,c% ӐX.Lb最@횪.l-0Y~s=C>F`E0Y~sYs#B>Fxְ 7w1'`Z0*c1>l~z;5@10ubJ0:cf.FՅk̶ !#گڅ;Me&˯0~l|@ LU],,9S |j6GuaL!c /Y~͋r9tvf ܘ!'s0SGov{sc&˯uN `: g.L_k@!#Pr"kS=Z\r"fs@KK:;_'˯e--'ȺX%cٰ ך0 f='uRGoՅ d;'UbGo.ka5{˚X5cSՅ sZl'zǨDOj#˯ fN +`LمCwZK_͜@V.! wf#˯VNP dc5WN&˯VN00N>V Q]ªw,6$9!# :kzDd#'`8!c]D,E .N V巗,6ȜĐh.L_'`LN@7prGo l*Ĉn䐏e*èt C.{ҿי@@!c8x'Nva:s |'annQ:sb&/OvH؅}(Ad[ TU* B>#((p % Hl R D+'Pȇ ́ ,! I4 c ]]!31/5 |ܴu[T !s0䵶H*B!0;:.( H¬Ȳ#G(#j LA1>܃47w$?lp(Y @@  A8p0$`|>/sN Rd||pdc -7s $& .c`A (N^E9킕eh4g['/H|?pǏm8rǏ@"$I(z1o^.B]baѢ7 !Hf wm Rz%@EQPP"̟_ŋbɒXQXXXFo}~qdf,˸첋o|%YHB,;;}+xhn>ј/..BM^}yXbvHN1YV|oGzQQQe˖|\r:]EEi c ^jkk9OY\. |ćIʲPh wDee9=z\zP[[3qKA 0.z]]x7mۣq _7?Nv<˕3Hs C{/L  /_|Kg,4搡a}`iH21s95'm&2FG C0JizxxO?$I(((Hz 0hi9}+ŦMkBC(..|*9G,:;W;Oss $߂~ړJ%a}س+0$B[1\٠#mۏPXXK$zE4ΝkZ_h!xEqFCA55 &~‡j cD}X|>/ϯDcj\s'#G?ϤL>^}.yq٫PZZ$s1&:j.E|kwꫯ jXv5Wa>8v "`֙~Y!Iկގ͛`$:jcLA] $mcCذ*і׿?7ش|> @[nDEE״x!  '=r򥨨(hƓeXf~ᦛ7ldH(hh8+W6h:7HdN6D/yUi׫RubvH>i:~l,px~YVNzJ2}}Gu<=cv y4s'<\u8xy3AtК4TXsA?0$I @cllLӱnQZ9*5ze?㭷vsNB`0$Y&GӱO<MUO+ gh:s߉nG˿|w$IEC͊!z{ڜjee|(#EQAqEiyqEߩ{{xG Gq'p` @ut C񵵋rAb\2$Iƍ]w}QS8⊋CAGGWJ׏z<Vh_O|YbL~҇  {^gмUgv cϞ}g|lp7?IZưoط}|SKסn1\. ?i@!.kbTMSsHobhiiӜ͚O{җ7|'TmmGӟzYlt n&l@#$9Ƕm;H;c ]e@+W.ǯ~><_4% ?~򓇰}+ַĆ rBa1`HX,v_<.et{n#nbeKm۽hEkeCز.<ÖQdQVVo~s+jj5筈((**ėt+~1qP]=_{NV$ QXX|.\y%tj>X$9_qlݺ睷1[/[VOӵp/V^b]7ʁx\~q%n.< xͿapp(ܾU޽]4 8 E.0٩SM2 vCII*++PWV^UBuʷF_S5OSdaɒZ?wmƣ>?/DK_5L @×J>Ez'*#p4~Wiݺ&wZ|{C vF(42}"[`Xv5jI|rFئW &#{p뭟(կޭBGGNAyy)d =Z{]՗wiF\wU^344n?yN$s{pQPKz|<]  aY ,\XXpB@d#*r4h:$0cS#xs͚,mt!p==un4j}ZSx<={aϞ}~5kVb͚[RCb8B8t/oCC#>G_1{Nql$DF赪㥗^K/QtM( y! h CCI9xYq%htH#\~/UUE@\qؼ:b a8S(ۈoa޼2Y  '?߃yYu#c3i?$(<؃BCÝwnc=U@u[3vhl46x+^~ Kسgzzzg; Xh!֯6o\pDQ4}iu3@p snlr39o3𑏬(T\|-Dg[~6mڈnیGvphlFqq .Ug<45K&wS_$3 "~ ;w[nAZuın˗3kB$ ~000ɤ_^>%(/Jn8*$`飕 &ʥBaM,ZpB6ݗ>$)PZCt= C@  A8p0IQa%DQT!i޵k7m{Ua!A]@u ±A8p0$`H! C@StoؘIENDB`photoqt-2.5/img/filetypes/sid.ico000644 001750 001750 00000021646 14134304235 017453 0ustar00luspiluspi000000 000000  #PNG  IHDR\rf#WIDATxyt՝￷n-Ջc vb6O'a /!$cp8<fy 0H`wKjZZ-޻?Z-BRWuWwtoݺ.A-J J A1$acHƐ! vN9gx"daDaX*}]} ZhH&1ޛwUDUyC(áh0΁`1v/sTSVfQ,uKt:{k7KHP]͐LKXUef(mTx˯ r!p*l7!L9LAÁ^勞JIÁ55lVF-}9F9  uzӋnZ~fr=P @dkn3jjJ] IY^  @˅ pnTa~CEl_PN@E&s Rqpܴio.drFHh`Zu546}&TaYb|! d@#ӪptT.\WQg̰)'31 cs8Es.8&˯  2'L e*9*q̙[_o_i0 R7p;ش*x<F" { p0u`%xXUb c p8'o.sVU x Gړ? $Ke(av)E].xnT\s ~`=ZФsaXdԤG0<@RiH/t:p9p `Qˆ034#-qjkQv[ d;o1.o.9[L tw 0Z,0;Jݸ"C_-@9E!)Iا76PN P_PN\(,jo'0`k('(Ųjr!*ŀrס X˯QW&'`H[t˯6:  tG*Łz?BWJmͥvO#X~bH07  th_5'@@,`ǜ 7F=  ƨ\H yat˯ J&'@@䅢(87W+v 93b _6  rf+)c fs$DN;H͘LN `ќ [~s!)Kcќ X~b X~s9B5sW+V N$EX,2Vv 0T BG2?`0CBcŜm@u|>Kx1Kb0D0-==8(jBa*'DN?4GM` =!|ގEr_ms!K,-1D K%׋(8vrIi{; ^ NG,vj*9K nz켲"A1+'`I`s`{:;Ncf霮 fOr`,]>Rj_6!alՊs'v Ƣ~1tQ6Zo10sNRىj ߏ~V9'`ȬXʫrp4=~W+V-@0>iAV[aR62Z,ZI ^x2>".1 e d3L/2h8 Рw-1 eWdL-#!tڌcoggjIJ7o̖0|@)`e,mn5w$˯ޘ%'`J86*E?h=0Y~L9S @0K&׆ T]#o0KNp@EGo2v 巰!'`*ȬT"Si!0Y~ rt')Svw.L D 0||C> 8dr 0ћcD cm'oQ0rNWȧ kC4idd,F^F Z2!Ou<Յ[Fszl4 u U&oH: 0*SR],%*'`H`Z ]ظՅkrϑ ݱd;Z Z],`$'m`|̀ e&˯C[9C @C> ]]8h(0Y~QrR| ` 0Y~QrR| Š@7Y~(䲓ՅKcf'‘ Y~(䳓 D%Y~khJ(C> 1ɑڅc"˯)uNdvbW[]XS$aY~MA)s%ѐO!C>vvՅk>J(d,FYQՅ h&˯9)UN sώ#7E ?'PT0cGoFW&˯@foEt'p{/L0kj2%(|L)59fX~[kz=E EFB>| ׭0Y~C1sE|y؅3U~k Tћ/څܙ*IY*!tX9 UC>X>ZtN_М@A!B0.ZtN UМ@Ah;LuVvaZBtѐv1 Y>2'dB>(7[[J_PȜn0v'B>z .L_;Rn sf| Avaڏ9=E{| DՅk_2o:#cVd+IYߜ@^0O[CIwڅ#C8GU~9G>N>f ccH2fz\yYPȧx_ QZ $) c$r1(|$#!v D <5 |Xs9T @&yF!0\s!|€* TB>aP d+! hduafM !aH9݅i(,~Vގ,sN081B]Evڲи&R݁ 0$acHƐ! C@6&v]^N D0xXl ^kD[OYv{{ )B׋鍍;k̛s`ZC*n`X8芢 Hd\p8w!9bꂕp8p8FB(.u10ƐH$mJnj©K3/} ΅ ZdA o܈O=!Fcnؽ}i|sz?4ubɮ*CeYF Ѽw/߼f5kp8Sp8hFz 0 w壏:۷#LkEQގǞz _:Q0$~x~,:q+^qwvR $pαgwBh`ݸ{GL(܌<$dz4}?I:ME $ O":UraNS͞z\.$I  ;@ߏ`RVKN}̟;KO:|H!b˻:!s+SOEC}=\Ng7 G"㽿 [mÁ]^[S8Yc ǔnE9tW<_>(6>PTC|k;:t:qM7[oE]mCm"DQD}Yl|c:ttw>7۷#HVEQyӦf~=e.'?+ 3u}^nتB!wt}矣G9_~ \~%Y Kv`,w,^x!wQUY iisȜw9MM+} o~inۦ9ƩKLy\ƍW-ڵ }6AKc`!#ח:'pxϩ[_Wn?*<KM@ZqqW~ ?φ#hO 8$YF$z%֛́,%0<,cՊ[U_77`$ze еC]=ಋ/ƗVPu6=x|㠫1QP"?8wnNuuڵDع{wm8HQVVښUg۷CEZe4թ:v=HRn r̛=[Gqwٗ^B$(s^ <ֆp$BHEv)?ڊWr 6:uYpQ]UE' z88g`ZC ۸[qu׏?Aeáz0 7c $.Ěի56qO~W]u6:zz{! Wš/1njR5on ;/hxp-g_ wDnn|T6G@vc6n#6`%tsoaf9v1t(m*euo} < ް_ZB`jaց;;- 2SΚ9p^~i<ƺuؘ_y 3{o}\x!-^LlUDb1U!1Tz1LfVŗO?]9bρF@UVVTX@=(syCXvɪ>FѼw/TH$pUձuIlbT6Ẑ  !UijBuU@P$dE眃eY6Ӽ߀gሊ]`…pنHpQTXfYd[gU\AK4 4x˵_--oz,_$\ 8$I;[~tH;-0ƐH&ئM}N> ͣqP͛oƻ[BQ]bf۱::b$VD('{^xAvyq!y6\qMg?CKDA?SijU SE]~?6<0~_[ϛ=c@VqpFF'koo_+/ ,C!k[ECo0xÁE ZP#LAD>@1)OVR)#=m_};wwv-.X@&@}>lxa?>.",_RTN m`Yg~<W|Sߛ؈ec͈C8QqJorXf X\Fq߯~( ~ zΟ3]yhBvf&<8rrX ',Xi xMDގ>lقOYb͙u`1A@ߏ?n.S~EUaՊ @2;￯˹ǒEhO @DQjnƮf0$IBBc 2ӺupϾTkzUE*/_uUahH#-h@ z5.<z^͓5W?t-Y3gߎV .c%ϝK? 4REj^j/TzXb^>jkjë^Ih%cr*sP񠾮)c8S0 NУSL9 ˨zqѹ碧{ǟ~O?FwOB0ĄOE\,<8:4^ K/FUee^7Sg܃x"Qs|3N9稭6 tv[Uښ4աp2\~L|sMolD8쳑L&104޾>t 104x<yJpYYUUiPWZe踜sLolm7PaJx5ۘ1̠'|} PI'7աKN:阎 ؍'tܱgp4C @ܑJ2! C@6 l AؘoDAs8uAp@TQ2 L(g=?!BkacHƐ! C@6 l Aؘy٪nĜIENDB`photoqt-2.5/img/filetypes/dds.ico000644 001750 001750 00000024034 14134304114 017434 0ustar00luspiluspi000000 000000  (PNG  IHDR\rf'IDATxixս3#Y}8C M aPtt-m([[h˥ܖB amIc;wǛl˻,ifȉchF=O990AX! "y!  C@ , AX0H.X g,; W]W T"0܌WƔ" VkW~ $%Pf_E$Id0yNsaaH!  C@ , AX0$aaHDsNkɃ@ccdEFP  (%(@Dm6ӐfO]AB1BOH41I0A G!((:6c "nB; Yp9!  $qC @ #(Kñ^8d A9(z{f#;# EȆ($DB!Y3Ї FBC|8)nozAYA 3}D C #Qv":>S:6cP=DI4 fM!!/ڛ1Ѭ c AIBKWF1tN7)$Q` !2HA-lwd>6/h`xtumo hhFPӲa7m MJԃ  c#hloF HjcahtM-d_" Hhl =u 0fw=ɮ Lۋ>Ct#iE ) ۡj}uhl00bg14B_!8)OAԑ06$m2;4}$b`8CVdWeJЏaBEId Cɮ*E 1Ap1بG+Z@;Tk $ila J`apd[w':) $~S %YBPRvsm kGC{iFff`d* 7͈%Z~pǯm F tMYejQ-u}a4AyzC@t/.;Q c,0jd uH = PXDxIVvTO&0Zݍ1vO'{: T`:z;jdDH&!0Uò6m6DnLM NY!g4OT94mY*16x{>?wxubc4H"ܡi4,Q] M``󡶥.gZ7Q@LM!ӕjBdR0 ޡþZr[ $0Ɛc*;L差^oA@kAHI#ӕ wد#73;hr:uE֡X1 D 1HQS`觊uTo&1x{p)%|pΑ,w!-GZ~cĔ)p(-(1Α@i4C-Z&r D[O(G~VឲӐ0\ba u D @l  *9G~vJ ]M[~;z:4PN :H"tcV Ӓ5wDfT.ړ}i4!l4ZpNF* PGhmV E{RDsw sgt%UB7B9Z/nH8sfaKu W>YԘ)'()-De\duk\y_1Y)7ãr \,YBLHpaPQ\sv'8&o,r!ÅysP9}q蠜s|,13MfK'?bF "cлuԢBdfoЋno|áz9zbFQnr2!b<07myoIEpӒ} NBCu; '#bpd>r|#3 "v.dgd!;# .G:!ZjY~k«bO6aѬ)yM@#8Ȇ,J]{EQ͆4{iPgA6RJmKʊJJ $n\ TU R%)9:ӆ M&PX„U~`8BT)  pBV- tQNHr{< Xl:;O9C CoL!H7Z('p"!ijʯPNuHvDU~M8'`Hb_=82'`TJ5HvCU~ *z7~ƿC07Z  4(XaXfA~$6 91H17:9"njH07RN 3X~J9"fbPN?5&+_hzQ HQ V5'R='wH(a˯l"oL gA"jl9#4X'9":R-R3'@@&U,9B5dPN` rI:7P/R5R.'``a,0{>B[w{@HEoL OSM-^+T<Ѥ7Zs Xn2Pֈ!lށIlpN Hy`TAQB L@kw#(Iɮ79TO (c þl_`lkIv5 , 9Is B&qUM5hlo6MLVFxN ]iCSg1/ 2߅zNJ-";̽@J c =jxcaK Fj-`@ c Ã^ ) oЋm5;coeo='Rھ! ӎ] skOxY f (jA[w{LZ뱿źO>FxN|9;ZQӼ?.V汦],Ե/'C@vZ14͌巇,1`LC~ jwaXw7^م%YBM~d3'`z|׭Ye.i?DC{q )xN `;}dGH , dj!˯6̰i`ONUSMhV74sll#˯%'`ʻ=1jY#E‡-ueT̴)@$ۃ^]X!/5dMfOPR]'&oȋ)d&ob1CNTM'L 7!'`%䓨z]1/Y~xNgL?)`Bg$O"م.( jp0L3U.6څi_}1~Z|Që )֑W'0hI»LU~F $"Bvfr,l;j a@VdN@'!0`_S [ +TY~Mh?C'`VHPG 0Y~rB>W&˯!H~6%5c2d5sOP03;B 6],(9CpǤ? c bf;D_a!zZ87I!Dp듿(i&˯1BN `O"+ $.L_c '5'VN>f]x{RVd d54 ,9 @;]shuaaoY~ MsIkF $ë f&˯yHfN )`Oι:.L_󑬜,!Dd5' . h. Զa`X=l!D 0}Y],f<'Т~ YC>@B km&˯{?]`N>c8]1>Z7%3'HgײCruaEQPKztږ:4u?5Յi&oWN %C>Z .JdM $LR5&;&U~iRHHIO"VW&oʡGN !`OB8pJpJ&9[M8SmքWVc>l=@+)N('Pr nmdT.L_ >9`bgeMi&˯5I~ C>`.\q0Y~xNI4I 1oh&˯u'P'Uhمkm %!] l P?<=d0Zlx<3K $U[!0ArVZpNn+q Fx(>LG('0s1pȧB>"0iL@ԭB>| D%B>#!dEN *~H:@ Vɇ B8'~;5'JAxr@Q졐AXs](m(R ,˨iCQn!iUv7RP1T7"/+[wD,ݶ'`K=AX0$aaH!  rtla|cc\D/s׬$Gk-A&>z`rTVRA$f쭒" 9 ˴Ac4 H , AX0$aa0zCΓB,k4y7'A8,9c (asEQ }NF`~?$I5cMfo G"A$X1 E6m3WP]Бk7mۏv |>Ȓf+=yyy(V30glL/+G^nip D $xE1bYAu(;99V< =s&fVDqQ1\.h8EQěヘ JdFfOBvV 0*fb̙(-)CvVDA Dij^ vمnU&"P^Z`+Or%$I& ׿?waE}=|_EcKSOV/xM> h(<Ι`o=gw~ ˭ FunYYY1ee΅ 0|EgW'::;108KbjH @ܳ侱1lxd,YXɱqÏO=4N?tb%0o6jת:~^n*]s)*V"++ C s wn[c|NM k>Y( '>]Ŏ];QXrUԲr>}۷@}olνQU]a #abzEDx7U},/+ǯ6܏ l6˅ e)ףn?^KsGumf.!e-W] ѰՉM%?nߦϽ<>w8yITTX/tI?0m;_y ~:k񞪽xgͯ|}r1yسoocm6 ׌g&QL= ˖uW]=$chjn/#@q +2$A:,E˧u7ǟ ^zҬ3/<+A)9xD]-򚛓O|QO? <=SG/0^#r^%.˜^QdY(Y1'՗]`( $IBEy~ XRտݸ5ttv@`=sHtrT=-MY1#7o<%~W,x뮾NUVª$Y;}̝=Go`DnO{u ר6i%`Wzfs,vcziY¯!YhB\{5~?_r oFnN|CxS( G>n4BCqlؐc ]p!U߾sGu7)N'N:EUF46Om r9`#7ڃ}U~!@'E9sqqToj@ww9ƹg|@?js<`Ãs?XHt"<>`[Ҭ˗̌̈EAM]1g9(.*F^ /˟s $aÒEaE%)93Q\T|csOQ`J_ť^o|[h% 69 B#s̘>ʶ<\y9(+Q7ю1L. g~VTuC]t#~Yt{A!1#??Y٪wvw%MN'JMSUNsW3Kǃ';z\"'wbEMؠ#sdfd";+KUy/iBuCCTVs+qb?;EW_G445חIK#33 #mA@vʨχf>wUuzqk7/4{ؾk84"Z:cJw*A夼2Ɛ~V⠆Am$A;\$uOKhƫv5#&0U^ *J //x`֌= ⾇GClHt1Y1SUp@5`ߘOU9QP7_p4@,?D{=xٗpക펫~l&- 3A)ȋcJZUCC:8*w[s׬+/aۛ'olHOOQUt<EAo_nNgfrssW3Fk[+׻xFuzmۂ8+i*B:C=Y &RU6;+ nKӧ+!3qu7o \sHOW/8xy?iI  VEII X1wv*_XPtg׊@%;q'O#-}ۗ!ty}|۷ቧ׭yEE;cm7c;"UX 8`oux|vt{UiÈ?w#J4 _ (+ с?y8b$I-bqkU7g.2 ȣŀ1Pۛ@Kky(,(TG bᄑSƕ^Ӄf++)7o222 Alپ[oŃ.^/Ōͅ z^}c#^ ՖjAUp:SdlAH œYs@^nk'kZno|-Dn7232 @ԣ>@`J޻7` m6vWw$Y"_w*ʧSpH̜Yq?cv[ownq.'>뮼4$!"V ?t Cw{..2:Sh'8a9~ûgLHtF,]7]#rv_:k/^/͟tf>DA~><=q< EQp˟lPш p@Nv6rPXP.ZF{2:$jV5ȑFÉ2L/+x@cJJZpp $!  C@ , AX_Al6\@ffSedد`3\VIENDB`photoqt-2.5/img/filetypes/fit.ico000644 001750 001750 00000020416 14134304130 017442 0ustar00luspiluspi000000 000000  PNG  IHDR\rf IDATxy$Ue]UwӍ@+Mc 84(GG 8^GfrAGTFmD}}+++*3+8^̌Ȍ=OQ'Ɖ G"Ap0$`H! C@FJVm9\U V 4mG^ۥUV(\c"B#$.Be$a)T v C@  A8p0$`H! C@&_8d%  ްTw%H@I&JʛA J.n7$ c$D! Ơ2D ƠIpU?c3Dwq <^/>Sb@B@\a J"Hp0TYG\H&Dx4BׇZ|`HB@ @0(0>8X$ j`3L"4G$8 -6 Cbr^DF2s5WUD&&]XߢE]n CQDt1(`_//D twBI$0Hv)x$n(BatuHrD"o@ !25Wtyv$&'I] HcHD"tw?K[0F r ,cIUQ ݔ$qCy1$2bD_᪊h(za r"97KVrV`un)Rd;C,B׾=)a&t`DRCjU&eKXs;ooC;t$8%)[,[b"Sc "ЙC͈NL pU4u$cQ0A@<PKm7ߐ=[c ?=3eә ݉ЈF:@p2 b[Ew)YPsS*}O$0"9c&G%YjB1Q`Y m4>8L bF9B0 mK$.R 4ocq۵M Ip""R9vC\nn00ۃȜ61DokPRQ%n,]R Aؼ\0D4^ {&AK ,OYy &(.ڦ0#KL!bVh# J|L]2K9doo'`_oj&"OHfsrKJ9+|py ݎgp8ά*2@Ɛ́r3̂BYuۨ-p`d \p8Gie%HsJJP{*,8eUjXΘ.s&(EղzZ~3 MTG-]b_" ?0TYtl+\(P^Sb/FSǟ:Hp4+o6Ljj!݅>|A+Ct]eHLF@,4d4EN&c`冻^\^+l-p1[I! !"<^<^@I&S$3B DvCcH^?7[Z[^ Л "HϜeq۵| 9gm oq$p>?'tif"/m |pf |X fN0-r'@@G>,Y5rӐƑ'oLh=rM'0 azT5&g'@@U~N0!,^U~Pk3\OЕB[~io<PK38wzB07Sfr~H07U"̋,7ߡ9Bf'H17p^NZ~1sr$DN!sNN UU1jno8)'@@d͌ܖlpJN^W+VfSr$DVX-v bEogA"clXgröcqo69'@@d,s$vlbH)1Dpl /lg~9cHc*Ͷf s(?z.؇ThUgf9g\M0{QD,B=HD5cvfrBa9 2A@?'Nfr!g>$.vwbЭ45NfrU{"9^  t9wf{>d͔ruUnmhw7(96zg-2z1p47A,'Z~9 c щ 94d0{S3Nll'r"0A@?w-`圀s 45`/I+[1'Y~39PsSn7a;.LjNC$8ރr^d:.LhNWyjg>#2w],1NN}GcbxHקdU1hq!#nZ&r],rB>d՟fDC Xj1]&mhڸ} 47ss,)yB>C2: X~'0wN tua.,.L_CBNRIǐߟ .L_CBN2MǨv `OM,",됏!YpB_a!:fޜ59|t1$E$8j98f191;̙0-c@Rvὖ 70dԜ9S !#w]X.ts,9| i]xN,Ì9 W9*i'clj@˴Bj&Y~ s Hgm9Q0}uak̴X琥ꭳ{i*l Kѿ&ǂ>`20Y~M0;cL0ߏ& t%'`^V00bd5'f :cۅk^̐(%cAN$…ܘ!'PT!)tuaB +9c U],9)WZB> Յ3#˯u ?'P89tvaZU1Д@|@U<`], Hsy|ccHD'ѽ80Y~ps!60?s .L_KsBN OB| 9Յ [O ?!B>ƜVd EN8t?+#T&˯}gN /.!ݙ.ܓ],#_9C[|tMMuۃD,#_9! ʼ0Y~ c vcs1&[؅2;ژ2sFc@S]fk+]c֕|du @!9]+Xidu9#OƎممHXO@7prم8ZO@F:1du.F'so >!Lۅ6סM(ca! F!05 (?r8O~0%:= >F AU 4RQ sp?d\%A 65 |-XO頗zp0$`H! C@&`bnVn7B@aDI/)wPh1֝y&d $bK9EB1` 1u$ A8p0$`Him@3QZ<Ց Nc fS }GA`lWU Up Ac Om9Z[LB톨dZ2Rv2AW|8W%Ls3.*~N=99 }}FƠ $ɅRTUנn,_+pb{%iF41x ݎ]rIZ3?y NUUQb%{ N;1>ZszU*|aيu>&h;7=x#a$4,.*BEe%-_3֯-[~F,GUQL#z`yF~kiZ Ρ5!co!8:FUM "HFkO  œO%Κ1<8Ayx'aҥ薭W`P][[ӣ-OmAMZ(G1ynQCO8FAvƽߺ|Gv(ޮ.vu_?֭÷[m;1^z_F];$ ܻMY#(p(xtGjr4AqI $iӞH$O$xK-Wee`lD PUL6( Bi rOU%in7 x1߯i /\rXj5ʼ3_=TUE,(:۰ơ״(ԧ?V]]] +WBI覯܂O}3o+^|W?| 6lڌ;廐$ sCxb'Xr%~_BV9ADg[+n1;PQUy WKnC8®Ҵk ”عEn X||Wq~so@_߲[j꬙p 5+Wb)̻(i+*+a&y}H{EEEXvf8OuIra婧bC*)1 %nJ|.,~?eزlz.>^rQy-O?N*nLGFڷOufEQt}1A`ƃۮFv8P13܏ˮ~p$>A%( B"HuPV^ACd"a  @@XH8i$WRZ[IQTUW,nfHKh Kǟ@%)x4==ʾ'tVTVM؈AD''!^  Xt 4m#[;ZSm 3yQTUŒeX^D ~579I@YN"p\pQUS[?oٟ> /$.ݾg}6KҮuQw+;v!_'6߄(쪫=DFс'O#ŗ] .+Wj˺(A~+㇐BQUe .r;~SY# a;oc;oǥ۷cyvB#eބa,Xn]λÎgq}}];,Nw~#Їtg2}W]G@K Ҩ\=lۦۚ;[n.[Hˣ*:ɧ7u]]o[n3\@U,\_g~-ʽ>?ۋkOhk[pƧ">G}uLw߅^z6nBG}Գ& $aG7#M_z.5=ÇO?p,fZ (,"pb\uɫF{K ~x޽_ڛkXz((tM@pU$ kX֭u7}w'z֛ޮ.z vm+'1A Ej<ӸwD>7pΡ2|UUwkv44blt$v[#~K/nݖpUEUM :MIi@suς2r2X4v¢0 qq)oY3C@XA݅1[% " $`ζ6͍܇Q_ /x,N aI&`}[uw ,D2˽^TX ('`!pU׭gA$H40to7Az˛qιͨ«/KMUU$6v:;?[:Z[C9s\qgQRZju>&#|uy3.5ز,Y,e,uϜxxBptTolYW߁}D44wߕvk>q)JJK } 'ccכobeYsӱhRx>C<k/oHD / ]BFRm }EUUvu /o^/WeUTL{"ˈxcH$`.BiY)**+QUSuuEYy9$ \U-ė$ 7>vnX"YZ&ܞ)Ug6LmL1>e' JWp0$`H! + $A˦AIci*7l3 vN@ ! C@  A8p0$`?eT_NIENDB`photoqt-2.5/img/filetypes/sun.ico000644 001750 001750 00000022707 14134304241 017475 0ustar00luspiluspi000000 000000  %PNG  IHDR\rf%xIDATxwxչ3EUo.L30&:ƦPB HK p !!pC H!$W lcS;ջեU[i̜zeKHݙ)yw4{vw̼w l>HƐ! C@6 l AG ._v1]r6AD`َ 9v1K/|$7(I $a&%! C@6 l A1$acHƐ!  L$cl9D YCKae N. . NALHTB1H}Cb$@XCQO lDA'Ã\orrqgB"%$ c p=>tuchxaY&C%0#DnVJ򋑗 QI]!HYߋ6 #S|~?mCRn ҢIO%, @00hhAw_/dE |rOoƠ( z0Y4.q"4 z}kmįc aIBSG p2x3$I C !$1t.r9$f(:zP{A)uPR~7amHT;C}[#rL>-#èi?06փ  C?[ :cBCkr8݇$1 M-ތ1 =M!, 00tz3k42\sA0p=mꫧ`86laH&cL?>;ЇA? `BR]}݆MFؐL@iaG5~Bz)H$ p샬nʔ0p!BE d Cn*En c pP ?[ZZ{H&  E+,-1 v܍`(X  RK$Y95-unE]kifff`’d* 7͌%^~lFD@#Hù!S6kZEAeS5F#!T4TC0,1t2Z6]Է5f@0F;Y`0_ 6V#$H a"b^NTW&08DkUwcmn*0m=hlo6y2"$rMձN0уX!l9*i0+$r9LP[Q\k76F`rcy3<1*c>$ 8D=Yn*A@7:u M1Gpl}+Lc yrnlKG-͵F4w¡6` !9=fz}9s#+n&?#:+@ܐLDq^*NQ-c,qƚ׃C 8`88 0,s|x پx9 @LAӍE3 sܘY4ݐm,rcޣ#()0Uvftd{ ׮DCIrC s+9GanfMKwS4!jmnd6C9 GVsgtuiۉ,̝1NљC Q˯QI#9@nsg):"sx3=?x2 !0A!p`δYX8{>IwPN 6$ q{`<,=98Z P9A@Q^!+;egpXʏ-B9ؘ#n@8"yٹ׍H^6rpGX.Y(/B^V.DQU? c  +Q_ ӕo8H$2Uwbz4?G P1Qr:q{ܬxܙm?VD(0]}ݨ;Ԁkc $9(EnV.dYFX %(@D8..8EGd0Ȍ1Τ,RTҒX& D; ppgR%TRFsXz)q =ԙT~vaL4A@}+C@- A rGA@N۬7^"9  +G,5塜XH}wsor! t#߄F9Ð*oPN$.$S7PNqHwkE_켞 9ZTMG*Rt7ZUMv^Oќ0"L,b F&B(lub4o=  `D   ƨD~oM IcTo"-'@@$-;H07^  ,D* -0k5"Z~%sX~!A³"!T5'#t%jMd9k$ ̖x9,g[~!5s$D|X/  Tco"X5'@@Jx-HTa5oB\N6C 2'0UX/cryik *ZJʖx tY#'`CmK=[ "n [쁎^Xќ0ۉ5PHW ubW>%)M44vC4'`,}Fccg^cN47@}Eih`M+,-$aO~t@$q om4I ;Y~e4'`,}V+4iedYƮ谨;QhAPf,)1jCy1`;ƀд'RslhM,'1 `W^+0vV9\Ζx1{NRyhj/:! {k!s{?7̜((@KgkBkQd+Y~g4'le1ƶfT4V% W-] 71f,!1bw~HIrg!$QӝdX~f]Og9rYCݳF.,* 7̸ )G{ofQp>Ӿ≇Pw]@Rќ$g萏 ,R@}eWFsfXO0QG)o<7 M76WC̒0i,mQo^a3'`J$ {'%W]xĚvaY0T4U)&wЇ,d&˯!'`*'pBvarDB>z va|d՝ќ1$1!|!=؅?6]XQTWw0 5U.Nڅoj1z?Z|hב溊F,dMF Z ^TS嗮)è9=B>z G aɱW"oʉ'Pi +"c!]` 46Vz݆ZO )y{H.L_` U!=md5cs߆#!=) hzW],HN JFC>GX>مk<0(|L:0Pe0c A  1Ң!+WŠ,F9 QB>zP8V0Y~M$'З֜@Z{E2+#v]i.,0*ɮc"vՅSgZ~khҝH[0jGTHY,!9C>z ԧ0Y~Gr)f A* ל+'r0UGcRR],C t-;Ouaќ@SH5.],' DƮ Œ1R_Kʜ@J@$ڏN'BŠZTR"Mhh7GkՅ?J.L_둪Ŋ!{M؅CY>tuhp$ǣ!בhu?Yik9E$8Q[A!-eՇ )@B#7)OJ@S@4EN D!H?Z1!?|"hKƄ|辟 N4'zGV! $*J>a& Cf @LP)C&ќ@L'`cG3fNC)zBFeT4V$.*HLUa)H1lDAN>>:; HْA 'C@6 l A1$acb<232@60#.;q 7A[ x_?5vvT:cNZ|2xV>Áҷg.(Lkp0ʾO Ɛ! C@6 lLRk10A]WQȲ EQ Em8c%O~VߡLU2'!DA@XفjTTD8Y1v#/7JJP6{ŧ攡L/"5阒$!<D wFB5#=&PR8 552EQ.8΄U!Q?ЏmoǚkhlnP̿e`Zq .X3N[s-NBQaA"˪3_|e:?X܃JE<쟞,˸+pߘ g~W׭uCVWE/7 [oM}<-GA$Y›o oyۖpQG]C=6:^/-8\x1X O8 n;chmoލmNN@D|؈sc,*V1Ҍmor.ڏ@?~El|sS܃2~?vم J<TuRAeG,z\JıgEwޏŽ 8H@wv ]> ` ?;aP `cCRYEzRfq6kh!@Gx8xŗ_JwSlGEU% HSoO(ؽw~o!+8Մan FFFCo&@$z ۱qKC0Ahji}_߾(/uPE Q\TO\՟Z㥿mC `'vz~m#N3q(w:l%AAImљ@t?tnfKxgn{]; CGv`u u1s\aɉ{*I՟e{llSaYaznt p1Fsۂ|,Z\I|FgE=^z ׿Bcs#14CC$UX}].\.aD|ٜ2Joo7yu`s(*մc p80tքRQ5  8DQTwNws-(˛v|#:ˍ|U>`˶ENI +2N=T ? ! QpΑeoljw߉^3~8D A"p\\I7&ttvq8DN9ykjkp׽_ }O$9pcά~~ }{Bˆɡ^:X o}O稨,p8hVEQ0o18Ly(šuk51$e] ;? {pƊX; ::!HĪիBFEL7յ :;n2 GSK3^xϸ+}@(@ 'C쌳p'LVl; h5{zbrf`0{G*tǭX5t?;Q\TUt#Iw5}4s7vnVu38ԙ1/] ?߽w>ڵjI?|Igxdkֿ7_9kx $Uc:NÈmq9]jȜ$ ͨ BG-H'IMvs#.NmND<4̱0$)Be\|ErAǫ#JBO9IVWt朣.< چu @#?/U b2!  B*~Uzfa%MZe]ع{`AХ3 ‚uO1Gfffݴw?> 71%$Beq8g ?B0I;oC>\բ#Θt9GqQ TT/nmkLByfdfT<^uq)(H9{\淡(&OcAUuss&MqΑ3fH W`@,1olBSsSmrP:c&onEQpsp]n1EeV|GDeu%cI (>ܳKg͚t9ŢTukMсg9V2Mo4qE=v`nRz W=8*_/":/~;pєp8pi~<݇I;c )Zr|QQU귝x rsR2WXܜ\ݿ.q }x7FC! DA- ~xmZU7}tx S^E-iUu~ع> pݯ/;@˃A}c~_ b驧%`1QR\Y184u3lX:siKQ6,̛;\vtv<,攡 Ccs⺒/gqVʖ#''Wom~i @صw7v <dee!,KD_?`\vݸ?Efff̺wVcq-ۃޞgW]y5sԘ*t $WPCeu%jj ϻ\pA( . -b, KFQ\\ R (YrTMoos&t:_ ,Lˊ!F(bjH>O˽e^n1}qe,[Pėn7]wceEYKT$&`P\j(Y~Sܰ2q| >uk([wכ6VL~g6`(/9raŗg/~LHQ9½_O8auz4|G="Mf.xEJo}ҙ_|6 [oE]}=3N_W_/]WCE|s/>{%5XO._v,=5b5(A3`ܵ{EuM5;;088@00En,Lñ SN9˖ODvvha->yxᶛnŖm[WZ[144`01Nx<^L+)pβqܱv!rBk3B"Gq Kۍ8o#qβiyhidb| |,NavY  =h@Oo@e8Nd3|L/bv TP(_hkoCwo!pfzӦc(*(^@ x$&.jEmp3|;L]j>ȕEő>c"<2Se& (*,BIq N>i$Pj(Psv AFJG{iE]b< l A1$acH| p0rq1@ (ta]A1$acHƐ! C@6:AҭIENDB`photoqt-2.5/img/filetypes/svgz.ico000644 001750 001750 00000012346 14134304247 017665 0ustar00luspiluspi000000 000000  PNG  IHDRyIDATx]{Gy{콟IǙCt[e*Bဝ`p*b")m`bRQ $T~ww:ۻݙ333Wl׿z`+X vV -{6plPuQkDj;vwkO^;xmvk8En`"S4AB  !!`qX/T|)! () 4r|>!c5΂Fry}-3K2GV[e'`yr]|?" d ~O {Z$Bi#[]'sGuL;%1+t2oy8Om 5ϵ9'(ֹn-^ۓtpxe|!up xs&C(Nl^uc e[Ki{ta m^˓8 Ҽf $^@0`ܲuIi$JgrF).@Ђ[b@Nldso/Ewmatlxe xy Cnظd2J[0=@x a 89 ˈp9-a6qxf bfǴDiT@5m>Q5<|M@v(&XŷG*9pPj [ M HI+y+4* wrxnN#$7Rd]($e~ <#%-WJI0[0$̥sHi'ka9=64$50IW ! ݼdQ~- fHI,}sh3M- 3s;@FtPSMD LI|OO@$PWJuht>.B0$,asӹ2\'HѲm/Tp"k$ck0" #F$1I_I0s$/$1I[LIIWLI0k%_0'ZX%)xy̚I;xI0wp`? f~ l%0gX"Z8/,`!6E̘MI+,` $1{{ lIG&g0;xȴe[$qȎ$p<8zoH05sx4fuXd#PYI.xo#MY,  !-H0SeI`BIM%=ܐ/x+XMJ[Ո<s! fJ` TD{KNHi]V l04 :N$ؼ2kxj$ bҬfIX7N9$Β$o#c'&+2s/V!̊$zi<>f ۜk ,.xl.M`%5zdìf'v 6?qT]'v 6ow5"x'$qK+h$,Og$WX@gZn$J "yVb`J oUN LY): dx5N MW$/<+3MKfC.“`Ƹp yĮ`m<3 dhR,7H0k s dxF'v3W<@pbH0Ӻ\ȸm;[$u=$ j9GyOq3W+ OG##$A^K _Į`uVFs߾^pH 'zsa7I0k㹟5y@rqbwI0s< |9.`%Anx%lj&90\78$Xۊ 'ƫ@W6OY% r`IV`;$^.IMEփٵrb96! $93<ϝplrHs,K C3ȝ&:N]$1sI`- dXQv"'غ&ؓ@Uqb`fJ`o# f0&d%94 'V4DӁ24>3f" p&*p&Z'%%3MY38@lqm'{ 8@WzB% \`ƌ$A6 poy` + # xGg`Fk}K`$1KU \$}S[' حpȧ 6W$%` t%Y^ ȟ- T%_$?-KPܐ@4VP&8UgpHGCSnxk V`QNѿL{>~uH-O< 5,{fӴdj} Nxm9,˒Q9CcɒDQ @Bzvp0:B {w7`ru]o]R BB hR#a ?V)7^c+G/%{ \WAN? 6jݷoW7<^쯅/3 iImj_?^寿bO>^p;jkQkxoob?ߐ< 0OMHFI椮Y.ZΜ.t5{0/u: ^~%Ih::S] aly`q kZseav*8I]@4Ow$eJq3Jq.w_v@s@GSЮf|vzQau=ȚR<>Wq=L0ZOPDZ;{v}5rq EW@ |{YwՇ=c09BLBbQ'\RsܼG`|VFbe; o9g~Xd/P?ThDJ]|އE*ەbf3 /O]N`򍝾`cD)vO9]~ Rf{Oac6J3gc͒R,|na1prN)Ve3"~aW(t7TPA7%O{f%} TjK=JqpI):3@郻+]>@ ԕUAGIMRWbSrpatHүRJ+a>E*ERgzz>@|DCUOg܎u3z`L)v)XU:,#m_\iiRH2w(hoء/?xɸhZ\_)ӽtfO}*U)F2IpX",)WY@1Aލp>{>RL1:[NB8ѫ|ysih(^bh)q5 6|gAw8qaajdtaUFy%TPICmZ$%?w`[xau| lح@TOzb50G >'#?E4hO !m8ZͳVȞj}C!3_c&2:6Y-;' lj<s.S kńbZL KGS\2:S pLB- "R/p^vyL)K&ń[ۙ!$U []#42ڳSx{4bmE3D(w}W^.Gvh3zڴ+hGHYLfƈ'7 g{iM^Srú5eJ9u\! HKJ:3[Jd4>pXCsQog$tvwYbҭty퓌TPZ#KK;[sK=7]T$PR['4WdCx Zjd1{BB6Ů)jp$蟜~m(CTE[4@ΌpXq'Hzu \7@d yiyJdtu`\,hZU# вnmgzd !;hy':{{Okc.~6P`;A*q^gVFF{^WݙޑoV?v[X!,>} ?A|۽VE2Fd lWH.U߼K= `ym}i@ZSHڝ5wf}Ā:}֟P?s{ bc{{`pETZH+E)*Tv-)I׳I_|~ P";t+P(m<ܵ0irF3~tH8 9=ݨ%MP}١F`! e70n(`i6l =Xa(|w >ńW1rSW7:']>aPu߫2|j&_+'\eP -@FUm.ۗgV6$ 7V.?喿֮F*o^{c8.!}n鮖cHa-x2,j*BnX@\uyuvjviW545c"!:E!9"p˵[5B Wq-vk+^} n-T{f+^"ڃ`+X ?ܺ 8WIENDB`photoqt-2.5/img/filetypes/ppm.ico000644 001750 001750 00000010263 14134304213 017455 0ustar00luspiluspi000000 000000  PNG  IHDRydIDATx][lWĎ'iȅ4qRRڢBUZQTDSPKD*Ry\!(H**mHImǩw;ƻwg^Ι=3sΙvdٳg͙;? $H Akdc֓fԱTZ翋[Ʈ/if:JZԑD Q5 j$D@Ը ЃWdžˢQ0 5 Bi]5 !@aR ZF/|֠+Fn^ohnHŕl̅IJ, sֆ[ZV&MB{95NKX0k#̎ =QL!4;Zpo?2l0=Hr#"de,W$;W4Nfnox-\3ٸM,Mm Щ%q{ P97$+ZM$|icv `, 5u @OkNY pzxl$n(X j=, @kjZ\!721B&4fѻS@*,C(gr]-p2=M̌cwat 9?~TUV%s&KA@J`C3LuD;ֵ?"N %@iqزO!O&YŸ́KwE0J%@noɚΓCSirtm:]މr` j{$PWL$ cߙ~OH4.8ReΖ9z] \a54VtUJ6/qv5ڀ@(jk[9Jc AE5yZz <̄>a b<1 P,A| `%/|ĖWl/` Jfĕwl,AL cB崉1%l$ص`YxP6Q2,A< ( vGYX'YL Y8/q$@@Đ %" ~`,AoX ,V'ōq@=q(nKCČbNT-Av('ŋI4D1q(^H` VH`jk Df N9PM\w+@ L[VL@* nf&(Xca-٠(:-2d2ۍ.[UHk~$E0 iKJ@x, j-*辂 "iKFۈv!.!Me-jwyd+2"Jr@||iSAHk]rJM1?#CbV vL(@SN``B@z仂hbT'e v_c$&Ij%&{eM,!K {h22o&F`$,$JKOqjIr\[F&2xTM vop^#dQA#`–@?+};L,@K Ig``@|ﭕjbdl% ϿqY)e[JNc`&1K Jhb|4Mh-hVj0_3ZK HyY|_t8l_f0 CB[ nՋB8AeD4qX"i%!6uٿs%}-7dpзHh"9%'qA/D0%%q姉C, y>(,w=p"ňƗ g`K+#X0,c!`ޖQ ć8q"%$; $qE,Ɖ,,R[?w"9%zSѬ v&%p' d뚸"HD0VZ2,wD , w-G 8^a =zghۜw g`*B%p >+,喀!@qh3l-C,fs-l O8-At W"  O8,E@(`-[TwShNE@or-]Qǐ A & lqBڰBHNv`>266LZĚ8eH:uQ?GiTkQR4V vFh~)I4-i@MgUDju{WC`N ݷ8Zz66n߶U7%Oi}ۿq?D+bsvہ?z͋bGo~9+Cئ: f/sKȳ9\EO I?/b(;__wG^bgb󤣝LZi{x+)0NVxИ ZNv>ji}k}˚u/5jB>jߚoEt/TZt] _ÓɳtZ[g\g),}i]3fPyg+@͂v묽]슊ogn?-ևo'م'Y/9 z[S74s<x%AIomgs2rt oT1zhPȟ6b+J9k6c6u6 Ħ .[ZO i#jPo/+ڻ Z^~cn:]~TC&TTY4im4 mN/CQJ?Jkfk[+%;(>:/]:DxJG^%<]zZTN/Tu&b!HH y o,K7;yd$) zwQ6/O}?z< ?a7sG'vc}]b<;[rs9j8ɲ>739y?g[LoLJY%P!kwffkJPݢ7|0KkCQjyjK 2'2w=vXQF@"5T_x-G(2&uQ#! FB@D 1,S$8ͶfQ{-D%F$H A חIENDB`photoqt-2.5/img/filetypes/fig.ico000644 001750 001750 00000016674 14134304127 017446 0ustar00luspiluspi000000 000000  PNG  IHDR\rfmIDATx}p$ed&d&lKx\@Ep6m;:8]ض|e B"D(P)Rȗ 0 B $( 0 B $( 0 Bl)0cd%0?EXTP((eȲ U`L 8B!ε@ v0 c,f󘞞C:\@U1G6c PSB4F,Vxuuap(-(P(( J#wN 0Ɩ9!dYX, #JFB<^UbhlB((*Ęv?1F29L&7{J g19ASSM~(*0884E_錯w3@*LmmqYӄ(*09E"1L01ȲId2y|*Da b* fHPP,929E0 ZRP!cc8rdփЮ02@ƀT*Ɍ+Œ)4@C|^F29Uu߰{ vXFKor2COHU(Q,*HҮ~.˪c!ͻ05E>_tzWGQ,A, mdYE:ގ>'lуZ|E{l6j 8C>_̗X8+GmLf>ӻ+K(dO]R˲b2e+ !p(E"1N&86Txa(28rD;𻺒0 1뼸zrEpΐՕq-g100qttqU ( Ibik xke]]I,tv߉qa$O 1 q,f!F29}\q022]T` pS_PnBAFW B:t}QG ?_^LrzWL@ Tz[UrH#_,h4Iǟ1`n1OBǷdGCC^!pec@.WġCÁ(ckDjzrq9s33 M"Qp!"6@1H]1":eYEg0͋P eHhiips(]z[k ,* e4v=>!zK~+={zFO D"!7.}3jJ~G:M}FQt\ﺳl{{q_(>#(8N8](]5:+J~,DH}FP!P_I' vV!NjAM?tZoҴ'`?E+uO:ijj#! aCkF'1|rW3ƍ}3o>( jmaӦ6wnn ?~ߊ~; BP(N91p,9($[׌6\Y~ #xQ~|hj"F&6BHGcc=֬iB<^w5Bq:}ֽf5(&'3HfNgwR۶FB<^UbH\]81J~+QX*pǢOJBh}mmq4 cff9! TUwaA|ˆסm~T<:˯ vZ 8I$=E[_PQ,ʐeu#C_|@ J~+=kQ,B`wsH$_C>%vc wz XXL;e9w1(ZO`ifV'p, b9w_OxR %IW Q;QY[kxoO(e(tO@C@,M , fVk'098ğRZOΌY~OOW)v 3k_tw'1%oO PSר PӸA p[ɯQA &qWo%'@@֒JG(HZ[ Ph%k VV;_8g FWJ~+ OTk%Fh }'@@*N{R~ J~=POMzPôߔ'K~* OP;۳'@@ ~ɯQ~ 1_V¯}D7!_'PW@o} ƀ|7ovcɯQ~L(OaRj~.5o "p($#a׮>k@*~.,O,8:+۳K9׈RC|Rݻ߻. :;MW Bo'ecb"ً1sIn |#OU{&|[] |1 Ocعs ^o%'`aff{$P,*FKKY}|ps/VNg簯Gũ|==#(,dcRwK>C%+!ya=O@&107WĮ]~,_+xe=O@wwl8_0Z } &aG*8^_ Sɯ'xg1Qz\M7p{g&+?a|K+MRɯ'l^/_{O`V0ʅ^npuc/ Sɯ3' z\J~>UM>V`! kST됅>|O\V7X /<ﺻݳ&+ݳ Sɯm=WM>VV.pU0pUc\xU SɯOUg%/ʅ10[\FVم}K%>| Tnnp<cRΝΔ Sɯ9'h kga˅p,cO C]Qɯw8'Hǚ tv#~4J~GQTtv'`{x v Sɯ71ƐJm=c֖ Sɯ'`kxlV. uf[x [.,^OzUZoJ~}>[M>VX(J~G%crDU`T?v X M>xم+cSɯ'`Ye%/(.worawJ~}Ȏ>M>VX(6sZɯ'ճOBr!#~ */0=c %#TsV Al1م7(0-cم.Y~Ɋ> M>VX\f 0%rޑw7* &+:ZBbhH+`3O&ʅwN`j*T*M%fv@&{ʅA + 5" WU*\5ا(hll3O&gp(l  5< 5f'`8ɇtc C, Ut\ j!ݺG*-/j!ĝJyR!nWi@J qJbժ8"vֵWч`Сa45c#@G6!e $( 0 B $Duuz? !r9ds+nS6|LKO%|ᕷ+֮mǹ Y~OB֮}v6B@Q( ]1] !F@HQ`!Vڀ~BKNQj0.<BsI9Bj~ 2TUE.w$I\W Ot0AOOJM (BfjlڴށM6$Q@9z{܅Y=*ؼ,sϝD"+gWW/1;y?nV#9(~~AP(VY6n<_W_}.p (V@m9,^}Pułm?3x7^ߙrQ?x >_xH BLO`νعs/}Ilz>nq5WB` ` $ɱ\k3O3#?>9lʾesxko+ދnz&*-lq c{e~%E/xC8S(A@9P-f|Kǖ-կޅ]>-ro~{rݸ7K/<m{wٱ+b99uGqNZWt|1\o#+kY[Ql|m XNQQyIpx:!/XԲw⋷BUHR1t}85tn0c ZTO\^&&tmyYQ{PTIlvtƔ$qD"ܳj@#eWOc(46?*rEYg y`H&Gt FuXnO޷7PTP(Zi&˲Vbеm}}--6p'!*gtm[WWXamJSWf~' b)EQu@}}; =% aӦFk}5Z b)!y}}EwG(dJIUZ[[Ss92̣ ӭX"ITLt}9A@rz\Wt/VD2~2pSs*Tsx<IU,|!?puHry_= *ࡇڳ@4ECC7WISf+HEPpgqis Kchnnҵm6;W@cXzm,RU c(֬YpBqrM}<9npe,xۇ~B@,%ڵhhhd8z9/?y<g*t޽eE=0 VXJUѱAvKѧL,WW矣k (c-ӵsXپR= b9EQq9gcwڇg_W_k{EQv R܆ >J|j46umӇ;NPXJvq F.UU.D nx͝G籯sz X*ҔO>,rcL+OŢ'^}2MW_}.<]%BGq۱c+Mz'?klܸQBTUX,`t4^؁}:g4 cxx޿afFUNXR׶--֭[t@\5x1}CG'u ,˘‘#H$i Pxv =Qz!jk#݆~~bb Sعs#׏h JUUqƩ/#9;G@l*>_ՔVaH%$[>o|օ4o"BD"av͸n^Y'.B1B೟ݎ3< e'K$\t/C"0A !MD8fli߷mۊxO7w8V}}[lkի4eR(*֮m]w}\~mcVs ke ۶]`A( o* ^-abb sssQWW&lx2.p R\phnnT %!ں 5ڤF#@[[UKˈb Kqe `dd CCIajjss5MMhkkźuhk[Xq:uX5h?{OQlڴ–ݾO+_a% jX`!F@HQ`ep B$ Z\koG?)Q!sڛec%X , $( 0 B $( 0 BmoIENDB`photoqt-2.5/img/filetypes/kra.ico000644 001750 001750 00000023631 14134304155 017446 0ustar00luspiluspi000000 000000  'PNG  IHDR\rf'JIDATxix՝S]ݭ]-K}7 ,as LXb!!r0 ra!˄!sm !a[M^V/UudYt:9u}a8%B+@D  C@6 l A1$acD]JJFP}` b9UX\z]%)DF/\Q K WG4@6 l A1$acHƐ! C@6 l/d% 0p+2d)),!7[D  a $zYB`؇a !~Ȳ(6c +-HʁӝH1ȡ @%pnS9,K>x{HA|dd9$DB! ba/4zm㌖CFv.g!=+''J0$1 O/"' w93 ?  ĉ a_xO?dIB_G >/,+-$ JX{o{= .t4@B5~cl7dw) &}nkJڈ!8CWs=~h$@ * A=MC$W!󠧵 J!REBo{K5ЛG#ɮ D`98;yLW/ZD@ 0ӡi}uCA tnu O/zG C0^|EL_GܐLc ~ߐy{oh` 5!, $pɮ*P~Ga?H&A%|^KXm:m D UgJC0  Xf,YH}cpwF& -FZFjGcȌH${Z> ,+=Ӱ+#w ,EZV6Rr|0t6SN@ ȞY !{5B9C1p. /1$`;B?('pQ0o /qe(9dMǬe1kH7E$7Z rIj|dd;O_(ΡceY9Ȟ0#uzcF9Ȟ1oqL @pDΌdMG`؇a ^BaȲ(cN'\tge#=+Nwz}8) bhyj&u@/8 8pY, B dY[[ G=fq+.o7V#`63IA7#7.7Dwڔ6>|6)ᜀ Xj=[M&CEoo/imHCP[א:PN4He_cA9 &lmO7('p*$DBd> 0XE91H F '0 FWa_CG  & ;zkT==6OaYZ89'@@J-w4'`ј",,r2'eQ fƂgN sY~`Ϝ fXNo ?&F#9FH17  NV9".`;H7H_01o ;@*H8f#s Ŋh9I $DԄ-͖F}֦ Q2jI^q" `9 Io,pў9B;3E, \Nv`{g"v7k\N>Bj*5e~@HEoԌ (ёF"zڛxPJxIeob4'Е9{]u>@?l, R Hy`a G\k B (*X~!H_1! c1& muɮ9iMg^'Pc@J ,Ih< `?Rk t6ZGLZ~SVpN*pncXi)_cj9kB>P\6D4We`Om)m[~[#V X||vQo5Y~ub,'`,)$<4Ȱ]x M-s Y~Ut4֠*xp B R.lʯX!'`)&䓘 I 06]Fs& XFb $)`&˯1pV_9s7OBvaC8'0`ڜE`\ N YNk, ̴ +䓈z-g&˯8'`j`W'!],9KuIL5e>iBVŌ9 @B> "vS-gbٲI 6MNt`X'7d5ᜀ զOT`t' puapN JB>Ƅ|IV&˯0KNT01 ap :L`\%'`OB-5ɷ +3.f $ k&˯1CN wE;XQp}d5? $Y 0&`( vaZ$vg5䓘s5.L_̜@R!4Z z$+'`X$Cd" . ̨]!vaZ8+-1t5[*%`څu^],f,'`089j)&څkd4'sƤJ |uM:ju E_cdN% M$EՅiȜ!Xv|tGՅzHݒ!.`t7ZI˯Mv€@ C> !J_ΩHs5v $vaڅDt[|tFd '#+v ͨgՅk;93$ Wd445.LڎpN*]ЧR'!0Xqvk? I $\}a0Y~9`,sBA?`.| |CXgȨ]H9 K U8VK!`LPw&b,'N K!@C~9&  )'|!dGN j s?A$xs[q8D!01 ő$1x(C%֜O64Rȇ Lɩ9ʩ @x'!s2'OD тFGϑ )`dYFGC5rCt5yFTDd)Dg mUCñk aC衞 l A1$acHƐQgd --^`ǰlznm d9]k HW^܉g~Tr0k[)m H(Q/Vs,S ,cLB4 H6 l A1$ac0UѲRx}Q,4Ղ,hƅ^.6H& IXwb$IB CS(B(``8D(BGl KRx Etp܆3U ?E7~ .+`!g۞tZ>d]x ==cs8x`sR=dBfVrssQ0k6_Eh!gv"1xQ-+"E1ᕗvmC0>Ҙ•<2܄%u(5M_E !B„ 7@oOϵ67ί/,Z4)#C0Ƙ=^wtkj9x?Yg;i}G^U[|Eoĭ[y(BPq`?\Wg!jCgGjyQo| W^}mR{69kk'][n^B' dO P^Zvc~k7݊_;F8߼.7uc }=8t`_L_CC[u,JU,Io>rBVV^s}mAP[]>_SUzMaBW,7^dzOBvx1w|Nj57e鳽=ݨ8F1@@= gH|NnpY_w'(QV 9 %Xz A@kK3(&جߜnGg{4eß:6]zq< Ύv=\9V؇ޞϜi&3Ccǰ[6l+< |y'?gcs@P}8z+xoiv(FG{_h1AcG2eA)McC=j+QPXhѓG9 ?W_~AS. 24q9!#N'\.h!|-z}h82m㹢|oID_Kڥ:$:p8{۞DH3K#LM&.6_I|_qU5?<:% WmFnn^r{kWHtp#[|ؤߙrΑkt3nmV(JlZPuxr,ź 1o@g{fN0A@OwA8vD(o/^c}`Ū((,T7fk 8|:#[f- ga5˵#R:C(?_4}K7ߎ/uVsa|M-$IBY鞈QQn\.7֮x@%&Tc¼K3ؤ_~t95kc=Me+V@ V)FVvvJx8Jv0K࣏cμyGH$3bjl u5/ZsA$-\sF,_u8Zz3a'*Ł 8X_Ǿ=4}?17)#3Ϝr GZ99Pg+"C 4 @AFG_E\s1GR G4]|%Ϙ1v|9 gaђ2h[ZP ^o/%%Pz`0T}<~TH]ppU Ji7Yn=nu*.^]e%{e]q% Atb՚Ec/{yIѲh{Cț>#҂ǎF,rQv=& mT]HAtuv`yd =_|e% F?biV~g~&8Al0j~L,^9NJU7-[PyDadzZn:+;p3~\钘_eʲݐȏ /AADJQ̝UAa[jIW@{>W]m^3i1w|q9W㬳Ezzz0//S-x-233OkB.VZC*+,-Ezz: `|>/v< Zt8'cO.t 21 :VW+^aG%B wQ4:'YPg~FSO1[~O [}7)0C7_yXjuXf-223#G*:'2:rqϷO,P- _Խă?PSUwCAVy 0h!h`c .S iЁ[7/p\|xO~@^װkw'!p\cڷ?Rq6'OrFc ==0߇m?a`b-|^ۋ<$E|>-_o m-?( ^.*_PЀg/o3aY)xwt?| .ʘzTAPSuMe_rh5w3#@,YP8kvݺ,c՚b\w͚>/&g*((g/\ _ ]~%!#|1QV(y @\]/4(Xl9nvMil/<,(Z= gxqsj :p,btwz5YĈ(SP1\ӭXrcWPq`R+,smUS=?|?Q;zm47֣"1~n]Q,(ZoSSс(Apíw`e?^ܱG\QP^Z՛=z_V6;$ T?w%e( .u7j,41x/ tZ3BW̞3ݹ߻g~x񙳑wW xP_W\ K;c%!;''b]؀?g<,[i8;1;rm(Zk2 @QWn%-٭Zo>|ᓂ`%|ݗmO/ݽ }.ƈuÇKnيVT1c߽/\G{+9K$c#@#fՈ;ێ2adz$mAK\wM;oj@ wlGJIB(+٭릥cg!==(pg^`0=O (J 4߳72c(2._+VS=ߝ18*Κ%V(8X]yӦ~ q$9MÖw*B!|WhoK6(oU/ O9bu5UhPSe+Vbfaa=(_E <xewkoDzF'9rF< hX.w~3 5k[GF,7ݶ*ke^k~( 8‹5/+ٍ}&Pg`Uqt8XvǫN MC8&N'nNA=>}:++7ݶ4PϡGF.ìsM`.(R47#eNAQ]>7$ _Qtt*+WwjkT ?+pݧ 7G8\bVn=2x ,?nUkz?y9o߇ڪJe ?&$\4ͺsOG0vÆV8Wb4 DIENUEQ?ۆGnrɮ6o/pߋ5Y6UZ7! l A1$acHƐQ} (DEQCe)?KzJBػSrN@ R C@6 l A1$acHdQSa|IENDB`photoqt-2.5/img/filetypes/mpc.ico000644 001750 001750 00000022071 14134304164 017445 0ustar00luspiluspi000000 000000  #$PNG  IHDR\rf#IDATxytWVuKZ͒,[ĎmBa ``fpwBG$3<^8dL !qVlI.n-%Yյ>շ~֭w < AX Ax0$aHÐ! #`ubk!fu[ c_CO]Nؾ5Ώ@U H @/BӠ* 4 ri < Ax0$aHÐ! C@ < AxV`H[%jA`4 U@d*i:\e>d\`0` `&@26T䐂B@C$4dxE!f!hW ِ,fCe8 8nA0SIub0݈OO:jf'HK2ʂf51`|Tcb B=硩Be`!XWUϏJG9Wd;߭-#22kDLHA`%A{`՚Jo4.B$PYSof.˶o^,cC`ycN1>K'NN(Z~?ٜ@wr$D[^ Eawo䩜 QN拗r$D8[^ W#Leg p((K,.m7ܞp/G'Z~bNÑ&=y8rPks$DY~\{U\  90'@@%BB œ !0odsӮ xN`,s1X~ #!Aש#rhnœ g@h*IWxq7b.'0掜7~M06Ћnp.!8ҩwfyfo!)'z`!@ycщ1;MQn7ܴQf z%?cP?[L[s{^Ȯ'@U?tdiƇ#K->U&!!p:ׅpՓWSU?Zwx/s1wJ`ar, 4m0ƐIsFEo!8=':`!F߹PY~ӓseTeC>@u]xI_ 8`=G (8TĔ '~1d- NYO0ׅpUqģ}24`fkN 8J g\aB`ģU~`.'qN1PHȧTq], py$ṗ||J 9)" B>vxLu]xq"@_sa`]OQ!R+k>80Y~M9[ c qB>%id{̕20Sf:.|BNŎ9 @B>%!vK-m[zY%ۅk t&'`;0-SvgRiuaڃlN Po-)EQV&˯l`>3mNȧ\ ۨ0Y~m]r'r wavQ Y~]riV|J.iBd#v X.v d !'`YQJ>N`.c],꜀PJ>N1va:sv Xͷ 9XD)Ac$0Y~U9!!Rb&˯*'`8*c0svڅ\s1@06㨐_C|z.lpua:7b' 5.,Fh.I"N;`]xY~9S@Uwvȧ$ U*̜)0ׅp!10Y~݇Y9- vy˯"#.yNdڐO `#).|FX% qsȧkhK(?S _jٍ:'`Y㥐O)o&˯W(eNPd`V&˯w(eN8_bhL=+V&˯ ϐ&BS1ѐO) w-S]zlN PO S)Sc耪z9'PPȧγڅm %!s'I_ N Bl2L_ctN@.!9p`CU[3nhAX9`>Ca9tlȧB>a#c%1(CМN6Qȇ lɥ9J>g)C6bN ?HN'`xdk%c$bUU1ۉ2]T%CUg0TTנD tSO < Ax0$aHABp HRH&nSGp]wCU[ $!|_^uм{Asj Cew-˵TU0A8Ƙh < Ax0$aH6ɧR!ER򭩨3(R̀s]AӲO4Mc$I\ݎABӨH( z뫋VYkT B1U;x&A&.h8c`Ad/ہ8,Dsy&B(4NtwubccP2 g(/Z6`֭ض}'6nD5K, ,$WxWzjs9O0IpøE&hll=ݏiKrI?}?f c YQU]ں:߀6bӖX҂55d҉8B`wxO !L|,XSSm;vn-o|3ۆ@`Chx/zA{{{LWxg³׽u-HV>p!C Ú55кč7߂_s!(pI@?ɏtu˻*cx ^w3>{,`<{Μ:Zb D9_{$ Xu Ad;щcG?|7u{w߁uE-HaPU~ |/ı{r"'~g_ ")@(#_iaxpNqqG~/{iC27>7ih'rCP$_9h XܢBCOc xw/ ԔՇ9H=V_dn!೟߂0Ɛd<}6"cGҽ:c S8j(1|sBA"yW(ij!$C+8ƅi8gO׼'8p)|Q(-N<14@, W0XƖ ط NUM L`jrcEzFj}wزm.!`!J; z/Y1lܴ{vaF>h}=8{$^m?IKk'A`}8׎NIC;ѮzP[nmvO_Wy6]B?tZ9L=X47V|硟#_iVȲR(P@j\{ }_3;v"$y >޳2K}089<}KohɌBEBhEQ9o={ճ %I3n _7p}f@+`W}Q[WM  =PUf+`hhpїŖlu4.h7݆N#!\^+D۲`-y?)PU ||[ظy+4 - 4M۰~CFGB8{%R$^~e**̻!qkoе}"*e&+.1\nͷ 7Cn Ǯ+,yMQ9G(43l+2Rϴ m߹b24iv9GwW':ν؉wQ`!$滗 O~?\kǎT8GSZ]]}.uV!BqTU1:qкqwJ @iۏ%Ձl]pΎo޺mŌģ5DZ3'W n}GHn O4MmѲ~Ò&"8v1D8KcϾ6TVUٺL&t- _D".nZm?Br $y"/ˇAQ %svJ]V348L&wI}>2dazjÃ>wPW`  .?p1Da>yb]5uص{\d2xE_6uu+Ӝ!jJEwYQrH do )rWM`ƍIΎsx^g5Xش1H8DiYHb&o$E 4 w^Ʀe,]Wޱ$YFG?(/o`E%c9?I#@P&Ԍ]S\ $cmS# qoBcS4M{$$?gf011vS+nU^}ms(8_`0[;.؋{uff.Djk/+)bdx%ӤHcxM7-9ʥiZ}_я}|n_v]$Ȳ**QQY*+*93rBC]}***uz.\]&AP$5߀~t,_ײoKB6b*F hR;;!H  :v)|<Nb!|o+>Z7\ٜwuv m;lݹܕsDvdum;ƉcP$&LsmtE~$fR)zHS4 Ccc38{arZUHS4 g~]ۏG?fff꼌1iLNLX4 nyuwx<% h_} O@h{1$i!po[tmEq߽>4$I-1pIBǫ'>>Ec1r. aa-x[ߡ==5?D*/kX $IB$|cS!h`hLD }]xG08Я=}wxꗏzD}Z`CQ$q ?'^9jzE'B@ln߫'J&᷿%ֵ֍,`?&"aQǟCx?k̑dۃa:Bhhlj=hݸxTUU\}oh9 Mpމ{ L a9x{./g*1,$![߈_jj ?c Ӗ, UBalY9 r.yImشe+=u7[ZgEe%^s ܗoz[U,1,\_XqoH9޻pફ2:,*QJ%aMhxM73޷|v i$Iu7܄+:;pgq8ގDec˖m8p5ƛw~A4ۋ̢iۆmsl&oz[n_m&'4\y9?OJ|UU!I.۵w}CD0:Hh0b(ҙtS ZmjB44Ed4>uJ#aWK$mlDSs3?0]AKk! AVJn44 H < Ax0$ar>X$AvgtZrmp?_Mh=!#/1v Ax C@ < Ax0$aHޟ)ɋIENDB`photoqt-2.5/img/filetypes/rla.ico000644 001750 001750 00000020523 14134304230 017436 0ustar00luspiluspi000000 000000  =!PNG  IHDR\rf!IDATx{p}=;@< ((>rdb+ӴNrdَʎmŮXvŶR}r%\KII~W%UV\A$ cݙcD;33}Pzg{fv3A p! C@> | A1V?#Pu%B' ٛw~<$[E_dCdpm11$cHǐ! C@> | A1$c4D~0liIV [j̑NH$$Ip0&DQ@0("!A a'$& I 瓘^@"4$IpZ6c CQ ˋQQQ @'x|XRr18$t:$b(-娬,E @B@X @0v''D17gk)N˘E<>RWЧJx` Oax8dY}lEYD]]PTa:$9#\j1H8صk JK$$E8Tj MM(& L@Fg18jcn.q.݄!c@<>pxRwb~>E"@ 7p8f$I1ӴH+?$H[&FƦ ]d1 K sD_M$2D B2)!8o=L;n{ ؀)]Ѭ$Nˈs$u$ :00;SSH&Ӆ RHցsyȲRkp,$ I $& p.Yo @pj_B2vtU1?tEo%_hj!XC2v͖,I ] Qik@2):`R)U]jIRN֦l%sw <]S1 0055AwwG0;@"`$9\sc( zzư 0% Xcŭ[˦ C8< m0ԽUg=HwpR2F;a50bUj1;b"iD"kMƦqVzyBKϭJI9͛۵ 8B'Kۋ ]`֭bĆ61LOϣoSg7m$ӠB"X!)Rb07` urwɈN- j QLOkcb7o m$[ڛ'*Byy0;qݟ8")}8/s4΁RBEi7D"i1KQZ!H6(2G0:v˯!@z!΁29P]i_jomwr!B($ʑ.`0JG(Y~s9F"A9d! 丧l}}ʼkA`H4E۷ov̫@_WWY誘jZ 4@MAY`v[΁vAQ7~:1mr]d1Ν[PT$D8JKhjuLo$_X~sr!0@mm9v'yٳ3F,ƏM9{a&եطh*-9r ȁR_rQr!46Vc߾:t*,ƿrz ]7y߳g+JLcnn~p܄*TT,W/[~1 46nD^lHrs-Gee)9bH$K+TPQQ-[ʗH. c xn\l)G0H@]]jj0?fg$PC SRDEE **JPRRZd,U~fuNm ,tZ$)K EUљ,3m۪Q^^B" [ (.|Ֆ_;MހU,ŨOt_kgf[~B  a f[~sn;i(X a)+߈#('nHk6x$ea͵^P! ,cI r+;o(u(to%˴ a:fkW=՜3{)v@@YEOOķ Rho. a*N94bHSp(~ &,o.1'@@S-r$D8 ~ yZ~[WN ;h˯Qax9"gb5'0 3nAO w5\zN 큲97@@F\i5J&'z3'@@b;٧x9'@@_x9'@@1x ^ ū9 ,+k\rƀd2{1:h^ŋ9,stvch(Tjl50 D?@@@"˗7$;9 c ,] v$]9C<-+g{һʏ:b-t5,@d\:ɹu^]]#Pr+(^O3X֛Wtt=?Z~<)1Nƍa9hkp}w\g<'1,ʕ0iY(f+A$^}=j5sTJ•+a{S,U~9O h^F|2cHnO1Ҹ|ًvaZ[pD4C>f#޳ Zܐp|F ;;oy.L_kqCN5T'0c s]8pzN5k 8]{ Z~#d\!|vaڋsB>Vkeuawمk/N 8Z Xd- N 8VXAf w؅[8pXnt]X}$oX 8>qX.bu=8g? ]!+ՅWaGم,vḣV&˯pJNQg'7څ0Y~Sr#;Յ ;K_ℜ@ |܀du6N \1]0va:B *N X Oadu Lu'ۺzdu D朁Q֏Ɠ}Ȳs [B>V`],1X,a{NvpSl2 [k&˯;'`1c6V.bV&n Xڅ9Y~] "nXuM̴ 9z;sB>VbhUY~=9[+!Y r{ؕTVB>`Յs= X&N dV2lV-d v,/|`.=d/C$I&1@]]%JKyYP>2SA,5~cfN 'OaFbK0/'`X(CǬaA830,! It c CC!'.u |Z) 3zz4@Q(CN'לph(J ,+`˖ B!͛ڄAeO}w`  A1$cHǐ$ _ZFSO$z ܂(oG?ih۶z47$I>' t""m{KV9dY,S cLצ4H> | A1$cЫ+*X뭧9YҪKB2iO^b(1<-(%7$H&PcwtJ&Lg(" ڮ6$z0Yƀ@@m!TTc*466`׮ػw7v؆͛!Ȳ9bqދYnSwæMzz20;~]ȸwE(*)U0 ۯVSPUU;=9}Aز&^c 1-e3.! aXlR熆F3Oc߾&( Yau= 2b8b8:ꫯĉc©SAY٦n`C<^]0&ύEщڿqh@,.&;//Eߟ#NV"Nrvq!J~/}0qҕ>BfffiתPz`h2 \Vq$yqFu)$ wo_ia||1$s8Rr[nèZNB Iq><uG4:c CCø~;k}p1ڵ=kN,Jل(x{N9Ҕ@\|Y;v[q睇ŵk7ܑ#wf3ڗ|4:˗1@W&8ztZluum$)]?~aP\BseYAKN'$6 ~*^zVa|\}RgGZZ0 jbt@`1IV}N~(+apz7klGSQE8p`nݒs'? Af$IBWW/kݻw΁/j]~l^B9woSMM͠cW>v9~wOq1?Hd]hmmG8|K1c{=; Șt{kg7˜F(Ds5O@ Ǐh.~ ccQl@Ơ,+@(Faԩ?66ol+W:g-W[Yx98| ԌMЀNٱK?ge--ݻ [׈(عvE;wbj `3P[bއ'c1]ccӦ3!sTVVლ;wss())!!LEE9|~sO>|?6atwi;~Ȇxnn%?@Hl&G?112)tul1ҥ+YUUODsQH$k42 w󿰰'T*z;vm; kcؿG$Y1<EqɴÑL lO<?o2ug?{Чb Ϸ!;''xl@"CVIEN=_.jkk49?`b^ @KK+R)W e<|IW켉7e1\z ցo[@`!O?$xེ?_{? 0\zÅ7z cMhc5--<MZUgo\ƍnƛ[n088Ͳ۷ow7t|EhoXrW^VX(x{u-y/CS7nT]E4,} _ڗu-WmʙFFA}v4t(s3y\4]]=x7xõNv\-1+))ƽޅt[s?J骇 <|O}}֌0K5oꖗB8;͛46ЮAWPԧC[['^Ư ??l 9|~} > }}8th?j ?E;ԴK3eՃ!;vV?~3vK3O޽Mxᅿgl%ʼnPZZl_J?~D[[WP;v4OgznI׭^\L 8qX]sQq=5?( Ξ^Oc}U̙_oA06ŕ+4m]87㜣N].]dpߝbE=U^j&n,{>44|Dww+E * c uDžϜ%z{ ܹXXX,{Qpgf@ϻ,.\\uWyEQp^|U+WcH$STTn[DQĽޥkҊdR{v?@PO> 44*̯\%c CCԞغu @38aTWWilLi%tA6',+΃8yt3H2±z嫚{m[}uWvifpxWހ @ V9G0X/|3xᇲv'c뮣9?DQğg | A1$cHrNTJTIENDB`photoqt-2.5/img/filetypes/art.ico000644 001750 001750 00000021431 14134304052 017447 0ustar00luspiluspi000000 000000  #PNG  IHDR\rf"IDATx{tWvoɖlǎwl dȃ $$e0gw,&'3Æa'H@r$a˖zޒVKjԯGe˖ݷ~֭w \ u$bHŐ! C@. \Wރ?:q亯A3߷/_MNSn?q+>?$INAB@d.@$H2 A EўAp1$bHŐ! C@. \ Ap1V`"3cI_Jaq)h<G\( =y!ϗ  a&$$KX/c!Dpy hq9EQ،1xy> P^\2sNB@ @00,B+!eIm1lv $Kq,W00<%eZ%x<$DV!HY1BeuOmLcz~syTV`{M=KrU C Nav!YՁtdEAWa[M=>ĉ04,c`|e0$Lai%vD00XVFIqހ20S_BT2ol %S?p6$:``181ӻgdrx}cX Ѐ!Y0bXNc K+! .s@I029^u-0fa.dB8$00a.࿚I,,/^$!b|nBW}ucl`f1@pKTHMIq,ZڋA kCjeWuK"PH  B`~i"+Ia(!BEX d K+\wC "-H1hEQJC~(™lH Fʦs181  Z[;I5GLC`E3yg^[]]gzUݍ1IN)gsq"$˷Չxz-\j5ܻA^i+$Po+<>ǔ eaxr 3 ]n3ZVOl 5$TA^mN"x'0H=#~ߟ Y@lEiQI 9ʋ˜300>C8ƥȲـ`c,UU壴 ˯_k8˳A!!JJQ\Xd!PYZޮ/|h?©:@ʐlBׇ-5lGkafa[ &TT!*QV\jՖt1R |l.?/j,ٷT{PN ud-ը.Uv[uJJ,ׯtXcR@/bW !P]^\w߉ Cf3H  J Ѱm7|y9ݚ[}:Q]y|i !a *iv%'0F@@]pk ǗBwEQAQN(X~A X Hڪ-ط}y$7؇"gbM)'ZvGIai'Wuyڏ2G\dM$iPUZC{j 8Y!|^/vQ\`dt,|!H"ܰc܇0T9j*qhA +?ҷ G݂ukT#,!BM+CyI9V֠1W1M+-). `kr- @SukQSQ2BAFP庁{(%e(/)CQ~!8Wo+6۝k3Y \M f A!,#.vE>yl냘-dMpQchrdӓe{1Pw*s N{?G c g&9Хy2ưll{ Džt{Nqb(=Iq]'/g u]X%t"'o:q? d`Pʚ]mB{yv )ZN`#}uȇgAq9S B^W:d5ZN V6 ds:UqtY~ .9[!V˲  _m˪i?[ $Ihw`vqΔ+j;.L߬`l)#~ MXG`id&ovCNVJ'pqAvaf;l#|'؅c'oY ' ,] [ۅEA7Y~su! 'Յ%YBY~- iN N>v@ ϬV6.N:'3ê!lppifaڇ\r"Vd;wucЄd ~v% ̨.L_{`R],gďŐy9SGB>ـ3@0;Յkor#'`5 8W m&˯1{?S`N>:9a]1UufLIہkaduaEQCU~9SgďI|&Q]\va:rY=[1u'Q]8f dMqLӲ K3,GaFN +gC>@]U B+qȊ!V  Q:l ?k!.|&Q]X]巏WF4 9CJ@ 599g!'`,Ival'`9 ۅ>rC'`HOv`wd],s cX(]Tp'ƦU0Y~ݍ9`-n˝|j K Y%˯1:'k!9"MG&EqAQF31D(>LX$@Z#7餐piOPMcFR>(CǨ@J.L!%FRu!' Q증|.$r'KܸA؉ts;$')B>ai h:Fm^'aadYF[+ /_gDS\D\UACP*qf{e=An Ő! C@. \ AM@QQ @6H+++Ii '?g#BS۵ xÓh{}=;Abo5i " ˴A/cH. \ Ap1$b2@5I)fd:zH2@$DSGaAa"#Z8zz1!lazr|uO, @p//|}9} O|pࡌ~"/=塴Ǯ;aރ-[Q%M1`~co.,y0Dܜ @#ag?řƔ^>Çg|20:6yߒbcpB=ozzdh3[nt"`pqy|]R~mcK:%62B,BgpދW0<:OJ.`݌:@k9GGg&&'R~mky,0 !O| <WmwB4e-Mi-  k+]h'>/͖'b0\ZBKٴ^k8_sZ-Gd @p14<ޞߣ H$_%m?>a|~ot`bj_efQCH<Ǚƌ]CgW'i0y;p)X c~a@4Դ]ws[ lW\,e%%(--$ A1͢|veGˆ6^$Dhli{u)~oŷz/ԫa,\ o\K?G$Ls''{ L?}1W*^ዚM#O9(>*+t$)9GCI۽{F;zi>ׂP(O9|\Y(+-þwOFa(xPnE]m2PYQmuUJ ժ6gBž79,KKq<}z1<:b"zot'<$gsw KzKxTP!D-@$ѴVVTԉqȱgvR B?]<1Р+9,SFGvwq1|Mɲ3-M,VmYQ>tu +$:ᜣR'ǒ;|0pIs_Գt!ԕ{'G"41$:Qg4<~a_ޤmgV팵<C(B󹖤튋qQ5_R&mZ-OeENPEEAFӝݶzk E(z ܘRUlCh9]nJC9.azf:i7Ė-k:ih̴encuco^kuG$inc(,(޽L\( ~KX 5VUVMiX㬳01/sI|>8vWC!**qӍ A+0϶ܟo;<N}7Ɛh9G@? yyy8yg4mr֦Ҍqx<1羃?1>=zxCf600= IӀ۶ ǏCaa!R`^xl:@,}hЊK];6@h,Fw>ҒWCE(ؿo?j&&q71+ Mgt1_j6-@8瘚F[G{v17z ~@802:]yYنEE8qge=}]4wt sX 'NcٵgA9ljAOoC8u%UUصs'r7ߊB`cX^^FSKfCjӼMoDuU77hm;7Wx=^-˟"n9f0n@j>-N;醓`Ƕhݐ=8ܸi1ƢO}3CTIǡl195]aA!N?s~c B|{ff- @v|˟GM73!C'UϿ}W79:fC#CA}]^WP⒔LO|?|y4p$⢮|0 P(ֳ0/%xV++h9w/EtǿGXb0 c`h$U}EcKk Pw~]wC_gW4c)qmoDZZ170;:;0>9a dY$Id $AQɧ[ߪ}~o~Ekb1inU8::;Ld,cDg,TAp ηcZM{.2nV>_f5pۃᡜiWY9{QfHtu@'@-gZ{{0<2lUVQӀGxHWߟy /U8z p pXs(.*O!??z0026ffgp u~~9$mF̳;eeDƐ\l{qSz$z~c&1(3͍6V_{q5<`chwsttmo>q3lAAA uձzٜqxtC^CGnKK@UUt${_!p)Ͷ ZZϚgGxu:f)< *q qװvJY=o:yZշ ɲcG{߫M㗿zf6*3oͶ'O{[Qt!mվ¶wcrjCCMufh,: 0w0U847i^Wk EmpucdȲS'nƻy7K,zjl[YQG;pZ:@$AYlWކj_~oc.@Afۆ{g%o>k ۻm(x˛o=wCW3-x՗h`3h`X-\l{1TWd~SnBZͶ]]5]PKGQR\>羃l HT?14|>_FZB[G{Nކ;n͍+4 ?RsLLM?P^VGe}BY,LәM!tgYI)>ȣ(((l ffg2y)9!O~htS@Ue OE4YՒ^Wyx+_O2!pCI$CV}]xꉯc^Q4砅|ߟ`u7> qqx⫏㋟B]mcL-Pd"puMlgg7JsAz$W];j9I)B"+f>f}/Ր! C@. \ Aǀsa'^]qz=OpA9^o:N Hs5p1$bHŐ! C@. \]y&$IENDB`photoqt-2.5/img/filetypes/xcf.ico000644 001750 001750 00000022360 14134304270 017445 0ustar00luspiluspi000000 000000  $PNG  IHDR\rf$IDATxyսgzva5*^@4*!F#..@4Fט>oLn޼>}57qCq%ʢl޳o=K0LUuWw<::u; AD=H! C@  A8ZϚKf̀.@VA>>xo=j;Uqs"B#.IH]1E9E?i  A8p0$`H! C@  A8U+0  AYB`0 !!98`Ab .YGeH"A@d`b'Fw((hQEB۵c% YA׋"y$IV{H$)D==h Gi@ (  -(ÄBAfFDZ!H0=DcW}}~a'6(h $?JJPfT C @o$PF}kn@{ (b#4  :zzPֆH$1uØ:~<=PHt EIKDb1TZ\0U@| Q __F7$`8:rw8҂WHH$%A 1Qnnb4ՕC!l (0m:zzLݍ)B0 }Mh bh2ց``=) @gO )A0EAk `5Ha`!ׇ^>gWo/l aQHA^(Xj G@r iNe. ` j853Ö mQo<$Ca ^VbxĜ̶*cl H,f!usDlSN'BjifT| u([bB/1tlj?"0!"l9967!Bb p46 H@Ck cnkCO Ieadb(NE|kR1eR#Ѱ1_W $݅v 0x\.KX.IfU#458!Ff`(B "Cj [}(Cm{;o=Ees/X. FmKfE"8Ԥ`pKK`Flfw$ xCkWS3h}]M7$gv07Rő`! PKH.`1%(E^N_@I^rlA#PҌxss5 LutC0YƄBS0eM~ZjՃnHF@WP|1*l7.L9B˅I˅S^Z~ۓ>F9 `|a!)[^\QojDNr!P%I2nL506?e%%>C %} @ǃÓePm%JY~B9}.J3neC<JKM3I-dH̺ AiQN0!# ''OhY=_ݟ8D9UHtRZT'ND~c16.or_O9-$|R^BHS !e?vl'$cH >>}DL3cWX2nZ~r4'Ipe@+-,DI^:zz S@1I(B1,(/ QB҄c:a#L Ev ]{ˊ0=0C!B!QD\oe< ǃbE^/<H!:?om:Z7sAimw&MEjHH B ^E H,HNCv_wrr-IAW 3Cߏ-!p njAk $$Ɛr!yÎAOy'ܒ-@S#fO=I4x/Ach41TRN`($DFbo7c  N,z! J:-@  ^l8`H oE98$DȔW/8 R ('}=l5kJ a8U~3nSG$U73G'@@J-  _8y?0bMHC0W/N `2o281'@@Y-ɜr$Dʘ @cr$DJ|QH`-zqRNHo{pJNHXp  jNH +Z~ℜ +[~ 4'@@d(1iNЇ ,zsNЌ],`ל !'1m oծr/6La*Ǝ9"4ԣ ;kjl*U~3ќ@-Gp[ K}}^Ue ta*'hENCs">lCKjkP.]8xN `1p;kjFcI |>'X~9[ @LQum-ڃa^ >mm# 'Y~b@SjFy૚4ID˯^찟-1_WT1lpPhM'`;`;ԋ55bf~ˎjΝɖ_X='`+`OZ}USP?:;Çv p{}>4t&WNb ͨlvnU~3sČƔn\uhEcL Xaj `#W5Pxj1 @4Îj1Sh_%X.'`y`"쨩AO8lHe 3:Y~SÊ9 "v7ԣmSKb -]"tJ԰ZN0iiIM0z}i'Y~Sj9 ѐOxoZv6kA;GUrcC>Ѵ_d+ x|1P$5X@uY~ӀUrB>F o], 9K @b !t 1dM/V XF!OvafDNǤ9KѐOO:d !,!|p0h9HX~k̜0IqsF"a5䔝0sN|m@' ؅kS],hN\!A!t`dT9 @B>*Յ]9rHkB> n6ouaa` SW֐O:;`{I  ̑0CgovԘ.L_s!1VsL%xuSمk>̒0d#$مkN̒0d;=& sq,f d] $ ٱ 3,f dUR ؅1EkjȪC> 1.vakzȚ]im8d'PWP/a?Y~-A6sY!ZS|rPd d\T|ҁypd& d\!!Ɉ],&9 C>Fs.l|uaZ dj1|pT !p,&Q_"S9@ȧڒ!t]f oY~-O$ 2"!|ҁ00Y~C&s|)؅U~:kr U1oۅU~#J,ۧCDri|va}}d/@sZsi|`k_9hZsicՅ4څkҝ0\|̵UWU]&˯sHgNPH|rPhvmUUf %˯cHgN0OB>F o.L_'a xudusF'`0GZIU&˯sIHYB>uc`3Y~JD16'ɧ:~Cpۅ;{z :sT>l|@.EH!($&(/.FǓU8|2G|)(`bdN )Ov#%-1tRȇ Q9]0򩥐Ad9.AxN!需fH$(C!19lN@0?SC!0!T/ATrADN@OD Xގ$  S/&sEEȑ$L _Uv"(B Lc |5T2;0A  A8p0$`H^xssi ,Co(4j;U[q 7@ad Oo؀?NU&O'  \ᇪTs(P CNDI!M! C@  A8Z( fom10IspΡa,CRp]&9:ZoPH r Bvuq2rrr 9WY 648\]Fttv7, ?ƍÔ'M2xC4E$Fqvf@$~|eyv\Q0{ï?I$?t]]$I.\`AJO_YDk^زu+WVQ &ܜL,-ř^N?6nA29[nŋ2y}x}mߏK?ߟ7/)uͪmgy&:1!ΝxYhnm=}0jPSW6N27^s .).V=>|>|I\1w.e9D.õW_ 5kЙ~l,/67'y'4))$ ]uߎ/TZ v㍪m(V]z]" I^ۼojcbՊ(,(VxS' $I%KpƩo4w.I؈?Y<,:\x$IBχUϲs! @09<Mk_|u תmgL;-˥o1^ᇱ㏳w! @09]/DmχkתȒo@ϫ%I]ފ'{ hJh2S\V۶˯.ĕ8\Gx|:T֪E睇V{$I)'sfISY={PyMۍ@Ðee4!:x;;~꺺Q۾u+^޴ +,2HcHE:U_ϝ&$ $2+w!#IKKx"|y83ucƦwǃ?rssu6)SY y^/W[QB`RY]zE|gdY6lݻU?w̙XdIRC^a}ڏ;}7Ǝ0ҥ:e W[8j|ն XSDصw/\^3. w~;pBmЭZ p9礜B1fDy诧oJL7Noy?4T'Vx}0رCS[׋/\'0-$P̞[~cն@x!M32n̘&c~K3M3Tp$e?Y3OWm[U[  ګK.Or84iL>L;fÉH49Ӧn3d}Ipw 7WcGGSgͲLI,Ƙa!#koO>I&ui)O|i(bƴiX =pXD2 ?n[۾ AOޡ}ySx眣Q𿨰'Zb%K .9nFdRZpα`誫_,_)ӟsMmK*祅_LGt"Ž˗cry_6gJCFq=82$I( aLq1V\9MOSۂ|u! @H7ߌsfs.А1(y'T+9Hs&M;OS ._Gz\# +W0+$Iڇ#lظ`صi Jb߆ IT936oƛgXRZHd8F724+,> Bxt\r0n\JBȒ`OO0fyǃ|CJQ;tC $:IHE:43϶m_?yg+. g{{Fy]WD8aF@'$a[oawpgc)ݘ$XS[ `0%%7))YfXM@824IPwIDveU3t'CGWT뺫ƕe0Us'}饤֩()*¬|GSz|甎# PAb /PɓO;XD^gރZv\s5#( 7;0d2JnYQ$ UXv%7ߌ3N=16ۏUu}BٳQVZG}7}7IDk{Wm{άY: iHq#>?t/ *cԩ8s4WCI/Aʲ}C,xzն,_'O>9Ǣ+s~GgW@߯CyUW|_<jt$IcXӟ͛0 $Co(?YƖ F(%@aAVo;~o{xp٧3.V?>߾zC@pe%~Uk^ZMIo6Q櫸hJ?M^Ǟ|r G"x'11\sN@ pM7aݚ+mc쫬E/Q\X H4n쫬ěgjk! chik#Um?Ĝ .ӹ\.uxpj۾km؀y} .˛6ak '2y24 ŅBu>}>Mׂ$C`W_'_|)SpmvL-à ;Z CK[|s@2a%n$OvRV,YSgIp窶mhzJwPQ\zx{h'B$b3êm=,,[X}0Ū+i&|駺cҥw$ !Ȳ϶m/67'._Iee zpqyXxm~q"ƍ z\*". Ox] $f92}>W׋?SL9T,nMwTS6Η#mC/Z`H! C@Fu@$0 B0KSy~ɗ_»vmV HYɗ_Sua_h  A8p0$`H! tekIENDB`photoqt-2.5/img/filetypes/im1.ico000644 001750 001750 00000022707 14134304242 017357 0ustar00luspiluspi000000 000000  %PNG  IHDR\rf%xIDATxwxչ3EUo.L30&:ƦPB HK p !!pC H!$W lcS;ջեU[i̜zeKHݙ)yw4{vw̼w l>HƐ! C@6 l AG ._v1]r6AD`َ 9v1K/|$7(I $a&%! C@6 l A1$acHƐ!  L$cl9D YCKae N. . NALHTB1H}Cb$@XCQO lDA'Ã\orrqgB"%$ c p=>tuchxaY&C%0#DnVJ򋑗 QI]!HYߋ6 #S|~?mCRn ҢIO%, @00hhAw_/dE |rOoƠ( z0Y4.q"4 z}kmįc aIBSG p2x3$I C !$1t.r9$f(:zP{A)uPR~7amHT;C}[#rL>-#èi?06փ  C?[ :cBCkr8݇$1 M-ތ1 =M!, 00tz3k42\sA0p=mꫧ`86laH&cL?>;ЇA? `BR]}݆MFؐL@iaG5~Bz)H$ p샬nʔ0p!BE d Cn*En c pP ?[ZZ{H&  E+,-1 v܍`(X  RK$Y95-unE]kifff`’d* 7͌%^~lFD@#Hù!S6kZEAeS5F#!T4TC0,1t2Z6]Է5f@0F;Y`0_ 6V#$H a"b^NTW&08DkUwcmn*0m=hlo6y2"$rMձN0уX!l9*i0+$r9LP[Q\k76F`rcy3<1*c>$ 8D=Yn*A@7:u M1Gpl}+Lc yrnlKG-͵F4w¡6` !9=fz}9s#+n&?#:+@ܐLDq^*NQ-c,qƚ׃C 8`88 0,s|x پx9 @LAӍE3 sܘY4ݐm,rcޣ#()0Uvftd{ ׮DCIrC s+9GanfMKwS4!jmnd6C9 GVsgtuiۉ,̝1NљC Q˯QI#9@nsg):"sx3=?x2 !0A!p`δYX8{>IwPN 6$ q{`<,=98Z P9A@Q^!+;egpXʏ-B9ؘ#n@8"yٹ׍H^6rpGX.Y(/B^V.DQU? c  +Q_ ӕo8H$2Uwbz4?G P1Qr:q{ܬxܙm?VD(0]}ݨ;Ԁkc $9(EnV.dYFX %(@D8..8EGd0Ȍ1Τ,RTҒX& D; ppgR%TRFsXz)q =ԙT~vaL4A@}+C@- A rGA@N۬7^"9  +G,5塜XH}wsor! t#߄F9Ð*oPN$.$S7PNqHwkE_켞 9ZTMG*Rt7ZUMv^Oќ0"L,b F&B(lub4o=  `D   ƨD~oM IcTo"-'@@$-;H07^  ,D* -0k5"Z~%sX~!A³"!T5'#t%jMd9k$ ̖x9,g[~!5s$D|X/  Tco"X5'@@Jx-HTa5oB\N6C 2'0UX/cryik *ZJʖx tY#'`CmK=[ "n [쁎^Xќ0ۉ5PHW ubW>%)M44vC4'`,}Fccg^cN47@}Eih`M+,-$aO~t@$q om4I ;Y~e4'`,}V+4iedYƮ谨;QhAPf,)1jCy1`;ƀд'RslhM,'1 `W^+0vV9\Ζx1{NRyhj/:! {k!s{?7̜((@KgkBkQd+Y~g4'le1ƶfT4V% W-] 71f,!1bw~HIrg!$QӝdX~f]Og9rYCݳF.,* 7̸ )G{ofQp>Ӿ≇Pw]@Rќ$g萏 ,R@}eWFsfXO0QG)o<7 M76WC̒0i,mQo^a3'`J$ {'%W]xĚvaY0T4U)&wЇ,d&˯!'`*'pBvarDB>z va|d՝ќ1$1!|!=؅?6]XQTWw0 5U.Nڅoj1z?Z|hב溊F,dMF Z ^TS嗮)è9=B>z G aɱW"oʉ'Pi +"c!]` 46Vz݆ZO )y{H.L_` U!=md5cs߆#!=) hzW],HN JFC>GX>مk<0(|L:0Pe0c A  1Ң!+WŠ,F9 QB>zP8V0Y~M$'З֜@Z{E2+#v]i.,0*ɮc"vՅSgZ~khҝH[0jGTHY,!9C>z ԧ0Y~Gr)f A* ל+'r0UGcRR],C t-;Ouaќ@SH5.],' DƮ Œ1R_Kʜ@J@$ڏN'BŠZTR"Mhh7GkՅ?J.L_둪Ŋ!{M؅CY>tuhp$ǣ!בhu?Yik9E$8Q[A!-eՇ )@B#7)OJ@S@4EN D!H?Z1!?|"hKƄ|辟 N4'zGV! $*J>a& Cf @LP)C&ќ@L'`cG3fNC)zBFeT4V$.*HLUa)H1lDAN>>:; HْA 'C@6 l A1$acb<232@60#.;q 7A[ x_?5vvT:cNZ|2xV>Áҷg.(Lkp0ʾO Ɛ! C@6 lLRk10A]WQȲ EQ Em8c%O~VߡLU2'!DA@XفjTTD8Y1v#/7JJP6{ŧ攡L/"5阒$!<D wFB5#=&PR8 552EQ.8΄U!Q?ЏmoǚkhlnP̿e`Zq .X3N[s-NBQaA"˪3_|e:?X܃JE<쟞,˸+pߘ g~W׭uCVWE/7 [oM}<-GA$Y›o oyۖpQG]C=6:^/-8\x1X O8 n;chmoލmNN@D|؈sc,*V1Ҍmor.ڏ@?~El|sS܃2~?vم J<TuRAeG,z\JıgEwޏŽ 8H@wv ]> ` ?;aP `cCRYEzRfq6kh!@Gx8xŗ_JwSlGEU% HSoO(ؽw~o!+8Մan FFFCo&@$z ۱qKC0Ahji}_߾(/uPE Q\TO\՟Z㥿mC `'vz~m#N3q(w:l%AAImљ@t?tnfKxgn{]; CGv`u u1s\aɉ{*I՟e{llSaYaznt p1Fsۂ|,Z\I|FgE=^z ׿Bcs#14CC$UX}].\.aD|ٜ2Joo7yu`s(*մc p80tքRQ5  8DQTwNws-(˛v|#:ˍ|U>`˶ENI +2N=T ? ! QpΑeoljw߉^3~8D A"p\\I7&ttvq8DN9ykjkp׽_ }O$9pcά~~ }{Bˆɡ^:X o}O稨,p8hVEQ0o18Ly(šuk51$e] ;? {pƊX; ::!HĪիBFEL7յ :;n2 GSK3^xϸ+}@(@ 'C쌳p'LVl; h5{zbrf`0{G*tǭX5t?;Q\TUt#Iw5}4s7vnVu38ԙ1/] ?߽w>ڵjI?|Igxdkֿ7_9kx $Uc:NÈmq9]jȜ$ ͨ BG-H'IMvs#.NmND<4̱0$)Be\|ErAǫ#JBO9IVWt朣.< چu @#?/U b2!  B*~Uzfa%MZe]ع{`AХ3 ‚uO1Gfffݴw?> 71%$Beq8g ?B0I;oC>\բ#Θt9GqQ TT/nmkLByfdfT<^uq)(H9{\淡(&OcAUuss&MqΑ3fH W`@,1olBSsSmrP:c&onEQpsp]n1EeV|GDeu%cI (>ܳKg͚t9ŢTukMсg9V2Mo4qE=v`nRz W=8*_/":/~;pєp8pi~<݇I;c )Zr|QQU귝x rsR2WXܜ\ݿ.q }x7FC! DA- ~xmZU7}tx S^E-iUu~ع> pݯ/;@˃A}c~_ b驧%`1QR\Y184u3lX:siKQ6,̛;\vtv<,攡 Ccs⺒/gqVʖ#''Wom~i @صw7v <dee!,KD_?`\vݸ?Efff̺wVcq-ۃޞgW]y5sԘ*t $WPCeu%jj ϻ\pA( . -b, KFQ\\ R (YrTMoos&t:_ ,Lˊ!F(bjH>O˽e^n1}qe,[Pėn7]wceEYKT$&`P\j(Y~Sܰ2q| >uk([wכ6VL~g6`(/9raŗg/~LHQ9½_O8auz4|G="Mf.xEJo}ҙ_|6 [oE]}=3N_W_/]WCE|s/>{%5XO._v,=5b5(A3`ܵ{EuM5;;088@00En,Lñ SN9˖ODvvha->yxᶛnŖm[WZ[144`01Nx<^L+)pβqܱv!rBk3B"Gq Kۍ8o#qβiyhidb| |,NavY  =h@Oo@e8Nd3|L/bv TP(_hkoCwo!pfzӦc(*(^@ x$&.jEmp3|;L]j>ȕEő>c"<2Se& (*,BIq N>i$Pj(Psv AFJG{iE]b< l A1$acH| p0rq1@ (ta]A1$acHƐ! C@6:AҭIENDB`photoqt-2.5/img/filetypes/djv.ico000644 001750 001750 00000023740 14134304117 017453 0ustar00luspiluspi000000 000000  'PNG  IHDR\rf'IDATxyt$W}￷ݒoIhvhƎq  c6<6Ab3Cx'&$$$< )(̍"R;AF,0v7?+G8b6ajH«~9, :paHD%C"|O &D'$ ȩ''Swu4<7[& !_@$gg u/Xd cyvF"I8Vfgu78lc;bAC R2AT!O}$ 0QDJ l%ȒT(L3& b3H6@N 'JeD 5\ cH%Hu@"6h%_hj! b[,)ebg c;y<-̄flHjH-R)CXrs. 72 (wh pR2eOksH!,1R?74 F\ eOsnZG,˘D2C! v гE0Z!09^6 .h$W 9|RJ07Пa_fz!Q$:ow  mPcA`Y u<;ٙbqrFyBa K mT"H`nS}ݮsH9! R/s6{{1,NN c %L%|ņJVo([Y!.,. lb3C"Ѐ72H ` fP*= ,-)cHƢ賄lc noUzm>cwPMYF 05,4 [߯U兽Yh?#CBY̲L_/MvTzYQQ[>Jov+ _`38GEm~GJ}/KdY`򛫠 @6dVVoS.]vC}˖uDVM@6)$wuަ&UT_7[('=$ 6jZ®WQ^]ocS{ ,@9 Ps8Q QZen矒7[('$jX}xpQױ]?Rz$hQ(h=°hUX bHM)7C! s'3D =X~e='^N X~s9c%Bu-  4Ao\bNZ~ Hѫ7cX''@@-91HesCfr$Dά[~'muֈb4o6X%'@@,byQPh͖s,H@d-YzN`ޔs=B{ n3H07}6qNPI,`֜ Y~1rYJ Y~s90_N:.E,LtSY~Ƅ9$L?&NDD*^h.V4g?ca5&cXod(" bq$)f悙ryLU_ ęӐS%Vfr>!cI$N,bԽ5Vr9di<fzv&d͖rq0YxƋW$L9zsƂlY ,w=S c 3Ә=͟1d,  {"Ɗ\0zNtCtegN!Lg!`ԉ̮/x [~9 @*ęS./guB `ifz>eao.9'`.3XiҊ1![G1rN46c=7П߅+˘>׃ikڅF Bc1yt߫C* 7 0Y^ş8u6﬌1-h&o~f0pIiԲ], K)''`3}Iȧ-,Y.L_m`X9 F!d՞D lg]4VMh^}Y s} )ϙ !ma!`ej0C>cE2AX b&oA1BNPMȧ j2],9@.!Bc~dj8='``9| 1sՅӖAK CWGsC* '-8&1}t5 _i م[dC2Ϝ@ӐO!w]8U3Y~K^s )H7W3}w%d-z V$a\OXޟTa1 Ud-%z *` 0 S_ݠt'C>g Uo?O0Uz[O@_P䐏Y `dzZO@WPO!`iLב],C/9]euQ],D/9]i1}va=J.z `ǐJ$V¥W!'PBW!)uuaRJ+ycJU],9]iWڸB>˪ gG_㰞)~N$p1s:zuۅkMuabr7%9Յ' |+'PЫŔ!aw'#&˯(VN``ڐOX ;0Y~ c  tl%nkbV2'PJ>F1?n&,bN0u%4jQP]],!+HN@SJ>F`],a-'P |vFvaZB'X9Sمk9 6w*cXtȧld&˯u)zy߭!ˇ| š]xz UY~-9B>g.|$"KK,uNa%#f={0AJ&Il-ZN۝U8B>Ń B >u0Q4c.kΥOi`@bK d}5Qȇ tF9,B>XO KA|P}3ư8a|(P%\ɇ D9E`!]ON@QdIt> BPt&'t(z Ȁ,I@e]=leeT<`)H$L7 N*C'BwK=AX0$aaH!  pp: D2S~w@JQ h<~k) @Ss : AM-ȜCdH&^'M!  C@ , AXAm$v%BZfOybF1Ȳd"$0Q!lD1oH\*RHjp8k9ʒD2X Bz{yx\%eDBQ$IH8& QV(%Apah_^! ˍJ5uuh޲mm֎Tzm6Ȳu\EGTg=;!o/ `lds+9| ޱρ|<*Ch߾cQ3~x|%2wꬄ]E>TU)#`ool6m cT\gWT^v2X\O D"Ql17?6Ce0 :`I@Qjʼnx9xE׆0zlC @H$9?y[/ '{39moOO^cۣmѣ;><@ ܋sd֥p+RN#"Wl[^QpXm$y5k c (++C<ش9c1~"t:8p[ ?|DM]8H&XYZ{z>0^wpk*"I^ƛKU{A0=9{>1,5;F\cn76ar|,c XZ\DCSz _bۆfn֎v28,#s=ۏU/<#GILcs447a{gLcjbM--O` ccUlcn75`G5L!L"JA$pQ7.9!Mr!IdY|IW9r8|XmpyC}}Y00ۋp(@w7\.>&GL% k7hMފ5թi_UUt9-sޞK޳g_v;MUQ^cUnz??{WB8*UXȲνT `*1H8c޽_!Ap{]`bl9Gsk+wTl;62EO՗ |spAm]hjb`!Y׫j_𡯧CV9**+r077QUV#jZ?t$EWmD75(s:Jz{Θf*bˆEa W~yĢьmQDѣ$< uletۧp@B cρVW+;{R*.Lb޷> ::T@Dڰ]m^^+2קmزm pt:ֱ]U{χdzsOUa8p0\nwVKܸDc C"(Cd Y&]F.Ba=wdYFٳM-[б  H)I#!2 A"{ٿǢWv݋:*Z H6!=-LPV0N ۍ b)uI,,u䈪=$Cde⻲!a (.|9;=>201:%ʨhI! :La岌w1c //`_/B%c7-$9 X顲|v9}׮dYF}` hhT_]MH&PҺNg]^+z0¡*݁pY CaWkΆnܓl<>2}}c**+M[ma b 0ݮep@dbds3 `vj 㣣omo)?-sUB}ssX-#/2Mm].@9l6nnf4 8:C` gNPؽo_Q},i @2[[Ѷ}GvPOC9|D9-s`S,,˫][7B Wy%؀X4N {veŘ﬌!""{ bZpQ~K=^%DYCQQYsSo  #1Jd ]Ð DQS'SOjҺ;3V"S=ʊ&V>DUv&+DXHD~B7OzbBV,/-a~v6keYU s3tK`! Tj465m` sMr(./<ZЪ&FGanvVXUM v?S**+QԬ.Ǐge2ZaxqU[^Y"$׷?Tnǫ^z3=eC2=>s=Y /C$3O<}UM-.WFe+ /0~Fnۖuz[Tџbiѯx /S'ۖ9fO1Q!"&&܋oWѹw/ڵأ?#E[VB "~WxᙧUo wy&#oU\(4\zK: v;v߯{jFo~C:: b4K6\L& 116gz ۏqsRnv4dǧ?a?Ż\}1x<^Z_dާfkRfQdlwu(lvu^8x 'I| 7Vˎ0|Ww|;w.FKR`~,## f&'dͽpԟx<_x'7W]{ZQQY AJF151_gc~QV}}PhƼ̂z+,c޽ؾkΞ<~a~wc8 x;ށ:./Iq^xi757܀ C1Da'?l{eN'/!H nF8o|} TUWu+[[ӟl6D#LctxX1Uw%-[A͆,mv?*joɳ(5uuxM7./|?яж pW09>ʺU7dh`Кxn~vʿ`)y5\h޲E5uܷ?yz޿yox[g:B&׾F][߆q[O劻<nǟ~#صWlux%$%PAM]>qϽxaX͋>O:a.ص &Hݥ듼Z@um75O&)aNs+n#׏|W dws pѹY,˨kH iAm}feM]w7?~q׿J!Ámp7o{;:U6'}ى_`x` oWS~]ز5{1pO ;p[ڱAt_s vweKkD#y__Ys~ g8173׶v8[w 0p6)5Gp>C!~/?p?RymEW;wxk_ i0Ȳ-ow߃X4{ p򢺦 GUu5\n7 zJ]4-w[o(N ǟ=g19>bȆ((s:Vek+z5>v eu"YpqB4QsۍG OYмe >rw /<ԓ9u3SHQBUu vlk ]GQ]h0(}oO楤3?|9y܂ T `~p )Fe`Ut*=x^lչD][gyz.yzK$F8\!2cEm}=:tC YX9׹` !  C@ , AXů f4%B'l*]?2E ?b;E' A!  C@ , AX00O4IOIENDB`photoqt-2.5/img/filetypes/cbz.ico000644 001750 001750 00000011204 14134304076 017442 0ustar00luspiluspi000000 000000  nPNG  IHDRy5IDATx]yGw<㙌#'ue+D`p;""HVv7+Z.  v! Bls8D $fxvNx.̛OWwu~_ޫWG~U_Cnu[V]ĭ{}i f BWl + f-$+$n1/N&`׌Aw @JG΀z%?U/ fjLX0IGH݂I B $  _D1ZI;DI0sMI;I0S  NSbM] `S1@M9p(^H`"C@3( b4 f.V;K'I0cjg ,mj 뎘`S˯NA-+`!Ic|{3W#Le$=1-lH2%2x\TԮ: "/ TF@&- T A#H0S$P`Ĥ]zϋ@ %xfz ǗfSYIg7g{ H$w (K>%K4s J{ar@|~qv:P&IIypɸq7' LqR@_z@X&BN2@csʜX&Bd$1{sǕ91 ;#! $κx&H0k@\+q +~@%j8J{ZyƋ 3&, dI g3H"* $`$?Ǩtt $ fLTHPZ,'&6 WN`$xHj$qEL@|23U:K ^\f.“`Ƅ` 5BH1$>A H!%7wB8A@%D8qX$$K6=߹"뾒@<2%4W'Fhcx$uO/WqPI>K녀8a`y?k|@|8q$$qCL/X'35J Mpw}8|l$ $~guI0k^ ) -;Q KxhN~Y: VpChuD`iHK qb'jD! @[WqZ`%/J[s"&X ]$(v$&Xv \`"p` 7I#.8qMI0SQIg 5>kJs<I ^N\klw/ 8@ܛNԚƕJ >8qI0,A5%#`UH 8O8@<ŅH0G8+ #wϟl;FX\e]?p@v$`~IZ$`PZMVu@uh5, h OsJ p Wc%  OsH @(Jw4c=M/P[o>ԭnu[H. +)JyHK7\y]Y4e& r}`2ZQ[BQab:F `\Y5}vh`d2[B֮pugJ|XvdJF՞Qawh=SuiVOvmއ;\'tYw.d{]cCw1NyUlX/+V}ҏ29} RcU|Ч~/rG?:R{pO97ԞE<ٰtjGz/Tq͙&fh(рډc{ll^>9_l PeisOWfk9Dj^ (c%Ӛ޿;!D ')v!)Kץw]Jz gL veæIJu\@Ym_y.+Pk/JJF] LrK4!%vMlw ~ٵij\(IkΥ?z{4yx N6LXkF;xk~Y`kAQ%Q2ܯŹ'ic3F!`S{j^{>խjڙ?IXUXY'.7~5o&߲h+4͙L&ɴ4ؾ<`» `@zkdBznk$: o-o4Z͸(^-;/d_1Yl?F{[Aw Lӳ1*q_z(HR|XiFS%I妇LG _S}>0=q=MO($b&{^~ohvؐ^LS*EW^c&g^4xM.DmTғj߶@+B;,HW­49d4l~%M`)3y/8XGOT?*;F9+ S @ZU V:nEmiکɮwO@[c)l?1+N;c0owo|Oa3kY@?3>Ҁ j{<'ވ ZԣOޯoZǬ p)GoOP7P|lnJ闏?_AA!z~ik9kRc}| =gmT>76i%!.LNک?\RӫfrݡBb _5Z|F޲;cMar|7D1`dHti$d5.ۿ?ho5L-q8M *&",~ͷ/5˯@zw8{~E`Ntx- F !&"<r:{,&m8}k浛w߰6hh+BO?s٢Z7]ƍtT~GGN$[[;;ڛQ]C/+ߑἑД}xqzrfmWnhK֞vXsKcLYpplTP]!kfȵ# Dw(Y=/cOځ@Dm)ySKҀ\Z.$^ڃխnu[ 2@VNO9L ȁbSWZctJ9gr@gOG Pe*9%XPWYUUj͖@/&Aһf#z(x38@8prO.Bq18Ej^uZpzrB2'ЁZo)=Cw$O8饥.)`4HHxqYT/(tF A9\F,]cU~&  -TH,sQvC_ H 6Ӑ2R_;$8% A |0"1֓778tuaFEJn\ Pԣ%0"IK&߰c(oGr巐0Ċg7`1}W@cT-chSNtHK$pHEoNm7[('p&$hiOTHm}sh?Qo@B3 e A@hB>U~ F x˯QW*'`H[pov u@@ZU~ ~$mͥvOP#X~ ao.5'@@,bל s$Du-'@@Q- t&'@@-Y_H=~ = 3T+l#2~-vXJŵ,U~ XN dpQƎ&-hjO2'n1p?< 'mcqLH– XZcFx?E)7W$d{Z[pbvt90Q+d,- Lʊ--#-b,)1tB8ўvzC$ÎfOTņ\0~"C҂x"*0brҌs7[̞0$v/2D` {$dOyT9'`)P@{on5pG;Yo!0sN2Z>ٙ׃d{_v"X$s>9L-!1 `wk d% H`gK2V,ْ L00ñv`0U2ƒv],aƜ@{OOQK` ]",a`4iЦ;:T͉%8L߼1[N0iCX.04k$˯ژ%'`J85&ˊݭ],c) ]GmcbҌ T=ˋ#˯%'`J8AGmRv W[̐0Vg1tX.L_m1CN4 D hՎ] 0r BB>-Y| 0r 0QS巕,9 Z!-Ǝf Ō9ȋSV9C @*Gڅ[S],00F πJ!-0[uaG2'aa@0Y~%0TNkт]ظՅkrѐOIMC>Z;aGA 0LC v.L_c!0f1rB| Y]Pva %z|@0],(9C!-.( t׈a? |@*.]1_8#'䳓 75 Yakh *ɐOaB>Z 0_ kf,Gntpr#錯.\^,!=sXȧՐ!Mv40Y~͇^9 @ʒjȊ.],D@@N#6 >'PP0cGmW&˯@fod' p{/LiU]scd55 DFC>ͦ huOvwfNY~kzb('P 7\d DQS aNUm뱮n*'X16gڅsޗCDr UC>Zp]8}d.ɜ@9M!-oZdN iN@0N>f!U])C0Y~9`,c|BpkdZTTgB>j ԄTP-s |mQ]x$vamr 94ۅk?O@`Nт ׾U -!mhN +#d+1Yݜ@^0OsIuۅ{-HU~9)_N>f etc2Iq: 5OH b?9B_ $1[z91! JFC>! rY |X$s92TB>aRù2|Z(C$ל@Z``)C%@ZPB!08@>N`u  C,&s(,7qYL?apc8щbhiN<@ Jw&8! C@6 l Aؘ> E D0a E"SVy]k_ ,_wsMy\Z>.Y L IǥEQeJu ОE@1$acHƐ! ހVGr\6`b:zNHR?O<G, D(!IɎ@ +ՙ"q ut  "2< \y QW_ſoڔ5 $A$xnyzjhF̘>D19 ܩc&㵷((zPW%眃/\ys栤xtv@L 0p 3pڧ:'۷IByYf54`e .\!P/^|ͺʲP<߼jr2|kpW`֌Y =KFFO$c,nB]mm~R vߏ'6l-[:Ae 646⻏߿6"c8dvܵ~=~KY(عw/ˣbCi3M5]>xw3`1AG} $DNA蜕c:`ܹ(z!1Istt|3;@'p>GY aOC1Qf8Eūoxތڊ> dX lݚъC}=?3HtOxP񠡮^pq1 A7jjsU1njGm;GRN;BEy9ϝWƵkOXSSr_omB$c =<\$quA F#t8|,[w-͟_hnk3T h2EQ |⾇P8|=j8 Y0w.fMN—3gWL8Yvj\reFw|c-O AuUU^b9p!~aVFV89J^\/dt|Ď_<Ģ储qGV{?pRm@41)B0l O~._: v04419qQ[Sʊ>ϛ7㾇'۷sNB1$*0H̨ܘcD(J,8>s}7{/ضkW(XI<А*>^<g{dtBuEŤ nW^z)^睌?3/߿ V_v}˸ Q[] AJl۵KQ$|GK.u/FQ!lٺ5+P[S3=cx֖U[|~xױp|]]u]%%%T/OH򤣫 ]]K` =MuS '39TEsq׭⩧ΩmX }ܦMpõU0{L@ 0$iA4R{"dYFx`;>?zytGIq#N|cz7›g?s5kpǺuXp!DQA؄y38eHoi} 3>o׋VJ+\ VS|}MXS~s/uwbάY4O(s9"yu/+-hU/Ć JttuaOC5E @m(b:׋ou#q + Ξgl|IilT:??p?06>,"0 $DoKVeBQxKJ_/XMGT/S7?+B` ^}:k_ݻʛo?ĉKχ= <sZ!h9dY}pHc`p06UIF׀6AQ$Sd1fSmc:|N_8N aJ8pnBǓx<@p $iQ8ǂsQ?}zc%  QDAc/ޒ/ϴ/;["OZ Wb%!*lHMCw߿]onNT..:Е(6k=  4#9 }7~_'g_96oق`OOc=nA')C?V{]cc{~{A53 I>پ?3556 `!#P|};ڸQkE gQD">ݹ/ƍ]5_">,CSќND"x .]5UUe6 @|m>޶M664`%xwݻ3,]w.\ƙ3QY^WQA@,GOo/>7}o~Ƶ AW\WQ:b]ݭ[֭DvCDQ/ZΛVHÑdg\ oǬ3,=Z$,ի[n1EAHMa@2iC\lcbBC@h **BueeA?/6nĒ h?$( 3xs!lOUe%zlz,_ؐ-Nl.ŲŋƖ>[ݻݍx +w܂ ?IΟ$9ǍkעAJtiک(X}S6T,b36Μ{w[vٿ;Cp !M("aX|9xJ\r%46p@eg p/իVֆL *VH{>e̗ޤ9̛3 >7_="B !<00s:(/+CUEԠޒ8$iovLBA5:fim%wQ0> 5[I^R6r0[1$acHƐ! -(`D D0Ir_};/@ 0(ǠM 51$acHƐ! C@6 l5sNȣp|IENDB`photoqt-2.5/img/filetypes/pef.ico000644 001750 001750 00000007126 14134304203 017436 0ustar00luspiluspi000000 000000  @PNG  IHDRyIDATx]Kl$Gϱ7z7> jw"ECPȅ<QP8$-$Њ 3  E+k/g힮꿧jNvM]}U#G9r8Í=ꎥyeBSwTmMCMGwT7-ݑFNt#'@w; ny]q貨 um6MJ,.ږ$d@8ʮRBXŞRe.@ckЃ+:Nm. RMVu5BLC@}ywrDAKB->!@svDP X_h@?gugZoFO:[:YEt!P_h$5.7FTOవ;תh -,EfM¶iO$"GagU@N9 0!7u+f](ޞi)LT y@niBj#}MM :To0KчS@*,C:MBHs g X*B`m{P`+\ȍ;%[Ң<,,m ;A@K<^C^۸Cg'~`S_~1 Y_˫CE{$:SICEa =19Cb tP pˁ iLKE@qD%3PŴh^`HT#}ұ;'TKF@TE@H 1-t1Iiyp(R֖ІLHlWShs>`Lϡ}~N P',,aR@ϋE~>d ĺ Uɡ29:n-B $!B_P"N '=u@=2T{PJeΖ[G^1cdP+LR񊥻 y+[TSbuu{Q:ӍZkf=D0<%0xa'Xs `%0fa % R XS ,[S ~ Jl/ҮJ@h&8aU3 ǴLJ`&h\%0$̴&녎# Q3&,& Hg $@D3He #@P?GfGf>GfP/2q@p4kn #&X0DʅCf )D "@R3PF -K`"ڻ&KC"p=PK2fٲfR)p- }o`j"IFfhʓ惢fK`} jW];@mt)$E0 iKJ@sy;fe3v#:KҖ@X<vGw@x0<MWJt%JD@cWe&8/U%&WLUf; tbwb% L-YHYy`k<1F#`;)K XTXB('K M{܇qeM,S!K {ho&F`$,$p""ZT\@,-PۍWif#/#@iT3i PymM([| fb0bFS34oTV#`D-jbdB,&L(b@ⷓ"IM]ѪQiX_3z@\q8[)$!f]'X3[xD-Y` *8牳,b-A,U #Gg/YY8,~D;D0s8KME޹8eMB1 BtpD`iXh-ډ6`?b,A4{&nfm bQ@܎5QDDf](5 Z% -K( ,ABiⶊ`&K3m ",tMno 8@܃N[Z)-}Mv} L@j ?zyFfrK"qA'V@fAP, 8 8{,D:)@|6o!-A\,xP-C*P'!.C*P'!.l d&E2%% xJpqDp;Pw=e~?SFuǐ#G9rO vPlyB蕗GW? ku:Gia<^@7rtX9N-jMuPwعfm Qg7>)n2@0~xo_KX2'`n#?n~#4RI*[z.|'" gհF!b^}F^F O#W-^}Nc4 !PB3#8*+n8(+£Y:tzQݝVխ>GTVaIx "w!  C@ , AX0D |Xs%Z P m{vO/.b\q׽\A*l6@@Q(0Q;!  C@ , AX0$aaH!  L c` I5YA5,݅,CD !GPr̛9$n EH1((S~<}^DA@،10In#/b" caAB B" 45($y%(B^I $ UeFD%v }i+G"C~i)JjW\#%L @*0zَ[3EtIԢdHv!H1vw!kh}XBSHvcr81DaTZ Wq1dJ{#]Yb~z'ل!PcOH$7pza)BH~?FSK،D$@F1ۃ^ӣ`+!L b0O38ϫcAP]$Cemq Xc#Q:$ G"7u!c !WWS"0A$u%A!S (R zMBAFy'rPy H03O 1ZIڡZ{HDBAlӂ%GM d A] bLh @pPCj%bĒBw{F:iCCH ȑ ! GH&1C-LNh \~Z:EPID00tŴǛmH@}očޞewM  c`\u)lRF1aa 8"ic&Mn3Ԅc Z;&<čqɡA( MH 9:nj2pC'7!0r!۵u n3zBp@s]f00Ȃ61<pJ \;4ĉ%8 %[,cnmI``paj|P#6=AnUX2T8G^Qi:0ف"[NX HC~Iilo>cw8,*4sqA-V/}B`6!΢"8} JK`wr]f3ފϗTgV(NGrICݎŠJ]0sUQ-s-ɽ7:$ BŠJ@AY\EE/IEɘ7UAjmAK9d XӉ%tI֖,߾Mo2B9d0ٓIGe庻ʖYXRa!oPN yHm6/]/B%5D BQP+ 9!,,Dvs8Y~rAl˅G~>*Wh$MX~Sr!HjTXjZM&  IPf-Y;Qv\&H3wAe]EUձk&:l6-]Ϟd,|F$`3 =?Uנzذ1M:sWfF/d3W?Uo01O90H]Lwªj䕔?>ߨ!J4 ;鄘m++.AQeJJba$3u􏏥dM@aelG_wvԠ)?z' !G#2o1&IpU\NVgZ~b<='Pa9RBBK\%p@2H$kO$2+` sH6;$6f;LyiY~Se%uu+*&8 >9\ .3.NkoN:[~)VAFYϠ7ϧ@\H7('0"dt Y2hM Q2mM  9aM, @@d,Y~f&'@ !U~R~ AU~3^c4fk'@@hfNN ! Vf& )Roa Bd   4C/TjNX_tfM|HMЛ7  Gz9"}jM iwo H:9"-EP-b 2^}[~S*9sjDV17  RhT1{NQhM3s|,H@$-IlN`ؔsz f Iaol X~S9B=&& c rE|9cxL U~[LeM,#B ]ilD*iNk~ k2v% A kB'S f ^ctB8=ÍP{%V&rECGϡD3~,9ƺ;1|"U+X~S 9S h#c \NhugJd9#'w?Sí-^Ud=aҤ^7Yfs#OgǏ%|C$Dw^ZcEo*='`:`!09ÇDT305>Cc3V?-lML'p=!$011ЏV70KiҊ1V YG1rN403c=Ҝމ(o:~kڅF BcpcϫC4FwAم W9Ԁ_{VB 7=fs ^,QLizղ],ڠQ 0NNؿi!LsuY.L_m`X9 @O>vajPk ^k/1p#&Mhxl3hi Rb!Ë|1H` ݇gz%wN teu8 Gb&oF1BNPL'#?m3],9@*!L1~j7;='``)|2"WY~O70oN B>|p"pۣ0gN@f!  4],Y1D Z4 d3\f{d 䓑2'=\;ЭYF_bzR1ҭP$o.cN@gc쀻M7_T"t0T爡[g Btԧ]VzO@_吏sLMQgva ='+v'01ߏc: Ww%'^O&`a.V&˯>KN@=-! ͹],E9 ^B>80Dipn,d7z UGcr0Y~Os4w1Z],!91WZB>93VP,a6'0@NTuNՅ3o&˯PQ 4g?' !L2z7f.L_Cx,'0@`v';)t7d.L_c3@v{Lȧ Y~\],挜@FoYF d付Y]Xk0Y~ ϩ*͎ /䓙aU30Y~C6sY3B>EQߤd5 d7%9ӫ i&˯VN g)C>æ' M_󑭜@! 0k>d5/13| ]^G_3\&sc@qv'˯9̺5z(^],!8| d39L'X85 GمkI2f`O& dz rdj?mz*clt'ij ׺db?{lQˇ|2Œ]io Y~-9B>g.؀ FG0KYE뜀-a'#0c<3ȑ ‘U8^K!8o Nw&c 69z.|rĖ0hHlArI |B/h@@!'30c|(P%ɇ D9(C&@BPdMGct']jN p#c$bYUVt`'Ç G" ~B01|ee>Ԑ ڰ A7aaH!  C@ ,LB@^~>\.=+$AmPnN\w-" $<ܳ?hPgs$al6 ;%n"dYL1`0 1(*I@0$aaH!  ހ|c1!%EesH.I৵Ya)Q$jnF,Qgd t(Y1v-'فLz&^nwյK|J^+WAEUlv{f$QQL--h`?<p8(-+Òe˰fzݸV@aQ1#P0T{ ɦF"êl68NͿ_B331{W}{v^7 1bvxG>/UUP\u1$I”ߏϯ{wDg[+<Oem6**~f\z+aYp: ;v$cxvהBMwMPu?Wd;>!|K_V^ H9~kO={"EsS¯-[ދ]{]KsoLz&zh4 C֛SObLJħn/v}P?rQyյKO^ [Qc I8W/Y6= q|q7H# a߻/h4^n<ݟRҝ?#xWZ|k_E`jjQNG=4 9GWG;:ZO&):m$ c o:D0gs✣wp͟CLz<_z >臘Ӄc` Gf%H1W_||h>֔r9Ǟ}vgej q O0MiB.IOu9 x`?{ҜO~mcő׽'@sk ~fl9,_ ť`񠷻 MGt c#Yh{0H0${h>O EEħnu7߂ 7}؄›ؘ Oqկs8q۶d̨[ f|hkikW]Y8J^8#GR!X9|8t`-ǃ<5p8P%3p8v۸/~g4Fم|Sk**oEEcY=((,Ĺy/nێkn?y _itB 8Vtb{g88~8].EIluh`ff/?_Ur*_)l6 |3!%K[yEk C8mڌ?8\ryeV]7{&&ph~`DPػ P\ZvMV`a>U%I]ߏ+hҁO=>tժa眣՟݁MO) Ӊ|c:m+mg cyh1l8)$ z-LNLjܚgʲ57ݞ=v@_߼u+nE ! }=vap\Ь+qθ9 q"3C>/UQ^Y3M$ EaݹSU1ko˖`.9e J:fEXijj-ǎ>hCFymkbպuPv)J+@zTjmڄK"aVGGqQU񁫮ҝuV5Kfy 8^%Vs$={ ͛PYU A9OĽ;PUS9GoWz]pWhq! u[yŔ9&x@v[m3"9H @'v!I:ZzUg{4;H6:NCp\8?iH 2:T-+M(Z !֦궣:[ aE͛QQ]=o!4563оƉ6,Y56@Ґ̅1B!Y[ڬ|h}ݪږWTbi}gP@ҥXn@FL Q]Su6$s`Bں((,zF"p j[Q]l}F8d ;|8޶ |6O9̤ԮtSU[꙽5AxTz*r+ep] p`mihU( @ ^V^1v6 Cږ'\jKRSh3{ Plܲ啕&yIT&dٰu܂;+ځh4RƳBYEUذy3u4 %upkdTU 2zA( c5گZK-3ı96CT '@lX;2UR؄Y瞫Y瞋¢"4 p:p:''=?aG^~ɤv%6 l$lݾ= A0!|՝kIr:]((,Rvld4g*"Fiy*ʱ񬳠?-H!_U={(G)j'FnL+(Xb\h+~9ӄA˅Uz19Au^^Vv6uuڎ aldUUnW(ėo 8{{'&B8lv{!,\bO88,_{p}]R[.IOpab|]Xe˼g&>ygbf&IG5?y&0p}+[#Cq׫j뙘Çsr2ZvO¡4\0w4|?Af#qY!Xu6" a;!3@( VYruv5U3q6A( V]%څ΄4Q,YTiHC5eFBEQPUS-lUվ+IE8U( ف`..q!>ζV n*$\c\*|wűÍd!f!X([cE H>{5"SeQd[k7mRwIOO,(Xv-.}_Ï8pR#I0G4 ƕ{zE(PYq& !XÁO|܆avczM8Ozyr .lkkt9,3LNzT/a~V"Ca!.\`>ъą^ݑm HE~$cXa柑_.;|߿G| lѴ7?Y8u 0 EAAa!n.\܌H${l6XoOߔBQ8].\w-}5wCkKsVU_k?s3.}pAI.J$ BhڀPy)HRd&rZq`_qNz M1rPTRzuιhl"-[N735._ p-b][8r==Mz u ݎ|TVWcMKqW`ݦMp\%al6phqwB %%%iwL!*p߃50+B`MIoff=__Êa\t(p ahn7&=1!Y̳UUCuM KK!lIlINHPF#Nz8GAAJ+Qd j떢< a c>Ո9@Ew*wl6~QKJPRZu6^fT/e*-gA`gjdet 8]()wd#PL, @]JW!uC7CaaH!  C@&SU\MS tUW۽ ?A%a8ط{Wv#AX  C@ , AX0$aaHM ,D!6IENDB`photoqt-2.5/img/filetypes/ct.ico000644 001750 001750 00000022370 14134304232 017272 0ustar00luspiluspi000000 000000  $PNG  IHDR\rf$IDATxyUSLkfHH!"\ pEEA\#.QYD}'1+If&鞥z&3ISsNw ,PQ|8:@"Adt% :)@B4x|a ##z$ ?H񄄾!}0$;xׯ7S0!IQ6)Bd"`&Rz}On/E4!%A! V+& @,LT^!QNedAsBLhB4C!M@1OC h)+TA;4`Iq^zAy2&Eټ9w;{10BBIQ2ԔZyjbŽF1^BQS^j1 D^ȲA,^,ۋh, 1qlJ _à/ATtA`h@06 O)Ivty.p&D (x@e#i 0mL f }C d1 йG! 7` pSDR.mp5H4A 9@{j"XN-5t1_0!S _1]^@8rv Qvf5h,޴^ !"45b 4HmA`Jptư@$41 KNd87u L0"7\"V1 0x|G  Lp.j*p;M Z{3Z%w"rBvfՔ h)7*, Ʈ~ d U]r>Gu,+1*dov}ˋ@d (q1j†'J6ܠ϶e Oıc$ HCcMJu7 8 xOX~Y{)'9$iT2C"9P_U9n6Lj0@fe.']V.O8lvqiHg͔ `WbZ8lBQDsף(ϡ *,9Gs'@MX4%v[AN,[oU@7S(' i-y }=X_U%BU1ɪ)' ,,CT[i~c ׀2u*0=s,19'`\0mx :yBL0#E޼ $ڇszs!K`o|b91 m`c xZz Ԝqo:l0zN|(6!Ug1#ҋxB,T-FOtHڇ`4y 0xǰudyMT( 2'`*PzcYVEk|&[@Ԑ9c3]ޜZ l5^9^B0jNFaln$Ø2c=0c7+x[j3ge![.,IwyHsE،'g@9`ψi'm O?k`R'N51t[.L_m 2HNG|5] l/,ZE c1 غo'H)0]jU~DNۣԐ 2>L.z3څ-XCGs^>@'a4^$b&o^1BNXA';uA߼bq`R'2䓟f0xۧ!oA{N00 Eva !SB>:[څ{i&oAsN@0?Y̰Յ[XзL  j&oQA+!^B>@` x1d-n`"3ż?wbޫ 巨q?} @C>yh.$IƦ>xt"˯~|oR]xvڅSQ9}!hPՅ'Y~ =t% 먺0Y~u^rb|Zhց],D/9}c-b'plm/],E x(B>2.[@DهH 䐏ч Q$I!˯a`h+^NO>W7@OS@@!|0a.`ua@orTC|E p" /v 8䓇.Xuab'PpN>F`|V*f|? + 1T]AkX(0ϨB>@RՅ s,F9@*䳡Ř!$ǫ@9b'˯)dN  ◑C>@.L_PȜ@A`G&hfvaB+EhQ]XzTDfL@`N>f 䃜 OK?(~yO|!|],e<'Мǜ@^`Jȇ],G^,њva5Յk Vt ۑ.L_ːI!=c0P3V&˯vgLc_uaZ@WW|DuvaZA`6'P'p؅{RvaZs |θ]xcK/|,Rȧ ۅ6wCDc{s*QvdiB!!0X#.,9B>EA`r OB>Q d,wwQ<ۓ[N #N>a$D)zxO:!ל:3/&2H!-SsK+,_{(C:&ۜ@Z'`a =!#2vtyTSæ3V6!!JTu t 4wzPWU-i?ÐעAoNn   C@ , AX0i}n].P0!!+/׿z1@l6+4Y%%Nαí߇Ëw(bqtϿ=d./Buu"s^Sv n H `7_G_1kvp8[amϫqW/\nWϫq&cwWx1\rJTV :t֞bCp ^wᱧkeQ>Xx\ ٍ3<«¤?PL"7HcG?ãO _YkΟIS?oGUd#5$EQη\P-;m{jq נ&, W_qRx|CR 0iuϲ#]@Pձ_8Xvq'9c 6BFzl\%%i;kPo2dž[U[v+_2ud=4 8].\}ťhݽxqɕἋ.?6mޢjZ+e :UU$HfBpp߀=ǧv<_k7ŗ^G$yD Ieː &A o]ΆG|xkoހ?gr4 QuՉ` KX9JJqm7gߜt`:HϾ.jcdIuU 0S 8v{]=t/>4M7ŏ[|?oFggw"ؖՙzlv=mEt0ohՐ߇U7O\)7RXj@ @ 佅<.`%V?p^jGSNu9j4 6 LfV,0?$p8p1G]xϬ~\q̟){ϩJU CI-@+$dTWWϬ} }5~rM;gvFzwflƆzU# @5Qc .m7'z8dR֝5:g0BO 1|"ˀq)'ލcHD񗶯rrU ㉄R8@$H (ᨥGn.Wrcٝr7wԭl޲ b\MH@P($眵,]pt9cvS5?})VB 稩±* BR1K:gWO@##a|HfBX&{*` <;a'O9LE{%I!Pc|E`(wҾG"u\?̱ԨΉޚx鵷r"(Y00$OŪ_w[lةŜh mU^]U ]2-SO:^yhՑlhmۅv:zI t 2[}tOsgr" jށ[:|٪;ƅ+? ʂx{]L,W_^y2i``HȨg|+;vu(!Ӛ~6FG*j9v,9be|f8T7W׿}6nڲkbLY0LDvtOqٷm[ nq=xs?wQʂ>m l 8@ں?oK,={r\y%fH*{m'V]E|sE QYYpD2v˯g_~z 4 :{?=$X'p,N8Xt|46ԣ$! Yg_z]1dىa~;x깗kTA<8d̝s*+9}ߣz0$YDfl @iiRulC '2:wI_ ە}zl MM BhniSȄe EzB~q˳*\ӗ[ꂡuE@1gvס*cKqUZ#C#EHUWU?\vbfC}˅;nqP% b#bch+wΙ݄N\rr?99ְ!fÏp#pƩ'ԝr:gVɇe\ϯԞ߽*<}8= qJR y3p&|[_W/2oފ_]Mjp sBeuun9:/gíCYiV>u2\~ɅXpȼ,luǑ L*{Y83֝Gغm;vvb͆'*8-I3N=XJG矌$ŖbݦщQ"(3(q:QVVgaE8ԓqipU8Dž_,̟wWdαR+"[HD4j@cS#  bȨc8DQaU TW u$Uk)//3Nӗ!;TtW[uoߪz%PRc=c!Xq0bc!Gq)+c$ c"D"_~Xq0bc!Xq0bc!Xq0buKYs+!yJV"RBu:ʺ0 튢@SUD""MU( %OZ&D0/R*A+\w'"(!ֆx ۢPs@r@:BzBRּR0 膁BeD4 8zIt&PU9AKe/"_,@/|ݶXXJ#bK"[{БQYq4VV05;eBL5ߛB,./#c[O7vlADU@,RS3W@dloA7 L!_(bw88,ZXJc|z 3u{z Xp!KiMMC[w|3 hf`R:EjzڵbcS(8-8 R(ݝ+Y-80, gL`vac!t&ȓf.,4J2fVkT.cv~ѓccPrr@6@DHg :a 0^t-XqlP(=}v%"drYnXfa﯈\*+=T̻86`0El!RYJ䛳jXJxjqGRED(uP|O@;RY%uuf!\X%$F'&t9$tU߽7W,VYaxk8bmmصs'".WI)c`T+'09}fp;tI)koÞ^ڢiFH)14}fpX+=;Ѵ"D<y,Z}qXӕyo3Nݏ?ʓͰR Ѐ-طg7-q)%4UEm8ow?bmxiFJ~- EAmQy{g7wl9_O>v%%сt&2 ! 4I8mDБ'Dg"UU=W,"B:x $#MR- X)@ )9@4Eё3@{[@n J-b\'@~Iҽ3@g<CJ躎rYGYa *xjHDCDӠjeRO)!aϭ旖*mx ;nEG"vYuRDz0kK~[k^t_C@U/7ѵ%Vq8XK]tgO`-J%V)D[\$'9R;RJ z8/m`<\gR'p0=_;P֏ c'p0=_[ԁF}UY~[UkUO`&}B-%P`;Bɯq}=f;fm0'lvo# zV^(*}6^)mDX` xתB'᱒FO5ͻ%?G`MjoCBkJ7ђ_˟`M=\kU8XRۈ p׊jx8XCVۨ pTJ~S** }̲K~Ӂ=3VOYFOYY~[!}̴6"}̴@Z>anVр &J>*B P\ NɯU}(H} !%N N !pT-; Z@(069)\P\Y ?ӂ\ۈ >K853CmNa)"H}j)Ɂ 5k"ff0860=͏Jaa,mrOFd?봠 :FSyjb0k_'޷[ADX)py_)%{@ ʺn7k"B:Ӄ(ˡ{Q)t{(>@\3CX|8af~kA/y/-rn5? .G0=7OVD3 ;Xf1FMs@`013TS;G0=J/%+%|' ",-gp>D`ʅ_Pm >_3iS%" 8ra.mNO`G}!%N `~iֳa~)<\k!}'XDV =18ra.GO`'} |;Cc.qɯF|'ㄠ WJ~S\k? 25mmp.`\ 24حZ.|"@a'ㄵ†/,>@#M>NLj>/zo&'H|^.%>@3M>v#\bDh&'ƕi0(zO`gjt{ë} '|!55Qb Nj} |@ {\gu<N78+'hU\ ^TT&h]Og89ra./ x*tsCkqB9o sɯugTj sɯ7)D[\䬻}o.58AJTfvw_!FדuOXmbliʅ%\I})\&/>9oj)wʅc ^jqr,\)n݁%@nk@D^SR.ܺم?}3.|,N]_rOe&']h.V $wr&5ʅ%^ZAhqҶr,E.V'ВJ݈Ȗra7xZJ>~\Pl\K~U 8k|\"̧xv\`Dux= M>N>Jo*Qh> M>N Ccc'x7!PN ajqaxd0}@|춶\8WK~ã'0@m&U˅Oxva. al 078amXw%T-3&'l40}M |$e7)S#<pO^psVgr62}Z3/  V|xtN<{ (jnښ*n |ZE>C>|ܡAQ\ɝyM}&na}v XnaØw4'`:ɇ1iv=SM>y[ naۚ8M>yZ}u+'gf1UUa{ID#(J u u1 " #فop1cauc!Xq0bc!V q2,* 5o[7򪵌1h/}]7Cl1?xͿ},k36[p{M 3 ID][.|n1-@ჟ@ `|<~;fΦ$bM[g?<ܱ^_]}0ts 'N ulGUUt%Y)\K"B"j0RJEmiplBU{-nx߈_>CcaaOG/o!lyB?gƦqyFF|϶hq jߑ_B;v q{**:mK :H86a{%&&LŇk\ҫj?]m6^8~KcR"5#"̠䮊qKBG~‹E3׿n5ǏÇLM&nD"x #߁`egl`3gS 61U2k31{pl@!w~C#O&n[=2 }H3ەs,86P\YmnKY?\2F?o^ڵKP{ЛXd2Κ~߾BgG`6u\jjDtSݳ;Cow CM778"Bf9cw'Ef _XD@&ER芢QSs=RxB>WiD'a1J%s+J~mUEǟVS﷞xmx;΍11azN~UU7?T*a)n ^\_X3h="󠚚 \1qi=H)m `v(R0  EHh5Zax,fi0XKJ$ ZwrYwe=01mBUؾ}jl` m(g$뺻8|msr=8֐R"e Yz'&&XYsRJ$Itu%MM2rf+++6\q9>;ιPǿ]WB` )%:::ۇ<[w,-cǹzBJ\xשR\?ko6Jahdxz" 3 J1OXGUUbS.g2x2c XGJ@rSNj:<ԓxyoK׮#֞\uKLm/Y,g2||`7`zo? ؀_vG.R w|co|  H)ݍ_F3?ws/VVViچa@DPŶuSeP2tDž@Bկ|%>Ż'4I-[ߏt.=t]]JA0dך#ajzǗP(7=}ϲ܋G}f/95 > )%zwĻN W}gnݳd011L<\Ku!;>dMe^O\Զ[{zpѣ>Py+{,X,N 8:Fo=?~PX #/v{8َja~Clے/8L0 W]|w[7wڅ"Q& !ç? \}U"µ\)\w ~`W\~S=lۺ߻w{񯟾/J?kuW @_>_|_ķSS >U_w"Vro;. @PW]N ;{?y9 ˟30!qA\{+g.ŕo+."+0=^!]}5>PC!~E8`"8͘\. ]7hĶm[ׇ^twu!iRVfx/Ďx+_a)^vWus ;kDۋ]/8I)թ&g Ba-6R>9 -B`,8 1B@D4SD=y1>!-BUTUƐd0kdáy?1c8x$Ɗ 4VV-4 t Fat !';(A(CSm-JnBWH2d`|CC+!6FaeQ^\L"@2``|탃y@rpx4&  U-HL;|<0W40x<Ŧ r sx4OholM!l <0C FaSt|#$ePMhˍ2L6:0 !)ô*@ !07$C0ńI3961h"Q`8bX" !@8YUhTsc<DVCK$L=n0C8h%Whz!8,e,#aSs2#&˅n ,[jH-*) ~|ĕ'⊌㽽kr1DR#Ѱ1ޱ1Ʀ)C0r`ܒdKlV58.hsns}k3. E@$%nn09<`c&&p﷕kypK.\ָ86s @$GKZ/c  $ Xhf&q$(+.;=t68$8keP!Xro>?U9" eŖr.c H~#0G9GYq1EE~ ^/]BD85G(x8ۃE9p"L=EԚZ9 c F9!%&pU%%*l7.L9!bIBcEŜKQHXYiʶeʴw8a yjP]RblcEEr сionTN`r!H$XRSIKJMх,WdfHhv[Mp|R+,B9̰]d0nB8ۍsM3-lH̺ Ȁr,H(-*ʆgb'sH @ԗceCJ.) ldd)',.)FԗA`̐N9K:c4X~3PN@ $Yz_Ѐr2C` 5e8Kjjl)9Q́TX V_VJ#0A9cp"ʽ^ԕX G#aa$ ɜ@/v?"9‘/(/Gmi)±"F2^nQFǃr^ snLZ~M2'B _I=! da ⲌNCd~qK$a3p*aFcGHhǢ*{<@3[K` EbI{ÎOy'ܒ3-@65-#o h`ROYqy1>-"0A Ⲍ:Z~j΂0,B9! Ho6~C@̛C ̄0|X~m/oPN`r('0y ž̴{rNOН*yf̜SG$U7?pG'@@J-ٴ bo8y?B7bH]07S  dlpbNZ~9H179cr$DN$ 9*Zfr$DLY~G,Hʅn8%'@@d,a Vfr$DX)Ms$DFX qEqH̰7S  4co65'@@hsVX~3Ů9 Enutn9M$[3:b0_Xʯ1'P8DZnp糕U-G60hm7c֪k<ɜ@-rqʓ61 q H Zcb8!c cx'z{iRp`;l-Hg'CY^ ^t YG4 'Y~3.9[ @s?|C޼xD`Nf0;6=i1DqpNWh'`;`!! Y4/L\:s:w '[~39[ Cr갯DF?zFGqÇvg4uc8߹O>UV FR3}}9ݸG3ja* H(Ý>(jn1 @Bqa3W7S9r χp,Ke%)3:Y~sÊ9 9t?%0]"tJܰZN00M=NT '.h&oX-'`YtA5e,in9WoI~UN W c x|Z@3<9Ur !Iم.L_cBNRHCk#0Y~ 9@2(cT;N-o&o~H& XBC>C>FۅR9V,!|4p(d9HY~;̜01]h|sx7)˯'섙sT!# S],a:'`F ̐OHX0Y~ G2'kiX0Y~ K2'2UN 1]ؼՅkrOW!#qݤՅk r J at">d5c4GNT$ .L_a!#Ld&˯91KNP萏pL`VU-d5#fON>V _HV.]1`]#d5#fON>V`.QT:'PPH|zL11 q+vakz ($]iChݓLfVP/.8I_KPȜ@A`:iʐ! Do:P],֣P9 @ʒj(.l],֤P9 9u[#7y ?'WbGoW&˯@Foyd' pgOLU]sVZT}|"S!K|&~)o;Y~-O\q3'KGoN.]8Ukľ*`ǐޜmNU+rOЉ| |tpf}d/ɜМ!`̴ gY~K2'04'`m'.ܮ.L_ctN@wk'.ܙv,Ȝ vPGoRvJ_`dN@7Oa!Iمa&˯1&'(CC>F.<],cfN@tm!#0Y~KjhPǜ@0r|8p]XUUT⊾9`z' IO$ݙi 1 k:sR.l|@.^{ƐP[ 4VTvdi@!\ b?9J(SHl 2!BWN # tRȇ tN`,뾘Pȇ E2'ГuN@g!6'I0Qȇ LH9M$(C&%@ZPJ!09@>Na4VVB L CLKQ$Y7p EL?arc8ۇu?~MN%aH! C@ LZで B0hȼǥ]܂[(2m=MVA$gh  puPI2o*@ѩ9AƓC"4 H  A8p0$`r QÐg? ^3c 1ps\KAWU[ @<iהn[ tͼq]$AM:yu*D<^g۝:Сpݽhmo>z0<2p$UUvPY^XԄ+V`(/+ZZV=>?}Do(EU }r=^E8r}[FU| XhV45+дx1*ɳ!"=p#lDr=ԦMNDA@Bq)ϛo #IBue%V\˷l՗_ kFl+Cgɡ@0L{e(ɛt \q%r4Aj/cz+6]^?Rq1^CO__F!2004g]s V[:kD< $qO^]72:_}"@6?8ǟz 7}+PUQ.ܳG?P8_}==W[Lk{;|Aҗ! w? .;` fe<7mms΅ ]Ow~$w1yQvk7?^%XlrF$xgW\\ GL(@vaa /=6[0^^ƎH$F nۆ1k#?8c'O? Ǜ5-Gro/ߢ띿ssByYļC]UUH+1xi'$I+Ap #2&lX˗-CMU$IB(FO_Nࣖ fV¶r{];wjE̎R?\Q|n7n۾.L{|,G߯9i:O< _t kNr Ynbt.c ~o>mNx3{UU!nzp{yD{kAey-1 5$)  ȑ*aiX qggYÄ^׋˖HLċ |sx"q " {9xLr464 H՟Ӌs.ŷ|W]vm:?\tlUEHTU3۶ᮝ;qڵ ZEQ/+-TlHٜ p\X؈u睇-_+/׬Am' YQ01]B9GD$L%(**²ŋ5G͆5[MEۍRr%'+hR$4fC$gwPƕUy瞋g,k 'hnmEsk+jjp͸mv\q%(r-=L=ι摍$I>9 026U[ƒaM%# 󯾊vᾇBogu婜v`I{O$4?̓~w/|]]={x"[2hEkB`"*yms ىG݃Peex ei@$hHLĒEmִ59D8܌{y?ٗ_Ɩ/Ʈ[n D׫P8x"cb(zbC (+d,CQ].lڰgziEeYO=> **4; "<11q,XEQP]q܌7(th ' <2W*56k9r)Eo7hn@,Z@ӱ{{~sᮝ;>2p^i[|rFx=LD"{ Zs%˕v#^yv 7p1<⋶k ɹE 4A-=9sAEy|B1ir+B0EU5MohR{#cxts,\h9}7q(֤.˲(!Zm?T^?m>%@` =SUUE_cŦz0Ѩ`sMt̎_]|>Hٗ^JDsg|?{Y(GQ|ܬ*S͢3קFfcMKxh"6ּC |?F;(8ֆCǎi:T9ǟ?@v[bŲeEi:>?z{M5z+4 Gݻ{sQd!Hg<c ˖,1PRE|W^t|Yi)j-/P|Fs1w{w0:6F#IlPU~ ClFcͪU(**n1QŰw>ݷOw`ySSA;P48c ==x]†Ե \ (I?(l*2\v->8rDl))dEAo?z5.v۶rv[Z o܈7-zK"fQsښܿ{78VÊ%GG6]p.߲ŒvKKJ+_AAB( .߲we꼅@#EE ;n]}5T:ǯ؁_R^Wh^L*)֕K ^kw"_ݱ e9 %%x 2~_EYz!K Gҏ_bxt_,qz</o).MUUQUYo? ?x 'yRUQ]܂n6VYRTUExKۚ7̄R/ݻQ_Wgxz |k}njgLoPk{µkA].nތڅO_z)DQl,*@ضu+.ݼ'Oo|qq9}vEy9.ԧp7[ʩ((**BiI jjlR\~=6oڄ ׭CdɬlPebJ~Qpg>O^ty%{y;y1; IYi)>q#tMP]Uez 9+"6Y k`חx{N:^`x|r񠦪 ˛y&|Kq:BQ6T9&= !Yc (r娮B}m-jQYQ1(uVU\/ `庉(hnoz}?9_w7ƃAbF;1xQ]YMMO|޺.PU5KF\w ssyv2N ?8~ a4@4Crr5UUhCcCjQ16e!ֻ]9}&;9W磽٠u?DA( {L5 2y_xQ]Uz,^ QVZ=a4${?!{+tCs>̢(ذfMp>v 8~CߙVksJ*+QSU ?bZa'[l%g9b&Ӑ  A8p0$`H]L\@6Ii;޽[&;#"yǥua_h  A8p0$`H! $xIENDB`photoqt-2.5/img/filetypes/qt.ico000644 001750 001750 00000023667 14134304163 017325 0ustar00luspiluspi000000 000000  'PNG  IHDR\rf'hIDATxytdW}Z֭[jzfs! C fȀIf99 M!$,aΙ`nuKj־Rޝ?JJZu-U~}}JNA; Ap1$bHŐ! jro~BUwX 7/4k;M8{G#Ys"B' EPui \ Ap1$bHŐ! C@. \ AM+0#m'j; @a.J"9C7sH/$ QDHcPe0"ˈD UԱc` _i%(4)$D Ơ/.`58*TY@oBO$[[B׋*T֡ LHB`   |ܟi;J"‹ څFVV !ʼnqs4PUADWVPU{Bh4@-. 8:x8Ơ2' Qs|2"$470x0?k q9J"oY̏*j|bnhJqM8=0pjد&;S_[#  !#8:R;cb!-D#$1$rMFgwH@ ư5:] Y{A9%WER1LO[@!c/."QamP ~ ,}!c PȺw2N aSH2 TEC$! eMvd@eDWC};PUDB-B$a r<9?}ka[VrV?$`}.`)! a0y J.,{=B13зA^Ĭn׶8$pM #1,au~~G"K9(+6$Iu(o K%[lcG"b00 ⢭FlV AIyN.(tL`oamiIC"t+Ѕ 1v%8^r[9%eα81,t !௨/c(Ud$o3;4ꪡά*2z{aHAzQ^Skf񢼦Ǩ͖_cX #8|F!!P^SkQ(۽%<>׬ #HQհג.;gc3ʺwbԢ)30BvW[.[y Y~B9h=T?U@jTi# ,f1H2<Yr<uOk @z @GZg4#z,f~H PQWCG?H6߈"K A*P ]\ըo:Jt~>cE9-HL]ͨO] )`o:_xSpLX~#`r 0;z G%奃 !8GYu 8!y7k5 ȆMB$QQZ E[]*N׋*T֡*FrROgxq @ym<>N ! yܳ55YYA4D$ EN@ꖉ.$WZJVV[Zza[ Ɯ@CIg& @\PRY*EH$WI$օs{<;C;>lN_ $ 7qOIɶeņNh-l jk'oh?7t4?2B@|[~@9P_A9-_3PNNHRh˯㡜_SE94$D(0'@@\ L;'@@|T-12ܽ wQ(i=:mWb13؏Ȋ;  N[~olu3} X"l,FY ̹/'@@ X~֜~%ºXk]  ,fpcNZ~r$DXkܓ  r_'D=9"'TU̠-FqSN0ͺwږ_3%'_(*v-9v9rDA(wZ0-u='0Q="k'HC8k  ˯  ˯Qc,;/':PQ?`pw#!45X$;k\#BQ0y]Tܮ;~߅r5nKF^F< Bd˯p0Dw8GhncׯAn7k'2X8HD"wXs,cwҸk'-,c m^ S=wf;n厜jcat4ū* Ʈw`š^oӸk}p0ư<5cHDzPȶ?dq v 8Nc`zDB,?c kub˯Qp8Ʈw lacij]nr v 8KT_&'LMZ10;4ٛ8v 8F33}].,M.L_s5'`!r_D׮.LiNrj*b<2s],ON 72;׻d"c>9{B>hXq],1{l+B>ڑd?3篝%SvkXu]8mupb R!YB>1Dd γ [~On'`휀- )pqnb&oACNV`$SN 巠!'`0)q `wMl"tȧ ].0YnN ԜB>y1ȉF; `;mpce͜| p\Iم[dC"b͜ !BvayG1wGjNW@B>9̔]x6CߝÊ9 PLtw%uZNzP%,;sּ -ݺi/J W*J XNn|:mUo B^]Z'`-(r'ϱk RXi=K @C>qILܰ],*9Kf,Q],*9K!0ykd.V X%S;c%˯BN`ǯ K|NW&˯ @+؁.L_92Q˅| rwT.P,a='0Uu\Յ o&˯PeS} Iȧ k&˯-a</rN\~W1#kZ80Y~lsM0ο0Y~m9"ފ )w.o0Y~m*-l D)W0{s0ova:b"w|\:ψb;?Յ(JotJ'浪 h&˯(VNW#C>y&F^FM_Q@!n4^],΅1 tXl%n19:TB #V[.0G DޯctW&˯kHz ȫX}%;^]X.L_ b= C>vD&0Y~]I!ț9SvLvaB'懇\)du/XO ޺r}ȧ “`,du) &)a򱞀AAX\݋cXsJ>ar WC6lN@S|UQ0ݕ̧s?AX9M'nKN#AYP3qP  ?amE`nv\C'rC=Ap1$bHŐ! ( PRRB F0h4=񞇡" y$|_Ǘ?4ao#N; l#W{i5PP(L1UGN$C@. \ Ap19 DS&VE2ZS>2 1BU( @$H jVzs:ǝ؟!؀,'ux<۫X4d4B$AQNM7n`-">!?yͧZx~?TU5abѨ>9I$Hĵ?dHRH?*8ֆPhvIpWϑб*4hܿsD"+/_ďz ?,FoiZC>6׽oǽoz**L@/g?qz_?.< W?~?8ϾxD#$^~yݟÏ5/&_<~ ؈h$b\858|B0xc#3^o7i$IK4ƻy/>sRVٟͶ3SS798M4?t$!ȑK`y)sܸ~S;9~ӟ#~b(VWQU5uu8q.Ͷ 4}C]gNc׮] Gn bͬ҅ e?3p1׋>t4x_|qkj-+a-8-ww?!*{յ~LONfIp]7ݥ=wߝo%08GoWf&'Ep&Gt?ֆro"88{t¼][OcWuz:ue WM'O?$&8ڊ-?40!p!T^x&4{5sm9GsKkoG&Tڥ6ah $w>}}XY^|\ᜧgPsGg Hq4:ĵ˗GheW_y96N(ִ?@2/Em}niN.VVU3g4596 yG1;=͖V  A!|KKƿ_"d9 n{zx'L1Ҕޘ k[x`rlLszq涖q@y1WCYۥ$}+&}8w><@gU,u [軪q39ݍbNg꯲*90χ:]m*":{UUY%2z:5e9fvԤ[ ioC 5z:;qŌNžsRKv](DIi$I& ⫪CG1+vw!nwz $PfHL'Cp?_p򥌟=u.uᎤ2B:}@ >s sjT B`WuN5 ,빙֩gQQi~@*jqԩSùwQ]mKJJx c ƙZ;vχ:'016훋t `1=>yDFHL/)/晩Ɍ]pٜF;:ߕKm )20s!2}݈jN]9Ϸ803()-9OH)Eїx<0ӻX&ZMMhhlNd2pD"kp{@!0PU4hFFݟڵ;;Rzi/=p.5BM mQ(ta`}8y4v};={p.9͹󩂔9^ ݩE z?ixJJKqM2Kv}vf7C8{^{R **+r5/)yj1O=2'Ù65ӳ3,-f/VVJ ?+$ζ׮zxOAJ9$I_K$;P7B'5 2H5J5߇ǎH'QAɖ]S$%=:EDGi^|>.B>U(TL%bzt;q)T֒HP@}^45l{y<*InN4ABN.-TUw@Y@W U( [znQl1!io%u@ B$4V))-E ^/$RWWjW ڌXYZ6PVc5 Ɔ,,6 56,F@u@a7/Erͩ}h:ٜAuMD"TXHz ,\QUe=Rf s'T>Mtڐ䈢(xͽ׿̯%_R uB,-aFu {u{St H GOv $#G<9Gi @l뿲2]o ;p@S/ avz@l37]l<N .ZڅB{:;H$0"kkɚnk34"q3$yBBT(F1<4d;f*qC~9|8fx }K6$9Јtv^0Vn&Xf#Y" rB  Z @w;$6k^rw +rϟX$^4mRvwc!@OOv\u$6EUU4l[h3O;x2.lsq|kZ7BA Hvc MB`wu5o>87? $l`Ax=|%]lkp< 7Bg/Ņ$*j;x˃سWۀW.wyȲ EQZ~Q~U׶<^/@Ym!zl/ftqz9m(hni_k/C}M8p< ӓS蹡8;79nK mֶmz:vlΥF^yz>ĸD#tut>}~?~}5d0VmL뮞\z,nl(h9w?hoo~淾-/fd㚅BG@MAc?-|_'N‡>qWnݹ^~F pigԧp-~ۇWmjC $ 納T$AUU=ьǟRnxo7ܟt ݎr*j* N9W·]+17 _x¤ӅBM}~}8| @& HdږPWW_xͽ9GSI|Oo/}=`B`޽8r\Ph&uj)5` UUq'>m8ښ޿m~5xPQQZSIRC ߏ~+<3t SB[$ u{p~ S`!JJK?7cs @0h>? sc \#H*J.4y;={D 05><«ago#@]}="|}l5*ۄgZ !5򅪪@/91P[W={zKaڦ;}~ĝ,h \ Ap1$bHhza<+٫_yӓd 9+/N Hs9p1$bHŐ! C@. \1FurIENDB`photoqt-2.5/img/filetypes/djvu.ico000644 001750 001750 00000023740 14134304116 017637 0ustar00luspiluspi000000 000000  'PNG  IHDR\rf'IDATxyt$W}￷ݒoIhvhƎq  c6<6Ab3Cx'&$$$< )(̍"R;AF,0v7?+G8b6ajH«~9, :paHD%C"|O &D'$ ȩ''Swu4<7[& !_@$gg u/Xd cyvF"I8Vfgu78lc;bAC R2AT!O}$ 0QDJ l%ȒT(L3& b3H6@N 'JeD 5\ cH%Hu@"6h%_hj! b[,)ebg c;y<-̄flHjH-R)CXrs. 72 (wh pR2eOksH!,1R?74 F\ eOsnZG,˘D2C! v гE0Z!09^6 .h$W 9|RJ07Пa_fz!Q$:ow  mPcA`Y u<;ٙbqrFyBa K mT"H`nS}ݮsH9! R/s6{{1,NN c %L%|ņJVo([Y!.,. lb3C"Ѐ72H ` fP*= ,-)cHƢ賄lc noUzm>cwPMYF 05,4 [߯U兽Yh?#CBY̲L_/MvTzYQQ[>Jov+ _`38GEm~GJ}/KdY`򛫠 @6dVVoS.]vC}˖uDVM@6)$wuަ&UT_7[('=$ 6jZ®WQ^]ocS{ ,@9 Ps8Q QZen矒7[('$jX}xpQױ]?Rz$hQ(h=°hUX bHM)7C! s'3D =X~e='^N X~s9c%Bu-  4Ao\bNZ~ Hѫ7cX''@@-91HesCfr$Dά[~'muֈb4o6X%'@@,byQPh͖s,H@d-YzN`ޔs=B{ n3H07}6qNPI,`֜ Y~1rYJ Y~s90_N:.E,LtSY~Ƅ9$L?&NDD*^h.V4g?ca5&cXod(" bq$)f悙ryLU_ ęӐS%Vfr>!cI$N,bԽ5Vr9di<fzv&d͖rq0YxƋW$L9zsƂlY ,w=S c 3Ә=͟1d,  {"Ɗ\0zNtCtegN!Lg!`ԉ̮/x [~9 @*ęS./guB `ifz>eao.9'`.3XiҊ1![G1rN46c=7П߅+˘>׃ikڅF Bc1yt߫C* 7 0Y^ş8u6﬌1-h&o~f0pIiԲ], K)''`3}Iȧ-,Y.L_m`X9 F!d՞D lg]4VMh^}Y s} )ϙ !ma!`ej0C>cE2AX b&oA1BNPMȧ j2],9@.!Bc~dj8='``9| 1sՅӖAK CWGsC* '-8&1}t5 _i م[dC2Ϝ@ӐO!w]8U3Y~K^s )H7W3}w%d-z V$a\OXޟTa1 Ud-%z *` 0 S_ݠt'C>g Uo?O0Uz[O@_P䐏Y `dzZO@WPO!`iLב],C/9]euQ],D/9]i1}va=J.z `ǐJ$V¥W!'PBW!)uuaRJ+ycJU],9]iWڸB>˪ gG_㰞)~N$p1s:zuۅkMuabr7%9Յ' |+'PЫŔ!aw'#&˯(VN``ڐOX ;0Y~ c  tl%nkbV2'PJ>F1?n&,bN0u%4jQP]],!+HN@SJ>F`],a-'P |vFvaZB'X9Sمk9 6w*cXtȧld&˯u)zy߭!ˇ| š]xz UY~-9B>g.|$"KK,uNa%#f={0AJ&Il-ZN۝U8B>Ń B >u0Q4c.kΥOi`@bK d}5Qȇ tF9,B>XO KA|P}3ư8a|(P%\ɇ D9E`!]ON@QdIt> BPt&'t(z Ȁ,I@e]=leeT<`)H$L7 N*C'BwK=AX0$aaH!  pp: D2S~w@JQ h<~k) @Ss : AM-ȜCdH&^'M!  C@ , AXAm$v%BZfOybF1Ȳd"$0Q!lD1oH\*RHjp8k9ʒD2X Bz{yx\%eDBQ$IH8& QV(%Apah_^! ˍJ5uuh޲mm֎Tzm6Ȳu\EGTg=;!o/ `lds+9| ޱρ|<*Ch߾cQ3~x|%2wꬄ]E>TU)#`ool6m cT\gWT^v2X\O D"Ql17?6Ce0 :`I@Qjʼnx9xE׆0zlC @H$9?y[/ '{39moOO^cۣmѣ;><@ ܋sd֥p+RN#"Wl[^QpXm$y5k c (++C<ش9c1~"t:8p[ ?|DM]8H&XYZ{z>0^wpk*"I^ƛKU{A0=9{>1,5;F\cn76ar|,c XZ\DCSz _bۆfn֎v28,#s=ۏU/<#GILcs447a{gLcjbM--O` ccUlcn75`G5L!L"JA$pQ7.9!Mr!IdY|IW9r8|XmpyC}}Y00ۋp(@w7\.>&GL% k7hMފ5թi_UUt9-sޞK޳g_v;MUQ^cUnz??{WB8*UXȲνT `*1H8c޽_!Ap{]`bl9Gsk+wTl;62EO՗ |spAm]hjb`!Y׫j_𡯧CV9**+r077QUV#jZ?t$EWmD75(s:Jz{Θf*bˆEa W~yĢьmQDѣ$< uletۧp@B cρVW+;{R*.Lb޷> ::T@Dڰ]m^^+2קmزm pt:ֱ]U{χdzsOUa8p0\nwVKܸDc C"(Cd Y&]F.Ba=wdYFٳM-[б  H)I#!2 A"{ٿǢWv݋:*Z H6!=-LPV0N ۍ b)uI,,u䈪=$Cde⻲!a (.|9;=>201:%ʨhI! :La岌w1c //`_/B%c7-$9 X顲|v9}׮dYF}` hhT_]MH&PҺNg]^+z0¡*݁pY CaWkΆnܓl<>2}}c**+M[ma b 0ݮep@dbds3 `vj 㣣omo)?-sUB}ssX-#/2Mm].@9l6nnf4 8:C` gNPؽo_Q},i @2[[Ѷ}GvPOC9|D9-s`S,,˫][7B Wy%؀X4N {veŘ﬌!""{ bZpQ~K=^%DYCQQYsSo  #1Jd ]Ð DQS'SOjҺ;3V"S=ʊ&V>DUv&+DXHD~B7OzbBV,/-a~v6keYU s3tK`! Tj465m` sMr(./<ZЪ&FGanvVXUM v?S**+QԬ.Ǐge2ZaxqU[^Y"$׷?Tnǫ^z3=eC2=>s=Y /C$3O<}UM-.WFe+ /0~Fnۖuz[Tџbiѯx /S'ۖ9fO1Q!"&&܋oWѹw/ڵأ?#E[VB "~WxᙧUo wy&#oU\(4\zK: v;v߯{jFo~C:: b4K6\L& 116gz ۏqsRnv4dǧ?a?Ż\}1x<^Z_dާfkRfQdlwu(lvu^8x 'I| 7Vˎ0|Ww|;w.FKR`~,## f&'dͽpԟx<_x'7W]{ZQQY AJF151_gc~QV}}PhƼ̂z+,c޽ؾkΞ<~a~wc8 x;ށ:./Iq^xi757܀ C1Da'?l{eN'/!H nF8o|} TUWu+[[ӟl6D#LctxX1Uw%-[A͆,mv?*joɳ(5uuxM7./|?яж pW09>ʺU7dh`Кxn~vʿ`)y5\h޲E5uܷ?yz޿yox[g:B&׾F][߆q[O劻<nǟ~#صWlux%$%PAM]>qϽxaX͋>O:a.ص &Hݥ듼Z@um75O&)aNs+n#׏|W dws pѹY,˨kH iAm}feM]w7?~q׿J!Ámp7o{;:U6'}ى_`x` oWS~]ز5{1pO ;p[ڱAt_s vweKkD#y__Ys~ g8173׶v8[w 0p6)5Gp>C!~/?p?RymEW;wxk_ i0Ȳ-ow߃X4{ p򢺦 GUu5\n7 zJ]4-w[o(N ǟ=g19>bȆ((s:Vek+z5>v eu"YpqB4QsۍG OYмe >rw /<ԓ9u3SHQBUu vlk ]GQ]h0(}oO楤3?|9y܂ T `~p )Fe`Ut*=x^lչD][gyz.yzK$F8\!2cEm}=:tC YX9׹` !  C@ , AXů f4%B'l*]?2E ?b;E' A!  C@ , AX00O4IOIENDB`photoqt-2.5/img/filetypes/scr.ico000644 001750 001750 00000022707 14134304246 017464 0ustar00luspiluspi000000 000000  %PNG  IHDR\rf%xIDATxwxչ3EUo.L30&:ƦPB HK p !!pC H!$W lcS;ջեU[i̜zeKHݙ)yw4{vw̼w l>HƐ! C@6 l AG ._v1]r6AD`َ 9v1K/|$7(I $a&%! C@6 l A1$acHƐ!  L$cl9D YCKae N. . NALHTB1H}Cb$@XCQO lDA'Ã\orrqgB"%$ c p=>tuchxaY&C%0#DnVJ򋑗 QI]!HYߋ6 #S|~?mCRn ҢIO%, @00hhAw_/dE |rOoƠ( z0Y4.q"4 z}kmįc aIBSG p2x3$I C !$1t.r9$f(:zP{A)uPR~7amHT;C}[#rL>-#èi?06փ  C?[ :cBCkr8݇$1 M-ތ1 =M!, 00tz3k42\sA0p=mꫧ`86laH&cL?>;ЇA? `BR]}݆MFؐL@iaG5~Bz)H$ p샬nʔ0p!BE d Cn*En c pP ?[ZZ{H&  E+,-1 v܍`(X  RK$Y95-unE]kifff`’d* 7͌%^~lFD@#Hù!S6kZEAeS5F#!T4TC0,1t2Z6]Է5f@0F;Y`0_ 6V#$H a"b^NTW&08DkUwcmn*0m=hlo6y2"$rMձN0уX!l9*i0+$r9LP[Q\k76F`rcy3<1*c>$ 8D=Yn*A@7:u M1Gpl}+Lc yrnlKG-͵F4w¡6` !9=fz}9s#+n&?#:+@ܐLDq^*NQ-c,qƚ׃C 8`88 0,s|x پx9 @LAӍE3 sܘY4ݐm,rcޣ#()0Uvftd{ ׮DCIrC s+9GanfMKwS4!jmnd6C9 GVsgtuiۉ,̝1NљC Q˯QI#9@nsg):"sx3=?x2 !0A!p`δYX8{>IwPN 6$ q{`<,=98Z P9A@Q^!+;egpXʏ-B9ؘ#n@8"yٹ׍H^6rpGX.Y(/B^V.DQU? c  +Q_ ӕo8H$2Uwbz4?G P1Qr:q{ܬxܙm?VD(0]}ݨ;Ԁkc $9(EnV.dYFX %(@D8..8EGd0Ȍ1Τ,RTҒX& D; ppgR%TRFsXz)q =ԙT~vaL4A@}+C@- A rGA@N۬7^"9  +G,5塜XH}wsor! t#߄F9Ð*oPN$.$S7PNqHwkE_켞 9ZTMG*Rt7ZUMv^Oќ0"L,b F&B(lub4o=  `D   ƨD~oM IcTo"-'@@$-;H07^  ,D* -0k5"Z~%sX~!A³"!T5'#t%jMd9k$ ̖x9,g[~!5s$D|X/  Tco"X5'@@Jx-HTa5oB\N6C 2'0UX/cryik *ZJʖx tY#'`CmK=[ "n [쁎^Xќ0ۉ5PHW ubW>%)M44vC4'`,}Fccg^cN47@}Eih`M+,-$aO~t@$q om4I ;Y~e4'`,}V+4iedYƮ谨;QhAPf,)1jCy1`;ƀд'RslhM,'1 `W^+0vV9\Ζx1{NRyhj/:! {k!s{?7̜((@KgkBkQd+Y~g4'le1ƶfT4V% W-] 71f,!1bw~HIrg!$QӝdX~f]Og9rYCݳF.,* 7̸ )G{ofQp>Ӿ≇Pw]@Rќ$g萏 ,R@}eWFsfXO0QG)o<7 M76WC̒0i,mQo^a3'`J$ {'%W]xĚvaY0T4U)&wЇ,d&˯!'`*'pBvarDB>z va|d՝ќ1$1!|!=؅?6]XQTWw0 5U.Nڅoj1z?Z|hב溊F,dMF Z ^TS嗮)è9=B>z G aɱW"oʉ'Pi +"c!]` 46Vz݆ZO )y{H.L_` U!=md5cs߆#!=) hzW],HN JFC>GX>مk<0(|L:0Pe0c A  1Ң!+WŠ,F9 QB>zP8V0Y~M$'З֜@Z{E2+#v]i.,0*ɮc"vՅSgZ~khҝH[0jGTHY,!9C>z ԧ0Y~Gr)f A* ל+'r0UGcRR],C t-;Ouaќ@SH5.],' DƮ Œ1R_Kʜ@J@$ڏN'BŠZTR"Mhh7GkՅ?J.L_둪Ŋ!{M؅CY>tuhp$ǣ!בhu?Yik9E$8Q[A!-eՇ )@B#7)OJ@S@4EN D!H?Z1!?|"hKƄ|辟 N4'zGV! $*J>a& Cf @LP)C&ќ@L'`cG3fNC)zBFeT4V$.*HLUa)H1lDAN>>:; HْA 'C@6 l A1$acb<232@60#.;q 7A[ x_?5vvT:cNZ|2xV>Áҷg.(Lkp0ʾO Ɛ! C@6 lLRk10A]WQȲ EQ Em8c%O~VߡLU2'!DA@XفjTTD8Y1v#/7JJP6{ŧ攡L/"5阒$!<D wFB5#=&PR8 552EQ.8΄U!Q?ЏmoǚkhlnP̿e`Zq .X3N[s-NBQaA"˪3_|e:?X܃JE<쟞,˸+pߘ g~W׭uCVWE/7 [oM}<-GA$Y›o oyۖpQG]C=6:^/-8\x1X O8 n;chmoލmNN@D|؈sc,*V1Ҍmor.ڏ@?~El|sS܃2~?vم J<TuRAeG,z\JıgEwޏŽ 8H@wv ]> ` ?;aP `cCRYEzRfq6kh!@Gx8xŗ_JwSlGEU% HSoO(ؽw~o!+8Մan FFFCo&@$z ۱qKC0Ahji}_߾(/uPE Q\TO\՟Z㥿mC `'vz~m#N3q(w:l%AAImљ@t?tnfKxgn{]; CGv`u u1s\aɉ{*I՟e{llSaYaznt p1Fsۂ|,Z\I|FgE=^z ׿Bcs#14CC$UX}].\.aD|ٜ2Joo7yu`s(*մc p80tքRQ5  8DQTwNws-(˛v|#:ˍ|U>`˶ENI +2N=T ? ! QpΑeoljw߉^3~8D A"p\\I7&ttvq8DN9ykjkp׽_ }O$9pcά~~ }{Bˆɡ^:X o}O稨,p8hVEQ0o18Ly(šuk51$e] ;? {pƊX; ::!HĪիBFEL7յ :;n2 GSK3^xϸ+}@(@ 'C쌳p'LVl; h5{zbrf`0{G*tǭX5t?;Q\TUt#Iw5}4s7vnVu38ԙ1/] ?߽w>ڵjI?|Igxdkֿ7_9kx $Uc:NÈmq9]jȜ$ ͨ BG-H'IMvs#.NmND<4̱0$)Be\|ErAǫ#JBO9IVWt朣.< چu @#?/U b2!  B*~Uzfa%MZe]ع{`AХ3 ‚uO1Gfffݴw?> 71%$Beq8g ?B0I;oC>\բ#Θt9GqQ TT/nmkLByfdfT<^uq)(H9{\淡(&OcAUuss&MqΑ3fH W`@,1olBSsSmrP:c&onEQpsp]n1EeV|GDeu%cI (>ܳKg͚t9ŢTukMсg9V2Mo4qE=v`nRz W=8*_/":/~;pєp8pi~<݇I;c )Zr|QQU귝x rsR2WXܜ\ݿ.q }x7FC! DA- ~xmZU7}tx S^E-iUu~ع> pݯ/;@˃A}c~_ b驧%`1QR\Y184u3lX:siKQ6,̛;\vtv<,攡 Ccs⺒/gqVʖ#''Wom~i @صw7v <dee!,KD_?`\vݸ?Efff̺wVcq-ۃޞgW]y5sԘ*t $WPCeu%jj ϻ\pA( . -b, KFQ\\ R (YrTMoos&t:_ ,Lˊ!F(bjH>O˽e^n1}qe,[Pėn7]wceEYKT$&`P\j(Y~Sܰ2q| >uk([wכ6VL~g6`(/9raŗg/~LHQ9½_O8auz4|G="Mf.xEJo}ҙ_|6 [oE]}=3N_W_/]WCE|s/>{%5XO._v,=5b5(A3`ܵ{EuM5;;088@00En,Lñ SN9˖ODvvha->yxᶛnŖm[WZ[144`01Nx<^L+)pβqܱv!rBk3B"Gq Kۍ8o#qβiyhidb| |,NavY  =h@Oo@e8Nd3|L/bv TP(_hkoCwo!pfzӦc(*(^@ x$&.jEmp3|;L]j>ȕEő>c"<2Se& (*,BIq N>i$Pj(Psv AFJG{iE]b< l A1$acH| p0rq1@ (ta]A1$acHƐ! C@6:AҭIENDB`photoqt-2.5/img/filetypes/picon.ico000644 001750 001750 00000026374 14134304207 020006 0ustar00luspiluspi000000 000000  ,PNG  IHDR\rf,IDATxyy[{ϮьF6Z@ 86!`'698؀? [c ` X #HB Z2ei}{zӣꮪ~]ԭ{ Ay=H"! < cH"! <Ƒj.s@V.@vA>.\V=]u5$E1 sd.2W ) $Y1iA1$ǐDC@y A1$ǐDC@y A1$Ǥ_*Y@g9Ⲍ$!&I118D..QS!  a&$:HP4p0"8 sp~(p".^y\SdetB DiFCeeh] b QAdz C HE?sInet;Dߏ%%(z}DC @, !syWoƠp@0QUR(Ro4PىP, $YnQL//" t@#DL G;BL0Ed@{?::LD#h[#S?mHTpW\q| L!HL֖`4:$D)$)]]&{#-n ;?־>h<1HZXЖ$Zm} +D(] hVQ2:KϹeo#amHF1@$w`x"ΚLa NQUO r[Cso/ZzI׋Ʈ.d [XA3Ǫ$ 5-mpqvmCp6ta.5v8l7E7chBg mzp-lqr8v:qbq۝3c @8CmkkJ/c [lcqCPZ` E^o\DGzR_ @8Ñ朝5`%]p;(xl\ 0~Nuw7wDD}g 9 =nk?p3-p8!1,) 77!Ju4C0 .QBK0;EoZζjA` NPN@3$+(ߢϙ†[~ӽ)'18*.u**TXmZ9mJx҂` 8BV'8mڛ SN@5$)pE~L()vSta,o:d )'p~ ʲݖ(t1NOQ%W+FnE&/ls02LQcMdNX  Ta8Օ93y߃9cH F*P]Y w2s&Lș&ozHҠǼ*TB`̐s(bJYc4X~5('4H>Ϯn9tr!0q[U\?]˯VNz0 l7p$NB| $`, KQa|a!J^Yp4, 4.gCHp$<P^PP4ppxqYz2^.QB׋"> ss?0hm=]h9 Ntt`ĉ9H,zQB\_ &I 4 :8abQŠ0ߏ[~ӃJKQ$:<v8q8F_c]>N_3`('ڂ o0h`w8aEG˯VPA9! L!&I876PNScW+4$iMZOLHc19pH0n('0 ,ZiHCȤʯPN`{vdתW2' 3Tt˯6@@^U~́z$dN{y=BW`J>'@@U,鐯9BfJH}71'@@dU-GH79 au˯&'@@d(mW+  fmiTKNHӖ_)Mѝ| ia7oz~NH ;Z~9B3vj%ќ [~!&K89B9`J.H7r5'@@sc9bJN$Eɩ,ߺOZN o~zs4 ;T5\ Ȝ㓦ShކRqK_38͉'/8ގmHrn@(Ux9 0ǁSDM` ~klDY~+9V4tuyʊ} h#F>Z~ 0ۋCM)11쮯}wNWv_O 164 .IFA˞zDx;I>[~b@N Cbj_C#~14S˛KU~9f4WN` Gp-|V HX״dtrp8uM=_v$rʯ$rs0 b_cd% .IPo3SNW%˯V9r aOCBѨ.,c,aOڅb of1'`{9ǁSh%0]8/)Y~3n9[ Pȧݐ6i8ܜC5$,cmt$OZvN{#Y~.9[ !_؈ܳ W c X k<8]rZ!Iڅw],b 9R}PEМCvarD')cT;.L_sHB BN|4| 9c B2 v`v"61]H1fn4_+NV XZ!u]>ՅNhY 1U&oH-1T&ovI XRƅ| anuaZn`(s!#Ű΢Յk r XJZg = Z9K !#HT],*9K @6B>F X.L_kb% !#>]XQԶ׊Xa= @:+؁d~!Q]8;va&˯zYLVCv$˨*&9 @"d=Џ}'͵ 3B_˓@ JDMKkfxuaz1Iڂl"C> r77ބd .IKC>F +JvaړlLs|r!1.L_c~NTcGoNۅ.L_{3|=zo @"H|x~LU]scd5fLO}-C>F}'Gt '-ud=1I!rP'dߐppݪ 7w03'`JGoΨ.]8Ydw r @.|va?woL}8N0Lr5cgڅ=7wI "1va-7wI cՅTڅ]N|]HTnL9LȜ ˣ$!0%,y9`J>< M.{0Y~cr 9iՅG 7s=]8ў!#0Y~LQ9`(sdއ|g؅EAmY~󕘬oN #8O}ℤ; B p+z9VIκC\IldN>+#pF= Gb*(`gN -Ov#%,1 Pȇ ^9M0iAd9޴EM@!@S9LQȇ Crp8ݜ*``ȧB>aA HB!Dc1pp8zQRTbp92!$]==C8(p9(1zCzGo(QQs t0Mc8҂=~Qt8xPXP7tbz=3t2޿'L-9GiI .YNS}3 bc׾}رg֢}aH9DQFߏQ=s&.X/Y(*,W]Ă @Q۷;pB%EIzQZRSŋbr,YE19zGKs1̙9S1p{s3N3^`mv~Z?c L \N'>JKJPUY9fa8oTϜ89 8xg/0$2.Z?ϗ.^]?a)z,˟~#pj8?~Hw7GEQj~Bzp͛CYi)s>{5k0cԴ_%I9bi.qIJNx׿ƺ f^Mヒg+hcbx㏣ĉ b`v|fNk5yw×_gpi$c `?Sp‘Wq]w; iikMzi#GG?9{p>+zق1ܽv-O2smW)O=\FZE{Z37w vg}[۶>@jEQs?-ElO=0o0n^_c1x7 "~=<^1ή.<13x}C{y}4:eޥ%[-n7<\.W&"$FyZ0[wO)Csk+~i]` Oǂy0++qu9.Aڛo53gܹs1iMӲhO>,\:[ uشemʹxܹX{=xy^-әbI(++õ+V3( a>z+ bnH]7.n1{1yۯ~u\\r#11M' 8Ѐz%MӻƊ30󫫱zJ|_ǟ6l<<>3~}jhyY>|t8 iBEWWceaݺ$ /:nᆡcԛwXvᅖwI%8$ ,'=OQx=\x1~7l';兘Ύ' %Za~=jWk /<nX $A!;2褔J|;߼vN6h<76lP%Ң(G6CO:;%IId"Us^?tȰ^{mpzbIPC24xo|<[[qY ={{[o~ 3 e9m~U)+ZZu.Umx~-UkGٷ,˘5mLݭ[usXě#V¶DQLĚV}h`mC w >>xP~?~biuWEvO%Ǹ8ܜrߌ1r_^w!+ ] S-;v hGM1鍽Z; 1\h*F㒄l7Y78xo6C!U_j]")1,7^gmαsޔwPQ˗SsQQ^^ESKKFFqb1~="h9!"׫j@ 1C!|Gyo_j5"D_ed~u5MzlAE\tp::;Q{DFuLp{۶>t,8Vu"@4tH0ֆZΝ,1̂{6cFU/?_H(;kƕ6pmmF6`ҥ8w_ojmņwߵenUQEQ]6ÉՏ4]|1JKM?&h@JƜY48?U?ZW4]Ey9_jظ=6 0~_ǰX} Up8pg޼;Q´ɓ5sQarUO65eÚUP>Jcm`V1cA@IQQ ,NeKXAK[\q4w].&JىP3ypҥ# lc FxwVUn+é1IڪjۊrL0$C}<)P\TYAqTmחsx}>tu~=465٢`p`ΝxKeuҒL4ecFV}Ey9 ~S9Go_m^oZV]XնhP(E1{ƌ_>Q_wnE@Ȳ0W,")*4OʜbWmqpXhT WeY3` 꾯h`ĉ檫F|] i< K8K2Vh,^? 67DK[}_~%C%N<Wi(.,MEu#Gpђ%'$ˈFCGg';;5+-+-j`!.WH*t:~fv\ &cHQ,Y,Z۶}n_u&Òݍuo~_/X`iEւ,IM=Nt2ؓS(i  pQR\nDE9-;7S'OwS 7V 4̜@=N: _?pp]]s\s啘2i҈],ntڻƒ MP@eZւ,(cc:( fM>j )UA9/%EE?ƭ7ߜP}e$d'K{ft쎻].tu,7o݊c^š҉=~a|;p8,sNU B|8!=6\8(¡󢫲 /.桥H ypߏ?<,n^ ?tN'*=}ׯEQ(-ᰪr% wxs//ǚB6$ QKhpS'M3].&L˩g3nKuX .Ӽ4 c(Q G"bR`@@ն ~V{~9pF1eK @Iq1Ο?|ː8Nx=0e$L2'NDiqqlr'Hg;;ߟJSm É c vQyd"8g\\t)^_SAaV]~b<߰K&bxEQXIV圧ES&NTmGg'F2*ǏWmp`eYV6DiI |^/>z5ֽ͛qbjMQs@NAGԑ,gjӦڶ?ġZs8GՅVb69R̞9s׏amUK 93GQ7EQ7q@9&N*Q3ҢjS5ъ(TUkG 2^- F 9fN*1څvb Cõ Mu`άY_߶kZ`QQT'NwCM 闯[|69i w֪y_]m*.ąz[g'zC۠xp6.IxѭCJ6a*n7_@>k'T T\U=c`8(.*^;h,8r옥h$9\2jʳyv ;  /">==ذyj[ɦ&ᇪڼs0axݐs\}啘2y[ ( ϙ,Q}<۷EcG,9{tUOB]c^g=qB~D5hI>rŢlC0 xX+xXZǗnQu𦱩 ߽ޡ5(Pnق۾m{5xUvb|ҡ61 2܉׮U=mxe3kipYQ p<ڷϔLë֥;|Ϥ$˲,~Ņ9?7=ZN_Ͽ2Z.^)'A$ttwȱcضs'vٓ`yK.UTzDxǰm.|a3g.::oymaWؕ6Ջn! -CIsϭ^76nīizI80n8XLuկݭ[U $ |6m AF5gWeLB3pʕxgU[B~.E~0jT(p.} tu+40@0=JK;455ts.2sBCȊ瞋_{/JKݜ3Gw݅4J 1|q%deޝ#իUf#(rk ʊ眃~cusW{wޙՂ HNl@}+x0Iʹf( f 3)]qeeY5(&+ֆT s֛o O<+-3$,+JZs [oţߏ*?Y4_ cS'M/O?O֜o^kb( ty0uti<@Y1q„G&+1eDSpdYƤ*]]eTo} 7pֽ6ظBWw&),(@y 患8ǥK'#عw/{zTtbiXsoƂ)ޜS'Ou܀sb5 qM7xCCJ$˪szCk➻xI% qʲZJ7ɑ3_^Vf 8^_āÇQ؈`m׋RL<̝=Q>nAmt=s Zس<'Ӄp4 (p:(QUYyXzy`ѢQ2v KZf=\=Xr~ƃ|I}]Fj>R,2>.Z/Y$!b```zz|R^x>^SUc47 v.5c~;Nu ߁V1 ;Ԧd[E`17d]a*/.`64 Hy A1$ǐDC@yLYQ. UIȔ]o-U˜ E[wJ !h cH"! < cH"ʼnMWH\IENDB`photoqt-2.5/img/filetypes/mpg.ico000644 001750 001750 00000023151 14134304170 017446 0ustar00luspiluspi000000 000000  S&PNG  IHDR\rf&IDATxwWV9hF9ɒe!YؤeͲD`c0^a ^e9=, f ۋY2,6VҌhrӡ}hFsMuMUu{]@ Ws}Ap1$bHŐ! C@.Ɠjmk .pMxK)GuH>' Q)/ZWEO 4Pu<Ap1$bHŐ! C@. \ Ap1)"aŚDN!0@BHē*b$IɤZkW8ףQzp0>!$D!0 @(H(p X U*$ٲ9cP8A~҂J Pjb@B@d€xBh#cEbH`lއ!%*W?ϣ0(-̃B c`H BM}L6T;<`eEXVU@Op0$Ow#aBj ___ƴwHqUcYU1^!Ȁ`M]C kWHhX45u(B&=CchD,b`4X"kVq( zB9X2{ОB8 o+ 4!hPENc@8AD\_!8O9|"@U{Od>ӞF:>w8ш%t:Fh>X$ K$90jUbq<6>,@Hx]`L#@d <$* -&cd"2`.&fۭO?Px2GBP(km\' ++aUH Q!$FX,$WÀxx&*X4 2? ,IlL{]W\80NB0DrV / p@ \h~4u |B"Tm5BN<8a0`ù>Ǣ<\@p5S{ M,鞛hhCt<BζJ a]CZz'ʦs5  jVN0;TUZOΜ'U܃dYyw͢pQ8 f AtdhEB0~&7Q8O$qǨ8J:,A}eɔ J} VYfo`Eb8k$ HAMY*K-,Y{)'>$)PUe(ZB*K P_YC1_f('$@A5uyvrĚr8S.S9 wQ,ںrx(ᚥxs}9A78L9=AmyWQ:(aJ-B9Imy!/ʒ|l\QB{ؓu7SN@$PQͫjP[^Θ)B fFZYS ˫P97c@0Mob2'pr i{~Y*1D(2!H)Q8ʊ򱬪NN8ߦY~ͬt%'PeK "Eywd H Uh7Kmj %cy䡶a$ݳap4U ]Rh9Bt_ ]2񨾤e1<h8x U*䬉.< ?EiAy(xDwZUU~bؼ($pJ D.(D@-9CSss$D N oL  À, ęHHtqjNuT1it7K{xs#-28㠜k@=# tᜡA9w.v BPC;"Κ1 Ho&$U'|` CcxbF1 pɤ3Lc;xӏ^&pBNp4 f]9ch\7X~3czN"hH&hx4u_MEtohhhCsм7/;3Lbq78!'L` 8u'e1H, mmEΤ7o&='<` cQi@,՞9cHC;bd 8o6zx" Er7 *@[Oǖ9G 67a3}hlsq*@ Dmp0!m[T%pbJf]s08ƱPM0 #7.zv]OXG;05fC0s]XUUmC5k*v G|:C>Cc[f3d V FB>cќVR.L`-`Fwp=d*V X_B>9gmuaf+-3B>ֺpMd 3X/'`] 41p=dIae`*3ĸ?{pՅS5䐏 U8؁^ ;k K![.Yڅ',Cd)Wrbk @C>FPȂՅY~mvIrl|̀—,T],*9K @.B>fCck[-`&˯%JNs1)ro&˯ur9 ^&B>GXX.zkY@D["G_`zW3i~\nª\K/Y~- r*V g 9 OY~[\r' ]8Յk&s9 F&B>-1U&˯H 39 d_pDŽZuaڏ\'u0k%;0Y]Յʯ\O {9 B>fIՅ*%9 c_ 8.l]Xd3 dG&B>10m} ĘjNڝl"jRs 00Y~C6sYs}hv@h qd+'`x%;`Duaۇ"c*'`z |1EU^.z T'伐dj&˯s 11'`И4-Ҳ pjbNxpQhۅT&˯;03'`X|%;0i~\ 0Y~] 'B>V^p0sV&˯ q{5L1.L_1h31@!S.<.L_9CS9 |LEJ.6a&˯1:'8Lڅ4c8AH,.蜀g1NR'+Lڅ_: IRls/+]UxQO 1􍌡g˥&֠4"'P''pџ`\N }Sȇ rQ9`J> r %nXɇ DR]\N@L|'؜>3a-CB>aYf{-RT!pR7|dHlƥxN08҇ڲ"0HJ8zJUgHLs/*Jq=gL-:LAXp1$bHŐ! @T lc#.YJwB@a#E|,]J_R[7dM ?7KPU {u:h \ Ap1$bH,jmNLLf?j2UrYLcd!! Zi-965R8Կ"x$~GrJ)'9q9<(Wnd9qsW"Ȭμx<x=ߚ ::F{W7.65]F8>%Ũź+~Z\EQb`?` p|K8 JF-pɏރZ!L} /:rVf;naxx֑fqUpx=|^5UX^_˗aŲzTV7i^( ^oǟI HUƈ!I44^/G/ly !/QGAEY_o܋7rm~c~ L/Ggtfkq7 }xqe߱eӂGgCXR[׮Á}75އ ׬̼:?hq˞/~2, FgWOZH&Uz8x^w[ yC(..ZKcg_@GgwZO5``is*BB82~_’j};%͛T;Kc6'# '~o|{h2g_Ox/ATUUZ\&\niƂ "q DQ]ݽ}xO-w܍144hkk?)<_1Ogl,<Z;mm}i004c'O!v<GpMcO7.8ǥf|CG?}k:Vg)%^:t bUT9G{g4\s/CHKHՍ}!O/hlk<g8yzzr}3O< .>ï~\p4Bê_Gaw 1HWÓsgr}öo2al,^Wj/hG1*v@eErlB'08<޾~CiO9|q' ;VǃRN?9.])_+}F]ex< ٍs/l v~VU/9x4 7rK3!Oݏ"99%%H$Bh‹?{Oֽn/~;|GUU!^uuQ`BJ~I~??1/61۳ |=8x^TUB&pM-_?|8茹8V~߄v鳍ŪU+fd 8vGf+?/xwEumT`QP[7cMm?=ѠCl0 ̌uK|i W x/>>goeZel2W-ݬ%Kj}] Gp9QjhޟϽkuڜswQ]]$S-)gŊeCw{+/00{K+eضyO4tL1C}>vEލ_߸ΨFG/#f?H?g 8x[ބ>(֭^]m ^6+N :s4^=Iey6o\{u[|Y;{r3 q\#NkԵyuU%ؽ()+]\Hڿ|eH[7h֯/\Bskیa'0vͪXNW\gyY)/ӵy04X<SЋ!mmZ-ddӏxzrCcع =<=(2w(..FJx^<9b8;kۂ|z;)|)%*˰uӆYR Istv1޹ &:Τ*u3Oapp.|5ksffXϋ;c'&lSg=;+^^V6X"ї^ypn۴'$wB $c&営)_U+aՊe֞e 8u j ɌIou`l,k۶F{Vu\\19~vlyƒ6m@qI{ցv]WVU"jC"ףs_mW PXukVZ;!)$*+ʱes8_> nڿw^@J<¯70kU+{<=7NC&TUz[Rԫ]=x`-fygF<߿ߕcֽۖq&(>k /2xMRmF%G $;mAAA>Ȍo${f .|QYg L&Ս^ }ۺ]TUb捖 g\ߓE[x5!^=8_5kWaYݒYؼ>-ף4=8tcG)%1tul}8I8x=v`*Wm IyGU!kқV,3f$AJTUV`kӊޱM3dq<gWuRH$ɌH}>o?/YƠ&9y~?8+CEQVZz]ؼiiC}{vч?eȒgK]GAAA#@ 0k~ݬ~I Yvyy^7؇&ٵ^y޹͸:W圣D."SXVW-XCn5kQSU @E3I3󡸸5UXbl;l–M5۫W[/C&kz<UhuuK0X=i&.j[W|lBo^w=B~ QR\"_)t1ك|"%n `(nlܴ+y?>~]#ONZR>i$ 7qr+8;OZ;ub=hXl)|>oJCx >ofOr!ϒ8@[ķUUI6lHQZ\+y)xbB(s]gnSqj&{ι~#$bi];qJ^ CJc6܊>>k1)ž=tYqz9#(n$$={߉*] aO5w]׿.iЕ l?/oqx(>W1:2Xq@Wţ/(k_jآvS|UsLNqb_?Aq~?n^J__'kY)Q]S;rꌮ%τxFw7Һ% @Bq'Ͼή\_fS! 2l_1|}q^}F(!߄6ɧOu5Xjj108K[iEa zVGNi@rG%:{\-8C8U⁏M 0qpR" _'|7,ٵEE-6BKse>ښj|[h0dʟ*+-ww7 l$#&(,*goو/[8raU^/ۃ>Ar~pEml,^BH/M ud\YRBFٵ?~yNmxѕBٵ{[qnAiy2_"LqGtHuZhnG"~ׂ{%fՊe w>6*.oK7|^9Cbc kWī=mߊbR%e==@2c±p=z NXCD*zg묎kzLXq1IEWw/::?QǴJyy(/+Œj,Òjj,Ǚ1F5n=Uw. J9Uceeeشyv&^%¾@2հs} |bHŐ! C@.&[EZ' ǣT/E^f;ABQ8єۥt\h \ Ap1$bHŐ! Ptxթ-IENDB`photoqt-2.5/img/filetypes/rgb.ico000644 001750 001750 00000026763 14134304224 017451 0ustar00luspiluspi000000 000000  -PNG  IHDR\rf-IDATxy|?Ȗ%G;>sҐ@{ wKn[B[ _r$RcR#Ķ|mY$Ky~2&5#i$hg=} aHdw`$& a`& a`& a`A۶bkZHTJv_ B8¡lުoNVԬ7߀(& B]$" 0BMl00L 00L 00L 00L 00L #kf!$$+#0PB((E ?(fv 8i06BՊEȴZ} @i؇G119 Q@QЇ=6!$ 㓓p(â|x0T @8\.هNoH l"d3` pwp~qxtd1d_F @0:@}@~ 8p{<ǃiF@! }IHEOi*0x78?Q !x78Ī43T $a`x dCHpN`xl<]aLdsLte?|#fcxllï%|~?G57~`Igp! SnF' `qǤ@c#C0Bx^M] !pN0'+ `(t JcִP1 yEn7P$Q3L.tVx ۡZ}\!}E}/ugH&fפO1 ;Cp`dlCl#uרDIՍ<^H~ mPJk': P4SnިRLOvWT;&`b ]ZEpnJb6O94:{?!d:w<K>osՒ2!ALj`C{O! <Bi[5d5âJ8_7# &IR %f,J)VgvfI`E&  Ӛi`2#i&µ]N4M9HY"ٗASI8/ٽKj[~# #!ml],'0&nc'0 F Z~51A)E;O`&woqNM&8?]g`9 #kjA#B0`ąPDY~#%2xN #.H˯V/In0T'Tw Hi0TG* 0`J- 0`,bjh FO Ce `PY~9&Ѯ70~L1UoTl?&Y~4j|`FL,^ [~#H9&ы7`Y~#!MFT-)`OWH1BN #b޵:R"sLgo4rN #"V7rN C1bT 0`(&,9 (.I5o)0>N6H|B$t;:H C0H CChjkd"><35K!;z9S[N/1ޤ7R)'@Z::g]k!u8֞kjbo$RN  dljweqohdwSoH@J @@qց~=ƞƛT th(UE41:^X07RR!'j5mB0󡱵 .sjbDo4='r@kj 65kB.Zm]{=߁dwE='rlk3 W >}MhH9u`pd4%+Bgk0rM*F9BӍK)EkG'GR)!t UM: B019[GaBl kVt/ f۫NLǃVcم76B9at/hĄo-BF'cf_u$ 6t-sC>PܠcԷ 3˯:r=: V ]8ha_IN@.R.1˯J)'K \Tم7>%'KPQ]1FЕDs¢ƇvJ0rDn O׏nۅ71h='6(ۅ71h='%6е]Y~ !hN@V'ҩ]Y~ hN@f'p!7Ь#8Bg;]Q&-4+ B^ۅYŜ& !xu0М$*~k0j4%B ģ Mmڲ 3˯RN@SEoO\'p`hD[vaf@4%ă]Kvaf&!prst[B>R 'yW$t2˯&;9 lȧ͆@C>׌]5yvwY~5lN/y9 lG312knI]Y~A@rI-|7څ 2˯> $9 ! \vUf_ %a()0if'> ww'.,C$'!'pK'0d.z M"¬ʯItN ǐO`nua5hf? $D5GJvW5 $r?@*|T5pʯY~uO"HJGm!؅Y#Q Ukx 3oꑨ&sC>Gp`ȫ 3o C㼟@ C> 4ksAoWVRi.9 @|ӣxǻ_%9H!x ") 3˯1gN@U0bGmڅ|b_ !'96!pcՅטt!'9څ k<PEfC> ă 3˯qGN fxOȇ(hHpY~9 4,a!1[]͆I If50jX>EC>소4gεp\|:ކ%(CFzzLVF,8!8{ 9|G8.Z@@w 0G@B> 6P#'b (a0G (a0M 0&TB+ 0&ڜp`hy>`0 AYk/3  9Yhlɷ0*W`& a`& a`& X22`6O!^n'lY?;?xGĻ2!KA ~4k;-<ϣ8A@D,!!xZ-VdcѢE(_"愉AM?`㭿W_ODd?ʊrl߶ Jxv@CG׾q/ηD! HK3jD^n.JK +W,Ҫj@!CC;>8ȟ(+?k غBFFGozB`Xh"Ԭ]/ۅ=wcey>nB<샃8|E<{E侤tlc66῞{jjpp ףH8ԈM_H*K}mGNNNLflc~#)\.|Cܔ9[7hS55WG;:W^Aْ%kU+UB$I«1S妛F]CN_Cv^#| qƦf465Cp'?+dRau LD{G.ٺ5l@}}xꗿ?rp$2<$O |;?$=zTSCZǃxx[Sn7j#8iD@͆~ṭB<ぇx\՛t'O<{cc㪉8\T?V[&t:wF?QFSx?i%CMg?G~t^q8sCCQ}ԙIݰD~J!xw/'O< xo-UvEꢎh>8r)G9|%U8lFOvI_ _8}ppgrB6@ ApmK[Z[!*9xGcs3?+>Kwɟ۶l$IydefCw܎_qUWΜh(j^} أ :DGq*꫑DZ6^B)q8pX\\3ve7+:FFFwIi X:0Э]O<(۷/VJ)222pާkʅ(FrqZZ[ݚUe&,** ۮqLN:5eR& I*+ʱ|2E'L|aoBxMouoGE,)-Cر}{҇%%Rv$'7|ˆ6R,[Z][ ]]DjU PJa6QZZCql8wcXoU(&="sX,y>z< &++ k׬bmGp)60<ÒaQԖJ !3Ptk>p*+U{cSJ5q;&(-danGcSsvKJJPUY ظa}XjkSְ`(t|am 3g,jޔrJs+rrƦ& aۭ\$ WB^nn'O&DTmR.S χQEm򑞞 ):^YY֬^>y==x7d`-QIp^6[qzC$-Yʊ;֖r 0066E*'`|brrT2d|B%A}pѤ }۱nڈBt:Q/cMOKo9Xfuϸ\.7Do+20EqxQtvuɶy6nq ްcl|B_bҒ>cQ1霄$\4Ndgg(23#^AWwH+/&A g cuuzQMh&3B Ӳ?ݖVWaqqp5"33.kϝ[w)`0A%IBm}=~cSd2`||\L&,.^%gU;jݟ/qNYV]$TWU- ~nMXZ]@oOKl Án8y 'NSahҥw**t:L&re Q~_GK2r/9=[ng?I\{5Q$O ێ8l\\ H ?+W+>jq}ɾlb{2)YYkVP)[q`fhxÈ!%K8,_ l݊_~.ٶ yyD1>q6 a̬\۸~N sFzɺ{p )8+BI&fJg=>QEp_~#\_R./ Ӛ,`B'dcee(//{#`HKK S|K+zzzv&Fd2a/ {2 6B0v͹yLfhbnǀݎ}w:~ۭQXP(Yy!ӊV֬^ܜH˗} /3Y.e,!Y(..un>\wo&p&sX"vqu xWp߽`m=\appg6ʶݰa=L&EJ)JciuuX$ nMS & @Aͺuꗾ+EzzDQjt9Q!-!==}~(%I_݃~\E#M΅}p̎6R Պuo=ΉJC)3 Hv8ֶ6,! Ŭ8xmhUW^6 Jq߽f% yСD2eڷ`\$(BxJ)(-)mz,0q;:`kmh %[9 -@0lR|sw#=La[Z\f3֬^ݎSϤdxYY,Msc Hkî;!ttv*~H9æ~?^}5]\pnfSdCC8sQBޫ99ȝt-m$IBͺu(^,7sϫM# Bf};p15ֶ6:"+?,:+k[&D얯{u pY8_Wp`?s7al͛uE$I5W]-6)jܡÊ(ݨVpd`bb~!?q2%~ B0==䤲%%%Nn~>??7mDFFV mc8q捛`0J)*zl6>_p xݵ|җڟJ)x D\ $ʗ ׋_ۿБ}b`iuEז8 (*1^]U2hJBeCS[OiI2JnhP6 8wzcc g) fGFW^_8P}$BgW^z~Dvl V,[6il}pPjjEA+Mڞ:}###]ds I%㎃ٳ7O=5ǖf*|#wGxCDyY!I"&Ntޡx߼y Aץ1`GyΝ(..hUE sJBX$dbZBv[[QRRy& p?EInKeNQZe|bsssq-APB09DyXnmT 7mk Ԕu DZg]x~CpٮܢϿpDF)EE{P^VS$m.zrή.dQYYzaMj6R&a曰T_]\(q%x#?//aC5'B\k'Bpԩ;B_.yIf*EMХgC=N$aiu5|G@-7݄Gz 9+Vhzgݗ£~S[oټ9}Bcmv;vC6M@|A<ǰzʸ? k4'yyyӟ/$֬BFGGq)`CMMLJ), l(X]=$IL IV\n^QN<7^uWqmX,e/~$6nXϣӿ|KT8-mm=vEy9b38PЀIu @)m$!IRԵx݊G^ĠLAK -Xr0<?#| 3G11P +/7ހnt%TTq0 ,V rsrQ^VkVc%۰ufTꗻ^aw Qv dXTBh@n8w]ظau+$a?Ƒ(E0g!DQ5k݇D{G sl6kcwٳx?hm-l6Fx=״4dee7nݗc(*ŒRf|S}p袒c~K'3BR',4qF4E[oǚ!z:LS$-U6BcTh6wZꍍ X*]FF``[G{_Pu3.L'i`$]n>{093c_GkO;q[ @c(]gP)@iq-`p?rWCCB!JJQ\Xd!PQZkh+6ve9'0f#&c t]tylB'[kDN ^c+~ȲR3Qk$廋)_=$rvXOG1.b>`q3܇@ij`5rIp8x${ANe9'cl}T}A y2x:.bĦ^o89-1cCw1-.ty#3=ǁ_#X='`;`az6sbN^&“8T'-zzNVLZ븈i]sA\G\8{ɖ_#X9'`+!``tАa1`':{#˯~s FcG#-KWs],` Bc` 4k38`.7D_Xu=ee/lEfUy<@4F_#Xq= cxb4fep%˾C{54Dw4rN `#}}ȇgAq9S BvffrN XV|w=eVo oJNG{e'xmjf ZYzIp!؂xNX]xޞvaf'`I3ԗ*8&f&qFvaf+,%zB>ـ36 7X!'`0V?`fa,Yg9'0oN?%`E'/ eKۅeYF,Y9K ^S)vZ.LU~s0T'V]ZwQ$o0sNɐO6fh+?g5'`3 !l؅VXr,asMi .q) !֞zL+TY~󍲞@T ,H|d)L^],L9 @B>跩  6\ \I'p01cd5r_OT OX3%مk>̒0U֞XOCIŒ1Lΐl%'`+-򹜧O6K.,2d5#f ]Ƣy (9zVf>R\BY~M kN J>V@ -UΝ]8a"˯wN ogYC>Zu@d EoНd J'䢺0Y~Ir9K|2LN Ҵ1=@N@|gT&˯Y n= UC>ـspd>^O 'r%:9y0c T2'$ :Z ;v蟌LVeT2'h g!L.|&M0Y~GrY=[4OlkrȚ5 85d^QFX"91vdeW.7N_ۑ@V !T]K]Xd;'&is@'$ k _^XBN p-stK YՅ8:Ș DLXJ0Y~I6Ș89 du9̮'+B>ف1va:92@@!؅Udu6 %!\ (v(ζ_ƦBdu0 rgzHIp#gIjQ+J5pZWmB>9#Q2ʬC L#ؗ~NЕ)S84'(LtM!.XPȇ I&r`Eȇ "$rF|;i% 4 W!+a4'IAXtr 2Z(ChN@ ;ҏ p\=! >o&ψkREA3vTULy ْA z'C@  A8p0$`T}EEE(@6 KNU{/׷j-Ar >JNmCpHe _թSY BdߧI@p0$`H! ڀvDO9%#"魩ohV7O|7KYIZ v@eY,q|>$'ss'3SƒbFo<`aaAy}rMz=C,C4UfgHp\OϚ˲&6ԮdYFuU5ݧL@ZNnXn H`g])8|1I}/\._{ކTWчჇ|>66nGeÁå˚mjkl$N?ֳ:cOԹ3jJ\܅>`tlT~#y2_Ou{V0h---E!z pk19FJG&1O[.jνw݃y,+2ދZuta,o];` Tn߄;vud.`tl,,6c g/D$I?~ я;n{xRM݀nsttݽ=0y\O# }hkoK:Fq=c/=eMKK:p>joKEEEhjhTnd.zY !pYhc39o@p˫,1C8wq". Eȳ‰S'f#kk5Oqqշߢۜ h<Ҹ\S!ЁAá#pV(O:H$s@G;zzVƮ;[8?ajx~|{6],cRmhy&&ѡa~~CbQ0q$:h:҈UXu:{{vF}}}^~G:УK'k}w݃}L5سj M5]o_/G5 Wpuj۽{&o@Bعc'lڼ곡a\lb`~~~M/|ӑFwȲǞ|ͷߡi/>h<ܠ641+*a!юiն M(eaoZB8|ЪnsjjvqSѴ"Fq\413*ԙ0N9tMGQVZ\-btg‹?݋cuWF8|j[eRoPSĺgiPƥՐD4?/$IEcsMGr4Kg,4˟?44GԃAzj#kɠ]PW4MK16ZyeE%<om<Ґ_&AyYyv$2,T]J2z#+e*E_+߂_Nzض[7o >ϡjo{[ӞK,رm{W7rՏŅ5?g!5^`eǶؒA`Y`XM$O~Μ? P^V;bt$#_Р\k!@eE%86Ě FFGۣGPVVF#5 0QSU$n|:c 75mZϝݎ?-x  ol@ΗJRchw!0Mk !2Yȡæɲ'y =Y0*14nP AM/Xܹ6?Rng]:|!0rwiFaal۲۷nW7675,Wu3B\@'nbI7ulJ@SA`o#)KkEeTWk+bn~u"Ѯb]%w 0,˨5禦z'}3Oei͍M7 gW7a>lx@kHYi7Xn}gϟմVchnhR̓_5 +ALLN~iI-  c8 2S[6o;r'}x_TӶ^8oj-hAk@2# ;u 0NjƦ\""TPP{jB<ΥiHen**~BwoGFROXi too}#gٴ/0Y:DJ`mKޡ= $w&Q@dW*tu })ۭ_*9Fwg=;wk1_* ; nL14<_7H4 x_^x}wBBݩO@4 23wyLkp8|qg†B^ BcZJU|bo۟Aj׿~sþ#(*JLT+/Ǒ.jFHȲz{= x, P׳e35 YַW?dh ph8A@Bj^ME5$IO W @aaG8D@@@$EeqGES\(k,5YRRF*j`HXu{}tO=4tu(TQ)Jݐ\#2ylKLhi9EUqdY jj CBuؽk~߻UUU4hzi,xng?mh<Ҙswʛ^t\!Ҥx333Xs =>6o4g!U7C!PWhTWAN! *ZK @7 *7~xUg \e)؉9O y\. W@@Oec%둅Lwp?x廣fBrsҐ@{ wKn[B[ _r$RcR#Ķ|mY$Ky~2&5#i$hg=} aHdw`$& a`& a`& a`A۶bkZHTJv_ B8¡lުoNVԬ7߀(& B]$" 0BMl00L 00L 00L 00L 00L #kf!$$+#0PB((E ?(fv 8i06BՊEȴZ} @i؇G119 Q@QЇ=6!$ 㓓p(â|x0T @8\.هNoH l"d3` pwp~qxtd1d_F @0:@}@~ 8p{<ǃiF@! }IHEOi*0x78?Q !x78Ī43T $a`x dCHpN`xl<]aLdsLte?|#fcxllï%|~?G57~`Igp! SnF' `qǤ@c#C0Bx^M] !pN0'+ `(t JcִP1 yEn7P$Q3L.tVx ۡZ}\!}E}/ugH&fפO1 ;Cp`dlCl#uרDIՍ<^H~ mPJk': P4SnިRLOvWT;&`b ]ZEpnJb6O94:{?!d:w<K>osՒ2!ALj`C{O! <Bi[5d5âJ8_7# &IR %f,J)VgvfI`E&  Ӛi`2#i&µ]N4M9HY"ٗASI8/ٽKj[~# #!ml],'0&nc'0 F Z~51A)E;O`&woqNM&8?]g`9 #kjA#B0`ąPDY~#%2xN #.H˯V/In0T'Tw Hi0TG* 0`J- 0`,bjh FO Ce `PY~9&Ѯ70~L1UoTl?&Y~4j|`FL,^ [~#H9&ы7`Y~#!MFT-)`OWH1BN #b޵:R"sLgo4rN #"V7rN C1bT 0`(&,9 (.I5o)0>N6H|B$t;:H C0H CChjkd"><35K!;z9S[N/1ޤ7R)'@Z::g]k!u8֞kjbo$RN  dljweqohdwSoH@J @@qց~=ƞƛT th(UE41:^X07RR!'j5mB0󡱵 .sjbDo4='r@kj 65kB.Zm]{=߁dwE='rlk3 W >}MhH9u`pd4%+Bgk0rM*F9BӍK)EkG'GR)!t UM: B019[GaBl kVt/ f۫NLǃVcم76B9at/hĄo-BF'cf_u$ 6t-sC>PܠcԷ 3˯:r=: V ]8ha_IN@.R.1˯J)'K \Tم7>%'KPQ]1FЕDs¢ƇvJ0rDn O׏nۅ71h='6(ۅ71h='%6е]Y~ !hN@V'ҩ]Y~ hN@f'p!7Ь#8Bg;]Q&-4+ B^ۅYŜ& !xu0М$*~k0j4%B ģ Mmڲ 3˯RN@SEoO\'p`hD[vaf@4%ă]Kvaf&!prst[B>R 'yW$t2˯&;9 lȧ͆@C>׌]5yvwY~5lN/y9 lG312knI]Y~A@rI-|7څ 2˯> $9 ! \vUf_ %a()0if'> ww'.,C$'!'pK'0d.z M"¬ʯItN ǐO`nua5hf? $D5GJvW5 $r?@*|T5pʯY~uO"HJGm!؅Y#Q Ukx 3oꑨ&sC>Gp`ȫ 3o C㼟@ C> 4ksAoWVRi.9 @|ӣxǻ_%9H!x ") 3˯1gN@U0bGmڅ|b_ !'96!pcՅטt!'9څ k<PEfC> ă 3˯qGN fxOȇ(hHpY~9 4,a!1[]͆I If50jX>EC>소4gεp\|:ކ%(CFzzLVF,8!8{ 9|G8.Z@@w 0G@B> 6P#'b (a0G (a0M 0&TB+ 0&ڜp`hy>`0 AYk/3  9Yhlɷ0*W`& a`& a`& X22`6O!^n'lY?;?xGĻ2!KA ~4k;-<ϣ8A@D,!!xZ-VdcѢE(_"愉AM?`㭿W_ODd?ʊrl߶ Jxv@CG׾q/ηD! HK3jD^n.JK +W,Ҫj@!CC;>8ȟ(+?k غBFFGozB`Xh"Ԭ]/ۅ=wcey>nB<샃8|E<{E侤tlc66῞{jjpp ףH8ԈM_H*K}mGNNNLflc~#)\.|Cܔ9[7hS55WG;:W^Aْ%kU+UB$I«1S妛F]CN_Cv^#| qƦf465Cp'?+dRau LD{G.ٺ5l@}}xꗿ?rp$2<$O |;?$=zTSCZǃxx[Sn7j#8iD@͆~ṭB<ぇx\՛t'O<{cc㪉8\T?V[&t:wF?QFSx?i%CMg?G~t^q8sCCQ}ԙIݰD~J!xw/'O< xo-UvEꢎh>8r)G9|%U8lFOvI_ _8}ppgrB6@ ApmK[Z[!*9xGcs3?+>Kwɟ۶l$IydefCw܎_qUWΜh(j^} أ :DGq*꫑DZ6^B)q8pX\\3ve7+:FFFwIi X:0Э]O<(۷/VJ)222pާkʅ(FrqZZ[ݚUe&,** ۮqLN:5eR& I*+ʱ|2E'L|aoBxMouoGE,)-Cر}{҇%%Rv$'7|ˆ6R,[Z][ ]]DjU PJa6QZZCql8wcXoU(&="sX,y>z< &++ k׬bmGp)60<ÒaQԖJ !3Ptk>p*+U{cSJ5q;&(-danGcSsvKJJPUY ظa}XjkSְ`(t|am 3g,jޔrJs+rrƦ& aۭ\$ WB^nn'O&DTmR.S χQEm򑞞 ):^YY֬^>y==x7d`-QIp^6[qzC$-Yʊ;֖r 0066E*'`|brrT2d|B%A}pѤ }۱nڈBt:Q/cMOKo9Xfuϸ\.7Do+20EqxQtvuɶy6nq ްcl|B_bҒ>cQ1霄$\4Ndgg(23#^AWwH+/&A g cuuzQMh&3B Ӳ?ݖVWaqqp5"33.kϝ[w)`0A%IBm}=~cSd2`||\L&,.^%gU;jݟ/qNYV]$TWU- ~nMXZ]@oOKl Án8y 'NSahҥw**t:L&re Q~_GK2r/9=[ng?I\{5Q$O ێ8l\\ H ?+W+>jq}ɾlb{2)YYkVP)[q`fhxÈ!%K8,_ l݊_~.ٶ yyD1>q6 a̬\۸~N sFzɺ{p )8+BI&fJg=>QEp_~#\_R./ Ӛ,`B'dcee(//{#`HKK S|K+zzzv&Fd2a/ {2 6B0v͹yLfhbnǀݎ}w:~ۭQXP(Yy!ӊV֬^ܜH˗} /3Y.e,!Y(..un>\wo&p&sX"vqu xWp߽`m=\appg6ʶݰa=L&EJ)JciuuX$ nMS & @Aͺuꗾ+EzzDQjt9Q!-!==}~(%I_݃~\E#M΅}p̎6R Պuo=ΉJC)3 Hv8ֶ6,! Ŭ8xmhUW^6 Jq߽f% yСD2eڷ`\$(BxJ)(-)mz,0q;:`kmh %[9 -@0lR|sw#=La[Z\f3֬^ݎSϤdxYY,Msc Hkî;!ttv*~H9æ~?^}5]\pnfSdCC8sQBޫ99ȝt-m$IBͺu(^,7sϫM# Bf};p15ֶ6:"+?,:+k[&D얯{u pY8_Wp`?s7al͛uE$I5W]-6)jܡÊ(ݨVpd`bb~!?q2%~ B0==䤲%%%Nn~>??7mDFFV mc8q捛`0J)*zl6>_p xݵ|җڟJ)x D\ $ʗ ׋_ۿБ}b`iuEז8 (*1^]U2hJBeCS[OiI2JnhP6 8wzcc g) fGFW^_8P}$BgW^z~Dvl V,[6il}pPjjEA+Mڞ:}###]ds I%㎃ٳ7O=5ǖf*|#wGxCDyY!I"&Ntޡx߼y Aץ1`GyΝ(..hUE sJBX$dbZBv[[QRRy& p?EInKeNQZe|bsssq-APB09DyXnmT 7mk Ԕu DZg]x~CpٮܢϿpDF)EE{P^VS$m.zrή.dQYYzaMj6R&a曰T_]\(q%x#?//aC5'B\k'Bpԩ;B_.yIf*EMХgC=N$aiu5|G@-7݄Gz 9+Vhzgݗ£~S[oټ9}Bcmv;vC6M@|A<ǰzʸ? k4'yyyӟ/$֬BFGGq)`CMMLJ), l(X]=$IL IV\n^QN<7^uWqmX,e/~$6nXϣӿ|KT8-mm=vEy9b38PЀIu @)m$!IRԵx݊G^ĠLAK -Xr0<?#| 3G11P +/7ހnt%TTq0 ,V rsrQ^VkVc%۰ufTꗻ^aw Qv dXTBh@n8w]ظau+$a?Ƒ(E0g!DQ5k݇D{G sl6kcwٳx?hm-l6Fx=״4dee7nݗc(*ŒRf|S}p袒c_^~gWr18$p8 ^?vrs](*A^6 ZHℱ4@gzhpXFss|()Gn+01$qB]--~r~+c3( :4ÆnlH:$q󵣶@k'=c$uu>A~znTHb   5`ԨbfI@1Ԇ~ 2nD[[gZߛ07$` mF8ddFlB{{DH $*D!z~/~^ôI+8$*H#GZtsՍFZ3 cs ~?A0E U}# @?Dz?/@O pX3wIRtGBߐc mmhopX;pB>GmP6@JE>$~Z}DQ8:Oo @ЋH_B0G4l%QBu!8`0l-*X$g+)5]!2SAd)$)3kSN%s<؈Q[LI"yhwm/kñcD~Emm$Ip:#Y+aC DEǴ7ݐ169rbtA`mFsq$^0l:"g-H 8C!;;$ 6C-1 LcxZ"nЊ#G4 H>p8DCX(nPHBEE}9ޮwHNw]Q*/ftWc GxaՍtcx 2տ?oCM b@Q0b` DCe+I!b=֧7a  Y#v[΁A9v9~ד sE)&z9vp5X7Db h spi Dg94X~c?6B#98묡NU\s -qr 799A9(0|x>{i@t, fF$z?~Cӊ@pa ưauxO9?aMgN`K$8m'7$DZH7>PN7$DʉX~[n R-],QNdHZo̽I)#xE9$Di@@7$DJ۞6oP=! IO˯^Ǘ,S="$ct3,%I'YJe I%Ӗx X T`+Hoe|SkZwX+f'`J`S}Cggv2t.XF Nc8~eeeMR{ s߇U-b PVVcGþ}uekOyʹo:0rNTydQע 0TU5!%c7v0DW+*< Y.L0jN7Ny5c@8,aB1jNCس@rYc]vedM # /ѐOc^µ G, @ar!TQGyLԔz 5}#@j2,W'US^^oUq&C )|RA.h\g7DאPOI61tt{dMF'`H| .Lb;SǕ D߾# 7!'`89#e CUU#m̼0I{֡8D, !|dM/z ^IEw6],E9] @2C>vaft+a&ocN@O*`ۅ#S-d9'T|Rwߞjv*+SO@wO*݅VO@WO* .L_}zt|RA.dz JT1>v&˯>KN@K%нpfW!'qЃ],F9 B>&j޵+3vaL2*z A\m&˯1tN cאO* va^si#|MtwڅkdҝH1lR0c ˯H-m`ԐO*]8vaA_zi|R$.kҙH! ¾m@_Μ@Z,!dmM F_󑮜@J;>蹻p?6Y~Gr)T1݅pv巕,&$9 C>.\"_7O$N:r)+|RA.|TJ~4OA_" uu $]IZݖT*V $ *D &'4r't.ܷ]v& $MIمi_둪zI ]#˯5IE=B>s`:= $;'P'D{ر^?Y~-Lsb"/Ozڅw8A`$DsCv$dNh@!}F$3'P'3#%$/'Pȇ 2Or1 |B$@@!XN@0p0|BOtB>o*+-Wb|BD yT@Q(Cz'ޜa/JJ +ƒ\8 D!Áƞ=5&A0$aaH!  p]t? Nw FUv̛7D ( kּ{vvj*--qBL& 4""JK?WoրsY!4 T4 !  C@ ,LBJEԲjyR6i}Ŀ~" @Ȳ`ҏt:alHf!+˙~1B!B3re2EAggP^f.BCQ88q  ͆[׿c LL㡇~I.w >˗?u+2aԨPrg?'l۶п8ɲӧ@O+AP^^|mm3](ڑBnn. qi1jHy(--A`_%FHb1ׇ}kҧhCKOu|%c޽N1_u @p:(*s= 'OS1vpH4B1"͖|ݴl]eQFKnW=K/;To+1f,[Ru97bڴ}NߓM0D]]=6o͟q㍷{ǖ-_x_b`H (香6mj[˗B{{ccXljۑ#G`;t:2x-Xm̙s7x9ttt@`08ҥ w7?Z4ӆ ƳϮT nŘ1uS6 =Nf5$DeL2gRmcٲhnj,^ƁUmǏyna< ºLwEאÎ Q#U~Wxföm;+Qmt:h| >,' $ G76}AJpݰJdYbT,x5:4c ~O> MM^>̘17}](G⋯ц6@cn O 9Hc)ƀs?¶m;lVz<`!>S|'=xp.]ܜ}6ۅu*6444Ǐt>g0+$1 2&L_i}hP^~?+1lP,Yr7s/fͺ&?e2Ј'\z oҤ˓*lc#E!I2PUU>/x<[Ss۷gA #//_ 0 6ĕY-[ks¢eXm׹\YXn u~E!E3fi$&AQuXU߽,xQUu@;|r%^{̜9]7M7 i(bĈRMm0B0zA`"8={LڶV7nVm?dH,Au"nߍ>z9 cɒ}nկ";;['s_~bF%@9p8HzA3( MoڶSmwgcKI7dYACC!0s\YX.1,l6{8QMVWhj!;M3^Y1nwp$|slؾ}v\2V&*V;]taLj u#1z<ӚrEEQ~ ӧOL}@OL(5:~=)-ErmxQT4,8~ uؽ[ ;%%Cp}wF@`bᥥK`i~y/Ag?{,$++ <W\ǗnL,˸+p-7i~͸qw>BQ>b%//?.8NL]8*MpiW&_?"6L0+W>{^}0'|.Q*+|cXl%Z[bɋ#z,^L 8p +V}w(m*Z^v#;ۍ;mm~ Fh Hg}q# aqWǐ!Ex`b(Jdj|6M;+^/ 1s4$&faXsg^|W;NLxN W_}%O ڵ+p?\|tݺg^C_d.[^oKR󯦭Vt7eII(,,/~Xhӈիj,ʐ Aa&lWնq#TW# e3),'?S4w>],@(\ӽstDGcٲ?.yvy -P#䫶ollƚ5 ,` H YG`P1v{bksرcjѣ]w݊n]7M}kq|+x]նm{ QT:<2[eezڌpڶɋ^XK~ EvOzͰl1ޅ 6ij_R21?oV ^9jxu6mIXQsΙyYw .5Lw7bNZ hhhCgߍ_~MM^QAS!/fl/~jagƵm x׿~ڶ+cΜ1iǩ੧*_T8vc޼p+57{z: `ޟo ~w9r@{W pIpx;_[o[|}ƏSAPSsO=یyࢋs",]@Sw!L<SL>Ž{h h$cǎ2Q_aÆba(, ÎN444Сxce](x(+ۧv̘']Q̘17p86|&\Gp9_>jmnn /%(D!@QYy0)ǻqygǴ)k֬Smkяgp 9n-> oۊ]sGʠMĉϾTm1oLt9mdÁ[nALUwcQjS~p=E,c٪m%IOk2Xs|vlMO^o V^yk4+@aOk& 䓿aU`ɒ((,0 ஻nŅv߾rZjƶR^{5Ə }nZ ʞqHGLchn'Pmc+c*QFb;!W֗^z=c ln^z@Ћܴψ?]vQLWO^{-_6 މK) 73NRӈW=#9?رhja]4 I0ưdxG0q)'?a¥Xq\4ݗG3/hy-;s K{mش (-so$@--4 B#'[/Wsqygkލ?v;ƌXnʘo7a +VJն_<I,2N 7|j@O<|O-s%0Y31zoذ ۶,"rEQP=AY>mߢ-hoo3o."7;w'aҤPZZ|Uf!ąl9.좤t:,:EtvF܁с( F(l= u Cw0oݯ*|s8C>I% *?WBL5cA`Px>444iDK~;$I.B~~ d QuչKlf4]յnDY #U0H|҂+G}cA`Z ETMET^!|#T  l"BH ! O ցd{KPi ,MBD(Wb{/aMw[ ERJVAtEg{P!4!ZvRQ@j۲Zn;]t]`O?NTǰ4P<>*{9hB>>Bdv/z G y'bX w%KE*Upg&m,6֖p\)2#EY`x6m,e6sۘ{cug2s`!*Zdv>X:īy?X  GE,-\);:,-U>4`0@*7V D| ۻ;\1f-Âx Unz9]¾1ށ%wLr=8,PV+˺ڋ_@wpjkou8*KA!XAJ݃=hBs+5!ǕcBŸsP5a !4P4{XY XL /H(H)v)w'"0cm='0.v-і>TEGX~l NzqhZvq]Iv0#9#Xr޺ݽPHEzo -:F,|ah D,{8 X1@P=Wܼvp?w~4n л j_w/:/'bk7RA+UBRcE$ۓAg{P7w*Dn{B zDIz׮\EOKEP:>BE@@&"Hw E+6VmQ!{Y̿^ģ|yL")!$ۓH'i*jtמB(!DaD#QD#QDBa}0H}F׋j(3 #,SEA,C<7>HX~[)9 pE@N/Tu ( 8'.,LKP2R i  c;wro9M  c+o,\90ba9Xh巡~8'p c B3U~[N`U~~,XQpH~ ?* c)VWmE9 '3x 7X~%92bmr% x,1mzQ`'X,p8 NNiZ~=d``ƭFZNi [~=A 0Mo)'4W,8.`^s1:kLK9ްփEdz!Tclj|`}?X~ 0^rUS!*fm FG#|8XZ l~˙O^F4arn l湯TnlӜ?r8DdVRBq9?'{ "lU BU_Rf^Nw[՜%"JE|~RRH2Nw(~ ZTUws$b kK>v$ojz9ō /^i>}Mz%zQ O@DxKD8<>ӟ#_<쉴Z~9 ag3QV+.^.>MqR&|-/Z}6{N(X^W)h2 ^A6sB[k V9.ǖ9 x/' ", 4۔ )U 1@f{9_ag?3PND(e|s'Yto- <Og`37xvaUS^E–F~=FnRʩ]xg_C:w&PvxLQlP\S 3NTa˯5(D9/'Y8/cNhqic-╜'ِ՚sڅX~3{V'@UU|Dv%w,.\]-<) ח[X.>]-⅜(൏l/<#|D]iNN?'LȧX_tKOۅHvܞ 5nSڅokq~?V|כ޺ [~[s+C>v.3ՅTpkNW!;zua/l9Vlm9~3O /lSi,-V:@U *|^򱼿TWf˯{pSNuЪvuua9oW - XB܁ ] 84yU! م>ܒp(|<:f]b&"m%'V t(cB s%7|]JQ0[~ݍs4'UN>^]3G i9pT v­ W-lu5N27Յ-3 ;8pD7XhAuazr-:VTf˯7q*'rTbZR]-ff9Br-^ ؁B ry{ ۜ[@!;PvazV'8_.LDq__ʜ@K@UU|1;l~'S󰲺3\2'Y`q!VI0[~Gr^-~ XS.>l &~ ؁B 6s[ مThEN+!;WPjl "AIuyva–_cwN@jՅ؅X~_siېTބ|^n $`0[~ 9lȧe(D5l &v'`9cvl 9Ekdrgl .`a؋nNauK 7XhJNC>3=e|:veo:'nOC>;o#?J}TYh9h'z ԨMsȧeTKFuau9}d 44r!|ZB Oi̊@W|y %gB>E0XK΄|aht?ӣ8H;0WOq'L @Pwa/LNPøFsN ]C8 øMӐ^ʠh̔gP>yZiVE 4Btwt в-qP0a  0, `X&.`x"ttÚ gOA۵a?ngAxlmq 1  4a!~7U}o3 )%~3,..gXǿt_$ ?qdC!~?w>{ZނdG/Rj}~M6~!}?z{zf h\.O?쫌Ӈ FW{J"*>9ϟkuNNË7poa>22My+ ^N4+_>hJB> &DÃH :ّȓmjxODG:3cRƞ] 0&F'L ɩ8>np3FEkv߻!ܱx):Iöf3x" vv ~p>]zlv?ٙfGGx92lD0>2vȸiV 5¯"bbtPS/~6 E {g!Bv gDnĢQscZJ\t X̲J4E"Qjx<γw`x #hooGPT R JQ,,cm}Ͱa AJ.˦)~!jb;|+єaF~+c?oDH @} ,o!𝻸>0lts sdq q"laghoo?uc8[M.EQX4jܖ @QNJi׾#c{xR<4 ,./aƐ4 P(qB ɤB3}3Bpn)`nEwb7lwP(`*=mz!pX:inWzNe1@bGq]_7e齢(X]3Wl|dܒ=,, Dg2' μ`woi&a631>2SU cblpP^{B`2pU 2NPjdGB̞+#LvjP!nߺmׄK) +6vf B^^(O=Ƌ/j}9R XBXZYzͿD" #X[[;X4D"X  ?5a'O1!=F _o{/(T;X }:v ]?)vi^& >wbp`R'tuvbe5|lυ Rb0j;88̛aDC c._P4H)iex_ BჇm_^#"le1X(wnLp`0A<DŽBS)ER08%tu'|gf .,.`sDSS8<<7( ,&BF5me1R"RJVF<`RJ\fX(T*! `-1c c,&R"0W(Wq dϞ|GW 4|6@,Xc=Wz+jf!mwbFRo7@ hBٵ|!%zpshv_'d\A#}BZ+PB_1o z>gH-3_ozV K |'d WBg(B|yK _q[i3 RJF`S! MD646f0g) ~ z0&0La`0a  0s/IENDB`photoqt-2.5/img/filetypes/jp2.ico000644 001750 001750 00000033763 14134304147 017374 0ustar00luspiluspi000000 000000  7PNG  IHDR\rf7IDATxw|Ɵ+:ݩےlƕfll` Ih % S^B lnIVnwΖ{;ݝ̗efwٙ}`p8) p8 ppR.N Iap8) 'G'KEˠ0ep/7ۍ*+-U?$w8N6vP$Ap8kcN Iap8) '0\8 ppR.N IaFs!$񜬜 @!  G( JDzz:AN,!!d }v+AxdEѰ !Nф d3`2RʅB7},yW[ Z1H9nE2(G9 p!D.aB@ +2{-yۅnk/-Y(ʛLsxWpkͻ[Y (nXVL̝Iyu`|'N=^Ե6tD !IB:i ҍ\8 @tv.;* _k/ܒӋʐE1(vtvW\R? nuss.A@@cE}[#<$H8icp`\I>}ЁF=qmxhhmG$\FAR$4xߺq&ڃ. ' nt[{MkW;l+'A mAW5.]mlā ]}p8?| p‡ nɃξ{ v[ܾ*(zmtIANXpP1^[dEpy\:@< 'n$K ǻA( + } qc^8⾷ Ց nWH ǝrƻ8IWBu%YGv1:TԢ1azfQoH+h@.FD tzOT7ס{a@Qa1ǻAA)EfzF4Ե67j!pP YN~+t4!ٖ2tKR|,͵AC)E]Ֆ<"CdAz)?C%2eHukasPRd쨯 .EK20oaMtunWCR\X@\CNF62-qYPn#q F&ƥΠ7`Rބ,[Y~9zC~v.r3r-;)w,&sܕ+_{Lq`D*b`!73 ǻ(gmjHo Q``0Q6i :.흝0ldx_JJi'N @0x&NNЍ0Ɛf0M*D"o8x*?{  s1QߛF4dc?oqA D 1stcpf`4g$ś@H0'0\ ǒ93QJhT1(bra1fLG1vm±s'0:\€d0aF4,`H4P(Ŝ)0eB t, 6ݛ Zo,C9y2gBy 7f%EŽJdàӏw.cUaBn!rp:gG@Q  t0L4g Ӝ! z?+^o/o \PtunWJk:D* ӜLs&dYGWE@(BCC'=d}H !1&oT6U`"23{(0 0Am $KRq8h␣ >e|]yTaXq` NL72HnW8:^os- ''Nt7^{ 'jV@x\8Q#VPq{ c xupHd68T^O 'D"o,;N ^E*` I>"7Vz\8%Y~cQ^_@*'wPă7TR9N 'bċ7ܞ\O 'n7oP pD8?N`0upLZ~éGM'3f'3&N}R)N gL$7TR)N 'l8 ܮ$h\wS_)1,F {\8a1,o~B!q+'7T $ N$7T t$e/ '$7 $gNh$7T $gN$75N 'h*8H9d scEY~ú@ B07~@KGkXP'$ӟ)#"c[47ac喤Rh̖P t&G@JMBj[QR MHh̖p $zI/r(7+%{;r+<4EkR 8dXO (!v*v(hhoŽ.f\ pI8Ijݠ*7(o@}kcBhJP 4$zI}W+ޤ,ccNRw7T(oKR!ن򺝣> M:l {##N Z~!N![r ܒ'k/6Tl|*[~C%JV [j!Jeo8$r@R  teX!UM 4'^@!mͨh +L֚rt][~ÃnN8B{z1r'-bs̱vqo$z ~*oVoم%YBEcn D\O SUv᪭ ; >ﮮ6"ANCxBFn @"'7TxG[n 'w{xOGeYƦ$ V'VH $H7.LN0FDYO ! mM1֋Idq %DJ(v%][~K" $r$]^n:8g|IB8B ^ + n:'0,'va6$]g-@HD\{ '[kqq- {[&,35N nhD]؛]8Y~%n9*j=Y5 A>Q;*Bpx]O+˧S م7~8XDq][~q|Ǖ  HC A- so|'N`+X{ovqd#^⪕U| *N„ڸ7ވ8hi  `kgVC @D^n{\x5N`\ o’,a'5d\UƺO" we]gm߸fɈ h'pE8g@D AvanM<+N OGDXddb. ab][~ʦjc'hA>рkt sobhz1D z G.-O _g?]7)e@L@$lچ.kwvՈdvaEQPɳ&T6U=|"/1څ7U@Td 4ށ_vn+qo8 @DJ(vteX DI hfWߤ#qQT Cم내 {-D;N O/gg D_v`{,5||% T8 qRtvanMqݨB@`x?c.-I4rO4ۅkGڅ7 4Dv=T!jnԅRȮ'0fA>k.GK.-M$ - O" r3zm}&qXvw(.]zPBʔ'01FӘj+xO𥌊Շ9'Џꦱ r}A><'PByןkD@OpƟH $Â|<ȇO"' θw=[q*$ 8pJRq%'7N (HՕ|8D`,q (ƃ|8&8Q1uDA'N#2*QgdTX8NPB9XsӨ fKs88s8) '0\8 ppRQ}& iF# IݨpɅσ$j-?DA }8vhD_,e9ADENuQ@a e@e烀N Iap8) '0\8 ppR.N Iap8) '0F a@<c`CfcfB jpP%E,ː$_W*PD(` B?!dX塈PYQ@ E(= $Y$K` nX#U !)${BEPJR_J)((ʰ Q#"rP][ G CvVJ'\vn˛$`2`NOG)iii!GfE]}\7J(`iH7tC} ;˱eVբb⅋7xvUUhhj6Ȋ ^l`9X8oh4B17#l+ߎo;+w n Fc 0o~Xz!3kF㘅'z;v ~z5ԡjc SJ&cEqȁKP\T콝clRH*|wز}+Z1tBE`8%X`233#&zcJ)ZvΎWe 'w~ ^]% $"PLL03ĒԲt^D ؼu yp\K⅋=TTWn7y8hq)kvl޶} **ՁQ.  '`Cq`Պa0zCB_<> hn__5G^|X؍R ͊|Ͼ(׼:QӦ3瞏{RTT]uX,8%Wk"`k-cV8U>+a +gKOdvs}.VM.90J)\<]t}äA&jY=?1W/3#}:5zn+{ϰu>NV:q+\#c=ǘlS, ‹XcyyFaV_y'Lf/>swtNX^:L&bH=jj囍L ~ly]c|͍KeV1Cߗ O N9t<3x<KX7R2꧌vǻp՗cGŎxW_FuLn(f/{jjC?QO>4nttvtަ&\yxC_Pttvƫx RǸKQYSR]Jٗ+/Cv~u=p\cz>SveW < T$\.#txРaE?7zzz: q}`9FׇyoGxȲ'{ 6o oEA<؟PL՘JdX,p:ޮ>n]93gd21It]]umxgxE@LAu]3Ɛix>J)vT}a0uJt yW kѶ=k0{,0XsfF^n߯=[cȲ N?giQJ?—_YCZ8 œPS[_{wnGGP8j2ᴓNŚk "Kk3/>>6@@)(ǫfJÂ棻o&>SՁ;[oƫ>]IExWU*-xwLJT-xϏcy|Bo_/l߆^{ dEaOԈӦ4;ct?b66A1c ɲg^|5uщ"N8\rEX`!,f9DcS#/j*#VY× vEe6++ ӧNò+/>X;+-Wm8[oqGԲ[}jɅزmmvΛXp7 شu3>SEQ W]믺ii& '"7|ߴ'w: 'Zv>d2})Zy۟W^^;󑟗lz F,_s"y汞JdJl'N~sQu[ڰuV̚13$H7@VfVXZR܉w:^~5n:dfx}Ǣœncy8qڻkSQh18ꈣEVf}Jp57ǍUߌvUXy RJQ]S6{fFnL-:/ĵW\_"#u_uJ'OѼ|)::U[d)~sѥ0 $y6> gipp~_dͱ]wBO>Ҽ^xV<|Xkn7fQ6oqG>;T KwM Ɋ9z$**Cn ,`G:!44k~V!(=s}\t! ؃(8pꉧu,X8!̚~CgwGttos㐃=ȲՇ~sSݯ [oUk2S7ef?~U;*v[RT;aĽesgQGVto~(S{$ ,c>u6mPT ?}℉ol JXeYFVfnh7!c & 5QdEsS$ߴ^+-lQ<rn76lڨz}%h؍`CT?EPR\oCS#5Zn߆޾^}_)=NÖUظyBH *w 5ma)hʵ熏>b5̛̀(D~^^ħ=eY=33SuqTOc X8y+vFtt{ JJ0D!*|̘6]u_͊j2+~fLS19x hA=50(#^c R-/ECSFSKTNbW[ keS`J3ܤ:7OA}Cʹ%%X,5 uRu5Q[_y-O:x݄BՅ\jzz{51Bx?Ghs5u5Syy?w>'%P|kPK1w8!F!ddd ''W!20dR.X1N81@E4:bө9-k0qb1X媏c 8ޱ;g8b ͻZPPXP Sj8ظyfsoVƐ)D)}8'NBk ÏDqQ`@ᘙ SZڰ BȰg ٬j }(h߽[^yy,{{=6hs7<ϰ^!6}}}ӌ3f[c0 Vvk"wn7^zeͮ&ӧMvBhWյ58A  KN=TGU@$KFN,!xC˯(/??(jWY5Zf:ݞF܄.L([ơynlQ܊h:劉p:QPYQ:w HK I`0's@lnJ0ى]-X2P:yYQݥ4@n3$Ip:oOyyX0o~ȍJeMED^YS%';GՂw,(*"I%A_ǣ`JݦA(H<3S pU̟(BaIv{p $ vZFPj }?ȊCZo/Ao'ؗn7ӇݟAfOI῟|յ58sqWd2iN?@PjRc?{n(2ZZQ[_7jdٲ%`fW^ &+r@ٜw}>ˀo_0uE@܉koZwn|E(뾸nrQ_w݆~ۋo sfƴijEQQqʊ:,^tx!DBM$jHFRu:44ER\p/_ܮ\,f .<Lq  Yn>Ph~0sY}tXWpf0KRs](T49$IwAoGk{o\Y3f}C5KNjWF&GAӃh ʊ*za]NmP]S5_3ρNn$HY-!Ucy(ajGߦgFǣ)r:^U:Fx$rsӰifs~Ö,HfL 9qm'ۍ/ut1 YY(.*⅋qaG`K;pɄE  ( ܷ .{8o(@ks3`1[Tŏ֏QrΌ1K=wv;M&pӭE|{EAnNfZթBަ-./DFFȲ%ӇZ[Ueͻs5L..'Q\Cx4oGgzDق B! $Il@16bwoz}TRo'"`jTkn> :m8B[o?m}7K~v3_YY\/PtK&fk!%Дd9`nj3DK?CցA)Ů]cHgz=>hMn}zMnRpՍנcd)̈́[o?\qo#,p˯T ߯^u?ٌc yX8O=n'oסMuߙgEQ̛;O3{(1eKe%:9uRl+ߎs/:7v3vTc (zc >f%J)MMOp4M!˖c |N=mzvv6/=4gzz{У[ᅢ5G#?gBvv6tÁjW{ok-r1w܄ۛ"h 5Fg L0QuBifojkq9CE~~>Jaٰq&l 2o˯ ]I'֏ҽRe/ROQ`Ur<>|&a#;ᅢG|\Ӏu5UÖDٔ2֏sUMnV^M)6ܹn|w1h c0g,\xޅ͐d XrA/bӀMxg^DNv232 "tvvh&{1>uZ""Ik[+yaa`+4fO{$ݴe3;!'00OPJQP m*p}Uk.<Mt8ggwRM-^؀/8 E'_ VpѤ"z)H.lJ)NxTywPQUeKBa=6mݬ^u$/X%DŽ1cVS]p;~!̚n|+ͨKNN;%,oK|;vcwⴓNO%hO`;5/RmgWfۏ7>dY҃)'^~^unA?5 QfGŎdåiiieEQP4_p*Us >S|hެ:l['uV×SN89!@e,[kyc?ii*vq1 0o1gŲW58( fϘ=OZGWRR,[4c ?8'Ep57\lԲZQš2w}۝(+HXi'|Z+:=:8Nt Cܯqw4[œ9gk} pe=#CfF&NrUXu :Z1 K>\tP:4.Aqk~xpPI8;N3RoYIjz)xpƩ dQR ?2Ձ@`(8#_Ŋe˃Eǭ9?,XH]c{fݗܜrM 3#3QEԲx/O3Άh z߅G>gHcR,_z(x07_/[cD 00pX?N8zjdef\focHKKB{nн^yɢzX{1p{!Z:l_߭]+ǰ!FyX8!?8sO,” 10\8 ppR.N Iap8)^oBOIENDB`photoqt-2.5/img/filetypes/ps.ico000644 001750 001750 00000020327 14134304215 017307 0ustar00luspiluspi000000 000000  PNG  IHDR\rf IDATx{t՝翷%-ɒ,_ر1&8!d&00dy̙;'0 2lCXɐ@b^mٲ-KՒj=%uwUԒlKGU9GXn}pJ|7 A@. \ Ap1$bHH˰nݥPU5m%B' `߾SxcR֭[{ Y&  I( ,+$a+8%ɗŐ! C@. \ Ap1$bHŐIi&1`S/D!1l+ G" HȐeԒ$^W$ $YV14C0" ' T_гcEG_@EE^#! L KqpPhr168eD"B<@*+(-AIc!ƴi~oo`?ё)>Kqy& ΝD8EY55eQ CCCqtthӍ͠P#`֬2x<"CZ[!vܿc #h4 *yIB&==hm=x\1OF8y < m\ ƀa45u~ 0=F0 4_ys>_o8JK}(()9E94! 55ety"jjJ-ٶt9" 4$gŖekjPR*oCK ҁ $`HNKݔY~&fB"A9t H@qWͯݖsWqWY~9{O9pUd0QwJxFG<цsQPZZYSY~1L ̙3y\C!kXU>QBDbzvMjz<""TVGH. c pfLH*+zrd Zn: 000 ' T_40 Z%"/"E(*V8IopʯL ,[6f@#8DQȊ/H$dȲ:zIJ|Ԏh37S0{v9" %  %La; D˯~k^Bހ SFt>O[g '09$)Y('p!$hޜ[~ӅrC@ʸ7h7  a0Z~n ΃0 3,r$aLZQN`*CY~Ӆ;3hjRO9kV;5g)f@@\U5Ơk  rJ-7p~$DN7]ܜ  rU,֜ fMHa-o&1'@@dU-|H7ܖ  BW㮜 ҖtwH7YH7" Y~mcH,^(I$Dhߐ-- 83'@@Ÿ˱89'@@- o&85'@@s8.N NEuhNf7pZN5%'vhNsE8~mm!9(7'[~i BΜAss7DQ@$2Ç`xY :Fdo&ȲsrzzQW>VUֶA13 X~!pz i?EqIU~9G ڢ^gg8E+A`8} Ow suCC0 sڅv 8Bc#8z-ՌÇ[lef Y~3Ǯ9 ȑVDge!څ v ^!ZvVW؅5oY~D t&'`k1M=f jjE Μ,0YǨt8Y~s]0R A.m_T7$א찟- U'00F`G0Y~Us#B>F|{=dV XV c NY.N7OsXRի [~oOu:Or`VLjv[0Y~1]RvaZ +'`)0;c]8ldV XJc45 ךX%'` Hg'0^]8}k]Ȼd], 9 B>&i>t(?vaZ|*V  hvaڃ|&V 'MkȋX=cg;jj9PWׁg50Y~MsY |'i>r}}QB\l^L!sHڅ? IKy g5y$ Rw9 d$Hl -!@@!O mAXY.'[chkAX@OFRPȇ MccWF) @!&IC^cc9!iN -RH hh2I׀R}  `ԩNȑM.݁ $bHŐ! C@.&+BaaaID`hhxcR =l]wm,a$IĿ+xO\͞]5k.,LAD$̞ǥ:sEQ(4 ӵi,-! C@. \ A$@[qNh~\朏ւdDQ̺j#c A`H$dD"Q7bT~  sJoHLDe|^($ ^b~QZ@II UPUJD"w}'N. CUUpx<(.aƌ2̝;˗/Ś5+j \r<%kH ̆$cǞ޽ү.`AQ!𠤤30oX k׮Ě5a޼z9T(* / !Z[;t0plǎoQPQ1+V,ƍWckrr LC҉)@,G4 hkCG߼ ǃsga/ak]ߟStwÏ~;wΧ(*ϡ>駟UW]o~fxWQRRL"`$"Hͭկu}޽/궆^( 8q>0yCaXx!&A0|w{ D"ێ' eB33!p8`7o=Uc9zA ƣ zkDQW9Ǐ~|70?gޙr(QPWwvuE@RP(NU9dYθ8WĎwc T?Mw: X ش]{jjf FWWP[{ǎ@{{'-Y 7(kFh4`'O68vFFb9ǫ;&}*C(ԋNߢ_yy{qDMQc6`mg\;A7o㣏/nWC`AcX k'鴢( >?]WwǎĆ WO: &466鑡ɐ8׃ٳkt;22x< ,TUEmm=γ9$!iC"!CQTL6}@pN"0v~ E(}I꛺)I.|մ`EQ/^?۲j,áCGcO曷;/ tu@ @%O`xx|ήO$d Fщ?ï>nܹqSzEQĎ o+gJO<޽q _};v܍@O95q]pUW5VU]usꡯ=/xG C`24p 7p$IiɩWa͚xΝ/㣏!ʺmbΗ "'}t;`$._݄'{TWj( |>nx/'[QS33'ܵe: bmŬY9CQ6cӦkpd#v~oG2j Y?׮W ,FB@fάu]o6_R[LI!$ k֬+܉O?=7x￿gδgkX `$6Gf&/_k 7^˗g(׿[l@KK;{?+aH$2߽]_U2 +F( x8W׏6=zMMg&7MWƚ5+)d$DD"Q<و'svNGwފR+_لoF  ."_ ˖-(/I`~[d!za˨硪}_f~1lܸv=2MMMF]tUUŕWŋ/>?kZZNJ-[۷;J Â3q~?WU>lٲ6Gkk >:T6 =Z{̜Y5kVk_ی|e#ϟ  IpQTT'DKzvnD{Ep|,^z>vNƙ3m>~R$奘5 DzeK|̝;>_X "c ^Gw_[*TUkE TUU+׎VǑH$'3V4!no(oHLFbNy<W =$C@. \ A#Z+$;!I){h'6F?4q)A8Z C@. \ Ap1$bH0D<$UIENDB`photoqt-2.5/img/filetypes/png.ico000644 001750 001750 00000022375 14134304213 017454 0ustar00luspiluspi000000 000000  $PNG  IHDR\rf$IDATxyxՙS]-ŋd-8lNY B @rC'\&p' d23܄IB&a38 ^[evd7uWչ[T]U]{:u~ ‘nAŃ  A8p0$`HZ`eaz(\)v[ Pl&Ҭ) _g!IR ^(I $a%e^;! C@  A8p0$`H! 3( جsN5YA11"#%0J"%%(@\p"aDbd)=csIScGt#(CME5!\.BWHAVd  wx4g `'lRJapt#㣨j!Bbo*acH!:C@9}3WlEƣXX#i'BcH <1NDQ.Sa!%ID,e΀O"@h @ .~6HJ),]D 2@xG;0)w@$AKO+c7$*``)9vO60h<#=m&bEia?H态!Tc :zS5 Iߓ뚠x}n aHfaht#aS\';܏Xt" ,$RSU_h&SIA6a@0 c#?}!<>( `R Ccæ,Fܐd!=>aڻI 1$ z)H @8nʬ0IG#0-$Yd H EQ0"/HN1T䤹'ML[Z{HHNZdVJJv1v66`29Y ,$SRK$vs#=mhiE[oezfV )Ip[ǒ+Coj8F tdXjQ]-O!0:Zp{nѐ1!t LM} Q/@HN*0Xjd -HJiOJIloFJHt(Zen1w~ L@H?:-u @Jz;0:1661PG3dVh= c rU9ۋ?h工UwA@Q @89*Jۢptb"[CIq xD7˫L}Wq[jf1$0ž0*Ĝ9U4erdo1r`J^,ZhJŢl[d=:Q]Qʲy.\/`vÔ7,w(';$s ",3ͣyXX5MфoO r`88%~,]tUWףxG sAPU^8g,X (Ώ-B9F݄p/Ԛy(0&t^mjO߱<@5U(rlsCبa%E¡fTT{M @n,JDQE1@|2(]Ȍ1Bsk'*Rb7ZU5 ''@@hU~ho&'Kao89'@@hY,L9s>k%´+Hm07r H1799`jH07qRN(+X~sI9"ob͇tN Ikf^G0)˯d o.s#h=ظ@@Ŵ*3s=rd,,2='`ׂ$DX+'rcuo>gN X~s%==s$jbH+1',>(fk 8FcH$x;4 ;Z~seZN&?#"@!twaO>[+S9!{q4chiGKO\ ll@f:zago>drvO@x L 4GJDSo.drvOG1H!Av4Q/d͕@QmjAG׌'/ 2އzʼn\}֞Oѡ>lke!6G',{ 5ǁ|zNvñ84CRJ:y+8w7W0އȱ ž#!sgx9V JploB`o^Z[q˹w>TNz9c }h<\ +\#3L0Y~h^Nȱ0Z@*;c I)]M{-w0 %m&oXu>O`w>D4zfMu]X%4uF2E||t ÃU‡[O.d,G_"O >'|W`邐ڛC_m Xa> @^9єw;{!V XhO?Z-2lj>am+,b,)$ao 1䎕 i&˯.Xe>K @SW : (v.L_}BNRKG&਍d+,#|jŒ1WwrqsI,!B>B>z ki(h"˯='` 1k]8 S_c1|?Z|h׉ֺ--d53L-Z|]xe OKw0kNg!=HۅՅ0X+p 4j> دCGp ]*,&=0Y )y{H&.L_`6uua9ߦ!|F` U&˯8(|xزϨKWo"0Y~͇Yrʚ3!^c8l0c d5f J˄|-RG`k +N3.f ]TvatN`9cN؅$Kh$˯a`E U Cǫ gX~kj(ڙa֐.dY,֡9C>zm&P],֣X9|d& . h!ՅkiZp,b\N+j!=>Յkmr]'`X5.], 3$vaT0D$I0<>خ6.( ʯ-02'`4w!TU],ègC>ZT`OY~%r ]C>z 0ӪRV匱{Gң¹dFt'|txu6v巛,6FgM&耐d  4aRp"tS YՅ9L|tRجva:=Lу)pva:@ hrRGc85.L_"O`3 h(HB>,9Hۅݼc&˯:' 婐ϱzבLuwA`Rt4ª z \UD!Ȕ2ÄqsUxN +79H!C@]@4EN 糉B>Q| $B>Q D1"'L s?ALN T_Nɇ B&'|37'J:AXBrs (8@!05tvtcQ.EOȲTTUS4GJJ6UA#0Ǝf+Ɔ9gaSa2衞  A8p0$`HPZRu` 'b.7{=? ImZ SOٗj./qj EԾps@i?"c4H  A8p0$` 00RɈr)o{1TeEQ #9.!=clU9@0DO&0L(E L]Гsx<UuPRReF}ƑVttcxdX,-X`!seW Lb0'$Y7հ;rAEx~B!T`IbL,=L,Y@ X^w,£a|L@YYz8s(N&';vBpew9v6AH׵;܄?"^ze8.L&'e2,[ t=~\rŨ(^,c "c}x4ҒRTUUe˱wW\  t20$Iܽ-GT}g6si?(}Ǜ̼'& *767gOGtuws?} h׀~ \"|c ]P9@h0+ .K_'ƫ۷ n-蝷O=D"WoC-Ͼ£$f_jт 7CG~şh,:½3wY9 Gȱc ;pW9/|iؿD *H[HRxihln$' w{'ܯEFeH$%zz|/Ҭ 0oxnҶ];azs_}Ö?-Nd7>;x imoö y~GIO7EmA`J~g|/ mW˅^3~B&^c \%dȑ$H#c8<;qw?>d,#v=5R)U߶+] =يKsK`~aηs޺5޻+Ƃ x` >9G{mxOaη @\.nnğ큯ԇ*\pj|掻ǟ·|>U?Џw2`008`cc }}x⿟T-h. O3rAeH4'+ !,Y,)@eTΫ?{xuye: A(O| UUsDB7ؓI<3LNDl}Je_o}* I^}#?K.B"Qu6VB"_!AՁU>}~% e\}_VOY 09>?LXx,g`55Y?h8 հ} +֤.2VZU yT-LT5FUe޿?s]dYۻQ5rpͷ,XOs^4߃!(jS|\QTv Apõgsس11H$Zt=ݭ `8DE7D1,+8*\veY?L`gu}_0:UF|_ uH `RUE[@Wo/hnzz ZWTC` {csUT6W\ />xuL?s9sy@H DKhmoSKPZZZ`(X\ڔsY j>7Я1WCݢZ\A` މ>#fU+Vjr"n-l:yHy ZO"7H D\ߧ\.p?؏~8>ٻܤw."M֮Å0]⹙bj"κ p\yt( Xsٻe) $a"A@?7a7NՊX|MF9(/Ǎ?o52e+>{PUYȲz<3s6aEE/e$9ǿ?O$In୨W09#?BO:7~ if-֫6sxfHȲo +SsUUS@8$y>޳vnVMSQUW\O>>OL&[4-9g:>lDQD"vӃ0yWZ0^7p^oϷm m{>ws> ' v,  NwXz!Ӎ@c $4PW[|;͕9lٲYգjĤjH$!E,Eг/Ȋ|>g}lH(XB[saPe^ W`媖olnBK1Պ 9Gy(C#Ct$ ^)q $skބ3L܈å]R_x׭JqFQ,_V+6\sIO ^8Wа/~@ p8^7_Jfikp+U-/298t@2\R\.tBomo:;ItpQS]ݬzE{֮U_;*>s=ع{'cYKz1@c _Օf-9~?9̶O~<-GH% X mw+-9 (KEoćn?_Ӎ<= P- ϧ'A@L( .B[Nuqx~a.m]1̧ׅ'A0(`2K./8V<'L~\cf.1Sv;mz?Y)1[# k_HLn^P<(XvR<9s^g,^R>ee2=v݃W^;vֶ6GÈ'⧽(@e=WauWQQkV (÷5ȊYpq'>5k9%r>xU<ʔL j㕸rD"Ѿ^ `88(񖠢kvQ-G0c.|̀N=X?vGz,_~6(k.R7?7HS)J C@  A8p0sEz]@VBUM2uƎ7{~ ,KƎ7\  GC@  A8p0$`H:I!^;IENDB`photoqt-2.5/img/filetypes/dng.ico000644 001750 001750 00000022631 14134304120 017430 0ustar00luspiluspi000000 000000  %PNG  IHDR\rf%JIDATxi}S3$$.vd!0xO섋ob^bxq8_ccz1 f B4fߧgCOFRyE}TuN0A8 x! C@  A8p0l.F,]{8W]W T˜惯_8ot>Y}NADt+ dI"J^;! C@  A8p0$`H!  Lc`3|ӚD pE,%!%dYf   a $ZYB<A44Xxx ,+ Y 1A!𔖡@@P(AN&Eh4X$Ey,AG#CtQ/G^9(B7 \P?b0L6zs']VBx|@*k_^%l @^0$ 4: ȩ>~of \QF,<٨mDh @D&F0ӁD4Ӡ c $aH. BK##C8u@d|͈'sL !KI?1#a tB,2a [C z;6"cHD#jC"-  C"Fr2Q0#!{:b_dAQ$ ufzTodl5!l ya1GP?bEX  % Z_hdcCaHf!4:}U/* Ӭ?$3 KIF+d: 1"}("cH&Ů aQH29Gdb "*YI&CAE-aኂXxB $gd"խS" P=$g$ql%Ko v $ HɄԊ,P21ՊV txROS W8YĘE0PO;тhxD@#HΆs Xgu($10T_[8 aZcpԲL4l;Feb#ڛSӐz["ww \Pc Z-1~ 1^@dXDWj` \fCJ&e 97: ,8h9IZlc }ݘ (Č1DB38 9#- r<%mJ¤u˕L|rcGW8U5W)[Y3^Sda^&@NdA\3<WQŮ&aՠ7#SN 'H)fBnOQfBFN[~O)' Uj.'9. d *YtճR]WsBpy! o>Hc襜y! OIԣn1Ms0As.5sLF}mS'<,#8/ Nk #<>Hh,sTYFZx`h$1F&WտQsZ=cBH s.7k௬F<A44X8d< Yc Bt))C?29%epmV58='0~=RBCDQ/eRR2 YJ@婥Arv@]Tc,/}ͨ2_D`$Z3ys1ASWI6>]t[~TN f,x `-Ts9ѧ  aV58BwԬkL=('p6$Τ,}:X~rgB@J{}('0B7|E9)HY~sЅ*CykHh?$NhʯuHb_r~uˢ*F 8u?BSmͧ需| Fc_fz$fRҙ9B#e͹3s$&S9sr$DiL:  ǬrΖ|SN M012#P$U45N悝/C<AH&gX u45-xՊ~- ZdIBgQƇgz0aQ/δVəTN &pn<:{*#z,NYޱ00:؇S'6cHch?q9-q70 0$)j1XjtvA O8+V NdG 0A`/OsxqVGZ~9 Gok#Fz200y*v([r Fcv ctבO?0i-1:B.4$),c Y~ XWh8x4Ie! av)oҚ#Ɗ X^!:m ,d,kB>!=mmN[~S9 '`I% M6AQ8X^Uw i`ch?yDv 3kV XJr s]-œs;t_#HMѫ6 8mkDz+e>d90Y~ 9S c aB>zva{0O5e>mBVŌ9 ^!]]L˯yiW̸9[!=0],f @irB>:;ͤ ra7b?S !=0d5@)0L|ƍ iV&˯0KNT01_Rv.\%'`V쐏.pۅEA_;Y~͈rE|t81Hڅkn̐(]N>V mn+],9" @a;XL.L_P@ |9Wd Ec],֣X9"!=P ׊+'`X*1ipvaZ@8+-1 vY*%`.L_K30fwvڅ9Y~-需1RC!I)U~ky "$!] 5Z]VF V&˯0*'bːhax *"7R9qs mC>:gX~e+{N@;!=Hj>muIIхgZ~:s5N z0Y~9M!Q0Y~9`}ʼn!Izf\],#hz0enɰ08R9ښ4O@J!]`< ۩~ |tst5@.L_guN  4F2 Ch4H_uNUO|Ɔ_Gvco1$:tNRoAVZ-|1A>LTN@^-B>Ł1r9M!QN g )CD@0~(:TTȧB>a"c( 'JcQȇ LK9l蠐A3seN>)C&tN 7HV'`=DH 0,UpyJTyF @gRV! zۚ+DCY3 K=A8p0$`H! P& J0 !XVwYmZ (_~[.̙;^)m (. ^.[ȲL1`1U; A8p0$`H)ho@;ڇX0%:_?uΝ1A3RsQ!B P $AEb`MrparOޔZ[)9EPL0%y-E!+3O30Bp˲ BKsN5 !D#Ȳ  9sP_K@%($* |{wbD6*))GEe%f pQ=^p!f͆MnJFGOtq(_W\l%`I$x_;oZp>~_9}w&A,hj<{c "Hd&@9.Ǧ+Ɩ۰~e"!8$hj8|/a 2/jpѲʫpcU|ޔ D]-ͪkŲTEQp^ Ϗ¶c,Ջjl8_x'ّwp1>>#ȡxg? w@EE%@H2IwsD"at/~UUxxwb[QQQYÒꡤygp=FyEEN !۵E1' Gh;ՒwM'Wa_7,hYA222w=|>}՗_c>9|zЬO'Lb=hl8as7 tE@"wȷFuH8>mP ?}3_ر "244?_"Bu˕}/AwWgџA|٧,j] @I&!*/}GI𽇿oZ(=~_8EgB$\M^EQw?=74 Pi)Ob1|[u/Êt~7p1tk<00߇~oE keǃh4^476#접 (~|78W( b(ԀrnmǾy9MpY۸Ř~#[v=cQ7{<Ծv\Q݅?"x8 ZF$jwqqΑL$߇W^ڋ8۪?<;>p/mؤ ~ 놧ͯ~ -"XpSB麸n,ZKbǭw+xPZSS<统{c,8֛5EQ\JyOf EA⥸dU[Oahp `[PS[#0pQU_MW\NOkC 0 QaU(VaeWd< aO:_C08.Wyn$" +V^+" Hس `,ziҭCo/FGU_uR\H s /WU`EQpucQ⌟jkmʑ1¥˖Cu 09jj*?8_pE yM?e~ HVATfy1w|  p(PU~tdsNv:ccFp!UE>jjH `7M + ֬ۀK׬Xf88=ӥ)c\e򯬬 ~e{τ@zQVUU>Aex<'稨Ķ;d,ý8jjj5EU-z{s(r]pXx1JKzB`$ٸnUœfs\#ޞs>?y~ulnȲvrUxeW(vrv~_cK) 4 0f;YQ5zR)%Kqյ_v=nyszCE,ӑpP(T]-` 0+W[=ly<%%?zJsO3PZυ`C=R. WywW'Gc2 0>P'@cPdxLURjpӶwXfOc||L~ 6&UC<7;N`RQq׫ڀ1ܴmkj2~~8zf>iH$x6Ąյڇt8醠A>16$g H  $2n?T=gnjZL1\}Xx Z+y{49^ݜp=H&bloqA}} 1@JJ鏾Ɠ'4Vv@ch;ՌX4 uV/-[3 $I)Ow93w~?FTDOCl޲7)c#z0Ip!U@.-#"9~믢d `9Sp!&f(UQsb$ $Q(H 1a<_Usay͋+c{ mSsTVV^M 'zʘՊ yM /[Uպ=8稨;n̞] ,X%e3&f88W^KQ 0b(~U7^OGR7AϛNA`e;.GʥcOU6A]ӪWUWcW*[`%3~.Ibُ#c%xߑHt1Qt[Зz h C|O rJfip-˲8vX;G"aA\.bQ'p>uS n?0dT[QdlJ,_J㈢܊ uˡ—<:Ht8SEF"(OOCSESIyKP J=gm;t=2,^o^ٷ|x&{S#ӂ+hrd*? 48>腄X4z{080:(1Rw'?Au x ^wa^B^^}%|{v܊E .pEA"Dpp{#NWq8yN?]V7I&2XMW\] r#Mn眣x7ܔ0FGq;_Bc&nWš\UlFGQ,[q1 "sab|[w,rX`ƭkm>9[-HrNkNHnچgضVS`Be* GW> n&͞MN FX w{nQY]$W5fKso=h{g1n),c 5Xv= [nSƟ˭9GyEUwHv{>:IdCElt9>7M7 z @&|Bۍ2WTbhrYk7lDP8Fϓs[n թ|!l+~=gxgzzwb-vVdEƟ ;bե2˅ҒRTTT5r(??POI?+**sEQpz<寡=K"SR /(qɲ@.l~ /瓣녿Wf 08?A,My JJQQYYu1g|͆/5|d 43wQg~^/AS=֤;>gzHSn؄>  A8p0$`HdHoGup\lY[_Ï.fW *C!Fn , ! C@  A8p0$`sn N.IENDB`photoqt-2.5/img/filetypes/rgf.ico000644 001750 001750 00000010562 14134304227 017446 0ustar00luspiluspi000000 000000  \PNG  IHDRy#IDATx]{lٻ+v;vH$@RTJAW" Z- Q(B#P %UC*jU ޱ?gξar_o< <¬2fUz2M0# !,ƙNXE dk"1ӽ ;\U!-RS&_zy'Q@B(Y+x[3S}̟}CJ .;#hý @*AB<>~@Z0/PDUUm׺O@-YR/].@*SnY}@A3 @;إ{rutTEuYUN>T_"L %kr!N$YY0 :MQ] -NRVNӞ[u3ݧ5sx"iz%O3%/ E0K[lE9%+"KWE1%O SĔNmF$)A< )A, pLwpLY8.q$@@Đ%" ? ~`>,Ag|X ,^x"0, fc=%R" ρC"@R38/$E0 VH`%"w D, oE1 }2I3 b |h {Lg{{N}arxb} -YHYyd[ƹ?@3IYg 2B}x>ke! c dGzߛY`sc$,$hMkqǣ Bg[v%km4`v@-RoN}vyS41f l d0Y ۥ3H̴EHX ~H@HkuZ&&Z :;'E0 1K j@\rZ3Mp,?&Lׄ%J϶n3&‹`Bk'DbY .VA,,;&F35X,7&J3s"8Y ~߆D0tWK B@t vfjqY .!7ff \ p@Oi@E  ĭxR8ָ ` ;i`E0S%pia8`8 j'Z3ppOaO68?n8x8 ec'L}N雊7yKjb1` N %'@qI` @ܪ-8,صœTO , SY ~Q>1HL؝d!`v@80iPE0QK ąFPE0K#=a`s#CO ĭ<;f|Z >8t̴._{wO$"+]  ># x εLMD 6p,A X n3)l sY g`~rm W7-}VKh!.CSw L@[x[,Pp(DvUյ {xc䲍o9DAb;o.`z˾O2M.CCo[O츏W [ a66ўM;D$zo\n|׷^!&W{eCyOO2Z&,_^Q\ND:n~v?${wQw;\?1G'*8>MkBdin=cN\Ol9j_jWb&pg?^U߼8?􄑿$0"_+{9#yyZ*IJR]wBM7<ٜZUR7hjӽkE s{rwTF6>P-3$z9M)JF]72N+HC؛hYg|uw!=pg{:MM7\ ~uOW+gQAқ,Tc2q~S$/ЅG6q.;|N(fbAH<تPFAӧoj5lxԴU v$ {%^oehB|${x3t;9+ 81J@tP`;N)ܬk ht 4}CC!ąn&1q0ZdPc >|CujP>ϊ2..CB&5;n7o߉OUM~7 <*ûx9h?Pjncl[(ƌdb/BOy:X˪-*^zHR4=\|e#a4eI&߼F/7nQUgZ ޢF}3O^hZhz4-J /atЯxnӿS49| Hir䩐׿U ] DMNt#HvR>y6!wт[u]MUUh;& nL6*X~n3 Ҹ?nC^Pmз\@ 5cCxvP7-M]hl(Կ5n6„MG#^ 71+<>|gtsQU4>BXj,GYy#Tt7l3=u3T=7uٰ`= `oy`eSC*31*[<|C}Q?(DYl-ކLxCTjO}y@:h _e0g~ @?e+MW?PpA%nXI/6>z'v3 ĒviEӭW|Ekq&>V 4"1 ;?>9f;U{ u(Jω d"z\ (PH"\Ksa`H! C@ A00$a`HZ`d% @aA.E?%IIa6`6`eHA%B#cPnn ;8Q$I0Ldfnn!+3$}=A(a 89cPEEo?&6+d۬e+$(\oݽp{=N?@=}N8\ȱP͚S%`ݽ<6"u ?2 18]. = Q( z }C0 1 =x~200ϟC!RQB"Ǡǭk" ((Ǜ.^ 8`KMJ ձHFb $PznTVXB0 > ԡB2b !Z[Ҋ=d@5R{.DʌX…1~ mCmS3\4+H@@pTtsڦfx}9׋ڦB0t ҡ';G@pLcFptCQ66?@uCcZO|&k$˺,ן1t ?CH-4 kbDٔR7,0ɦz/mj:܆MAv6!8!aH'f &C1vvT! QҚR_lFj D 84g՚9CCkjVU[Rkb,˰ZR$1ج14ߥީ!5BQ`!nKj Ś2Z~hhiռ:ݝ6"H'!lV ,YYXBdl0'Pbv>kљ9nh" Q02r9~L2]VFZ~=zhlkKkHH`\N6,Y\O=6Eףfpu10Q5#0Qc ,rCB#ln¼\,]Nhp@ KJ u* Fa^n%&e  %3aNN% `f PNrZ Ј#ێŐdelxX23t1-HBrZ q/dJh! &O6@0vH$o'9q٘Z:vkjؓ7@#T!SJȄ/Bd 0t,X~ ^ B!Y4'n1D$ 998 as.PǔHe$!96;q@BM7Cm&6+d۬eYwha90`6~$tED' /^p= !PZGfA$L&defn"jCVf$Iet db6,-i4Ĉ=fC E(JP`O,l6l2$B@ 6z1,RԌ|m$1&tsI!lFfFX?'iM 8d_]Aq&4_.q."!1HHv.cE+'0 w]s!PC C@ĕ[~#8A7SN  WߖdʑGV $DUGcr!H(or qsC_v/9j sBU~[` 8 sbU7Qy="$y=".F 1C/H0z$DL`З7\0XN :Fs$Dym="jj'@@DE۬SocHY~:r$DĤ7  "&, 4yNTFJmHZ~S.F aיO  &-9",V7sNLX~#!]s$f&0(CHIE@C # χ]+msڦfx.{(r.*с}U5p h$dm$[NCck[ K=쭨wh(-&-N9{PQ[7ZCӉU5im7HkY9UUWǒCsG}&&t kw}3cU~MZꚚ1UQ쯮AwozzhpI@Z @轵AմÐχUpS{8KhT 0jM߬cp\WY o#GۚC=H;_]0'g$Z`!W_OJԉ&si' hc -k6^e5wDI@c -mjB] w(& 0?յQ}cWUm8a_w,H՜@ @ﯪ*c n{+e&otr)HyB}}1}j1g0Y~c)HinH0Y~cC('И"9B> -]d!u)HI+.67FRN %@-kFڅ.L*9-!X M#&T #Š·vZ0rD 9HB>:4],A9HC>@Hq0Y~s)#ф|b R.Luн*LQ0Y~ iN@ːO@b ] WT'?'+HF': WH BBߦB X]8}9#˯.B!9 pȧ$|b^•ɳ ,d%9.!=ΜGɰ]"9va $]ҡp.HԀ&1/s څW],C('БpȧF!3PА0Y~S9jHJ'('.L#Y9 @*|bM"T7ItN !x\˅} zdM]Hj'.?4Y~SD"5onA]!˯k$r=@:|"fvP_/Y~SD'HOa.LU~ӏD'WHJ>H],G $s%T@b N'Ԅ_],i chzqtăouCcX-͆Ls M=F;:IdӔxb.F EQp@], 9 C>f]xp'PN)9 C>&d[9zua8b&Făva~,#^9pȧŸ!x0ZuaxB>>E!:wgklbJB ďUw'˯uNE`ȇnLSz@$˧6,@A^.,QYP'q0ߏ^'9B>Ab JQN 컉B>|b[(C 9B> h v=M@!7'*!}MN@UQI!5Th˃,>G ƀ*p l$ ׵W A146mj¨ A00$a`HQX-dee%8  3fUpM7j-Ads^1v;oΚ2AɄWoր EQ(L)ck+JM! C@ ALg­}jSc`VBs9%X1IF$y]a,]2~3!!/d2; c BΥdYhljBeU5jj܊=^p$`YQPPR;L;f&bQ=@ !,YY1)69Um' ܑŸ["LLl6s8P\\RL< 'MBQa!V+M,|rlٺ @oO/L^YY(*,¬=>lLq tu8e<սTb acxXf-ZZ[Uzѕ`$I կG?\.WLD@$457?>㤞X^^Ţ~/a_$I{7jl,_V<$ߏ'Vo?n<_{|S_|\|m{bjMbCwOVZ˥+/ uZ@pĚx'€`xᥗ}J!`p_R߲]y\c Q lbl5 4!7aOx^b '.I'6++ O9SFUU5ؽU5a7(7w.n sFS&OCbɂ֩!pζ+ Imo9|Y9Gؔ!3sG:U65/ k5H`>u,G^nnOF9v;LU99gE_ڶ'Yp``$ +VƠۭmp*$EQp4'۷k ^|B?;Ff:r,,[rJ'NTmgAY+TfIXn$.bij/T}  aΝiXpՕW 3##BQ:DqۭmCCXv->#]2h1'ѳ23qoP_+$ If+*u91_ys{L~W^{ HH wkv;J.9JKKИ.l. %2^kju >ٌӧO>zz]COo/>sMKJc+p!PR\'h/DKk.:G@Q ʙ͛;?{̘>]) A$|.Xӑ`7fԴφF'!,رSn5@$8d$aӖشujۂWv `ٯeKaSxwuGՉ#!;w●>I|mQ̣91Sbyz?UUeY AHC[[;VZ W}ubys{9KUtb*tvu(` Hb c $d2ā$ W^~YX-- R?vً~{fܹd)~gFBݸQB&{,yaNH! O/ Dst`E%{a#/x*u~8qL\|z{s6fϚyM[})SȎ4"qx?#XzrٻA:$xjUa :vڴEYp-79>U5*p[#*xױoUs=^/ڊNͱ,oÄW-.*܌]_~{|+pUpEbq!';&~}N'm;PW_ѵX:M۟~)*$[o[6c=c Om؀x4(ػ?sqWE\`W7{|yֶ6322`P\Tf駝3,EVV֨p,75B}VԂ9ǥ]oZ Y5.В09G 5d$ cZ޾9 Bntuw sb=%l6n#//%1~xˏ Ej/V:7՛A&L&<ӟ?چ` «_Q,KA"!H@e,.CLw%* @ ǻhYB(`u}-P$Ix=@$ 0= ]5Շ` n.`acxWq` 1$[ t5D!A0:,8?> LlAHt%$f/Cd`!P +eM:vR$IB|8X]_C$٘7ݐ1٥9ΌoMchjs4 P+alb Q@BpCHHtQժ V1097)p2cja#c:OZ` 6., h2P=#dYFpf4-pʲ fR1Lcny5w,``삮h + (ݡ +邅[2 U``X7:gYY@lbE˝n(s\  Nciu9wb{h|+t*  r5W8ld?b3sL`b~8"FH@erc, '/龨ud ]/Z${~ 6ح6kbAg3 N H'$ CFq~ڜȲfhr7AL9!@Eq&]ve[leM_=)D"j.[QT[sJ o(q('?$1r+jʪ4( 2 Q^#]Qwj~J  2d]v=[sN6-?*D,J%.i/. ŖeY.Vʨo"s}/H`Ga VjO@οj/r]X)'8)-(A]M-Yi y\CeM@,H0waGa 8)YaZQ uյvOpRM"DbC2d.ڋȽQcʲ 9pp~,j5Ν[~rG]aѳ٥yze,U ;jC;wb1ŕ$C}(-(f$IPVEX^]/GH A d,ÅAXUiźtR- a? c 3h?I W}cfi-} BibHN 2ưlo;|A(z3MMco!'`hm0Y${149듘*d0Y/ "Z1cPw/s M{?C c sSy2ưLO+gN0Y~_N"ZAH;c A!6ݝd [~zO@g9qk*=.,zG 7 ⬪f pn_C;1?Ew$$q#' _E _V~A6p+ ic>cڅ.wtSi]cqu  7!'+' 80],E9@"!Tvar6r>mIt!B>B> lԵ]X$7h=' k]8: S4 _ .7Mh9'iP3 .مuS]xS_ 4{" vpua=l9 dM;4f@Dt =܋Q @LO`^S h*|Χ(z.L_ ]!T[Յ 62}kJ.|QWW],RN hJ6B>E>r.ܡ!0Y~Vre}N5bfai,ZC+9MHȧ3C!T :.d$I!˯BN O*W0̨],&XhN WE2;KvᖌTD=d4 ,9 @;聰]xbuم#)jL2veh5 .UMY,!9C>]ýJCuaL~u% Q],$S9 B>*d5}XYK_N #Po!TǢ'5Յo6rO mאO*<\]Xm0Y~OHlO'Է 3ưHU~ A:siANB’$t"}Gm"Յ x+'ҫň! /D 'v7,Y~Br)|Rg3 م7UHGN %WC> .˯H_Ñ@J !pBp;F_꜀WM$cD + _ "p)ӡ-d5 . 'lxLXT0Y~I*PMIv |lO@J!Cf0Y~ CS'P'] ۅkn $%!v]v aiusd51j|x#䳲@)$R]qYij"9vz ԨOڈDV00|N  tQ'piO }5Qȇ 2Z9`SK!$jM!z' $Ql|B/Dr'H̸ADs;H&'S$I9 I4' 8232X-E#(-(P)-} mUDDp3܇4lπmYOƠz01$abHĐ! C@&&r!B?0~GmS>AoZ 2bGur?9m jEc),H{2ȾOabHĐ! C@&&1Ȳ I ^s KmRRSџdI.TCA/"08<=+um6rP v}uس{JK` J,Xu\EC$~ ԟamlfZaZوCF^ cuu5fVrnTk_|n&vA[,|>Ȳ~~=@pߋ~!⒌1X,ج68"??娮QS]b88!H9x_} M1}W"2'o~upf[sv5c p}8|n,}^5~\ n(t(N'l6V 3-X^YF~^~ZKKWKF*9 Y~^EϾ<}Tyj=K1szVg+Gc_}ruΆ$Ia(8P܏?=yoWVp9j䍷Dm3pa`Za`^gnv 7p?g/oW|얶ONFM؆{̓<Өw)-)꣸]j(FGBǿ<ıIo8DO>jEm=g~+U_ :338?@pKl:to#Ȁo>~IֳX\Zxq\}jQ۝:݈`0/(vo-y݊~ v?J‚08<ı[%YBZG=gգ8!nz|֌YKKlpw8!S:h:{'jҒRm IJK.jhj?WVჇjj H RF n @L/݋gp豘&^FowZ&l21dYsײdT8瘞Fm=ܜ\HcZqՉ`2@gO7v+5;wè(+ec.E([]朣Ku@m053~4i[QC܆wؿoxvQ!@vKqid9T/^c?ᕗW^V>ӄ5]٪΀cYmEH8Xp:(,(DY[cCA~ى Yt8QLQ x )\,.]c@$ VʎTĵsZSM s54ciy:` "rE_mxC#ɆwYFs]_}s 7-hioEiI)vԠ|G9\YY60]_GÙߜ?Yd݇*E_U!$1Eru| _xq_sq G,"vuwl[SY={Zd %E8rHLFGg@Ak o>WxtW»tt̶GFqQ[;\{UuBCS#!$ eMߘѾƨ;"\s51wǯ;;%xV3Hy-GɛnHcX(+ʙǓɒ}{2v23lŁ(8|wp{Iݖ`9B@CTUTb}ImZ*JqmB3A'(bWN<ã_Wo\-c g[sC())IzQpګNe::Lh z $}~7G?1~!`pՊ= ^ج]AxJѢ5W] Ñpv;hnm$) 2%+6 L A01$abH| 9Vz]@zjŮ9_m<׷O5A9^m<]L' AƅĐ! C@& L A01Tfg<IENDB`photoqt-2.5/img/filetypes/ff.ico000644 001750 001750 00000006156 14134304126 017265 0ustar00luspiluspi000000 000000  X PNG  IHDRy IDATx]Ko+IӶsyܙ˝hb`B0vHAh6H`flglX `,$JU}[9NꜯTy xxc?_ MGU!,E@8 LGU%40 GL`:p4&z.xpYt&!zQ&Aony~czn~ڷr`py `Aлϯlc_-<7i5.B^ܬ>mX9 h {|FH 8 󟗃wLg+:fA}ƐN~Uz{H;& d G%?v"`pZX;m•mw"Hn8^@7<Lv>47] pw?=e1EÈ;|l0Pn^|0P"펆 C BWhg&u]Sӂa7M ,3)@s KiȠ9?)n-ʟa+QpoRZ*kJgKi ȼ&Y؃frʼnP{V|5~$#% #M?o5}.D0G! Ë鱙w;D0.%s{wBg H "+\^(쓊`d"rcb<!ĻĞx ɱtY@O_Yo,Mȋ`jD'Xj{b Jw>ܶ$T,A  f W\2 @}Lx%Z "C(g[gTvEpyKJo`eC0;4t\7Җ@փ 6O%P#Nvuok%P"l<~o\~溒\%P"`?^VR Kn@cc+J%839K@4[ǥ`iCI 2@sIYn72!P9Xim}65vd,-}eML$HXI૭haGqiH[9qsT3o# @A4qJpvZCr*p E0%! f?ޒQ`.% @{һ[(E0% `QxieXǀ''E0%oIMY a+9ML-PpKhbz̥z+vYf:Dz,p_k։xK#  l !y ,l $l}_&#C@hb]"ˮ`ȳ@܎'.̇^h 07@UDF)Y !vl'@,A!H"MUǹ?|Q ,p#Sx)$a ib"@vrĚE0a%'kȮ-A.U l[+(HtN싻[?x`({A6eM $o"/'ާ#dd]դӴ^( -a"hB0 G%}vzo6N!f-&|7:J0?Y!L1!ķ$40 GLc H@R2,QNAH*dlǢ?1 .}ħZ[Vn+¨Z`/#ta}qר .|!DR$<)4l5AaV/5AmAk V GL`:p40 GL`:p40 GKy`|Kbh Nz;xX-: >l /u}Y hUQVG- k.Z L`jU-ZzXw3%*/MG`aVS)IENDB`photoqt-2.5/img/filetypes/hrz.ico000644 001750 001750 00000020003 14134304137 017462 0ustar00luspiluspi000000 000000  PNG  IHDR\rfIDATxyxՙ߯Ւyefr 3` ,7,y.{;@! daIB<$IHX@HBƬ ax-Ylڗ-VU-Y[Z8U:UsN9@a_" Ô1, cXǰ0a`0>FU瞏gRוa$a[o`K/L[.,gbݗ&a "+ D:4U0B7k91, cXǰ0a`0>a| 1, crZ!M^),VC.4 Z*5JBW7I + `I SDX"9:R845G4l"2@ Q^]@yyZ X"P(DВIC"H7B@*CP^]9sQ^SeVXBiPW#Q@Ci3VVKHx?եRðQadB~&]H?èW!`,DrdIJDTCH`V``, O"o=-ga4<5ܥf`,@yA6~!HMGO`"dz*UwkiFrtE\!92փgK"1L@WU jC)oLod5a< t!߇3FW/]LH`ӑ"iY7=LF;FpLJ!oBud @HĹoElpD5a\ @iJNRȴC ,誊x4b6l:I[ ˽ `8"$&[*1=D=8]0{j UjDYQY c4ՉΣč$ ]8ƽaȂ R@qe.d7!ո ۵ $% %J] " jCoʡ !64Mbp$3 . "$c145b1$X ) BU!HP^U@`tp05!q/v"BEMmzo>U)X~{"IJOzD @(B!P^[@Y5zzFj̺s8'7,S =3̒@칎Qwhp/ OXBTΞ^1s&BUUά_躎}i˯YAnjD,9|` 5鲓έ[[~L_e6Mn@>鱓L/b,ǽekQVYza*opN Xr ) f-XSB`YW_Xt_3pN ?Xr!3f`ŐҊ(E!e  2oW  Y91b5Us0g2oV TUƟ7Sb0 @T͝+1hWY[q,BikDm@.XLP1s=Us]W;3?u+Exc;&,fF*CW B PQ˖ntȒ*If̚yǝY AV7k$;8'0. ;LC[ZÈ"BWUC'xY9@yu EyMM:䥆Α)˯rsB K}PzC5B0p98Dg- P]م[d93'h4cG&مRWX[p`Cǖjf{pH[:pMC]:"BWD;ЂޖrՅy_'C>wzYgڅy_g%EX_} ap]-I 8J$ vtCم8pT++E=M0[~Srhi؂pWlu.N \ &pi,lu6N pTbJ0[~OswqZ]-.9=iWZB>\Յc˯{ t?'P8t|ualu9?. ؁i8sva9".;Z "$chf]-9O~v.̖_W3)'P[Z[C>c [mf˯9@qR!B>$Mم(L ]GnkVf˯w(fN(+!ɬ.V]-ޣX9[O|,2w۶"if{+'`x6cv翺0[~ ޜMOvqv{:-&̜9{i;"t6AAc3l>s+aSԝ|܂Յ9,Waf˯ رu㐏 مKO2slv'`MK%B߁f_| ]-Ŏ n!]|1pG;(cmd˯O:'Pp~;atp>0˧XP 9 ;1$J@z+* j9Sa| 19}Ba\㈍N[.\q#.T1[/-STq "..4M1`q Dz< 0>a| 1, c YVIFl2zBh4u &pZź^d"UUs +@"^,cT*T2iDI + E$I "! nvBb1Gl( eec`_YB~C 0;_v$MݸeE-w+N_vJ,x'͛ v$,C0Uż񑅋d2,\s桬,!tb@DƝ7߄Nnԩk:\pMf^ M{bo,wֹյT`v~urDiMDhomoi*fTbzcX{9X{'hH:f`oh;,};=%,>,ˆm[Lh"h޷~i,^]~9n,^ljs\Ùb!̴!p`.lx3 c[/O<|z vlʛx&oZ[H$/7CpR_|1 b'Nd* z:;فd"aQ<8rK W@,1dj*ese,>5g?M?ހH%cΝO??Dw*Bq:m<CKSk4 ]dzO=gxOp_g/G3pW,2tLWGBe4|? UVr [۳L8EݼzCfH"x{м15;x2g55gxk 'klI0FF K]iulODr5 tmD.t:fDuM PSӿ3~ņ 2^e cWyG_bl j7~3$AcuZ}==[н#9EE_j[~Yo?z?wX4_ 41+d&Ҵ;nE=_B[D>lCƱ'o~|i4~Yƫ6~&a` QYUs?|ℕ+KzwCǬ9{6pEᮿ XHf# Oǧ/8 tMlڄ^u_ݼz~Ɋ(85~v:n~\ȲW_|ܼpEV|ƛpښ5 V~dzu*kRW='D/h;pߺ~fm$IBg{;;:X /7Ma8.+HOޱrӍDZlG{>KW߼UE[p(hYY.^Ȋ Td߽cW/2^}*?IVq[fgukkb{O=&Cxႋ.Ƨ>ܒ$PA"x?3 $I8м}cݸ|g1,>G43Uo:^{%ӽ"B"Ow0t̚aic-, $Ie^l">b@- ϸo, t]?Pw^{ż{$aCFGso~6˰dD޽"B<æ| 6t6g4, t/`Xeʿ_W_|p/xIC,_q;jjk0$+>c.Yv0^  Ϸ݆V殿Ͱ0蚆'q%ʿ9{Dh?^47k%rZV{#7UI(]y5ߠk^睏Ꚛ) Pb}?eֿ ez9c sիqgW?i&Wf' sKxv}3f3`E,\z55{vβc@֮QLs``B4>8 ? :Ѱ0Y)++e|559&L/'\ MO?|\C-e$wɎ(~3*+sO%x Ͻ7L8}ZqYʿxeSYxjl!J W$@eU5( rO#?Co^0^bऺ8d++WN&B5k Uʱ9m7Y$wIӞ[u9{niϥ Na| 1, cr~$ ")0CPɐ%;g~7b!I{r:.<0>a| 1, cXǰ0QN|C;IENDB`photoqt-2.5/img/filetypes/drf.ico000644 001750 001750 00000023200 14134304111 017424 0ustar00luspiluspi000000 000000  j&PNG  IHDR\rf&1IDATxy|\U?;d$MҦPvTDRqGDAG(QD(Pަl͞I2̽<L%ܙrgnν=@ [s] r A1$acHƐ! #'*pX h9+3K(+O:fs"B'$C^4M*$a"}74@6 l A1$acHƐ! C@6 lLB+01;c3!hMV"wPE(1(i8e9GdIE,B&cPUP(A?"E&w=cYvtEp9Hf c X#c^xG y/*1AxG(,(E%$($)j*FƆ?ԋ`(MvzƔG1󢸰s*QTPS%, @ 00"Awcdt1pOױiC s*j4?@yہ`($1(nC̫^M"@$X4#*FƼƢEb"m( iGL^⣁`(VA]0yU9而1AthC($  @Bz;E?QE  p0`ad̋\W$3Ș2Ca.Hf א"EcQ֍0$2]c >oGiPC+H)`!!2r=#D# aRH@1(T{h,)B0 4 ^ 8h,H4bj(4heHFLc3G}S=@Ї] |G:!X,j!)PiF,"@{w:a$S1S T͚#a]=` Mz #B]'`:E4u6# 1@(֎&a6$aaaxd=],T9wFic\u53D 1sLy"ѳz& Ȓl dcEPč3>2}2"$Sp䙪aI\,;L5qX,&hhh4lX,MDB ϑY6G}Á. Mj?VK _!8xw䛦anH&p$fן>-bH@d s] ]pQXPd&<'‘0Zma$SCqQ)y|L3Z Aڻ[us쵎f)B]m%@qa s]O{W+:T5h] @YOYQVj:Horg%E6!\Nc()*CEY~S{rIB0y|Ts]O9$ j*Z*-.ڣP.ē@RT@BEeX\w4/#CPUB@WفbU$Y11oJTP5-)8 ,B@,ByPA‘E&wud$.Ap9](,(FQA1.pZ&Y~#ᬸBg~,YԒt6]BQa#BESbPT,!ȃ, #6Rqo-mͨk|EI$ifqqƑG~SWy;4ɖlb 8@a#+Bf|(??v!ݖd TO]'Sd! 2J&-@9! 2K-IVrA@dlX~SB@dlY~尜  2lVq~$DflMuQEDm v[3&rv%]ff'@@rhM` "#dܾ9"mLX~GskMub4o5'@@Y~SAVHYc\o1f 1kjM {HYato*''@@ 3X~sn[H17TME rֺkDV17 '@@,buQhM X 4f& gݽXr`G[~S!j &s$nbM'@@Z~UUXf Y~S FcD#ض V&sMSZN7uT nACK=T ؅Y̐0T=wO,L#|2 -{Lm>ks0FO$0Ol1],Ƹ +䓉zB~1],9C @:C>3Aمc#oᜣǀ9ö|2!\WEXmd`9 &2qpQ8 0d+t'ۅ"˯qhl6LNp+[!L; c>.L_C` %d~.L_ca % w1vV؅k<0T/kL w~uaZט%'`6iM'!КՅi_b@(!LWLaOW&˯1BN H!t?Ǯm9 6'c0V'p1<2u0kcGsY0j'3:yu b(Zk 8]N '`O9pGo2Y~͇9 du; bo. f.L_sIN 0Ϡ B>& awCd55 d1k1:v.ՅkncYO k1!|2Vh&˯ᜣ; dEC>{L5ij؅kY dEhhI],!9F|MdBf!'bŐO9dޞ&˯`a, 9 UC>3mޕ],V&9+|2?.X,NZl'!~' ɟתpߝ@[B>@d 9C9 C>Յ[BY~mc & ;Յ^],$9 x ;V&˯~i  wkO2{+|2 -{7p1ڜt'0+O晰 7o!ژtxrȇ3GϏ{3EQHlm~*Y}Um렐OZ:ˉ s'B>)M84'@ҭB>{ҕHZ(C ~I |82^tRȇ lsB>al9_ | 4'H(B>adR $tD4+ AFSUv4y|]i'b"A!\#JKqGֆAz'C@6 l A1$acn7N'},$3p8`08cp'?뮽ܮAI\BAY&.R LcLׂ4 H6 l A1$achiHvnє㌃li4 BdYv#/ߛ-ff` "шnw&!0%`+$IB󡳫M͍hmkAww7P5 $Ò%G%Gcn\\ Ѓi)m#7~}gCw(_g"yH࡟>$%,$IGAA!JKKQ]UuX`!-Ĝ9Up5l#Ivځ{544wx1{;N̙SNX ֬ŚbEx>s4652|>G"8dnwQYQX`/Z(,(c JLAC>o1]nTVҥ¹'w" &#wߗq0::юMǂs?znx*8spXv28.Lf?7*@ @ />XBdrzȯ_ۓ ! C(/+<TD"8Ѝxk/7~&jn7Yd;M_|q=^gH$.~oO&BNĺ}'BMumB$Kٌ?ioд|&<3)'Ƙ|k! @7:{P9>ŜO'~!U14$9&gx?>DYc @rN4={vAXi~ˇ?S2 mD%SW;!v9[D4MN.=O>-74<&ع-MI7Y\.7>l\nL6N߇>XR&rgp ·YpՕ^ MBC(Bo_/cv$Rk[+~@ҟ4M7Qo88O݌3O?Htb1 ē ^{UB\ A̯6y/J(߇lڼ O>}юEI`,;i9>.@4E__/^_ȣm[tO~]U+Owᙧu|͟~#&5U5…_~?ؾc[wuԼm ( lۂ魯9Yi*E9UU!Ijk?<֯^V@3CRO*6m~u3܊ x<(2cgքEQv7<~:8m_ƅj,{577!df ChEU0߻>\uպ+/%=1xGشyǿK۾әЌw ĝw|i"m4M^:FW>d : i*ƒKtvli9޽ؽgc{</Yg Ȅ_/,v^1%X4J## 1\Q5JWm۷'lHyߺrpՕW#?/?ח#-0PPP00%$YB4,Y|\WV (1 A1>|T:Qh4Z@+B^^d ! XbCÃQ88ӭ{+)X}krʆ 0p't Ցp΅6#ח!-0аOW(pXF @Bn*};a6t8jѰJ$ [~|e/d!<*7AGt/QT\?W+>Ѝz>_\@gyNnH E(,,Bqq#a:kiuZdI,S~4 ~[m~CWtwkqq:S@e(,,UCQiN\ظsSMLN;wn1::UU 7B@ed1Dx"TU(UXXY6; N'pڪ !9CgGb6|4ME4;x~^5s}f&]yǗ?E @I>i*fkB@de\;,Xbn\rѥ;!SCe⋇聁aw[Xz.N8D\r Q5j":LL @-M<1YhBQhBpxEwW\ UU_'"1H$|~~{ ! It{B4՚aڽ_ڝx_!XN2 @)1]e  dYE#좞dpp{sԽAu.ϘTױ|>\]ә}~~pB""1b̧/Ts>19*+:##[0-s?9UBhni3|ǯ%w -vFd20߫{ds:CWw;3?O;9<{[qÓs_@~=[ܵ#,CKkuh =A&|U=ry_n޾^<ģ4I,( vܮa~m݌e&0v>J nbʅ15M"֜Vo{Yl߹F wm55sQS3wFk&4T`΅1܆=ݦ 4 m_@YiYxbc옯%Kغ} `sP^V>@-юp UUqg]s/F 0gK01!<' Kj5s8X}ލUUFF28ysl]eh,9˯lֽ{Oyy9N_}&pꩫu/7/89FF *b)pڋt 4  Oϖ[}|:XK9VW4VT,YZױ01N!I5Wv(tkף(Jx|L @asY̟͟=W^~ts\(sBgWgR"0nJڴ|‹C;CP64 W޳FW?oz۶oQpqhZ!4(P(>l۾ = +p '^zMӰ p庿2&|obU$ wPU 7}###D.lE{,_w=^y*x|8e # |i3kn8 @?5rݓ$ ا0ww}wl}b_^\}q%c2 X,k؋o3M:B\g_ٜ>WAQÎ=GzXB|kRri>G{'ģ_ys##^tuw QL6B} AkG?rN=&;\.-  qc㣗T,29q$VwqBd H6 l A1$ac~_ߎ  ˲.#[žo箟1Efs~3aN@ ! C@6 l A1$ac#.W{IENDB`photoqt-2.5/img/filetypes/pict.ico000644 001750 001750 00000021120 14134304210 017607 0ustar00luspiluspi000000 000000  :"PNG  IHDR\rf"IDATxy|dUsV:Iwi:hlu@tXDEY_Fupatd`QFQyT|nhz_ҝ}*UR]QIHԽ{~>N>w9=@ _   A1$cHǐ! #gkpⴓ] W 9{^=dwᚏMS OADd kP5 \@ff! C@> | A1$cHǐ!  L,ؒ_JaA *P5B0p!2r@$s@Pf"Xc b*18&&J%*tsgAd9RQ^Vpif@eE#bB$SUe$a`t ÃJġg?o;n Ƣ"T(/( ) !:>Mж눌1fV6 a9$9oSehcP5}JX߄RRHLoi%m_h,fVAF ##肢oT"vLNMda<A`74M 0cH$߁DjD,00$qvCQ( cOMo b`T^C4px]!< 0DaDcG t\wAi%#WEJ+ip$;fLD$U# "x^|UU:!X $μgl2T:U.`MC3ZI+i14da]1"'H!J\sWM$\1[Y.B Rk.6t1w7}OM`oNza%$ (iWM5]*Etuw۳YH@W 4ݛ3!ށ.0sqzi$G!pN}}6iE2cDG 77ߐ1({YR匣w(,(c\*t7lvx MS}:?iv@U)\wX,ɮ0 Iު ÃLjg#cCuyr"$ ]uaI\,\2FGh>ذ[ 8\sGB B_#0?ԋhlG&&)7$G!PE"\X%ť\b1:zZ vO8`[ XIQV*t7 9G;=]Mg'$ں m$ CEy+@J]3[Y &&n7s cxt;"GH@r:z` !PDQ]lzOu*Z;[.B,B@ wYQ]>h˯rDı'$ P]Ybg,F#y^iIH (ʚzp 7,de$LVVTՠqwٺzׯ\XkLNr& Ȃe4\G!*fUb 1 /bEU('`,aMZAKsgNX(EI} ˯Y('`CTVTcMZHR!JKvusf6R@! #\qHLPS]y}[3oY~Mn{:'I9Mk6,oWUE5֭وPi'LY~s)'*PS]θ-B ,hXوumDG@n\dz:'QN`1Hr@@MѴfl !BsXߴWY=3g1˯Y8 )' @CEщ"0Ih !`tۀ@yYVTע$y1h,74]E[g jjs!X&Bru+VaEe S@2Ѕ~@fAd9*P^VpyX~Sɼg1]$K(e&4EICQ ]3<9,AAȒ "3#EC82ӊU*W 3`EbCpQε泊q&'YO-9b~j˯Yh=! Ֆߜ@  a;vY~B9c! lNo.PN`>$n5 ̃|X~s! l#__ |=S7p1@ 0k_i'@@Xμ*Z uܳC拎V߮'@@X c CTܷ 8 BQ.,7'@@XƬw\kN]gp,Nů9f!}  s-#泜 lj Heto.L''@@, 7X~9p/r$Dθ 9o5"k8"> 96ox='3G؊-fW? q,q v#,g[~s! aX~ aX~s ^]Owi|5oGs9c t ;oȀgN`,^ Ft]û1ۍ-f/&c %L&&eɄ'Nx z&'y`!AK~z+gUU EGð,fx+'!>1L%x7R伓5jj)t7motq}Nj*C$6e1vZ~޷e~N xvtogɩi8pd/F=?Z~™d[y"7$ttR|h'9`a"#{o3&w#N;W˯Yܞ(JDvihd',dLN` RTMš%B>yјC09|U7sdrΘR:[7ؓחUqOFe7Ҋ7d7\%fB>v 4؅k/n Fr Տ6t9ٌSqzN5khij<˯K 8}=B>V3.u],ƹ 8[_$.L䜀ʐp120c Cd;s 80'+e>TBQ&o!um 8VtaO2vÎ Z~[sXNW!; ;E_ꘜFWB>v;Jb!V&˯#pz|| Y8i=G @֕|\]9va:5:zf=.LU~Sri!„|@W* 9 SB>v엢*_du6N pRjcLLbo΂؅ (8+cqEGn*1dp9]N سs g(ipV@A!9S]L_ZAry:fsMpu/Fm ם0 Ȼ̬3ꂐdr k.L_W@^GC>ش]du71ħy]O o1 C>v[Յu du?sq=LgKC>v6tZc&˯wH1'Bt!f],!9F|*0Y~y zx1c5oمw|=c!'`x5cq#8غ״],^mWC>vم(i׋c=!;x.lM7J_9pm9˯?|xuaMjSNRcjUZؔLf.\f ,\],Ďe0qJ>n`dv'`H=VmOXO`٣B>"@K~ 1F_cz Ϭ]n&c ܐ=GogjVtY5j;)/f\O ;餐O>ԟƚ髉B>Qx  3iA8MW0<3! XnNPȇ M&'`<Pȇ [9V9:wPȇ L9NCe$ftMC{E0Pd3uT8ZA$2e Z AcHǐ! C@> |LV@ii)c!A $ILMM-,|37O^ M3j-ACd?߿vY~5N>dVQ8dY /.[!4M0AƘ | A1$cHxOu 3/Ip*DM.ef8`Ѕ] !9yK"b3NMkMנ e!Kpf(e.Nғ( TMZJzq`жA#IMۃֶVtvhDB˱n֮mѼuu+ !1Ht1kRAHTn䄫@$v|{2F%4$bTTTzq aFTWU#ɖc?y^,c]:{Q]]mId2ij|8zecظ[O݊=gXb5'UU7}^߱Nq/tW9K/@ ʊJYsN>swՍ`,Z/>i`9g(u+x'C8e.D 0q˭7t7" q o|K:G<Q8pn-ؽgWCX @$ |;9Jc*vz!,`  G@҂*+*QUUe|Ot:kPYƇ().qm<@s<jh]UבJ%Dފ_|z)D 3xYdmބK.t(IWOu{g~&nK ҒRTUVd?#4Yqޟ?Y TW$Io3T*޾^'nD#2~= Z:~oW^oeܔ~U=4}& GC D07c())Au lܸ ~<\~qWn7^A4Au%ٺuhn^dY6]]U3N;@nAf]j$a[ÿ B;p7 VK qF\rxɟ㡇DWwg1LhRBڮnXىJYm'z9BgNg߼>44d]]ju}Rpuf4 O/j_TT/p-r䠘9555݌?~-5kB=#rn_`UUqq_\dx,.x8 /=g7W\)p ̈;N݊}Q\}嵙me,,8G VU{g8xcvttvj߼n=nPZZP4477ނ5 EBy]3+ F}|4Oe?qy˲pBHT̄#BTWPd2i+c ظuРu)t֖ SƘog}4ԓO %HRH+#  F#ڟyƻPVgvB1 #>9i}YY; _0XO:3_? "00޻ ʺ^@:zz B&: pf*k^sk 8ekMLjw \~bya]ױijkj m۫G(K! !@lڑ}aTԥY#!@([0~b"'Q6h&_Hc`ҒRC!I*(/Q( ˇ8]pI`˖ }FGGrz`A$x ccc4$1!P[[ >tx(+3Ws4~38rZ]w߉{hnjFB4 0ۃĔu u8wf9[q 0dq]{p-X \B׭,b3 q !ahx}}B4T"]QQ^ZnhDCjԬAQQlE0zgBYqWcvrYP ز7ys :^=@8:h @> | A1$c~)cE{ec岎W_{ | AaYIENDB`photoqt-2.5/img/filetypes/ftx.ico000644 001750 001750 00000020053 14134304134 017462 0ustar00luspiluspi000000 000000   PNG  IHDR\rfIDATxwxήVe,r/4.^Bp $h1p+rz¹\ &KbSLwKZmڝyc-!ْfgwfw<fG3ߝ/ A$^ !F@Qax!F@eūJ?{Y ο߱=B2(>H@ R cW (0 B< (0 B< (0R`ج_Jcr"d* UMATH!0p/OsH@ $(Lc#`l,UU!8헞1+().Ee(sNg$/(rC*H4MK)j*RZ D >?eJ(BA@,E%MhĉP/b('zK)eSj C "Xys磼o@c1 41{/u3!!D#ü Wt Catv v1USsx/Ciq)1Ap?{;L%-934F2E+P^ZA!@LC@iGJb(ڻZb 0 MK8c'b8ފXB@C<EWoR$ qOl c"퀪 С ='Oz?F8+Cx(-C".,Hp"kYm8!ۜuax4~*`#@0UK!<u-{QL1ht='oHdcɱBo q( iH)1jL%% ihhn\IhlAJ6k9$( 8UJ"|>glo&c8ׅ 61F7 SH?[̄!1GkgS?C{w G7`SPLCQ|(+ z329G=:c$2cH%Rh+PL1JG(+-wlcFݒk8=q'zyD0 )%JQRRjKJ`%EBoi什Ѹ5E Օ5U|6fԒ_c"(f !Q]Yb{H)QY^KNf9Bkg3 D0"js}LE"nQӕfhJۮlTkTO Сp[lK)%*1Лb NP򛍔>(tHHaN͝~:ĢKShLJ%2KɯQ'` @F$*+xR()%JKtH,f2G`@Mu-,X(ᚻJ~ d@ 0Ғ\UX,K+\PotQdg,=5յ[RJ[KBKNJ~>fB @)-:1ьcFH)9Gu,[s?)5}!{L"}Tע"X0C!Dh )N'!}~U`N\UBQ]204Ϊ7PV'(r$G:̩A,ht(cq !i2c WQR\`Y*P( ߱D^ g.[4&I+(dMjPR$Rj Bs|>}ES|Aܺ2 K~\ل ,sSPl|⌣@8彰SN.(>|8eM@+.5 K~O4rVE} 7'0%7 Go[F}'Qר)}OX"Q~3OXcroZ|tSFŌ>!e((c+`o6E=;!(T-5s PL7^pַDln%FyOf%ِRc}$g-5>F<'@@rfגxO%ټĘw(HNPk'='@@攒lhBCrZɯq='@@ⴒlOK~<[ RÜ\kgݽ]yo%HOを_'@@2斒lu> 1w<p/n+Sp]g1=z{\K~rcg@ -G׉ 0<K~J g>O|1toCV(\A$O]%Z%Є>c p?ꛏ@qaPUЛhk1@ɯ 8~Qb(4X21jn/fZ*DKK~>W8#ӗ2zٞDK~'\v4sSWMp0\Z-/řpe[{v R`Կ9Sy7NOuhtGGJMezH!$c}=jɯQNp]RIm|C_g}QrBzK~>DS[={zdG{W3ں F J~hw`k1.t6 )Q|},l1;OH6>ۺRj Կra*͞S-306C%" Son'BC}Q'L-UeM(_s8O&+*8@ʅNO)M>Vf SɯZ;QXo{4M>V4 Gc |_QTkt@ 82TMűY|LC$fT7  ػđфμެbc82#L\J~>G&+˅{P| ʅZNpLdcvu5ٿSJ~]p6cWvpLdc)%ꛏ8\xJɯC߃}>@nM>f\.*;9zl'`=&+|T.|ЛT**-!T4۬O 5M>VH 7ؾ\xwJ~ 1A r/ v_hlM펮|5Xcc >fх6 M>Vlp~ Sɯi>[L>0Q.bra* (kԟ &ʅ; ?0kOvő6Z&+H)QRхi_C@.M>V‘.L%f>vj1c x-H0:Aa jgCy/Q~1Dp}3c{VTV4 6ƀTL =gp@}q|Poa0:Zz:πcxdɣ Sɯ1E:@ގBBl.,L,_㜣; %ƛ|8ǪϤm] Sɯ{$'pCo6\J~#}y9c6ʅ}hC{|Q{YT>1Opk8 æÆ˅ͬlqsr̥RItRɯc>M>V\8;%CTVs趬OKM>V|ta* MhhOb٦.$Qɯg0Oq>L.\?TMV M>N f]J~ǪL9R wLoTMV'JM>֒R1F%g|95Xo\FFQɯ'œ|:}8PUCIqiNs:j[;'_Ƨr81 f'Ց;FM>Sr9}&j!0C=rOpP! 5>tO'5b# dC_5bo 4 !Zɇ;˶O@x_'jkCQr*$XLhZ:1j.jFt꣍# BVUU8pHykzBE=!F@Qax!F@$ H$b.֮ǽw?M36k-!pŇ6Y R8>brz H)i  x!F@Qax 3B8]Bo[&ۚ6:UQ@D"Q+0!D<(M @L7UU166f/"e`())1%2)@ v9GKk kVhl5 @`ca0<埡 L@b]x14M CܜslTk9^x=g ,?7dRa- i0Fp`dd it00$I۷X PTTwگ|  [b[LKoɌ=@'QK!jX!{! O( >e}>֯ۄWЯI:K.] =Pc D_}էpmwI(e-FIIYց/8/u-//ǖM`Μ9PK !p 7s7ެl(]0սl`!4"]mގkFQؔޯ~ń3>yR 77;[9#XLߵ7i4 &y048~8zO G~;wp֙gI)g\|ي9G߉>eK/sV#/DĆu_ʬR}{q 7as|ୃogMEEEش~ ,^J3{9B6ͬza"iݓRW}Jwٖ<ǂ1b1ܽ}}F y#Ĝ95ز.=ox,9k??͠ [6>J[0 WB\{u󿯻`;vm(8]Eu_{wW]M:(H^I)Q\\M`%˿x@Q}Ͳe˱a&e䝦i8c/.K`ޝ_/r/:c kXsW!_)g >qw6Awً.|^ۍdW Xh16m܊@)5ƦݻŁblް P(LI_.!n?k>n~(GbF#x+8R[6=o`x0u֍@~lزq;w{i+;]{wd/u7. : Q2ġ3m}BT>= [ 3ƺ/(⡻iB,P[RNqeWw%+P[Rb޼:l`F غ̫G% bRJ\veXdYF/] ^r99 ˯&}<ڟo(rT;۾˴1KJJQVu(x3g:O=m|ӭQ!A9j幦 8XnC<ۓ:tcֿoKN]81t|G9G?!~˟ӽ"KQD5"4Pag0W&~Wx῿h}R 8hjnžw޸Xr齪.Х@S"*߷ ^|%]Xr;'zd䝢(x[s.[R\+ƺ2:g߾Nӌ{+"O.ބo ۿOf0P__/vގX,F7uPg/^sbB[7>`PVc+t/@}:$o8D"_\reB\{ܦh,:qAg3 y#%]kOMzDII 6ߌ G0 s?'-㡵pYgVi.Xqݿ {؍F}*$/R< m^q_1(8x5Xպjllǂ3 S+|u--- vaXd6߯g{o| NX1al(º|-376E !{ގkNwرk8?_lݼ:lڰe –MJw/~HOXsήΌE8uMpUݩl<]KgP!29is _&,[?.$h6b3 O?{` !ؾo8F'ѧ@0c0-D"{KwO^y5bុÅHwٖf}b7T[/΄`RJHCJ)9j9n9x ?t زa:Xp6o؊@Xw,~sX4(贄X`!D"1d@ys~ `0<' 8Dz3V ؄P\\f=Rb~|\{9(7݂oLH B3 ӒRvn-6> lx@BB4[@@FG!s;8̵OJ wͬqjBv<`RJו! ̍ߙ!F@Qax!F@>磧8˨A>~,NUS8د\It (0 B< (2FIENDB`photoqt-2.5/img/filetypes/pm.ico000644 001750 001750 00000023027 14134304272 017304 0ustar00luspiluspi000000 000000  &PNG  IHDR\rf%IDATxw՝VQB !0dBylgD66`(FH&'uLWWGό4U~s[~V^@ WS] R Ap1$bHŐ! #p9ˠiZJDpm|ǟ,+K^o{ J>%$C$."HFۮ \ Ap1$bHŐ! C@. \ A]+01?d%R 0 `BAP "RRCsYAdpH"$BB!hBqgAdك̌,d"7;SπH $ 텷@/T5! !RCPT>?]d硨$08a`P5 M=Σ`Rp]=^`B$fzW C ~?Zu1/m3M@&bBdx$  :{hl?3 c !5F>L,PHbۆ:) ?^ ܬ<067B %ހ?CmCz=a$QECsTURcQw~?a$:00|hh?T!UI! !-Ic ^v* og:h' r" ~v4[rUl@0* ޮtGԎ1txãaHF!*vuXڋ v kC|ּ\NS]¦D@.QjJ>z  /ЛjDic$Tۢ(B cӎ٣߃=*HH"(A[uU-PHM%VmF]c5 !UM@՜:T 돢G/=s دѢi+cUuG!37ِ1hjmgK3:tx۩`$R[PB >+ *j Q$:Qw,ɶ0 IΚݍ1fv478ڎXKΓ!Ǔf K2dcz(JGoBeZvTn;i4Ȳ= 1kiQmcBmC/ِ@A{msaefdA{``"PXMbH" I2rR]#';9 jۥO1+f@rmqWM#;+6`߃ƪ9Gs17;G @Effy9HOKOuU ۟چ*uj!TԔӼq@0 Ƀ"KUdYFa-Z~c. M58Ʉ` 󋐙a^qH7ε+)'#$cIDŽIz)͓fٺJ$o<z)'#zLE`\A -w_4 Y9W4(ATa  @Tb$R!Bdfda½ QDc D @ Ǵ3Ӓ80x9ucfq9 B#E1cldef'*+̩s;?,@t!B̚>E7E%'`9rHor*F 2ӳ0dfL51B0f͘)Ad4}+ :('0 'pC-*|tx/ U ADu `G 7; I Cg7.o'h!8oȖUPQ[7ۣ3dt7V컞ju][캪GKPw+=G @ 5!tÃ}8P9Cq7쾞1_7ʎR4ه`ߵ'Z~c9 q~c:!qCyAh/l;&5hikkȊ1چJ4TzGRY~cg0'PkÜc1TMՄ@yA.LxaaNCg*J>mK )8PuvaƏ]s?ˌ1>|4ذ}va&sMSQ^uVCl.\0Y~n9[C>f88hhC d5'`[`YSp0Y~2[!3PU+Jm O8'kl)!5Õc| &1o}Umk'rΘR*\ԗUqtv|3d5;l%| lnByA \15 m]sbm ސ!P^Yfk0˯MX}=@b!9.iC0Y~u7*cF|^.Lb圀Ȑpn30c -dM:s4Y0'`+ NuUBQ#o*д*-hœG,ov70qb9K^f|`.lUY~Cu}erk] Q>dV[OR쐏dVZOR  WY.L_aZYuJ>v`.\مi_kb%ZPȧ:5!3B* , 9 UB>fRPمkmHUa0Ei؅kRHX+cqlO]f1SHٕaՐ9z)JUd.'zǬ}.\gI&˯45%9_8TQvd'.+ c4\xM $;'hǐǀ{.ld71'VC C>fم5d?s4&q=`ȧ̦!ImC%j 9H8!c(4.L_̜@RZSB>Fc],C$LZ1vql:0M18::p4f0Y~9Ӯ'|̀ GQUO_'L|]87CN:9[M ~ո)c.L_j**L *n Ͱم[BY~]c^r k|g&˯;1#'` |찒kva0Rfndu'f'pk!P^Yc`@B@! هNx:b ȉ|=GgP '0h"23NVQ'Y .-mtb=0r=ZPȧB>Ʉ3N]bcr1_M!cTN fAXpN b uPPB9[q8SO!  b, 99'+H5|ěukILA;qHGm A$AA^ʎ/d-XO堇zp1$bHŐ! C@.F ,$;>1 ʇW޻ƶj-ACd'gr0y,%Zxb jtȲFX#0Bt#QA%o3008%x<p>14-߇PC @zzzLź4t#$ ~_?IHS5\|%~ qqh9~w09buдӲIW^~nKk2eȲ,aܸ"LŴqP2%,৿7lu <У7b_G㩭;oF}UUqW!8 L,Y7G_ߘee꫖m Bf;e/Zg/17cmǃL6-^o &N"j!ЄR}&Mor;dyK1nرs{۟Z2= A˯Y[nUlOO76l^Ve$ ۶W^nٌ |gPR2uF'MXAQa]x湭xxΛ~CKk $Iz[<Pz--wh9jjQYY9>NašO`ɺ?qtzzzaz?~\5W]^uw, ߋpw/ٴjhǡCeǖ1={wxGJ!@UU,^nYEQyF$s?-**!7'2oؾK|!~&( fccWHNsgynKG}wX1lzjWrwiVKk ~>|ߔi;oechhǞS}(l IhgbͪQ7ϣxƮ=_떝3g.V>JEX*iooÿP]Se>| u (Jm]M!8MpMe^[nD_#pA<3]V9}x5Ιg=J5mطۛC`{{IB5ίko:n6,QA%-lꎵ pwl;d/Zo& Ek[ ZZz<9x fϞc;y/1:$PU_x nt@rwoxokkk_?Ŝ9ؽ{:;(,7r܄eB+`e?x?25+nW.7 ӑ_ٳnǯuӳ=kvTB_|`0qNOhͭ@eUc9GYkj񝌌 ~ (g\kQO= u.X9~MSq'O ++˴-!"a}PsX~ϏYYYQmࡃ(.*YsFgW'v 4MÎ#7tr 0p]ܥ-[z`?^|鹡7 شeCċT>,Y~b-|KkA<YYXxi϶6g1hjecXh)}b` 4MSutx7/`>H!~ ػoΘHL[3B 77^pqT}>Z{1ŋDlNv.\Cg;Ht4 ]{=_Bcؼu# _?Y58m,K 10wܨDIQABh0aqpD {A{{ۈSLsi k֡xn7~=lyf3u_|%!u QTUE_ÇhI1oμzc3h$O_-y @M}=e{z=^_nn.֮ƍ+KѴ]dgecѢ%?>pzgOdo1"1B%$ż떭AwOno_z4՚w-ՒpXhiDIQQyU5U#ddd`0!xHD4̙=V>f˺Xj-222,;AEccE-=QFB g_F|ڂ9î_{3sI7tzBą.Jx[9{%"( vU +1FL)9sG| c6>l{8a"= @ !P\T'|999qog9p$`t#;+EŘ}f̘9̜1ӦNBॗ_0dIet͸K K[MX$232\";;iii]B /77\wd*V\yH($ K5d{ظɰ%|#KɔX~pB +c Y=i"qeWGNEqoш4JCۺe v:G|*}ݺ شeH@W)0֊'7-w ƞKe<*̞5Gw{{K/@ÂDR 8^ywض ݲ3gĪ!3XaӱUQٟY(+G+b[t}1w}QB`„X_G7_z Iv|{eݲXz-LSbN4\sn eaztvziX0 ==ذiP rUqc !W? &O[ӈate!Ï>-;n\l]s᫪K=wݫ[VQl޺u$)b6G_no~AB3HX3/-[z`?Q~2_zjXQw~TW Oqw[ގў“T\FȲl9aƌ/ۿw4]# '?؏SVK/ g dIƃ>K.4b(((D B/o2/\m跑)8-Hzja Td#2gŏ~cKuE]i4$v1 sQMZRu Ő! C@. \ AaJaudY>۲m27$AHQ  H\fvv<3;;=3m]U/vwuwU$r_@BIq{= c(D! 1QE-}8r"P>8Tq @&"*R6!͝_7$"nᬝB@b c(D! 1Q1B@bUKAb?;\ Ð(j: % EM0@4%" Q ` P1"]7a5S@PBIסRnݳ!*-Qtъx 5Q(t,f1F*[@I7)!v=7K"ҹV2hhtwBU,@ Cba5U e542ӆ#]` :e%'nHsǷW$ǽj&}82ЉhTَP,Fgm'PtL'p`/[[d+@]B;dq5BIéj%ه@5[N" Zv~<HeZZ&{YQ-f12n dr%ܛ^B6Wr㠀`T#L%K_!lqV ]706D&_jin0Ff^ @ WM/b-[jBI'gE*uL/xs?$V2Fa-ó`%MG"OYDucdnWL+jn `'XN,ͭ& _*y9ȫ;tܩ|0$V3yxZ<8rE'Ut=A,~`|QϗM+8<.ݙD;lAm˫#cI38PqojKa#6%M%a3B`i-%!pg"t.$6G 0|rR&KP@*S]B`.\"0:/lx0@QO:'PԶ,j:n>g[0s?eDT  k^XȊ]\$A,K %P<]mH)qk|\7F"Q}@Q^$cB$S9 O-*'&@<AkK'w%:Z[@._ĝDZ S XZRN(*ۊ"̡ƒ3KHe^ %MaD{0 aӕqwj(| &bDm1t[_IgO+Z[2j n͡Ppb"QhD`(Yq!Hfp}bT< lCg{,wK~ۇ%XKspZ0*E#8ߵY%n5ۡHe =>NN/`T]m; 8߅ζ`7K~KOv *TU=hoz"qUGyɯ g3  [p`Z\t^T*VQV}s"ߢ&lÉ+! %ڂSqBo=5>+5߻'#Qz9 %g?`VP8@Sw'ɖP[۳O@:}EG@J}=x[s4Z%5>$ 5̑uazq lFJgO t;HG͍N%NOO F P}ӊ,WHe (eՋZ%H !Z*[HA Ռ9oi'('ҨS{\trJݐnt !QZţn(mc6O๣y]$* :%nڣ4Tw%"ATU̝~}0K~S xb ~u`m˥(v-}C,/mfl L$<Ҁ2| 4 sWl.ΰOq j K~Z l 9T[+ l 9U[ l g K~k_ csK~,o'@)+x@I%Rɹ$B>( B>g(wQ~cc>\(C@,]>BB1V^(Ud#} J~k>Q~UׄQ~B ʆO@ho='x䷎ U⇒Zm'>'%ts> 0n%|vd#`P}K~Hp{]V}N(V"0:>%rjZm < ^@*%RxdQ[ .4ҿ_l䷮ } 8W,A,F & C,.apx˫U.LO  Ӌ7UQ)d7Ȓzhzp~4޸? 0!0ihZ0NY6B@@\+lvUeM P[>@@ \;̮G0:$wDJ~kO@Dcw n4斂Y݈\;>;)} !0UB [($2yCn7zO x V9 OP,ϊXZbph / 6\K Oc%UQ&+~FOy4o3 O P aԛJUS OQ~O 8 .xab*JZ>~F ޝ7v3F2dʅ}Y<\wtr!)./ѿn~OPD"FgQ.̒_{l I@-mmqϘ>w#Yk'/,g7 ooq=A-(Ng5ת4,. pfP 2L$B!)R.̒_GO_PC!0XqCӰQ~O5-68Ó X^Ml6s0K~}-M>>*g0K~}&y׏[WKvta6[|>-fɯ+E`r{} &)ۚ|e|raG3'lYNy⺿csxхY*/'pǁՅ29-^/]fɯ x#Mn"S]gi yOS&'(b}t.̒_J&'(B`x"  ד'S.68AJ,.O`>`J 3'ʅK~=ȚPts=ʛ|~rKw)uwYawp5E'](,]p/S3—]|hn XZuhta8ʯo'мkq.lwXghN7\g#;0@yCw%~>7ðotaG3w& @l+fo4Opy&?cta7l 8 DM>v+/20K~>{3F;UʅYN'`_5xy&?PY., {W M>NPn 7t6>R'х˅YZ"0:ko@&GIi O 7h,㸍r)$ײ_ɰ74|b\ (@QyqmцJ:bO(B ܒ?K'9(/ Ej&"|\aW@P>AGQ&)0hzc}`'#?G4'`-4p"o)-|DVo@JI/"*l=!00pg<={ Z"P-ԌT +wQt:Cq"&qkl}]mx}h8:0yY'"`(D! 1QUhkkEk<A#B #U\j>|D#o#\8t`9i%"Dp_}j t!"< Hb c(D!܀aϬ`VjYz Μ~cuB0I@Qc|¸.---F*tMb"jyJ% bK  kigU ˃/}նaNE|_@T5twX {:w/_5 :~^m5`is,ւ?C^tl7Dre==[_Q0por `hhɓǭN${c1:~]T'%ZZq쳕C,%]PNU߹ X,@P(n#qt /Pn܎aH4,=rR_~ %\+1d[]׭ Hr{QR7ߋSǏnɕU _0$^;ӧNu ^8k/_^ t*ׯ\߶ΟC%& \%ΟC<}ǽm%U*7mَvsno0U0̙Sؿw`k3=|_S7o"mc%` )q>k.7˂5R /_3gNb@JJ6_4r,(XNv\srV r\xyDmY@Uqot cۖcxV=@sgNa@߶ ^iyaڊ@`8rN:&fv<} ? Qs9KϟE[{;N U/>0HΟ>8튟y4p3@/} 0$8|'=eiǎ |7?2HpT<) }m N8$ 1Q1B@b Sz?PU spK56LNbKgsy3 v^ t ;̩RI}lIwg?1LQ0;7/}ϱJR |ۖK3|ZvSX{ c(D!'|ZN^P cez.H Vm\u0 <}]w_LJ7ָs˟,򅂕:?HoBHDů}xǏ}BwWg㟋߇/~wJw-0$9}/0a8ԓ'?nm !Q)w>@UUQHm .~ueADY()߱1 Y? =c(D! 1QU} B"_D}bx]g_W/]TBB@b c(D! ˿IENDB`photoqt-2.5/img/filetypes/flv.ico000644 001750 001750 00000016103 14134304132 017447 0ustar00luspiluspi000000 000000  -PNG  IHDR\rfIDATx[l}ƿ3CR$Jel^lo b Z1h4->KA"E!Hև<% $hMAʒ,2u)JRΜ>^!> 53g BH$Q!;(D !@Ha(D !&f`i\uHvBPwÖL'3_ tM!mkD@;va(D !@Ha(D !@Ha(DS+0dIV)9RWj4MkzU%bP*Ԙ EQ(u(v!]Q9BJZR>?T${L%L%Mb y("W@~'r CBBqǤJnx TgLNq @c_+`7aR?-O:NmV{E $SIϔ @'Zbg}<&,-t]G~7Ra C ۡt@qjÊBhu (1zqE "Z݂V'Q+^cҘH@ 6A#R Π\($PAw᭕-j#;d2b 3P9DžQf:4ulo+^{={BBNŽ?1{(@Ђz/wEUko$8PNC<*/B |+@p ZMC~'wZ]΁H (ʾ!j]!pRJ^\,ےC уpϷF_u|HGP^D+JTJ@V% 6Uj؄FٱoXy3Ԫ\ ԫ@M5M3 3H)Y zP^@(WkbAX}#%M%MP^D"x:@X:67Q+׌Gb=_"@~;mŸ E`ke l"͋-0mi6n|,4=^ §[P^@@@ZPB@UUcc ^f{ٽP[`PN RUcwԫul<݀:VJk HH{Ʀ@Jil1Sm!NT!n 22> U&'sa${#XZbsqt_@ AqUc/7BH,m j5?YsoPN@@U㉸!V!x/.@PB6m3v3A7RJ')%Ǖ 4>o5OY(UΦ|¬T u9˯;|G:Ӑ@Lʿ wןqoE(-%b}INQ)V@вB0!u6~edži_4s %`Il}4' ZMڅ`46G=vI. kgY@PڤGH L`Ҙf#]ҎXΜ@P,0xncMߊh EG18z{=?܏+0,[[Y~;<>sP:W'1xnXr`PJ)TL`}f9vtqcZ> {I)( RgR8dxʯ .9EjN(v!:,5VZGViM*Pc*bbb zc:ڋTAWNX3&o'P@,km x 8-n +^ #<_as?W OP8e܏#,Z~;9Gqk? <8+NŜ@ q ,aN 8B7U~]s(!F؎U~]g۱ʯ[Dy? -| nC ˯U{r#[.g}c((kl:uW>(k|k퀨(+n~B PHWk((cb턨(cfBTrAvJsAZ% 9 L-UZ oN@po'h(aZ>(mb터(mdJXs(; tN~#UjxO?[kFNixrI>ZEn5K((mf˯"d9hYd2PTBҡ[q0[~;A“!p; no1sX~@@aK3KUj"[a5QvJrayvӟמBɝ J_<Ѓ^0ZUt,?\~nq"hJs?B)BfvxԴ!@RE4J`OD@`ky+RN~!Xzz*Ž"3iԪ~}(JȤ3^w=':WXzҁPv7wZQvBsi,nvJL:gZ'96ntw!"vFPs! {ӭG[Zt´vA@JϤQ92`م"vPv6Hlk5³ˁ}c|i-.e]: G´Cr!'/Z!D´OPr!ʇC>Nk:gCjv@ @kX]i!B0- |?@ @;!iڅ? ]_g BN P`%+.L˯!'h|f8Տ̳Lsf+X_ ]_w{N evn]q_A.L˯8'kh|fm8ѿcvTxȧ@Pr+9D;t9 S!Gu߯-~ S8´?|'n|w\ų.L˯?~C>NpwՅi~OWv ՅWW}c%'+"Bl>EuaZ~_rC> Q]_⇜']_㇜ૐx]]_ {vsX{죐E`´FN79@Z 8v+9W  x"\.Lo*'YRfl'(b7xp]f|s{6u@v9Ko@q;' Ef)ً o64Ixkp<4 m74K+Sf>0-^pEq>0-͜+d7|pTB;´r @30d!8^]s-ōf |!'贺0-!x\NN>AbuaZ~ÏPv֝ .~'(m728U"򱙦]vaZ~9 !izN M &Q8A+0-é=#T]OƜ@üP]hc~] C>.p.\/"Co;'υ|xA:bXZ]FFN`hld+pW3|ܣq+'N9!o, @hw!$Hؔ,aɇ a~!Buh[;l>䝟mN=h|4UgZL!B|H79SuV|'ėt0unmckl @!Eul,n 5B,km*K5V!$!dCH6oz,oN B" C $P0B" ٗDoo$X\.tXjT_۟uB$~򃟴ngv ܽw:0ބy;RJh0!Bі}D !@Ha(D ;^?+5N mb3n_С먔+],Xr`jJb:UAOO+V)Wz}H$w)j5Ԫ՘?PN@QxA>w=uou}|;߃eޙo7縸?ï5TUm٧-|+_??OwU94][w_LBX,?@ It]m:rRJhuM]"{Ӷg/~xj{̿Ͽ UUnOE@s9X(Bi3iK/vBlejv0L q)%\m3.ZBXZ\B.3m嗠&(t]߼n6G;_<ʥi[wnaxx3#(1z{{1`ʴs3s:fj;4b .}5:@;o2=BB ŒNNǠTW]ib\# q|?B]( ;^: MӐJ\[w )%&pU,l氜^/[EQd{;{moܺ#g @?..t  *D__M7mhc>~jv|bW_j,-,p8'qӶ+K+fm/*5lm}ƫH8ܙcvg{Ϟ>P!WmyzٙYӯ=3r7n߀..׾5v57oķH jʪ:.| .^0}m7praB E,-~/Ela%j3xZ] e:)%Μ5fFglbDl[N/~;m; |OH$p{676vBPҋil[G{!}4{_rw.Z 5-(Vn]lhxݿRJ v3Z`/]ĥ˗hj87zn^3mhaVJݺs Cg8hJoo/(fzӈ':l$*P|FVH m(Px-??0p@ -\EQLRP4  "RF6|˧<,bano|0)%ΙV0+\ .}[jJ)K?3)%qՖ=qΞcP3(]'puj`{w~۲(MW{{X|h=,.aM@4 b-]KfM'(X[Yz`^m.u9EoNntsMD' OLlgvבR6ZQT?GXu̚δC #D*jPj(&LݟB24xBPF_EQgO[㘾o~\b_xim676*V+ʶ.ְs B[ mG(-۳5(͸n+z7]He7x [kl@C qT(45jgX_Jvc,>tF !TE5J8Ku[u\blOf3cwuQtD5?D"RJS)K" ln%<(ZkP"*~?_[$ L?/ik5~<_@kd}{fwc[@?y~W^(-hyRJN Kq+}97BPpc|rxΎx[}Vuܾ{|O!'K)ћWx/޴T]>x`K(' Ĺsټ4{-W]5V=*)oӟ'U( TI$t]8]kD !@Ha(D !5( tdN!BQ|l- I \ $P0B" C $P0B":/IENDB`photoqt-2.5/img/filetypes/epi.ico000644 001750 001750 00000015056 14134304121 017441 0ustar00luspiluspi000000 000000  PNG  IHDR\rfIDATx}g}ofvo|cq!JjHxUZP)RDPUB*(V"H y5 {o뻽י8w33;oߏgf;;=P D҂@` c%(D J0 q?rM#_uM`q_˴~OD䐦m,ӂ0~OD䂓v J0Q1@` c%(D J0Q5-6 5┬(.Th4h0&L\t HS:tCi 8WL ե*P)UP`6_lѕB6E6E:@1  v `M%,.Xհ "R fÄY7Q-W0#e ˢoK}Y9@>bJR*K(IFy,׍7#N)Vav| (S'8<7ڴ,ʥ2{?ΫELFujklAem!ݝf.c̚ˉ" _ 0?3S0;TQ)U:)N)@VLx>u(K(Ab8W),~FbU:pP-WC)+"(/nbav!͆PAT q./^=(RX_ĂZŊ'}< 5XeTa_ePľ^C}Z\J;p ^G`{ڱ/߾|O3xK 54jH]Ri@DXRJ!?G~8Ӽ!%쩺hmyz(ܳpKDxnM0yz2C# K)DN!RW,nXӓWW &NOvBKD0f&:;y^xp)Qibemfc) KGꆚ@u{aE M4 v1`HXn.Z&`Yk?UJaD˵Îp TW^#RcP<#"ºA?UuZ4NR@*B++jJZӓM <b 5t L$S&沱9hNj:OGr3lkDS5Na"rphYb#<J)dz3vkR }וPJkloL '9/B S:r[rì:zN]T\D0&`= m΅*@f9>Vh''`F@`(<6*meŪ'^1mɡ't_Vf' 0slHpipS#F%0&NO)@3.ٶkTv duT5+uK4y̌*C==ضk[p Hg369)mR '}3#etT@WOB&nJ~]o}1\+s{{cK~F} 4hAOvہ}+NJtC B;J~y `ݾ,ͼ|J)hvۉ+bjɯ[ f''#D@}(KX]@e˴rv){2e7Їl.kpщ\XոXXٮe}}}0ˁ"J~[5qzo61ݿ`x±%H.@|OVv2V =7* 3Ժ=^\O`M K~[. Uz`0_>}c.u= \@Ho+b S%O`|,0'^ۉ1&}=y΋Y~;6΄' y5o$y=y*Vƻ@:@ Cɯ[I`gRۊ 0!+u= 0AaV$O@m[.- J#i} j[hK~[>%%PԖ(>,*%HJZ_7'DUq`PKXVZK~]WM0u.} r'%0k`+q(uc' Rۊ 0ȱ8>@;VA ԫu|$f'fc8'p*>} e*{McJC81HFP- ?k*>6:~so+,3>}<ξzʲވf㣰KRJ~݈S@@DP]bԫX Ǧ1x $*}ab(Js;9$CJ~ݺOsXILMoxjFy%׭f'0XӢ AZaKѾ@05:VD}=`ia #GШ7,10?^?ʥ2zQ]4j Ayݧh9iK$"} eԛk鑕 ?d$0,u/} 4&NMwZW!%j@,@DP*žvkh~e8q,mCD~\x\50KUONX\8)!&V@@YvZ+'F#eɯ''0R@aK.z$\%ވZ@d`uľ\%ދJ@$@DPY˴0z",\d gOݰK"bha0K~'"N|R.|,>,W"n||R.̒_EO 2&Ƒ?&K~;#} &0YUWF\%>h@M>x0K~;+}Ϛ||WTgfoO sƒ&?Ʒ\8* 7a]O g1 9 NO&"% 6j'CG% c@8&?\%>@|wRÙgBY.̒pz N71K]%Bn^=raOXBA4AD0yf2 7'* 7'x7|0K~- }@|<, >< <^QDt~vaFr "iLWotGgfot'HxOT:60K~'>ԑWF<['*:R.̒H OL}7Aa߈t@g@h|bN?g^.- ~Ԃ Xn CDg\%ѷ:'БK<*fotOeǼ(fotOXi9&]>W'-V|Vgfo- OJ>QrvaƟhq<˅Y~ xlJэ˅Y~ x nrQz,M&?< $7ara&_}||,M<h;Kffoy@[&XU.x~ ,M2v~&T+8ĭɰM>MΦ*n M>ө>q //Z 6C4a\@lW!\@W!/pl! lOq,3yjD!n4&g! V@R+l! veY893R}M+gf058M |GZear9iv9>arGϦ nz(:<8(D J0Q1i@;L&8ȥJRy4 ~=pf#CDƯkCuh4DQa~1u^il&qTϛD J0Q1@`m wAfvƩ:7# Y8jGIwa30B;A8q~o?eYW ¿+çmB&i"t:6u\Jw᱿y gNi]3cmɮi*G} [A,s} 6-Ol{ ޲,h;s'J %=Gıw\.}#=eӜ+`Zfn`$eYML/#/XD-{/mƓ?!3~FQƿ^2 YOe PA&~Qlhӽ|m "ص{W(O*0pmOws72L(I0ڴup+;xgz=`;tC z[q}pcp , 6)eKBӴz5Mi t=:C-׽܍l6 {qH[nzS0dЛEOO44M[O رs|ϝ+(fU J)4 G@` c%(D J0>l@5g SIW4~r/E}3\|} 6yox{ p轇𦷼)6nciZ^ry_7]7\^Ga4 6 x<=qb"z'Y϶o wXNThۗ^a%(D J0Q1d^pE06zh` J)}ؽgw Dvi ,OޅǾ؆ =ZTJ!Nw},W끼cA)[oq[@)pw|V将aHÌ˲3Q'!%Q1@` c%(>\kQI" 70Ϳ~|Di^xLUVJ%%(D J0Q1@` ¨˦uIENDB`photoqt-2.5/img/filetypes/mpeg.ico000644 001750 001750 00000023151 14134304164 017616 0ustar00luspiluspi000000 000000  S&PNG  IHDR\rf&IDATxwWV9hF9ɒe!YؤeͲD`c0^a ^e9=, f ۋY2,6VҌhrӡ}hFsMuMUu{]@ Ws}Ap1$bHŐ! C@.Ɠjmk .pMxK)GuH>' Q)/ZWEO 4Pu<Ap1$bHŐ! C@. \ Ap1)"aŚDN!0@BHē*b$IɤZkW8ףQzp0>!$D!0 @(H(p X U*$ٲ9cP8A~҂J Pjb@B@d€xBh#cEbH`lއ!%*W?ϣ0(-̃B c`H BM}L6T;<`eEXVU@Op0$Ow#aBj ___ƴwHqUcYU1^!Ȁ`M]C kWHhX45u(B&=CchD,b`4X"kVq( zB9X2{ОB8 o+ 4!hPENc@8AD\_!8O9|"@U{Od>ӞF:>w8ш%t:Fh>X$ K$90jUbq<6>,@Hx]`L#@d <$* -&cd"2`.&fۭO?Px2GBP(km\' ++aUH Q!$FX,$WÀxx&*X4 2? ,IlL{]W\80NB0DrV / p@ \h~4u |B"Tm5BN<8a0`ù>Ǣ<\@p5S{ M,鞛hhCt<BζJ a]CZz'ʦs5  jVN0;TUZOΜ'U܃dYyw͢pQ8 f AtdhEB0~&7Q8O$qǨ8J:,A}eɔ J} VYfo`Eb8k$ HAMY*K-,Y{)'>$)PUe(ZB*K P_YC1_f('$@A5uyvrĚr8S.S9 wQ,ںrx(ᚥxs}9A78L9=AmyWQ:(aJ-B9Imy!/ʒ|l\QB{ؓu7SN@$PQͫjP[^Θ)B fFZYS ˫P97c@0Mob2'pr i{~Y*1D(2!H)Q8ʊ򱬪NN8ߦY~ͬt%'PeK "Eywd H Uh7Kmj %cy䡶a$ݳap4U ]Rh9Bt_ ]2񨾤e1<h8x U*䬉.< ?EiAy(xDwZUU~bؼ($pJ D.(D@-9CSss$D N oL  À, ęHHtqjNuT1it7K{xs#-28㠜k@=# tᜡA9w.v BPC;"Κ1 Ho&$U'|` CcxbF1 pɤ3Lc;xӏ^&pBNp4 f]9ch\7X~3czN"hH&hx4u_MEtohhhCsм7/;3Lbq78!'L` 8u'e1H, mmEΤ7o&='<` cQi@,՞9cHC;bd 8o6zx" Er7 *@[Oǖ9G 67a3}hlsq*@ Dmp0!m[T%pbJf]s08ƱPM0 #7.zv]OXG;05fC0s]XUUmC5k*v G|:C>Cc[f3d V FB>cќVR.L`-`Fwp=d*V X_B>9gmuaf+-3B>ֺpMd 3X/'`] 41p=dIae`*3ĸ?{pՅS5䐏 U8؁^ ;k K![.Yڅ',Cd)Wrbk @C>FPȂՅY~mvIrl|̀—,T],*9K @.B>fCck[-`&˯%JNs1)ro&˯ur9 ^&B>GXX.zkY@D["G_`zW3i~\nª\K/Y~- r*V g 9 OY~[\r' ]8Յk&s9 F&B>-1U&˯H 39 d_pDŽZuaڏ\'u0k%;0Y]Յʯ\O {9 B>fIՅ*%9 c_ 8.l]Xd3 dG&B>10m} ĘjNڝl"jRs 00Y~C6sYs}hv@h qd+'`x%;`Duaۇ"c*'`z |1EU^.z T'伐dj&˯s 11'`И4-Ҳ pjbNxpQhۅT&˯;03'`X|%;0i~\ 0Y~] 'B>V^p0sV&˯ q{5L1.L_1h31@!S.<.L_9CS9 |LEJ.6a&˯1:'8Lڅ4c8AH,.蜀g1NR'+Lڅ_: IRls/+]UxQO 1􍌡g˥&֠4"'P''pџ`\N }Sȇ rQ9`J> r %nXɇ DR]\N@L|'؜>3a-CB>aYf{-RT!pR7|dHlƥxN08҇ڲ"0HJ8zJUgHLs/*Jq=gL-:LAXp1$bHŐ! @T lc#.YJwB@a#E|,]J_R[7dM ?7KPU {u:h \ Ap1$bH,jmNLLf?j2UrYLcd!! Zi-965R8Կ"x$~GrJ)'9q9<(Wnd9qsW"Ȭμx<x=ߚ ::F{W7.65]F8>%Ũź+~Z\EQb`?` p|K8 JF-pɏރZ!L} /:rVf;naxx֑fqUpx=|^5UX^_˗aŲzTV7i^( ^oǟI HUƈ!I44^/G/ly !/QGAEY_o܋7rm~c~ L/Ggtfkq7 }xqe߱eӂGgCXR[׮Á}75އ ׬̼:?hq˞/~2, FgWOZH&Uz8x^w[ yC(..ZKcg_@GgwZO5``is*BB82~_’j};%͛T;Kc6'# '~o|{h2g_Ox/ATUUZ\&\niƂ "q DQ]ݽ}xO-w܍144hkk?)<_1Ogl,<Z;mm}i004c'O!v<GpMcO7.8ǥf|CG?}k:Vg)%^:t bUT9G{g4\s/CHKHՍ}!O/hlk<g8yzzr}3O< .>ï~\p4Bê_Gaw 1HWÓsgr}öo2al,^Wj/hG1*v@eErlB'08<޾~CiO9|q' ;VǃRN?9.])_+}F]ex< ٍs/l v~VU/9x4 7rK3!Oݏ"99%%H$Bh‹?{Oֽn/~;|GUU!^uuQ`BJ~I~??1/61۳ |=8x^TUB&pM-_?|8茹8V~߄v鳍ŪU+fd 8vGf+?/xwEumT`QP[7cMm?=ѠCl0 ̌uK|i W x/>>goeZel2W-ݬ%Kj}] Gp9QjhޟϽkuڜswQ]]$S-)gŊeCw{+/00{K+eضyO4tL1C}>vEލ_߸ΨFG/#f?H?g 8x[ބ>(֭^]m ^6+N :s4^=Iey6o\{u[|Y;{r3 q\#NkԵyuU%ؽ()+]\Hڿ|eH[7h֯/\Bskیa'0vͪXNW\gyY)/ӵy04X<SЋ!mmZ-ddӏxzrCcع =<=(2w(..FJx^<9b8;kۂ|z;)|)%*˰uӆYR Istv1޹ &:Τ*u3Oapp.|5ksffXϋ;c'&lSg=;+^^V6X"ї^ypn۴'$wB $c&営)_U+aՊe֞e 8u j ɌIou`l,k۶F{Vu\\19~vlyƒ6m@qI{ցv]WVU"jC"ףs_mW PXukVZ;!)$*+ʱes8_> nڿw^@J<¯70kU+{<=7NC&TUz[Rԫ]=x`-fygF<߿ߕcֽۖq&(>k /2xMRmF%G $;mAAA>Ȍo${f .|QYg L&Ս^ }ۺ]TUb捖 g\ߓE[x5!^=8_5kWaYݒYؼ>-ף4=8tcG)%1tul}8I8x=v`*Wm IyGU!kқV,3f$AJTUV`kӊޱM3dq<gWuRH$ɌH}>o?/YƠ&9y~?8+CEQVZz]ؼiiC}{vч?eȒgK]GAAA#@ 0k~ݬ~I Yvyy^7؇&ٵ^y޹͸:W圣D."SXVW-XCn5kQSU @E3I3󡸸5UXbl;l–M5۫W[/C&kz<UhuuK0X=i&.j[W|lBo^w=B~ QR\"_)t1ك|"%n `(nlܴ+y?>~]#ONZR>i$ 7qr+8;OZ;ub=hXl)|>oJCx >ofOr!ϒ8@[ķUUI6lHQZ\+y)xbB(s]gnSqj&{ι~#$bi];qJ^ CJc6܊>>k1)ž=tYqz9#(n$$={߉*] aO5w]׿.iЕ l?/oqx(>W1:2Xq@Wţ/(k_jآvS|UsLNqb_?Aq~?n^J__'kY)Q]S;rꌮ%τxFw7Һ% @Bq'Ͼή\_fS! 2l_1|}q^}F(!߄6ɧOu5Xjj108K[iEa zVGNi@rG%:{\-8C8U⁏M 0qpR" _'|7,ٵEE-6BKse>ښj|[h0dʟ*+-ww7 l$#&(,*goو/[8raU^/ۃ>Ar~pEml,^BH/M ud\YRBFٵ?~yNmxѕBٵ{[qnAiy2_"LqGtHuZhnG"~ׂ{%fՊe w>6*.oK7|^9Cbc kWī=mߊbR%e==@2c±p=z NXCD*zg묎kzLXq1IEWw/::?QǴJyy(/+Œj,Òjj,Ǚ1F5n=Uw. J9Uceeeشyv&^%¾@2հs} |bHŐ! C@.&[EZ' ǣT/E^f;ABQ8єۥt\h \ Ap1$bHŐ! Ptxթ-IENDB`photoqt-2.5/img/filetypes/xbm.ico000644 001750 001750 00000023214 14134304267 017460 0ustar00luspiluspi000000 000000  v&PNG  IHDR\rf&=IDATx{|՝33,;%v \H\$p醶I x\ ~lPݾl_\)4MZR 4,mi ~ȲlIfرI#iF~>':y9sA%]  AX0$aaH!  #(|f-] N89Z2 +[ EV}NAhDÝ+@>' b@K!  C@ , AX0$aaHQ #NKi@oηu.sB!B2dYf Q!%6$B"YA?~O?^?CȖ $trrže'%  @0@ꅿ%168C2䠌/^H6 Nsu#D!{^tvW7(3X6 Aٹ(X˙3%2x`o]M]u<ܐFЌAQv!B>'C t }h@?Kݏ19$~?&L{Dtzy@NJÏD`Sï$N(<׷C ~?Md4$Z`p{}{Fw10mnhZ?  a` hp)z+bsL5$ Ms1ˎec2玞Cp; Բ,$=Xᜣ5!R]fZ\^ cC_O8z}$:Ap!sq A0*Gsusƞo! c lO|&0׷^\fXg ȲͣbrPFƌL$ JcE1H w{14 ($쒩n,Q .A6CQ"Or|vmCp6-) tWE7clDoWB?Y\Mk0 $8]Nr3w5v{SfUpN 0n +(<ϛW _^|^C2GcDM# { gX.X7.9ҙu2kBCeyȢ*DId $n@ޤ1x:< Y~㥹 7z}@o[L`RԨ`2g70<'0lZ/A$9/c7ߧ"B@-@ H:ɲ\ PNSHDo殌Lh XFp %H&[~c0 D~5j2n@'Yd79sr/1x: Z~ceh?N2RcnFFUc k00׵[fO 1~V" ig݇5Xx{y}hiMwU s'j+k4gCwKwx@vʖx0sN [㚲b-5->A1sN c14mNU a` o|5' {h3  xdM'`~8?]Us. 16.l ob0\9 W!OGק֐]δS<1/Y~ul9s jVۖ4zX.L_}0[N0<̛1vaYr!d 2.L_1~9$>jGOc 79  )@KGo2.Lb OR~_~؅\̐0 |k$ZM$oj0zN401*Oԛ.L`9 .Lb䜀@OeՅb 0 |t$~fY], W|aCG}Gxf7}(rd|4~D,ň9c @C>va# ' $;zΐva'`(Hu'7d5FOPO2\]Dad5F JI1k1d5&F BI  ׸!'v0JGK],9 B>:Յk|r=陝I46P' 0әՅksӓH0؁jc|v)]],!9;.L_󑮜@%xn;؅kJҕHp9ܻi*Vf`hk#˯IIuN 6ֶZLƒ߶t&O e0f.O i0d^'Ļ0Y~3#F,ĸ0Y~3&0t5%/'u'.L_ː̜`ɐ مF :$3'X87d& &V$hvaZd $H ׺ 'cN aO`uaZHH(مzE_+wN@J#B>tC& }~Tc rH&09<؝ (:?ʉEϜ@\@!FbK/'dN>a&t ,A =Y(CA h|ZζГ B9m0eZu F9MQsB>a@ (h8~0$Th/n `4GEQ4W7Ud4=UrHUg0t 9y99V^#˒ 0 $aaH!  C@Fv"+++$"F~?|eT`]:ܹNPχ H]؅ocrj*T Y$ %oS+9,&dߧA@0$aaH!  ހe\%{}d-K=Cɐ |S}n&鲌Ӵ(p8ۇ`0 @D$$A w ¡(:@@V p8EQ گ$I; S&A 8OS|އo>EQpղطfA铧w &~a\{õ#,;{1500͆硸S/fb欙()-ဢ(1?= ~OQ sݸcgmMǗ_y|@o ˙feOTW. ¦{U˖/.ΞÉI&,J&|q9Z\kP<\ᚅ+??&j֐p֌1(;կ#16$eeʰ5e n܊؞?G?_8*050#`#&)"qh!p%9AaY! ޻0w\ղG+ŝ΂ [ߊ@ Z5+.7dwœ}vʡ7cяRa(O_{@(ΟDJMse||cղ3.uש7^{ONqc ΢>ݗ\( T656aQ U'mP u03v"g\远8q ,Nŷ-u4::pwq1is|T|7zV\bzp 훶N^Mw|?~M((P^u5u8 (Oph!p >e>j1O=\wu/:q~E<ӈP(9$faO]|:qJӠX8sgϡL&08~-M-l@0`9UqCm܆ڑӂ `k{?U'c#둝֩P( h2Eu_/q¢BL9}Կ{+̘5yyivf  WE/R-Zu ;鴠 hlhFY/d(_\ni?Q%fB|>M7l'G0،1x{8|𨲌1,\>1BpL*Aņ M{#|i'=Q9ǮwT7{lomܡϛsL8NS•1/.#ktڱh[0kqQes`t@EQpkemQu /U#I~\<[~#N'${cɜs̚3 ţ>koONC`9ΎQeKJK0}tU!187n*6TP7 ^@c}j]oXV= ~EaQ![(&bƬ>Fڂr(P!Ѐ,˸q]w_ƹơ(_`(``8Yu>O3#vc!;'e"~vh!C8rHre!Ј({0sLղu5uK7aAV?7 ěZn㊫9;7Ft3 EF}ֆʣhgfqI1fΚi1@N/ߊ=}?cY%}ڏ+n7:;:#6EQމcWvヿ}Z/ݎ{߃ nx\4y_:M#>Ca[8?ξ5YEx#ufVwW7}1eY߇w<=cws'n].88rrrP ިϏ>ӧNXdo٢2degj,Ĉ(܊aͫ/_6 <\4%%P(3v<Á5?}矐 !IҨkk7#v;A`6tbs3|ؤI1s?U2n⥋c|EAac9Zn|q'G}VT\Ysfzā,CzZPyyyF1|̸t/Y~QXT^"\gÍN.Ŵ:3YP{3.&R?N' uwd?ujUo@1Qc?EQ xw!8QSJv\;tuva{xqw'O$i-<*IR @W.NASg4 x7& d N8zy|Mݟ W0gh*_XTٟM @'`xw37ػg/?CvN6ƹEɉWRu =^,H41ɘ6}fLsB4(⃿}iw}f\wW0%7n~A>Ob),mm8Yu>h3 @ IM}]CPJnce ^n-23O?4-7o`H-T5I EqoĈ xc%+3ΤU@uM@9&`( _nO\2>p_٭s`|q|fg $1 cQ}/nyѐO.9B\Y*RsEEST%zTL:^bs]/‘$|-Vݼʰ9xͨ=W'Xr咄υsW t=$qJPe\{p\HGc ;t9^Wg6? .@vNzW(()-VOUǪ4{"`o<֏Y&hO@#6nӴ%/An^j{b1eMeϞ9kw\IOѳKy}v[ln^.շ 4hZ30ui*ڮ|?BHT`ƦmҼ˱bu>:Q8Vl{Zkc? HT`편PŅLh2l3w޷V=sSJxm=h*+2=M8!aƭw{. YG:lߴ`Oy@2[vݐ1DtH( vl߁'T˖-,Ýw9WJ'bC&yg݁A@}]=NT;r]$3$c ">_Wev;xL2Ҙ( V޸W.W=ۍMnIc sߣIw&N"0!$`[2juH\n5 6nYaw72-8<$I_cm]A0c֌ ;$~Ϛ6ÃDn^nA0Y+k``[ۂ&]E t(zQ[S7vy~ۚNE`meBv1tw`ׯZ;nweT $I{¹GG]xr>pF*_]]hinA[K@Lh"L164!$~;j٩L}5( fΚuoo/U+1|^9{Ϗ{&z9ۑmLz 8{,~窍1 /Irq+.W-X߈=avյXr9L 0B^"Ξ>Zve 5|q1x*6TT-xfZ0Ъ< 8(8 ~7e?%%1=EV`媕e==l&nC-*Ï̝COCpwg7K˱ƕ1sddc#1xjw. t庰fb,umP/xA98ըno֑C?DAnWIO]Q#9OEQ {1cBO14H , AX0$aaH¨N.Ey$I}\e`?> AQuAX0$aaH!  C@v,Fv/IENDB`photoqt-2.5/img/filetypes/mif.ico000644 001750 001750 00000016247 14134304161 017446 0ustar00luspiluspi000000 000000  PNG  IHDR\rfXIDATx[p#]ƿwK$==;٤$He!T $!^*ޒTxH ʅ\HAvg<;\l&lY>_>}C $ `9X&0La`0a o{Ioocr&UazvΕ[e7oK!fݩ vd2Vh+`5j8B<h%oӳsuG"2VV|#v+Ǣc !#9ӎgwYu$(p]ð"hw]EQdtwtkxk $}q. ms=>!:ZE]=J{, csaB8Bow>#BreیR>8'`twuUowѨ+G'F9k $pk:tSL8'` HGrm'@<ڂ}pղ[@=IG[+Av !m`p+F#R@=GR[!Fq|`7˯A8'P?,8'ֆ=X~HrN&, ڊгc± ,H!?6hfЈ@MX%8~`! IqjBet16b5 j8/#I[jz\CQE'`gې5CwG1Ȳ:Aқw9'щP/3$B<юl>Vlۅm]} KEAK$x m8Z"aHQ;~l.lq1 ip< h1|N>̶sa`lloCmPU$8'rJ%-F9^O`rJYWs!0 XڳBް:ݔ[Bް]ш8'Pr_,F)``,AuLX~ڽt]x``L\w˯v}=t̪kA^O1-7 0˯Q``L-Fz,)e5z 02o#1'4{-Ə#h 0MVoCl=)ʖߔK- 0MQ]l5Jr,LxA 0 5˯9XQ&|``dMyk XüaMX90^6s,!V``/FkN_Y~ ל@@4Ifm$`g9.p,,/ ]11B~?_!?#"FƑdw~is淜@ Grn$a+ͻcooG?[~O9 aemw'&w]kVi]3 ~ ZVΑDi=?D"jX.; OƧٮZ_rəf]5Mí8VnY~⇜/ܚi "l 9:L93 2[[Hu&"3&P({(Y~nzNwP,q+1M3WVJo >}Em7^ NI,,4ʊ0d*xa`# O֍s""&fRM]BNLbaN/->k  Bh:CD(*F c qWs5@6oNLps4Xva6G9'䡜@w'&n]0[~Au$< X% 9GrJ!xvw-&2鑜'Z n.Y~Sl5 /<)B>f.30[~+9O @=!)ۅo.*vH څ5!U~ 9@#!1Ŵl<#|@q0[~9@3!!va . ^ XѮ-څk/ Ҝ̐HepbU-֜kHDH/"1=tS-Ɯkۅʯ1'J:cn ʯ[pSNu`WNJv0[~]rR!B>V?`d]va 7\%θ}!+.0[~GQUr>'*p"ce lu'0lNP~7=P @}u]$[~]ݐX!k.<]lc˯+ 8.!7Μ7ɮ]3vazBrιঐH;w]ؾȖ_o@lN1 "./cձUf˯w(/rDvC> Xs-vaz]1@NvJ 4].̖_TNvRl s_ocwNVbNJsd0S]}׻8M򱂽Յ} "^XuNR4.\&S;E!ivr<[~= "~ b*î,W{¹|cvaL|\ HDXIq{xua"L[e琏gIC+Y~SGʦ9+s C>V@ƓɺwaMs @B>Vinifo02'`1c6{[U9 r @C>fS \]-d‚i䐏 < "!|Rua+rM =!F$Kl 6fC>ֱ[]x,Lk sJ3_V5 w_QJSwAT*;sD 75}V76Ɲ?hH8 $J0)'`j8Y9!qf |=4[800it=!q7j &trȇa\M9N%twCea*;a;: Iֵ׸ x"xrm9=f> *+e0a  0, `jb(ZZZn'0rU)|G 8S}Z;?rϝ3 10֣( g.4M0x"ڷT%xa  0, `X&46)}HA+DMF8Uh{SB9]0y86VB_HV>N%";BH{"TMslP(ry"Vf KKAj|" _W:} /rW4|wWYO Fu8^z9tuvDtϽ&m_P}C___tuG~ٳ> PꠗqͺؙG񎷿v$aiy1]Ssgknsn?BPB/_ S8uN|>Rޜ$@5ꫯaccU"5;kh)Zj;海λ,Iʻnƛccr)*UvZfq0BKUIJ0re[ױz(@$M,,,:T@ 48i. [V)ψ׼*#k!<'_6Jfk Wo{ψ \}5~4ڂX, Y>B|>_s VFu-{UŠȲi@:Z[MhDLDBn%pix\p$ Sx߯W팲,{?!߬z Ts tg_8Ɨ_x&aq᪦*|=,tz8ugM@ ZZrsqĉ{.0"kױo_hۅB?qĉ(׮]k]xj߅fbg*#I<Ml2S OTQJ#,/|+R'&9ܸ9Ob(tr3gpdjS=AyrmNat] ک.^Ƿ]]8P(0=,aye^}po  C\7l$(cgxz0[Ο;}I᫯bԉ8x 'O6"˲c彍B䏮㏣xS8?mL'#^=tgo/:ݞj5po/}a$knqhHxBh`3kP(~@ ZZZpqh?T.N7Da|'i>. B!jG~CO~IcAFЅ hiiZqwN? $ýOF^W'\Gt}{gޅ+W!UXVuDKK/&F矃Z,V݆;?%ZZu S/;9Ô aʰ0La`0aL 8$I;aBȲ\w $(P>iwa ׮^KW.]kq|Q<.C q~ G?}[x_#ƻkNeH35o3އ 0, `X&0L,io @͒ݥ樄Y$Nof=)Ԋ~DuS?Ts>!ZZ"'?HVhՅSYӪE5[DT Q{ IcKJ=_z~?( oO{vN7Q쀗Ω00a  0, `j%i0^AQuj/]Botof%/_TsN@a 0La`0a  0, ``~@PIENDB`photoqt-2.5/img/filetypes/k25.ico000644 001750 001750 00000023200 14134304111 017252 0ustar00luspiluspi000000 000000  j&PNG  IHDR\rf&1IDATxy|\U?;d$MҦPvTDRqGDAG(QD(Pަl͞I2̽<L%ܙrgnν=@ [s] r A1$acHƐ! #'*pX h9+3K(+O:fs"B'$C^4M*$a"}74@6 l A1$acHƐ! C@6 lLB+01;c3!hMV"wPE(1(i8e9GdIE,B&cPUP(A?"E&w=cYvtEp9Hf c X#c^xG y/*1AxG(,(E%$($)j*FƆ?ԋ`(MvzƔG1󢸰s*QTPS%, @ 00"Awcdt1pOױiC s*j4?@yہ`($1(nC̫^M"@$X4#*FƼƢEb"m( iGL^⣁`(VA]0yU9而1AthC($  @Bz;E?QE  p0`ad̋\W$3Ș2Ca.Hf א"EcQ֍0$2]c >oGiPC+H)`!!2r=#D# aRH@1(T{h,)B0 4 ^ 8h,H4bj(4heHFLc3G}S=@Ї] |G:!X,j!)PiF,"@{w:a$S1S T͚#a]=` Mz #B]'`:E4u6# 1@(֎&a6$aaaxd=],T9wFic\u53D 1sLy"ѳz& Ȓl dcEPč3>2}2"$Sp䙪aI\,;L5qX,&hhh4lX,MDB ϑY6G}Á. Mj?VK _!8xw䛦anH&p$fן>-bH@d s] ]pQXPd&<'‘0Zma$SCqQ)y|L3Z Aڻ[us쵎f)B]m%@qa s]O{W+:T5h] @YOYQVj:Horg%E6!\Nc()*CEY~S{rIB0y|Ts]O9$ j*Z*-.ڣP.ē@RT@BEeX\w4/#CPUB@WفbU$Y11oJTP5-)8 ,B@,ByPA‘E&wud$.Ap9](,(FQA1.pZ&Y~#ᬸBg~,YԒt6]BQa#BESbPT,!ȃ, #6Rqo-mͨk|EI$ifqqƑG~SWy;4ɖlb 8@a#+Bf|(??v!ݖd TO]'Sd! 2J&-@9! 2K-IVrA@dlX~SB@dlY~尜  2lVq~$DflMuQEDm v[3&rv%]ff'@@rhM` "#dܾ9"mLX~GskMub4o5'@@Y~SAVHYc\o1f 1kjM {HYato*''@@ 3X~sn[H17TME rֺkDV17 '@@,buQhM X 4f& gݽXr`G[~S!j &s$nbM'@@Z~UUXf Y~S FcD#ض V&sMSZN7uT nACK=T ؅Y̐0T=wO,L#|2 -{Lm>ks0FO$0Ol1],Ƹ +䓉zB~1],9C @:C>3Aمc#oᜣǀ9ö|2!\WEXmd`9 &2qpQ8 0d+t'ۅ"˯qhl6LNp+[!L; c>.L_C` %d~.L_ca % w1vV؅k<0T/kL w~uaZט%'`6iM'!КՅi_b@(!LWLaOW&˯1BN H!t?Ǯm9 6'c0V'p1<2u0kcGsY0j'3:yu b(Zk 8]N '`O9pGo2Y~͇9 du; bo. f.L_sIN 0Ϡ B>& awCd55 d1k1:v.ՅkncYO k1!|2Vh&˯ᜣ; dEC>{L5ij؅kY dEhhI],!9F|MdBf!'bŐO9dޞ&˯`a, 9 UC>3mޕ],V&9+|2?.X,NZl'!~' ɟתpߝ@[B>@d 9C9 C>Յ[BY~mc & ;Յ^],$9 x ;V&˯~i  wkO2{+|2 -{7p1ڜt'0+O晰 7o!ژtxrȇ3GϏ{3EQHlm~*Y}Um렐OZ:ˉ s'B>)M84'@ҭB>{ҕHZ(C ~I |82^tRȇ lsB>al9_ | 4'H(B>adR $tD4+ AFSUv4y|]i'b"A!\#JKqGֆAz'C@6 l A1$acn7N'},$3p8`08cp'?뮽ܮAI\BAY&.R LcLׂ4 H6 l A1$achiHvnє㌃li4 BdYv#/ߛ-ff` "шnw&!0%`+$IB󡳫M͍hmkAww7P5 $Ò%G%Gcn\\ Ѓi)m#7~}gCw(_g"yH࡟>$%,$IGAA!JKKQ]UuX`!-Ĝ9Up5l#Ivځ{544wx1{;N̙SNX ֬ŚbEx>s4652|>G"8dnwQYQX`/Z(,(c JLAC>o1]nTVҥ¹'w" &#wߗq0::юMǂs?znx*8spXv28.Lf?7*@ @ />XBdrzȯ_ۓ ! C(/+<TD"8Ѝxk/7~&jn7Yd;M_|q=^gH$.~oO&BNĺ}'BMumB$Kٌ?ioд|&<3)'Ƙ|k! @7:{P9>ŜO'~!U14$9&gx?>DYc @rN4={vAXi~ˇ?S2 mD%SW;!v9[D4MN.=O>-74<&ع-MI7Y\.7>l\nL6N߇>XR&rgp ·YpՕ^ MBC(Bo_/cv$Rk[+~@ҟ4M7Qo88O݌3O?Htb1 ē ^{UB\ A̯6y/J(߇lڼ O>}юEI`,;i9>.@4E__/^_ȣm[tO~]U+Owᙧu|͟~#&5U5…_~?ؾc[wuԼm ( lۂ魯9Yi*E9UU!Ijk?<֯^V@3CRO*6m~u3܊ x<(2cgքEQv7<~:8m_ƅj,{577!df ChEU0߻>\uպ+/%=1xGشyǿK۾әЌw ĝw|i"m4M^:FW>d : i*ƒKtvli9޽ؽgc{</Yg Ȅ_/,v^1%X4J## 1\Q5JWm۷'lHyߺrpՕW#?/?ח#-0PPP00%$YB4,Y|\WV (1 A1>|T:Qh4Z@+B^^d ! XbCÃQ88ӭ{+)X}krʆ 0p't Ցp΅6#ח!-0аOW(pXF @Bn*};a6t8jѰJ$ [~|e/d!<*7AGt/QT\?W+>Ѝz>_\@gyNnH E(,,Bqq#a:kiuZdI,S~4 ~[m~CWtwkqq:S@e(,,UCQiN\ظsSMLN;wn1::UU 7B@ed1Dx"TU(UXXY6; N'pڪ !9CgGb6|4ME4;x~^5s}f&]yǗ?E @I>i*fkB@de\;,Xbn\rѥ;!SCe⋇聁aw[Xz.N8D\r Q5j":LL @-M<1YhBQhBpxEwW\ UU_'"1H$|~~{ ! It{B4՚aڽ_ڝx_!XN2 @)1]e  dYE#좞dpp{sԽAu.ϘTױ|>\]ә}~~pB""1b̧/Ts>19*+:##[0-s?9UBhni3|ǯ%w -vFd20߫{ds:CWw;3?O;9<{[qÓs_@~=[ܵ#,CKkuh =A&|U=ry_n޾^<ģ4I,( vܮa~m݌e&0v>J nbʅ15M"֜Vo{Yl߹F wm55sQS3wFk&4T`΅1܆=ݦ 4 m_@YiYxbc옯%Kغ} `sP^V>@-юp UUqg]s/F 0gK01!<' Kj5s8X}ލUUFF28ysl]eh,9˯lֽ{Oyy9N_}&pꩫu/7/89FF *b)pڋt 4  Oϖ[}|:XK9VW4VT,YZױ01N!I5Wv(tkף(Jx|L @asY̟͟=W^~ts\(sBgWgR"0nJڴ|‹C;CP64 W޳FW?oz۶oQpqhZ!4(P(>l۾ = +p '^zMӰ p庿2&|obU$ wPU 7}###D.lE{,_w=^y*x|8e # |i3kn8 @?5rݓ$ ا0ww}wl}b_^\}q%c2 X,k؋o3M:B\g_ٜ>WAQÎ=GzXB|kRri>G{'ģ_ys##^tuw QL6B} AkG?rN=&;\.-  qc㣗T,29q$VwqBd H6 l A1$ac~_ߎ  ˲.#[žo箟1Efs~3aN@ ! C@6 l A1$ac#.W{IENDB`photoqt-2.5/img/filetypes/rgbe.ico000644 001750 001750 00000024750 14134304225 017611 0ustar00luspiluspi000000 000000  )PNG  IHDR\rf)IDATxwxչ33ZI.ɖ+:0!pC nB $$orsB'w#K[dujUvg?+[FN~ϣL99a8%B@D  C@6 l A1$acH\bs2\Mu[ Јg+1(:u)vȲc"B#$/Be A Uww)9Ƹ"s " PHbAQt100iOxۀDkW;:]EqD丳S}!`iD{w'U u|׏oƠ*ڻ;{1`&NSr"Nΐ@ 5Mu'CPp^LTLW&+$QՆڦz  #B@bf4dfAF(8نuhjx|Iۄ!C *A03|z1PX@_J@X00QT@0ҎuM *TD@Ve44z3Ds{KBX1``h@x[5\sA0A4u4kl47C1`@0 c1No7|~*@ ( ں !lϰO._Q  EURݔ1a{# aXHF@VdzS M KDLc =`‚` 9`AS eEFP-;9GUc <ըi7 @PM%\DK $:Ap"7fa6kEUUT6x? [x aXchjCÑơ m4 alf3 kdEFy90re5:$S=] ֪CS[ ڛ!ᷩ4w吩!#T7$JpH`H9GyAi0+$#r9G LP[tsT_l ;˙f+ӕQS ]``Ge'g3"Mr&u 5y317}SN@3$Q2.Kf 'sJf"ǝm'?,1F D 0ol/IBɘ=e&2]D7A9ȐGFZfMSf hG9 (-9(0IΓ[~r1G݀p:"fۅ֮v{Cz9zb9%r9W\wDQS? c =]I+-2Vb\^T P݁ Q[ݽ^x> ':2c p #-9l丳AVX!oEo\ݎu?m%i< "ǝwEAPTd @D8$ NNQ uX&eHgk\XlxDdf[ ΄o.AL+ͥi{;ܔ"70`ѼӢNZL0h?vaXA@mNH z[~cj@YmH8!!- q < Xl9rG! F2,1 rG! F,B9c !*ɀrGC@X=&pN Gdp|N"sC* wd7zƿB07Z  t(XaXfAz$> C9H17톧>9"njH07SN 3X~N9"fbPNA kFZWH*C_h:P}(aU~Mf{刄*&F5? Qcfo Zr`G-ZO9":,`z 7  4c%or= NdEu.`7sX.'``a 0?Dcke.`7Z,6 W@]KvU'+[~e('f-&c Ս4@Dx||7,6(lpN X^c8يUePPW 8Պ]T7 ᜀeߏ{v&j+RLCcoX!'`ie{G(@mS/b7Zru^OWQo^@Q:G,;Z~E6{=K c ۚQVSeop3Z~c9 c =^܋t ۅ{V ogo='`)`MZ:ݽ=Q]AքUeP'l3,%*8j+a1ϡjl,38de1C? \ž24.L`<̗0ӉݞC@`G]x Y~f]OW9tr/zuzg }㵟]XVdTD HX0zPȧ -UO4-ۛ  LJ|(B!VPY~A`l('`L+#|w*B&c}K#Y~u,9S^!V+ zL ˨i=S ,ُمk<0T/ |L0p va|d5F C>(Tb_u z#R.F $@Jd56@wJs)+Y  JIuaYQN_CRHĻمێVN]8lm&˯IuN ewQC>XuኤkRH=䓨c.@m |*',!Dd5' $]LљT&˯l7y9@|tzS],f('А&f $AU.L_"Wۅc* 9,sp?ڽՅUUE%U $E*z WbY~eZd&V $ 8]xX_aYdrX=B*d $DIG h ,ka |mћpua-vc*_8@U|n $0Y~mC('Ёt!?ݔq 06],$ &v$!p'dC9:}ХR'10pa],E6뻞@@! 5d&˯;' |*r%3 r|hn'˯;' C!zO v@`䬴5te8^[A!.eՇ N Q'L? d#'D!H=za!?|"J|轟 RN8'z{V! ĺ&J>a&b hCf @DPU)C&֜@D'`C4(R (`\^\4Mrr0iK;c(D~vv=d=A^ Ɛ! C@6 l Aؘ> \ Aƀ]DꭷoDj-AC%&FHZUA D,5MB $Q$J`юPgJ%hjnBum jpm !"ܙn7ӧNŜYs0s !9JT7)}}}P>2&@$Q$IC5^:)i#N'VDQć;?}Q] DNNƏS0tbp\I1144kwpS1osYZR%g-],CQaNׇo|[((QA$8NnabL: sgiQTXIAP[_NH@Q,;k|ܙnӎL+1_og!33ƍ qspy`ِD1aB "[ZqFq>./sϋ}el?^X'|5zJL?!beYC7!rtJ).^]eK"7'7&c ~ԽZ|Q]##bZB7$Is^T[0e|pys*15AGgDDŏ{ ce?x_ R΋_ϞxT9"2$1݅{c2x?gxMK[ٹ{6o7`QPV~?z>. q0 7ūY?h%7'K-9G Ek[+[Z?~_ܼfjOS8&M'-ļ90q#<@iAf|98 ᩮoD,Mm[Q^Y3O;C1dfd:ɨ( ܙnSXBfLg ݰBye9-?jp>lUEx/[jɔ[rg1t222LCP108#-xoxw188vsCaa*9G׋?AumM}wcXt O=N.Yn7232M=0t:t8?q\.r1}4\tޅ8w9AGgGz}^ٷ)Ms^@Gs]~!,:!π86v8(-)ŴӰ+<+u?LC,Gnpj2ۿ/+/ӵ'sis>D()mFO6_Y!Inn n˚[c74S˖OXUU(c{Ǒkn¦㲋/=z9#_EQ /瞯we#4dWv6-p!z&Nw5s_C[{NT}π0N{7Xq) ̄ۓ,ӴEQL1 $'*bٚ``p zzz[ojnWe,Y8<`rq11,;kiҍa&O*$E~TU5ئpl1 sQm:NuqI̚”OE"C{3ҌY={R,\pnBV 8AQSWq[Ip)A1]sgA3 zQx(~i=v~ 7aۇ#7';_mrgj D_?T+"Ҝ֘ 8 c (S/󔦈nII 5錺_0_tLA15u7!I# 9dYߋNttkzbo|t_5dddmRTgvHKKӵ*&B-aGcÝiˮ<[B7Aq:8N)cϝ|wA$݇؁@@5Ղ PTEϴՉ-ݙ,F]}vޅ{v9c&x j(y5=$yyc>kĊer3Ꭿ| W\PZ m +}o[f%;;?=?wz߯ii4dg9~m1Lb@bY8EˇG- ]_|aA!^\w*Ms9$80xtcU$5Lrs~lDƐK; ϻ`h).-heQF ((!1J)sf4485X>H (0Ɛ'NƊ˯%^‚ˆX܎v|-{dbC$ Nwu7.b EKP)8AJK8W9rPkx7QP EJ.EQPUo{M-Mxp͊1=cHw4m 4~%#7'wĚׇMl?}<;uuM5;ٗpS^45EFfFejDw}n+,¹ωiv5m77ƹ TG q ^}8zd}Wă?gn ϟ´iq,88 [c NchȪjT77Gbu(/d@C`0ÿDS1SoލiSqwD?7yW}J]&.X[MT.7Y3f =yIxe˫أb+pQ_ 2[ޟ ?UUbos~\z%OVza 瞏!+}7?}>iK; Ċ˯Di4:8PTXw~ ښQzҋ>ܜa '햿nOh$ag _XxGpaL[@!ԒR<0`MSV^ 7w}WVF|JO%JӞs%cÿ +@Hf͜iS{ߞ1mniFeA̘> غ ((/}? N>iyq:jQ#7;%%H30D@#PM9ܙnO*kd bD`挙;5;+V`/G7\.ϝiۦ&ڻGe$IҴmz'keQ*V\~Ym7CM]N*N?tMZ`x5 z՘֛n4 TbfUUqI 1a7+*,L,|ڶMA`nEUU\|EXh_ڴյFtJ)N?4M>܄?\T^37j>i;F(s57!9"n_9 7j㲋/6?F `#[B˺[u.(=UUq%N״MQq9E_ӦkwWw~x=رk%D1iz4.>i$C qp1hns:*6lޤiZsp*V^y|\^/sQG1h8`|$I-6o1}:G(B$H:XAma9V\v~/mZ^ + 7-QP=/߂\U+sex=xrў Lh{q&C1e̙9/wݿ7 `+}ϟ;_{5ߌ3OM0}4L.ANv6UE}C=jߟstwn\,+ކÍhjntx}^~ӸkKὭ;6K̚kkVƬ4-; p8@nNJLI`%831#T+ڿoo4XAL+bά9y!Tx$cr)Au/CL!UUr\ ;{ÿz`+Ȋy?,Ce~ h0avDQ$! @0F~哛>hې$akčBepmDC /@wÐ17}c3EQ04< ׋T(4?@pc$nj镰$DJ!A =$ᾟBڪ۬>DAF8pIG^-]|Wy J\#ntd6"c >m$DJ ӃP(Qc*DJ (ot/0vW< aFiO!  P}c~- 70ɾ @#;2 1nx>͍N܁` $YƐkX^|I0>چ`cx}~20q# e+DB0 s ݐ y5-Tv!Y U( "!H&C`$I~]5)d4ԅ%" !ދCۧ=lvgspє3OT9F 1]I1tc5<stvԊȍK[rjR(Ys 0mּch;MA4 H&1B='&v-gF+[~hR1to` oD0h smVX-MXs0J~q̊ A7$S`Ejb0(-*t2aa58 ŅZEmVMRr7c4SN nH`2QQZzE FTho27cPN ~HbPZT.حVMNe*oPN ~Hb *+4*9PTPҒlw%%D& lFʹi0fm9jAʹJpŲK$'G95i fj1cftX&MFE78hlH⠬3O`h9lV+fUW{?7N('8)-.¬*28'P\P93=Y X~QN &$ Pp`(5cs(bzE9fͨլIT7ড়@LHb6 jR"sB̝9Օ0bߘ7^('C;CYq FF0烬(85 pm(-*BQ5?H\##hPyHNF#]3$=%()*C $P8?FfA X&86찘M|o ̈q|N`^̼<@""C6d!IB! !I,4"F .98R*Ecp:&Js{aϏt H1K` &f)ZD=\-9e g4h L3ew#Ֆx!Ֆ߄ IhhxH/cB'0 v–NMspH A@[~ψǃ $DۙLں('i˯_S7c@@HLY~%yNH yKQ4|?"Dveo? rRU7Sy?"dH R`=Ho"u?"%0h/c ,'@@Y~A9"ikwm?"ijM'@@$EۡQoܿ I5l=Ho"%'@@$LY~!h fM<  v7^  ˯+o='@@M.[~!s$D\ho& |&BH7N5';e9]II@kt# @ ߟ7L( ;7^"P>t# knAgo/752B"巻so9]c m]h(|@ /&-O98–߮lwEzN   `C#F✜C@x@CO,3M.NZ?Вc -h_e9vN@c hjH圣=􊗈7GU~3BBcpPCSaB eNy SSeadMHN/r9/ 8Ԍ3O- 75( CqF4],!hˑ@ d!t}Oc[~ۅÖ~ D | -dMII5ž< 7=JN '@M'D.* r9%|x\7BN g Oщ 73h='3h'pGr.L̠@@2!TÀ 7064/ _ 70~4- !bnh$iA՜f !t 0^4f+ obN@O:` hlk׼]f-4)ۅʯVRN@sO:dZ hJ…82IG]n7k.L_m@en\'_[vaj$%9M @6B> bnр],D` CCnN@YR'ppu,*fj9[Ⱥ| e15j˞]8b"˯& td/'u hqv݈d nN kCgB>ap 7wz0_ 4j3䓞 4f.LCQ4f!'qȕO:%#va d\r)j2a*Ms\ n.c7wFN c!t0p*d}2Ȉz']礥) G,ZI@& dD!8) Gdr?@|R c,%vadj? @wۅ}d?2@`|';cpp1dcCkHs'DfZ\ۡ|$bKgN m!t4.E";'rS'ȲC*d TI5ž(Od@{r)=|RM.nd'Mi LIʄ!>Y~Gr)O~C>`d/ $-G|8-E΁#MWߤ:'D%IcՅ0vc5L_꜀!K ]#a#`.N[Dr%IYP's008mO Pȇ M29 su!MhN E1ۿ ((aK`2! A14u d#BR1$cHBǐ! C@:&fbdAĉ&\.{Z /O=7>]UM2An9dY0Acv $C@: t A1I H @pΡ( $I(`AExԿk a16/YLp~T#;s3wX_Q+Rs0O\ "Gk[;:Gގ!` fsgŋp|TTT@/F( N-a2PR\̟7 G̙(((="<oh@cS;:?0 Ya0P(0w,\0Ah ;ؐĉ(r:֖c."1n9qֆ /㏇`ĶN`=x{p̛`0-ĆOg%l6\"xoM뭷A  F,c ={6N^9l] $QY잻;#C᷷7nĻmC E9ʗ/·qf&[4A@0c?w}.+cVVTSgnUW\ukh4&}sEy^;ۓ:f'K/g=EE_f#nDwDk3IkfIUcz}ȣq~܉ys16EQD[{;q/}>žaIh4&|B[OD1P(|ߥe򫵭?fSNI;AtקB{Enp-O$F17oGMwk[~v]hmkK)%">h7~pÍi1!'n펴DtH@7W7߷c.l|ј ى[oetŅ$I^vWt H<7S?ؑ6lP=[m[&OS܈/?fBN$6dĚUq)' `[ofUgY*uQ֭SO[;-\˖bY(**\hkoq! `1?~yFZE\~Wp7ṿr 1;g͝ sxW?L@ص _xpɗ/&}e%G?ĬY-P{0s/ǣw~;ZجVHr#9Ǣ p/Žw߅Qmڽ&UO?u) Iɲ.ŒŋI&`17tlkZT;L9(,,eTohĐ9<c سw͜Qs?鬬˲vE~ (((HY_9S 88稫WubVm /ZmOOzzzmg׬^ڌ?˔?n򯦺'w4C$45j;e%q>8̞ۍΎ#FՆ֮Ezaa`pmK,FMu5 @ R~iZq @eE%v{̶`]QԤFXt eCCC/_ V+mF)H"0ϧZYQw! 9p 0HU)/+Ō3sZ Z`|0Fe3= c ~##nU틋pa`)oڐ$WݬzEyb֧ӣj^jBB`^~ע„h4 OQ1~eX-Y8Umv;JKKI2eF TW7f%Td ZԽ㎸ݐ$iW@0G]bbV G87ʒdV%8FJ' U>qC!Ȓb&SUMFptH28 Q؈P(q>ٳ&1eYV6 fi~r Gxvޜ9Z,)/šCbN" : uO[I &N˲zy4>;ٍ%{zpu@WW7X%dIY6G eF9uӍ&Sԑ,˸_z bs2c($΀.; ǶR$QcCa(p '\zsYQ7E1yU&'b4 2AaP?O=RG]IŪ YRÒ d A4z:T쳊 FWldcL5$)k_1uIpgqQ< vHe&8:t?Q{2|>֬ _[eqfU>|>OU 2*X->9fVUqGbo.A]0gQ8쪂:T$z-L`6Qp:`֞1jyvdQ8YޫYI_I80(--Quxt Sgn u̿$qB0QSmOwqcR5`XPSU=>c8n\U+@?r$IG'rғ`ڴi_݋{(1G!(;g=}pؤj SSsAiyozc 9JJJ0ozH%Pq0,RCCN74BGmʊV*Ղ{<{t`5brUm֖3GB0E7w.c Bعkj c ػo.DaaAT(((U+Uopp6=;~ưfj+,_z ==Hy?8UnۆAU( 455:+a4FO;۴ {K*`%G+ً^|1+"1H9nI֪jom/T WQ'X*7?3t圣֟,x{3/Vz`1?4U.;ߏ=E}6 x{ǫepܼ1_/"7y瞫x HPRjMM;B"FH&( /[TNZm}o~v{yqOp݇Wu ϞvnjjUm%Iƒو;==0e"u x (+NOS-ooé w|?(<'N-6 no͘m9hhmkC*BE(A+۱g>U=glzӍ()QHۇP,c!2;L&؈@$x<0vov܉Ʀf 3:V%Ř3{6֬Z c()9FzQۑ$H>ׇtuwc?((/+CMu5jjQZRv f I\.{zՍ #xl(--iQ]U3an}}Fo_/N|~^(.*BeejQYYlG?ZW 'M&jgĬ1:< 2n5EP.dZRRR,[d=v;:7w'9N' 䜇+(#P5$) -?u$Bǐ! C@: tLUQܡ mb0 ~vXg*A c$"91$cHBǐ! C@: t{N9`rIENDB`photoqt-2.5/img/filetypes/f4v.ico000644 001750 001750 00000016103 14134304133 017360 0ustar00luspiluspi000000 000000  -PNG  IHDR\rfIDATx[l}ƿ3CR$Jel^lo b Z1h4->KA"E!Hև<% $hMAʒ,2u)JRΜ>^!> 53g BH$Q!;(D !@Ha(D !&f`i\uHvBPwÖL'3_ tM!mkD@;va(D !@Ha(D !@Ha(DS+0dIV)9RWj4MkzU%bP*Ԙ EQ(u(v!]Q9BJZR>?T${L%L%Mb y("W@~'r CBBqǤJnx TgLNq @c_+`7aR?-O:NmV{E $SIϔ @'Zbg}<&,-t]G~7Ra C ۡt@qjÊBhu (1zqE "Z݂V'Q+^cҘH@ 6A#R Π\($PAw᭕-j#;d2b 3P9DžQf:4ulo+^{={BBNŽ?1{(@Ђz/wEUko$8PNC<*/B |+@p ZMC~'wZ]΁H (ʾ!j]!pRJ^\,ےC уpϷF_u|HGP^D+JTJ@V% 6Uj؄FٱoXy3Ԫ\ ԫ@M5M3 3H)Y zP^@(WkbAX}#%M%MP^D"x:@X:67Q+׌Gb=_"@~;mŸ E`ke l"͋-0mi6n|,4=^ §[P^@@@ZPB@UUcc ^f{ٽP[`PN RUcwԫul<݀:VJk HH{Ʀ@Jil1Sm!NT!n 22> U&'sa${#XZbsqt_@ AqUc/7BH,m j5?YsoPN@@U㉸!V!x/.@PB6m3v3A7RJ')%Ǖ 4>o5OY(UΦ|¬T u9˯;|G:Ӑ@Lʿ wןqoE(-%b}INQ)V@вB0!u6~edži_4s %`Il}4' ZMڅ`46G=vI. kgY@PڤGH L`Ҙf#]ҎXΜ@P,0xncMߊh EG18z{=?܏+0,[[Y~;<>sP:W'1xnXr`PJ)TL`}f9vtqcZ> {I)( RgR8dxʯ .9EjN(v!:,5VZGViM*Pc*bbb zc:ڋTAWNX3&o'P@,km x 8-n +^ #<_as?W OP8e܏#,Z~;9Gqk? <8+NŜ@ q ,aN 8B7U~]s(!F؎U~]g۱ʯ[Dy? -| nC ˯U{r#[.g}c((kl:uW>(k|k퀨(+n~B PHWk((cb턨(cfBTrAvJsAZ% 9 L-UZ oN@po'h(aZ>(mb터(mdJXs(; tN~#UjxO?[kFNixrI>ZEn5K((mf˯"d9hYd2PTBҡ[q0[~;A“!p; no1sX~@@aK3KUj"[a5QvJrayvӟמBɝ J_<Ѓ^0ZUt,?\~nq"hJs?B)BfvxԴ!@RE4J`OD@`ky+RN~!Xzz*Ž"3iԪ~}(JȤ3^w=':WXzҁPv7wZQvBsi,nvJL:gZ'96ntw!"vFPs! {ӭG[Zt´vA@JϤQ92`م"vPv6Hlk5³ˁ}c|i-.e]: G´Cr!'/Z!D´OPr!ʇC>Nk:gCjv@ @kX]i!B0- |?@ @;!iڅ? ]_g BN P`%+.L˯!'h|f8Տ̳Lsf+X_ ]_w{N evn]q_A.L˯8'kh|fm8ѿcvTxȧ@Pr+9D;t9 S!Gu߯-~ S8´?|'n|w\ų.L˯?~C>NpwՅi~OWv ՅWW}c%'+"Bl>EuaZ~_rC> Q]_⇜']_㇜ૐx]]_ {vsX{죐E`´FN79@Z 8v+9W  x"\.Lo*'YRfl'(b7xp]f|s{6u@v9Ko@q;' Ef)ً o64Ixkp<4 m74K+Sf>0-^pEq>0-͜+d7|pTB;´r @30d!8^]s-ōf |!'贺0-!x\NN>AbuaZ~ÏPv֝ .~'(m728U"򱙦]vaZ~9 !izN M &Q8A+0-é=#T]OƜ@üP]hc~] C>.p.\/"Co;'υ|xA:bXZ]FFN`hld+pW3|ܣq+'N9!o, @hw!$Hؔ,aɇ a~!Buh[;l>䝟mN=h|4UgZL!B|H79SuV|'ėt0unmckl @!Eul,n 5B,km*K5V!$!dCH6oz,oN B" C $P0B" ٗDoo$X\.tXjT_۟uB$~򃟴ngv ܽw:0ބy;RJh0!Bі}D !@Ha(D ;^?+5N mb3n_С먔+],Xr`jJb:UAOO+V)Wz}H$w)j5Ԫ՘?PN@QxA>w=uou}|;߃eޙo7縸?ï5TUm٧-|+_??OwU94][w_LBX,?@ It]m:rRJhuM]"{Ӷg/~xj{̿Ͽ UUnOE@s9X(Bi3iK/vBlejv0L q)%\m3.ZBXZ\B.3m嗠&(t]߼n6G;_<ʥi[wnaxx3#(1z{{1`ʴs3s:fj;4b .}5:@;o2=BB ŒNNǠTW]ib\# q|?B]( ;^: MӐJ\[w )%&pU,l氜^/[EQd{;{moܺ#g @?..t  *D__M7mhc>~jv|bW_j,-,p8'qӶ+K+fm/*5lm}ƫH8ܙcvg{Ϟ>P!WmyzٙYӯ=3r7n߀..׾5v57oķH jʪ:.| .^0}m7praB E,-~/Ela%j3xZ] e:)%Μ5fFglbDl[N/~;m; |OH$p{676vBPҋil[G{!}4{_rw.Z 5-(Vn]lhxݿRJ v3Z`/]ĥ˗hj87zn^3mhaVJݺs Cg8hJoo/(fzӈ':l$*P|FVH m(Px-??0p@ -\EQLRP4  "RF6|˧<,bano|0)%ΙV0+\ .}[jJ)K?3)%qՖ=qΞcP3(]'puj`{w~۲(MW{{X|h=,.aM@4 b-]KfM'(X[Yz`^m.u9EoNntsMD' OLlgvבR6ZQT?GXu̚δC #D*jPj(&LݟB24xBPF_EQgO[㘾o~\b_xim676*V+ʶ.ְs B[ mG(-۳5(͸n+z7]He7x [kl@C qT(45jgX_Jvc,>tF !TE5J8Ku[u\blOf3cwuQtD5?D"RJS)K" ln%<(ZkP"*~?_[$ L?/ik5~<_@kd}{fwc[@?y~W^(-hyRJN Kq+}97BPpc|rxΎx[}Vuܾ{|O!'K)ћWx/޴T]>x`K(' Ĺsټ4{-W]5V=*)oӟ'U( TI$t]8]kD !@Ha(D !5( tdN!BQ|l- I \ $P0B" C $P0B":/IENDB`photoqt-2.5/img/filetypes/mrw.ico000644 001750 001750 00000022261 14134304237 017475 0ustar00luspiluspi000000 000000  $PNG  IHDR\rf$bIDATxw|?w'UlcbLq67L $$@hBB<=O*O R -B S !ef뷻,aɒn{~=7{;g ‘A  A8p0$`HRX|=-Y UUs]W 4"{;^{ӄR )WK Es}NAhD%p * ,G廬! C@  A8p0$`HIi&&cld%r 0P"x"YN@VdpU $IKrrC%p"D! EF8`(`8X,Yr;=c B\󢰠ECY`0ƐH??C(|?"#$\(,(FyY J " a($ D8:=CG 9^(.,EU4T C XAQ0RNi:6cPU*˧b:\!ȀA?;[taAVdtt# aƴyI]!H-'t#c֌(AF4{ь$GHm $` EI9而1DalD$& t  hm-H$E chl$r6 * h8`n_WB a?7E?_'BEX  'burWx"nںց`\iGԎ1ɷ&a HAV|˲ H1`!D$bλ#*E!9(V5D!z 2` EF(u54*Az 2` Dx2wH4ld`4 cilCˎYc(<=5;O|A"ԐZQer2#tᜣ-hhy1j@Џf0Z`&=`s˹8Wg:DQ0&  | aZcEGwlF:@0 Au5ҫ3p" yd9!QTYHd_I,uwa(ku7z;+c E%]x,3ZA47h >N`!9 EcqQ\Xۓv>m E[PQe5к@0.хrSU$IBY먕і>+𡭣E6!rs9GIQ m2apz ]TO grܦ[eHribc(SJQZ\fle4x MWL.ɜ@3Ҁ  azUi8(-.CU\WEc 9A94 HG~^͂r5wD!fLItхD" ,B9 GIq͂( #?ϋYGMFr(Dz  @UbpI> Tϳͬz4}('D9IyY%fW o~AWiqTGw~iY~3  J0o1(/CsI0j̜M@fL#?P('0$by]=o8p!J`8jLHd?tX~E`r> }BY#Q*Q\XA?>"A( ΡqpPYBQA1U(1FLPTM5(/88I9$P9e*# c04PxX,C1Q!I.声ECvaX4+.F|hhѳo:Ht"9tQT W $q$dE<$%r!R31'iͲS+Ba=ޢ 5. p<4wBјsr$Ĥ7]A@gw#r$DX 9{]5"X ; '@@d,b}a(V 6Vw(W[~3!n 6s$fb'@@h^~EQf Y~3lp0ǰca -hM;#@>wb߁] GōΖtI쳟#&c -r " bOND[\D7UMN߃P䪯!rhjcv7> X>W1p$v!XC\W$q4) ZdE۲k>=>Ö~[~edN 6ԡu¡(W6zg-"0'`KH>vi?xw׃Q_9]q71FBNhzg=dr{`cs{8.V N8`h "0]QӰ*w-`圀]=bL@s[=s}"9,3h`N6C{gZk'pUQS]δ 7S-0?u{}&w5;g&oX5'`C,tIdV X^TUAM>ݺZUِ]var҇|p L@[G `&˯>Xm? c B>F}Od՟zK,yB>(Wn_t!˯$sAK'`I'Lr1D0l~UOk̝14ԡ5U f {؅k,V XJ A.܁}Pl`&˯X!'`$cT=f˯ F3f9@!#~#,=+`," v~ څm̻鯾^!#ׂvaf3L-z|@`z-ff,YGt0'`> uU4HB\2M0ܘ$Lo g)[!# E_ZgzWB>F;b~.L_S`L%Q@| \i?S @ʝ|,]F 0}Y *ր1h |@>\]X.L_#ڳ@V`(ע!~z4c&˯}g1'CTQS],!9F|F/0Y~ Y Zћ;3d1 d!'`5cu{Ҷ 09cv8ZkGA`|h6?l'˯]to5N ՅUAA9]!px|K(#˯c`Lߠn0p;^]fՅL &C!+c&Z],èt1ՅFY~ LRX8稩ߋ`轟B>3l> |du0z|=G/] e 'PY>yITmlOZk~O|''vkAri |$sO mAE'܋!V lN@Pȇ M2'cyJAsuiR 8H!03R:v|DqRA FU4bJi.&H^v7k cH.+wť{`WֆAz'C@  A8p0$`R^/e!AX DQ /|k-AC%<\J>(Ĵ&"wH[J].U9E0AXƘCi  A8p0$`H2?1AwUU@UEq |ğ^u z#[ҹZ4ز, u;&ttcppDL`=(-)EUUfVœ9s1{lTUV_䚋6D"x"y  I$I:B}2 ˕7#$i "lkYl{Z[[ S~1׋*,N98.FyyAHk!"x1l .IFQa!JK1mt̜9ٳ砪 G1Eqs]9PUU|/+!Oah1Yy&yuGisP(PMMظ%`1bqybx<ւޮ`Xh ֮^5a9!c!`MgC{Y  @nBر=|\qٕ?G~~f2sAkQW_y å泘5s6 7r-k$L ·uv-v}ضMb\8oǯ |+y˴9 ᏿Ǟx$+3Ȃ(&] 99dž?몘v|(:$!QsܵO?ڙƦF[1Cc 2zAttۍ31k,TTT # ͺ /oz ol} we^ HHF!qӋKuk㚫)'/CEy\.FQCAtuub}ZǩQ7x<@,|p$)_wn^Wc*߀-4,)R#=文:YsVSUӦNT^ZQʩ =&8(-)EyyH`(jJck人vi*܋9$=(+-Tހ(r)y'(ksw$9G~~>f͜|KK3/o>P(I,cT2`(%K5}+g@x@+CKK::R3@z 8 W =ݚ>F񯗞ǖ6䓖]:s̃큢Zxq000lYpBMeBC#Ek (Eq Ukēh4m۷bC,:s5.",?-)(1jJ?:c (W7G3'.YGۋ׷O\vpk >xb6H //fz3:Fk[ ~SNg(.\o7TvhyeYFOO7^/[љz/I.PTT{vիң8(Xtx_TXb1ܵ;wg~d5jZEwhjj#= A>{@uxo`>$ M\j-."KUi-!ApoD_wm1>~)l|E[7~p3%#= J7?0eJe Ɔq|?ޏpp$^xխзCt=w{,;T6`8{o_6W׋_ |`EEŸ+cuGpúgaO{2l@N̝3KEL)8肏ai+o@#()S2Ӹevu9o~F"V8_߁kB^^E;^Фٌf/}^r9^5|fq)=:eX,(s ލ|+PUU;c huu4/).$fϦ*7ĥo۾^HCWo17k?wwpI5vQxo{WWWg}m|Q]=3e١QO C0&=.b?Á[LsQۃ;~w|$ .8.KU8|‹5֛شFV[EwMlȒ$ П(P|7}S$"I*L i`U( MM{Ýxq1 p˰tI8$JPA457፭EcS9u٩5kvN@Q,^=B?,mظ%\~߷ $ W^/ QXPIrAeci/C~^~:W\>&^;gҒRJY z4p]hhl44֣;kVY4( NZz2=s,gFh2[+?)V,?ҪScʿxiӋ4 tF Qg_ކ/2w!DkQPP|<އ>, (DQ;rz}9>+/d[X3NV}do{;^H+AWj :j|WߞCy_ Xx"xZ(--g;pa+{V>1EUѴA"ދޞ1GZaA#׀c04_ZRs>םn޳ u݅Ab1EQAaA!*018Sq3E(**zhL5O~ a!9;媪bݚuߢ?ŞAlGUUŪV("KLSNӦcuEWw|D#P.O^JQVZDiI)<dPUN9 -[1᝕PkšQu| ,wq1WUU r%҃@#((/@EE%?wEA~·6Qu_VUU0Ul՗ @d6A z"C@  A8p0)Ia%$IdJٳ wa!A,4oHh  A8p0$`H! qIENDB`photoqt-2.5/img/filetypes/raf.ico000644 001750 001750 00000020614 14134304221 017431 0ustar00luspiluspi000000 000000  v!PNG  IHDR\rf!=IDATxip}柷gp@Fes:bѱe+:WR\ޭTN>ؒ]z+[[8[N#ɡH*{[.Uˈ$^A11~hI` _wz~2Ax t! C@ < Ax0Rma S`Co{/߫9c=EVJOAhD}EV gRAeNsaHÐ! C@ < Ax0$aHEqp*J}s#"BȐey՛-DQ DAH!0 (r H.%N!g ;lƘ*@0`(`(_NJ@ @0@X["$؆Cʐ32Rg!$CATnD2F:I! SKsK"Wn_9Jl&(,GuC5`p1$z`@: e^LEkӌAQ,."@U] D C\R)uүc2'\Nn[~PH dazSSӲ)zfQ>AFX^u?x pɥM-0.<52Uڈ"CiHrJgJ\H 6*DA*]KsKΕ' "sq{\k!8HrMg1Hts{p$E)[ecX_DQl8hwrV̂Hu`!m?IeJ¡#DͦHƓAo+}U$T? 0u=zT"Jxa.2cN6ƘZv˷ ^D&MFBtQCjYUpȈP8 E G|ZIVʋ9a΢PcϫA,&0LL" 0pQ#BP$3@< Ր1ELO  S#SX-(Hads NdYD=1l9#c֘'>.DItԄc ( "s#nL`Gl&`$KՅ\t#bX9&'lo׶;$w E9\]bLK`az|3 J"2qY3r+/s̉#Xya@:dޙ~P񹸣Flv%g2GιAfEV07Nut@ODhK3̢$rK;,cXYYCU; M(TfZ˯^A@@K}+,zԜӲ% -!TTU.[U_ w7jN`rZ!ȃ i?ho7o.uO !WrFXBmAmǁ2nu/P044@ m+7;3)-_=p1?N9 @em%wCI^Tиe!w<b-xӔ @TTaWֽ@SK{.~ߩ)m_ۧ@~HtPQU=MT'L(9%5M5hli~ූH8bPN@ $z<ްAo*1u84fkz- B*u WOPMX["$Y\I1H> P5ꄣ.|sKvE TTB~7tDu!H!@b)t2 9++c (@  /C.~*6"5i$$F:+2ZtL,ZTQ(|$Aԋ^$ea!PW/nV_=s _]^kYkRZZJ}lM |?77hoO a F[~@ a:fY~ ('[Hs1 a*f[~ 0 K,zE9UHӰ[0X0bZ?  Lˆ*V cD_H1ʯUxy=PJmlSP`-/HðW^ `3ohN0p6_=x1'@@͊7+Er$DHVN( 'X~ K9B7N+9B7NWr$.fՋs$.h-/Hq}Fݛ  _=iHp}vqNЌ[,zpkNЌ,֜ N3pW1paN;L*}qhnJN=99Fo"6е!,-h͖߂rD E KI®1 7[~ ^cX-`0AkPʙW,জ1r CCȤ2wXL`0~kݴ5^ 9W 13ٍ\f%oܑP^090X,U _|lNx[( L;7'J`a62[cyM1SiH,9{8g$ SS NcX^\е!d3YM1wI{=XJ +9 @6е!$ 3avrV}[ {{e˯ppuRovrV++"&ÓޓAqrN5ClqϨ巴1'`O09c 6)'`;*cF4.L_{`l%V| ^i=[ !3X.N0Y~Ir Ր|lsϦVTf`GP X+ Gx47z7 b=`m!RR]h0Y~J} D1L =d3YrB>g&˯{2'`%c8م> * var jB>&p}du/V'`|1ՅbVr .L_qr ]Wq d f O| f.|5],̜qᐏѬz6 כ0L1\vazr|Lad. (Z(c2wU&˯1z=B>.cq,^蜀Ṫ i1$I \c rV&0+9 5u~ʉȜ.Oi`#%(X\A8 r W!'az |>(rq9d$ && !Y3a74 @&A;L!! (9~%zsycӘ `Ώ l(@&/iakC2U!x8*6W #bA0$aHÐ! ,$@$ˉm *ydl H~uv6ԈcfI)H_7o,S cL}& Ð! C@  l{nXkζe\lXF YYk(QQԿŎ9۴,XZZsP@uuQ@"$ m`׮cr|\9GOw2UUhhn(XA$w_nK;oxcS#vޕ3,RF͈?bcd `:6{A}C}le6s9*6U}g2 :w'7xɲ1Y8 l&6.u^?yB\mUQt@:БCB#"?H/aiq BL5՜Y j!"W+ ـׁV*T }x''';vc+8.=v$88p*7W4axhGڎ fg OR-  <cwx9H,'DqM\QMdů=|bS. wE۱m03=K]8z(8nJCPo;<)՗5/ z*fb[c׎;98pvoYEQ~ϽM"Pc8)÷PELF}>G=W.], K@ٺ}+^|EGb˖-dfzW.]۶X+í,"gxpQW_G lîݻpwO'ǾEIt>:E @k[bsiACc K($ bB3x_[]tÈB:.aqa1gZ޻{e{)qdJ[Pq/"cFzEo3JiZʬeO 76֊__NOW"nʻuߟFVdYFNijL`jm.uo0OR8߁G)usfVjn Ncxo1=5? yJ7oMMR\8Y!"KqW~q$̇ڏ\20'.胏 .A}S)SetȹaHL~s8l;Jjق IpQS[W_@ oQc s3A c_DE<_S3pX(@,˔w0D8稪W^ oݼ|7!xc8vuuq\鼒Pǹ՗ _ǏQ_x 8h?מwOagΜt*i{ÉOh.1C4Kϼ[7sҍX4,`t#ɬ|/kK3欅T Wnoێmw`Ae4mm¡Cy?:2JN~5 P~Qi;マ &֍[_jpaTUW Ms~n?@g{g1 ദWf}}?ޙp Nϯ$jJur|& UpKO~ |Qy>]wShGsEQg4omfMLMc_"E[WԾV?QLMFύغm+Z ݞ2Dpb3O`ݚھ︰AP rLF~REwXgm͔֑HBEΖxS 3 e;?q<謹h .u\ق 0sOcԢ((T; W{n4o?_kYrܧ)M> `(<[y?׼-{[pQ[[Gm;;3+aQϢQSs BE\xUӺy@m]m<@ssȤ/Nu2idY'` }$I\=v☦kCyyyvW/^E,pu_0dX>  m6+I^ص{Wmpy[3$z!8t gAÿ!(8|0oaiqic Ί1+`cyokk"BgY^|YQۉ 9/~vO?!ӏ"oxFi}%#Iݮ#ZSs9-ݹ(ODnhE < Ax0$aH} ($$I*} 13A ^. BsaHÐ! C@ < Ax$BIENDB`photoqt-2.5/img/filetypes/ari.ico000644 001750 001750 00000021261 14134304052 017435 0ustar00luspiluspi000000 000000  "PNG  IHDR\rf"bIDATxyp#}u rrnh!,Kh-eI68){˶JEm9R%W"GJX]X\Mo ~! }X<_7{ A  | A1$cHǐ[pK!BA3SSyi ͍##(vA:% tPU@! W&_ C@> | A1$cHǐ! C@>F Lc, *J 0 *2 ҙ Exs!KY,IBPfRH 1EQ0LbvnsXHd/|VYF(DeE0ʃeО ̀DiYLf0H@QU!PEA" pj#T+ I a*$E( &0L@U߻?_=Xld09Cl6pע2\a&0=3EU}nƠ*ffdžlZ_$a8$E10</2q'V `D0dt&\E:W> #PLL7ADQH3XH\sWM$ Pm<$+a t 1t:L&cwWLǹگu #!XT:!u[F,"@z00<(r c 38GCWs4i$+ V=:*LedItjdHd,q;>g #Q1qGDٵ(@zg:AVέddIr3IO$&'98cJ[gAdWX$AdO=it9!@W_֮mwg] J@Y5wT!,`ahlS58C8 w"eVC@raǟ19`[Yc $"ۜ3+BcL\fR)t m$Cuewղ@PkF+Z~;831 clb3"h%?m@pErG_XBTaA!Eu ` dIBMwYP8zYn-tc͠oxJH򰮺 rg'@ ነG)z[wtSN`HP`cm F'P`GPV( j#ՈTU:X[p(Ie-  ؼic"UUX[cwW !('P$`[m'@8Tu KpiY~ %Htֺ:H6]xBʃؾ`#F#[ BtRN@$~]eK!P a-y CP "عu3*,XWU]۶d=b-r補&$EP]Y]۷a nj7BȒsΘ4b,o@rIy ;lέQYQ`!9GMu5vo߆-6B$\},[(Fns"W"6;  ( !Nbۀ,2\HU H8A0EEs9:tHoAM$s'Z@&@ 1sȲ`*5!ZO` tAGs!I ,A@"3;7 $g++{! $gM:Bcr9HSU[(s$)E˯S//UUHU[h? a8FU ?'@@ݖbHCqP  )bz$!08[(K ,'@@,ǜ Q2ε~[O(Z~g %8[_9$rߤ-⧜ Q4n_r$DѸ[@s$DQ[,] E[(~ 7;cHq  iU~9B7^Ws$n<ʯx%'ihޡ(Ĕ7ޥ7ox!'I=F{z5M1,Rpywďbp{NsC|nQ3]cx-T:ˏG;dwWst:KN89DmχY~<9 @#Ebg` ,?38ibT7n xFcEW@I'׺12 W, k . xBchWaҙ .vD}g6\/#11U \/0Y~K#sQN ]ݘ6Ĵd5UUuQNfup;@_pSN1v9مkn R|&g!ZrBB>f.8|h?W7\#ń|G z]n&˯58='(6cUۅk N FJ  \m&˯0>/F|לKd МȐ]8ډLy[ ڃSs3B>f(vwEd'+f|̀1vak/N 8R T)8)'8*cF]],i9G @u!3qYva: '%ENB>f踳duLs;B>f 8.L_g 8Br;l V&˯#Bޜ"ccZ _.ב, .K!'ΜȒ]=va!r B>fYu"Y~clG1k_va =r6"K!Ng|g0Y~݇!'`%cZb&˯+'`)c4V؅ʯ:'`1c1㸸X]&˯{#'`5c˫ CXD1 p6V'`x!cB¹*I+D1Ƙ!va=ZOT{%7.Hg&˯j=`yΕ|g .w^],1i吏f}}.k/3͙0M1Ow,1YbvNpS Eeva3s C>F.<,!7!'`9c49kW&˯?2!'`9c!>Y~Y9C`)3ߐV],Ō@p]GЫ(Ս,0Y~9 7,y,Ub&Tl,>蜀\ʇ3+lȇNHȦ)8*t}K.'`$pI# Xc 33(J(c1pn{%w (lA؏Q9B> ,!PjN@Pȇ G  )v=MA8Rr(C؜pht $}$"bqHe8MȮkPp1t#RU ע2_!_)A1$cHǐ! P^^nw? (d2D"oM>|Uk Y^_|8dXb Gel~B@Q`ݰj$ A1$cHǐ)im@H4J5,²l{v (L&T*@n[yyaU4Rt310,ːes0 j +άF"EU,]MJ% `­"2^KB_iؿK$G? CePYYH$uuؾmvj;iFAC`aa_pYHܺ;_ Y}%tD$L li)sy!:x 1{0x8{OΝ;9/ߌ1(hni5zǀ5 (9p?Ҋ{ C83~WxO_ywu#JTVVBhH$`  3peCZH 1 9nvj$5] him~Cޏ~YHtݵ"Tthp/G/[[[14<۷2! ӈn`o~;^{hlDtT skQtmw߽|tD^)s+L70b[`UUUؽksß> ImBGG;wuܴ[לuWݦM8~(QfއPh;}k$Ip`sUY:.L&Py9>O}DѮNRyTU-Pt~':$L&ܚʺn]ǏEyۍvGM ! 8s8s…vlێ۷@`vqՖUUšP_W ! /_Pv@uU݃k=},.]ȺjH&)hbHtͭm3G4A$lǮm;;rc{*]nYgCa!C۩Syۅa4:!*++xPӱN9c݀(PtUQr( 0ߏWmW_W ,8vڪ5 0jq]F ™sscl|}FsRlWCl|4>P(D"g/^As)SWO~7LRBGg'Μ9KWrtωЃhJpUCQYYy =7FݦMyD##85jimCkۍ0s ݻ? Ά9=ߞc G!r*T6nĞn$c$c?+߇ox7H+Wߟ]uu5t3o=[x_\_rr_;rCCøp%(Ѐ/*L& / 9f( V9YR)Y]Q[Swh!W\Wu׶>:YsO`=m x1MO@ mO#>7g^>p.0UUa'>wo([$ ?`0S1E'&pܻ8Xh}G/ήG{P]]Mo\ 28Am65*+ú/Y_ ?~6GUUlmelUUq]xG~V'O7~|.p¥Jb;z6Gyy9B`Y46n&?s,,}fc>m[j͍Q$PU-m6Y9n>~lXOUUa}AGlUU^|tI9$Iyr ]$I=,,Z5V@?fw?\c L/?୷6o~軲o<` U~dK ^}uzv!!;D`ݺ4.?QͶd2k ={0SO | A׀ tdYUE~BPTJnAinl$»A1$cHǐ! C@>BIENDB`photoqt-2.5/img/filetypes/avs.ico000644 001750 001750 00000025463 14134304056 017467 0ustar00luspiluspi000000 000000  +PNG  IHDR\rf*IDATxytWvjmYd[dY%IX20d$$aa o0 /@@$H "[޴KuKR%ZUGٖs'Zuuw Ad%<'@D  , bH"! , Zv?к Hv8g!Hb;UxCK>y5@XH5 @% b/ (4i bH"! , bH"! , bTDYJ) 0 aPpX(ɽ,fr&Z̰9 DHAļR@!A J{6g &ΐc1f$ߊ<[-I V py_w9 0_$Ģ/%M()CeYJ `2 DQŒg xE~ksp-,ІM()2 Ce#9/A%k0&gY򣪼5`h4@14Ƣ/)Q}*C~^WHdڽI!!!=f=ػJ@2Eۋy4]>%ƶz18FHS|!   X14B0$Д a*JA71y421S! %zӢe|փ1A@ Ĭ'-wE Ϥ յt1ُDB?$ p-BJl(,1H B7$mOק S}&DB4J(1R :QT(J,*DBp) PeX!d1O2plL^ B$YX4WH! _V+]ah@ b>Iwː J-Rdb\ t1Q'}T@p)Vf Q̐WhM;g ޥG% 0ELρGʦs04´KqR\;`87ޟR8 _< 0pIxwMțvdp`6qg0>L9c]b`r-f $f 0G6ې$ ]#XiB0H.C5yf,X9fS$~0987|caC}P—l2.O"`cΐf y90hgԩ``L:1]G& )9K0.-,1!t; fs3 XFKc$VE(a1qD0rQ`I~%y1.gw9$lX9<@ʥG X&l.-H뇊̱+ Xsn '('-$ l.GA^z$ (/(?k-'8J4(k1xՆN昰mSz[Ԭc GLHTRb[ڍUf7rCıyI*Q]QSk-qPN :HԐ|kvU#bJWN* jhY LSN@ Ƹ@E `1񔈀$y9ػ6%?G|`Ճ$IH{+k6%u@B[k* 3hF C%eݔboFqAfؓ5W)' иs * KHlFڱk7!ߚcF+9 P c˵fʋl]wQa#I&Bj6HOՋdo"/(Eme1q 8gRVxC Ql13gȱaZPoEIA0Fo\ks;+ip $BL+DAB0,Ȼ"I`r 9fXL\-noL_}9M(* @\3Xs̰暱b͘7Zo2`5'0ījZH4aR}rI$ΖhahrB@$x[~u.H< F .H8rC@$0@oC9#bKWiQN`"qOHİR7Ihalz,OHWM2W -ᰈ z6|zu^d+yB"o\Gwԉ)7/ "12;| z2O$F SUS\1,Bh’?cqg˯2='`<` EN# kϜ1<8kG NTM  d8潾[9gsI>5Pd '09C yReXጡDX? V79_F#axʍgLO-QΜi WW00g &c_#zDz.dE' }X睕1@مA@Pfh3('  Nb괫v, _7@f O"j1 Md],a%'p>Cr+auq'A_#ۅ3"O$8ƲHD!D rvlhVsM3RS*!x"ۅ8nDpVM3 MN #gԉ !D{amvb&oBɄ@f @!Døs>I, %r#kB>A!ĜCߘS}f2dM X ,R̷ 79{N #࢐Oܭ؅i&oRI@ jǑ'ŧ20Y~K:[. d],)s |zq $&輐va~9ՐۛjtOBW&oJISIBD#_dMk?$|rucijX~dM)CK71iX]x7~RCN9d|gƒiT],iGJRI1:7va%H` |$gSo&o") ^"!Q ]1L7ms>)z\ֆ|2})+vc= Y~R*I18R`^.?IuN u!DjNbuaf+9{ rHT|EҪ 7"RHǛ!\vҪ 7H~ID TnKdua'@r B>3'AՅ*K*rpg^'p.o$;'|z33䓐19eH|([~'$3'W&|(Ư0Y~C2sIQ' 7q p$+'XHN>@< ˖_'i9'8XB> kҏl(@`55^' ׸H\wҨ.L_9hs, ěva-Յ$2'_H|20Y~D'?XI|2 ]xdB'M98coT],YjN`%|juvaf-3 M7'P'Hl؅;'P'؅O1 Y~x̱|8L!b>5 a~,F$t;P]^[%&pL#^ $ vevD`=('I 1^ք|!@v'Z&9è#@T ;D&b hՐ&Ě&| Aksщ0A-[SAqvpB> :G0X1 S A3Dei!X& U8?`X3H8Cװ6ﵫ~!E Hg=8Ai Ad1$ŐDC@Y Ad1>-yV+Adcy٧LU>;pmAd& >sNUnACs#5%"]0QK ̀1Mt$ Ad1$ŐDC@Y Ad11 H J0Tix}U*$ BDH8L&ƹ܎1;Ej:!p8@0=c yVkLUEQRDžj|>ilqKE:s}|004I̺X!L&lyVj݆];f[KKaʱH$! x'?$݋}{4Z{nO( InN?Vr} kpՕc> =3p8g5 dBqQ!UU0^{ػy !I/GV /mu'Ux:UErQ;~,xnݲ%Eڟc~nOǞ@OyQvVA{n}xOasE9hi&\w5^SQQ_Fcbr]Qh)H!jIB͆Լd }..6ݿo7jՃwS翂;F8g]sG|mSO˯ĺ/݋)G=u9[:s+ZaXT;EttiꜭoS6y KQilCAѶSߐ*"`sEj1;3;Cgoj;Ʉ-̀ɤҐN|GЯ-]D۩3>]ĉSg$zk%vPm:;yY-Z8U(/+E}4g >w^q Z8th)}$䣵jS ~};?0Q;3MwEͶ*@)}{I^CDH -N̺ݺqSjkk-SL8 ݽC +p <Ϣa;jkPS%%a=) 2$Q"8vJSz#'ӏ%3.Ŧ}C,xQZZ9&,WcL~77.z JKp7ԡ(Ixxţ8~SN= ìˍSg;ohf8v4_;QjmQILLN4 cX\\Dw"lܯ(.B0?uފf6_6l6lފW]}xϻ?0y?}9@4pC02k_?yz$ E8ؠ=7 O3SmvvlWx;Te1|oۿ]H<Tc_<ع&Ҕ,JDɉSg]L&{ Kt, 0:{g/3 bfV}e%̬YcSN_QDmm ?7߈|oBC!GORlSZRíMOg ;-47'TCȯ= ?Rq\ɔf\n,//kϮ:Tߏ2h>]<$ZSu*O݆5ԠGN"b{MjӁ pkm ‚|4DfC϶<+L8ݒ&ۓ ! gb{QTT}{vaSybۓganޣ{ M'>d /zUn*T @0 wʣxYw%*hEpiaqks#`2zk%vܮv ,niRmY%-3LLMcl|R{eSdrssW-/ư'O+6+ȷ.ynރtjPoSl#":z 3 pͫ6 \Fܗ1 DRJpsg:1x-+wwC0h_sniŢq0Q013׵6@~~~.;QD=x_-7 fs& 7Wȣ(T@ c fE%!ּ<: gA~P H`)M<sNQj++ؒ$h[;`{ 4Ĕb` %M66(~J9Ckkڽx݋׽*y؉d)z0P.4gȖ՗c %8a.̸ܺD{n.~` T1íͲ-7D]OCO|;ww:S'_i3!8z]+~܋֟i gx̎!l(uk1ڸW(FgO?n|kOF?@6-j@.Woo浰O⩧şPd\_x m׿VJA!X,M>>?~]\\B[\o I();݇p Ĥt[D[\15[p;ކ3~_g5ʳůW'3 zXqadL*''N!ƾf1pz0H.J%"z^~H(Պxww%M#r[;V_20$pݽֹfNi'W(= PpKrD b(+ rnzu!9ޞSi>^A,5\ _~I!wq#rE\Js])`0(׳.I(/ԫ(Ȉ\ՉmQ,x"I0[sq;o4 Bpκha\H.s axt~E]O+SE^S$yRPea^l(OD BJef$~&ށAu4wQ@^ ;p J$"+IȷPX= //!6< kneq4u.46@Kj\WicĈ}9%\줧0s]xݫ%7'ˈ`P9G Z8&O|kGCAAfcl¯u'69GNݷժ|x`x70<SC3g n7>{pvm$+瘘r5T0Md¤ '{U ZjgAKS]g::9V+hQEgO< ^v%tNrưwy {|=% Ꮨuͩ6ͷ"נ ZDI67q+o`Io*-DU[nSܳH\w>=qJuFXb<+#|_ }/d1щcٌO~#[6oBue%mz $+0E"Ϩ6-/+ESC}OD pjSςWA+B7+4‹GX,x'0^:چw?];)W\Rsy2tE$fAiyA7je`<'t @aaZKmDdglCgkn.Djh p #mɚy5yc=B7Ad ښj೟ PO e|M UI@1p45&[3,}X妷(-)˭íM؅c[:3qF45Ͽ2q9LM9T.9GMV\w5xϭWd6S $bS~yIPR\Qn7](JQA`v2Nn'=79W 0LkT݆;|#F8Ճ;Ӈ ãuaiy@pyVk.JP]Wk>];jE@_# *ϳz/>[tD2ȝ0:m:y%}>pκp57wQMI@N6[JPQ^͛PQVyod4f<_gf>ϴ Rkΰߛ7Q\7XssQUU۪"ʊHb|EfHIV"! , bH"Q]0"ZfMk՞c'(h"S08|j;U' Aƅ"! , bH"! , _ RۭΉIENDB`photoqt-2.5/img/filetypes/webp.ico000644 001750 001750 00000024713 14134304264 017631 0ustar00luspiluspi000000 000000  )PNG  IHDR\rf)|IDATxy#W{f*ڲVWWm؀i,=qCc4`=4,L @qC f9x(,WVfVVeVRRj7HvT=IOx7^{ AmE(QkUU2T0jvZ 6 hcH! 6 hcH! 6 ژV`F+_8d% ְp%NCɤJ֛A J&f3$ dr1hcPex e$W$P 7c`dffˊ Hj1(4bEH@epdy!8ಌt&T<D 6.?l(uZWCXC2j}Ymd2azn7%Zj` x)C6kkBHF"pd9$U/"49t,_cPd)b1tn A"@h @D&OAI3/BN M"@h* X@pdC?-Gl1$~6Ґcj&Ӝ[wG:' 4!!49+VV*DQ#$%PeSU77YkvOa%D<ssHDu/XAN<7]t 9]0$` PP n!#YQ=$P2DCA]?sW VB]7$y`!H,-#J6'A!%쮔$N!MD!H2+}M*zQ$tr*jw1CVjv`2qN`)r ;C2Ya&4 J:m)*P3!f,U9'O 0~Sޡ!$(P8PdkC|)ЩA"!ji[*FI&̏m4$yk>`a%@xZt&MB4Yc`^T;,c~x6}Ә>"5zgM0I2Ԃc $8}Y,ͮ7&aq4j lK$&P ȉ/ocnd)۵u yp&dzC2!JfD3cX:` c %N5 (b1ĉ- ҉FJz1' 5c$y$ V( &-3੓/-N!L`nd- 1=|:drʹX70>VKba`#! f]߷d6'}1VV*̪"cv2&]^a$~]\ηVZ+ BN,BH 9]p˥UZ~$"H <}tىfR,ӧ>,i*gO=]e=8W5V *$cFr+9xzzM(f T @)8@8ܴ5,B9 (Uwm5C8nGVFjo5PN|H*FrW~-1+V %  @~toѰ@[dBo5')'P *:лc\ԵstoqSwVDs)'P j&нu[vZΘ&s&pttgظ ZYj-  wN7l/b0VBVV28PIZ[d큫Ǔ #}Xx*o5]~Hfs !Lpىt$ *ȖߊZN`%g}1Z9'@@TD+X~+-  ʧE,Ъ9|Z[)1$[/'v*rKFrj~^N}1dRI Xi(U~GZ[1-h"49Ӈ"B*^oTj~% d S HF c#X,z򪊂G!Ң^iCoO%1{32$&@25ԚvVs-'1$">rr&S*?c p^̮ ƖJ1zN@Nq!$+: L4;CƖj0rNs?cX‰rhX]9^ۉ9: :h `!^ԑõ?f r&/],5`МrnHŴge!ՆvaZN`89 WL<¼Wv WTEqr>g|q2AD{؅ +'`X],3?6DT9c"!z Fd«}hr##\9C @6sHG[c$_50C>uAzՅQK CZSGs`Ћ 'g,{81N3'Yȧڅ_4], 1d Z4 ԣ؅fw>)5'3!t3g>@xCǜn+ euJChbBB&Y~s< CINU W*AO N΄|^2Tu+1>TWm?} @C>w_@|): WWi?] @C> ff0dz j5#ScXEuat1Қ c塦ۅ_h%S/9مc%˯CNgB>d? 4Wj40Y~ BsM;3I݅|]ϩ.ܘY~ZN`9ϑ9Aת .L_2f7>' !z* ], ٜ@9 N>mw11qL],f9ƎՐ 0^'guasr 5l5Sbva3 4&U8;4^ȧ>? ‰1dmhiө^T3G.L֡9V hNdm=Ғ!aɃ`hTNnв!:f~dm]c7'P3Fg;5^G&Wf9v1 a1&['os&'P5z(]],mC6'0\|Zuva9z'qGk;c -~ @;|]x&],mGf2ԃ|va/OѺjO]X L1M:'PPȧڅD|i + Stզhjyq+cV§LĶY {zak 4j)8 `%@tA 1IJ69F.|[MNⳉB>4 T(!~ |BOԺ@٣1AZse @[Cڜ@I`!]SKNC|:.6'P :`IHDTE\]~H 2.%CP2p ?o80w|v|C6'BwM=A1$ƐDC@m A1$ƔvXVzVHH&HEەw{/"S (P]IDž\ $}_vCQT(&ZFNZ$6 hcH! 6ArGhNEJ."}hfME^oeZ:W JA-R1RA22%fL$ɴ3t2\Lx>20c $A2 J9 (Hgҕac D!goa?a K4i?< o?06 jDOoL/2K淜SB]e|gpaч>^;c +(C0C}Q`6p:;0̓ؾk6o݆N$$(O=>Y*OHRV-V+\n7@ƍشex}L&pU #(bjbvb֭u#o.o{;p)9K=1[,~HQd{cp8]ذyZrzq0XXzR+dEKqݍ7^ń0 I7n,Fe,u۰TUUDX,;+j$J_tN8XF0<4!Ws}շdیRdd  }vo~ ظeKKafE T:,YTfCO L%H&SO~7>'UƺȲ//|!sם TUm rTxҢ*B`>_QDqm+/S¡ֱu/?L&뾖asO/Vkv@.S424HvnnB~_{M  z};&J::p u{ԖJ&[Y)ڦfkdd~oO?$}/[b0Y5|+{`Zu7k˒O[ jj3UM[D<znfWub)t=v`"Rf0H /.ݽE ٬Y9;E Zlqf|s[3,/1>6>_xdiU3%_L} ֏88YA*DdyRdE'?5`z96==E-H$'eJ$=}}]k{yE ضs&# xE'VsD#<85~{/8rO+4۷6.EaՕN/(~?)}#xg?կ3h #@ ?PJ4 Xz!Y.H%"{{kdoںW\O:p9E,%to{v>{J>EGu+V Lf3L cvt`뎝V|#ơz<%x|c5 +xKKߗ1+t6]=5OUU+æ_3NP9E ܊WtsYA\m?L@ɭ]yݽeqL z_t5cyPEEQ"k'J>lv;: y%'oW^{mYcѕ=udY+އ[^G151 & x3~| -o@KUPTUE(Xw1035/3o} ^y0[,}6\B>n7H[3Q&sl:URyacn[v.֝G|+\xaS31 XFjow:B ' oÆm"KHp8t)DY1rec18εl !I쓌D"Qr,ʨX) d2u*d"ߏ>Cxr{jCe_]4h + @ cFp!PgL:fXj˯w'_9.>ݚ]U'OĽokt--[!Bdi!"_W/'joѿaa~ 'Y/j-X 1W 8ub[wy(;D&B4L$pap<AHԴ$"R/5lؼQppd23n@s)ʒJ&qn~kd&}ru,"N']y%sp?f1 ځ(s|-% _MJ!v34N?^{%d23cF"Ȥ |p8],tvuaʫp7W] _GGQZ~~_fEPUd0&&pa9pe [aZ)(8puvɪ`1ux'Ok'",V+SÈF"|922rawlv*8(p8]py*! ;4x>^}x;ex7Ư}~} ,30dneW^_G +be+p' ly6[EV^UU񇧟_/_J"p}= oGp@vj*tAd2H& ,ؽqLcCCH'0Y,E@&dJЪ&z 7|nohs3x#8)9U>u>7zQҺc zmÏ`]bH{w =[^ #L N_,EƮ={gֵR8n, pCB {qכk_Y(Iܾ]ӓtaף_'g2?/bׯ>߀vpv}{ttv *]ݰ  !Jazrr<lݱ(`ŗ}LH鄯Clؼ^yf5ܒ;K&R :c 7?M[>p?9o;k^.v om~VpP(ohX X uߏ PU{ts F# ソqVZ9&`+:`^7O=o~E'q<[_I,1v޺&"f ,V >}ضs'v_t.Rl۹+["W;08s^S'N%,-aftT|P SUdžn/*]]s I;OUwؔ=J(B$-V8]N8]nٿEܠZV6݅ҩAɿk^-. ؑ?r(C0wOQNWغc6nقCʼnؼm[M{,qG֪}F&|$1 d2HL&?Qk޵JV/(LSIv! 9DmS$N8IsY) EQI( +01>w7Nj; sy7 B**9ݽvDI,͵}0YCo@јf?GɥrmvkG*_n@D#"7 כƻСX xΘXo`6n\VQق&^Z,EFnK 8Gv`P tj{޽n;.؝}@N[Bc ++QNMվ`X]$ ]w`2+:DE cɲڻ^Z[3u7u7k=2 .0|B 4(c dTMo曼bgWst+z]zmPU[mCSeV.VMS$k|xZ\b1<OaY;زu k1غc'\)69{y[݀~ԓh& {0iSYbupst*PG=_gH&FFlݹ3oqB; -xg޽0|s\B<ߔ~JW/xqM+Պ_@Am}'| *x,P`3SSͻ[kݽQC @ _.٘L&ܳKEQsepk.n}|$L JvXd2apJ9v SI&S} yގW\0st( WpZ*6lڌb4d~vYn9|]pض3];z?L@Zq 7_6m-U`xpyzc޽%o, v_T!Ԉ|@ 9nGWwi/l. c /&t}e~~>$٫^;~^qn4Ż˨ze붒'XhNx},;~X < W7UUi+NCAd2nwb`&ڻۇK6odZWDeQba /1wc`A8W9:߸`c`&|!&0b%]DEwⲫj=g8 sXV0; VCEQd2fqˏIEpUVWPUUܽ}SEE@%=i۶ܒxh ey+9ʩ+,Yn?E9ՁCM4ށWzOYW3?$_">_Kv㾱ϠpkgsCW)AA@m A1$ƐDC@mLǀ @r$I(#QrT|mxMDAgJ+$u5hcH! 6 hcH! 6EQIENDB`photoqt-2.5/img/filetypes/hdr.ico000644 001750 001750 00000024750 14134304226 017450 0ustar00luspiluspi000000 000000  )PNG  IHDR\rf)IDATxwxչ33ZI.ɖ+:0!pC nB $$orsB'w#K[dujUvg?+[FN~ϣL99a8%B@D  C@6 l A1$acH\bs2\Mu[ Јg+1(:u)vȲc"B#$/Be A Uww)9Ƹ"s " PHbAQt100iOxۀDkW;:]EqD丳S}!`iD{w'U u|׏oƠ*ڻ;{1`&NSr"Nΐ@ 5Mu'CPp^LTLW&+$QՆڦz  #B@bf4dfAF(8نuhjx|Iۄ!C *A03|z1PX@_J@X00QT@0ҎuM *TD@Ve44z3Ds{KBX1``h@x[5\sA0A4u4kl47C1`@0 c1No7|~*@ ( ں !lϰO._Q  EURݔ1a{# aXHF@VdzS M KDLc =`‚` 9`AS eEFP-;9GUc <ըi7 @PM%\DK $:Ap"7fa6kEUUT6x? [x aXchjCÑơ m4 alf3 kdEFy90re5:$S=] ֪CS[ ڛ!ᷩ4w吩!#T7$JpH`H9GyAi0+$#r9G LP[tsT_l ;˙f+ӕQS ]``Ge'g3"Mr&u 5y317}SN@3$Q2.Kf 'sJf"ǝm'?,1F D 0ol/IBɘ=e&2]D7A9ȐGFZfMSf hG9 (-9(0IΓ[~r1G݀p:"fۅ֮v{Cz9zb9%r9W\wDQS? c =]I+-2Vb\^T P݁ Q[ݽ^x> ':2c p #-9l丳AVX!oEo\ݎu?m%i< "ǝwEAPTd @D8$ NNQ uX&eHgk\XlxDdf[ ΄o.AL+ͥi{;ܔ"70`ѼӢNZL0h?vaXA@mNH z[~cj@YmH8!!- q < Xl9rG! F2,1 rG! F,B9c !*ɀrGC@X=&pN Gdp|N"sC* wd7zƿB07Z  t(XaXfAz$> C9H17톧>9"njH07SN 3X~N9"fbPNA kFZWH*C_h:P}(aU~Mf{刄*&F5? Qcfo Zr`G-ZO9":,`z 7  4c%or= NdEu.`7sX.'``a 0?Dcke.`7Z,6 W@]KvU'+[~e('f-&c Ս4@Dx||7,6(lpN X^c8يUePPW 8Պ]T7 ᜀeߏ{v&j+RLCcoX!'`ie{G(@mS/b7Zru^OWQo^@Q:G,;Z~E6{=K c ۚQVSeop3Z~c9 c =^܋t ۅ{V ogo='`)`MZ:ݽ=Q]AքUeP'l3,%*8j+a1ϡjl,38de1C? \ž24.L`<̗0ӉݞC@`G]x Y~f]OW9tr/zuzg }㵟]XVdTD HX0zPȧ -UO4-ۛ  LJ|(B!VPY~A`l('`L+#|w*B&c}K#Y~u,9S^!V+ zL ˨i=S ,ُمk<0T/ |L0p va|d5F C>(Tb_u z#R.F $@Jd56@wJs)+Y  JIuaYQN_CRHĻمێVN]8lm&˯IuN ewQC>XuኤkRH=䓨c.@m |*',!Dd5' $]LљT&˯l7y9@|tzS],f('А&f $AU.L_"Wۅc* 9,sp?ڽՅUUE%U $E*z WbY~eZd&V $ 8]xX_aYdrX=B*d $DIG h ,ka |mћpua-vc*_8@U|n $0Y~mC('Ёt!?ݔq 06],$ &v$!p'dC9:}ХR'10pa],E6뻞@@! 5d&˯;' |*r%3 r|hn'˯;' C!zO v@`䬴5te8^[A!.eՇ N Q'L? d#'D!H=za!?|"J|轟 RN8'z{V! ĺ&J>a&b hCf @DPU)C&֜@D'`C4(R (`\^\4Mrr0iK;c(D~vv=d=A^ Ɛ! C@6 l Aؘ> \ Aƀ]DꭷoDj-AC%&FHZUA D,5MB $Q$J`юPgJ%hjnBum jpm !"ܙn7ӧNŜYs0s !9JT7)}}}P>2&@$Q$IC5^:)i#N'VDQć;?}Q] DNNƏS0tbp\I1144kwpS1osYZR%g-],CQaNׇo|[((QA$8NnabL: sgiQTXIAP[_NH@Q,;k|ܙnӎL+1_og!33ƍ qspy`ِD1aB "[ZqFq>./sϋ}el?^X'|5zJL?!beYC7!rtJ).^]eK"7'7&c ~ԽZ|Q]##bZB7$Is^T[0e|pys*15AGgDDŏ{ ce?x_ R΋_ϞxT9"2$1݅{c2x?gxMK[ٹ{6o7`QPV~?z>. q0 7ūY?h%7'K-9G Ek[+[Z?~_ܼfjOS8&M'-ļ90q#<@iAf|98 ᩮoD,Mm[Q^Y3O;C1dfd:ɨ( ܙnSXBfLg ݰBye9-?jp>lUEx/[jɔ[rg1t222LCP108#-xoxw188vsCaa*9G׋?AumM}wcXt O=N.Yn7232M=0t:t8?q\.r1}4\tޅ8w9AGgGz}^ٷ)Ms^@Gs]~!,:!π86v8(-)ŴӰ+<+u?LC,Gnpj2ۿ/+/ӵ'sis>D()mFO6_Y!Inn n˚[c74S˖OXUU(c{Ǒkn¦㲋/=z9#_EQ /瞯we#4dWv6-p!z&Nw5s_C[{NT}π0N{7Xq) ̄ۓ,ӴEQL1 $'*bٚ``p zzz[ojnWe,Y8<`rq11,;kiҍa&O*$E~TU5ئpl1 sQm:NuqI̚”OE"C{3ҌY={R,\pnBV 8AQSWq[Ip)A1]sgA3 zQx(~i=v~ 7aۇ#7';_mrgj D_?T+"Ҝ֘ 8 c (S/󔦈nII 5錺_0_tLA15u7!I# 9dYߋNttkzbo|t_5dddmRTgvHKKӵ*&B-aGcÝiˮ<[B7Aq:8N)cϝ|wA$݇؁@@5Ղ PTEϴՉ-ݙ,F]}vޅ{v9c&x j(y5=$yyc>kĊer3Ꭿ| W\PZ m +}o[f%;;?=?wz߯ii4dg9~m1Lb@bY8EˇG- ]_|aA!^\w*Ms9$80xtcU$5Lrs~lDƐK; ϻ`h).-heQF ((!1J)sf4485X>H (0Ɛ'NƊ˯%^‚ˆX܎v|-{dbC$ Nwu7.b EKP)8AJK8W9rPkx7QP EJ.EQPUo{M-Mxp͊1=cHw4m 4~%#7'wĚׇMl?}<;uuM5;ٗpS^45EFfFejDw}n+,¹ωiv5m77ƹ TG q ^}8zd}Wă?gn ϟ´iq,88 [c NchȪjT77Gbu(/d@C`0ÿDS1SoލiSqwD?7yW}J]&.X[MT.7Y3f =yIxe˫أb+pQ_ 2[ޟ ?UUbos~\z%OVza 瞏!+}7?}>iK; Ċ˯Di4:8PTXw~ ښQzҋ>ܜa '햿nOh$ag _XxGpaL[@!ԒR<0`MSV^ 7w}WVF|JO%JӞs%cÿ +@Hf͜iS{ߞ1mniFeA̘> غ ((/}? N>iyq:jQ#7;%%H30D@#PM9ܙnO*kd bD`挙;5;+V`/G7\.ϝiۦ&ڻGe$IҴmz'keQ*V\~Ym7CM]N*N?tMZ`x5 z՘֛n4 TbfUUqI 1a7+*,L,|ڶMA`nEUU\|EXh_ڴյFtJ)N?4M>܄?\T^37j>i;F(s57!9"n_9 7j㲋/6?F `#[B˺[u.(=UUq%N״MQq9E_ӦkwWw~x=رk%D1iz4.>i$C qp1hns:*6lޤiZsp*V^y|\^/sQG1h8`|$I-6o1}:G(B$H:XAma9V\v~/mZ^ + 7-QP=/߂\U+sex=xrў Lh{q&C1e̙9/wݿ7 `+}ϟ;_{5ߌ3OM0}4L.ANv6UE}C=jߟstwn\,+ކÍhjntx}^~ӸkKὭ;6K̚kkVƬ4-; p8@nNJLI`%831#T+ڿoo4XAL+bά9y!Tx$cr)Au/CL!UUr\ ;{ÿz`+jǶ,+mڤs#MC E iи6H#\ EIJ";Kcǖu+}hWKq/KҮ]}1iKŒ? c(D1 1Qpǭ]AJXLwן]y%ঝ 7mDDeuJ҆e[ Q(Q1b@c c(D1 1Q1bd)0UGJqNVeB(Ca"oaY&,ۂi0  D ݀i'ibD۶f0|f\eA*y70hlhBKs+ZPMxf@5l $yضV?WJ-B$F-mX5uA@b8$ `Kӳg0G&A/P皖3SKnDkso"@6(g6%/B@JLYڀk7!'x}\p`z.!di !`&FɦqƭhjhbJ&1:>/fz6ǖK@kSC\B $Si gl#}PFƇ`&(@v!S2 rB#C0<8ύE3e~4 ,ialbمLMOW"l ~"*tӳ@KM&Ǒn\. U&\)o;6 R3_4:!03*(+ldk-Bj:c`c!@:=l6K9;?\>P(E(0;?7Hg9(¶-~,RJ̧3a\@@ oB]ȄlZ\} υfgBv,uә9~y;(4:2CsR)G14ڏȾO?0l3T-yPw >4/zpT7rI)?܃АΦ7tJEK3S& &4!Y B@tQ٘! QbN´>V=ݰ,DW+z{ շt=Z !pzjM&ϜƩ#NA(" Վk # f'!WoPJwD`‚p!ՇU)D #-Ntb6B`p/RWk (D}hvƆ&!n\=e|} ބ-a(B 47=h>5IzOĢ "hk]oպD=ZCs!3s+4 015!@J)47)R m-kP_WP\{?#}Hg+Жz9/ $:t[0 t{庰䷲WCj&H|XBǚ.46,@)5h_k/OB U%걾k#4-xS].cT_'γOB{<ޅ}ˮڈ榖ˉJ~+Ud@%蚁M7槀R mXߵBJ~0-}`Ќ |\pwnCOѸ4[R , k:yz~R Mr-:>1*ձmڊQWӟo22W++ O$@:a\oކH|b@I [;p喫ձ<  ˶)"_'c!OfJ((47aWb+5J)h5rv\2=:)& $'4טB@X5K!5D:;۶p #6tvEk߰BLϦ:aK j_{.-R \ӅL6,ҙ9,䲰, Rɋd!tMa$Ј66VYXR[I$1<6^ϴ Nud[ٰ,il R00HЍ gQIH& %5.a9wQpΥ uz58KK~k9qO7=x*ҿpR\O8Մ%. yU[) \@ , oy^[p' pm% V*} rGJ~PJ/f} ZpK~+1`PՂZLT:y? 0*a(iE Kɯ>hm5VB  0ȑ:>n9TK~+t=dP\[)MhB25ɳho=r]K~GO@@o'E׉'E2Q]O v`6lZZɯO!r} !r>'"k%%b@l@J'c08褸ע\[B@tB`NCtgqd؈^rɯ"'B Dw1HYUӓx仰,!1(>_B M؉m nhGpK~>>He[x(Rg _^ٹVjy@xVUO]mG0ZoX[)M=H@wzއ*qϿp{pG霫bXD\!0ű´̲Y/;q|.~q-T"b.=[фSwRWK~s@@g'ݲBH/Fz~#aoC'B`t|}'qR=S,fɯS!D!0={=G6TZeh;+fɯsaVB [YHr W.̒ꄱO  H&\-U=(fɯ;'-NjJ5MhBO ʅY뎰'B`&No˅YPrk/6/۶qRߠbɯ }XO `]e Y}gꕽ9z|@{LBC=*!4OXah [aUTB{Î@0K~>&10ҋpk.+LPO 4 J)t uߐ0z! |ܶ\x:,'VJgq,, :l&4L\X,9M0>7x|~,GK~ ހ 6 r/>W;Ò_?LxrV~78{'VM>^;[:0K~!h *jg70K~%H *JʅS.̒ J@+rag,>@i|iR }.Y~+}@P|x_e☏ 7؂'^& !0Ǒ})fo's pfzœ7X'۞&oمksgy74_/&sav!72K~GJۗ>s۶^LyX.̒pB'PX\g*M>n+gqraZjz@ragfo !Τk@͎B!!l񂦝]XX.̒4 5\O&s,M>^}&#q\%ёa@M M>^JםraFG-jr4Fmn 7zRA{K|v\%#l < 6xAӓxH,2a,pHe7.<ҷ쿱7XO꣕M>RJNO%1zU|w\aM#5do'`T?/m~~{oA,bz6UClťN|SKxOg'P&"'Pqɇ( }խ'Pqɇ(8liU'PQ\hfQT'PVɇ( },/l! }= )%Nɇ(Ȝ ey^T <QohV7z%B%kJpZҁgcrr P(1tc8!DN1os:+./חD낑a<ښ fx%OI|3_@kkk +t]GKK,BSscKԡ״ ?96@lj'DKKO; 뺫cݸqSYqp:c~&ڹ kִzP)\?:::qrAJȳ3?1\skul|Yi S ~(%yE袞K8"۶_!TbD5p`Mhll,CZOT.7\#v^cSx;`8ىxh<SɩxQ0q㦢=~ouhlc8 )~aa5L*F@@@y4N 7&*)pםwW}d < @^Y%)%\t=E, O la0 <'T|zݑjF{ۀ.RoƮ].z|b4yo @kk+&>,BKsgcsm) RĞ{)|K_ڵk}UWm/•9N;GRT7֭[;1+`D⓿|?uG|{ iSSu \:۱kd\+5Him(x6O4M_V]:'F-՝qaD?1\ R {C "۶;_[K`H)7X}ܜ+nDbL4:::>[o3{ B[7%$Sy[2[* B2fgg* J)uݸ+>]²,Imނ{B^477WbDaxDJo7C!t]wQJ{v?Wp0>>yhhhp4V”h{veqSH1<½܏_ x!)%m۶bP'@qy{gU1[ڸ;>P.R o{(DaԀ]~h@ H)kí|-*yUWr7wJv ^:%v#?mEgJܷ?"]uV@.R%V= ~+K)ڲ> )%N<|vlۋ5"P"}36kB;_TJ:sĪza&Ƭv~V~AZ ? _y~4hg k{9^I)!;HxEc c(D1 5Man!QQV1U#D/YA"J>d% E(D1 1Q1b@c/0M|IENDB`photoqt-2.5/img/filetypes/vicar.ico000644 001750 001750 00000030002 14134304256 017765 0ustar00luspiluspi000000 000000  /PNG  IHDR\rf/IDATxwt}wf ^ *XdJTEVHR,'yq9qr%bE֑?ǶIn*X'V)IX@wlA ؙݝspCݝ;~KP0K0`0 #a`d0L X҂ J.` e  0 6E nCEo#0B~? ߼BF` (X]_SmP(<By0A'RD)\>H&WA~B!Cw/o07HJ%Շ @W:@!/iE@R9 !Ԃ$!bPJ14?9.,ap5bsoQb"^!Xz1fg4ofHYB!pf9 U Uq `ƥ卲![\Ăz*` 8. 6+AE (^9LOzS/w$ !|Zk DbBWW1ٵUL,-^@0ŒV`5Y vf۱ J)f o6:LRdY-I[,|7E5!XZ¢63Mz\:B,Vح(En1 b`vV֋A|`K،9pr❚#yynB0u蛙640BHxm>?U)Պܬr.n!nCs?eLGuWx"7+ v_(EAv6ToJC18?OfA;=7L(5QbmTՖxۍ&@i^Ptf͖Doa&1ȲXPTT*[,((0eRCXN !Ā(EilE~~x/-Y{9yP ,=6@ӉUeM(@ im)\U%%|R)rxa90U1ѧnKP6 I%D`eyyWZ{OȱQ[^nQx,qw$'0r0<ԖéSDݎeMYN@ LDCErsMI)类HwњD,qXN@ L >^S^Hte)Aqn+*tYD-r9'z`I+ ,7Xzv Dv Fin. )pB=, L,76 ܯ${w$'@k>>|Bwel<͆|ym6pJn~ b\Wk9FXYiԤ0P pa|AA@0ҐGZ-,X9nfPUˆB0rrĠB9=@eG ,τKrWO H> Ԙ}˿ToB07^8B0rW AA@߄hex7L7zW-[~f04Cora04C/oe04!*zr `͖_^ќ@&':U~u@0TG*@3z=& UI70Tx0T(DԜ*/`PY~!sLIcTo"i9&179 0`$-q_(19&$ sƶK&0f򻴜v~rdJN #a.[~TodJN #! 0`$D:Z~%rLqΖxL`t&BPcҜF|/f 0`(,D0kN C1R /f ddQ厁r#?©!L,E:T32FDJqqj㋋8;>n*ךts~2By ̓8~tn@G+ҫʯsS ^!s59 m!wpnb!t"3, M0B pv|PENOAd7Q̐0Xx|z[\L듨dL-_Zy񊒈ss1D&Z~ R!^]El_(ΩJZ~!0B[qA(?1t!Q2/0΍O`ͷ  &'!fxLU~ s @4VQ9 elU~ suLR.E%L"Vʯsi05B8D) $K,2os `ܰ]x,jΌY~#si/"蚚ĜkMէG]Qo)&GZ6B>\QGtwUs~fMt \\EKH.<'4}d_I@Z !YDܚ>HK !`cpǹsHKPQ]DvafՖt DG|#& 3˯CN m j;f., x H ;H{0C4'0dМ@Z@!.D- F ^ h]ncX{Q˯̄sh !-ذ OuafM szm4lxT hAUf L*'`X*R]Y~SK8'1TN@,hт]ظՅ(PC '!K|n_0QVf_C5FNPk%t#+^t.,Ƃ#c JhAk<0"kL0:E؅%I,#'rHd%t _WN]y׈a= @2+vѱ gU~ Ms)pg0!-ۅs B0,'9 @ؕY=fsuazAA@ D.|& dNOaL~*'D-Fh(Iڅ7=IUN@w).vafMc *Qva 3ozy=zo @8|hfLiU]R!fMk% "! huLT G-=:t7}C>Z@AU.,AϜ.`\Q]8 pe2 r C>jnp;Z7( JLт+1˯y 4 h"fhfp<0˯y B4.D * 3˯:'\k%t!\]xBvY~3-s @4s.B>j ,9`J> M.ܱ]Y~3mr H)24[ۅ7؜Ps=U쐏lU]Y~3Lт9`#3y)C>Z@+’$a`Y~3nN )XdO$l^zq򛩨$a3D§GG(2`9|dlIY~܆XOZ $$,8B2[!X[g!#K6B>,`9ՄŸ| c L%P, 0!:8hN@ g!À$(B> AI&' +Xȇ08ќ@>Y'* `8 aHdfgP;ǁ'opvb!Q~ CA Ntɷ}`d*`0#a`d0L 0`02Y@GV+d0cNV>s{ li#]-~~dr67Cb` ł7ސm'+$"D3 퉮!!d02& F`0LRK1BH俈orFR0 J#z$I1GI9Aj>7Q5+kkzb @A^ tfF@p __A䘤xj*Po:յ8ڊI,INg'J$S쯪:.\)]RJQXPjU !8`cc8sDffvc ydq:Q^ZjikõywX۷aN)EhM&#gyX#™\Dj D)_}߶W?S >!XsW_ϟӛZ,#zߣ?'~~oI('@ͦړ8xi۷̌lObqyc.N<(*(V{{QQV6r^|dQQĽwߍ~۞oB0EON&TBxfCӉBٹp 6UTƺ\$e%%m''137G% ]Ի)kd =W4pKRana纻w};;.xO ^뭔 8 ;vZ GF>@wp|1tߏo<߇O&~\J::dcF1Aspfg`sl`(}}u *GFd磥ѴOIϏ?G pQJNg'| UW_ffRM1?f\34?b<'^w015YٶUwc]Q o;=eBY_ǩcfnzzV͓''TT_BٶAx!}Xse۶8|@Nr`zvza,yCQAWU,/GݮB09=# TGnlȲ7v;lVk"D)ώ"$D)܉{1 &Q^ZɔDz{u돴jh7^{-(~ݪݻqѣC>l33$ŭ7݄oMM(-.j(Ip{<[#߼:.~qݘ]Xَep7''|AwEOREx19=8q .]R=8},PJd/U øAOC\8 ;bLَy|G uGG=$د8_>w!_%{ pfg_a]%ckk[oO/=z{(d{{ٛ|쪬?<щ jiѼ'`Xpѣ8իd?2<6?Pj?oF&ł#mm(9! KKmUU?js8.1+nO>>!n EqÝ ,/g?)<3v`]][Ùsb޻wv[cή.ݺϢ(BE?Qqhŷe|ž>|> r"R46 /Ogщ t!lEE4NɼXxq\8XV^UU1?35;}} Mj(PԶPSU-tIݎ 1:1!{.(0AH:υUjC<9,d[Ehxrrrz@0̹&`eugMۧkT]W 57v}>txã%dIYA153mYI vb $ZkF&oϞpyyZZd tt<^z5ŵ{`qZW(Eء\WooUu ZZ$f%d K q~F 9  ?77fef"mWܜpM55t>FF.M/U]U U$cay qU):ڊ}Sy-jZcVV04:-?D*쮬4̠ZB pfgD8gdnwVTzw jšo?+L{2xWo^ϏJ mKq`yeC J55RڈcZ aB8qPS⢢-5 GG ŏ~sXJY-ZolJ$b!8ڪzB)U !XZYA m67oYH52+4z c ^u<>CSJ`sXJB0ؑ6XM =k.WLcpy\PPrapdCFݎNg.\SrwPJNgg̶}}1PNa 65W3(fSTf + lVkJnt)rnWSpQ?:*@{5lxTQ GxݗRJbHk+~$Swpt++W/kUY[# nF_\Ě˕)QRP\tݲJ WmsN|_pqPJr'GŹeCO^޹ӜƂR/DY@mح,,.b:W!ZH8ݭ6Ay<łbsxGq{ޣ{./1L@$۳{w/R",#WRpkTq8Jǃ z7'5_+R AT_uɧĄ9WE RJq(Ka\fkTW,E$joOIlpEš9s,VupEikg @o)9.@ ;s..#(/Ga޳ p>-&N9FF02>SVq~1Ez}ID =G6XCM n$I(+-ŁzEGF_'NzB3ϧ0ayu#n?}ー+X\oh(e $m>b1 h]í6YpdekU6$x駱twD08 bxtTwF֔)3J$j"J͸kguDIKF%8P[3g`e׿h ~PRT:NW/?8w}o<9H9+kk1?n'Gn7{ߓDKKu.!:}Zvh||\mLmrYBrkuc%Y#IyI kkME$õ^m GEc}=n>v,r1;?o=0vu4f@0g~o^Nn\u \7ސK78r"$I‡~wqM[" S>{.`)7#ZZ~nopcUVmuuҋV[z{WJ)N'>8<15|z9j~[@ r۶c̞]Pg`pw , ޣ`9y׋wt^5RҒ>(50<_>yknBV+osy #Nr'c<[Xq>ZV%$ჷ܂kpCgqOqvVT/RJ7m]ׇ'}zᅍW -8ݞƄVn&8eˣjouX*I>=:eA=>я HPIŽ2yoǑVp<) #8KOUQ{1ۈw8jSJQVZ?'յexir ++Ά XX^FN>w:;@]TT6جVW#Qj쪨u,%E4g/^=##K_.ۗz@ĸ҂m (.*RܜE7x 7*ƃ$IC¿ R\Gw?8CI 9'8G-- Bd`zn]Go?swf>ͅ*c@PhKl[{U+2kfK)E^N/VA$ >\n7<^oRf$n ~We%jnݮh  d{IgN~TQq] !ёlɶhkjuY%!JښDQaaJ8ƬLFhGIqqM.}.'%( ?;~C:55PJB bJ$ w~;_T\+@ DQɎEEHikK*H3aإKۡ%I*s: #BRo?7P躍Jtfg[I^tA2vum>.y'ڥϏȈC) >k@)Gn;REb-J3/({SJ_'N6-fWWO (XZ^/NC"˫ZTl()*DB".8"z{7z^APJaXp{w:578n[bie>_(Wt(`%Ņ-Eهq(-.NxښǃUde(߰X,nh!%% uS)+$΃jfOp(" # R eÑ σFR&!XyTs !(/-U[t-<;v >+ 99U^kPΦvho"@"Z,Yɹ|D2cE7U/ߕXo1۩Fj^F(aY?L 0`02& F#; s¦ 4X,r5g񓟤lU?%, @_0T+EwO'eI׷3cಌ|:r!&gp8]E!b.-TKEeO$QDjb3.D$:֫ם)o\g@!w6!u~c 8~r17&, @O0)FW1TKEnoZ.FtZ. T) bd6/$]er5Л)[BX0S )ctQ. .\t@UIT_}H*2GlaHO'Q>uSnz*@ @$|:ah/,o#alHZC3uCQePVF¤sb.YFݔjU yMr h, pYFk7@@p ֪ʰWUR.b2(BU+9َKM>\cc1DԲ$?4L8:qEBp(WS 9dI2ŜZc(f8c[k(r$ApM3c{CeķPPpn6$aa!:BrQ6 {1dG4 0Fi0c#I"⛫ DY3 4ՄRc#sc™dHwh0 $-pܦ:Sln*+mpXF(uL 8aɜr+C2\:Vc(8 w(cxǨ r [] AllT#6#A4=5xcG(2ݏ1*e7!KַB @ cMr M\l˱ []aB9 <>o8lB] 咺x,K[_}@Ӆ䴡gm앺pwL1\:M-ɐG#0>o`̘SIoF9t`r&bHƄAۦV~A94SNNG ׮~hX~kY{ r  87έLLab&2h)˯r  p#n EרMxm9~='@O263w"<p0FLaSi˯v"{/nHT0p8ý W[c_WC1@dljKWvr'tpTZ~?)' >M!:cYe誃pp:19kƙԂ>,|FR:Bn WxU10Ps&N| Q_t~ ߇W-L@G":JG ?6B6|*r)Y9zFp2JR>r!ZIeit 8p Ssn;ɜܕHMj VpAp/8.IZ X$I݂ @ptt!8ǝ3fY~%|1hNNmު$'-%'P@|sw\B?hPo8ogN_Gk˯$v('pb(t;6PN Bwz;vPN,$(߸~iH][~:Y~շr'! t O('Ѐ >$˯jh=$.ԫQw(:E_H Ea3oE*ÀC u=BSFm| a*`UF$fb͞9B#eUz9BfFNl 18?}r$v atod 1fN9obCa Xy@@)˯K{ bF˯Z^VLinB5w۔_*H,  TRYx+'@@ _Ǭ co?p`Nq`˯Z@r9 zPZwX.'`` jkO?B`2?రW5's5.$.KY[D"KXǯ7qAp\cc1}f*0ƐKb{yõƘ\[KO!⨛hhbU/CT'U+~,$1/Z'f@EĖ!Mv7peQ/N[~-}F XCXWZC"xʒSz~_0A@b/lȴ%1a^v5m0P9-̞0PgXi1B6ݘ+M.' 9[Z~b@U|V=.sOxqغ--`最co} +1^)~ob*C/'``!@W-el@pϖW?p3_NC>BlA>Ak|~A!t=dz[KOP)4鰌1yl.ܰ9=j̸Qkw8 Ȧl)/]l9s'B>z(.c[[_Y~l VZ|t m,[.X~w!f VB>!=,m[~W 0Hs3ɡtH.\c 2ǐW̲)`k P'PȥSԪUX.l\w!'`*Pv疰 sαo*àH8'`'W;-`&pcoc1sFȧ. .L2 DN|]8e: pa`]OV!=ڥ؅?5],C9C c B>|va{Kuiѧ Y1bNWGLb>m5n;0f9Ʒ ( &'`8ZGvW+el0Y~( j %b΀Յk(!04B>|]@Յk804B>Fb^þQ Y~QriY]Xe7kD%ÁA.L_ccϊ~W1uƈd5> X[ 0& 70Y~Mˆs#;3Xo&˯yeN`$`N!مk>F$Pd5# ]Lј]xSG0Y~K#'|=1no*WPW&˯i8zvڅ9Y~MpRC|Nc4 ׫ 3'0Des|tѨ0U E֐?9U&˯VN@׳Œ!.ܰx *BJN {N@7lGKg>e`9+|>.kGBN@'~GTڅO[~{"z4?kуd z4[|4dz;|ni[],C i!L,aۦ!=h؅ZT*C Xt=mz*|t15 GT~0A@b/z |tsl@@ hH!'Ut׃]xSs sAdt߯#uIIlmL='0>*a`^D:;݂p h I7W1>5ӓgĖBkTu LcXA`|vݞA5@ z1$acHƐ! C@6B0 ((7*?~_$[ p8?w7;nUspC*&bt8N}v6\$I&i!$C@6 l A1 hPF1^8lڌ[|$i "]j\n\.9GT c^ocJӽ~oTJ%ooq=p:;Nbj G3bkp8xϾQZ$/᧿!ݟ1|~]-:,˘z ilǶ_9dҩF/1|׾t=R$_:"?O}?E'%,'+2yZN`k9}oB$]1S)/n'r [*"J9?#? w X[YB>aaw;>xOW>?HkY֓sbbbvTB7+4c bjq$:[*4?=j}#U@OWQ@3^&&0>1qT2jC>Gy"r}>y$G]Rp`3e2( 1 IC쒶 GUO\r+ 8؏'+aTe]0ΝMRA*DU sL&q?陁,ϟ"61B?=N3M1rGAȪ ɤ.O,#8/`2:0pXV?H\n~MV$)l/<^oi,#qt˲L:qɩ)ctRV~G^Ϟ|Ã}]S w W .H9"ss 8ff (%E.~~T*զZ<\!('\r1y'&pᛪݐeg8$&&:n8<CRA.lnG71 5uy SKG3Ɛɤw\X`]y Խ:IɣN:An^V"Nu /aHONGlZjX{:E[zD;nJ$PV7މ oO矴s|?p$T*( @Ab26>sM>Yc?en1y<.^{gb{Yn^t:r  psѷ ~~]ƛ&OGswUڽo|'H%j>lYw]҄y-\ţ:Prsg r kk[հ1B>xr1½jXڱ- ɧ- e!k/@Gl|i`ݎmvϞ6!^BPZe\x4?$Vjn|| |$ DxnS* a?1_guy i;1f;tccT= 9u\ɣ[>=._L`YH.?oIZE*y:NzY|َ!{dөj&Byf+Nzų8؏\.?h; w1 Œ04#CPS!O HFŦ8X[YT:īܽd2@3|} w=ҩv\6\nݳ(X(phߧZ! 846_VbmuE/o6pne/&V*чV*ߏ77 ރ74{o)~o5M$_ɟ =l | w1|!qϟZ.7f{D sc½x.!8w\>NL$ڎ3{jq\u~H61$3^ }$I]@6\˅7=y㖯ݺ%&GQ,7s@IT+erIRU7Vㄔ$ruVqÖf\.6ͷx(=kqH N;Ֆv@KL6RcvV"˶<ۃ@>|Yqi .\{|>??|(I 1Jӄ[6AXc $auev=ŹU,cmD\X~; br*4(O8p7>$u8l$Ba)Jxڜc;߇k7n/P*}( 'ԛrƭ; Ӭ 8sP(xm" A@:nix[un}l!qtAP.P,/7>5B ^T>xvoϧ7<:(z x 1 hMZA*̆qy ܽ6q5K̈́x,c5x/_<︭oF Ԥ&$J}A9L{/TZZ/]GhzoDSb嗋x ?|.qep@ p{^WGqH>_74 9lngApˍ\s$ek+--7o݁ 1w|ˊ/?(I岨vX0U<Zfr{[߅o?ݵDGbrw?Ԭ& l 溙PT|k.A߼/5mr|NYCt5p{>RA?|>WzM@BHNp H"`sc@07osǃ{Gæb[؏Ǒf~l5Y ,ڍ[WA8#,|sPFp\mdv^ Gp%~ {pMJ&X_[E6i(٥ɱGo[ȲV3l >s̆ @622-, T_Kq g;V*X|e:&VxY=(gfT3p1=;66kg&{T>?gf(F ^[v(_Y-wMLvxx8&& ;$g/51{rصJi? ,pMMl2!n#?vxgBH+LD) ߿̶ Øt=AݎBr6c$ 04:ɩ)B> (pMMQB< C# D>! FQYVlCV$Ĥ#H} ia,)/ݖ)`fJI7g"χA|f&qO{V6"!>}CL sxQ !aU (bpt ?!$2'0:R+  )=iO ` C!NLyD0K}ch&1 Bx0ntLN@XrOڋ1>2  `Wӕ]ah& @)ŔATP3>^, JwCHk#) 5T [Z~!mPBaac֎`w šRG+ ieĒ(Rw`Ρa0aAT^T3#D!`sh!w3&= qP PQu:E]N9ߏ~M j!`'>G#d`p㠊>#ր]}N gU2&W=&< NL=p`l…Q6 H}]52a14ua<o{q(BW 6(صap$R -YY(ȵal3A7(CEH&'(SSdWu2BrOohH"0\dgs=>J)sraez"Y~G7 $ Xf;0ٌU-Q&H&qp!?7GuUlUNDDa9aP^RWJ\; ,IJ& $8PV+¬ێR {v(ќ( H DssB7YVTU!jQh$UX~R^(\RM –y& H @8cr28'(7*+cӆ=Y X~c90H,D '_(0<ʊVuLBA2߄? ą @dY-XRQˑc"Rp<,DEI1LRԓRP*F!L,N"Ǯ\0 D#\-9> MP~J.smMX& 7>a90`wTvop` [O`&bRNLi%$3=3' Li=]9gd9 #gF#0`hLY~%1xN #-Y˯Zo/Qi0d'ZwPo4zL#WLa0dEio25zLo9'!j&Q`uY~en=0Aed0bN #ekM8Fʨ[O #%_J- `Hׯbo)'4Z&QrLI5o"Ds: 0`$,ҥFRD,NMY~9&y1sL eo29'j `^,ɠלdteM ' (M7o': F@0G[0<60S~'X~%z )'`)E[wFF 4D-Cc8c3 ! opghoKN@H̡ 8щq>ީ`4o!'Kv5mBqsrbDo2h='; 33ÒYBxց`(dG;tWTsP(Npr##㑯gi4Z N:z0<6'+Bzv/2Ly9)SI؅WDQDr!t(n1^ۅW9>4+ |w:mX~ǘWF5Ф ۅ#_'ʄrx!oљ]Y~ӃVr)!څ.l*@ 9M @"!t0.,|h'#WZ hF =j.,A9@!t@j.,A9@*!!aAJsB>׌FYJs9C>逋څ;: ,ʠ֜j !t:z{$W9ԘP+:UofU~E9U @C>@vaVW-)':T'VuuafUj J"82IGef_u ,h\'p`dL]vafUp=T%J|A.ܣ0\U6' ~nW((E}EQD7J):{ (.s! \v6Q S0Qyم[ 3˯ T.')٧p.Y~!BIױF™.,!Q`H t3䓞c:{{3bf_!": d\I(f.,C@@K!Ʉ]U6 dTI9p{@hf_cΜ`Đ̷ x}b_ !' 9#7Q𑶅 3˯1JCN@60r'̷ x+' ̅|I Uf_㒎@eRcY`f56rR谄|\uLy> q|hNQl5%pJ#LLMab73'2pP2XȇPr 0@@B> zH5' YXȇP' IXȇP7ɮ'WXȇP7 @Ej uJ#8[֑ /q 0ξ~H[G31FJ 00L 00L 00q}ldee)O ~^/fp>"Uk rLBI@0`0 0`0 68Uw)E(̮`M$RI }QsDCJ!tGW["V] 'chx]]BӉq 8l6:\˗˖vmN,&'qX,i9WpXy!Ys` '&! "L&v; (/ǒ*t Jː 4P#@)EOO/vލ܅CM14<_$XVamM o;n?+ayٞR<c.I5EQDEy9~|PR\,y套O֖[XA_IFG,]=رs'^۱MG1::@0w{ՂE u8aMD avtt/!~Oo/~/΄=DӉv@EoqG_ U)_\.<Ò˲Zq嗡TVV~͸m )x03xgљp 1<F$} B&n02:жᤥKP+WvMMGё #Rؘ~Ӄ uu P5  Ij_ZR+/4.,_ ys^ QrՍƽ{ƿC05ЍpW^} vv5kV_>TjY^("n 4ۏ?=<^ݱC֋~k.??7<64BXU]_3u8nyX,,NJes_^z/Tӂ.!ē^Q."1o'#C͛pm Ełq׏ylI7g}aW@fjO>Ki-..oVUDaaaғnnݷ?fl޴kVUc'lӃv{HAnNNJB-8Yg59paw$7L/cUI(l6+~8CWw7;ceWDyy9jkcxиo gUxf8/feKOBEyDQDvV֯>`OC*1]PJ9v1|o btlLR"77Ghܻ3331۬[[H9C]]-q|{s(\h`0ǟ| ]u5~~v^ϑT4-dsgzZRիVÞ_B6YE^˜kmEo_n/nJ) qکJhNpW;܊xyް5(ofK=1 q‘8EJf܈RrtiFpa]_<㒋/Bl'{zÏ^+>9q1a 6*2>>.}7;;E*8G1'ȲK,;>J)rsrnژ =^YEz) Ǵǃ7zv|ӗ+_:Ef@GH)ɲZ E{\֬^GAl26Sj߁pMNiF)EVVnMXWS??/U|܋zE0#WVV, BѸ7coCmjSJyy]SLEY sO~J0āCpO]bbbBRv-髃R4bɤqzz{]VVjׯQtTV,EgtY֎n~z h\ 塔a||"fb\RJ((ի= ţ(8e'P^VO(:|IB|Im@7B$AO"n9o1<<w_Gs`+W }R\rEhk];—` _|3XUR+M j122ؓ0ZHܶ.òVZ UDJ!Ύ ֭uk񹫮[o?^MO޾>ڽWU+}X)WJ)JKK`=,p===9Bƙ$cOV (qчķo%o-هV4/%%%?miQ/RF`" 7 h炂|oQXk+&\.MW @qQQ2YQ47ʼ?^\N;:ݣYt!",3zpccc1PJ)rsr4xgW7dF --J&\.?p@OL " q'/t|>\.8hZ+n:Im_;3>q\ĕrA)Ż uuX(ץP8 ߯iaռ͛#_ eB$p+:w!kb!$-#9J)%}2Ph3`$+W\5'JKk+oޜ8>P99'^O5}-??jNBIZAݍ~3f>L_ʑQlټ Y$LxUNK v$"UbvzzR7/gn==8tvu+~پ9&Gpwl733}{,uEO9M7gqW&^LqZUE,Uႏgph8t$BaCpM_o@a5A3,OٲnnKg[6#77+P}C#|OT;!)ϗr`(W^ϵyy(t$6Ѕ 8{Y n&_(',I>^y5Y,$nÆ'V,[* %4А΄#0LxyI١[#n ڎIow~;‹/JڦǕl"l\sرs:b|Ka1AA(ƌg==K/C}E !áÇ+V,Obp`ڵh>z,f!457c~ 9Ҋ_{lB9{.H׋7:N)%̭YVñVmv%ucZ,lټ| )T]MM8$myD(.*u:'kص T.^Me]+*  b|bMGW^Ů_\c2;;go; izRU7V7}[_c-- mzq%Ѱ^ ݛ6mjMbXWܜL{>n=v G.+8++ _st&@f pwPKn8s` {9ɩW\tx T:rIK? ?_O@Dn>-{%!>49E;֬^bXeӦDQĻ GK (={Y߁fЩPJa6뿌_3,]$]AFI7ڦdl5c";; I >~Ux: rxW^~|a|cJL-B055%iՊM6\LEX\Ғh@ >s)Bii)o ˗-+Dn޸|}7zYpIp杈ܜlڸ8A88hi--),̱:XGŞwFC^ݧR mXpmzihmk?w]# }\|˱t.QAf%_sގf~S߀ֶ6-X-8زp8lI8䓱SJaoyTDebraL&|kf*pOwQzժEQ߿{*BPW[nZ_]{-:pAZ߉I$|> AL(Ǻv%K`2 .?p'ur~o獺Yjz~btl CĄ PhҁWxy6[G2-"dilm"-xkXp }2diN&uՍ,L`#=W:do9V["DOJ*Ux\]AE) ,j!b߷^+}ID"  J:RfFv cXA~'!s w8M/Z!Hȿc]2~S, Bt?h7"D,1 @2AS?sW)D#cnX.{QJ+Ƣ\'GP2JwET2D87y0`%F<֞ RQ ?70Z`"I sOϺ ylPx [d;L@"af),I&-5Vi(%f,eVE$L*mGkRJdiKY腈prx]Z@EH|POKi[G(]ZD* D$~rp|m1DH0͍$}k< (,BJ@w(34v1w?,2.5B\Ԉ.Y;8|$n$wmn,@X.Zn7mK5$vs/!ava SU HT)zr{*ݓADmn  漵!"ĎX^9P*KXeu\!aoiAՋA Vqrp``v F \[w"B*aVRpDڦ|&BUC99VDlmf m"jhܷR Jhgoe HD`V2i"9ݰ풩WۃvSQ+Z~V *t )Qvɼ)Q҂sO'`w1k5*hK 9'˯8'5mz++Rm *!R[[K]w3)-_#pN@;,:hhK?8߹F[ ~=_oMrN@ ,:iho୫+UҊ&:-FޟU `ږVt٩k)ph~݇|Sr X~|F*s`0֢]\s7;-'*R@]k,LI)Ww8',L(P8'p S:dYN``JC!U~ҿv``JB14v杽 StQ,ycYU\.- vXRi˯&"..@J'`#X 3X~r8/' X~Ԝc^Lf}X`6˯`` Ǥ__y9pj5!✜ SfBHŝ`` BQ.'XÜ[~7m5Sr:jLYWN 0(v 1%Ŋ_cAF7V9=[}cq˯``ta˯l X~`ל Y~BD/'8P2i[ra;˯ 8GJıwmsE,aN1 3locHK*[,'I +.0|cH쵠S*l5r"B8iH%[@8 (i=-&NN9{Q"$Ql!wH|kU _!'`kPilNO q"bݹ+pW/'`룺ϗU2lLئ^o8@к RG;ؙ}̟E<,6N9 !v|qS)MD_gWv~;l'd: $w=3 /[~`圀@Jp{Тaoe {νW?V FVw ;q38v]-ưjN@D99Qj"SI&^;.̖hNGtc| hqY څ[9ur`4vzr]-Aɤ3g;!R$Bΰ 8Y+'`Y(S]-gwis k g_׾/79Hi% ).DTqم-Gl-&o0wN uJBۅv 巤X!'`))څbfoIBN2`$S~,bWM,"d8S)KWZ~[bC!R)(StNAr"a -S~e¯-gfo!B*fΜ!R=pgV{ SnڅwfC[9̘0L[3bfR??u Ul$f , BpmePj0W5 fOt63eztZڜvak̶!w_ مk*̴!R@Bp{Ldf˯0KNT!R@D[Z4EuaL1*) Rbtl5/f T\)C:< Wʖ_sc@ S|L T:'PY(p'+Pl TȺ| 仾W]3'PhO9.Q]-\9- :]"i`~+'P2mȧۅWf˯}!"VJ(c|,]xnVkcN̕2'P0N>V;_׶ϖ_6'PE?k̺U\]-!+IN`|yua0[~YN O)6Do©lu$OhO)8 o_df˯(~D8:S . ׹b?Gygz!pfZ~P(L8Szc89̔ "B89C#C>`etMaPNØb'S80f4b"Bh;0U(4'IX9U 0)$'*J&l>Ɣ :67Xp*Ƀ`wq ᮪pVqdR)H ? cn$smio|LrmX0zq0, `X0a`0FPS[j~V0qNNSo~74*. ?o;Uz }H0ep]۩5PD& 1` DECN^d0a 8q0 @wDY~f1>GJT,`GX N#; *DWJZ ~Ȥӆ'ai~HDn\~#שּpUt8x?`0 ٩IwtvkQ ]}hf.`vzJlo1jxb@d02~- ~Sm lhG'!B ֖U۶e5o9XtBBy12RJt@޶KU]&Ԕj;"Sn0r>#@Ǫ>'Ml*:B`yaՕx31Ŝm^D41LI3Џ1ÃV;8s "B`wkkmot۷U !p}'DhkW``詪MYJixewx @'^"—>2<> s ?szt:i]+$֖ CSK&Sli9ZwRjz?aA"p6M--x:ށ03>n<#%I4z:HMO*z}hD]Sy輅h` [/`dyޅ|(]]~S"46Rf;8ȫ@#$g^446Çh^vbdG:H)ڊ^ն-lm46#,ͩzn߽ (FBTp\vvmy KKo<^/>Um>>&ӠƆj=z, H__q>Cvzӟ#!Rwpuuy))mAT q "MKsy]z ܅Tn=~zy\WUwQpuնs33}THiյ=~l\S!3mwCQs^*8{;RQގ==mWʀM㘛VO^yoqX4N12\VcT8]}n ,5P]]'CΌ=f$DÃ,.߽~ ?c8,*012AVJvU?jNŎ.,*!奼Z/]݇]^/:2t( MzdzWs\6 RJ~"kõ7p {X WW h-:Df$Vt&h_ 6ֶ݃ Ċٿ}PS 9n;eqLCk ή..j#Xr iǏ͑7nvWRbdw |~o,밨أ[1փ BĞߟ]Df1AÏښ]D{`"ž߯Z,[t>9d2X~97$4oիd vvByJyS)L_eK-}-v?WpD#z6OEh$W/_f 6#=7=D"J~VL%u[ B)SlF#zz*R)M g<,A8(6SSooKGd66(4mu60  H%y"WmMO(c|ay~D-f'.jOX>l|~2aC NQ^A}S !4?iWR1Ņf-x^ F,sSO;_޶8 o\xF~?~4nj cX9Fyax*ra'p\SW^ŽݪE\|Y"?~)1U5;|j}'M.KU4x{ܰBD{BmKk+z_O >}?4|""w>Dls[:AN#VWU7'FF5g+`~w7EL><;wq=1 O>Ui?G7Y;@@5tH!J_0|ȋ/~sv~_ cSSccTѐSP* -X>OE`ˉ}RJx<^~ D"")f.ڔ׳U|YD.d2݋q =Bn#\n7¯|Z_彊ĥF]BfXNM3GݤDFQr%S4 bHtf}POd&vno~PB19 (F7,s2n[0Na 8q0, `X>BZ2 cn:_=㿫a#X!^=j; ^`0a 8q0, `XѬ03IENDB`photoqt-2.5/img/filetypes/crw.ico000644 001750 001750 00000025175 14134304101 017460 0ustar00luspiluspi000000 000000  g*PNG  IHDR\rf*.IDATxw$U:f,$(@Q+*\z}|+ "*^ê9,&ĝ霫GONPӡyt::u ]"ԺA1$cHBǐ! C@:F,3߂' ˵+A aL@{mWP6| R>& bE|eR*Y" -³vZ C@: t A1$cHBǐ! C@:X!N5YAPn8e R*T2 )$IlA0@EF#D A&c$D!(ARG#Hc,/،1&V{FִU`0)@8CE,,yzsIJAG#f`:f0d,!䟁3X4 .s!_>R*,l Mhvvhu @I0$N#bQe|3hls hmDgA"I/a/1)1#a8WbQNP$Y&GU H?b |&H 83cÐRɪ ~cG˜;X$X&E0L֮6"cHD#B"r@PD, (d]aGBBb:ŒX7KFZH"U_3X$~ڂ d~濫FJ&ov  C7x׽@,LO!ȁJ"ڋ/R#nHC,TxG LkBdsHYjݕ$ ¡AYJ! kjeppYP RC*HO5pUeⱈ&f++v.?$K`vN9Ro 0tUhd!LhjJ-K  <#QFHTCeY4fQ,1D>xƇ @ X tiʐe$10{VB0`frll:x'F, ,55\IJ=ܟ^X@*`OO5+0Ԙ  uU-1$7M; V @DIS'`U5pYT2pkszWKBh2C0h`2N`a} A73 05zڐ,en@MfMXb jݕ2E19_ЋL"ijƦ&H DmMS3AP713>p_C2{TVJ@l M&XM9s2gTA8|w݈`5!fMݷД]8QĢśeY`/E(D#m^aDQ}TJ;=> V1 ϱa @N8ͭ8 X _,*h( au4 `1sU~+?(39'Z?Q!$+sD#:hnE<A4@,B2$ey1A0`4dhٚ~y ~`I*6ld!(C :au4KTdR*IKw A4B4!M ܠ@z0fWd-H?;`7,̝\L ͖6},VS90X$.P) Z4Aܖߢ?_HPoU@9eGIrK! *L뮀('d, Y~B@T V o)<$DU '0 Q2U~=%TJh?$D(G  N9V!'_,[ 89'@@Z[~Ko&'BQ/Dh 5X~xN`Zwl[ >s$DP eAmR   VJ-\N`D?9b[z +BHW9bEh[,z %o)%'P_QU-u|~<  Jb巌[{z /GT-Z~xNO&%Ei[ u  $c۫Ry?([1s: ʩo)pÜ 1U'bIuНY 2zuЏ0d"/bvjn~jQߢYB಄cubku╦-Et}k2aL B EB:*~fEPϖR@ c iw1& 8;#!Rыi?EcG#91^(&{kMUs["su-R* Ƈ3>R,R4@>p'0@c މ1Vt\XA'ty#oi0S ԅ0buH+ 0T*4c'_ynkGe1"! .]@]؅9ij ̨8'(%S~Lց],Ձs^ģ hFC>B>sۅ[9js!5w"ÐJ WsaU!J?TauatN`D JC>|*q Wu%'*}ѯi&U`J.ԒPHuȧ"pc ˲ 0Y~Ոr5|*p`H%kk&˯QCNgE;h]xFvaZj,+G 0& X0Y~5Bs5;3̱V.L_P˜@M@! 4ƫd&˯UNO%b&˯UNO؅+h&˯v g%d cC +`2v2W&˯ TqV589)&dkSd4sIVEw29zlvLijj"R*^m|*qLՅoP͜@U`rd^C>eLՅ[T+'Pѳ.C>evy˯"#T<'P1ېO`L@p4"/Ͱ T<'P3C> []W'J=Q@C>Hb/}Hse?kd Ut)3J W?T2'P>_cȧdL=9 WwseϐM,aL!J0oR]tN P_Y(HOE`ardS ™UL-~+ T1],9 |kH&bt}d1 +y|?C$c<2 R$:&htvd*QK!ϫ݇j1YyNK!@S@rEM!P@0 Sȇ jI9rE |ȇ 4'xC>!Cp9ECB>ZJ (b|B, Tw9H!P1sD :4>`1@$L dV)(GCJ% Ah!01{c3+؞!]k B7cHBǐ! C@: tLAfb%D6+(]:HRqQ;  +(]p®*rj j(xUj I(L1h!Z$C@: t A1+Xc ̭r( `0@ mJ-*R_(0>2$ adhn788фFt:vzlܲ7lDh,KOd2d2QZ 0"DQ\$\a*x<)JfB9$ x,wF&b}$+ 3~^޻>^ep{-N9t\x%8̳t|}O~T@Á&ttv{Z۰k׭fˊŀs~="g|oܻRe\v> @H$~w'xip q>to&˟Ex"Wxeh4m_=8B8߇}6] \atYY=`Ak ~ƌ[/|WZ}.)@0ģ_? %Gp۷o ]xZ2㙮ԛsϗdB˥ovc >v#:XO.c+/S98hb^tɋ$ bٞs@/(D xG4&NpO/|^gb8hmsp}gbޒ$!P@ܢ@@ !|K{bݩ9Cwphfs465%{ (f~T ?oƦf466Ժj1H8۾}32H&_<tO{E z(kUj4p@X]ce @(Vl!R+A<ˊ_ju7x.d,Ϲ薜h& `K6\z?gzh4`0,ٌF߰]V;p7xLLck֮pA@gW~F#},WgvZc `!:o}jIV'vēN*6/*bQ\K_,dîU0r___ ^`N.j"؏W_~QQ{p YR0? = Eo{GMOsa+lQ8d/{W'̖AT*ד  f z[p' J2q93%I¦-[nƊ&!2zD˅ёggfY^68 99zs$~1Êoَs|>:IMFrnә xI鼯ucbز>l67@&  + h_0Y9dIVlӵZmY݀^dzl`aY flhs:aZZ $Y higYi{YQlozWG~,bزۇO^$I¡MeY.lwuZ,HEm[Z[g{J0:<($mؘQ`е*/x}*{￐,+R)s9AxƲ؏V.xdZ7!v-Cgo($ hii5kpyx`Zw, 2 Lb`=em[Zpށg~b~hGy^ {<o" ٧VAkNY'>SxcNj(1ήU`,avƋd"ՆUSOCgת:TF?3Mn@ [%pG{h.gDܧ>Cӥ,yj ~D"p_oV [ݽ6o}G?͗`TM5!X\QKi`_*8^mObvXmaRI fmmNl?Ĭ;]=_@4 .J %pa z=$~Ѣh2Օ f jݼv,pg3߇)B3mNXm*}@gm  lܼEQ[χʲ$IX~>С`q,?W|JDߑCYֳc'D1DFE8aWvc::H( i7Edsl{}Ԅ$Ixg^Q=O?Yc ]Vc#bbk朣g8m_'b!.WggTn*$YcMy Rm@>AU6o)6ÑL{:tts is:vz9[6k֭GGJ*K{{ ʺ[adYF{ ;Oܥ0_վeoWOQR: mΎ޽a|ly6lmsbcRN I@@ٌ=_`_`@Yf^&.{ϕXacvx\,s斖U}٬S{vł;ff9oL&#:\. . sy29;nhi{g^_۾J 26l܄K/BQ?'{qhh@k[]ȶ;-AN̻`6lv`!$9e6m9]5KېH$  ~[݈޹k c.j^Smf3tw͆-=ۖWsl҃斖Јze6{g{׮Պd"F1(N$ ;N8*~g=W/`Lܲ5h4b牻Q|\yKHSO;q_- ♞*J8ԀhĕoOL݉D).xhjjY"ɤ88mNC 8UqfWg7P пވKyYR$I®O_/<'y(Zhko]fcs϶b˹6b1(sV|+_W:fWhl*N$gO1;3u-s68}َ5kgG"^P$ <w3ysSq$YƩ7_VE_ܻ?`֫,r/uЖgLl6}8 @Ȓw;w,}d{~^xL$pavƻl68}m`X'Rdhim#`HD$Y_v[ykMwO#28yyڿyx2l/9a(2=B׷o+h8L&3D뢷v rlY!V|_p2֮K}Oΰ6 H&1鞀3ߏX, ٌ&9ZW'`E"7AѭŽccsz%"!rYˋڷ0}P wzDE[q?];Z/p.CJYcSg3s>g._IH%lzPWj }dR!nMՆ Bǐ! C@: tLUAhQş d9(Ś|M!H0axz`MHgg1(/EE( p|8>7c9l BTphP31851IB!l*-EE"@ @΢gbaI_IaQDuY I #P΢{|\כ0|:GG1 kCs,g;A @8B!"t!H(x ԍF3āz1_ 4@ @DӆaHV|B|2S~? iAaI¸k5$a}$ 20 1gЧ~N!d+I!X9 `-D'U!`DY7T$2 ~$K`>UC:L1ZIڢ^}HB%ED,}{lN!Qtw, 2ETCjQɰMYK8836c!X|1ODeSY$ c S~?zo$*A@6q: 2:FGD 0_(ar@ bcz\(.0 (@HAuZQpzxa$А'>zWM0,T#а1i L/~ڵh~XUs$WT`CIZ~\N`F+t G+GQn.&~Lx=8K8 s0r8P5(Ɂ#CZäϗ79!})tF҄#//(@UB  D$Ȝ_0:r9qP\sw\_|ǎJK&Մ@%89 srPi~("<Ӑ<_1_w0D , Jfg?758:FFnjX .-1Nd;+oر)oKrWOX s67`4 1'29aaXEogrK! t!,87>PNH,BS'p>$hlM;bHj(' ,B9sN_=ytkk+~$,TsvV_}OPL[~S鯝  Td~$j v `4o5'@@,`ǜ 6Frv icTo*Ds iato &'@@,57Y  Rf4ݲ_"  RWtWT.9"%fM H07Y  ̖d-  TK"NY4'@@$,b X~S9B1s7YlP/bn':V F`$OϞԤe~@0C_bN6 q蝘@SoT\kRW-qB1C m 0W_-00Ed a;>D,2 {X~#Z"'`i` HK` = Ѥ``M+,-$o٧64 SZa'oX%'`ihAg"+{{1:;C";Z~ XRcƩ{0{zL?SZ~S XNc ̡QT4/̛\ duv&sUsofsI cB$yTW̜N ap*ucE}|Vf XFb3i]~Eb_=L000󡹯d E1ݏ.7Y9r Xo/*7,c,jمq37=̘0Hup3>06 [-7=̖0,|4hcFLEdML+B>5hڅ'vdUL)|"dIׇم>f R|Ԇ1@8xMIY~5,9S @ W[̐0fO*h,d&˯!'`|I|GdՇXNoМ)\ȧ7鐏pvaC,'pƠ9S@!9.Nb>ꂑsB>Z sacV"f5䔕0rN тpy 73 Ѱ8S)f.L *'`X*f.L 00]څ| j6nuan`!?iG~a4v0Y~ BN`9C @|̀8k(0Y~zƍ0тhuICمk<0d"d5&F B2²,c,F d\R ™ 30,F dT ,؅{2$L2*ѐϠaB>Z 01, 30L_Ó@ J@KY\]X^Xq, 9O!C>3AP],#S9 fI5zG $YV.L_s q.vas C>js.~ua 5zM!o4=1Uua9ΐKEB>== huN:GGU ,d5=aQ)rBoސppժ :EQ aUퟴnTQ ܱ*aI*WN@3jG η 'G_ jDтvd ˯u"4cbՅڅk} .B>,D %\&˯}2'B>6 M. o~|&fn\.L_;MN@58GMC>Z.],cqN@Tk!-X0Y~Klh\Ŝ@}G 8p]Xet׮%usi |z$=Tg]xDŽϋ~U+j| ;].!"I$6&(,D˕U8|#5~rDfQ3'P'3 $-1Qȇ 2Z9`!G!4r)ߋI |XDs) @,yF!0Ts!^ I5'P| H(2)C'H' 񠢨NAH0Dt nA%~O(M}}H8d!C0ۓ=@5Aw&8! C@6 l Aؘ>ܜdgZ!A  b..<xaH"m=Mft__}_mP*˱2 ADgv @epIRr 'D"h l A1$acHƤ7Ua@Տ{rLIO$eB)/{NN109.,sI] áߗeP(18d9p Cx5/\ҒMG1QN+l10gzln7JW]vnٵ 9$ !Xܨ$ILM35c+`ߞ={bU^"Va|?u X_Y~j 08E d`(~}}TA0:>'l Nj/$~@0H$ Äaw==Nutoh(Aml4tdl OO#HYŅ ᣏ𽧞̌j,GNǎ7gm#~<HbhH ;ᅬ|S1>mlL;Nc`hȔD?@k[&:VΊ$ Iݛ1aloO;Frsz;0}U*, 갡jaat bbrC##Oj֓G;E+_܌j>!XZ\?6[whrQ0kaX՛6,c;/+ n|?>/r=~Ҙ dazvMMqTW/ۦ ]0pܜK/_[6nT(ne HsH Q O~/ءQ< z{Z\wqxO9oj҂s{`U^^v44 dԭ9x ^]8@'N'.ݷOP: afv6Hr8' qrsQ[SGSkkZ,wP~fvA\ ^puN4M=kmۮ [6mBը袸m{qpˁN׭S6"D"1#`_pDkY Y9bbUWcMI .m럛1\Emf(I F +q >?n,c {kkr!eKfpxn•E"`39hhvx.@ 0tbom-A,>?G1k$WvuQ/a_pq OEE,/OZA(Z+).F֭H*QiS 0XӝoZy4X q(jk$/ Cqmް**Þ;~&`3@}ssB={nqDQį^x!3/W^UyyI ,5p8n;v`ժw8x 55TOMb5\\ye병,@8\$r ߏ_~SH۴~=nƤK`30cpqm-NBNs]55(*(kj?s}}ػk$ ѢcY1e^ǏOpUUSCu E8Kɜ# bdl '܌ށEß{/UW'=ן9]A~>jw8ot!26VUaCUU\DSk+.޽U?77~?Q1o`'Nӳ |T(tH^~R~OA|{S*fMۮ֯?s.,me74ྻ5`br=Tivv6ĥͿ4|gT.Tn?x?S^D">߯ٺ% WVVɞƖx4Tia~>~c=/40֭C܃x%W, I4?ŵp>vDnN~q,֮Ycȧ:<#p8h/$:vvToڄkn;nc,WA1ۏGۍ]ʜzfT]==+~Ǭ׋fCͪZrkm ~;yA_7 )XYi)nٲl ^]Wh<8 )5h yF|qͅrM{<3{O=U3 )͛Q^Vdg.A0BA#؂9'؏~g_z 46!#mHl3'~SiMR 1:ZZX.p:9qi؂o&1q\ %8I~pť;LyBM` ''Ώ~\c #cc ) F|T=1d 7,MQ^_W6o6mȐc ~at ub~{OQ% >k7? VG rGW5`SVZcAή.ѣDTG~ O H۶+f _IZȲl壏↫R{Mp83A!+_^ ( s$dYƚ壏buQQcxW Whhe%%v'lٙ(1Էdtwlwnn$nIQ{MǏ( $"2n|a~E_|ut+3==8ݝ㛚 =n7?EQDt`Ю*pα>?,T[g'^}m7 van׮ҚeՅ7'$ ݋/fo<|O+@1,%uuX]_݇aƍq}pX ?LBnトE7O֕AdggÇ.aas}{Ы2+pα} 3x872\"6VUfVn(v{l78],q}McG#, pYƭn.E_|utř mJޱEEQp\ؿwo cI0L|r\hubr9Jl'HtBelX_,3A0N>;֯[MR&aۑ1<{ WepUY447(`$:s筷b-ھ8sލ%:@mM%rᒋ/N."Ae2w߭hןQ@[[e[6nC`Gx%7vV4P܌Y#,:E(`a𗾄+jQc 3^-rselݲU :ΞUbT9֔⾻RtS{hm}wvw7 ]] ?WUQ[(w-Ko;NC)Ze++qӵbmq^R],cΝ?!q#7'~# |a~> R,˨hmkK܎v/ʀ>#R(8'318NɜCe $p$]pA%tϑp:?32Q#׮2ʷF~scdƐ! C@6 l AؘˀAs:i Ls:yL#稤2AÁK$ºA1$acHƐ! C@6_IENDB`photoqt-2.5/img/filetypes/p7.ico000644 001750 001750 00000016433 14134304176 017224 0ustar00luspiluspi000000 000000  PNG  IHDR\rfIDATxklWz7s(fɲ,;$q׉IM:⠋vmwQnѢhŶhYm[} ƹ:%KXe]$J")R̜~$[$əᙙKr,E g  $Q`UcXq0`cX 뱣!Mp\<߆~M1P0M`SL W|`,8 0`,8 0`, _$ʪnT0`s9L(f  CD!BaX@`. L]Gn!$, =iMl"iB0"1DQ؄pmm! 8 8*E#C:1S)$_Rב籸4pMhh݂ڦ&q0Gq08`|_,5y$H'f۴ MQXW|D-, 124aL4A&ϣqk;m@3\:m"0il޽X@8/圙kXH@妛ml`B$㓘2PʑN!~伻65+^7LS[X`(tӃW?q,f qa:fW嬻t5271^#a>"Qc_cn|TRb}qscJd1?>1XSp#B:@6W|0y$~nyJ#Sɤgj (5H)07 0}(EsXL&72o-a_s9-ߧB@ A7qAJDb1HMMD}$KXLJ̦c<'P2uh07*}Y¨߼Ec@jz ӗ*D[ս u͈64y|%2M %D2I(B55hjߦdQJR;2T롥MS&O8i* ܢY5W9+-  eNU* %[дGbJ~}(FJDynhHuC@JcaT+- īFHH,֛nVjBVJ~}qaKZwҙͷ _Jo?>+8J԰e ܂H]kXs nFL~X['B|(Cކ-mKW'&B!4߰m܊H̽q\%L'rHp,-7A{ DLP)%HԵlֽe.h![[*Q؈G4Q뷴i҉Rq,R0ure [PThF_zLY%Xo݂P$R헯JI -F֭߼42&dayHԍ."iB"66 ګ_+|6%nT1^'~蚴]4Dml4 |aמ|~%@!PZ$P$ ] >@!ɊJ~5߇Q!p -}HjjF]f\^3ޯZז o?\o:MJua/\awo9O8*-8OS8,- to}p0Q[aq2J~K' p0gTʯ+ǷX8#Xcu{?f;;Vu8'<ˮU~2߇|0`vo9ǻJaB ~CST(-J@VK~xAg'*b&&.-U8XVJ~.-GP1WyA`eZo'w9ʋ%Z'ǂd^.- L*K~>V?}'Io9'Qo9 .LCߕ;D/f1ч*}*-00I7`L>Jq]]w.|'wS/!~"!Lbc2?O}"B2>.H+ d|CglNA)-a1Pg̪7eT(rO`: =3ً0sW{g{#A*-ժ>ӻ ]^00t>.[K~K'0|DQ3"B>`&}#ĒrxOw@Dcl'|]~"B"Ӆ;AT^]v"37WBB`vl]ArxO_ %zcvtVDK3} ;}}pM] f0ǫ}"B:1g*^M=Ӂ+ xO],JDX `0VfO`;}i V.%0 c=;}MZ3WQ.% Vg`&!ߗ sɯ&I'w{&'ʅ`~҇%>^m+}}}R>O@M>""3 _J~j x2 M>W\\%!Vʅu sɯ'(Ǒ\x/\(/ x&iq8&/]Ϛ\<Tv#LѮs^]P{K~FD̪'fEM>#c4҉υՒ!5~>GD'o[U(>ra.u5[|8Uz1soU''&Gs\x<]K~G>e@F u~"xyL_lPK~I>5?Da`}[**hr{HHN*0s !3gO@Y3|e=}%ɇ1'Pbpcc?|SI XD`ØWT'`)cRn@ naLi  00UO)>!L@hZ_#cla`BZ TSa]4v!M.aLmD=57c a=cL9`,8 0`,bF1!l  }}M@yp\h߶w14` 0a0 1 "䛀cXq0`cV栬tU\z#\c'!夜"cgvq.uoiB0‘0buuhhlD}C#7mB}Cjj A ĕaEDEWGGeRJ7Cnl5Y|ϿۅAhB‘buuh܊w;ދ݋;w"4͒'4|7ǿlUR={OzqRTb:r@:Dc>Ӊ7^z pv?e 2|Ͼ_}wxbp/cH Hc -+*RSXl՟hPmϝ>W+#;DKk+?t?PqСe(N!>>twua1sx_ljn^sI܃گ8@!>9wOD.pi8va躻P{C>/OI0テ'gZٽ]^i8xr}Yy+ ӄ0t}}鏔--8_sλ,T23?=k{ *x,}81laGտI):>4zty-@Wg:N}TtlӦM8SUmD MixȣuMƏ "͸Rd^%$抎k>>LĖ6rm&fY8~\B_4Ϡ'‘n/<,f3s9NjI{_t={#<]Bb1Kc< pݟN&q 0- ?ţa.wO,B4ǫY|[ЀO= ˔]a 1=mil8A(rr4M˘M$gpK-oh@M4Qs5K|w.ZeVbM8!~Y:7ވ{'pxdoy `ϭ{D9 "divK$zQ&Pњ: q|[Pw߷pЁI n|E x*PT.C6YgJz^G*0NC#g;v3;lcJ^}3SSEs~ٿ8dJۿw-Y#Ja6t<伵Kk}ؽۑIGDW_4Ʀf>W'gZnes+_F8vd MÇ}}N:zoU _ױ;f3 Y<|7×U[ђbPtlǞ~ᚚjZ }(oΝqۯDѡw}f~,0g=kjn/g[mslqJ%O>VpPk[<|__~pBpG?BϹsEnݶG}ڿ"ㄦmq?[ha8~-XtC{>l־R 4 pHu hjڄ֭[}Nܰk'nع -FLp.\^ѱ; jQ^[ ""|gj==H4-i  kRBE5Dx):䳿B8F!5 ƛ/dicO<ֶ6~~ ( W M΢c[~(W +[>'_a;p!pEw 8v8-e`e!"|7028Xtw܁|Hl5V2"\"_|GshkƝ `%B?ŹEǶlތǞxB?q麎/@:*:sJ"oB8vT$Ds^8tȱY8eD<^zön?q0˄8{4:O*:i&}I dwYfxE$狎s߽|WD!; ٿ8%D}/{[<=EDHR8y℥KCG]8\feRss!uvԏWW߀ǟz U عFLO!6 BJH)ىֶhk߶84ﳟ=糿GpDJhm-"]WSs2晦_%{8тR6C ZZ[ADERJ4=nZ:n2N+W& cXq0`cV)21PHXj.:O?rec"TMǷ`,8 0`,8 05 9ȗIENDB`photoqt-2.5/img/filetypes/ras.ico000644 001750 001750 00000022707 14134304241 017455 0ustar00luspiluspi000000 000000  %PNG  IHDR\rf%xIDATxwxչ3EUo.L30&:ƦPB HK p !!pC H!$W lcS;ջեU[i̜zeKHݙ)yw4{vw̼w l>HƐ! C@6 l AG ._v1]r6AD`َ 9v1K/|$7(I $a&%! C@6 l A1$acHƐ!  L$cl9D YCKae N. . NALHTB1H}Cb$@XCQO lDA'Ã\orrqgB"%$ c p=>tuchxaY&C%0#DnVJ򋑗 QI]!HYߋ6 #S|~?mCRn ҢIO%, @00hhAw_/dE |rOoƠ( z0Y4.q"4 z}kmįc aIBSG p2x3$I C !$1t.r9$f(:zP{A)uPR~7amHT;C}[#rL>-#èi?06փ  C?[ :cBCkr8݇$1 M-ތ1 =M!, 00tz3k42\sA0p=mꫧ`86laH&cL?>;ЇA? `BR]}݆MFؐL@iaG5~Bz)H$ p샬nʔ0p!BE d Cn*En c pP ?[ZZ{H&  E+,-1 v܍`(X  RK$Y95-unE]kifff`’d* 7͌%^~lFD@#Hù!S6kZEAeS5F#!T4TC0,1t2Z6]Է5f@0F;Y`0_ 6V#$H a"b^NTW&08DkUwcmn*0m=hlo6y2"$rMձN0уX!l9*i0+$r9LP[Q\k76F`rcy3<1*c>$ 8D=Yn*A@7:u M1Gpl}+Lc yrnlKG-͵F4w¡6` !9=fz}9s#+n&?#:+@ܐLDq^*NQ-c,qƚ׃C 8`88 0,s|x پx9 @LAӍE3 sܘY4ݐm,rcޣ#()0Uvftd{ ׮DCIrC s+9GanfMKwS4!jmnd6C9 GVsgtuiۉ,̝1NљC Q˯QI#9@nsg):"sx3=?x2 !0A!p`δYX8{>IwPN 6$ q{`<,=98Z P9A@Q^!+;egpXʏ-B9ؘ#n@8"yٹ׍H^6rpGX.Y(/B^V.DQU? c  +Q_ ӕo8H$2Uwbz4?G P1Qr:q{ܬxܙm?VD(0]}ݨ;Ԁkc $9(EnV.dYFX %(@D8..8EGd0Ȍ1Τ,RTҒX& D; ppgR%TRFsXz)q =ԙT~vaL4A@}+C@- A rGA@N۬7^"9  +G,5塜XH}wsor! t#߄F9Ð*oPN$.$S7PNqHwkE_켞 9ZTMG*Rt7ZUMv^Oќ0"L,b F&B(lub4o=  `D   ƨD~oM IcTo"-'@@$-;H07^  ,D* -0k5"Z~%sX~!A³"!T5'#t%jMd9k$ ̖x9,g[~!5s$D|X/  Tco"X5'@@Jx-HTa5oB\N6C 2'0UX/cryik *ZJʖx tY#'`CmK=[ "n [쁎^Xќ0ۉ5PHW ubW>%)M44vC4'`,}Fccg^cN47@}Eih`M+,-$aO~t@$q om4I ;Y~e4'`,}V+4iedYƮ谨;QhAPf,)1jCy1`;ƀд'RslhM,'1 `W^+0vV9\Ζx1{NRyhj/:! {k!s{?7̜((@KgkBkQd+Y~g4'le1ƶfT4V% W-] 71f,!1bw~HIrg!$QӝdX~f]Og9rYCݳF.,* 7̸ )G{ofQp>Ӿ≇Pw]@Rќ$g萏 ,R@}eWFsfXO0QG)o<7 M76WC̒0i,mQo^a3'`J$ {'%W]xĚvaY0T4U)&wЇ,d&˯!'`*'pBvarDB>z va|d՝ќ1$1!|!=؅?6]XQTWw0 5U.Nڅoj1z?Z|hב溊F,dMF Z ^TS嗮)è9=B>z G aɱW"oʉ'Pi +"c!]` 46Vz݆ZO )y{H.L_` U!=md5cs߆#!=) hzW],HN JFC>GX>مk<0(|L:0Pe0c A  1Ң!+WŠ,F9 QB>zP8V0Y~M$'З֜@Z{E2+#v]i.,0*ɮc"vՅSgZ~khҝH[0jGTHY,!9C>z ԧ0Y~Gr)f A* ל+'r0UGcRR],C t-;Ouaќ@SH5.],' DƮ Œ1R_Kʜ@J@$ڏN'BŠZTR"Mhh7GkՅ?J.L_둪Ŋ!{M؅CY>tuhp$ǣ!בhu?Yik9E$8Q[A!-eՇ )@B#7)OJ@S@4EN D!H?Z1!?|"hKƄ|辟 N4'zGV! $*J>a& Cf @LP)C&ќ@L'`cG3fNC)zBFeT4V$.*HLUa)H1lDAN>>:; HْA 'C@6 l A1$acb<232@60#.;q 7A[ x_?5vvT:cNZ|2xV>Áҷg.(Lkp0ʾO Ɛ! C@6 lLRk10A]WQȲ EQ Em8c%O~VߡLU2'!DA@XفjTTD8Y1v#/7JJP6{ŧ攡L/"5阒$!<D wFB5#=&PR8 552EQ.8΄U!Q?ЏmoǚkhlnP̿e`Zq .X3N[s-NBQaA"˪3_|e:?X܃JE<쟞,˸+pߘ g~W׭uCVWE/7 [oM}<-GA$Y›o oyۖpQG]C=6:^/-8\x1X O8 n;chmoލmNN@D|؈sc,*V1Ҍmor.ڏ@?~El|sS܃2~?vم J<TuRAeG,z\JıgEwޏŽ 8H@wv ]> ` ?;aP `cCRYEzRfq6kh!@Gx8xŗ_JwSlGEU% HSoO(ؽw~o!+8Մan FFFCo&@$z ۱qKC0Ahji}_߾(/uPE Q\TO\՟Z㥿mC `'vz~m#N3q(w:l%AAImљ@t?tnfKxgn{]; CGv`u u1s\aɉ{*I՟e{llSaYaznt p1Fsۂ|,Z\I|FgE=^z ׿Bcs#14CC$UX}].\.aD|ٜ2Joo7yu`s(*մc p80tքRQ5  8DQTwNws-(˛v|#:ˍ|U>`˶ENI +2N=T ? ! QpΑeoljw߉^3~8D A"p\\I7&ttvq8DN9ykjkp׽_ }O$9pcά~~ }{Bˆɡ^:X o}O稨,p8hVEQ0o18Ly(šuk51$e] ;? {pƊX; ::!HĪիBFEL7յ :;n2 GSK3^xϸ+}@(@ 'C쌳p'LVl; h5{zbrf`0{G*tǭX5t?;Q\TUt#Iw5}4s7vnVu38ԙ1/] ?߽w>ڵjI?|Igxdkֿ7_9kx $Uc:NÈmq9]jȜ$ ͨ BG-H'IMvs#.NmND<4̱0$)Be\|ErAǫ#JBO9IVWt朣.< چu @#?/U b2!  B*~Uzfa%MZe]ع{`AХ3 ‚uO1Gfffݴw?> 71%$Beq8g ?B0I;oC>\բ#Θt9GqQ TT/nmkLByfdfT<^uq)(H9{\淡(&OcAUuss&MqΑ3fH W`@,1olBSsSmrP:c&onEQpsp]n1EeV|GDeu%cI (>ܳKg͚t9ŢTukMсg9V2Mo4qE=v`nRz W=8*_/":/~;pєp8pi~<݇I;c )Zr|QQU귝x rsR2WXܜ\ݿ.q }x7FC! DA- ~xmZU7}tx S^E-iUu~ع> pݯ/;@˃A}c~_ b驧%`1QR\Y184u3lX:siKQ6,̛;\vtv<,攡 Ccs⺒/gqVʖ#''Wom~i @صw7v <dee!,KD_?`\vݸ?Efff̺wVcq-ۃޞgW]y5sԘ*t $WPCeu%jj ϻ\pA( . -b, KFQ\\ R (YrTMoos&t:_ ,Lˊ!F(bjH>O˽e^n1}qe,[Pėn7]wceEYKT$&`P\j(Y~Sܰ2q| >uk([wכ6VL~g6`(/9raŗg/~LHQ9½_O8auz4|G="Mf.xEJo}ҙ_|6 [oE]}=3N_W_/]WCE|s/>{%5XO._v,=5b5(A3`ܵ{EuM5;;088@00En,Lñ SN9˖ODvvha->yxᶛnŖm[WZ[144`01Nx<^L+)pβqܱv!rBk3B"Gq Kۍ8o#qβiyhidb| |,NavY  =h@Oo@e8Nd3|L/bv TP(_hkoCwo!pfzӦc(*(^@ x$&.jEmp3|;L]j>ȕEő>c"<2Se& (*,BIq N>i$Pj(Psv AFJG{iE]b< l A1$acH| p0rq1@ (ta]A1$acHƐ! C@6:AҭIENDB`photoqt-2.5/img/slideshow/000755 001750 001750 00000000000 13766352720 016200 5ustar00luspiluspi000000 000000 photoqt-2.5/img/slideshow/speaker_mute.png000644 001750 001750 00000012060 14006705637 021366 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGD pHYs B(xIDATx_l[U&?4m`AEVt< E}1-d}Ȩ]u0m@PhI0xX UBE43;-M%I4>Ԏv\GH|{rz @c!4@c!4@c!4@c!4@c!4@c!4@c!4@c!4@c!4V˕e\vd%dȕH$(U.|Wd0Qx\*:jxRB!٫\@o?)_43[ņ Q B455%{KBhK(ۇIa(8Dѱ\{b*D"APlQvT;@T/R$*|E===Ne @ۺu+T1Wa$B@fQ 3 fffdڜ?/0KͲoߎ¡Sg488ҮaɻU6 ɺH=CmoCkOmݺu.$\!a C ?%:/! zDn>?,qӧ7-~q UDn޼aP"p=`V`a/zp6nH,뛟G1+,+ܸ8-WY+j B555m Z{\'"RTa.N{E4  @H\‚bqFSSzIfgg/D ֖a+v^@ ۾;իW4Sa۴igz=0 Z՞T](~&sss,z]4D/lqq#Q}}= oI%I\.GD(Rr:;;vC  ޽[C0O/&/d1NBOE@(~ P@T/}!K&FPfJ^ݦ<"J$q ? gOB?XB`_n0 J["> ?0_Av Xb1PαUd{aZoo!}DPⰄ@SS掎'i5V&m۶c{PvƤ6$xC)n?`Ms(~A,]R{nջ0 m{'D[;X>W_}orN8v={xyi@ݻ{h4;8Iӎ;F9q2"d8hA\dc nᬣ5ߗk׸Wn26H-~"#03@yl.^m^pz0h~~K?Op?Hsĉ_[l6?U,@~K8r5͉X,fy:pEуPPq<ٳgDLSdgYto9u``L?22rVV ~m2`؊!0L) ]WtX1V?JO =pQr% e)sX]V!u d?V_.D[yhhh2_!\lhooE[[i%ݻt;p㣳YB```OڵkךsbbT["_z;l/\GΗj=Ha|/=x@__GfnΝ۹a`` ^@Qכ%{챗#H`bg9oeL/q[r,!pԩە~uMKw27ƍٗQϜ9scy.]m6ey/0g7.y&B@cشiS_p,"'"(Bd/ĕp,Etwww9-cv\o2IJ@@yWKo֮ho֯X!<\(. (cffFX[70r5fj/BRDv*Z>Zkj!:|҂ |">^OJ/Fr(8PW­VQ*QD)SDb=.Bpڲ:WV')Q >Й^@T(~TR! % =UnЉ/ePV{]i٫ Jillh,mwuuhw5T;d2ˆaK/{r[WѣReGCRLO]^^gcYgΜe|7{:t(ZX^ h|`#@O?vx㍣|D߯GD2uuuuhûX,(ƍBGGGY }iiΝ;wcFFFjL%MRЎ;FVIXau_b9"Pmm׬6|'\d\GL;v[[[iWMMM1;X6o޼BѨ0O6:. 799)t2Y% @iDD~5\cuOs>%gg8ׅI@vܹ}ݺu LsMeuap^X>p/ejZ}}}?eZL^RDҲ˗6=='Eܦ Z0ְ=_l߾}[}!`+ZZZ(L!{*2-~廚L&xAp8LDD>B%~U {O/YMLL + pR߉ {Ο?yaaai3lkRB@L&s_ _a\=]k#wDW^yeKwk Btm" NWB㉖`Z=* ,faazpv`xlqꤱVBtQ±s#@=ccc/2]CD"8'KOxΝ G"%I :Y}6f'^~FuAirr!`OM?tuu !lZugaf2}g,} @ *{:m x@X[Ute# @,@y?%˯υQ,!Jl>~˯{煮ؘmGx'O4ĝb*}`277/.[XX`k;~N1w@0'|W.g}C?U(I.,61Ȼ0{r' %>Bj+<"ܶ% ܇D"aunbQ-0'{ 8'=I0.6ڼ2@p8\! ]9 ,A(`"PRUv/8NqC( I6']~ܷ#Dhzz :dhN8ᨈ'B(hJ C!{ѣ>jk\nL>.{]gU-~"mX94;;KMMMW$4gDH$Ǐž_'BU#"ri_%tWp1Ch 1Ch 1Ch 1Ch 1Ch 1Ch 1Ch 1Ch*4uIENDB`photoqt-2.5/img/slideshow/play.png000644 001750 001750 00000010575 14006705636 017657 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGD pHYs.#.#x?vIDATxkp\y{ٕvWȖem\qD%)`p!%PZ\Ц(!- 0O3ij0qK c1+;R*7ɒ%Y] %l벻 ƘdR @p]-)B@ٶ]{e`z{5,B3e\7Xl!阊2q~@K6Gql<-,br\}}EY(:ǹPq!۶+{Сy(X>6mڴnܸY(GěPxpt:""|aLiiz׻ywC DZksP0q8oY(xX!Jhioo*& B'RAB]"2G;  E޽Y˲*?Bn޼yK=\hUYx!6:s)N,"ĶZG{{{,T;cDPyy7<\b,+@rX,v#Y8D8l8rK"rv*.c:u8}kg @#ɉȌ>@#qov*Ree5׮]8_pN\hDJ-N4j6 nY(?X4&D [ZZZ|\hB'Hv;MXYYgϞg,˪C y׵dɒO;#yx@b8N8PDXTP555wxgB+M.b `v q껺~*"gk!)2[lY,"[+Zu%H=˕+Wi"@nݺo/ZuY@$"ڶv.Sv\ȗ^Dj&MăaoRwƍYF,K.AW\ ,aXt}}}Mwy,aC@ '̙-=YRmm=/^|eYYW;Kp :{***v]7%XDNw&w]W;NAF "W=tx@wٶQ;K1p ^u "ODJ jG):Y _6!,Z8P?~?>4khɉz~?Z\(*cb B%%%1fv? @fd2q|͛/bw(4\}0J}'NoX{1l6tZ;Kp@{wfƁ@ݸ~qϟϏ @ ܹs6y\N;R$ lP`x |uݡ8\hTx-˚ vNtZO͚5!󺵳PhDrg!.!"iG}{81^ L:~+H,ƗmD DM\"j``I&Y@2H2| BD$oӥq{J?@ kҎC>^c̤d2iWe=ZZZjckg`ܾ}^ ˲JӼGc3rm۶`|Ƌ/ 1<@cv ݻKDËZSSso<5_M \Mر㡙3g.7⧂!?vN>qo}"b(d2m"ri"E5<-,E-\"8[|4.;wh{שPDCCC}Gy/.K~HϚ9sw}@ٳ{_M(7-m=-@ȕ6'@]q۶eh48cUVV.꺮vQcLLNDj4sܧ 0N۶mЬh8QGGNj_pD; DFu.qq‚+(Kٶ}6]Yi >RVVmuY 0u,֣0 pnl۞C; Qq8t.`~o$f-;[UWL0B3r̎;'PLCCC+cq/] `."@ mjj6&,0 /ܗL&?6{d2>OdƘOzzz<8kܹ<#3_z|p8of)>^DxYU2}jg!_lmm}ɓ'_#*3s1KΝ/(HXD 0Q"@a,cE (XD 0Q"@aoIENDB`photoqt-2.5/img/slideshow/next.png000644 001750 001750 00000011046 14006705636 017662 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGD pHYs.#.#x?vIDATxy^U}%! $aJ@ETR,A¢iAe 2DE @gB{>}!ygz{{1: Q03Y\fsU`V1Y\fsU`V1Y\fsU`V1YJ*eգsASTÀAlܢbe+5A lFUb>h2:MwL`7?(.q'B: `ޮ#WoNPqi!p Uuk.ıUvpPbCm+uDor.bЯALKWq-h2qPO M{8(:HO1 %:H5+ԡjİuDg U4W_Thq$XuN] fS.Wp4g [w"X\ LTICp4oes+maк2aMv88X"Q/19u;@;tWI4:t: =F멃$zxP.KVVI Qd:rlϩ$,bhljWk$:z.v x[$цu{R^Whn6g.v;8J_ QALiRu{ C/RI4:3u .|nI$ e"P1@nSVRI48(4IvuDcAjcA7AN!R3@v'٦7&5!'-uZy0mr|Xǹ|J$Q u CoPI4:t:H-\ LTI48(:H \eG빬:H"O(3AA\ :@y&n~S$:E %siV`:HmCP!?p:D XC$%.D9[4. !~KhOAJpblUAJN3ܜ=CxJ6 82Oj .xI$ѬCArCPhCw8tZ- ]Vș ^р_Vȕfw$^u g'uDo`#9{8:H.\6]* &E:H hL yAd)?$zXxJ\ք̋$4`j7Fhw1I.wcALN:͛c9:t`{hʼnA&b,.=4߀K!\ZCAp,CuqĴ]L-a!0xS;p>?=L|yQyW_/FAl\lQuDE:4'K=r_3]/ 3F{UI ܤbp ae 88Gš\]ԛAp ewq c񹻖2.'-98Iwbs ˉK=s6xu. TI4: 4k%bzO )Ƌp.,M: >@3F}Si!3\k4?)ͅ7tg/rwq*'4ߡqn*'8U6^Ss vĘA=NyN4\6p;:H牃>T1 ć1/ixWwKeK$ ܥbz.\ ҀC\} \@(2 3n'y;2>xl0w{}s[`%ukmJSI4ػxZ~{ƨ$z7 ^xe=/pc1FeAXpUAUbl\gp.1>w'ǩCX>\`vQh}~f}V[rw'%0]RsF)ϗA,?F %<byV#UI*QdR|_㈃>/x[ `4UI | c \ ҀgCXj(Y{Pii!5!pp:RưMA,%nuDc+> TI4XXJXޓ `,qXuD=ĥXJ*QO'} RʗxY/$:8QP&AI?̬\fsU`V1Y\fsU`V1Y\fsU`V1Y\f*ڒҤIENDB`photoqt-2.5/img/slideshow/quit.png000644 001750 001750 00000013367 14006705636 017676 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGD pHYs.#.#x?vIDATxyeEy_o +(K"D($2 0@qTq@&hT! 2007tY>UstKfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff#?tw)eatAU%m'i,^/߿ ~)J)WDz8Xҹ.J)}m+\m4K$05 [?_m#8R=t%0z (IWu&#N^M%}JGTvtk6qgtAX8O>OӁdX|j[X=:NU`!y< xԡ[f3AmD).>#{~[fpftqq/dXI|jo-kY1.-c$,XOҍDKګvtu(<])fC$XW5@s+{JF?}HƟN7wDѺ>8Yg+[et5}Y930\0:N\ [݌E'IOQszt0 ]s]|X':FV:h.0-:F 8]] lQl"ゲ91Z#JyI'BaZOR43Z<ܽ0 :ݕwp ^2w%Ǵ:h~LFL`=G=Gb5GipKt-wqWtWuFPs7^.xIt~):F#xy;KMc4lMZl3 KȹF`W N*| <~ Om,0w絘f3Wzԍ2z=-7zqi5sz!]r0 jy?j'pYtVtpxt px]FƟ ##r~GKEb5vu=:K>ez6:Fq9Sx@ԹkRAjny8x4:c: dۯ.nMGG95t/R4S钲mX$-lXlq\rk ] I.ϒƣ˳%MxZ NVY̸j]r POG0<):Fр5w֏ k|x;Cl uRڵg4|-:F6Im ѳC-[BΣƨMtlP6&f"ODz[2HvvI>Em/<]^hLz+_=" ~:o;YNJ)RntYYx^zхvm״kgI:r4~i:gI҇%ѓ]ӹ7EF(IL5IJ:!S])ڲe-7lP;;S)1XBPs`n?t󣳰1xx u۶9:Zn  9{8VQg7!:+;~oy}7XA2~! ,-$]'eAIR.H~iZB&tRI3Zg(g]an[Ǩ]| 6:NK߶G[;`eD` wrZ#3 Ft5Z63ߖpdtw08 X3AleɸIj'@ 3EG#@?] uat㙭3L|6uM` v`ACX~L"Mљπoftst^]ؾ1ؾVFwRޣ8zxiCԺvSZ=ߝɹ:-u$~BL{2~.{r~[H]K_KO#Z1j/D}&29ySwIι j{l_e](Kߑѵ$2rP$6tݣo%rr^TI.)9?tP)evtA-IS~2Tҗ S:w%kxB`qcY/~/77.ˇ:]v89?!~[?͓6BC#9m6\BGVK9SbNՂGyc:e\;ˁ= %3?K@)iIH.bVIPW4&øj /j1I!UI̖t|K8@\!ݥ 2uk%af[J;!釒(̏.0˖C% nPMLT{@Bi.[5V.(#@P'jIn1IJm4<RD)e$͉.OBs$UJ?rIgHz$ <ˣ 2jY)eLu"I ˓X\bc}wA/I:\OHLѥwF5µ?N ՗_f]qnq*lmlwItrɟL%QJntȀiI.KJ{p>z6۵]]{;DtIKakg\$Ü+_5ӃcZBe\@yXi6pMK[ $:֝r[GхX[k$Dy. KyZ,!/Jz-}Yх ~t]As Wt3VnA|W*8M҇$]X]4|g0 q/}K).nety~ճ<*I4~kXv @6?I{jI?祔a:QK4^%z@͒#@E_M6~k*3w}[4\sʪ8@*DIkG$UcrjtAF(? XYuϧ˒$]XJ.($]püd?ޒ>.i TcwtAFz R$m|^n$[J?0# X(_Lұ?Ef1E5fWROOp;[K:GҎ1IgI,sTci6ѻrv0ʻ~wх`>56C[MtxԘQ:i#Z\ifata;v7KAx8ti<3:vj6c'05ƫE׷sD.vgVjBwp@t} ?S s#it0Gy]KT҆o$A]>ltxpM4C9޻_f+՘O.0`g:>/XSOx?yk\6u/`>v ):X7:lP?/$NQ7l&uNzxy 1P;ϒs ÆuC`гV72|RklQ/nvCvi:M.` .`>bG]`69Fgvd1y]tyo. ]#Ht+}x$!/ ϼ}":,z)<D$;%|8ʒuz|_aoԮ}횳YU5G^ `W&r?D]cU}ڮw0N͕]diōY3XR7Y=>:Kp#axWEgRsD(rn5w6=ԃ,2N;= 7X-&LPsh8r.A=x*::(:NY/j1)j. Bg7 LjNyf 3 wwD)+`wFgJ7{F);`Gٴz\E|cYFw<1\c14-v݈rv+:#ZnԭN$BPsn84` љœ3Ge\#5Hnu>97."]zE|XQ s `^=6i:gszp5=tߐw@emFs9^NolalbcTo/PDtwPO#cPsԝd^]]}=G< *:NC,fx8? =С- lF@$#=3#V,:NKz l",IGΓ4BtaFMt:]vtVa[^*'9uqFGdb5W@ûo2DGw :cYϧu5p=^u\245ZpIGX7<qw~jnq`5Cx?-}y':NϖNF]B{ jmmU'9u^^Hz:]$ޟRfIʸIo+ ;ުSm)Gt$~-3XbpRxXoU̼歋hY*uRD[sC*idf"D?BZy!?bId2 ] n~*xVF?+kZ^8y)*G~&I"F _@":B P}$8F/#u$ɓP]T@|;wJ/@C*@߇ D'`Ege\㏲Q{P H+iNʪ"^B IIӴȯbs}Qqө켻wJRJ*|9YʣADh ?:"Bu,i*"T~g+++N:9eh4Z,E/H)VV .šH߭ w_ٙJe)ʵ@^X]]UW$/;]hV}q[YYq.~f@tE.IyNeZ@$8m^(ߓ/uڮV@xC*G_H!?LfܼyS_z~]Cxih!Dשt: Z#{Q#*%bkZjZZ>@G叜OE{QҪ1T 1.|ggG=\OG4e鮊1.h4 ] rߧ_хŸci۪aT4=*Ql__2YƯf%f繾7W5өܸqC&ci">O>{Okӕ/]>OG+eگiz|nG ]iZN *Jq̺(T|d6o&kfj> p;>|(R/刡,q7|3t[@IiBQ/pQ(o^roS%\0_Lv`ܺuKm_.@)n:4p||J1r/p:z|UfLa`EL Py/z+}"/> \4(K/y*7!z+`ygי"<(#ޞhO3?@G^arabV ?h/1 }v",/Zc|h9 m^@0><~8|Iw.BA4/`Xr2= }ᄇ"oߵH˕`';d LD Dsw ̀@4BQ899q.uBםӸiUG'] #Ke,uAQC- 00j캁H`F@]7 #01b_I0uƬkt: ]-?-l6CAUKap7 ~ N79== D]Y[[ D>3 Ȕy @E"8, Daoo/tDDd2e `0(x|n#Zj~KA :]w1sn, h4r62v"~`'Z:g<;oWeF!hʆV}L%J~}p9>?\n޼j/5z<\u>7VVVBh9"PǺjʦ~/qWm^*C'`N"ELQEwFJB7]-Z^%\[av矫Ћ8<RCѣGq V%P@>Q^aGm˽s'`~ߐHXPWRn }E;Տ(ˀW}b)B@YhʯȋT[eB#nӧ" N"9?σŸ`0rϻ Y [n- aSh4j~X&".K@NiQYs<s  mtVL7biN:}B2x_Or}YtAD "K{UA!"סoE?FY A?"/.+GȺU?߿CƯJ۾ݮQW{f{"Jr"WvՓJ泲ܾ X=\iF1*@ G]wEuC#*$MS_|^?#b 69N|%ɉ}yG "&lmme*EhT֖h~3R0zH9^r@ ZAjW PAnل𳾾^{!*t:!J 6DTXtD}z=L&APqnwh7'''~ZjC1 %??N#'''`җGcF@m`r `ҹnf,_qpH:h; j~^(9}72c>S*2V+v!ʯS yuʯ`0l@/"T~>}svM#jfS= @K@}P|`0F#t &C̃hf2HXT g@QK rxxXE$T<|m!*d:/~cͧ`\R@5,V~B UE˗/`0hT6r">zH6Y98t<uކeLi _oߦ/Zr_YF#;[[[qy %&It/b"oUJpO"oKoބK*A"wY^ܹsGϏ[, &;BHmmm+v3c@uޯw@TnqppFmO=rqgK k ؛7oҗuj4MyY0r>n8Ɇ@@"];YE`I}{?dk-oe q:<9l<KG A1 ! <Fv'dVS߽m/Cxŋn>T*BX$r`P+Ԙf>?YPn.9v}~~> @m5Myzi%@X"0XsnCTw5 hdFaPcLa`m a`F@#+ FθT籋2qB@Vap~]\\\sjﱋP;7Oݜ"˼ Bf&{ D@t:EHETt"t?kyrGacȽ͵%oZ5KՒ{Kܕߡ!_ohxi%PdX[[ij ITeu{_ǾT_YQ(?P*wLxU@-v> 0$%N!X  Ex"{`kkKF,ߗǹr3{4E&y+u~Egr/*RWQGGGkSh4;::QP2 vvv%*{9;;qߟf;;;޷2dt:+B|>ɹ? P7"]RE_KBVr՘L&WˍH뱋h4"i,BW7J$Vcv"\V%PZ"tt&Y+\=ׯ !>yE"ON!*m5Wm ?7o !@I?"+g^ 13 B ~򟜜4\Zxn/Er~~_ ]^^~&sF1"i6'(U26HeҜ_zR]sy|_݇@`T Nn4yoá{#R@ ZB ,U{$Sн!GTh4rzab@,5V VÇ˞  :6!ZHn:Pȵ_5,GUM"%p>!.F(z~ڇE!.lEUzLSܪoQvE( Bҭa?v C"v@$sFQu^? *@Uh>HC*D/P+F>;(=fn5,T_@emMdl?ym)K{f'Y=JJV7QqU MQ ?fm!*|>!J3NU)Z%ꫯ|p8leKB du` zcA:` ["nP4oZN'_P )\n$8X .a7^`5uDft RmI,A=Q h)FK_.! ^: cEkN |_D`q)qPioڲ vK_'Zx f:HA4 d -. Ui*-LVh2G!28\^m,p5*~Z2\~r{?_^V) #q`/O pAx7q5ěuJ/}?G#@Vn%wlR"@V vVIB=uRtp:D'CPgCdp!q5%[NL)};pOx0O \uh'=A~}ޠA_ImM)}?O^+7oRI4=:H2be > Bo }8U\r(p3qgn&.Ti;@{λdS9 5pAx8:H-\[8賙:H7X-@7gu.r-fuDPKw%R LVl`:Dͼ X>$uڹʲ?1g%uDcK=MP퉏bJ3 b.RlL,A=M:o60._#>Oo@-FuD3Wbs4 %% xL^\&NN \X!28B–og q V|q-5 Y h p0:- 9".?aCφ ~FLyVzߙm0/g>^qh lhqg 7.W$Z<b}9x:D'Z 1X" ۉP.{'0\]{VSIt|Чx.ق8賶:H'/_Tt.h_O1Q<wR8".ZoguDsX^.Κ@ll!1 s>c 1J94u@~~ODIP:oA=Du,@>wbM<z/jҭJ;@,_XҬ@|WUHuD=8~u>@:Dga~ ?G7P~~ 8^t\}/㿲:HE@t\} qHf:H 轍S݁?^aeM1wĥ^zcbz ^"BĚlzQI41uk}x:D?aXVL~ d7Q=. N|>T.ŵezwA\IT$3AgA yO^q2g'uD3X9\p)qVQ^'^nh&1Quk^i &J.p,np?X^6#lN܂4HĚdOCd`"q+xpU`ql1~XA288[šO7xGuD=Xzuk@Kx:HīλA\0XK$KAL{S^9 J \}38d?JD.8U"-ہAL?_>nuA/nPpiV{d1|u.@aĐVI8܆%@6PI4u@>PI:u7y8hM@O3 .CJpw-p:D+X:߁!2Oj-ov@⿠dp 7  FgF$Z@]qt&D h1!u=;'VWIqP' o J1\6]c(`2?T}WMJ .s6;2>(T, yKo;d!ruH s&Xa ; fXxf$ lbhK9$Iln4S@|vLO* y.>D^k(o6bd{A28I–O#n<8J~h5Yۨ$׫\ͷ!0/_yAi.2lC3T$ tu (t`J &Hp!wBuD7 b.Lo܊ ɹ9Bu ƨt:p:DGSLoʵ :HgQ lÀA-$A6.">%^_$\Ajh퉅:H牃BO›C` OF\&:H-\qpOژX"Lu nVVi;@|I"I:A.vܩX|>޿Y$!ngJp8qӰeh͉C#A|OM~ dCAPW>uhqa=up6du 6! .\ :D;7+Λu:DWOu:tOCO<I$CPAMAǟ`[J&7:HI`OA &J*A<MSFk`GC: .{/V`W`"0P h5XݐQh:HS>VH4 "V\dq?Ъw;@B`5 :Hĕ_SQpXQA <m.KpJy'͓ M@K8p$:HaAA`9L!n-qrcJ?k.!2D%S\y~+QZ`H ,X|uN[ \).딑u㛩$Z@LC\I[%P=}GAru!?uh1uh:Hn.iY FSFn8E"7)u9}&혥0U`V1Y\fsU`V1Y\fsU`V1Y\fsU`V?A˹Θ!IENDB`photoqt-2.5/img/slideshow/speaker_high.png000644 001750 001750 00000007271 14006705636 021342 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGD pHYs B(xYIDATxnŸnoQm 7iر#QGq܄P&Y+i4|\3⡨J,uCa`Fa`Fa`Fa`Fa`Fa`Fa`Fa`Fa`FwޥnR+EU}-+RFH^nLá>˦4b>`0Hޝt:MTY5 |;Q-V}VLSǩ*C!R#Gs/B`\4T7uE`@Y2 I]~SvB_%('PZzN݌c 76}ϨtIv!z˗/?dxP\.S?CbRjLf>Y-HӍTAGӧX#J5E"FRlDR|*pF߽hS Slip֦1beη+@&4n,H{uuUtonݥqG̉O.eWGBNyJZ <{L$/$noo;esAV> ~5?Dl}H>꼷oߦn~cLSԴ*i]u~~BmOڅ [}l|R * ͟}j|R޽{f= @D[{s'hig6UUU0@DF) xq  l6x,O6[k٦d2 FTKD5!ߩ]zND @8V;RmX,*7 ܉j`KZzm{,\)jntpu"z۟#;0hJcrl$?/? 3@? wVr/@$lhzM䧟~QPo$"ù^]]]m[@<^da ~m_eAGǷkD)Į;׾Re1|4`"`pXѮ3`𣱺LiK:޿ak8n}9MR>})xnnn\^4Z>Glk֏}ϟ?/E@R@MyķoR7a q!puu}??vRWT@S[v'&O"Йz<*L: 2RچhmNE}kTmhTH!xpvv gOqV-|Tq @GU@數-;Iewh?M܄dxUd O;c'4)tq&^}$Ϗ?ZIèE{LKS=S@MӀ7 0Z;INm ӝX/MPJݎ&വדABt@X.!ߎj4&  kiO`W+|5WCP}$a}9QLuF@#`F@=KFao\ a`F@#Fϸ TYשab]ዻiwÃAx4X6ŋ;*nB<6EOkۮ`0,DTZ k&r vte BٷEqrr|/B݃X<)TȶP J";|* Qۧy1 TE'KUh_)4!RjrX8 ڞ\(d _mlVӍ$)\׷1Ժ-UUIQSׯ_}"遭(-_,oFS{{{m΄d _vmC6Q@-U2nS6_  B *t?;Nk.Рًh'@/:vEXs%NP!TS-m B>|hh_DDd6p8 x@jYL slL&M6uoAڮ??z UJ}wyyx奈ww\[LQk_]][<{܆, |Y$@Hg$`S\H1䢔ZHٽRgXln׎Y0d36PМӶGߌ s}pMm?x&I~T4`(ŅH蛙RՇh۴T.^p8ܜI(Z)nm=;Q(⦗y;D/У,KFm܇eY(gFX,xR] tahwqqQ~Cʭ5ot<ԛM,K/"y&jPBF"t@d ]__G{D2\.XƲNEq||,`Sc>D@l8ˡ_ Kc-< ~ @=bi*L CY"6`1d;;<ݝ{u! j"gSj|8=j,$@b r_ l!h?g*S;j jv䌾>#l(ʲdqPmg d"Bmtrss#/^7uEջ>}Cn }rPvH>+VnkD"E۷M_ ۵3""UUIQTa8aL00 #00 #00 #00 #00 #00 #00 #00 d.T\IENDB`photoqt-2.5/img/image/000755 001750 001750 00000000000 14165364127 015257 5ustar00luspiluspi000000 000000 photoqt-2.5/img/image/filmborder.png000644 001750 001750 00000001700 14006707323 020101 0ustar00luspiluspi000000 000000 PNG  IHDR2ښiCCPICC profile(}=H@ߦ8A!CdATQP Vh?hҐ8 .κ: ]Rh=/wB4+0hzL'b6*_ч4c29IJs|8sy>xfxxzfp'tAG+.q.:,̈IGb+]JF8 ~rΊ@g"J X6%h:A.&^\pgL WK~"U&PcWoL0FN8hhoȃ9X/vf Gί@hy'p\ Eǯ_&ҍ[#9@CTpxy3al3$@ fL0"рO!cF^r7N_VYB%K4UJ6$&UZԴj˒S֜s.~HIEK.XX2l,XV QkZ5 `uSמ{koiȣ 6yʄN<˴Yg[@ʲUW۠ږ˶]w{CucyC r7A.'1Nċ#BcR9f2B^3i7B?7 'vtXAЃ[E{4% ͚At0߭'hBX XVz]t&Tjhj`L6bDk먫SSmH٫{,S0;)_2w[̖ S4&}wj^ q3/XeRl ,ZlcfFuȁ3l}:@'7ď\WZƹ3#f&=O!]t1+q8j: 8kkߓ0WNkI,b D( lhIKRU# ~?=[05J %@8ǎ<W'=뎦;!+i ~Fߔn8}24 pp){ݽs=r"=iTXtXML:com.adobe.xmp xKbKGDDDDRc pHYs  tIME!PPdz IDATxsie ¤ٲ3)'9d|^2 iw+ʤ&)9l%q(;8aYвmB﷟-lmou$j0@ 0@ 0@ 0@ 0@ 0@ 0@  0@  0@  0@  0@  0@ 0@0@ 0@0@ 0@0@ 0@0@ 0@0@ 0@0@` ` ` ` ` KuGjj۶mI$|^'IVK666FrΝҥKfff5jS]$^/Int'Iܾ}{cmmX$IN8Z6Z՚i$Iskkk4/_HӴvʕ_={vщOJe{רVuA\]L$ɲlz'Ogyi;w nwqeeםNK9i OMNNr?@ٌW4˲sN `z:55駟Z6ʲlo7Natt~ѿ4}$뭷ڵkn_|j=]ZZ٩SxA:|S;vx)ﻶv^W SLMM9$Ii60,˺noj&Mݯ9qQ$IvښWo$I:VU;vwkci i4͙ݻws^`+^xol߾kZ:ǑH-Y0d?~oGGG_|Ν;'f}9x}}'ƍ+ IVK^xo<8ƞMNs˫ρv~;M~qٜݳgػ{. *_۾}?4Mkǚťr9ty4=vj-,,\ʁWՒǏGRؑ$Iθ|;/17͙wBRfOLLq=?sqq^E@Z\P^e j=555ͫ= DTAvo`@<3_U{>1ʣp>in]r5y  ,sCU 8w eΝ߬_}}⎏ye*T`A'NzѨcccϦicAq}շ||={1Jpz}cN _X>st0@$666B0I䫎X^^>I sFuAgPq787>/[ZZ_/_( /ԩSg,:0T<ȲS8 0@nݺ{0VCYx DxacFccllH$g:-A8p` huuoƿdY0 0w@ ^a 69B ys0@M'L'6ys0@-!L'yxs0@!L'$ys0@'L'%84B $ys0@@ ys0@qy` 8` !8Kp0"LON?qL0!8 azt><<9 @ a8`9%LO·LJ<,9 @AF0=a :B ӷFp0@ 7Op0@!L<<9`C'LC~80=f.8Op [!b8b8q `@q q`  70]p0@70]p0@"DZ0]p0@"DZ0]p0@@ftyxs0]p0@r@tysaz  q ?=mW ΁I$c{gffiiPTw΁q(a:e 8 Sds( a:E#8 S$s(Ns(Ws(!a:y$8 sa:y 8  3,s1@ a: *LNLs@Nps#$80@>AΠ  a:"80@H   *9%tBp`l0~  a:"80@F qs (a:&80@#80@azu  $80@F^s  80@rC^^s #D^>s "80@rO^|sP&80@ G^|s2%80@*G4az\s7 w@;fgg-Xqcow:[NCξl|ēimrrXټx(w>^vqq'(ᛘxh\X^^4 Ҏ}}4MkG`<@K`@ ΋E`z|΋E`؄@a΋O`\@n I`r|I` ΫC` ༚@tj QLJڄ@s>L`#8@sG` ~ 9 EpV MUt`S 0x 9$L0@;> 0TsB !8'4a:$PasA P!8gb#8'PsB %'8'PBsL %sL %!8HP`sF %8ȄP s@ ,WWVVpYp qϿr+4}{rrS G 9$8caasssߝNVټxY a:`<,˺|x|s3 qWϟ?Nsh\?LJ<{sk9az8ty~0=a:`D$8y  yx %LC  xPp/azt4>am&80=DpG_8cfp/azxt*Opǰ͌azxt*IpG^~ P9K00@JǑ_8~|*Bp/azxtJKpGQ͌azxtJEpGт~ PK00@BQ_8v|*Sp/azxt GpGق͌azxt ApGY~ {K00@\Q_8n|êbp/azxtrCpGU͌azxtJpGՃ~ 04'LC @T8[#LC @!8Kp Np|p#D00@ qK00@'8G00@!8K00@e8G0=Mp|q/y|!L 3LJ<,y 8!$I"8Epo#0=a:`@E 0=a: Tp|0=a E0 `q =B <91<yxsb!L$ysA0 `Cpa'L<9y!`Ap<'L0=a: ]80=a: `|΃S`@ S"LOT<9E$LOT<<9E'LC<9e LC""םDYu/_#9eqܹ˗/(˲#M}$ w@ үՒ^xFcGpN سgػ{.2ǿ}v_<$8̄5=vj-,,\p`A۷oFe݋/wi; wi_xގZ p_~JNŋUpťv'FÇ?$ر$IR1XsJvرQ44 З<222$OpN ÚzI 튪xr`@LNNL'18s(azi>299I2>>e0Xs$ak8x'NNN5 Yustسiju`𦧧g~~߹s$\ ʲCpCx  ].MPw_{i@>Hsގ_$w|Ӏqak+CH>Oڵ?9`^^: $FGT;w a`|O8|b:`|Ȉۯ,˺/_8w˗Nk: P"ϭ3B`@nY0;u'P@s'a:`@ݾ}{#˲5'QsRekop`@z޺+90zښ/NApE#Lw- ɓp s("ak9 PPW^iUM^k8 P/³>w9cT9L5 (ӧOzPU {O_1$Wq'\,Ͽ277{" IDATWcii$ILLL}zI '^FkZ3MV$I?l6~!Mڕ+W~uYf ՓO>wzz+Y]Z֡snw1I$˲^n'7ď\]~\t3#F&=O!,w0+*qTQ5g]V8oqV+5ֺ'a8,s0XDQCXѪb"M % FTBr[0w b#@hhmض'@j$֢G@6pq=r|%CrM7倁[g C]nC`H3~r+ bKGD pHYs.#.#x?vtIME 0?tEXtCommentCreated with GIMPW IDATxydUuw<0,2ʬ`g0(j(FEEA"&DQAHG"L"3"3MSo:{~ކUuާ:$I S ]fn<`F$d`QDb c fER \,?xH[Cs"bg.'M% SWe8 n?8bYRM}89" [G I57<+".Vnh6$5w}#"?vZSZz&pz#-%Kb$ }3s Pv&p-=΢x |n] M&wjp]`-Ȗаx;22ifZ>&esz9ְ\/|YT>;ofWR>9=̚:zߧ"H+G[kwS ~w#Kcw^zO44U{ O7Ÿa9xeGMfVR?NJ~WҊ_b +L@M~4'G< i@4j yHjba&IW3$@ңHRÊ~,33 @Z1I$P{dQfE,~ Vׯ>w$ 5d{g_y- .)I`û~!3#Ij +KO߁fF,].uiIP#eο? f$@t]fE,~ IPiF]z plSҘ;Iՠ?+)*T3M$ e$-/j?.33%Il`6$I 79K2$ tM$ c_ۗ$ix@TcH_"a!I4e j6w~4"r5!S$IMj 3"bS"Im8~/XH{$Yu-pJKo@W۶}/I(M}vq^,W{[6->U<ے=#oN3,"P5|ktx5>4p{f/="b@%^`N~#橅LT u*_R-Cn~I.X>Ա1g o $3pm ">gW^D`$Y>ġwǒ$ A/ K,gGqw$-7=y$2dD|.ex4H@]b>ִ.-"fg I#z0=dZ%IVzRI@e8Csͬ$:HR6d\lf%I$@$YAIHb"3]YdP9%/7$ ̧fG3]ݜJՁgv~<njh%< XTHX`e kSM_}zsmv9`∈g=:P`v-"`6$3!`a5x;{ћ%IC?O^ fo略$ܠw7 jV$IGHf^ ;Š$ӀC7w$>d{-9-#z$`r N4ڵ)ϗkKl3 \F6->vkIP>I`w`!i֒*2spʐvkIR ܴsWSMO64p][xpfN}2:i $p 3OVdI 3'R=je6$I--2ssg/z>*^S(gFޒo^w0*"nab ;I sCWEz)25I~/~?UIfNyvqI@ 8>v.fE+ϖT@ԟ 3Q|<3n{&0>"꺪O$@f |prw4pnDn$Ijȑef|8҃D`ޒ3Bx`> aP@T2࿩iR= 0&$gz`!oGĨ]CdP]8Eyπ9}S Y-3%Ic*2so0`͆T迹q|8/2z| DC6.3B>ܰczS|`癖qNn& xJd|L>nJ~ֈqqy:nBgV G9KQf^~ fMQ"b2ʾ@-i]8fw&{eMx~Izi\YAR}ΠEDl Z<ή)I @fBGVہqˍ <<">gW$=n@ 8&"iqUCIc98ϯ=M"bM"IRgko :?f&`&NIңu>qm.$-s 3ZD^KT^(vckIz6G67.Yq{ + IZfЋ6yyL.{SmBfrl <G|S\ ~"IS~O:KTS593`HTPzLk"*bV%I@u7$տxmx"KL$Wj*")nm3*I>療skgIrB[יivM? gm4("F2L4bD׆|֎V ƙCD\iJ_,HZY7>3`Z9nP~GIR (<0$տo I "~M1tn6)>QIQZ[SL$TH4d@D"2tS[ԏL$37jf`9*gbfh:%I݃ jzk$}$@DwPqnt-IQq3Mlk@K. )${ )i[ITlPrkχ_U@$ G숋 g"&f)I`i$@GfIQ-31c6PՁMidۯCҊmDe( ۀ ziL?Q\7"k,U~_sr20b܆ԗ{ug(fQ65R-P_wgO-x5)ICjEnۮnF@ԯ`aמfu1e; řo3dDJN?)3W % V7ְ ĩ{IR 3cr)h^ IX.(3l1\G,*X`F%`y믖$Iy~ }+$IZAÿ cR2s$ c}tJb[!flroyIXn|w:[o$I.U}Y!B[I \Qhs ̾D IsSlcsHT"y.MB.(ktJr|oHMBQ֌@`'ՕH>CK)P84HYkFP +5eqKZf{f n圈 @D\Yl&d2>`/'Mec Jm(sg3eZ($ qP4d".+M#IR 7%d,K Zd:%`Em_0֞6r_ |WQIXQ Ddl` $`EDo.)ֵy$I ic횙kD@4\lP(|$  Mw IcRrw'D$5 Nffzœ P3*IcUr3gLWS)Ic񂱾`3IԌl`^+צzBn+Il3){76ڪX%$ ڦ`m'Tr=L$Y(w̵l.Ij^D-}K@im3sM}9½83ǙUI o=~P($$Yd]jIT ")rMIRff6c\_0܇ͨ$Y̠!}F?1d,HMfsMu|HȄ~HD|+3O7>3_Bq6̵::F24`LHqBnoq:X0UfC7gPs:R-,u ^ oy 2Hj\(62HpQI(2sL,=&$@D~^07meگT-$Y邱MlƿQj-ՀM$Y`?4dP!c]n3me $Iu,v9Ѧ\Yba:%Plʮ(brSQI(5@_0KKԀ ݦUJ$B 4_9삹n:%#p{RK]0L$YocSlҞp-I(ܼfBFM$Y4 8`٤xPg I@A*yCNI%I ̧٬$ռ踬`}lӂ7nFե(y3'R2l9X>fBM#bQdBMljg $S2ciQLA-fWLi`@[fDkQD,5(]\o$:sXڴйJP,$ G?@/s}# {Qf)#I+ <$3ޙ9&$cm[S0")I]2 ?-OI`0pa >^@$Yć x,IR pȃmfG$cEZqtJ@.+2sM-IR BpH1𵂱:̍g ;F,zcy\9o0dK %Iyɮҳӆ]WԈm zߐ C@:d֒[lۺ䣐;{H@DC݀6$I혙3] @Ԩ kCG_ {$YzJਂ!o.:dKi6$JpH{]^Ԙ ".!m GxH@?YǁaJ~"OIYH+Oa5)o4"~ /w23:OiO2s p3 G" {7P*^)Jx)&0σ ۀ͆40U#ΩH6}OCFI 9Cqs435i炱$ ~)' Dŀ.$ aBͨ)$ ~] .$+keBqgO#I,94d^j-ΞFdO)\$sљkH@CG Cq;@4$ ~+2>{I@P0 Ø$Y w w$Y b0dp-*$Ij c}ʮz)j<.Dg..%C҉Ou!GyAXG=$I0|UpuXNd0q/p#bpIpLQ$ )y2{$I 0` I IZYD\[C}zJI |qbfg w$Y Z̮\H jvI@3X0v-P(Z$Y -[fRf\gbU`O+I8 (f.$ f8`O8On.#IrM"d`Ap2d02{oeЫM$Y Z%3]Xd5y Im.+S-sJ|$Y TD,n/rj|>$Y :3fב$Y )* i7$ zXHPwyjI@]\Z 72sKcH@]pS< IfuB 󳫧$YcT$Yŝ삃B@k0lDܞU \73s5'3;`5rKX{P)nT|Lh9=23Ǜ YT(Ķ$3QjSWS=Ŋ:!Jxi@5=`Fr5~E) .,2s$|̦L5tJ@|`o8W0YbdP7w]iQ,jwɂVڝ$IpWX(/(gbfN4$ ysXǷ(/x*ɒdP;Rvo٥$I5w |B}3<`ڰvD| )n$YѼ&ҥn $W +$JvfNoAN~h$ {IXOVoAN.grf.&Iu4BekiJgsEDG Y$Y4o Z33nx>f5b$ pȭۀ =Lod9ө^)Z1Y<@3r6" -SO3A`23߁O3jG)]IEc=J@v-Iofz&Ihk )$Y\D }1PQ{$Yݳ zIfhp1tCpLJ$ z}R1$ _' ynԽ$Y ƚ7zep.H"I~[0T!JS IMpoX?7~ IppYI,b`~`ydCBq6l#d0D"V qj,IhM$敜̓vI*q pE70,>c$ AX{eC=NdG$ XZ0 #vI*RSS2s{$Y4xgpds6GI@T0Sd (넆"yQ,/rY0".Gڕ$1"sFCmMd4%TE%IDATEz3,FJ&܂=ծ$I77 Ccco$ X0v9ysv#Ih7mN8$I5.jqPUFdЬ?b!Wiq'M%53'؛$iN.멙)$Yj!_֐C~Iz- 9= rW@IhvQӛv)~j0B&f֗4Hi𣂱g:%I`JN ߐc>P9.$IM'R2s 8Rkl ۰vI4&"b0Z0 Zke i@.u@ʽpvyIOpx`#m!Q`iPqpv ew'G%- *߆9,ϛk- \`GRv),\V0t #oX\R8=_R+eZ0֕5?֯zfO^g%p>pfᰣe}Ekf^Y +3;IR9y=0"~VYߣܚSLiQқ{^ :3w1Œ R=r݋ C; 5>(H z~̼(3 i jL%=|anz?Vs~~RG/=K'z">@ovNuUj8N`mg41'֏M2n`B!W1Eg43chk ?x@o9i~ n*iFjzU*PfYyTywD pVx5?hW4n_Z 3yCN7=ic$OԿ@} !38epsgYs=VRK//,zꂱa3Pef Jj"K :`ϘΞYfCRK?@o_0ִܭǸ%E<"KqT,n5\("JW}Āe&!+5l{/,kWjw4OzS#Toͥrf0=/fPm#Iug`|D|qE' &P#j_maDEcfDR %3yާхmkԬxXRxiD>"z`cۢ`MR5y"񊀹qjgΒd`'"Ϋ˕R29b^YC \DwɄLjD /y B!'e.3kRp1-JyU/j=ϢKqG?:z{2\X0Fq{/Kux=F- Z׀pbD< 1H|"">c?"ֶ8C]WӁ:lDhOS1#bM ŝw/~3nNo_ Ɗ>.ǶMӁ]WB^3j`+a`vgֳ6J+xND\foQۀ~պj+ú~/"$8<ge&UZvSi]9*崂7东MҠ݀Guj~;dT;Y63q9Umbe p aZwvikt29b43Kvi5:R7lcoA~T+-3.V D't}\hzm a7`q58XvDzd)!ff(%_DD|ޔ80lQm\9qDun^#˦-y!B~/1m PU"{Jm]Knn \u~ ;-[ 7jo>[ sE8yKOӯcZiKV7 x{͊LQ;P0ִIvSnJUz("F2 o:Go}]?0"4-7e攈7رl+ͻ(p>K0,HmTSw}ϏQS5^ `]#ӥN֋-KW~&6:8"3%r)W̲{!h p4pXDK S!g!JEE x@uY)[F=-mwy Z"(S!gcVg(r3Vf~8"m\KY 336pAbo*'z hLxMg_`Jd2qnf>BMtH<x83gD ]z pxkPnG"{^^ 7|1D |`Q< =*ziAyjוCUq*+z{afuU? |sE]@ang+ (gp{&vߏu? ׵Q:;`&NDZ<(jWvL~qɒu>JT+}jcY8zzkl; #S" =ր9Qʓ9P nvL̫z`wX95$8$8_hEVp3"6l \g˪e{eR6T7]2oS ,dgQD2%j:S5Vv'q͝+%59#/aDj|3*~!`BsړAp;=$|0LIh+3(USm,g?֥7_Q%$al1h6JjoG[[Ih Z.պ[Q}@r@soX-4sHy/`ADcKhw7 wsDlfV0e}CpS}툸֗P;kRfN9uW`mńET+֗P}@ǫ? yN'kߤzFCpP-B!ݗ,Ԍ wD.CÈ۷;g$ ^1y1ur 7pm7$/@M,g{4TeJ$Y-Tϣk+[#!Im-,C8TH&v;B}Y_"vIr`XgZ~EBy%@KAg[p8S-s-+IZB7oGlEI؊UӁk6olgaD̷$@e vۈ$  8!T}$Av,$I5(g3s~f*42s̜n%^ @݅T \ Lи 1;g#v*IjfQ+Gt8?#}$I$I$?ּ +!X4IENDB`photoqt-2.5/img/image/genericvideothumb.png000644 001750 001750 00000006300 14006707323 021460 0ustar00luspiluspi000000 000000 PNG  IHDRX3sdiCCPICC profile(}=H@ߦ8A!CdATQP Vh?hҐ8 .κ: ]Rh=/wB4+0hzL'b6*_ч4c29IJs|8sy>xfxxzfp'tAG+.q.:,̈IGb+]JFd2l@@`ǯ_Ǐqtt}A`Pׯ_qpp ,*0@&@XT`@% 0,0†V)iA)%|,={ft,2x ,1 ,*1x||_v  JL , L, L,JL, LǏX,b,VI9@`q}|E|͡  *0  *YM1N 0XMӬR%Lغ 0X&@`0(&@@`T`@%&@@`T`@&@@`Tb@O>۷oM JL  L  L  JeL&10, *Y} p2ĻwXMGGG+ >L  L "ө @`7a*8-%n` LC`PUpS&@T`X@&@Twwwҁ,  *0   *X.1͛71N4eC~dioFnS~W @`,X =67z%n*X @`,X, X @`,X, X @` ],8-`%nX, X @` X, X @` MӬR%`T] 2 @`,X  @`,X   ORa] @`,X   @`,X   @`,i>4Z>`)[F%n*X @`,X, X @`,X, X @` ],8-`%n*k7q ,  @`,۷gq IENDB`photoqt-2.5/img/image/noviewermode.png000644 001750 001750 00000050561 14156031603 020465 0ustar00luspiluspi000000 000000 PNG  IHDRxiCCPICC profile(}=H@_[KEvqPĂTGB*ZUKIC(X:8* nnN.RBoTjvMfdBV+CcKD1u_b<ܟWɛ ijL7, MKOa%I!>'7ď\]~\t3#F&=O!,w0+*qTQ5g]V8oqV+5ֺ'a8,s0XDQCXѪb"M % FTBr[0w b#@hhmض'@j$֢G@6pq=r|%CrM7倁[g C]nC`H3~r+ bKGD pHYs.#.#x?vtIME +5u]tEXtCommentCreated with GIMPW IDATxwU2(J4BDQذw5bPPT4T[Ƃ[1XbEq?L30{ηB!& ?= I!0 42B$#o4^+L!.ofV) DiR!b3$Y3ېIK!Wp{JBi<}4 D2Br0̾"L*5 ޔa=Bfe k 1P_BFSepp}+'2B,a~L_j]ݽV{Ã+#wx[Q<콷t(j8C줬[%2:DKb$l3>]Z$-jN@: %"@@_Z/pJ+0vQw*1$4VdEE-"6 Kwh Q yv]:lX̾N@!9pjF[+ QK>uca?Ls/GwUCo|!%3gF'O w43`^.Ql5 PZ*B,--wKlݛȟHD<bRS C%ZNDZu9 $D ƫxkffL@+,{['0n>̦;ϣU2Y3Ye< +P]D[4T+D UF< U;蛘ٿ35ipjO, ڥ_ if=Eʟe+]f8qdq[.G X \S2 }6\[L+Y3kf+ _Q} a1J.VEFhk8 ڭWE0Gdr6E~$D8[_dJ1' $3 U+r$g~S"7{vfv-2NY /2}3,+j?~bS`EmfUh N]R;4FސĢeY]UԠC%!D&(P75[$Y:72u3Oe-jX¡(QP˒l.'iOWT4af6[Qz6E;GZ_ODG 54zfqPfC=ej̬ຐBȔ>/7 xVuP zEy2) jxÊ3(@wk$9$k/EaTA!D| '09pe\s*3/+|BQGhWDשnŠviB'E'pY/LK_ 'dB?|O*c z4`"kɹៅȹol$">}L$c{Firh 2 XƏxؖB6x"鍯L}R"[{_ۺ_j|.|) ^z'"50?g&vee6B(DGV&B50(Ÿ&5b36/"0HEC& ×_YB r2 (@ CJ!yi`qiA%3p\P: J:!!&M.ٳve޿K22H.Ç'T`(pfZ/^@& ٜ|2tB?i z?;7  |>F:!DO|2"|1\|1̙#-P? f0*7!Q"9Ϭ&E2:tXoO{ @FB,l ݤ+"ңGdv'#22Yh%N& ͚edVƒWAV]5W, HK. 6[w+3;e4 U$Pcsy22Y.APڶ~ys!A2`$P_;VӊSU%%`r- F_I/8`8/ :wn‡J!NE-Z^ pAgF?hZ O> AuJy_?}w 3Q..}T:%p_ mU>PJ@nH!By9\s l)-dĬYҠLg)zg4Xk- 0rtTxhoJ]$IP޽B(+s*jrL$29%J>>f̐BeD1뤷s5t4 7ޘLRJjPғ,|l*sI$d=+`YL_Ě2-EI+2jZ,ju^P,|%\xjJJE`Ŀ_|[ ouցRp`HV e2@/`D]dNЧjk/(ĢJJ2I}-wgOpEjlu|t &5 4\$2ez&? 6P=`ys:Mq˧Pᅯ9Mk!*~+0 ڧ6~o(=wm$Dߔ5\H#2*RW74Ҍ|ĕS?`bM#ot =':LLko @ @| &i.0xxh9I=7*+gTwc_usd {Tm!w\ l'eJIta [Nq٣E>z(ƙB?^mZ/GO$f``fԩKͥgw"ɿ-:Y 9y2ݽyF$ֻŧt5 :4֫w߅M7S[LLeRC?kQ7w蠝DUxZÿ&&0vxXd,UW*%5~Yx? Ȱkf񈙽n6RO9G5:u8^2dI6Jݽ#p!8{`0rw3R}ʢ +f^5xWRd"LCoA^v"d2W[Ҟp㍰f٥pV-SMd{tRG+SDDtRV^fffk&h>:^45H }$np,'z] hf7͏hp!* G!Rx䟢z2@wp#qux8&(a^L<6mʁz\JL`k%EEy_Ij[ LVCҹ8UKiA4`k|OJJy>\iz;#jf?6PR5ؔ.v J2 v-/= fU|]]WzL(=xH߁h~(5I+w |X .kd{Ťr Kj_uO@:8FшHZpA:[~,Y3bB`2p׳9ʡXpkBQFsG̮x7&<-.VFj>^/aDR{f!ύ_/" HEYwkW/dbxD{;sw1u*|tB@,%6&$ 1tHr^zIZāV&ʀ7U˿p!:\U?l}a߿E t2{L܉ᘧ#x| jwߴ^ Jun 8X ۨe=/<")4EI$F-Zx$+:8 ܪjK2dF@#h+Sm'5&A\z G717%:تA,Dj0F2\Jr!򙈕ciA<r}I`N TNw_I2J$X%7ޏ0k[af6ZכƁYX6)&@I"&ޭNj#GЭK`bfF\YG$QJd֭'SbW2~#Շ! PiÀ* RW/8PƱz\#ž ]uM XIP3ba-wohWHK2V5sl?ЈmUAD"xhJd[nW"?dw/ ɑAR3=_V[I>67q^2D9DM:̦O%*P9K{` \?6M(=C~yw/Wb'dbB-@6A*͋YRSǗN:3&zh\ G)DIF.  A}e hn(hPbWuׅ/dीTL@=[$oUVt^| ) %3o24oҸQ:X C!TA\r%8%н;}t$]L ٟ( P򏇶m_ŏQL`fBt ET.<2bDdqױAs! g@xZqG azQc^v~^ T2`B$.]dDb r]TQy**h=DB f ! Iԉq˪J2"*D @/gUN_^IU#D8@8$O&HIp®!J*6(2Ay9 -[JdV5x) Pƽyo`f~:QvF41u%)"RM>OKD} 2!Bv3gUj;&zڧ^x 28`GJI!?rB5_:1&P9pϡ%Dz/JA(pBkję?3 H!= 'D DYAp h&0Yj1a Rek(BSkXVf '\2p(+{+46_On=ۙ& xjH8?Xt4&"}Sr2xO/)"kd5f%zkZnb ʮΕ"d^*Bz`lvuZq$X kHyI-L b\&pղ/T};V5E$@9BdY%0,`T0gj zG2,@WTDzN FK9`f,0-Q**bj҈x8U2 P9e^uցRf&{YBd\,uDx:u>}(%/D 3P=[wP-u3`=(#,i!il agU>Ple` /> IDATQl>N "/#,jjwئU{DMy2<]ݗSDQo?[:bp;Ag] 0BEqc8,ei!Br-AqKoEg7ʕ. "P8N2<MX![T&dyKEpf f.p4I!lvӋ72QT8;O:py7f6{^PK$h G`XSQHo-p ٺ5x*+GK![Rz%p{)l%ϹM6cU Dm5*) 6Q:wsΑ6\hd2G_! ee|X$H]W1>h~icrr :嗏lSBi&GϢU:+7TW5TVG@,, LɽèQЭjmaȐjYb},RvU:(JJ.pAƝwjI|7=*ݵNFK.JY\th>i' djUU\A[ο,u)Zƭp9 ={2u`euq aQ , %%rJE\}5(B(b'+-7Fvsl6D"TJꖻck7 08-5rĕWnI!Xw Ir. hY@^82 x/`q _xhE[D)/fԔ#!¸$Jq'!Ì k% @7Q(i@e-+9봦#52^:T>-1kP(k$%* ݏK4D{o84hyB d 4Xq VdU+ dCLTl1ZzI$Q$p9wp6]ZrjgFbw_ dX2`JR3#`YHZ R" y&4n,- @2`YݽBZ@L A)BeE151 jYg> ){a (ӁGBZ腚M%܁56(TPRj΋BdI {I2J(+B&ŭZ#1ɐ`nZB &&, ,FkDG8OI&cJQW>#sbBNLu wFr|I؝/EJ *D]XR?')/n2$}?3{X4(M%A=Q&1+D} @VFDal0)bm;I/~ۀeQh|nzHQ'A]lc<ݽ%! @dC"/VxB$ trwͼBȜ NVC XUF**H0-`y=fr(gɓH!d5 x5`M./=_^/& @ `Y+̢$L. dh(&*/JB!P@E'@l/4 @)havo !d @ 9 SN=KU^! Dj M \9Blk/H {'1RvTBL`/S2"Bw, .cgI +]'[ :jCoqJb) _ͻx_RŽ%AԍqQYW oǵT|Ab$ޞI @>#4M kjD9&]T.5x N$ӣVBӅL(Wu)-]cD,<K,|ieBք4vEuJ9 ܢG4GN>D'pd2Ck3 TRDS n }]N<$`}u$XrbH4 L} q5Ds3}`"p2[K !d> XVKw;"R8 d) /S%gM|@0 d̟TFu8C{.ŏ@W|%],Z!dj&,oFu.Tr]cNCED+5*%_,\d2jQdžm QS] lG2LWޒ0w9B` ]ġp 4|i2Be bGpBt,m֨,& Ngk1՛#%i,a>2㬀eA0)Pq=k.qqZ%c=-gkl!H5w_WglR߻Ar5WI ́]f p_ h[>kogˁ%q,l( ™2Ϯ%J+#sX/DghGA=ť7%ys=~pGor CR,IVUE"~~QFn0d$7I -,%) ٗ! a?}D s%sri]ل @ :,\Ya&P4G+-kǮl Mui{Amx]Ϝ(05py7gE†I:him3XU\ r b<ݪ 9Ƅ I!%Թh a⽆փW,"#4Չ)WQ=[d\~E!Dy$]87!(iffDf fo 쳰JɹS᠃m`?G%E&釀 ѿ,kTfY bWc[ZnPl w2|,± z--!bছCd^FرQ<,qy7frrwVu*wp1!<:*ع3ub;J, E=s\2x}=]f5+Yd_gY\plbv2,UF!Cdê)yŻѫ W?u*BCž \~*Ž;7S W[`^";^|=t88P8^)(;pdq̻E"̬*TRg*50~`Y\뮃WRQDńiX׾*eHUXfF-Gb}U1au,)~m*?,oPj8U5B_x( 40fs}f"7I*#Gl=Jrj$ !4p X^10ٳuDB䭓tMROK'(@ϦRC Yps"K pj2s @7`YK)xT/̤H(@ȃ= #}!D-ۍդ @V>`YO$^/vWՋ~c\d2ʉG o\p+yIGQG:K,2,Ѻ_<0hPҒﰇdVba'$$7@[E[Q! 2i'<ݳN zU4 `+d!G}hBz^%)+ pdNcbv"c_,pDVr" }\d~n)B4F; )dՁ˫ pB^EbU`K0h\()o P8(2M22)oD%`+ǐˉ/ri G9l+d` Xܪޡķp "Cݙ>] H&¤c!zMJ?8U2dT1pBx(1d v݋3C :!db$ @z531pCKI!fB/м@K_(> a`dH3@UDު==hJ.BqJ ;-dp}'`'fD5&⨨XN"`׫I=< zb Z,v{̬\Ԉ 4t \2a9={6͛O߿(%0~{;)H?uNs^<M ;0ZSNכ>ݏhs 8Ѥݯ('۹ˆm$$d)/aCz&)Q&Rhw+qXh9Tv)dfk'[Uk(þⓦH y"?ѴiOjA=*f @LJ)Oh7  OP, =zH,UW %;q? &ਣWw\k@FZSס^a h_|;.Ql{ VXAZ,Sƚ?P8k>0`{ѣkWp07eJk<;U f[|mskkWp~<OZ;&H9̆. HN48 }L,,4\}u(=' S(E%3F?q 39(lё%h0k w%ॗ"VU%-D3[4BEݗ]hR?.>2x-|_ :v":(ffcD7.f{ j|4dAL"~h3V_+'%DpڒXh)U+Z?>_t=J%X`hm̦DQ]x@:O A)?)#wيR" la0kGtRԋ*RWZ#@NM/DRkfeJc~L %:2Ư9p0ZzOй3<(5|0/ԷX4 pu~u`㍥C<,0j3(g--Dgyh5$]H:W@Q+/wkoJ/ &ځD,JZr:"]&6 +K72gv4')DrZ-wyMR3k4kVuE9d%!7ίK\_~-|sQkf69R(g'M%~-Us^6uH]&LƘY ^\|7^R$oˈN+>l<8,.:7@(A>O ɾ07U!O={)dds™gB(+[̾ho7)wTWBϞ{2th;!  my_(Q3> hܯ Yk`̓\//yddĉ52 09 KMj/ 0*@g3h_!22Jdp8∅@۸Ms_hͼk3PvL& -N:  &afSOѫYGtfVU m$L @6tSxiXoVUE|5ё5R:׀)DCY?o.PoL Z`mx=&ML3ߖӭvťh8U3_$ rc" L3%hnN22Jc3ЗZJZ4W3C0MD Hz*BË1_vk] W]TT,g'OPᥗ`H:D Pif~Nm(@D(cb`%A.fVafmljҒ! Py@w U8pߡNBI|7=kA Fd#Z*niƍV_g mf]۸;9kE<$MQV6}vE:LK;zY>h.;cf65K7p3ͬ 5QUo3p1PUvOf[&@ j$ QR^v耔jQI1ߏޫf6^۽)xhTdqfD|lb=/%drivD`3zhJ^W9 YQw?8!'8`գU5ѫեL@ JFU1lp-60ff݋^ݏ$uqwSf6ISw @ G S0:$$g7z5{EY2f7!z])Q OZ`ZHue_ \ mwuIzk]1i5MK:0KZom~sہ'fVG(<)5baA$]e@4뿱]əln![wK:@cf%޺!ڦzԕ#fv+o!Jd[W z↑[,bpwF)5z'-W?ըٴDUDL>&%ڕf3{[J,3hRt2HNmD; ,Q\~f#:}sez,7s:^R %c*ѡi_ԾUQw%H*/͍'ډo'j!+<6]`x%&DVA#ڄ|`2Eϥ b*&Ks%z$}33wW^#mfKB& V-,Mt+2uLNDL06B L6hS*K87)+!CdA{SϻL@,TRe<::%$UoDCf<4?Mڀh4V! j$VؔHIOqGJL@ܲTfD&(0.|sr˗SL^ !aTw":]NBpݪ(l4 ɸ&߅LT5+GՁf}/"AL@^Kxe[hV%b9a{x= 3W5?3_ffof&p4;YoJmTjVNZ5j?F{*5+{_"⛓Gr%]UT2yyy<QHN3*4Ӂ>Ϳ21PHD5,6X N#C!]mW) [ux;RS>piB0,YOyGAjGKww22@)?>Q#!'*`pod8fѥ70C@[ԩppU6fF>- @E a}EwN`("^Yd`-}*1F"xhqz!s{~eCl1ђd8j GI* ]<3G3sI $32sYfv9ʒT N/p8 d5R>DsGU jP X۟w<7$I$I*ǿgIENDB`photoqt-2.5/img/image/checkerboard.png000644 001750 001750 00000001334 14006707323 020373 0ustar00luspiluspi000000 000000 PNG  IHDRddpTiCCPICC profile(}=H@_SKE*qP,8jP! :\MGbYWWAqrtRtZxp܏wwQa5hm 1[ï YƜ$;]gsyxMA*uE^ywwgoirrk3oTcbKGDfffJm pHYs.#.#x?vtIME 9tEXtCommentCreated with GIMPWIDATxA 1EAڬ#" M] =y_YUub@=! D@" D@" D@" D@" D@" D}S>e" D@" D@" D@" D@" D@yeHrIENDB`photoqt-2.5/img/mainwindow/000755 001750 001750 00000000000 14165364137 016352 5ustar00luspiluspi000000 000000 photoqt-2.5/img/mainwindow/leftarrow.png000644 001750 001750 00000025122 14153224467 021065 0ustar00luspiluspi000000 000000 PNG  IHDRSM zTXtRaw profile type exifxڭiv:sNz8IUT}b2EcxEK)Y^'^v>ּsϥ1\_K?סq&&*P=0yNnCL' kY6Ւ/Xȁ?qU zSxN~,>ˀ΄O.9|Jp%NWŢ/xy澾n>z+{Hrzn|'ruY}{}*ZL@E=ry>LK6'Lϻ.D :n[8ԋ%d_꿨o}5P큫i;v“cwL {k*8g+^ ~2 }*K(ʚ"`5E8:0P8^9'"-kdKfsYpPtx>Mhn l )d|SCY1 c!"$K*-rRRl9hs.VBEJ*RKHSjZkk<1sƀֺ.{鵷A8dGugL32l-Bi%+ʪmBm㖝veݞ^ kxJ׸c t"3Mtx< h>s3[=Y!#E}6z lGs?oo=gug}嵩eh]Y@*͗J]WIP!ަf("G';= rv˫Ր ZVF)GQl' ^.H4U>N pN[XMw mTrTVoFGZzZfJcUTyL >5BUM`3Ι%Mq%EvFaܕǀT#HIQjX5*b.7sۢN3w3,{2'a]F|_HEŐyD0t=N/8=q1AB&;'@)ts/Dm w+yF [DB, ` (4[۬ X74́%Qh)}OA*]#F_C^F!sVq D(|"- VJ\Ƭ*-7M3A\K 6: la6Pe'|(@8s q3ohYyKe簐k?ݼ vtFV 'ϩ(0 5 s$#sUZ"Uq Ђd4P){KѰHY'OQS%Z!d+6g+4.24ˣ0 M[UF*Y[(#oHZd4fҾS;/l}etsY:ߣ?-UMmS~VDTQԤݷ~qQ\ٔ{=!imwb?sl1 ڜ/y菳r|;͍gnP8 ZV0"r&%qb;CR#2="ֈoQ}Nv}9p fYJU^PLU2WG0Sdj Z|@D#RTԆr  LGt,)2K8^BC5W=?ĐJʠ\֢.ts"[l,Iύ-(O}-W:(JvE`J;_jD&Q,R4n!;Y*'4yzn{iRj2a{ Xbv5:% -S&0q\nX;饫)hHKxiTF50 FU[BIޞhm_Eޟ9LQvQafUPO 7Μ1)_[L-9imn =yr9b4<1Fl^˼\]rʂxIW:CWݠ>z#eD)2jV !X-F0td~*>T>z4bf1vE(y=utʓqo7 zDH,Z|A>MJG ,D>Y C"*+Y%]Uomv-ġwOg%JDNV'*Nc`.MۉaApv?qh ?%6.3 >iCCPICC profilex};HAEOH"[QK !FHݍBv 6`WXkka+;;+E $ Ɓaw^޼i`9':y Sf"ij{| \-e&G ~TQ7"UfЉEDžZ*6WKxH;iْ8xCɛ:ܬew13D0ȳJ!9mQ\r,#2ĵ) ְЋ~ ~M ahxh܁¶}{^ʮ׎`S}pq]ь]܂EIf?3SnyԷ=^M%{ƿr~trgף^ iTXtXML:com.adobe.xmp tUbKGD pHYs+tIME 3cnIDATxOw00EZ J 4m=%\z@M ^*l{?msvw{mնJF.8̍*:3/m:_0y癇gjm6 cǎix>SӽRLDp.kV=D.{"X Ne166]N`,@N砠 U:/ v^φ`xxx{hh(he044#,,`A;gΜ?,V7nI ZI ,VCj&hWxxAJoܹs D+^~q088`!W_k޼yy6슊"X wFGG,V׮]6h%4 o,VN,V`|AnbÂh%aZw-\F!XY,ccc D+ټ{ѢE D+ɴ{o,Vެ˗KhZBLNN?>[>^S%hkk+]lV^ANgAoaJAҿҾ؛IRK D+ w}{ʕot:*]]]$o8p@իt: lZ{7Tiii/Y` X@h/\P|P,hϝ;WD{ܹ=֭{` =s̞u[Pz555{!ښEў>}`Y~iÆ  mUUK  ڪ!SN%X@h+++>裼d``D@ɛ6##CE$&%%^}= H+T۳qFlJ*//߽qƃ ܺ_ܑa)heffh/^N f£]f1 ?(?چ߭ZCF8GTbb!!!s%hf1..!!!1F@;wj`G;<<ZV#hRZmZ耙tV((<ڑd9=I9%$ش HpN#X@hRz`O?J ޸q#5,,` $X@hS̙SBң'X@hr:<<2,,,%::zVe"Qbcc˂RbbbPzBqyߒ%Kʄ)pG+~oe~ B={֗ZvMdV!}e'`0,Vƀ£B*#<%\@ 755DGG.hoQr PFGԶm\#rtt3Wحe ![^~=p B"׏?XT166G+>pYBW___Akk+2D+yyydV!|IhA[[[8BlڴpBz $Z!r| dG+nK, !Ć  B B]o2!Z!HMMurʹG+nNW`2ٸ !DBB;,,bqB˗ $D+K.uGDDZVdV!bccݑVJV!.\HLpv;2D+ ,pGEEl6dV! ;**pBxYp8![Λ7t. CB/t8 HB̟? )$V!] [,.J}`_>j"""s>L+//_z ^@Vs@Jc ZɨhJjtŧzbbb"D+3g܈j0 D+g.ZThhhnLL #܁ NG ZY Wh\@ ZY]d 7Jgo߾9995 BBB8BJo!i̪*<Yd߿|-g$^~e knnzULᶴ.Vp/]D Zٳ|E# ZݻR[[klmm%\Dr%c[[heQZZjijjbhem6KssqAB ZXZ[[ D+[Z\blmm%\,{9l6^|h%yfKggc Eqqn?J$??p8&&&x5heg%\drssW^%\L~ikww7heSOY{zzW\!\,x kOOd2.V6m.V&999ցcggIAvvupppA2ʲ.V"鶑Ϋ DZZmtthXD+FGGVpAXvm||pA2III\.f#\,mFN Z½y󦱫pAHJJndժU6ct8 iz^$\,l^p8~+l9{JbٲeI$\,.]jWTF6.V"qqq=.V=v?p8 D++WNgn#\@"bX'''S0m @N8iZ2\/4vvvOUD LcǎL&TKyd2y.SÛ;;;o2\￿%-0 9pp7{h=UlX)\ѣGi-03%Z`?~jqD ̠?7.3죏>*pP-Z_. 'lۆK|E8E|gEv%Z@>_ h*++-`_}?Kp.o~hI8qpx^/8ydI10ozֻ\IENDB`photoqt-2.5/img/mainwindow/rightarrow.png000644 001750 001750 00000025176 14153224513 021251 0ustar00luspiluspi000000 000000 PNG  IHDR!* zTXtRaw profile type exifxڵiv:s zASTuIhp_bRR[y/(f= BO퍡ǍH8x(00e[} /7l3gcϩ⽝O91DVb'?8 l} 1_: yO/ΌԦ**/GoJ8=B~?*sj#y}~wxUwkάbcQ/^{r usLDޝw# =א#h8~'EdUhK*5c#G\uָ 1KOgjsyEζ #"AN͗/k$ټl%qM~!A5~E:3Q*B pd#@KL2@Y6c!6M|kd<`F$r,J)?55rhSι[yXRɥZ G5kh[i#{鵷s`y18nYg}E*[v.'R餓O9PRMӤYVmuD?ޟZxDMH54 NŌKW  -3BJb.TE&-f;XĈ`:Ag}+nWqFY>?^Զк"vW9G iۅW{eG.j(4Zͥu2 VYeyԽl 2֤8CfPG79 gL?Njaީv5¬k8k,8:^GWx|F3N|ex<זGCwO)ڈQU1Xl.54RX甄/I6!) 5 EJ+m&1(GIoiS!3v(LQ7mՈmJJFdݻ]6T5L!UJ~ڐ[eS p.𓫶Ug&gr@q=\yG) m>$y`RS  *ҙ(sS!&e(?[.,;cа$?SlKnr2)$RsX=г˳C-+l3ؖK^F = B TJܯP33ҾDicuHgt0OJA <=bZMk f"Q@l/96ō# ƪINR򜄆6%Q%R}W^0iH"1҃\O 倬 *͵D]*T3vXW5A31;'0lAz@y_R34JhׁMDYk!+CeEѠ~L-s*͡|?#\FgsUhI$O:W-v1d:m?&kzExM8}_]e| u~a%ED ͕vK! >鳐&$ 80Lh)1lZ?a+)twM_~){?l VK 7{#2s }1My0]lEW)Rǀl,$ #)TĖrIq9"! 2p>Ң։zf> %#F!ZCPٯ$xX>췥Q }A{invYHtP(/2A n=zt0ff nw'X#A%[ "4G@C4P=4EgWVx$c/{>\"ߔ~FR e̖yݻ:PWߦk+;x{[:~s_MC\~ِ+֨GWptG_nt~:sٓ2 Ƣ7#JU跄z=_PlZM޲h_b75 MKO/ gjUiCCPICC profilex};HAEOH"[QK !FHݍBv 6`WXkka+;;+E $ Ɓaw^޼i`9':y Sf"ij{| \-e&G ~TQ7"UfЉEDžZ*6WKxH;iْ8xCɛ:ܬew13D0ȳJ!9mQ\r,#2ĵ) ְЋ~ ~M ahxh܁¶}{^ʮ׎`S}pq]ь]܂EIf?3SnyԷ=^M%{ƿr~trgף^iTXtXML:com.adobe.xmp b.bKGD pHYs+tIME  @IDATxPƳ NP#&ԙӦs0;^6b5GM*KKYr'ulN+?wec{8r{:X>eyϼYT _o %Z!hmm. KB=pD+/^~ׄ m__}D+}. K}ݻpYB&i m_9Db!\@h… m_v"\@hO?pY%\@h %Z!z?pY 7??pY 7//pY 777pY 7''pYBFovv6DKed/w}pYBݼy3D{+͛7eIUwbI%$V$[_?m۶xV$Z!hkks|'q\@hҥKev*D+/_.ݽ{w W$Z!z}Ϟ=Q\ @h&+?Y 40g̘1_x<ADhhs#G]e5{-$ ʕ+K)\@D UUp2 5]|p2k0h!mii!\,TU5.B&555.BAD Y)aaaƈ.Brdd@D &nddV__OD Y 7FFFjnp;|p}GD \.J$FDDgϪD H#ZMMJ${Ƙ!.BpjhI4FGGk'OT$ܨ(cllv1h*++U$ 7&&9h½5ݮ- I#G4&&&j*gLJJ~hI5jqرw}- QƍӊT$ 7>>8~x/T$܄crrrT[[pD|| 6,P^<%%%Sh*RePO)ϗ6\2ѣGݻwD H5ͦ- Io rѱhʷ.:7nXB$UUͿqR 7K(\wڵD HnXXXn{{2 7$<wI 3gB-++B\rd- A6-^{Z@;w<555, `GŋmoD 4أG.Zh[WWSQQK/~1D ,أG.\G=vXjJJ=hv{RϟoW'Z.[__SUU/ng8qt;h/^xK~hԩS8XR'N0=_{ 򖸦Wˤyž9sZy4w\>2͙3Gjllq\ٳg[9  ^rΞ=֟ˤ{\.WO?mf0aRz)@}m0^h;8h-p{^ +WNئ&c=ffb655w.^xW%Zb2enlssiĉֻ},D ---=---ɓ'[p؛n{٤Iv# [⛧O^CHLǏYPPw^A\_XXNAAAhA4jnZz?^P\r^{5/" u:iVs&ZHlYYYa}}}ʕ+C弉[^^nihhH[d(;B:W^UjϧǐnVTTXͯ(RM؊ ŋ322CuRhooW*++ Z[[-Z4K"؊ /WUU| '=v옥3#X]vM9~+}ܹzĉg3gaB`{{{ hwׯ_WN:U(0Ϛ5`6sL=-ӧ CBBҞx %Zٍ7aÆM6`;uT%Z}Kt: Cĉ h t:-aaaq,B:::i0?CK!#Fh-s,111 K=w\ALLLF||<7-lmmmȑ#3FED [WWW0jԨh'{:K\\-dv[bcc 1$mSb$El!Ah!C.k[[[Zll,-3gO5kV7+_-߰ڀΣ_>t%%%|hVy>OO;z-mgg(..v =Na۝֭#X@vvvC97l@ޣ훰6m"X@Mج,mgg(--%X@hoMXWvv6zKlBޣvmݺ`G%\999 =ھ Oޣeee>`G-]۶m#X@M؝;w,hoMXgAAz[9riX{p8V+z/ X@'OlϞ=`૆@2 IENDB`photoqt-2.5/img/mainwindow/fullscreen_off.png000644 001750 001750 00000014205 14057352753 022057 0ustar00luspiluspi000000 000000 PNG  IHDR\rfiCCPICC profile(}=H@_S";HqP] *U(BP+`rФ!Iqq\ ~,V\uup77'E)IExwqeYcf:1 Q1.YƬ$;]gsyxMNv |R?Iз \\4e ٔ])HS(3 z5qd pp ){{4rÂܒbKGD pHYs.#.#x?vtIME, IDATxOl\uƿ;3LR$J(NxQÀHJěA)P%E7E"Οmlŋ Lܸ]ŵܴ@Тk;QbYEJLqhqfʐ 7|?` K2Gsw9c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1cL Y'9F0 V%HFQ[^ f`GI!9O(gDQHN'#G@+gH%Ę&$DQdCW7k$%ʌEu]8ʿ:Ӿˁu Z b 6)r é.}|ɾQ?7bI1@kٺ8c(^߭jcSl7\2ߨ8t, N'iڢo݁|-8aY)I@}#Ȗgdۭ-|m !/Z(eg7 &۽;p=Rа5O!ZVZ@T9LjZsߏnQ1ˁ>HjuI:ɇxBNyHc waN7I^ZYR .m$k1Vc0%/)߿$"p<V; I9u~1d;Jh\s4sZsgJkB8`$*6\$9_ҧ[\#pdغI<=)ewp>Y! c8`?l)@IN<9OfG~BT!6* !IZsg2rQWWxd&zo?H8&o&ЮJ\TFJIȿcfmY&"BxLHwil68CF6JXʬ p&ثLƴ7gjU J D~Uy! Z,4d[E p 9]{&[P6[ xSJN2lV3u)nެRpgx q'x)dsrPhL%) -Icc"P0r;Em|Y͒l]TgrX$whzwcs3M} ? @w"Kĝ1`jy j 4ACI~ `,kʀ?a^TеX>˻HV$, Pu=8 1h;Xp0pWQV~0GfF[- [6(pI @?HOWOx'`H+->sl}]}`Ey|"J/Z0T6`G/(؋14!g؉x dP w @׼e[uHZneķG?\G[!y }-1 _E"9gX=$qzepoaHC؏U5ҧ% `.K\M 2v=[Ղ!Q$C|aH?3G_muE0h*ZuPk^k~oV~&ɶzl4 蝀3賨ZvVN 8T)1 ࣈOݫR`S.+6z*3/ش͹*]pM}C.gJ/C; _ vd {%YI.M*XG% %[d^a#?/]X$`jE^*y)a^NAn8ܪ$䜋[y rBLR !i $7S$WH^{%7c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1cL tj!f@J@rm+$Y#[`DQBd=0 `LA-?#VVc  > XDBdQV6LW3`(= !q~w`~^'Yq#x2EW|`%WCs$/ `E?B,ttUWRp;;ƪ,pz^$yU>qqV â^>OnE.JcCp`4k ̚.~Rr =aD]જh,;s'I"̊>$7TF e s.P?%eqlHZ-h5i n^h~8|R{TC};z,󪙋ƒ*ET&5$ʢS-pQ{*Uj̒|_2$ShP`Rk0zc }vjTm%-rzYJf )mPJpe}A}ʔee UF|Rd*3% .S,ɛڛ! îDalg" .U1<4۲ׇo: (QhHn_ߣ_Le "nBV$UPV<E k&xI>l(9>]d .k y.xUVe?Chj#aQV>%(`HVF|:4Bhx^[74srIs9,&>J')v49+W1}oCTz ( $\EQV j/w!{NBA6HOFO~ 2{'E1lV鼦;l4D Y9EH?E)δe$۹g4sJl؞ Xz\B'~6J_WJ0+K?o fdKc)) X`T# @_0%n?_O#>N,\`i `J5u?8 A\f Oi  slyUZ</RǑ]Jqz79kPGdo8n%1@HΪ+ 7qA1&~S |f˻(4ӠEmL6~\=?1'y!d5#c ^5#G,[En%?x@P! uNVk.|=0"۟pZ?i=yTJ-O<6k dȶB|vΞ\, "6w+ˬ%H< U0O"MoWa+e|;͒1/i.'ۆOVM :i[B7I9%_FnXϵJhƶk0 5n'e,;;ϐ<B>k$I~l1G$w;4.bVsw85ӚxF>r%$i^"9DrRjJ'V+|@c1Hsn2)~/<qINpmrk|_K}%}ck_L}S}q@1$N_$9nCHZ1D{$Klqqiߡ^v xND@~TkL WI>Fr6' EO"pV>`?i5l1*S)INU-~o:kovT&;'(*mEQ 5Yl">,s.rGͰc -DJS뷶S}7L'|VH8&He4։,ƪ,Ly`amVtz^4ɷƶ?z+`\k$/ !d΃F( !@> ]`_S^rƙmzfD`Y3E_ÔlMۀ9l m*e  4D0V{69}Z{??)Csdܫ"0+I%}޽{_j&6GKz{ffvefO썙2𞮇wfxg'w6fvcf5lwt33"uFƟGFƟ?p$3~"uf80cD,?hY1~"Pm?8ІaD;[;N P`DwOvTpDW8~"'0~"BU?X@`D5Ɵg ?!ߓ'D *;"u"e,"U,"E,"t,"3X;O@m"`?!XO;$|ÃNϒg*䣤^J+t9'^H?S!$.IF{OhI @OBE'!#"? ǟ0\G*oqKxǒ~O4x'?N7N7VYҍ$Mns=%O{?0TJ_ {6x'Y.Os8 "+ 8  +@8 EgrRH"3 ;~)`$r®ɳ =~)h$s.3 ?~)p$t¦f51~)x$uªCf53~HE˳jjR#8 g q̳jrRc8 3jvR8 cJg\ғᙡ0("1ՈA@!3"pP (Dv!0@`0D`g`#8"#㯆#; +0~7F`!؀,"+{D`0,D&0p Ef"w` "0\`! o0@#DB`!gt="N1>B*w6cB"3uҁ_ t>Jcgٜ&͖gapPy!pKM[P݆{9g)̚@s_0џ̲rpYCe5fg:`aVh"n֢Yf5`V,4PyYD l8Ь]gDB0yY#.dVg@pYEg6afr/]dppYUw*eU=4MVxIIإ63>ҿJN7ܗHǟ+n~2!={'7IKT8f IMv_k~'gIKzP3UnWiH{>'D @'G @@'F `@'E 2+3{jfo^uߓ~xOj7vSHn{j16k/M=&ZG_`^Yt11;"EGaq"/S0h{v |R?Iз \\4e ٔ])HS(3 z5qd pp ){{4rÂܒbKGD pHYs.#.#x?vtIME,j*^IDATx]ՙ3<Dp}7h7?RV{vBڄ$v* ! M#ˮ^CpH6@BxRˌM9}9u 0c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1&g6(mZ$WHZFrvbF !X(B^0`UNBhdRM `^#"H?B-{,Xpu..B#y5 +N !8rN;H>cF-'?B `J?p}v;:YPVI  MyCⰤh=/[џQ!8z#تv}'CpfrGg#*dW*-+rJG3O8DΊ>$7F \"yI@߉kY+u~砄>}~3*HH۲o`A8E-$fޝ2$=hpE2.)՘%yU2$[AY,ZVT*AT qvL w*C!.XѷՖ -DzrRUl>Iw%5;W)7eG kr9^Ea&J?ϮT?)Z !\%Ƙ64kE*Hy Em8Qwe$rM @B2]ޭ?ME B\,CJ@>$ T)jôt7hyjv̪9:"/Vi>yEO3Wq.ŜjO7 no8/~BX@̓-,`xK9.xes!X ~|*y.=-q$?PѬ2+KEk-s! WFNniO<LEQTT^ tC50CÈa*U`>0AlŔ 0x >X y%J ~vDa0Dv}]X`6.mT~@S6ll&x2s~0K`d;cٌo!Y ?-U~EEg?"V_,"?, { 2iU_0>{+e3 9Z_^ЀbIg 1:41IN B,K5]]c e -!G, bdǜ|$? F @AXF|֠u<@ϚrG7e @qHw΃8 @Qnb8y @AHw  F*W?؞[[B>lR"_{| qx jqK9V,EiigGI jx$(h(Z]Ɩx謞%HVGw v=lMYN,.坎e=.i[{Nl~"rǐކ)¶l^(S]AکnCW0du"y>.WE7jk_" +^p36cw̒6C$>GI>K쨓c>G0ڒu=vÔr#.͢EQ y?1E1$If Sb?1^kL׹$jl|d{S/ldh a* ^Lu)9u'm=fP4pQ2IV]?~&5׸^Sq؞R\KkI^vZ xan"o5Ys$[Vx`]מR\ +ߏz4}$0>FSW7xSt lcžR\2Ŏj&`%gΟ}6]M AEQIof[/ is}RHHEo<E |oq>U0*[Ԥ"'d aVa6d ]0Z]gIc;&e&:&@̆29V1߅D Alֿ%'Z,l[ OnmՌS+TJ!!9ZBxdf|q!{[V&HN C; wWH>Ooq>quYG3]̚'-/ j"xB6q(4?Ims$MfH3IƠT\@"/l 9ɬS 3Xc% ɋ287r xwz+ -lA GH^IU Lm.>@;ʹ0Q 96&)$ n%lZI?|;[O!JD` j4kg׸HW|ds k: ?݇A6PWLo 쿸l6{HJDt`3Q/}lCzwEEXhke4M s?1ŏau NTaS")_\Z'3 {"< RemU0Ʋ4#nZ)lC2Ot7!vQ:>&k I{p~6pP0&4wA2 4s6*ZZ$6|!#1Y+^ zUN= @"Y)1"OUF};AFv !78pPX!k^CYdOT_SNVJX6/$UfWy!(*bsJi@/|o@"T䁝 @8 I*b/$&[ZO@ꈫO'7'2`w^z0] E*[f(% _Q_"@o^`:,8 U^B\~οz ) ʁ2Z`}Yr~ݥo^P$K6GwP(~-w"ݫfqL0"~H?wfF-N K8>̘ <#ˌ!>,ēhk‡|}F͟9~_WBWo*!n x < [[AFN&*,rV*r ɧ,x?G?ٯMվNlmN29}~#C}9j)w{n_ 8Gy`!vKIytVfJ\jv$! 2|0P$lV1/]v)c%wqa2fc$d;,COsfo8XPڽ?Ǿ"+R`CK'r|} _7()4cjW<8`hBG! !$ !Tj /^EC9j볊 .MJv ފMTP>R0\ }U#}]]|WU]u a@Lނ)GߋxoBBp'W%/sINSH)[jZ/?Ɂw[pPlO^:*y^ pC$'`Q%sZ*_Nr2gLBcғjUg8(;jӏɆPViÀ}Nuu Jųx )&C»QB$!q'ܩ4⠢ETOrTŤVM7d%$iŠ{c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1Ƙ>w:[IENDB`photoqt-2.5/img/mainwindow/menu.png000644 001750 001750 00000024723 14057352753 020035 0ustar00luspiluspi000000 000000 PNG  IHDRxzTXtRaw profile type exifxW[#' gY<';sۮd=NL.+T9x\j)2 Ozaχ&,}N䟆Jxg1Q'r8ZP> t(|ʦ[cܨ[C?<ģg d`#<gqwrOPgFP$|c0Ӎ>Sγ6ܜc] !MǦέl#V\6x#ƺfyWFL ԩФF K jPU=M*'qa8ׅf(v όS N 1 qt\?ȹ;s -nOPkӼ u WPAߤSUPrDsPjY;2^deqޖ!벂=7+Bp/rgqawCO=D8 w!^ּ(5/e͋{Q)L\9tnd#wDVUD#*>Pϓ1C>Muwg S飔JECQ$?b_gts}F6Ȇu[ŽӘ3wA땍vN*|O}U׬?Bc>+҉kev *<3iCCPICC profilex}=H@_[KTPCdATQP Vh/hbHR\ׂUg]\AIEJ_Rhq?{ܽS͞1@,#N ŠzEqÀL}V3_.ɳ9@ ѨbKGD pHYs.#.#x?vtIME %IDATx}dywμ}ٻq4 $(EEUڴqqy "ZRQiDN E*A#Kdn*b"$S jk9fΜ9㰎:3s?ie3{sfN,oNEhmpggrjYFr̙3s7"fQ݈(䦔l]b}}o>ID|<4rJuܹ`Nkk"⎺_tGDk*spm];qDh4?4.'4|%4M,x<`0 /N|O,_]{ 4iѺ?Qͽ{sҶ*]4E7RJ_J)-䭁 UU?:KzEp uU]ovj,nDv |B܅0MӬmnn"b˾`ElEąͻY@ym'q[J!!!B<vY'4Nu]LrηFħ#`xwJ7V~0_ioWw0}m"5BDs?< @x:Ӽy#WoPUE-iom~UY @Ϯ,v;X h4v(J ϮmoO& ÕE((-<_,Ek9wΛcA^< ,u7O5`4WS&?>F)krj;7TIm;]wTL1wsXWNfq}Ji)'9:=tffRJ?]u#N{r?X:۫GWwwwgv}f=郀 '  ^:nx>RDCGдήGz9筈x,"^ADܐR.અ|E=|e;gj`:¸+"&j kwz? @iqu4wqSa۶ZyYm~`p2 ""|!r¼滸|sD|>"J 1.~qIi.M{ܤyp2l-io_v<vEQ'GXpEQgX@DDQHDdUU}(ҋm9t+9Eą8opDܖR:π?q mGDc_i;pxxSdßZ[۶okWʲ|_7EEQvCE?9nD)"#gox("SJ }朻ظ%tGD pW9{_/]0o9ض_/rkLUiaQRvD|eQ_pht?ƫ6Ld۶_8rLr>~{mmq; z}\FR*mc*ܾҲ/owΜ=k~U Km<?t>WesWsUI?rv?W:("m 41닝Ndɜn 32ӧ7OG۶}gQ5ctжEQLj,x≲͍Esq~`mݽ{^wu"^:mX@],A4kqgQtOyDUn\__pDl.Ís>Gĺ ُSJ!xqA`Gąx @DL&m?ޱ(f׋+nX 80zq>VW 䈸XU~B]q?]6m1&Em?vyxOηFħɟfN)Ɖm{K<IՏso=dR˲xpҵm{9[:roe'{h0mE#9yNr7G6w. ܍;5x~D9핫"M1ɹ Ϫ;)&`^i4M̙ EĚ :RJåD?\ip[]]ׯwfz`6߈uks\_i)'{:t=tff676o G՟ )m fCg.~uY!pf"GĦ2FSJK5BE4?taSUu說zl8i.9sf>pt^3gFK%izCgf/f,#b]-7mNY-I۶_SGvm~,1)*%\gxi@D#bpM9S3M>š}d0|u@eq +~?q<sފGĖsF+SJåDDLr{nSXMTUѪ10 6c/\*? `i}1xZI`}ߊ,z㏈#_>+9/m, "z j揊77 O9<&mnlܒsɢ(^(A栉q۶>^N."v_emwu?~`]Wc^ネ'׊OMT~kZ_2lm6 %34gl `yUXΝGDj&*/߫ݯ},yu/{Y#ޟXit:b^Dtl[^uDT#eYݽK77N)oݜRJ7Fqj`ު8{"⡈x04^B)Eě"k@&`UUrΟ ;`4v:*L3 ܶI]`p( |sD7i,[ߌRJkkkw"b`D?zXX34">XkӞi3x+qD/=tQxzw-B8  c{m[j-".L{əTtQGʲjm_uˁsFn),ΧFܧs)_q~ۏy#qZ;Oz핛v;οʲw<msL_SgxID}^/`2tswj9;뺞`.`4~4tsK)8ް2`c}oKؘ&z)("^аitʽňPO&9oAfR=t: 3s^b7uН:^ G6K:jCgoM^~ptm۞ַٳz3UUeEQQF8i.7M~?g6^v)</JY,gv^8p  m4Ci+]0 U%Ѡߜ .DD1:0L$O{,uUcፀpMtf,L'EQLrΕ:.s̴G8>pRJ/`ǘ<k2نY EĖ F )LQkY7ݽ{#b_MyO{%Tu]sתjy+kQΟ9}zFĆ3ke&SQ_xi|d^Ks^VD|=|#6WyNbO"g"".uz@D]]qq,v@*='#/{>xǁvvw?~kgw#mp$|D\ d9RJ>B}'p;շ!S!]M>lo}]#&u)otlV@_槻ޢ|hg&ݝNiv'u^oHX3unS?D`L"u~њBNsFě" "^Ħe8Oin//[,ݺ?tâ7 O.Ν;wDč`1DCqu],ҲswRקڶ^~mӹ֔&n=u]_t:(v;pRӁ˗;gϜtpp0LΫNS^wemmmtՅg\Ξ!`VҰVyIENDB`photoqt-2.5/img/streaming/000755 001750 001750 00000000000 14165364167 016172 5ustar00luspiluspi000000 000000 photoqt-2.5/img/streaming/refresh.png000644 001750 001750 00000014040 14145550064 020324 0ustar00luspiluspi000000 000000 PNG  IHDR\rfiCCPICC profile(}=H@_S+8dNDE EjVL.& IZpc⬫ ~9)HK -b<8ǻ{wP/346SɮA (3˘$|=|,s^5g1 2ô77m>qex̤ ?r]segFtj8B,XicV45)⨪/dF]QscigJo+u`ZK}uKS`ɐMٕ4|x?o@[s@Jh}ۿgrzMbKGD pHYs  tIME 0^(IDATxy]UW"!sd0$ `KQ ʠ(@"J/DFZ$I h9 T*!jxݻ{!cU*VTg{!a~OJE!!+1Sw:$Iҕ$,wIxY1!e{=cL@/ޱ+zBԿ콡yx'*!R4 ,:V[}")aL@ f:0[& pA0S& a3 wV(d"L* @k}B 5[}WB 6 2) 2Hd"PvL`wB 6) @.ٚTB 5B!>MM-w})26m׿d"4J#GtwpL@ 6U 7&`Zv@ {իܵE^΄2 L"ˀC[# {}# d0\T744lfIlWW3R& I;^?p0B<4Y2yݏL0[wJ eٚ2UEOf޷7Hd%%2@>Zz ML@P`^~!G>$N[lgg&(Z%K.vaIF<^/`ϚwJ& we8|E3'E{>>b? 5\dl3 E٪y| jaPGQ'$9 l\=Kel FHnߖ lF Z$s%U纻[S~G&IU@"ۼ0okaPS~ O !&eП+Y \hf5@p0X\3T[2(ϳͬ]kȘbã /T•Je^PW#?x 8V. J4(nǪfVP\Az/͏׀ 4KPLKz'Ir7|gO}_X'7jZↆ CP5݀$~jkkʕ+/fbvaÆ] Wudžjzc=vŘ1c?\@Gf.XWAݣPt mufյb-gW(@GGw/֡U` \`_uXWc$OKE%~nQcfsU*+Z@Ӂ~?S(zFHb-ef+aLW `p ~`/ua,@*J`/xHU>XQKP%~fBPuAh3PW|V^Gf*ZSTzD0 E@ǗJ%3&hDz ]@wRٷKS3/TXd6x~Kz @|U}u2ap@V;\.Hq/`ʔ)El/j^J#V|tUQnHE u? 쐋 {ͬZf>KO`r4||<$'[[[5 ,~[\qhlT.0-rXTtc4UE!Qx-K.=\3 xqfMI&I0 8$~I%KoN?~į uD[fvq~yf `]f~ M8EWh"_;=Gl$ `=jZh |(Zl,)gTq+W^bf5_m->XT*N>|xW+#6H9{9"L `s{.lYf)z;C|$ ̟K{c JE_-xI|=p/ >Nm~&k F<+IK *~2>}WwUD_|B[}W[ ^ʦEfСC-%I;<޿(gYT)`xQ$ɒ9kU%~Ue# l/_|yeIcKrwSN xK_Пq~Cȷ@?>+R';;;sZVݽg$ϔe7A9s,/1!u7wŋ=޹$IRV/6jǀ lpy5|httww &Tq m{<ﲘ?m+ :ӸG.w'Wr9ݽNst nf+rl>>7eyl ȅL3!*Wi4pKAy׹>f`+ } `r4!adO[EZp`Aw|ggg.ߚ2n/J R>{S0#) "C!3۾QS-! Vd>Q5;M C8E 52dRwtuu+p\z80$;+ph'Ynzc(puH~8pGwu# d` c}RB1oww<@Y<XI7pKM koHO '|ZИ. dm14nrZЋ 1njy0pGֶШ7yI0{]O$@SSl`@rq6ɓ'GQ4+Ф!+W}P}ɓ'_ ؎pr[zCzHHc =fXr+@gSTBU}Q{!>ݿ-9w?MMM/ز*%6z6pcSuZz5xܟ}z\wE%[HShT^m\`>U)Md`?`df+0d4d# ʭMoIE?}f~w{`0t~Rh{,y;n 3r_ b`9f 0([QdMUު9^{ufE̕c"Ǖ%"2 QrTY+DΈK(q?|9cVǷۇ;0$I"g,.+˱ `+ + zVAߝtJA yiʕ2|f$pz,(8TT.WuUM~\ۀCwT꒺~̺:;;t)V|:3,7+%֤Z^`ގBlqTj&I{ǎBj;(Zbijfl|مO1\RȦۑCT Ǜj@~M`p/0Q*wٳEjTN|:c_ tjM43ѶaԀ3]El\! ݯ%=HT >(ZX$I8}\\}f3+Ÿ$d3|/fV+8b3ݔע<74sjzZ-6CUNATkUG. V F[Bipp QGL~:Cl<Bly5Tk2$Ik&١ _8rG%X5n Zp->F4BO+#ށB{}7q|į `C@p)c\if_0" `C@8tq5E0r/^|į #Ɓzl-V4T ݯsD;UVGWg-[4jԨS(:0V י[/;'\s4';)"%lׁ25]KÁ"Mq|kT:OZkAҗRDOGtuu+VJrfccVV}\._[[zdmH < +Ia/Js$466~tPb-?pr͢ElܸqS vzE'> p p=pqj04p 0-n$%Rz _P# Ezg@0+n1b DPD#hMr|0.~ f'IjE7VM,9Y?EV:ۊ2BOhl<;Nn;, ߋ=lG1lǮ˚wL+eR}L'$-jbaIT1z~Yh:BX3++ U.HVNXs3W5\%fo tqHmvfNq!u|5Zk5,aTT;2l:7G.e$aj+~RLiC޶8 (2æIoZt|M 2\98 ~b~KS.f^\ TVn)ȣC{ήP ^H#1JI}+wm{Fz5"Q垔%yfqMx(A+P*+}2! $aVb&RbRbX&V'fwĩY6b.S [;|Ha@%}X OqCCvCdܐv2>ct츰^aü&qvflc[j,e%Zi0Ƹ)MAa9U&5Rj:k3 U)Z<Jܘu>.frBrBNj]kحŷHxy _p0KjRxs[4uTsU ^d @}P;}L(MSdFbIL6<\"2AB' $A鷯 <;-= D$KgkS&52?p^)w/W1룹s fj:H@撎f`([wrtW>%J j(in8Pr;U5VK,EIYt*qqPZZT O1)r+b~JC H-&Q(6QO1ΰ0Os;3ujmJZW8Aq1%x}CuNhXMݱY0}kRR#wu:۾%tAuy\czͧ j&ƭr'8u@vE}@$|?=<4GLaA%gЊy`lA_'U#rw@w#ح}@@wYiCCPICC profilex}=H@_SUA+8dNDE EjVL.& IZpc⬫ ~9)HK -b=8ǻ{wP-2j46JWt_f1'Iq_.³Zst>xMAv Tf>I4л \\74e ٔ]OSf34 tyq$ pp({Ż;{LryD iTXtXML:com.adobe.xmp ϼHbKGD pHYs  tIME 4 \mIDAThA  y L,4ap[2M.(ǗuM;|@EGXBؓi!3tGqUp`-$ KQ̰ZMBsa[&A$@@蛮i\ Svo8$ S7c3"Wl4~ZU3crcu>"K;v٬DQ |FCIENDB`photoqt-2.5/img/other/000755 001750 001750 00000000000 14165364147 015320 5ustar00luspiluspi000000 000000 photoqt-2.5/img/other/logo.png000644 001750 001750 00000115543 14006707323 016766 0ustar00luspiluspi000000 000000 PNG  IHDRdX!zTXtRaw profile type exifxڭirɎ)/lj`?G)RRTef,T9Wk&Rs/|j~w6_{}~,Rgxu~wkvۃ~qҏ7z>>>^f3]^ 5=_3ʭK)-%7~~.MLҳ/vgN~,},_uw{Å[Li{ Z6أ/ɲ^nrj QA'OշK ѻOk`sV=gߋM1Zo\8[W~5v:ID hc[9do_ĬzbxԗqǗ O|%;t_+aN~e>|s3i3k{żWmÝƖ!u.“MNފ7\ppSbK )7LTZޏXhW8,25 R}tǧqjcokOOqRz{7hsq+q\v íL=>m]-[!X5ZN"cfN6sGd~1?3ϸVˌ\+rP}(-rJ#^pC9!#|6K'V>?"]*Gpumb>ΘP[wjͽܘP ^1p,glۥŶc[ ݈ac7hٹqa=r|f;&q-;^Gܚd5[ fHZHLr gr3vejiʰahM!ds:Lo0ȸvDL6!4yB!5p`8] cB[ꑸEc@]=6.Oȴw] VmtV zf$lW9-VI a- n$ &cq{m@in/+|w{ |%s]p %=c4LYfI>Di2k"P);(դvDI'tXC$ḥ ȎIשmh__$UC)  ViZG sÜd6Ww kf Gˆ OЕU)c Pmx$@ht3XpZR[XMͰx3O,9 pDI=bcS2ate <.0#ْ2!,:08%tB svf-RbK3q ;B0:A11|@~ķ%kj[tkVIƍ`BH!g*BJI|DžI|w96iObО<;/vt4RYxs-\hePU|qƎ;v vB a<0%4lQ"*^كVׅzSc;!vǼdޖ&.=hV`| p`y]M1E9صP|8 cs0Ieہ@0">6%y9I6ˬ.YYz.Dlճr\V X0Yp87nK*`OQ.ݕey`>Z 4'T$#)z0Z fP~d6diu qd BM&F,k81bypeÄDL81ৰ{fni&%v[] ąמ'ֈ! ~v9m!,f2l!U80oА# #2cob<⡇5fţ v0|CG{}MDȯGV20Y)յP.-tIe;_5b& ٘$%1@x OݾCH5bc;`Wr3vOϲ;00 dh̩>KA@]HvX ]64Ew$X {y.he}A`‚ɵW&>3Uݡ9eGU)5{]pL28~{SS )`J\Zr;;hE3<\am'c`$7Dg+ɡ` 9TAù‹eKt`lr&aYh.ѣ'iviiֈbzu(!@EP[oLJ9.r Iyc\(Y!u`ruRV (#iʤw+IPCdT#HY# ]T]#V΂at:v*P{yg j۫N0+#F %eq$Ҟ#iT c\rF$dO%[kb>Z6  C@ob(|1 v|3c  qG2 >0*EPMdz:99a K7n!J\@J;!;7dJA8@cM*:S-x{7gJk^yn5\9ldڌDpC.Slf=nC LW=JE@^-KEo,P*w# ͤ ?hC+)ɬ_ K xf$P"Hf` Vҩ@x  ׽4E" gtw^ur]%U~] 2 7>[vFWlzO.®&gq'0I,kMfɻ< Ə1} ZiHl=툲'A$W0ce9ZU\Bsܠ6r@D0 J%7"gZ K|W)3bc"!ֶb.6* limN,]ʟG8RZObJA 3;V D3g a/Ĉp;ꐠpl7뀩vb|tzIHDBNqo"2Z%Y CT*W}**"lp| Ob['GD0jS+zX2`9r)R5+1uHÕIf%MV[PWzY*ZP UAGe0ec2:y=B2TҖ0$ZD.x q%#kC6싉 rTG; (pوmIVE[=Unj_7JPq܋ecY p)Kj=[œ@ڊM&T8x)[OJXc'ˁq[EJhҷSc"U칼0 ?2۪Xқk^̴&Ғ}p c^$3o&1 ~@"@* `t8i@*F%ɠ/FnP7~7Qɨԓ+*Gz0n i'ݼ|^5{Z1࿓4jD @U2󷀭A(IC zPaƪ`QUO *$ZvL{o\Q†~YOYwd LD*"@{FA#J{JWJ;G#w3bD%?9̾wߎoGj`漨(* H:oJw] }$, bQE8@UBW/Vmc:5xً]U-|6y .:Z(тeGva`'aJ@y,-j'}n2`0PSŽ!鄌l >B'S3 _ j騰zq-2(Ϫ£oH1@ diprl-׀IЃ]իmw=P 9%ԂcSH)[{AI:`t65GU F k6$' N$Iތ| zOW0!Tpd@S.5vfm*|B+;H31{^MIzW[QmT#1WTжvOyX֋U&-y'Aȋyb΍jaW8AC{x 1VIHMbȣcT5$>G0~Ω TE*0 zu6^ ڧn3t@PԟxUp[E0$aX!<']-//}G[}}X8{NS6N3|J_ȁ_޼szA1[`A |8G>D2!.hl貰ӎ.* +!eS-PيSMX| QMt@ԙd̍G+H1섂܈$ħ]KZM;#:GWQĸF tXYZųCQ/Vj b{~d;[2ھboC+T:kfF=y͛lcCRv͗$!O! )cE:%`Vժr5t :Adu,]d:Z~cj[]X^¼YٱSեԈ6HWӉt"{G([09 2JQ%Q{XNrjbWϏLb=V? `{+mլ-*Rz(\gy{$P8#[.ÛDZ,L{l͒1'aP_%vX o::aujT~HV< ِ)FEtn3UYP=[Knc+IRҾ.NԵVTqR8=?Bet\Ak-z<*$L($ X4z@9 D{~C;:B>wTBEP1*pFH\Rղ.M(uގeZR֚+!N2dc4j K5tKtO#zAUj1bd}J(Gb@a2rI0uܟn slX.32T#cƍD)xXPQ6$hV]4eRefA2;rP`3H۫}ڈ7j=du#U*ODajDXý~KjMhQ u7Qd0SmD 'r?CF7z|~__&bb'z+02?p:w(G@B eI`ڦ{:DF0`JgQO5,EmS7]dۂsDdbQ"9R@8nNǎ/:y[Y6IFm]GwUUU ԪFE5YKǻ*-~o4Atgެz4O574/LǼ OM#r cKu5zQk1kHf2`!5W BR1:2f'")u.q"}l:0K}ZJA6^v8u.EkӪ'ryӘ2$}Eh 袟!BJ`-+ 9XϒH@afМI}J&Dޏ2>n5Y s/f}P ԸZx@պRe ]қ2Gf'Z R:yMе6թ9 ?:|-Vy #CidumQl: \lή t s ֎jrvxĜ#ILLm1ԤC'J)e`>"8l9D P ?cy0$pXxzliM AGzFDjK-J|k`QcI*V0U8?o_n.k}q(}.9G}$K *]KpH]$*{j Ǣ,RW) AeR$waO-D=M6ht;ᣈ65c!zLN}$ZU0A}#lU/w.UjjE1cY&{ שMqV>lwݽ%-re:7k!Jok~|2i`}E$~?4gg%y:y&Z`$`ŷ JBvW>fSyNI=\oͳhD+B> cr ({p1ίc o#Cjܢ]7|t/} x OU5}F]n`,x)zs##zqU=#r1yy1#}Qu󶬚.)^)FqUjon??o>Nmvo߹MtNS_e3L-ԧ1BFeY AoW>r)A!>V%etBx{yeon~9|9|~0yۉ>Hh8󩵩B;uoDamrJG!KSSqgW[3͟:?ХMMRĤPc 6.dzTXtRaw profile type iptcx=A@'@K\}Ά̓"M9;d)*PO,l;A}FHz$3vA=|UGWuiCCPICC profilex}=H@ߦJE[ ␡:Yq*BZu04$).kŪ "%~Zxpw}wШ046ɄͭW!YƜ$;]g9"jb@@$eioOo}(+*9I$~ό!/K!W Bwo䄗N/1vfqy+6Om-vomM.w'C6eW  ) k^Z8}2ԫ pp){=}տ@rsBx[iTXtXML:com.adobe.xmp ҤbKGD pHYs.#.#x?vtIME  aV8tEXtCommentCreated with GIMPW IDATxwxTU?w&ɤB "- )*RD X˺`e]Wu .JQ, $$d{'{dByIn9=yСC:tСC:tСC:tСC:tСC:tСC:tСC:tСC:tСC:tСC:tСC:tСC:tСC:tѤtСb+|"P  :)=GD)3_$.z 0j|8TR]Xy s^"@!pvr &`p+ J9{OՀEBq:Wp}g"`? STtnB#|Dhe>QG\ |!ze2.v/@B  l*w:m'CGK Tf2#vSDO auv*bkR-k2n<$S-twY@ڢ eW$$^!WxXHw4pMm'0`{%/ M `9}4YYY9Z_]v[VVƻ_|aV<'(#V0!E f#=# BZZ 0tZjdBK.3Z- ra~'vIvv6l6mb{Li.B$btޝ޽{7Eb 8z(d|嗜={) {tM3ŬXBg/w>jZy"<ڵkǨQk޽; xy)gaU&>>xL~~>l۶kײaM ^B:{KSDڗi.# y(5jKNNl"z"*++Ǐk֬{1SSSŝ;wjDž ć~XFrM1: G z)qÆ 3gDqqǎ9sTZOۼ\o=S֬bAA7߈CF.@|&Z5H|-j%:ToBb/^n*N8Q T;yH&hC@D1a5 h$22#FЮ];^u>s tV{eg&RSS aǎ-@$j޶m[ƎԩSIJJhlDA gϞ̝; >C233"L$ )]V΋/r1{H!gE/+` --3gҺukΝ봳RaԩtMzwyԵ4GDCGL:[nPw}o9a\vm.{7{]q!bbbRRWY]-7/f$~O2VO%-y RQy'Y@FeZTd$vR@_YըoJ RܯRDa:_ Hr=ڷoܹs2d*&D;+P]]͚5k<Bӟc> իwq3fh.M1tTgplC*4vtdh5|=.HBc?#j+ipQR*a+fEP;)R JL+r"[a!RJJ >l`cǎ̚5J6nܨT6RGk椣ڦ.@쨪ƍ?͹+H":y_(Ndq#I RZk@>Y+QCM}X G*p/R7̎ !BnXYpS#n6S(A0Rږ(gĈ:/brf3(兟NT^^^ddd=Z!Oɕu*W̙3sxyyK`` ~~~@ܢ [{'"d"RV6򲃻H.#ٻjwIxF_"e0ɤv񠱈AJKhq. Ee,t%k|LQue0mUSSCNN{SZZJeeeߟpRRRꪫHNNϱ< >ݻw)\ o$Rv+Gn:~7^^^ЩS' @=PS]~~~;)HlRG0@#aH A(-399# ǁ{Β|e˖arssͥeDVꫯnGjtpuV֭[\@RN"KweyyyNK/2h qҥs4@Ǐԑ论ʻL?x<9Yyqh*9ߋժrƌVBc(ӃY.,h)yל9sJHdggדO>)fffSSS#._a?bAAooݺU8ponD Դkan6PTTaaatt'#]`>}/9@tȚӧH A6t]ܦ6bƍA]f~GfΜc=oP^}UNʷ~ŋBd  knslNuh`08?iѩsUmuO,@U+mU+++5k-rlٲ3fgi fرȔz//*ϟπHKSWۛ(qkF#IIINtt4񄄄`0(++#//SNq9 ֲ!׼K|f@U0'88PZjEDD@uuum.^ŋ)(( ''9N֭[ӺukBCC &""u_YYɅ jk|I!Hghfs(Ф}f~'{9vtz:t1vXF:0qDfϞݜR/+UZovv66lP-@BCCqݻ7[nӦM/;$sQvͯ_|^M,Xzh5\CZZ۷'!!(uEJ.^ș3g8v&++M6ťZKdbRH3FMΝIKK#--6mVϓKVVYYY۷+WRZe$Kx{<%44!CЦMMcrafΜ]Fׂ&MDtt4CU1""}5#-vm5pyvEyyj׽ c=ƈ#СaaavM~~~$&&Ȁ8ucǎ?O>Qz$w0oHnpu1n8uFbb" Ktt4;w|ٶm-b׮]966g}pjjjsϘ1c4hP {ռNLj#ر#qqq` 00@ի%%%>}I&~zΝE<ihCSgoyfl Gzzjbn֭Mr3rK(|x"'NW^ѣ6*$ uwOVݦ={#FpVFF矋Ω?.bdd/ol=冢+==]|7#G.ϰgq֬YbxxЮ];qݢbkjj.оԈÆ k1//Or:mfXPP w)zyy9uFGKJJ4y8}GbXX1##CIU[R#3)E+**4ҭ5kwʷ:yWٱc=GR+EHnyv튷Kí:uDJJ g޼ylڴM[?Ѷ5G5&MDll桗 8tzł v̀PPQk5f$W~&CmP7n'::Q3рg[s:\.@!\!#yZlZ2dy2^x}: @@@cƌAEf̘AvvD!%%ɓ'3i$yYvC%!!>^Af3|p9m0}̟?_Mr M[i&k X Y)DDڵ+!!ܹ3boRuEڳjZ3z^z̅LJ#G2}t755?OjWg@yGyG9h yF6Q_:t(< wyݻ&|lB~~ۑR<(k#/!"ہ4>+Wĉ7'W2Bjx*3LUVVqNzРA_sgرL0)dڴivmv]8~fΜyE,.]ksF#]tgȑmp z[,rrrXlRL$&Yw߼y3Pa']vȕAV~`Zš$nTSv ?'i"##:u*w_m۶et#қ[ȓO>I5cǎPUU{Q}|' ~?#멨PFh!ҢH@@^QQyyy.Y4OxyyΤIzϤIxڬt0uT OBtt4ӧOgUO9MGrr2[VM l٢rW, ~R!YOZ gvA>}Ctt4={d…`ʔ)8]EJKK)--bU_H.s]wqQ;^Ey8w\dՊ+ zFVg꯬D2IF##F'`Μ9:tq-**bJn B}i\`)R0dѣǫ޴o߾]xdV}7}ٳ. pmQd„ \}ժ+--%77׭mE"N83g(--ˋpU!k/tԉ}fзv]t 8… TWWc2 #%%kmjdbذa]Ǐ7ٛ;CTTewҤIddd%KbaϞ=v;t(RQQ;v 33<Eܹ3=z **J844[o͛7uVϵkNEӧO+=)-Z!3JYYY 4Hݼu.YbOE:uU+9rO?AWgϺ,F ތ=)ShiII555j*V\ӧ)..Hll&8T aÆ1dMfN<… Ybǎ̙3rHNNo[n!,,L5eܸq[SVV6vX;~8o߿&n6ٶmdgg_L|}}INN[n{Gzzr-l۶MqڍVZ -Q`Pqe#yguu޽{X,֛h$""m޼~Zuײ26oެnC87 HNNfܸq}$&&^\>s;vꫯ嗶뻬Z͛7k:$<<\3 0@Sjj2335k+V)d?ٳgӦM#))Iׯ\s`j]wݥ:@II _5 65~,YoرcU;ѷo_Ï?虰0MDؗsj vl62-YRSS9r'OWEᘋQFѧOwN׮]w>WWW?Ow^&@{9U}/00APUZ,2339s&+WTz7\988nŋ{4m*++Yb3gδ^f3wqj򪫮K.lݺUn9((H| %˗VO[Tf2t^ #HPP&L`ԨQ:兟^;wNM2BصkS,"!!xkɪ FhŋUVUIHXc&f7=`*qW-3ՋJ-dǵ kЧOՑ/^TB_ IDATH1\~] ѷo_kqqqnZu~rA%K8r䈪 LŋX,mZPlgZfh5i1}H&vv [}Aϟ ەh۶sQvRꠧ !!X՛,XL[U#%KJJ4 tHg v[@G`ДزbOnf`'`5ubGf޼y,]LMIښL@ttjr%\  N*\)eT1 =tQ”+e̓{7_^E  $''+"|]wd0l6{Jݹ 'ut/|BBBTy?ȡC$+B:<)ksbNji24e`vT*))Q`wX TxͮƨG)..V$bfdz"" pXkʚ]^^3'B oyguCUu^^^Naa9\D 3yqqΝ;J;Ĩ___J#VZHRAgϪ6(1c3Q &gUJJs@BIIӜ< -*bz@}'|lTWX^^NyyŅ:HvFWiuuuM]b6آ/WTT(@#ټmZԦ,7 SN&T#@6!yYBJ8EGG#ݳΝ;J,XRSSSMիywk'FVgPH *L@Z,z %kwh46ii`PU:$_l)+WRRRBhh?zޭjӹ۩"$$~Q^fĝp~)- \p~AW30_9n m SH>Ӕ7NI 9y$mڴQ5v&>}( ^857oǏ=0as=7Æzޕzj]a{yzWD"^^^J~ @Ԛ} d`VZ))r $b;ѨXֲgzꥊ Nv8|ShK/Ą .шBBB7n̘1sֈ#T;;ȉ'4'lн*EH.ϫ6m)9sF[ݣbh (//(lVm5LJlzZJUmʔ!𤋮T mڴaȑNyTT3f`ҤI )2zhѥKw]pu$E.@ f"$UD>|Xu???BCCh!H4c'OQLLbP^^TH4suHf.4h<[U%O>8L{{wF og!%%'j*\^^Κ5khbx$J EQˋdÁL4 6Wibb`eee3 (t5v%yxeVP8w[nCa4ݻ7\s ٚϲNʃ>(8ߟo rssUfݺPTi`;%ٳXJb|ې\0٣s\\qqq=EEE5`|`5WVVi&sh֭Ƣu֌?^uM+RRRxU??? ¸qT~GO1:ef p R4dff>썌oT#]xapWȑ#檦mŴׯW]uF)Uje~uȔ)S0a&Z/dZgi^ Y@.@ԣ)HT݁l2ջ)ѨFEΝO]I™3g4 v, ǏWb%..}:-IĉUgE_~EuWZENN&暐iӸ&mi^uϟɓ']/\֭[RB#ǁu6C]HgBs+ߐqHQeP\-СC$$$(ޥ @JJ /\"CXb'NP7CvҹsgM߽[?Qbɒ%w7oVh0>|xn\ n^Ff7jNSo>-Z,:z̙3;w.ÇW{^xC9x5pڶjF!ZMFd'~C1T|||:t(fRT;.F͓O>IvT/̗_~6jrXp!NRM`&M /[geʔ)5fgg}v>4uz뭼,X?DZqI7u$td@Bq9֮]˰aTgȑkm6L&5j<IIIMW y}7wZAAAAjdgg_2}tUiZA 66zX}ux %--S2fM毪*lO?|e…бcGgZZtMp*D߾}IMMeݺul۶\[DDDĵ^K޽d*--edeeibQ-DwNϞ=Y|f-d`R*D¸{ӧ='??DQ$(((:v_OUuo|?lxٲetԉx@u|}L&L&aaatҥ6ӱljb'gN̹KϞ=Yfꪒ2#77˗AT/B@ll,wq7t\xZ]XXQQQa˖-_^sު*Ջ8!!3gruב_[5100;vǎO?%11Qnh4rUWٳg),, Q  ""HvN2'>>[oUSIhjߏ/3fp]Z y{{3aZnMvv6 ())ᣏ>w~鋝\i,].]裏Z=N8ET(EQQU@=HOOR+@Y|9z⦛nҤ!XЎ1fΜ9J9 V_|???n+Zb3m49wm1117RfsmlM0uhoW_}Hg… ,Z :e'220 ;w^x9dΜ9oJn(H~W^aҥR)"##8q"?+ W`V#"$$H"""ש:]pK#DJJJXx1<öM69aV^ܹs摓ܹs>,<k,YD#'@ùy'ݿ;wӚ70.@thơC={67on]cQQ/sVZEVVV1̙3ɫY|M.\>E3 x)]ٳ'xnY*p=3ЦMoݺUu]hvظq#/+Wl{~~>1/fտ!|g6mz-sNMu!<ǼyxW:$T!%$5 N0w\~foAAA?9sD,XѣG=-eu8uQXXÇ4i111.EMM f,[LMZ +#鞳|r7pV|ǜ8qS2tPnjGEE֭w嫯R(x Vg[}:0o/^dҥ|WL>ÇJTTuQRRB^^{?y RIHe^m1Եkb0xGݻVz;Ϟ=ٳY|9?}!!!pwsI~g}-.Х?om+p?/ҾtR.]ʄ 3f T|Xf Z߬cPSSm԰}vx ٣-gϞ^l63n84mbO:` ]WgwI'!ap6Q!%T} ڵ+۷'119jjjpdggsAmHrL:rh$$$0qDGNhժ\ZZɓ'Y`/W^ :t҈'""Bݨeee~֬Yöm4Yh/R!:zMZZɴiӆU1ˊ رcdeek.>FILL;lмdXرcGwnvzwNRRj ٺu+O>$GH*k"9"@bM@ZΉ'د GrMlEA < VKL&W]uU-kݺ5 DGGdB, \p<?Ι3g(,,$;;C9җ=Hq =+SKm]Νi߾=qqqѦMkwuu5={cǎqIطoK0Jw'`}j?ZRx<@t}3ZYU|<.7p3I0߃ҁ\Q3 L HVʇʵlwd;Y 2=k ~'Ƨ\7aֵ 3-m)ydWɿ+FA%Ā)1#|7~@*- mW=[Wov6hd+~' _TN"ل%ԣE}zXܚi8//JARonXdv# Ch[#G ֠uCꜯx^c0B\>HoQz!sn6 jwBwȻ_r Nf u'`b(F.oc}m0sWй1 ػlH1ւXnk nd.bsmQD1na":Yu$xp̗V%@nwjUVHg7h[F1'Ɓ5*ڊuhkqܪ+< xz J60\5*N1RY4`nQAvTYaC8E7 %BѠ A-xHbLetNN;&XCbE ̖J-!rckС5HfwzmSmZZ܂MJGFjj4;yt~` ҺkqH);':t8 oڈɫjw i 7ו;0(:"`skdYVE1biŋ&66Xnh]}9gEQDVFAzGC92-um 4xoCmwZRchwϟRAFDDEw(}N~44.Ǩ>d*A΃Ʋq 6" O ~76'Կ ٛ!\1AVwJRg}^: OC Z_nKDc`7BZXu_"=W/ĺS,62+ ̑@'@sw!уVZͯ$3SvœVȓ ħh_(..&;;իWuVߺ馛0` j\/ZC}hκU#cf/nB5aӦM|7>}0|pRRRS=qpUV -ph=u70 }G.S#}j76 `69s ۶m9*)HqR (Evl8((_% `NjHLQQGa[/3fpXEOF'O_ES}Q&NHjj*v^;5LV}GUuOEEyyy[ɓ'+PYr@;EWG_63@XX=z 44J}Ucɚ+hZҡC&O `O\)S㏇  IDATӦM&C;|}}IJJ#>>>L8Q飗/"FJB獝\?8e188JNxv_ dw-9s37t裏 : /FEExaE$''/رcG`0tlƗd###E,n۶M3EH9J@(Y>|8AAA(BΝ;{n46m脻BЦM <ѣGӶm[]BCϞ= 헄v4&@l_[*RGGtt4Zh4ڬbABB:9+!!EYɄ脻B`4IJJ"==헸%{5b㲩ZEw5Fcшd`0 ~~~=6Qɤ؋d2<}t3"^0bЧOz٤LuqaPh.wLFsIdv1dwy5jv֭[1  lz{;lIE;v,rfvZ>}kF,Y& 555ٳ?  jz{BNNӦMō[5jK;g j5ne Fpj\V߳{{]ʞۯ]` 4~AAF7>_<ԸqlGe vhߘ륣gzڞ5J_ \5hlGkMacQxzyy*KP~%H =?􆘌ս3 ݞ/hZbG ]zQ~;, ɢP6F[[B4QVC0U{KT0F։8#6 Ѣ`#6҇%bCUT nt~ECfkn5>l_:hņQJ3̃@tСCE&,eѝh#gM|8:l 1":th5($5 HHH ..L(RVVƉ'8vN$:t4w [U]kat҅Dj&EQGo>~G֮]OCo믿Z'FyXυL<ӌ34G2_]QGVg,X8]P-@T)Ss>bt_a\Bhh18 44.]жm[:v+Ž;Kb˕ ^S?011]ҽ{w ‡~ȁlp\pR]ImM 8s44mWzCiµo 6ڕj ]1#頨/}׮]yW&Iv%mnf"##yꩧ_0Z m YI@[3&mпaٳǙZd{a BqluQ#Q?pv׼*mA[kCFRRR6m}u(ϐhd<R@F[dggG4j D ƍ7ވ3 1~3gvBBB1\}u {1b|I:t@hh(Fѣ[UUEaa!Æ cܹܹj1HJJ⮻"22i d̘1lܸ5k8zu||<ٓ˗3gi=7pԩ +||| $&&___^xv5=ۗکxZ OI0L$%%qӷo_,X طoN&}G ???:6lt7rE@&r[J2Z*@:j(ٴCBBN:dggkCp ٖ /z}lذAox9 >kw rE&r 78j:7|yyyK(ݫ1Eh$謶 %_li鞺#?-fS`|زe $&&ߠ*t ɽ{r…f t/+VG222HMM~`ʕ.BNNW&99fa֭ "̜9pƍGttt we-aH8w,11.q-**r+.5bbb`ٲe>}Zq׿E~HNN%m~wy{ljOӅK_URRYf K,i)Y5Fp:tr)rrrCL&RSS6m?֭ѣ-m(**⭷⫯"<-Ҩ"00o*{9;dܹZ~1bRSS/)8eX(..ìY-[sNJJJ3z%99S2`>C6nAsɶ7J]]'޵EYaeMMyH{?QAji65/Gc_/1iJJciDPVd|fvvٳ'QZZpB5k_u7I/bL33N=z4σb(_ȧNJL&֯_OKJJ}him5'vNA=* ĜQd½{PTT6xNbHIIAttQ6:⭷Bee% QRR,J^/#55wk"443g΄hnd2YYYػw/.^Gq;v,"##???=[neq Ng3t sQPPPsX#188)))jXneOĻжW<-ٌJ9s[lѣGھaϕmz ` SǤlu^(vZ˧VDkwOq8p7nCmU+4!v2KX&^e˖aҤINS<$$ӦMCӞ=n)^k2+Wȁ)3w @cc#s gKi@xCK2lYAM,FC&MLgΜgyF~lYfCCC̙3IMM p}<3GDD`ȑƭ[wߑWFA< rjƠT]0OP.ִ4!!4K/U6ka!Rٌ9//UUURQb"_.K2QF_lgΜ!FJd"#%:()Y3e?pE֬Ƭvz /2S*Tf%3|#F __25q ܹsQQQ͛77>p@̚5  6l؀"AK$eT% 0N  EAmgI@8L]NGˢ  ͛7|C¢,\R2㿜H)kݶm @i ]JQM fV`g(@)DQQ[zwutK,A߾}]VgXX}t:)zwڴiHJJ A0t:L8,^|eåKM6Ç)*ZԩlB|ꫯ<\&QXiiix]~sHIId¦Md!XhѣG' qP^^4q0o<ۈFvx ;w'O6=6 ;<<+WĨQ / sX`F#222D0g̘1!!!z3f[_:,ڋ)DZk.:uM&w<rFx.Dh4L>[,Ndٲeh4HOO♸8$&&"..XUU222z q5dff ʜ-'ѧLdt#ܹ3RSS7ٳg#&&F[DD1jkؽ{WUNY?z(3n+lСCxbӣhZٳ0a{9UZ^׿ǎg-++G`طog4G750(=%.س-{UVᥗ^q$MX<;#,tB+V K.Bh4۷/Yp!*++SJT=gCelLԔgΰ苒lGOSJI]]~ddd //ׯ_;g@5Zvm5KA}_nc,:ȟRcoY( 4PwbE㠻uFW\[NR%T@*+}jtѨĊ+ДA9U٨Q: (Z][[7nн{bǎ}:7NRZUK؈*YgO?Y~)9!WK$7=NtF$?-WNC||<`Ԕ & 8y$ӑϙ!<0޹s")) zMJC#y G4U 1l0:Ui%qrڭX 4WԩS-)8cql#:u Ʈ]PQQdo]Y3xr!q/Ɂ8qtQykFdL46%\BVCb֭411FGO..msp￱{. dxa,(>nݺ}jtz OY17I˳2ipB:HTMgnjuQTeԪcuKyv؈{رcذa/}oX~sWڃ3::NjjY |||s*[MPB2}t̛7^GBBʰi&;~%ΝBVVWFee%`2 `ZrYob޼yѣRN:a(**ݻ|YYY|2WGmm-1zhk9pe幛 Mt 22߿?}@.]駟999֎K,ב 7q0"33;#@ 337ot7)L8}*T1;A׮]ǏosN~x QUUӧ?ȑ#Ѿ}ԤbACCCضmb"Kw-B>L1c $$t,*)6}(b*,+EEE$;;6bm+l[iBFA>I2RjSiӦ!((,haMTr*"79"ߛqr5&9ҩ #өbq@R}ά΅s23:%29)9)l,!E:D:2p@;5}]cl6ѝ$&&J] L2˗/GccӂxCi|Y-uMo}ذaXt)z-|Ѯ];{(//GZZw \} VŲeꫯr83gT|3'b<ҥ ͛RMsyJ=;",,L, ::ݺu{Add$@Y |BXεRQ>IHubYʴ}.\)ĉ;v,zI^rY$W'bQdzJo)͛~biE||<ر#aEteBۖz^ie{iUr%,=wEnn.  -(4"BGiݩu-g5>f/-f^t~`*ի駟)%?Oϲ2gm6[[ F4$$6zM&{uz ΦVb}hυHqfͥ444ӦшpPDhEJ +1oؾ};PTΉ'hPPf^Vۖ+.OZ[[K Ν;իg|J)AAA4,,ܔm©4,tۭ{~:ʢk׮>TfB^cǎ2d"##__.MS渱KJU#!WrͶ4<|t9b= 4111Ahh8]MXeBU 3%} KYB6oF#^K.dhB#*1%,RFAPP/Amm- Ci44B8c P zK`2`0P__zB/lA ?Z)J,cqppppK XP.WA2΃w4mˁHTAkIENDB`photoqt-2.5/img/other/logo_smallinsidelarge.jpg000644 001750 001750 00000114501 14145550064 022354 0ustar00luspiluspi000000 000000 JFIF,,Created with GIMPICC_PROFILElcms0mntrRGB XYZ  $acspAPPL-lcms desc @cprt`6wtptchad,rXYZbXYZgXYZrTRC gTRC bTRC chrm4$dmndX$dmdd|$mluc enUS$GIMP built-in sRGBmluc enUSPublic DomainXYZ -sf32 B%nXYZ o8XYZ $XYZ bparaff Y [chrmT|L&g\mluc enUSGIMPmluc enUSsRGBC     C   8  a>b2&H 9MȚ9QNX%C-9k9Md,)%hWN,GǨUyK%<5C1IYP 9iÜfX2g+Qɘ,+1)x Z&S?e,Q5at #”9hbRdO7OB .F=E5,\,P -<,oU2ϖT&\#S m* K~T6t F$c 2+y-9K<t0r"Pn*ZҚ?;%+KdUB;;E7V%7V1Pex1E)nW]\"%*; b>.IZȐZR d(Fi]; #Y,%KhV㈲O5 le+*Wl&0؃i`ʸk@L@l+XIMF6!@ԒlǓ\ x c,\φdv(B$zd&Vt럐~d:N@sz?g>@i 4ở426p !"523401&@ЀҤqִnÍ8B/FN9 *I]eKmWܒ7OLR'89M+pwzDU-TlaVdp, Jpǹ;d*&q^$?ʗҧSY{ nv%!!yfsĠR)I<^Դ]ml8a+R%?׫9έ D27jF՘qq!),T58ľb3?OCL)}zNEpoiHJ$,X3Y'Yʙ|7IIEg6ҧ#FMMn"87; =dWQmmԐ@$%K"jki #sFAEZAYSa:vDBY?ʗT'F;q#9cGH2K".isCS/ v?NoR0>|fFPKs#\y F2t0TvZB/ˆ%ZӘS(np!<\\HE UZV!st>wHHF]ݔ>/Ko d$i+Z\ۍ Q]a.ĩ(GSzc K (cN=6 G"Bi6bvF >-(8&_k2sZV4]tM iT!ihQֵ鎲5m C-5,Yж`u>W N* ҶiYnQ܉ XAf̐܇"8Fef2-8(=Z_HQuaOvp7lDt2I\c͋ޢ #$=rL]/,`0:?Ĕa82ë:{df]4І$AdAqAdAqAdA]c܉&4 Y%~.UAqAdAqAdAqAdm4 `HT- 2 8 2 8 2 1d9de kn5aaaaaaaaaa {" ]\%t9ouGuGuGuGuGuGuGuGuGuCvGgt[e'Y9dVaaaaaaaaaarK3/Y.2oYe^%O/7]\=t+)b{X\W]%[˿}-Wp1Yd*qC9FxuW}.WW]$}17p\w *WY&/s8[z8kc2 i;Xo^"YGˊxɋV?-e+xy?)FA%+*C0,B{y'2}uc:&&YLbxkљͱԓXoꡝbL;e&_qNcJ %K鋮яx76`f4Iw]d޺I7N ^GlGlGlGlGlGlGlGlC%o"2uuz]$T,Qa*>xٌK᷆8rDz[kV'dGYzcztطgI׳}"I񑫫<-aCќ4iL>&|M0aS/3$Wp!uE 7V!AAA}hemԶfRMlPdGΠ}dDɒo/u@ϬQϣPd:B?κãGPuPuPuPu?G27n[]A$ġ`xh0οGޠWW=t| Eu~Nh>}xo`=u}Ps/Ĥ3JuGTuGTuGTuGTuC*'7nW ~WWMk=Q3s:^zG]^۟5G4qsGG4qsG#+TMnvqqqqqqaݵϮ+BFFFFFFFFFE(UUۜmuЫKIzY~p:'o',rr',rr',rr',rr',rr',rr'/]z*Y',rr',rr',rr',rr',rr',rrehUJ(NNXNXNXNXNXNX,b֟?}!?}!K  !135As"2Qaqr #BRp$04SbCt@c?үٮQfFmUkTziwZ頋U^UHͳ}M6pP$\I[yrOʴuG<5e뭥(V /$_*\pUeȄy"+6hHGeˮ-%"޺m֩vK=#舺z:6]]qS1;_uw9Jߴ]m*A0'JRTrjm7s4Q tD]=_u~O.)sԯgXSG"3(P<$I0P4TF̛-J\-'&?{.tә4;<@A:a nd#~1Ae,3ޣGw$w&%K̯Rb8+iƄ &i0nMr}3IDѻ%֖VW^9摒|c bIHKK;tVF 8%cMʴYMXMt?9-3t ))yO2ۧ t^?hrba{+ؙY90jBSB]YBh~Jarq〙V&+SItIq0mL'NqonZ/]:imw7eʚ1 ^5*Xc hsLf}͒%#6KFl،/_b3df}͒%#6KAIP&iEL~qtC2*+]1@@8X͒%#6KFl،/_b3df}͒%#6KFl؂s%x d.~qORKq/'V2vF2vF2vF2vF2vF2vF2vF2vF2vF2vFe:VG8͗?R{ZX:h@6Le^e^e^e^e^e^e^e^e^e^5*Î7,N05+I4h&2vF2vF2vF2vF2vF2vF2vF2vF2vF2vFeK5lƧ c)J8`8-_UÆ l>ƶz?U?T{ZYtyx' 7Ybu)_K?H1)wXA>tp)nMa6P/YtnO:~$5GUGYl8sd>:k<,N05*pNδ&\{U"3kQXTf:6 Szd7\,cUS|Z@NB6]K\$uGUCYlSbyڱB],̴\\gԦ^]eИR+BHH!)Cce {{Q,V8K m5- vIF<6ǩBfez`yLsNB;˭ ?z>)F6IdµFe?OM2Be $/!:T'cFLSc.Yf2u˱c.Yf2u˱`52W T1c:x22oY7ϯ 㰥B04T?Y0΅օ˾էS\$g=ӵ^C-3$G9IN[#Ӱj RxguCN!F}hklG}hklG-.’ꚩR$5Ƶ^e=;Aǔ>>^aJN0aSkX84ḌSN$i4 Į=Jj|Qwoe_s|_Ayϛ%Ӱj Zx}\X֯ Ǻz"pi|c؉j{՞:dN-h&܈kQZ2IV':^Є+LpGTpGTpGTpGTpGTpGTpGTpGTKRP4ĞXޯ x}3;.?G>;%0ufɮ/5b@5W 6ckf?ٌmlգ%5Y<^B>CeKh'2Hٌ6c$#f2Hٌ6c$#f2Hٌ6bg lm#f2Hٌ6c$#f2Hٌ6c$#f2HيFt=`Rp^C%Iq\d%Iq\d%Iq\d%Fb0Iq\d%Iq\d%Iq\d%^xSa.-*2K$.2K$.2K$.04^3',!1AQaq񁡱 0p@?!k( YDv!S J7 G '<(N xp/]GMGE[J"HXW=t贶*IYW %50oCtBҼ tV|/[1Y90 ba];ֈ;]yz{^ G-0Ud3~B㬤$1!%_.3w9 X.ddA,#(#| {r`{"ڀ 6R?mg"x t(VA܌`e4W>YNFI3ΨPJhk$cXσLj4) }XD<`/'DX Ơ78~:/zSA>=9qZDIuA&H|kOK(!rF1%mܫ)a'̃d`Mz_΃0&D!LUITg0V# 'ݧ_4h~DU$78wp”ZI9.N&;֑jΪ(nӁ3/D1H *'fW?gNy:G+a.K:8nЦA,^;/Se|/,`sHv'NYVXw#՝TUSdM!rY6"F XXhZ#rJ!V~'!iXZ$azkACE`7P:G@B|IX8h3r'Zbgi N"bxߍ/@" V|HgU22ơ!7a7l)]:,v?;8 I(B8@yg0s1L p:8Zc!aU~lDetNhR,ۓ48sfY*!R`~Pydm]2$Dx 5l28r.R>k@juI"0 PMx*oaCn "$d@ f!va\`C3# PϋSB6<*PuQ$XuYfb2#*=Hr<)Dyvj-Jˇ.rˇ.rˇ.rn.Dyb$b¥rˇ.rˇ.$Eg=lL2xwA ? I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$AI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I I$I$I$ $@$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$A I$I$H@ $I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$$I I I$ $I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$H$  $$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$IH IH I $I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$II A$A I$$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I H$@$$ $I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I H$ I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$  $I II$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$II$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$H I$H$I$I I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I H$I I$I I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$II$H@II$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$H HH@HI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$H I$H$I$I I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$ $I$H$A$A I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$HHII$II$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$ $H HI$@$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$H$H$@$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I H$A$ I$II$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$?}!?}!,!1AQaq 0p@?BS8'\X*aTlvc|YbaNR 8; x\0Z#e3!#qkOA^JLh7 DkקҦ՗ߠK?J-KbӉ@4/ :q_`gY_{! S;Q-B)KNEqZjJİTfMftL F`h"RI `tC ף҇)a|X1=,kd4/=3 ^O9B!E} u!fĔ4 ZV.Ec =5VXl&wbz'rp}&WşeG 99N-RqN@aG1m ")6YE3$[`oÈ)$i2=,zM -"$s?؊#.l,-Uszi`QwW5`!9(`U0>$ [‚ 5\nlz$HJ! .0wg|20i څȁfd4c3WOQ@{}B0t$b*,^Ҡ, \VDa@{13$̬V &8UƝO"4z qzCMV14 w0)*&H\2FGhE4f Qw\nJE1+#h\T(i00"cA ~E;NQ +_84"o=^Ԅ/"K& KϚIcJ ;`a 11#dڜƪM[%$đY($+=R:X5d @jZ>2Bg}3_]'E %|> lR@ 08R'QiRʵ[:aI2K0a" 7U!d=RCo*/bOSI7ԗr]WSđ?4FEWuV{M$JGl/jJ˫NA "Mi@̈Oa_A}xM>p+QG V%r5SU@E̱*D*tMZ`rQzW)Dl4NMhuHaJfY| L,*D517: 2ĒCڑK2 q=Gr&{MP\X@d0X4ZbishZұ34* V0O>~/^gOAPBgH!RGphdBRXhY .Ă/C+2h4b#R*!(GXXOtKELc nLP_$Kb!TGV`U]b WAF^. ޞ)KJ^V63GSb,Q3(]--Fa100LIa: fN,"C)4NX'5󟧫ףT4\>q9!RgYgg*#ЍGm`bՅ$B֗ Kbr#ԏ bL-޵?lsc1J$q:&crI:a41ObCt&%,`=o*5w?apf'@̈́ t/PB;|-C{;@Dmr"7(1DXBX7UD‰odVE=SxuKǠ`譮2\s$1)jYg \)IOF-/ LII}EJUzG.!SQ/H[fewC΅e܇z>Mb–ڃChZox!0]h €dq IRh+K3-C݅8PH\L#d 3ͥ~i!7$t!LҴ1YP{}}}R?iRɬCWeru4Gl+I &!) u]w}}}5G.;Ԛ#$2SDW)K{'q.;Щ,R-&Q_K+%>+sϊ>+sϊ>+@R .u>҄Ϥb ϊ>+sϊ>+sϊ>(v-PX zfu3>S-0P,W9\s|W9\s|W9\5iښ V>һ=Nt #c8p~&RNas F3BkJP k6O\"R$6v J1q1NE'J?҄yE"aTm%LMٴ_յ{IS54Qj*%\&;?kt PC,F~9*ޣ ;y@W}w }J Ҵ{N}=0ݚ{ Z[n&&SѱU{CʛӾJ7e2Y_oFss?j̖nS3 \8 qFm@Lec."͍q<ƊB5&NLB/wڗU(pS Ԃf)+goW\*z=J{xHg5>Ф>VW}o ) lXbŋTMlWTg~a[YS-@oNӀ#LfJ&r0[WOý;עiz_,{uG?w} J0nb'8j̻׉w}nbFGE`$r5<$\r5<,\>QA[K[]3?k 4|ʛfֹ{e]]P%0m Yd  }0TDk;i-ƥ1W}nU}׾%#Cv NRػ؃YUVW7Ѳ9?F_~?-4~ ae$TCrsq"H%Ra3.X7S&+OK$w7إ4GjVtΛ4ks&a????????R 3&'9+l&?s-BbӮ0>UToFHgZ-fB,|Y=B(H:ƿCh 0,|žt\<ŸIc8cO4cO4cOcO4al~zW"`_pA&!BgP:) B 5 `bG搢y^W\qW\qW\/Ǒ `~hL1b 9V;\qW7\qW\qϦ GQF`_paFj${ҡ1%\,,#3a"h)!eL,8MLKNW,(2a ޜbX0F@,el~YeQeYeR!`6X?photoqt-2.5/img/other/histogramswitch.png000644 001750 001750 00000003707 14006705603 021242 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGD pHYs  gIDATxrD />XnM@C:kE[hZB]e ξ< 4&И@c 4&И@c 4&И@c 4&И@c 4&И@c :/?_OK`4=Ok`5w\ξ>8D?|/:.0~Cn=wf 3a``Y``0~xC?j6P1 U ƪa```Q`p`p`p`pQ`p`p`p3`p`0?'ǿgw@t @v=Pj(;2+^g ` C{`PȖ0~(f?Ez7^ ^ $ D daBk`0G0~ؽ?LV&~l[5,D`O _pKW:SO"lܴw\_`6nn} M{ŽEٸix"lܴ_g@`6nk@6}#07 ([[ߴ|+Pu0POw[8P|}"@)"ז/J$={L(sz'PJRP0]myzZ=M/$,>:= u.@Sy0Hv=C>T`9ڲ,#08셱ӒYgzY<T(e}:Pl8;PL!P,%P )PLD(rF @"S5 THDb*EB*D(B* =g]'RϾ1=IRF}Dx`'#P9PhDr =pM{@G.ÝbC]#@4?(e'ŜŜŜYŜHDb@$"@1GDS#-P̞D(ft @rXU{Ds#=P̖DR|J"PʻDRމ\'j6W" SD^yxA  3<@q0"Pػ bmu@1[**P' q1D`x{?ڞO!1D`8G?ʑOq!1Dtg?8ՙONsʊVt#?e:?8HO0C8ćgz v5݌>D`ƟlMU"jO6Qq۪?xK'/>D%3?x,O2f"ʌOu]3?i'Wu"K't"nO"v\'@cǟM_@;Ih0:`z05OOЍ!tb?]@0;C? Wfd+9`C$OИ@c 4&И@c 4&И@c 4&И@c 4&И@cj|0!d4IENDB`photoqt-2.5/img/other/histogramclose.png000644 001750 001750 00000005420 14006705603 021040 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGD pHYs   IDATx۽U'%n8u厐 !ndg韪{4"dk;H 8 }jj^}GbA{ Û g^҇g#ғ$D:tz&O:=tzNDpD7?? -@/?5?;iD( ܼ"yD ?, :@6@uV ϼXۺD@fex`"j`"> D`},#cTnj?E#ǎ?G@1@nc&E"({=P:c79FVr?E C @(=P?JE j?ԍ@2Z"PkDCH=?RG _<Fc!mrk!_RF O<Ds!]r{x?@`?&}__5)"o=D} 0)@`s?GqE;]6ƿwIj?}H _Iߎ>"o:}ƻWw:D~9f?~=xag@ pT @Ep An!0=D 3?xd'"SL `*"㟉Az s1D'X7"- @+"pƿ"'ƿ""ƿ2&"%ƿ6"ƿ"&ƿaǣokH[ˣOIꫤvx~?-^Jzz^b` ?S x%"6ƿ"&ƿ%"ƿ"2ƿ'""Њ`G"+ K1F` "Ѐ{D"s0T?"0gBf 0DƟ+ k%DpWDn eD "pH 8C#";s?i?~_?~e0~f0~@Zt>[7@Zt[?@Ztaǣo8fx-ۍnE5>$G>xhBx7 8~So,]CIDC.LsK@"?@zRu?k{$"2@"'?),#wR_5y<#nRHn72@r@5R2@:5#~RH"PoVJ_J?Ԉ@KU e@(5~Rr㗪@\(9~b,㗪@=?*@5R(?~z"o+ H0%HGEuL/@;}#`9~1^`%H[GeX_rUڶ%HkGoe0g@Z+kD!-/m`e`{[4/("o L?ڴ0;-#{q?p0\`7 HzM_FB00ѧax-wǣOɀ`````````````````0@y*IENDB`photoqt-2.5/img/other/icon.png000644 001750 001750 00000014243 14007526445 016756 0ustar00luspiluspi000000 000000 PNG  IHDRXbKGD pHYs  tIME "1TkiTXtCommentCreated with GIMPd.eIDATxo̐DYIږıqRi@O}j3Z(~@M&Vm"-qpξÆu/05{{pt}l5H!P.@&Z9o7 y@& ~lU[" 2H3߽h_s =v⏶ іF djڲے-C! hPhzf',8PAЖe(XóeX-ҿBef6 גD 9 ϟtR`eeeRe#IhTr$I&2X[Gk׮DQTd2$I.H45]ם8g2C@GA@ W\5MEQh"pp% .TJd2rZu yLVvx^7;; ϟ_1 TEk4JV H$X,q~_**˲" ]eH"I Ix5===xlmm ._ ?OLEQfd2l(>xB\:UUuZm8bYeeYVץ&[^^Y___@4a!N"HukkD"\:hx7eHeAz*K.--,--\zu4MKeRT]ޮGFPP.yҖZ֌2cQ-FЕI F-KNclѣZ u`Zw`.--ͬGFC) Çw)D"!<{_qƉ+W|+LQE}Kv; z5/!$ a7UUp8Í?+++gΜwpڵ/_\\<611x<ISrc?׏~ދ$I2鴔N>?}ӧgϞy_xVVV@`rrrKQ9Jl4vN@N,vʓUߙ3gW_}us`pfaaa:L|>ϨAFl>A ˲Nt:-4SE._< T2A ay%ϗw]~ŋfO81?777xȣ^XA/VDNzȻfIeY駟v >S^=a6(XaSUYaN`u6>;C +)Bg%Nұ.g%8c=m$^C'=  anang`6 ;PO҉~,m@'}5a:aGowjaj]{Eڐׇ}?S~Փbai{`Y1Cdy9(0ȑwqcuBAPCA'>y%;0 at1Bܗ:*7nmZ,grs0AZuzUXVuF}mN'.3"|^DͱdcqBHһbIXn(g$45X!Ya-+GCǔynY1A݉uDA(F@{GQ_jb/V/( z79UF!Rt֫BZ, ,Vtѣ #0oN\ tf6kQt{X@Qa>ZE (7GAe^,0-.šsұiifʲlZI4Ku(' Ax^xȅ7xc~yyybjjz#=z$Z kZ c[MQȉ ^[lW .HAx,GE\f0]}im. ~A`ׅ|t ꙓ FXhIQTWR{[ywj :0$I,ˆ$I$I(aTUݻ5eud|=6$0,0 ML] 0L] MLM ] {w)^%UQ5A44Ue5e5Q ]M4$I0 Ò$f˲$I,˦,˦aV2" #;ygV0 SQ]h<+ h(j AJF2XXD@i.:乣4M0Mo2~޿ysz/B/io7IzmyP|d'6(mP+,@qćw>.͋8I?@A! #t` CU$ >]$AWY # n.wG@P\# #`U4R/A3A@i@F@Ps7:9`A9!  c7{G?,ǩyB! nM(D@aUag$L&X,q@iZsyUH@C2@nJ%>BP5 1{{{|>Vo߾]D" atR}H_숁G@,UUuJ8<<DP(qT*.J S@6 CPRˆB!&4ŢUJcIyi%UU IBi62pFL&#KF IPqh) e(,Zѐ+P(TڪGQ!+.B\ qpv|a놦i JRiqzssQꫯxo mZ3]u,#1MRUUB6eST=LrXB&kµK0d@!:FA4 cYMEQtRy>\NL&|(cq<.6)hpS@#,KEEQ-qlM\,㶶ؽ=85 ;oHvnN{Ν;7yժ eY]EEQbA("\ֈc[ p=X}L]B@QO[o(dhb'm_hԘj%V<vQc yzyFxHQ%{(V 5phFF[x iQk7Yjg12( 57۶)IENDB`photoqt-2.5/img/img.qrc000644 001750 001750 00000010452 14155534016 015455 0ustar00luspiluspi000000 000000 filedialog/iconview.png filedialog/listview.png filedialog/unknownfile.svg filedialog/close.png image/plainerrorimg.png mainwindow/close.png other/icon.png mainmenu/about.png mainmenu/copy.png mainmenu/delete.png mainmenu/faces.png mainmenu/filter.png mainmenu/flip.png mainmenu/goto.png mainmenu/histogram.png mainmenu/metadata.png mainmenu/move.png mainmenu/open.png mainmenu/quit.png mainmenu/rename.png mainmenu/rotate.png mainmenu/scale.png mainmenu/settings.png mainmenu/slideshow.png mainmenu/zoom.png mainmenu/zoomin.png mainmenu/zoomout.png multimedia/pause.png multimedia/play.png multimedia/speaker_high.png multimedia/speaker_low.png multimedia/speaker_medium.png multimedia/speaker_mute.png other/histogramswitch.png other/histogramclose.png filedialog/backupicons/drive-harddisk.svg filedialog/backupicons/folder-pictures.svg filedialog/backupicons/folder-red.svg filedialog/backupicons/folder.svg filedialog/backupicons/image-bmp.svg filedialog/backupicons/image-gif.svg filedialog/backupicons/image-jpeg.svg filedialog/backupicons/image-png.svg filedialog/backupicons/image-tiff.svg filedialog/backupicons/image.svg filedialog/backupicons/unknown.svg filedialog/backupicons/user-desktop.svg filedialog/backupicons/user-home.svg slideshow/next.png slideshow/pause.png slideshow/play.png slideshow/prev.png slideshow/quit.png slideshow/speaker_high.png slideshow/speaker_low.png slideshow/speaker_medium.png slideshow/speaker_mute.png image/filmborder.png settingsmanager/filetypes/devil.jpg settingsmanager/filetypes/freeimage.jpg settingsmanager/filetypes/gm.jpg settingsmanager/filetypes/poppler.jpg settingsmanager/filetypes/qt.png settingsmanager/filetypes/advancedclose.png settingsmanager/shortcuts/categorykeyboard.png settingsmanager/shortcuts/categorymouse.png filedialog/remember.png filedialog/dontremember.png image/genericvideothumb.png other/logo.png image/checkerboard.png settingsmanager/filetypes/im.png popin.png mainwindow/fullscreen_off.png mainwindow/fullscreen_on.png image/viewermode.png image/noviewermode.png mainwindow/rightarrow.png mainwindow/leftarrow.png filedialog/backwards.png filedialog/upwards.png filedialog/forwards.png mainwindow/menu.png mainmenu/clipboard.png startup/individual.png startup/mixed.png startup/single.png mainmenu/chromecast.png streaming/refresh.png other/logo_smallinsidelarge.jpg streaming/chromecastactive.png mainmenu/logging.png photoqt-2.5/img/startup/000755 001750 001750 00000000000 14165364164 015700 5ustar00luspiluspi000000 000000 photoqt-2.5/img/startup/mixed.png000644 001750 001750 00000005160 14140305303 017475 0ustar00luspiluspi000000 000000 PNG  IHDRlkAiCCPICC profile(};HP>" 8dNĊ.Z"TB&7}A$Qp-8X:8*77'E)ܤ"{.oTjUt2!dsB> %fsg}S7]gyYJdO eaoOmZ:}+I 9A$~~12yP`YP'Q?yZ= yme봆" BʨBvi:OxH.\e0r, ߳5 7)^lcͺmv<WZ_mӟZ.ۚ\OdH/3 skЬR7!0Zuwwwߞ~ rl|bKGD pHYs.#.#x?vtIME*9@tEXtCommentCreated with GIMPWFIDATxٱ 0DQP[/8PKׁƁu?nqM#<2?jXL : :NND'ND'D'   @t@t :4@@qc\:NND'ND'D'   @t@t :@t :eT^$˥  @t@t :@t : :NND'ND'D'    @t@t :@t : :NND'ND'D'   @t@t@t :@t : :NND'ND'D'o1Mn6 @t@t :@t : :NND'ND'D'   @t@t@t :@t : :NND'ND'D'   @t@t :@t :@t : :NND'ND'D'   @t@t :@t : : :NND'ND'D' r@t :@t : :NND'ND'D'   @t@t :@t :@t : :NND'ND'D'   @t@t :@t : : :NND'ND'D'   CV뤏IENDB`photoqt-2.5/img/startup/single.png000644 001750 001750 00000004046 14140305303 017652 0ustar00luspiluspi000000 000000 PNG  IHDRX3sdiCCPICC profile(};HP>" 8dNĊ.Z"TB&7}A$Qp-8X:8*77'E)ܤ"{.oTjUt2!dsB> %fsg}S7]gyYJdO eaoOmZ:}+I 9A$~~12yP`YP'Q?yZ= yme봆" BʨBvi:OxH.\e0r, ߳5 7)^lcͺmv<WZ_mӟZ.ۚ\OdH/3 skЬR7!0Zuwwwߞ~ rl|bKGD pHYs.#.#x?vtIME(!tEXtCommentCreated with GIMPWIDATx DA44+2b$&p/O.9&}0Fm&X @` @`,X @` @`,X  @`,X   @`,X   @`, XUUa"I @`,X  @`,X   @`,X   @`,X   @`,X,  @`,X,  @`,X, X `*,  @`,X,  @`,X, X @`,X, X @` X, X @` @`, X @` @`, X @` @`,X @` @`,X  @`,X   @`,X   @`,X   @`,X   @`,X,  @`,X, X @`,X, X @`,X, X @` XK7Q8IENDB`photoqt-2.5/img/startup/individual.png000644 001750 001750 00000005411 14140305303 020516 0ustar00luspiluspi000000 000000 PNG  IHDR| iCCPICC profile(};HP>" 8dNĊ.Z"TB&7}A$Qp-8X:8*77'E)ܤ"{.oTjUt2!dsB> %fsg}S7]gyYJdO eaoOmZ:}+I 9A$~~12yP`YP'Q?yZ= yme봆" BʨBvi:OxH.\e0r, ߳5 7)^lcͺmv<WZ_mӟZ.ۚ\OdH/3 skЬR7!0Zuwwwߞ~ rl|bKGD pHYs.#.#x?vtIME%]%tEXtCommentCreated with GIMPWIDATxٻ 0EQf&]i`ȁ?E. L^g@t@t@tq +WW@:t@@:t@ \30X< :L@@:t@@:t@@:t@@:t@@:t@@:t@@:t@@:t@@:t@@:t@@:t@@:t@@:t@@:t@@:t@@:t@: @: @: @: @: @: @: @: @: @: @: @: @: @: @: @: @               1JǙ&~.  0rcf +| :t@@:t@@:t@@:tN1 +pAt@t@t@t@t@t[̰7@:t@@:t@@:t@@:t@@:t@@:t02 }@:t@@:t@PVIENDB`photoqt-2.5/img/filedialog/000755 001750 001750 00000000000 14057352753 016276 5ustar00luspiluspi000000 000000 photoqt-2.5/img/filedialog/listview.png000644 001750 001750 00000001714 14006705535 020647 0ustar00luspiluspi000000 000000 PNG  IHDR,,y}ubKGD pHYs B(xlIDATx1n0A2̴)m@ 8P7wp=<+tUd!X@`d!X@`dqp i܂~uN%Ty%2 , C 2 , C 2 , o yo=6, C 2 , C 2 , C 2 , C 2 , C 2 , C 2 , C 2 , C 2 , C 2 ȸvcZg8ٜs6, C 2 , C 2 , C 2 8 r dzv,m6, C 2 , C 2 , C 2 {N6g?2wGQ}||sS'2iV~v6r!q)ݺߘ Y 1]ggJqR>?ɋ C ̢R~tLXBb3 ziyuͥ}B ;D6x_} ]SHlgV12vrHue2TF`t =ZD58"dz @i\$s,3 Tl8]aDSu%AVWkb_;\'fOI5\K\pYDsNţX3NvW%L4=jD.2 o&VTd "EU)Yc6*5*ܟndä3T 9 `uq|#Ȣ)*W=Lt?aA8RH2w}V)q}9($nsU"u䇊!KTZBY0n=N@ ^ٙ3wٌrùQ/!݀lU^vN4|d)yc P`ŋ틪aGu{GC'N+M/=7gU|Ht]'>"]im&[ 5GSݡx CNwOH8hOAq:`-|ԍkck-ɧ>q<ߕk?KLDHGFq!i{E7lV>;߭?Fn3˞d"I>Ig KO7cG ]CmIa"Ðh`]j>*w@F!vK>@F_s"G.b} j n:.ugIf=py,R9eWǚ/M / 7( }Ni*prz$,3E&# m1]'b8a?%H^73=]pңQצS3o+Ӎm,E=]ƥRh q٩ I+M>ɿX7?*G9R⃂ +=~ydR1nW+@(N{%a>Il'0Cy} 'Eg.el ףTΚfeO;#8DiJMIČ3%s0ӷXqB*|| V!إ/HsT_aSTL/C.-Y5|=lȫM%˹ ^|m-2.]!1TDq\6RStQMx`j9|c\LI82_~^ui hLx"dϻB4Q9.qk@)3*1} =N7f('C~:~^u=NXGnwHK0a}#?hs-nxA'9O,y$Hrd27I\u @pcs_ٰD+r" 2P˩ m$b-hGru]/qaq!WGIB K@'W/F#U 9c4oǃ$CvJVT:T5}/sý(޼ bii(I2^t3o1?)Zh/X/ Z{'g^brAL EUTXWis`P|׵D ǛD[ ܰ^Jhnn%$ P=aaKQ,*./>+n/+|5sPˆsne-TWJ)Zq`m<F :SfG;NNc DxBfxh@uZ.B@q> H5p^l+P؈"{VrJ*:jwɗ2^H?~{}@R1]fx\PCtA/7ܞ> Z 9 4w?GJh JzgzTXtRaw profile type iptcx=10 '$Gs~a[dtj~eDّpmTrj%P^o\}iCCPICC profilex}=H@_S_;:dNDE EjVL.& IZpc⬫ ~9)HK -b=8ǻ{wP-2j46J`ݘF,cNh9]g>Q3|",3Lxxj68X^VωGM #8\xfL&Cb&fyS#$NBcgXf{32i!E,AeP:)mprȱ4Ȯ~wke'ƽ`80о *}8 \  |^ih#wnhp?)gMiZzHRWQzww4z?xIr1T iTXtXML:com.adobe.xmp ;*&bKGD pHYs.#.#x?vtIME (tEXtCommentCreated with GIMPW IDATxyU՝7=5TA(Ō1-ۘNBǤ5q$fee J؉i}3(`(82P@EM;i*yI{\{;Md8|<_7n\(Eo!D2~MRV۶['M4D@J&%TmM&<00B7@ I)GB%'P)eu˩TjKwwUU{655%> dPx`{Rʤײxh4zk# N) pM4u]=!dGQQ+W ض :<]=G)=L&F"}ovKGG,H _ea%CLEP]@ p]eYo !  @?F࿰>@JI)TH]ʕ+ k΂com>3gD-Z5BywIJyyCKKŢ-" @f?JZ8]=844MӴxA2,|ϴ+Dݮ-aDQd`(󮺮{Hd˗Oϟ??_287\=*ث(Jˉ'r-}LOA!.{`pp+MMMS7oޜ[SS$L*=RRX썞xIu'}fV ! 4:aM<9LnBRc.]j^`A=u;v2wU @ ۲Ɓ}pp-ǫtB H)ywqppp===}ǎ{1 3 BRڞ]M$[ BѣGۛ6m_җNO#0J(Ju c.+**z]Jym۶>;J2"y)uٶ};6mڄ C-z7FgC9(@&JI)۶u``R[[KPg9eY(Gc.B:N!!]xt]|{{7N SEn#w]ɲhׯzu뭷" dppI!偁QJL&ΪU zy^8 6&]w%;::20ԉCy8D$!@28N𖾾3f!U z8I)Y۶wk6*قOO>d !Ox)e\UU8E)SUT*=vtl(/J !ZlnO8W]nR&=;8[T+&L$x( @|28H$/.]`̘1C===.g| 9$5]r% >ҒT@ PDI躾lxxx[zKSNM=cX#:{$G6:Dwtt 'O#ل1.xyމH$^eee!"x-#x㜴,ktWWoOKt2#HH)\=lWWWKGGGq>9|>owGCEҚR{y^ן;:t#`vU-R ɘ ~) ŌY/1 c*fd ~ !mbۤMe=~xOCC,((@GuL\(BdTBw6nywS<꥗^R̙˭M[ Ø(hiq稔87l0} A[bM\F)2 PD]=h~x} 2N,4m1clRB\׽nc4}4ͶٳgBjubQQ5PJK8#ʄvIu !Z[n/&7>/Fo2q`27MsҨQ᜗RJM\_RX,R48Υ+W\u]7tRFʹE"G7n^~~SJ#@ RRCCCiv1O~  @^Kկ}aLs)TUj=>Hzw9JRD"{{{O?bds3oR8!󼃑Hd[WW׮'Nz  @̩4Ms(+|>|JiRj˘@BHx4e˖% !ٮ]UUUchs^I)yñmy5b4fΜoڴiRnnϤ10|NfRJ)/ٶ}phhx<~2!Eu /TeEb2bqSRٻwޮzAu ˃-[YfkdJiR&=e$<}r׾oZ(d74W\\\|icuJiRӟ$Bh4b$٦(EQc(dk1'’9S~bEQF z̀y۶{wr0HRoٲ%n:#W2k֬2@ VQFv1 RZKJX,w$[n>O}{yyyyxy(-ø~ӟ+v]ڵkDQJ{(MMMڵk [7x;vL_v>oa8 3%`A)Bmv[ggKd5 /V\Y>2ZUzJiɘ0y9˲]vڣ*YnlҤIEB0XQ r!H@-8EQZ?^~=>_paQi99Y,RRʘͲ-;/]tqB  @ۻw/=|| eee˂Gw]1?qĎX,[^^>8hhh@@lk.Z^^2)eرcFFP f@C@T@OOzq۶#}}}Ç>(d5OO0 ec WHQєR@&WJǷojooo.^ @VW\)|e:Mnc>gLpmJminn644Yt0 ~juuuʕ+W[9c@2>B5k_<42A)͡(A g<2X(S4M4mO[.O}+))qvލ/lꫯҢ" ]7> Rj @=H)#Db[۳gvQ"@RO<]t)4}>_(OKGHoBJ$ [իuIUՎ-[X֭áCرcr -Qee#OiNJ7o^À/㎩4EQfQJK8NR u7{hfΝ;Oq6@!jSSӄMӜmґW*J!B !.SJ]}%oii:{8*Y~o?`SNǍW[8^M)-cUPJuˑRv%뻺NDZ'Oc Lv!`08JNGIϗ3r9tA ='OPJCLT( }>#<$b d{w"J9RʘeY׆B!E)1# @J(`\M*aC`:z(B|,S,e9vʕy>4m(FBJ)\mM&;6md2٭iZJJ[aR駟NE !,jB$5M+#7Y0}N3O*,,L4z lӦMiӦ),,%0qRʓ2y^c<׷쭷ڇ~źIaF)9b(MsݶcRq]"!D:®]6WU&UUpFN4&L ! !.{w*n{ݻ7InQ؅ xiFz8SchsϹkt@xi]]R]]m^t)@ 4EQ ! &Bx<֭[7,\Ǿtw d9~`QQQ3'|>BBd J)m)e8m>Vgg$cL]A۽{w2 Nd5 6yTCyҾ#` !"BsHT*uڵks΍|173 Lj^x!ӟRڪ(JiҤP^^^PyYYgt]_J) QJM5%]KR{#;G׫ .%K  @6?Μ9:d̙32 MYnjJiTAHkB# y1/'}Y^{5sܹաP4| IDAT[!ժ9}Ҙ2!(hɓ{WX=-@@ ܹseeeeU0E΂;yqX,4*yꩧ˗/UYY9s`EQJnKI)cBd#cƌi&ب!g}֘:u%i%1ƪcaT'-x|sۆat:?zJgmmm B}>B]gK) 8(Qzs]˲#KR3ڹsg]wݕ$X#pf'N}~ҤI'Lt]wXQRb4 hV y=!4''Yreb͞=[?~B͛yiiOUբp8\U^^ 1i˓R&<ϻ|4n,d^{M3 Ceu#\4rRHˆTc2 c(իS>B݄ 믿/((( s8 TUꌑ7iLJuT,{/iii96zeYkxb/u45-R!F?,iWΝDyPxbuaa"4+2RZ+ByқmҦD"q̙3P!3瞱`p t 95Rބ1q%K)OڵwC@ roJ)=9Y#`,L[RJKJB4wvv~իJ7R-//BP(sFu(BRR RF-$x_AI/"5ǎ6 c !dasTU#~,)^Bd5[/_ΉEEES|>2EQh6`C /PJ//hѣ !CG)--mR]7R}~iwygqYYJEQf>s>_ ~aO<1.77wK)8ՌT )S4Mi\MӖpΫ):J18NIIW\\|bƍ/]h4 )eL~z6n8qeeeSJGa @{X ЧNZTQQHUեae,2ꫯ9sbXYUUtUU)s>"dRڶ]SXX* ~Y,@z'xNN~}BY`0R:j쩧u]U7QJWH)'hV:nӦM n<& SUuA@pkז/u}3EBn|1#@c?K.]161VJ)s c/|>m_Ϟ=x,eYo !B2:ѣLuѣG/QeK95R 't2v3g BHp8RZybAI6n9eʔJii+MӼRG)#@{饗 ˛(JclF^ @&۾}o„ Ռy#a`΂~_׬YSnN7Ms(+@?G+M\F)WSJs2?uԘ`p!t.!s[1|#Ν;;=}>߭~cl4GCzi 4RD>D ͛'ZZZD"r]w0u] {QQQ1f8c9票 d&~w-WUua(e#2/Zlp88; -˫׫:> d[k6! ݡ|l zjY0yXMVhV9E)UQ@ |@>cR 3l߾M4@LtM뺁y`p缚1@ A_s ߬ byȖFx h|^x|ꂂdris5M+]~(~=~MQ@hdq  @栗/_+gvk ]g2  -[hEAb‘pHO(waaT,|w*2~_`v"A(Ϸ-j*2RYUUsG1!/HB BٰaBpytzQQ䜏"76?=Ra)e뺧vر#|)7BM\\JiI_u۶}q6 ӧ/͙3'5t [955M[J+(OO]\2},[jkk/BT}g )Sݡzcl4-)Hض}18Ρ= ܹӜյ)M׻kVVVN 88ɍO =}[J9DB4%?q׮],w> 8 >VMf`qq۶/ض1vuݳRFBk. vMT+++sǙl!3rI1h{R˲ ޾'t|>E 8qD"2>k<(JodPI)R>)eO4}6VU5r̙ĺu<Pgg'}Ǖ`0XQTT4R:]U[)(AJ)OYyx }ӟo|„ L46؄6?$ %]DbG4={cX k<ϫ4mwZ7r@oy*8;ǟ#$Qt o񆯡4''g:!d9ZQ89Mq>o,x"hI:@zWx^^2z24o u]RN)1-Anm18·n |^x>|XQOs^6r24GJٙL&hll| ٶ=|%k_V@9u2t]/())K)]|XӓRZR!u l;H$:6o<8eCal/|zGXaaaYeeR4RJ Gƃ7L%8\~+2#իh4ZlٲŅR3?dD"%}@޼yse,_œ6mZĉ>OQ:rX^OQ_!dزcDB񶶶=X={pH d<õU:_ŊԎ4y^8G^{W*dqwc>Cpxi !5D) 09}ރTjЇǏ?f͚n_ Z/Z[[[m8SJc՜&9!l&ywwOuuu;!ƌԌ-..JEQ;ۮ^boٶrqkCضmۂuuu>oL\F G@OA!$ !;ZZZ߹e3~@ ߿_^~=0i.TUX؇2 !=kR^R=xoTUޔ)S0:لsNﳕ+W9+**E(JT!X՟a)eY{z{{ˋ;v,կ~UBEZ[[3gYYYY닊4Ji`dUJ-ooR~٦ .$}Q쇏-L~*s [iڤ/0p+)>>ᗶyWx<=6*.JwOQBokk_<(?Rʫ8ΉC]!m>-L| .`yiu&˲vQJ~_Ce֯_^p`0816s>s^ cliE@˔u˲bٶ}1Lg͚e:mۖ3}ipxVU2}iOJBtBI&!ƷYdQiZ(}>=41ۮ^<8{cm{kjj}O}a,WUu(#jPz7~pd#gΜ96mG{d3ϧV(r X9C·vZO#'\=600R$9Օhkks ?dM6ъ LWz[2[?O 4≡Phi!0c,02CGn>hoo?sXY?ei/[UUu{(MQR 2T*ORfw.^8ID ]gϞɓ@@)(wR]NR;_1Hc^|SO==rHYIIɸ@ 0RUuf)'&DlFO] 7&?|pr24m(SE9,:8^XeYO2zh>~+_Qoq&E=q΋ gB\RF"W.\pp֭=O=N@lO}?%\)P(/ȍ:XBĤBH7Rʓ?+`>?2a„@u>0Â$رcǏi2BH t,clc 3 _SUU0[:~ ضmDzlrŊB) vMlٲeq"D"WBDRhEJ/lw]sεo٣oM|o ˲L$k X`F?4uYk]}dWWXl0L&455uprrb,Ho6 aRJ1y!˲;v͛b]@DJ98au ]x3^ؼy3k~ l%T8dٶg}u k^Bu=t:944Tnmm .zRJ1M#D<11?䓬 BZ!&駟\.'_}U?/Iڶ}0\W^i<|B,﫫 ð+ jJRj/ 8],;WX1*)_r]ֺCJy4} oZ[JyM<> t~uݣi~[WW?111m۶%Cj=Ԥ'L&sʔT>^uZ)*'nz??6Z@)58wbիW !8mZRZ\R_}dʕ~>%N !Zf蘆֎Rjud&R4e577` f?}===-[y̕> Lq3Z~!YuضuwRp*۶fgBTMMʕ+9k}!DY)eO֯_o2!lA {\q0ޮ;@ip)yu-˗/B8L@@+1 #WWZ)ҝ+k֬H ,J){wqֺsLܸqB(۶:eYݦi曚lkR=4bz[ou(`Tګ4SK.͊S0QJ 8#LkO:tM6G|TJ AmT\./YdHL@@Xh=!#q]eYNZ! iy޽6lP ?ȯZgR2AoRxhh辎>UVE E !?ZRUUu4TT:xK/²P*Atl`TY`yy{c|rBJm 4>N_3T !XRv]xy}rIu@) T*866?c /6 AZJR.^}n  Rjn۶?n޲e={ ,q 8Fk9RTZha !fs=J~TYW^MRUTӱQ_IENDB`photoqt-2.5/img/filedialog/upwards.png000644 001750 001750 00000057457 14057352753 020513 0ustar00luspiluspi000000 000000 PNG  IHDRxzTXtRaw profile type exifx[rE /L,@ށ-3ȟ&Cf @޼?o_uD=UGyFk=?So_}̡kyaiO&?.~&?>_ fBs Q}#Cl\߇Z$֓T~EX4y<j8o͌)Jg.5R6~""!C)!0{s~+zA3||2 /ev</#wΟGt{J_{:kg=oSy5=8:⦣M5Yb' 9oǔZZWf)XQаJpKz;̉%?\^X?֊qeB|^S*%N [`{YuwlwWw'X"L*T TZ)JΒg2r0vJec)]9G0I!ZRIjmG*T;lZoҴ6{aKwRJ."*Cڴ9(n~:ƘN<9{9W^eV_t57uݷlcOVMLm<SO;3μ@[o;ڻ_cj]~G8,yͨXW@gYTk-&;NQ6/%'vGWu UV ^E傗n?bOgQcљuׯ VZ] 7eu#>zL虳/^劖!󗆰ִUoO7Myk O̗1Zާ R`)Oe.~r7pW[*i7{…{jUXgToG^1?p(zo4s[ʘѪl},H>; ұ{)܍Ŏ|6Z6+mӍ6E;<}Ȫ+Y%4,b_F2Ē|mKokw_^(n[P\"E, R[^6fQuܓޒ&izOY4mh4r0(APyo;U䎾, qe,"88L!%]r`9܆.̐nv~qSsO{)̺3gϳYhz3"nT{{$:¦RNŸ} +'Zm .m{Z j3,:EJ=}Rz7*#%#;nA >y c :c>X,z,[!}*s=NW#ĥv L 249%S {k,-*a7.cGh-"vc|˫yY (8BQzzը}Arz݇e9 @Jʂti6DOl#׌3x"7N:J}q-L\&mx!Ľ_=܎@6MIWWmT1ڡ} [u17:PY۟CL D8O>l>xiLVsT[lX3@:a2qBV:zr|k\;h,(exqf8dǜi.H]Mg@V_7 /#i'jkk gBvҜ/-!mH%zQKL$Y!l] MwFO2"gqnNKHáÜ&7ŝ6bH7o% ArR4Ʃa:4Y"v22ѩz*fy`vwpWOi/\WPJF6EE6h&qM`q]}#&F_^Y`է9PX0L* &"JM-0qd,}V/u\3WmU}^4V{6((T<%ji_Z7#]Ixhsr1`ESS F+H#19YBo ˷vɊxE'sNc)iW2 Ņ%ξzGL/Ih ïZͼ@xK6G BtN[MՒ3?!Gv?>?\;k jѵRRr'bu1$lބnqPlܝ/L<'T;DS=nA9L狴~P3=F;^znՙz>i$QL|D0h4mP>0hdט^f=DbOpZP[K0#E"ˌ+Utv)֣Y RY.pZJF.#3^Yk_~3i#LWa!=z"ŝvcec ]H4,zeDbr͘ êBJCor8KDTqq 'F.`ѬI9=ݶۜZ.,c=GV "Lm8I$^334ߙ fZl^Q~nf+Hbf6z}ԍ[vG~y d"!-Aស)R&aYe,k.à_|?agc="4M,nuð3JLPDa^"P]-b=9mEgwk/N'tm&:_NB] c4V`M6N_P>:(`ƏDž=1|. ɭ|8^jC`Z<(v`fDEI R(+31;vKnN(H'l |f# wX/> %__^'{I 1E#ޡAw23ROKb shIKr<2͜8sݓ4E?_v"?8-| @gK2;/| //s'.9o 3ԧ_"L WӤEԱ7_ou/ Wʥlz@fIw;- G9Ta61gRވ :L,3.7l6ngi 3|C6j+! a4439F҆ ,` IXp/WObm~S$8 페 6AHWo7Zэ`ݮMO8H2TLNY ق^q:Kj8u.iZ\)eAzI:u'b^ O_HQ5r1BHF]ʈOW#*s'7( )[&x%5Ӯ0V%p*2%"r]N:) aӇ;FyfŮ>٥9((>z~?Qj.=PGˠ̛sr@"kZI|(>wy\7R7ZRO!ϩ+3p!lݞ1SuȲRAKc][s|sTCh `&=ݡ p3X D)ޅ?gb,%S캟aK)7#tm`*WxC)P>İS`u](iCCPICC profilex}=H@_S_;:dNDE EjVL.& IZpc⬫ ~9)HK -b=8ǻ{wP-2j46J`ݘF,cNh9]g>Q3|",3Lxxj68X^VωGM #8\xfL&Cb&fyS#$NBcgXf{32i!E,AeP:)mprȱ4Ȯ~wke'ƽ`80о *}8 \  |^ih#wnhp?)gMiZzHRWQzww4z?xIr1T iTXtXML:com.adobe.xmp 0,bKGD pHYs.#.#x?vtIME #w(tEXtCommentCreated with GIMPW IDATxwTΝm&ҥ"hDb?Dhh0 . E)B,HòeLݙGRL"_ syL 7~o ~xztzaʕ.X[ti74Y;(4C_:t(@VNW^޽{4-C4g8n{pyyyȑ#$/^=J;vCDiV%nMӒ[D${a!2@9GM ڊ,+g1*=ϙCᚦ%3E0He=:! 2>>a֮]K&Z^aa^]ו] t:s333"/h`TT%"ݜNg /~® ѯիWu}M!r򒓓ٷo_7?hx4MU7}j{ȑό5*H6aʔ)$3IEM'HM4AbM~_Ƞ9iGN5*@{5q]ÿ2-MK|1y6g0eYU6ZD$xgwfPZSigi쿅\+W*@-zSiltM8>W]uUI@sh޼yHdሧ9ZV||e//DN&F'뭷$":'dJ4o'Mѣ4E ͞=;H믿N1bă [NN4hi2M3111ZsݽF}kQQQi|4MP"--ҲǏw ~w 9iFzs)@|'K/imށrHyLξp$L ߿7JtL8f@㵐uJ³{W HYYY7UWW_PH93"jf*1|v]^Pfp'%%] "ɓ'9@i>See*mYV0RRRq8*/։)"E]Tk7"bu5MK>I )qqqnwO,ADx㍡QT t]o߾ $ y76!!a*9/(..;j۶ ..+,. ;5Msiemşb*EZZu =$c„ ӯW%h4!--m~m~42#..͛7w  ĩS>p">efkY1ضn$ 8p @5M+֭$gϞiV.}?N% {'Z&"nEfe~/"yWhVB$''O 'O :N"EYF?3;}~dvK.n/))yز*;͝;w &Hڋ/5nmRj7YD\\tPaNN-p*Fv+O ZG!j֫WD$+$@wV]sU xƍ{m՜L򐖖khh(Tb`hZfyyD@t/'@GBjjj ")M8uB{,R^:KE#?,]Ǫin{N][[0 %HOOjذaD"Atv&$$ܭJ M8qev׮]XUB;7nTeHSwB`[li}׮]aUh q[o mP,DlٹsaОH+V HAAA*{۶mQnݺ "l6=35I6M[U8p]6mrrE#93228^l)8qFa6ٴi-"HdmۆGr ?>}ҤIohBe{EѲ,ܻ 0K}eЖ ⋓D$Kٿeh4z~ޑ#GYDp8Fx:4b'mdG+((S__A3|J3`ǯ4*1ke-[JJJJT&pd>o߾\e6yPi={LVڷfikll|K TU[[{㙢JOXk;vB[k4 㴇~;MhCm'Tho\!^Z{*++_R P]]}EmޫW3W%`?{+uW۷~{ov$P4;wn; Hֿ//^8/Q%`˲BNs_|(++"lRӯn_n]2SUZ ޼RDT݋aΤ *@+>xVZ٥KkT 0p8w]E쪪 8DƩ=O%`ժUǏߧ?+{޽3 8B?o|wSgeeݢJiݻwDׯ*۶U{\ ZPZZg麞HȶiC JDI|a4gֿcX=z@K93sbطm[G_yKmUVu3M"od,4=\멧i*c[Xl5k>}_ ֪R38#]X ݱcaQh_+rz{9smhhؤHe&PTTq4޽{p8zo]]{v*޻w:ٳ,Lh&'NtHr}};*}sJ'lx*cY_+U 'Mbݺu&suubsTZĿd.99G?ۜ'T@QXX+11bÑHv}}wyƍK뷫Qejv:*MLܹy kkkYxW6o_|Ň[Ҷ\h2e χ@SMb1*M \ΓtǺuխU|>3q:,Mt럄Bٳ5qĝNs*F5{+H&/\KjjtU6 4`iii{/[_YJ~Ն : 8yqӦM=55'vdee}bOW[[в zov]zAܹsgzzz U6MǟG[DbVz4ctݩS ^yD N½=s躞P{\:^\sMq$ivL>rrrfwС$ Nb6t:2NMӬڰaãv=7o%"*̽g?ss%81q]v8Q˶֭[/"VGoΝeeh#{́+,,+|駟>#gyH$[~5 c$qE =.CpU)));riZm߿]ҿ\=ҊaSĿ756o$UDFh̘ ^.jg֘1c 5MۨJYYYwN6laHHLLT$lf@oE$(jl]X,òRUu>A|W999ST9mzwVW]u-5Ms*1gdd\ՅD ѣG/!WG {<@i뮻yәJ̶mvm[=zX߷,AxnyNٳIAuǟ.k*a4K׬Y3KDbtEN 4yy=$T(*0m[|g־}z={m,(i5o`/b }__NLӬPh-IZx7m4MDܣFtvU$l;۶mF2M7n\Q @9)PӴCMvRyb# g^zPw}weY H$eժU}zP2SNSNgwUy0*a$%%Ṫt:O;vt=H =USNs9=enG 4hP6cC?~eYG*1ݷovӿUUTTV%`{g}:t /,+Hii'89v2NΚ5tH;=?vS/ĸqƊ绫 Ge4Z*8q“T 4̀/"u4meYtI,^,Y7o޼UO܌37 Pz (,YܳgU mkbcǎ?5ǎJE z4 :nݺyzyJ1[UԥKҥ˪Um7oRRXAW_p\Eo~4~[U=+pܟ(3GU.k"74۲Fi&Ɔa|Ym˽^t1~P@L0W^p2l߿9MaҥW۶]EiθA]tӪUO4y];+6}'EZѻwh4SҶ_Rh/ث:Y[Lϟ?0ZUS4ݱlٲ~t=85\u]OT(yvW4ˤk׮GBBUuɓ,"@*--0Rrݿhaf۷oJc4ͣ~AW_v躞<&nV;v8 vNh;X-jPhf?~;-\[XWWweY*浹svg-ӊ466UL[]]شiK2ʞThY>S >YTTtbhkJ-Iֲ*UY$).//"|a,h?z/Q)p8Nff滃cfdd466.S%`%!!קhM}vG||YYYaUalΝ;-~t:pbb^ZSSP@[G۷oO޽*ݘL3gΜt˻K$//omۻ r8g{m>}' ͷm;̲8RXX8Qxߪo>9)`ٳ@pyPUنal/Rc&۶-U֝{^ }Wf۶2C˲_oE$F?Z۶}ܳGѣG+W+^u=Wiτ] (E֟hyر/Og„ 3Nk۶|YǏ +JmQq|>H*\.ٚT =6>0<P(27n1cxFB,˲U}»6L_2NJjjj.A-:sMiLVjV!"&Cͱ+++7|3h^˖-KUYV x uѳgӒR)躺Wrrreee3222սJnѪUR~Y,Yĕ0p(c_{sIDATi!'"u>OڇX8hF*gggk׮Af+֭"̊c4ǔ)SeemV(lGt F&믻޲mT;#{=on1 R*sBσ tTVVŝؘׯWtϾoQU4um=3xE*ظܶ*)4˖.]:J8p]'+Vjqmł _ ŋWm۶o˖-;#3i%"b)qCw8nI@SH_s]{m۱#G<ߧOp_駟6L5{¾Nfrs*S__b oٲ%~mʜ\ظVD~PIܹ4uJ 6߅.kJAWUUnJKKsTt"4tP*YN㿵SZZz7).))9WlF细DhPhLvv/T vYMM.aGd)zi}L|cǎJndߡ9kkkgXՠR!_׌k=8p*mOHK|Tہ@`ѣGz3^{IZ-/"aaG`4Y虜|n Fu $y-..n`ZZ}*6,^F@7uT#77wI,[R]tW_dN6l{OJ7 #Л/iEG~$T̀_Ui`0E83CX,v\ ڱ!Ch"FRp >FN]UU?r*t:{{q"7v} èTiVmݺI K/u-//Nk4Ͳ* % ڵou]WfO۶h4… ˄wh!u-w:z089a @3w.Jq|K,Y3Mu0Rzlڴ7 }6o/SlYSVVv4[LӬU*))y`ŊIt??Op8rw}}%Ç7hb%`pJA?ܧO\a= ߶ߤEkYVضC"޺u+,I@44̀JAwJ O6s,ZiiiUJL,,,,?4'cƍK-ڡ҄">>Nt?Ж9C>}zeYŊm\rt˖-?dEȟ,2:)0̜93ާ6ʲ,/R(l[D*G'!@'%%v݃T ]ox]9rdUB۵kױ4ÿt|zzmu]ljhJ=Pp8UDRW$85[lIwW꺞R ;m.QWUt1MF>xI$8qJA۶X__?o< o (VHt|DI={vZQQ݊}>s"@GP__iU}SVVv%K<*8 ;wҭ[U4h4p:׻14 eff8p`:#'`Ȑ!e]2eQ4]yqʕD" *t:3I8WYVlP([yD+ o]ve9t?|Ν;T4ޟYw֭ȑ#Ϛ[KRRҔ'|t? L?ii*i}&Nx!oiŢЗ-_Cem*b߈ С͟?@4g۶mYH$/g#G_ƶ;~+"aF:npYYK*niKӴ|2Ho 6t۷nBqۆam\Ú5kHTmiӦ/HN?)OR-)++[^ ^o]CC;"b;x ᣼iӦPU(E> D"ߨ̼z i7n#''nQhAeYewP^>}vX[Y@ @ѣGk"v(3eY8 L,T- /'C*q>bYVH?aT۷*i+[ hE"\rI7a-F׫vGm^zi.kx3 F,{oh׶mƉHg,^w߭fž1cƞP(J'iZ?'#o˖-}K˥7mb'qΜ9ψbb>|ܸqN $|y\\f7~ ˲8Hdsǎ3QiDV+ .uRznmǔZ dYfuu"fP舜c\.׹^XXoFoܪ畚i#))ڊqLH:޾}{=W4wee=z? <E"*rz9ξ¾$ɭxƦ^Z캮KI_o|x&tcz[TCC÷>oC8YEET˲To۷E3{O?t 4MC/,v1 fgggZ}}bȑ=E3RH:(0rPC999KJD$t:wQXzZZe/a@n͙3Gk;<6M6FFpRRR> \ah,0/~ksL;v؄X,SH8~3Ld=r׿dYVJWiu@Qh{I,[D4ʕ+WB4iӦ%34MS(l۲˗/_ZfͣaTpO<ShoeE+^aF@SDi'mNOB{j6H4-˪ݶmQ1@]["b׿Ӳ*w\nu&LDD߳Ǜ GQ.p: }D$1))*# @۲tx۶'\>[*|{KKKT-𬬬_8p`l(EЦhg}v׮]ޫZHdme$L:>m;RܺgHGy$Q6{I޿ m[}P]]}@M8D$U[ hYVСC<.6aٽ{'B '-:d_G999?>a@ƍw^iR;UQ Wp U-Xp8jq{[nM6Bk'7nhY_)S"h%%%%Eѽ~b/ FVm)" *mvLDHxʕZIΝ[ba;SSS+0HZ."N4iٶm<͛7?i>\G_kIvE+H_lvLڛae˖-EɈa*R( >ʽ @[hQgMzZTږeUΛ7ﰰV۷ocfbUD3DD,Y$c{<maΝ@niD ,_f"¾h>h\anܸ1=zZUIG]Tհa4s8}\.Wj־r @ۓoz'9r8a-k׮DݪeUUU/,\0 h\_жm;n8vPOToMNNZUUU|U?|Ee>.踸^$$wqZP`0xDD,Fv͟??Zp߬YHt )xoNm̙I*ذ{|@i۩>=))ظ?=,Xv\- )hN{zԨQTHСC p鏘Y^SS3?//oh?IkE(ZZຮgN={6iٳr˲ªp(vQTTT\FToY9{lFS2uTMD\=ziJee5Y,"4nS0tװa_lN^^^~i u˖-}wi@{ܱcٱXL}KbpxPpjdjjÑRЦi|7F_h!Cl4Th4C4M/ҿ^gmۍGy꣏>ZB^7ٴif'$$4MeYG 3ʻņ #Fp:jJmݻA>1`POLLth|0leL_ ^MIENDB`photoqt-2.5/img/filedialog/dontremember.png000644 001750 001750 00000006033 14006707323 021460 0ustar00luspiluspi000000 000000 PNG  IHDR  1iCCPICC profile(};HPT ␡:Y8jP! :!4iHR\ׂŪ qrtRtM -b.Ш94N3p:0IzŎm⺥){dȦJAZB7[k՛[@f"e}n4ur?nbKGD pHYs B(xtIME8' IDATxn: ErUlߺLeZlG0HC-TYrՋS[\v%y뷽]nIiz\wKH[׺;$dwH0'kS.5Az-I# f+ߒ4@D[FUwoIZ4lrjR>\k&5Eg4~)gq&̾eqeIO;7EbM{]qw_Ԃ:_ՃHEp:JkTc$ҩ8~'I!/-Zݿ#'d'j}Wg,t̫%Zz0EZ ÖݤV u]0&t]YGd[Fi }Lx<]o=3&dž%pzV$Zӗ8fu♤A<ȃ0Hc4&M$ xC'qi@a[ۓ(0:|_޹vw<> @:.DJe{۱:FśOgG8t?MK1<:{Y!Vg|'4>{4} y;JG#cxe<w D$tO&" (+q>V 0 aҸnD=͓g] (Y$`=3wI H,:i}lIP qV,*~GaKma/b[ E$Хݯ& GvLcoG:1vHaY3: ]FqZ)(Ic:MN[HCѲp*{.&;ii^\Grm_KGzu3; ގ E}f"Dx ؒ씆1wE==CΊj#Zg;4qO皞r"=n9'Y]$#PVuS'lCPBOzDYi[g:Jcט 4_W'iLE0H;c.iG8/;bTqL]A&ɀ%/kxtKAstXG sGFC K&JdADAdIaycbAA H4#Hbs/HI0Ȃ40bzH^x{RT +yX}Õ0$q;{8;(o nz6(a(huSI0ȂM ,4 p(Jǭ: RudaM!)dQ ϤAda#4êa؊@^Ŏ,eJ.)C ,tx0D& L181LdaatCBQ[6FdɝI-$_i$7A .ES%]nLēےD ! 6C ha\Djbi# QoSIU% ےgkTAGiYȂ0ޯ) RPdA{`‚YL/Vkz1bEO'0`z-)du(h|]]F[HP(+ ?9=IgpIENDB`photoqt-2.5/img/filedialog/unknownfile.svg000644 001750 001750 00000017731 13766352720 021367 0ustar00luspiluspi000000 000000 image/svg+xml photoqt-2.5/img/filedialog/backupicons/000755 001750 001750 00000000000 13766352720 020577 5ustar00luspiluspi000000 000000 photoqt-2.5/img/filedialog/backupicons/image-jpeg.svg000644 001750 001750 00000015005 13766352720 023326 0ustar00luspiluspi000000 000000 image/svg+xml photoqt-2.5/img/filedialog/backupicons/image-tiff.svg000644 001750 001750 00000015004 13766352720 023330 0ustar00luspiluspi000000 000000 image/svg+xml photoqt-2.5/img/filedialog/backupicons/drive-harddisk.svg000644 001750 001750 00000035136 13766352720 024230 0ustar00luspiluspi000000 000000 image/svg+xml photoqt-2.5/img/filedialog/backupicons/image-bmp.svg000644 001750 001750 00000015004 13766352720 023156 0ustar00luspiluspi000000 000000 image/svg+xml photoqt-2.5/img/filedialog/backupicons/unknown.svg000644 001750 001750 00000017731 13766352720 023030 0ustar00luspiluspi000000 000000 image/svg+xml photoqt-2.5/img/filedialog/backupicons/user-desktop.svg000644 001750 001750 00000060526 13766352720 023756 0ustar00luspiluspi000000 000000 image/svg+xml photoqt-2.5/img/filedialog/backupicons/folder-pictures.svg000644 001750 001750 00000016173 13766352720 024437 0ustar00luspiluspi000000 000000 image/svg+xml photoqt-2.5/img/filedialog/backupicons/folder-red.svg000644 001750 001750 00000012353 13766352720 023347 0ustar00luspiluspi000000 000000 image/svg+xml photoqt-2.5/img/filedialog/backupicons/user-home.svg000644 001750 001750 00000020230 13766352720 023221 0ustar00luspiluspi000000 000000 image/svg+xml photoqt-2.5/img/filedialog/backupicons/folder.svg000644 001750 001750 00000012432 13766352720 022575 0ustar00luspiluspi000000 000000 image/svg+xml photoqt-2.5/img/filedialog/backupicons/image.svg000644 001750 001750 00000015005 13766352720 022403 0ustar00luspiluspi000000 000000 image/svg+xml photoqt-2.5/img/filedialog/backupicons/image-gif.svg000644 001750 001750 00000015004 13766352720 023145 0ustar00luspiluspi000000 000000 image/svg+xml photoqt-2.5/img/filedialog/backupicons/image-png.svg000644 001750 001750 00000014702 13766352720 023170 0ustar00luspiluspi000000 000000 image/svg+xml photoqt-2.5/img/filedialog/close.png000644 001750 001750 00000005157 14006705535 020113 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGD pHYs.#.#x?v IDATx?U!ρD(hRqc#,M>  4D0V{69}Z{??)Csdܫ"0+I%}޽{_j&6GKz{ffvefO썙2𞮇wfxg'w6fvcf5lwt33"uFƟGFƟ?p$3~"uf80cD,?hY1~"Pm?8ІaD;[;N P`DwOvTpDW8~"'0~"BU?X@`D5Ɵg ?!ߓ'D *;"u"e,"U,"E,"t,"3X;O@m"`?!XO;$|ÃNϒg*䣤^J+t9'^H?S!$.IF{OhI @OBE'!#"? ǟ0\G*oqKxǒ~O4x'?N7N7VYҍ$Mns=%O{?0TJ_ {6x'Y.Os8 "+ 8  +@8 EgrRH"3 ;~)`$r®ɳ =~)h$s.3 ?~)p$t¦f51~)x$uªCf53~HE˳jjR#8 g q̳jrRc8 3jvR8 cJg\ғᙡ0("1ՈA@!3"pP (Dv!0@`0D`g`#8"#㯆#; +0~7F`!؀,"+{D`0,D&0p Ef"w` "0\`! o0@#DB`!gt="N1>B*w6cB"3uҁ_ t>Jcgٜ&͖gapPy!pKM[P݆{9g)̚@s_0џ̲rpYCe5fg:`aVh"n֢Yf5`V,4PyYD l8Ь]gDB0yY#.dVg@pYEg6afr/]dppYUw*eU=4MVxIIإ63>ҿJN7ܗHǟ+n~2!={'7IKT8f IMv_k~'gIKzP3UnWiH{>'D @'G @@'F `@'E 2+3{jfo^uߓ~xOj7vSHn{j16k/M=&ZG_`^Yt11;"EGaq"/S0h{ݰ 2 , C 2 , C 2 , C 2 , C 2 , C 2 , C 2 , C 2 , C 2 , C 2 , C 2 , C 2 , C 2 , C 2 , C 2 , C , C 2 , C 2 , C /!_ IENDB`photoqt-2.5/img/filedialog/remember.png000644 001750 001750 00000004752 14006707323 020601 0ustar00luspiluspi000000 000000 PNG  IHDR  1iCCPICC profile(};HPT ␡:Y8jP! :!4iHR\ׂŪ qrtRtM -b.Ш94N3p:0IzŎm⺥){dȦJAZB7[k՛[@f"e}n4ur?nbKGD pHYs B(xtIME5~dIDATxۮHPl V7zBC`pMBX !,HyE3ikCXlêc d!,"q :(E&4),Eo0&}< m=,.)0Ef&َD`l ),FAhsޟ[5 qt:t1sR>0T/0~ܳpAуÄ!,Ĵ!0:~v$Pw(s}"0`Spqt>wN9٦l=S 5ȳtPGڞו}!4-?!`mMFDus-=6}e 5=7}fu uߑ:6 !04r;B\h] K`,^)'08YA`xpUۘSeqHj'lI4#*E&_6sFG,l C2Os#.,LjN C`;@`7==+ EQɫi`8~2a ,>@X|!`x!C`@&z=l[=PfȰ‘9BOx`vrF߰]oP[W1٦ٽzx07$ϨK{>%,#~un<[W5o_[ X--A1w}hDy{Y]wէ=%몦1&h!04VYp:I)CcS' 8u.d%' `0*as*(ӫ<2~ P` WwOڒ`ͪ-$ ]IIʖA & Co~ 0X &~yMu a?Cx@-Iqk0v.LNh%b-sHD͗1LaEgF53] a8KA5,*btMsd uv E:5Aa|P(lH{Vn';;V,M`*`it7a0{NoIFFpE2)}WLȂ7igvӅ #MGzFC,pRM ѯ]sE=trVIXޒy@T~_${ 'Lp쩳['Npm%),ס{р+ٜC܇f|6Ql Ŕ$0GSpr0a !(¢F`] -,ƪF)CX %<6׹=h4>.0RNO Ô!(P#U)sHq tԌWnN+%'Zpٖ0(|NIENDB`photoqt-2.5/img/filedialog/backwards.png000644 001750 001750 00000067527 14057352753 020766 0ustar00luspiluspi000000 000000 PNG  IHDRxNzTXtRaw profile type exifxYr9E^Fw`9-G(TU?mMdd ¿]{M Wuɓ__b}~~Wx=|!Rᱼ0my޿Eҷ?N~&?~}z0'zוy}+{E2pkg\/j,MV~UeXz_<WA?^C3kʷK}T&hXyPO+Y+ oՋ6ӯ?s[o<0~g_zyDC[ڗe+߯?~O]5;>:po_gZS2shHwMhxJ> [`{ܹ*gwNz'D\T@TZ5gM:v3Y9W ;a"4)ڼGsln2I#ZfӠIjmG+T;l֚4m6OԢUv:{鵷.PuϑG tc9̓wOsUV]mXs]w۲u=5^sb˘R5y2G|1JQUblJ|c\:=6duXZqݢ-fcog=)}#ojhU)\,9T;ձN\uha۽pǐb\a#F+alIql*T7=.6Ǖ!>B+^°vo&m 9y1^Tb/6YH ѢS:pqI\ 0hl$(ZG&86>%%KX:Ԃ *uxUm*CF,H cPo= sErz0hA P܉!!NEHcÖcy!PK Z^M ) ե03̱d*ۥp JhGK'܀F0iDzE 2+ǍmqYi{eu*"R:=`7skn->u⣮AŮ_|[!1 Fjv8V2hմ <^FQPt`J_ujR܎|@:K\^T5ӽpp`$9!t6^D?캴*}4> FM+QjJ<PzV\mc\,ȟ2OȥrS$!˥͢]deEHjU<٫Cc YDw& 6$4D ='Җng]T1bdgkr{4iHYPII,uV+6VnWy{BTcKBbq@.QopJ1v'kC{;v1ШKşsi=g]- N=%@ʤ(QqMso0t〫^sȻo\A/TqGۆ Ż`R<6ߪFw&ܵ~A.dY@nvX ->#j0>l:e\DgyVSՠVPt\ 1n2U35pZ'G4ғXqik%Yo\s_ol ]X7cv{Z5&UunG!`${JzCN^U˷ēZ{Js#BP 4D캰N&_#̿eW7[='8I%bIO% S3LTsQ>d'ݣ3~^̺>GrbM:n pd7,#,,Δa$IPJ b s79)iONU$~J&+PȭGL_3ꁫ%UooHr.DpBE#}P5bD.{VRN%py!R`%%L&X+~uL†gQJ/ lwSW Pl wsYgnjfdy J˷VHȗ!~RarjO0&nbkmA"hGDI &ew-CMa%GNƛ귛)XzB{tџqFxR97ͷ5CWņЗ{2}ihP`t! Zqg CLYCY5?G'ZMEcoO~i,0_2-?%P"B坓sVqA$O_|iM0 IȻ^ aC>#?b߫Z3#Q+OҔ3|mR]~N, Q<!qQ}2R ,8_#̧T >dd};Uox; O:'$HgfNv>rh$aF/@e\t)\?1aAn1nw( AČ(0ǣt+^@]}Bx)r-2nh_2N'cdqBfM8BhE|EΒ}w;aob~KG(Wxn<7*AyKߘshplPI7s8+51B@]/kIH* Ds: qq1T8 k@tDI A!^ţSN< G_&ς;@㨿C|NA6+N$iqǚ#o&*B H~j1AƟ0c[S"D@febĜ' f-u4Mu|l{{ O'r!<v$D & A Kz`rp i8 ,*$CCZ@6G}Q_GHOD&)FyޫG gzTXtRaw profile type iptcx=10 '$i9UGs~i[p0yr952czH6r)wxS%1P !qbQfiCCPICC profilex}=H@_S_;:dNDE EjVL.& IZpc⬫ ~9)HK -b=8ǻ{wP-2j46J`ݘF,cNh9]g>Q3|",3Lxxj68X^VωGM #8\xfL&Cb&fyS#$NBcgXf{32i!E,AeP:)mprȱ4Ȯ~wke'ƽ`80о *}8 \  |^ih#wnhp?)gMiZzHRWQzww4z?xIr1T iTXtXML:com.adobe.xmp {bKGD pHYs.#.#x?vtIME . rtEXtCommentCreated with GIMPW IDATxg\ՙ/NUչjVlA !,`.3g`6xy1_q1IBVhnuV'~Py޹w;~3Iߞ翟>@(?0/_RئMѣXP?>TZZZiZ#.RGI<e›ʖx<.V_Jį~+6yd_yyx۶KKK{CljGQœFJ\DXU=^~e:22R)jƌ3LQ6B0GlYAlٲau}>-JJi!TC ߿?\SS3`5EQf3ƣ29R4{eL`-Ue.缜RP@"&LP~LR]ZZsIQrJxJ)~ y\)216G>ou,?À盡(EQ*1 ˱cǔp84 ( u^MSJCq4~@~_/)) w{<Ŕjy4=}VWWW)U9~Y|MI VO8azzƘ,zkUUMQ2=Y]|' LӜi*wSW@x؜9s"w]7R:1&O~aޮEт}>:9~F2X gq*&M4RzC081Š #^z)ɒ%튢4BJҗ d 63@.zjUUU~~~T)p8yӿh oI}>_0??1//o9絜RV@y'ط-oMM͍@`!d"cl4 +a8q$//hizߘIBH !fJiʁ ɓ'rUU5MR:MUYy> @`=|:|c,3{loj616,4tcP@2ŋŕFUUo7PJR? dwy%%%WBЍyyyRU]I? Xees>9??u0|E@QQ""=;}G`p]^^BRQPٳX,_UU5`s9e{0/\7sgs9Sc7ɓ***U,QJZ^6~afr^^۶g{<LfP.t۶mP(4~\'~ƏU?d^'?700Ӄ*dzRӴ馏-G}}Zaaai+++g躾DUY>e@,ꩪ*(,,P]]()3~\^` ,Єeeer'wp蚚|~O BTUs>:C 6::~_]z-[\M{=}ڴi%@`:|+t]_LO{\)e\1dYVp4=qn…3?OKJJիW]׭ 5M161L֐u~0vGeBHq 8py^ͶmiPEM)-ώIەL&_z%˲zR188hoܸ=p*u}.tr X(?d?}0ӦiB^ۺuWU%lHftuuUu}1t5!s^ٲwݨm;o#ȹy 1[<';^-ZJi9JUlqREM&/\pfr}eƍ6RJ:s>`U ~q 8lK.m+**=|pǨ?K Wjhʕ`p((rCzsd !ĐrTJٙJ>hnn~''!@xٳgp۶] 4m%?JgNBqwvv5k;ȗ%塇 >o+)ŪN&PVRJ[18ΙX,ʕ+{GyT0\k3fhúiǏ_YPPg}-/eGOH)]FR7hŋwu.r%?#:uj!??|0\2XT +B#hh蕱&0FbXϹ{ -ooo444^zXcRGXB\˲:'9F\rիG\co}\}}ʂTUmdUQJ8әH$IR(]]]իW(0r/oŊUUEJɎҒRFl۾H$^}k{=38_GGǤg8CqM,8nÇ>6F0Lr ;zhɓ'R`0x(LbPY !,bs&L8CP@-G?nݺ5^wcl( R/ʓ5}t]߲o] 8GlΝ\QoeexUU'@~BHRϖƟr]OR^w… t AUUKTUBwxrBB Mn``şb۞H$v$rlقȑ#|(M,VBtJU6,L<ѱR:vرg?Y\ )/e:yd]JR,7nPe24!_YY٨i"DUUr+)J }_ !CmR/~]ZZ8qBh 8@UUe===y@x٫&EQc~r }'I)eu4ڶݲsE7n܈}+y:|(iZ7lx<(ge67}mo4mW\%u޼TOOb !' _`ӧOnk(bJ? )-hwa{?v0˿t 6&9G=~ɓ'7j1VA)EhRJ4͓BKemB4'!s{}=334m1Kv~u,t˗W\Ei ;wBg( 2~/u[LG)D477]f @.6jjjBdw| J !D[6O؄… )R>oi7rk?;VBaBȐeYL߿{ʔ)W!&?u㏳uJdEQ gxRX˶g"H` 䖣G*jUUU˻󭡔pT)RJCJ9nKLI${=`b|mUiN.,,We|[?6@okVJ9獺ߡ(J#c,qceq>O:qdG'L07(I)e5c1VK|bo ! ؙJ|8y䋄rٳghtݤJi9~"f4!L!Hm/_8}4nrͣ>}Q񌧔J)z~JN?ӹRʤrĶ}}}?O$gpjw]r)_rM7|y@VEQRJBH$d3缳2J0\ /e˖ !錱RJ evRZh,ۖL&[u|hhw۶mɯ}khǎEӊuFJ6t뺗 8A)=222rԩSW7l#9 MRR:sXӴ9T4Oa!?>^6۶dD"ܸq @yWI4Ji!`0QӴͨYEuD7)S FVϟ_W9, 72Bd:G#D\׽ӦCO?0\l={6 *V|5MA(f7~)%4 c/!wԅ OS WktĉDۻwoIEEF#clc*!sIrT*u <2qH$td?m˖-T᰷vM橪@)-J7~ nRJH&{cmܹscr3DVVVǍWx<+H-u; &8.u._6449o$cBC2;RʡT*h4zÝ ,0O7 @o/^f1&QJ}(OfRm#R#hC>O.5888=u]s~缑1Ge2[\6 cO*ڭz[oooԩSG߮!whW^/,,zof-!J)`}r%=as]@gg۷w=c 0QQozw(20 !"B6BHs*:tܹ]O &ozWZU(Jt!D])Rd6u)CiM&{VM}>P0O2 IDAT}SE s4M[irX !Dê?I)eRўL&K)wuu׳tR?!D ;S\\\H$ʂ95]xC_6}r8!v]DOO?D"۶wq@GN?>X^^>3߫*JROpmo&sr4cCCCD"#ccc]x:u׾?GܹsTu0aœ`0,ܬLJiUk ۶\ ~O\x+~@QԲqUUUVVVN"O✏(OFs,kO*z4D"?iҤQ%Ȭͤڻt]_+/ ]K)m!DO"Ǜ._|e10QRJ]5M[9/ElBCqqm߷o;e u]> w6Ǐ/[I)'35Md|R9ӒJv4iR!!8wy7+VE)zLUAR&]m5MsX,kzׯ<#qTr܁Ǐ_\QQcRZ}Mq]kӧc#hEOrg1T%#W!$!r\WW+FBX:׫B)^4\.q0]K.>O? RJ E?!ĵ,q}d򃁁&?TSS3@5~)-I$?O&ǹ5o޼q>@ȺΟt]i9ۻwݵ~q>@.B!uۤM9::SO]~ dߊt]Ͳ]e,biii~@6-ӍJ<k;z!J-_RI)z{{_?˗zHB K8qȶ{N>=YDJ)mu[g@ܹsO}SH dU7 !X,w5Mkmݺ5/ !b;=cccSO=+{ !e^R?44t7xǒ dߒ?nmcAy}lذFu >!qɶiٷe˖o&YB>!H$;wN$| #J)-g}wׯ_o=89eDB!!:*&뺭itT{{.iܹs%/]L2%y74I)G=>|e+r$JJJ)/G"]w݅Y2M8FFFN۷O:}BwA!Dŋ֬Y | >!uR*.*ǹ622rqd2iK,}pGs%WK) u\׽b---o]ƣ>)@)eam>=22`  G/Rꡔy<M|ʼnD)w}QT Lm'M|cW[[۵;sd@%ax] az'r8t}Q۶=^Ƙ?2'TsB+4mz0\&R{ƍNYYؿ?&L&pcL%(RP~QJbUU'|7:6m" dÇ=3f̘hFUUi4y)ʓq4R݄6)TR/]T'e^Ed.!DJG!,kkNյe.BL4m!ċcFOBˆavMMMTՍ9sfc=f[./b"VX_._dɍ~cl2!RBh\ w-P@B!.]xJ)mTebi5MB)BKB\˲N$`]ר 82{"8gmccc'8ww'  +0 OVUue IӴFJi!! 4 !=DbT*uwdd'?{ }ߧK,Q4MK&;^ݔ X TE r]0~8N/<_|655M6|Ep.EQ3s\)eJi~) .2Ms( 3gąB977$7o6^`MMM+c q>EQ*)xqfbR1V(J(󫋋C 3 d޼yĉÇgd2yAJO)00 ॔(RiڴfRʡ3f Y?l2+m nu}!$RA2 ضm7;s4̓.\{ԩkÂO|7ҹ.2MJi:s4ݶm眷 QuPVMf!ERf8g!Xlw$9/v~[J#@!'NKJJJ<Ora Xi Jiq dn\׽Jwycʔ)>1@\gݭBB>x͚5|9U/T-c )AI$Wb{vN:5B!e?񏩮,tMx<+cB,B8NeYGS۽4M8q"Pб1PPQIyyy+^׻Rg/'0]m{01{ѢE; &O {{)r=,!DDJ9$422sי3gO|,@Ç40;TUN)QJ X,ٳg|SJ@HoV 70? x<9 ͆a6M󘔲'?ɥ'|A_>{Z[[[uYY2"BH-^U*';&hR6'H`mm%B B :Riڲ@ p(G!'8WlG9~ڵӭWn(&Bׯ_~ߨ8q~( !ar\(9@X<4w枵k@hjjX۶]p‡((9|T(!DضݚJF"a)++>w\lx<G#^ /Č3RUUU':;;{Eu%H)~[9{2R&]B\eYE:|p{uP"+,XP YR/ʓAp]4̓6B\r}&oR:GJ٨ EQ&2Y!Dmx<~!@u!?PUqeee5M[d|3"nGcة{ڴi^C p[oτBSNUM<>Ji3cRJqݲf!H$r'?s=g<q8BFBH2<&c,ɂ1!Āi)ijkk;6{TBXSSSqEE;]1[UEV4YF!Q!DW<kF^z$!W @;vzM B J]1P m۾J !.G"c֭<?~z]]ݪ$2)'ڶ1v);y䩵k׎4Z[[Ǘ.BԪs>QQ߿}2= 4MsG2|q˲z6<+"O?5˲|~y&4>:rsêNTUu|><8}mݖ,,,t9͂:$I׷yC B+|>ߍ/PCd.Pv]moQJO]|ŋG/:'[p!}W׮]+_na-`U_8e泤)!D?uvv9F_͛ WJ˲i0??>X0= 3Gu+ᑑ?~ȪU>EO {G?9gΜQ4;9TU=kv\Q΂1bg{ޙ555ӣ(6mP$1 Lrsի z<;(701P Xu2JmR'lڴ|SSEQfis>R,!D !ղZZZN̙3{ ׿n^]]]UiiϷ1V 2d2+J}acc Àoᯩ))++SXX9$Ji>Gp@ D̶f۶JR&UV( g}N8___?6J Mf3%G +!DZu0 F[E<DŽ1"@ؾ};[풒k=yp8<(>Ji/ʊE㜗*2KU^iO>ddڵ6\oi  RJiBR^!ą/n?z#X^n@ڲedɒ"]K)'ivS X+$g~ 8Rʔ8䮡mͩTj[o(n&#fB1dHB J),}B悂B @ncO>`0R(,#=}RʫmzcrA@y`i^wr22ŋ%KT:thlUU-Hd^>m{R!:rv DiC|3 S9sxϞ=\pT*7 UJE7sq$IDATLӬm{eYueFUV 666~mT-^X.^غkRLei&BD.U 4@k=>=22򟝝ApŋݧN֭# _]tJ۶'{"Hk10%"Z o \hhhxe*=s%77n̷^:}睴,+2?Qa))J+&[T*&Ɂ <޲e &JՖe5ٶV(jm۾01¡!iw… @裏"]wD-˺)L.5Ms`r*B|}î]>^~};Spzk׮ mۇ3L[!Lce&.PʈaR͆aTTTT/^Ylٰyß}+(qnjRJQIiCk}+wiSN$|{_lD"Rʌ*\.Mkdddsvk׬Y3}VD%fǎvsssɓ;+01^uP(~\.wW^95iҤҥK9o{*ɸZ|>?aʔ)+,˺IJI)cBN OZrǏ!Hf;6pB?PJLflYYYk",bO`"8ށ޼y&(՞ё(//OyweYw+mx='$BpIћ>wƍK.%zTjaiΈq@ؒ@Oi;{W?޼ym۶ 3 (m۶yf1%ޭ$@Hh B|>ߙkdddѣG?9rg %J=ǶE"yJz8T9 U 9*CP^zd[[[a-i^LTR*Eu£P(\f+ y9*B9;w9n\TUeA~zM)ur\yxI?~y{в,4M !,7R R=S(V^-"AY:N;C)U-tҨ ')~RJ^Z͙3'aY֘iӦM$9]JH)m!@⾤[dZMJX׆aT{]Ç\.BTόc⧃/~6rb5669!Do=k֬MƶZjTR*N&BlΝcNfv]waUT J 7nr뺷+I)=*C@ȵVqB !2ia /1cX\.VSS3~ĉwR u"G`T{Gb駟/^؟H$D"ce`")e‘R:Lԧ~ݳg&***nZOD"۪*+=z%Z'kjjj?BI)キ#M4iP1(8cmJ)U(U(~mmmדO>ٳg%slBIu(I<PrZ[[:)T*5˶9J)elx@+?<نafY ˲Z_ T@[j8Nʕ+gUTT,B4(RJU' gyF:*fǹKQ%LH)V|hv۶D[]qiz'a[oX,Kd2#<)e9{-[ݻw;sϸX,6H$D)5VJiy\f|tz8 B3_ @Zh~1c LLR9sK(" }؊+2̍X^˲nVJK)ms6l0#L\(l$T@ @]vՍ?~f2J RR?>uttDRT:H4 !np]wa$-.oz:~WJ9&LNLRڶ}RAJBz;?᪳2J͐R^yR:)e<sӦMՃ =wJqX,6LӼM)50 }]޽{|uuMDb87 p6@Owߝ{owJU!֦__YYit!۶gJ)RxqJ D]V-\<6JLN$m۾Fa~.< $[n5#===)*++bEi6I)͟@ VX8p… f7 YugL!wTUUUm}߿ѶǙ0 {1k޽ s>?Q(P cǎ5 u6ב]Bxa'V=ڴiSdٲe'O/;B0@ Tkkkt߾}W_t|?ųщ/UUUI4ieeeY'./5 رcL$eYŋ///s4RFeB_[ͺuÇ{{{[m|h{@;w*uMht뺳 Tkx$B?>}z_zPowww=8 ~zt<IENDB`photoqt-2.5/img/multimedia/000755 001750 001750 00000000000 14165364147 016331 5ustar00luspiluspi000000 000000 photoqt-2.5/img/multimedia/speaker_mute.png000644 001750 001750 00000015662 14006705577 021535 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGDi pHYs B(xRIDATx{՝oufzx Ѡ=vMDDēlNDǍ5u&QO 1D@^Q^9DgݨhD]6`yiw]ϑ۷ nݪWSJ)v= "cD> 11|@c "cD> 11|@c "cD> 11|@c "cD> 11|@c "cD>v'>rJ9є߯ql4:,qb3߃`?P,Ut{{{H$.]ui^ k{6a]A1|$Pb`ًFʫD"H$†kճNa@<R,jhTyR0ʽk4͑@ 7ܠR`1cnj?*|0 M^`2]]].Vm^z%6~aׯwNJ w0/ Bpi\(xGzhTi{V]Qs B dSgh4=a(6~8&M0 H26߻ D"_snڴI7n\^=`b;.eGq$Ѩyه| Y}뙆J,7yd477;R_0r\8a<\ ^xL[[h^N %o!C8mgH$iN;VG67|\IrpQoo/^Ki,v(///^%mmmlBJKKʊF*3ht8 `} a]1\`&<.*oUUUL/gl#Ç[k+ Gl9v#N2vH z uww`wZYY~G^̱i,])iڨnVH& z{{ٓwqiNt%%%%Xf\(Q{ߎP(R߄=9iŊPȜg(Yi׭[m9K,X\p~1H$Ɵt:}RIP_+ CӧO׿ub;^$=TVV@`%Vz?_jdN/O; СC4 0SJP'FU*ӑ9Ή)c 0%TJ]U]]-^WSY̟?\μZ p @"tzO$ K;΢Ѩr߁N=T\qvj0Zmlr*++RH믿]%s& DQ__1cƈ[Ӵ[CО̟dfagHW-ʬ/0yd:+v5Q<]u{vIW_}ۻD"1g͛u@ b.@1vX6|!xF]v@ @͟?޽{]p8X, Ճ:u*/^ M}:$dEEEʻDpxntR⮻[= ;PR7~KR)6~AY5~xgϞlZEEVZaTmmxP`hlƍ͛q:qXdHYhTYyw`a޼y3g~8 e+.lܸr裰 ,[o.Ku[O2W^yuRjiEEŰ pn;ʇ?O>h`˗/GEE$ rJ0WF`ç\i x7D rJ׎I,jkk1uTS`pA6~ʙn2lڴTC93xbWI"āCEEE@OSph>+3)Z… qy*#ǏgT*5Q)M? wN?4:2P[[2Eh===>=z/wN-TJL\]s? snN>Gu`[l@hoo&qi%˝5kM<tttࡇtL812\Wg}7j ɲկ⬳&LiCx'|}d rOwwh/ 4M[aPWW՝[J~={sά?M/`x$3}X8ޡdنa|@MM O.OMMMؼysN\s5μLe0 RK9`ѢEnٸE7nDWWG@e@`0E>3DPSS@@I=әGQ- },' d644?w^HAټ _1 ?z a:13V?~37߁w !03$Rgٿ80P( ~)cǎ wR vabZ#Ma~r5&ɛrZ2 ^>N?ZUUU+++qs{6Mmu}Q+9u] PJ=J&s|immiZ^Ք_`0h0^N-4 )3o⚦y?/Ho>KWi~ő0yH$pdxŠE&M$~Q-HT), 6mBGG?W^f,g~a|Ǣ>}:-[bHL$?VJ͑ߟg \=oܹ={2F<_+k…PJ$Ylڴi566b@555D";v!y{˨UW][ww7l2]ꫯcJ0dШRRR+V!Y>~{mݺݧN; բef0E:HB۷o~ft:ףCvy .ilWg'r)˘?>g}`&֯_6Ž;@l@  PHt4*z꩸+D֭[qر}饗ǒ BXJv C.cNsa߾}uNӌ3d:ð7^W[[ɓ'o~(jޑX`;<:;g/XaF2(aP'Y`0˗vY *Xr ,YM{>NF[[X?iO%=v9 *H` ;w[o_!|-p8|iIu̙C|f2\e_[[SJW'x©]4@RЅ b֬Ygk6.s戾vmK ?; >PJSTT  ʔ)SpUW^ ɤy;a<u|A;m +g@ ga ސ*lo]oWr>l,ZzjU\\v *˗/ǴiDTJuNNE>`0 :EpgbYwW---^x!/KW@ Xq QWWP(T6 ++[L4 W_}uwoop8pX躾M4 #Hf0(r=cܸqPJc$yYtlgRoѝH$gAyZMM O.]3a*++]ݿiӦWJE{zzDUJmL$#8Mg9sࢋ.EEE{W?σ2 c?/]lX)8Ň<$y҄ P]]@@h@MyyyuεFՎ;;HWMp꺞 ɟX%{Ca>h_ZW9iٲe.w(?Oڊm۶!NK~`kKKˠ/NX d2 G̞=sΕ.pqq7G?ݻ73H x@p/,@(i Ibҥ@`2?0Mga}b皦?|u]iA@VZ%2MJB?up!n:II|?Є6U0qDɃ4+??h4 HW%] 7xߧTٳg^Gi'LpmaM8D:?`?|\r%_I:^~8w*-H X+q׮]e*&G#`7nRԧ! l2AERVVVFŴp86Yc۶m8pdiڥD@V21ddb1{& _hg]I9}~Æ .JjR{Db GJ)x<2b_[$dґ'O>c=&8Rj G}S=·Miiڿ WJ-7keXf%vލ?At!8`hnn%EG @zn8># `QI2@JJJ~ \փ4?}DذaJ^" 25M{->r/)z!9r۷o`aeRb} n :?_Cy嗱{nCѹRP|v)F[lRQ`a^KK nOݜ{p(8Ohk׮zŝ!!_Auvv:Vv$A+'!eee5k{yVZZe/0gO3'I{@C8{Rxp8 <Ȝ=Y<@1 K<ѣG9KOfZ$Ze%~z^9O4g=p\j+.u /4|# rk&q`3:::<Ր U046'n9SL|}N߉~Nz08ߠ tr4;s2W2ɬ/kYF>}tj0p>8J$Þcmwߝ8}g1b/ _r.x PȼIrvށL>Q t:ٞ``TTT'!D±Q{/y;{q PKK {.s`(mB9OYYY^Pt]G*bKg?yrJkk+(pHpZ2t W00b2m,-5&0J18H[[[--5&/rN?0䇠)}(Zhpl^jt]הRM7 0웳Ǐc9̺r! ;v2`|aw!6b6~}mB?mX,j=eE">ex½ޛ1ȜzF**/w 1^D> 11|@c "cD> 11|@c "cD> 11|@c "cD> 11|@c "?( IENDB`photoqt-2.5/img/multimedia/play.png000644 001750 001750 00000015140 14006705577 020005 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGD pHYs.#.#x?vIDATxyxTUd!H7Q[#( Ű*8= -=JJ7umAD, (. 8HI*V? fhԹu꾿ՓrιU""aD6 11l@dc "cD6 R3E g~TRF̩>@)p3Dd馈 vI#DQϊ_D.1 Uw,(*7(}_$nf8BclG)2<ݙJ/ȮL,, MDvd(pϔRBtR@L/~VHaĿ"8a>"o&b!f!FѴcof!СCZBhpR>?X7nt4iҗ]b0-JOR(Y "[Nq]aÆ [a?~"RcQ}8{q},鰈t>Q܈&`RRR޽{mhhxo̙,y7 R]"Q 6m=zH {!k$pB [o<~,)"ZT(DElƌ dWTT[!6 ZT(fD]/;[,RD~fa};]vv }H JQ'~U&}[ID޷>Qԉ$%%gϞD͛7Nz)))\l%,""bbtj,9tС&LȂK\ L)RZ73oj-Zٳgg[tBNn0'Q86Npȇ\#"cW3pQ5:H^NWV^]z7̟?= .@RT)eխI"l3.-**r6.9ͦ{%:+55U>}[ЬlRJ}r6NHLLĵ^VD͟??.rj*).7/l1+VGVWW|="`O")ݺuj@_0+ٗеks,|P=1~BBB."ŗ_~[oݧlTJ}e_.ZG쥗^jA #Dd>)1d>N̸@LIA u޽cIII WRDx 4HLLL...|ƣu{9^reɓxn@Y"tjll Ι3'u֬YWH\ HfO] K.Ċ7Xu# `@rrrRVVV@ eo#t_:YK)kӽRtc>}+";-[r:9~9JNK(SPPP ꫯj.p1QHD633&A@QI)t> nZ m:YO)5td )q9pw}(8~x^ .ḇc>ygX)0#E F~?ҥKBO}.{$1a6mtu.ېƍޛ={Ze[#6JMH 8Άرco\"I@zxW&M@ҵ5{1l`޼y^xa_}ƲA얖q ㏫u !f~SNIp]"oG:} `3III ;v[F:\`#ƿ5'M)еksEdƍ߾J4`RJ)eœH#.|gUӧOYs>vr00{=k: @/c?\ddd wuСTSdEJoBzzzcǎ;v읇zCM;X*QJ>K:m._?k9:^Dώtxsss7JD>5ݟ0(,wqZl ׫A=@aYx{n vPJ2_ | Æ y9"XfM7< @Ŧ'\vIII=ztk7xN exM)%Jv5 "b׮]Uctyy M1""n]v#50ADL8QJm۶ [9@V+(&10(Rرcn߾}1cPB2&.(*ٳSO]kuXv8r=4lTRE .(&7]60f̘J:L{3@1% "77)ʎގ Yk6HD{Ŵ@ _|7_ !M Ƿw޽{߮as{J0'|R}-6JxXD Hq%!!/W8o,<:~ŽRq~m5c [4777 75!6, ѩ("";jkkWnzo%,VJQJZ@Ӷmvnhqqۓ&M8rE)UtogKΟ??sM%o"N2xv5Pgӽ gDxV\7n70OD(T,D?9cWvv-9<."sMp @RRRxN زx(wBw D)5to Ӕǟ%"ϙ3'/++.̒oRmpF j! 6T9@ <Da|2gVVm9̌f!H}*wCǭ D)K/m߾}q(c3s@d {3555"Ҥ1"95;ZN͛W2\BD.8 :c~&L8{ɒ%=D$ysDt6iSN\ߊZ=1~Çk,Xf֬Yi(W`,1 :7Yí<(p|h1# {h"D-D}7Ç8*E$#Z? ¦ME_|a@t{)\-| [|ӽ ي޽_~:NƊצ{k .@`Μ9k5 ~- ✈`„ IyyyNo)"ͦ{Ӂ@q`ܹI?UJWDM'ŕ תU&M4\SwzvӽY@qv.]""NӽY@1{8WC "r"w(&ٳOrr3HcV^]p8t2P\""Kz@|A!C@t9q]+1(jy<]jAhsghK.u?V]%|$"9{6 *SL%K|d -18ߏ3VNtZ-[{FcY;Dm~Tyy377sνIgY^RJ׆!GDv]ڵ G,9Zb_;c?(//wwe5 *"[LGw~!CS.]FB@+ͭYOS;wh,[NYc?q  (..nt!B~`؈޽ջwo~'" l"77UV5FHl AL4… {|d=Rxqt6.Xʹit"^t V?3?68  Ɖ\.}]h."RfO Fjjj222rk.@gӍ vY5t7@E<~{`ĐAegKoOD1}Rp DUzr@T]Ed> @zޒlpi2'%@ s6 <^Q"r5?D@ ǧ^WccS{!880NKJJy뭷ioDDq 8-Z#8,(">)1"ճgϬ u{VsP}R:T}Ejj?_O-ȺuGu޶m"2QD{%F`۶mꪫA0 i0+ǻk.w8BDƘa_|6--m uI'p`7p~a+<#"ӽR| 444ԩSJLL~ H\~NÑ#G\-j_LI5SL97̱|"2td_ p,"4'NrڬX3hOт`ݺuU[ΝG߿?łK $"D$h_lX~}7ޘ("TlB׀8G<'"&^w…'Nm%jt"FiӦA Vy /ӠX1u тKLJRquK.={ʔ)V; Dd^7pQ̙3; 9]c"RJHASS;==?]0ߊƓ˵>Ņ WN`3+Ub$ʕ+srr.ԩ(X3\*"8)  bժU&Lj%-%׋;vT 8ЪS{@MMKiQy˖-uʁ_ `4dgQ?rHD{%2-*@D0eʔϿWcp@(Z ꫯpY^(++?~9s挰2L""U۾}+Xx\#"M(VY"rWff@+.`\bu?DғٗgffuNDgNw-Jw^gϞ~=^(YZA0t}N(+N@'"mţh9qY'`.L]DLxMKBd OD/xCD@dg&8ȼHA_ZMQH$fH8U3KDn ѩx9-VHtSDtzt-ֈt3DtfYL%"pŦ?b_4"@dc "cD6 11l@dc "cD6sIENDB`photoqt-2.5/img/multimedia/speaker_low.png000644 001750 001750 00000013452 14006705577 021357 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGD pHYs B(xIDATx{$G}ofgwfjfwܝ"l1E%81eH&X0e26gN#Ƕvzfowovy۝鮞~xoWWwW c (LQDc@0QDc@0QDc@0QDc@0QDc@0QDc@0QDc@0QDc@0QDc@_RW !^ `10/j]ÇcO?={.grH)Zy^)卮RJ4+R 룣`vN{]w z zB&,l6ҷ믿޴Z-e<0.}N(n[OKx8_t~z*C̙3 Ƙίh%e0͡C~@qZŁ2,ˮw0Lօ.^纖aRT2i{)N`H(XL׵ ;3^@0BqO !V\2fff2{  R/0Ɯt] 8~u$^? RJmu!*o>}aHh%c*.91=*RzBV.3X^^ؾ0r`aaA!fo߾$YY@T>0rP(-±c2 FaRN 9纎{umZ۱c2V { Z 븐BP,˫븐~fgcӋ3Nh? ~_mllqi-s1<p]O DO&'8~u=yI;^ƘXPu]K u/lʺp9–Ru]OY9XҴ155^SN!"h(8亞V0$l@#SSSPJ}]B?P( y={p`~~>Z[v׵5 /87q\*.w] mhG&@0@ZYcL 6׵ ӧOgΝ;mWs `dn ~ʗ@LLLnŜ۞}o c0::8|u=nϞ=4lȐZ[1亖P>|6gd; \[iQסz Z&P0!`XƔֺ%뺞P{wֵ]v9rƘ  `peu)j\7DQ=py.otQ-bJZp:*Jf,^u,B`jjmlO jr@w^\'FI/G}RJA1> E롭e\~Rq.)}1p]Oޝ}UJ,7j%ۇ{VV(ebxEE?Tgv]kIB|q0|Skm֟`d.KoI񇼅V =]דw˨VX\\|-c| (NjuÊIq>py.+JRS}lYl|~$ھ H̃R/pִfCuR cZ7WRJ%R$.U i7Bx>8/BܗwCCFJ c3ӶcF=<Z{nc.'ZhfRk}gFNIpԟEkM\oJ&Leͽ:mW]j^0h`VVVP#KM8?t>j/lNb3h`QYGe%/  rZ61ܔMwl+zj{gB ";,6yˮ]o\*?cӵ^e^X,vh]ǎ4^:qDO '!G>N20i2;;1ȉsWR| L^iېR-Jf3@i=ϯhsرcw qgsblcr9m۶6OόA>|qFVWW  <հ; Izx#zAG oXm066\OV'ɝAG oTջmnoH@[z ƍw"A߷sm_y\.G,5Wp?y H)?oӉ6aAaR m,1G_BӹN_ ciޏ<`w(zi6g cF;J)/cyF;BT@ީj61~AV({ Wi``kW@Rd V"1W6 ^~ 1W6~|5 fr6|xfs0 _7 sa+B+ 3ygrr20 Y JK-0+V ^eolaW&''`_vp/S1G6 ; L$ݖ 9F;Q%0L l䍇~B?VYw?>(7@޸K-4z(~Z ͬ6vi $M'/c۶mo"]{l?,r =®] Mm&Ptii>%y`q1}aOltBgr <^sJ)!n͕J.{k-'OR`BSKw>8gsBю1Kq'~׮]c^lժ}-^?@Nq|;N `3'O17Zjsf3Ə<\Qۀ}Rkl%yV}ݢncttU 'RcRsG\Ϲ\\3ܹb[7nl?@t8px @B0)R3'<  T^1'}ʳ$0JJ¤O8#L5‚jZĄfϧm`zz^HK)URAF\w!~uє[^BxwDPV[`/!Nj] i^|$.NdАZшִmK%lBJ7VOycy]Vߙۃ>tDPTeB%\ͼ%mZk/]tE}oLʳ˷fzz3˥˅6&v>{]2,ׯIRϦu͇RtRRiT*xĉ}@k4iEfffﶅB7f'No}ճ?EǐR]3 !|7~!^P.UAY4ӐBZ*pzT*jAJy?"?( Esssiּ l۶ |15ɻɳK)oR1;8'E%Ru:xΝ?wЋn\ׁN(~`u1àV}.mLl6~^? {}j1)8צp͹| DXXX৮롭 } uoJ)zhyϜ9]1,R^#;ddc `mz,abX$OuP@|AanSZ~ٓu=Ϭd. Sj;{M`K|Ws|sfO˭0{R~, +'Y"|+ Vc XV$ښR:~x&gۓ2(JRo.lnnN$=onkl1yb\>yioeqb?H)n!|=뺎~ b\jNq Տ5׵YPplY;w1۝NފynL}~Z gɣģ?R}ẞ龪oqbd+e5`8G89=u]8x8QV7=3 T{goY<;bROJߒ]r?x ZD9}tfmk='Ź2PN c.t:G\BgMLLrJe>qˮ ]Ǚ3J匔rCk w577' !|3YuW8@ۄoYLLL t_9%DՂNszBl63;]6ȱI,..^2\⺞a%'ȹzj?6nmrdCV1?v]˰rCf޽)%u-DKRR[\1 :H-5f_rZ8Eۡ }7RU5ϳG _t:{X}̬\.gGl> F񸔲qK~~oӍ3Qհ)^XX(wާAYYYrNPV+ĊD)UT~zX,n÷ PRk7%vtttѣG]%=}= |??tvۂsssԩSr]y/v:)73R~[{:w{tu\b?4_>mo֩Fa|_(` (` 1 (` 1 (` 1 (` 1 (` 1 (` 1 (` 1 (` 1s堟.IENDB`photoqt-2.5/img/multimedia/speaker_medium.png000644 001750 001750 00000016007 14006705577 022035 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGD pHYs B(xIDATxyW}g9zV$]N $Ǝ 22HAb+@pI eɒ@@vl `c\^zvgM4 vz{G T1PJTi(U`JRTi(U`JRTi(U`JRTi(U`JRTi(U`JRTi(U`JRTi(U`JRTi(U`JRTi(U`JR6/KIv2<υaxj~~wgmm1GZa܇<p1jsnx͑J(z3`j ~p}};vľTϛ(PT||JE|C3(3j.tV},(k ~&ߺJZ iHKk"`R?bvvE*siAMIRgEǎ>cznw~Հ^[oD}ppP*W6~Jϝ}g8`D6'q-Ǣ(zlwC=PhGdGmlvv|onF8>ID_۷/wM8J^xa`C|ҏLfggT >E(_m߾=Q~>o j8k|w7i(^BDGdypw}4z:fwEUt}_4zH^8ED/OQeǽ E8@yOMNNfS`eekgffAQeccc] P*"Q8x`&!0;;ڮN sι>z cf]c̗h$c,..fo]\tBsνk}q*Ridrrrwh4<%f2 i,nuczq 3?"^Z-@V{y?@ʍz_t < K݇zrId,s^ujƘ;b8~DIO :;;ih$О59w G^V3_!XڡN7H@ j0 ?R5I@[3 <'ALDT*oj5uFfL>c$ ]J_8v > 6'sLD_c39ιy=>>c̏|Yh7Z{o}KJțh4hs~z * js\aܳ[EDs M#A166ks 6s1@}HE 8;;;%61^IDAVQwQ'ǭ78vݼVueTz0c4#r9v(:9"DljѿI,955 ImOF.8/b;Pᜃsn;j\Eы%ѣF}J H]<(>"ռ0sT$Q,QLJ``}7zO(36mÇv(fVWW;lZ*|6z3w)8>GR۷o1f?ڷtښI; A[vz3GsJ7&h6siInI*8AD+XE1A=I6ٲI@AcO$k:f;"DKblɨ`V]̿"X` sUHK@u*0fPIcI0 m,ZW򆇇~tz@@uM.yb(03wܙNnmP^YPT*:3P ܋XYY3FgH_F'jjy`ɷڵ+ccc0@orWngjB%wTh;thkj(/VVV`yToK* ]Ƥ[; Iϫ Tҭ~7211cԛO1 ʛf c!X^O~#gSjl6wʛD=fwe'JZ!^lFnddiu;v-?BuPLi(m j鹌1Iz=?ʋk$@oxdM@1fݹ:?Kr/3K ~5 'GVo$"A_}$ZѨ4Tn6U|n* Y(N8 J::fi7ƈ3{];p+C5Tޤ~ei 0}$ n> Pw:9*gJ|.YP199 ȼ4qUv Kf4Tc>+T*8rH |tRh|XgĈh\!~``@1$1?d($D43H#c/mE!E? h\^.Q'O03+ІwVWOʍn D8NڐT4ӿPr ._(jv6KGF4TH@-@D'nY|$zU ضmرcLsNd&8͆zrb׮] j &Ptii B} ðNj #wD@_BONNHq'Z "2Ƿ5^*52Wʻ0 (je#?Y+坵vJuY/0::z 07l'^ /IaGQx]vj=Bcǎ-*-Qj]UTRjVMOOK*Vʳ($Pjy$^@P>|8`f3.|^'6s,MZRP BocH|$BO6:"u뮣fskkj(/CB~"DGe1?t#ꪫh|^խV @f9O'Hb D۾}\LP]UP*ƉB%#c? g Wb+Uj|`OH!Ki6I/ڇQI?O8jI5"JEeff&HD[}ߖ 띫|#,ٴBܷH\Pe'1Fw;E^i~wӪgMJ""90I =d@RiU""NJB$y{uH$$DںD"zGX'H`T@^1f@1Ϫ$^wJiLMMEh (2s0<.]P )ˤ9k\,kIg6ELMMaeeel}}""1/ wWJdGϽ> ${1Q;3%jA0P.;~Y? É[AjСCsonsoN-JO~7:tR3%ޔ }4E1}VVV`s6MiG?f246QTcsw?nll FƘ!~B|T*UWWWSS`r1fӐؒm۶1cg׍.c3>8n_lcyqG;wLVUQuag%nxxXt8p>AfASi'?n6)JRrZaٝO(;zС0 ƘaƜs Xۿ&hhHQ@@1U^@ zDt1^i2|݇KkZL2 7 ~չOG@XR|QtZ Q]H$'TVJfO|Ċc?377G[t42amuuu_jQ~0OjݔͿ6 T*w޹:{RWs$W9"zhZE1b!dniddtt{n{(2wW*':?JҞ=pMDdj~H|$Gjdٓ> wDUzDۭg9Ѧ1&f~~v,I7NDfEitY?|oq|{ۯK`lll^ 3}jgɉ{D Z 48Kkf cp|a3*FK%ƘBh" ð#N2gJxr4rcmm~ el!_bCƘ$8~Yȉ;wo @nȂyBŸTA<&ͥ<!Ƙ {|ӋZV'UGoFQtW.A g _cuP]cӉ5|EEg޽Vag@ ׌1!}1lj 8j_º~M> LwuWPAUGDN_IVAQ7^0 H;GɬsyS\WR&f>#{QǍ+199r0]E_[ޯ* S.c껗"9j/F =VH? Aj=UOdhWEGch4`>}Sz=7NQPVod}^ev/--y' WVaU[6Ug;>krr~i0 !-,>Kݻ76Ɯ S{Q777G |Ч1껏~Ah1I:9^ `_2_=sƘxrF@^~@ZW8 @5& l~@3ƌO|W/t!a  x}U3e1qh^WĊD-??222F.4 s]d ] cs=mϏqZo:y,877G˘ >3\wl> @9W.`?`揇aN`fj֫Yh(U`@P4*0 L@P4*0 L@P4*0 L@P4*0 L@P4*0 L@P4*0 L@P4*0 L@P4*0 lO4IENDB`photoqt-2.5/img/multimedia/pause.png000644 001750 001750 00000001756 14006705577 020165 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGD pHYs.#.#x?vIDATxi0@B K-I]32@Bs2OƾZ4G L L L L L L L L L L l+33ޓ7{kx3x<ܞ7[km+9nDC^Oxy{s'z ^OxfnoO&&&&&&\2k/8b @@@@@@@@@@@@)kIENDB`photoqt-2.5/img/multimedia/speaker_high.png000644 001750 001750 00000020430 14006705577 021467 0ustar00luspiluspi000000 000000 PNG  IHDR\rfbKGD pHYs B(x IDATxymUuܚ{ֹFdV6hDA t4M5h+*sDES:gM4&8E[@p DF4‼p? P}VsU9kw ('QQ&QbL ĘF10c`%0J a(1&QbL ĘF10c`%0J a(1&QbL ĘF10c`%0J a(1&QbL ĘF10c`%0J a(1&QbL ĘF10StFw{<=ITt\qwqN8ᄢjc0 9$Ig[f+ރ? ~_c4MOvޝwxoDD&I4EE|LLJLum͋ȐdZ&t]E׭"`%9܀DtC;s)h@e/8F^/:5@j޿y|qI(M{Ynfs-lP4](zcm$i~0݆@ paii'NTt:A4!5tFۜ~  (v~h4}t?"r^FDnjLMmiv*C}QY?Z#>###EXJ4}le(:^{YAbXXX8^ "(:m'"zT2n\X Q-XTtI nll覙l's96Xj"r>ȝ8&8h@ST*cccGn{'@OO,!MYjŽ l4NL~ "+"$I `eS-sEtBDi E` s{EQ&86Oi7ᄏ)9w5=8X{7.w6B4 _efjj ,(:.t[lEH;wAD(:#p]BDEPOOpG`#-$]vMuK7$I@eeoTLJQY=H &MۀYM̜fsDtF0"{I>tfܟlҍFLlm azz0%M5=(c`Um`z{{Ͳ얢p Ȳ,6Z<qA)G4G&{cѱZ]FCydYJ`DzEM6z}9ͻ.:CxOI#*ŢzG@=jssff (LXM콿 ӋXs)s]qqHDo^'1`m`wVX<8CoPJ ̹N 89J58z{l{/KѫPһ~W1/q f;98^g`KKK/藰-iwy?"| E[{ʆv(5s6&= ^g`_ AOOj늎g3;;8Qן _C, Z tR'16؀iVtiy0sOSm}F+#34MއıDDUjvQYt= "XZh4vgYfGD8'u7LNNV*)tOvvvxaaA`Я\#4M7DtX76 ˲98}!oi@333=!saj,ιg-y|{j";˲imaa!g$BDB4pa۝wH\"BFI`fHs"Wj'7 HI,"%^׫ߩ9 ^j-JEoj'ٳ'(sa+Y*Bb`t8"JF:p@Y?)sI|27w":|&FǩTZ᪽{<'vhHTZd`tZ J.FHa#ٷ3&FW133<ZӐ "[źvADcӣ ̡>C;00_~"JNmíX^"b#cKy,--v!"mqޗGQ Qha᜻TOE;I@DP#OB8˳,LoPWeyzBy o>lxj@.T9lse4"PMnC >뀈b ln(U048p^QVXZZ`{}P&eY@Zmu]޽{AD/Wp N955F$iI^Ge+&F71oQll GPZ" -(z4_n!][j^SAȗZyFF$Io{\Wa$s&F8(:rꩧ84MsV(ҡ9rs&FW5ȗ4 ߻w/C5bYZZ l6Ytlqǹ|DQtB(vZ4>V+,{T\MرG7r>HiA0&&&"j4J܆E"HϚ(bl=h K+;m1111l"ϋV50 9JpBDS43ޮJ7PookL+| sCYYlgQj'RQTF\ E9s\TFFGj SU'54,..Q!#;423 499Jr.tF7ڵ+& Ϙv BFyS-%y@ۗ(J!Q^scwvUs9Vv "/ $wUHe-I_:З7yW6m @3Q>HkשDZʥsoF"Ҹ,I|]]f~39Zџ1994MσBZJq_VSxtQ4 0.Aw|@(|ǯd||"t)M:y j =Dt))40yh2"j{'T@ 9r޿k[`dd 'qRylgϞ\uQLD*ne涫蜪m2sZ```̯'Vgdd903E%`?~QgfYڮ[ yJ]?aJa)@j#vqADNP8 A)J6%~yw؝7I/Fm$ (6:@ZERZ艡Q(t~ `_cq=Zf[nC; yr@>DWZZ˺y pxRo@f{XSzlυ!"LX>{@ f~qo: %Z2fnѺI{ED0~MooO45Ϳ @|u!MӓS f_s5",:ͦWXDFeDt~ι[tP1m&$I}nnˇZbإdf_]='+u~ _{aIqx뭷eO(9G(j:zkZs4 (Ba櫴|lCCC83V'xB?Tt8o.|XTr!bq=հxEY|0pOXk`^zp-4&sTzoT "{#EQ$pcǎ8ιSH4Vat.s]3@xF0",˾z Ut$Inu'XA18 ˲s uw{:?v~g9/EDzﳈ|Vݒ$I]o*E_`P+c.(%$I.{'| `f,..[] "ZKBG2E_@V0kT$IDMf6tWj3kɽ09,/i cK/a~jC`Tl劾 @gȍYU4g<)UE3OY}N9̼M$I31rf{-+fsuJV_"4Mg{&)6'(p;t/T,:F|ݞ/&cēN'U[5чr7" @̏*Z9w%XZMc-DHf!"VH/B1M<]|? ; pνWqܗn; \ \又-Gt"vl$K]'58|_Tv}9)nJ9.˲;Xfhh^ y3[l1F_epѱy )DyPLϵj=`WCKP̜P^V0fZW&[ZzE[t>.Dt3CɭخFDr探(faP$$D(T$ʢ)$IoV?ʓsp30(uV*mWZva z;۱vĤi*i;voo={Tl V.s3WtF%& ,v3?->=f>nzz谏J]w݅(xLbaٷoop,p.a曋u#L{W K"$I ""*:̮97$ɖi`% ĘF10c`%0J a(1&QbL ĘF10c`%0J a(1&QbL ĘF10c`%0J a(1&QbL ĘF10c`%0J a(1&Qb?$\ ^3IENDB`photoqt-2.5/img/settingsmanager/000755 001750 001750 00000000000 13766352720 017372 5ustar00luspiluspi000000 000000 photoqt-2.5/img/settingsmanager/filetypes/000755 001750 001750 00000000000 14006707323 021365 5ustar00luspiluspi000000 000000 photoqt-2.5/img/settingsmanager/filetypes/gm.jpg000644 001750 001750 00000047543 14006707323 022507 0ustar00luspiluspi000000 000000 JFIFHHGExifMM*,JFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( +Wޑ7aVӬ&Zag^HU,9$V3DŢn :OcYw%k\zV?GNd}IBqҹ_g}j4"|`}LtJc?3Xw5B)'^3D $e7@F:[_u xRF:]4M&szs^; ߆a$uv`P?»H6{ZFV3>ܹ|vw,_꺔>&_s3J9^RO ˩N%ݽfc=%m'z+R҅!G='<8ڿ W3@EKYs5ϷK/OAWoei!8<NG#🂼ILsoqZ흿RHfdQ(8#?\ zQN4&7s'꛾=3eeW,w{Nw73;EJl@D@k濆⏌0њ@GP85o!g^DS{[N۞Exׄ-VzZ#?ν@ V5'p+AQ@Q@Q@V&BQ c I#늙N1W\wGO4U;++ )8~"xB;oOp!3#~|Zco}j*FtrzNRK ^i Na1x>\K_A;O[DUpQ/V߀n _&F^|5\k6-o.9#W]n d\g{”o_Ͼ2) Xj1A޻xGEMdofZ(ф_7R{Goalnp0 ##|c[of5V8P3'ާ>ht5#A̐="?gȡUWGQi]Kecs>P=ʮr߻h`x$Y"C`y/H2V;Hc_"3q021Y{INpT~2UEB~~Z+?3)lGͯt#Uѣ!Gv+B:LW/d WUā3=Myσ4>}6PdNnĈr~}xʮXSd[Dco p۸ڹgɭK^#|AKn b ׾'S e{~^`0Vn=y3O )Y7iۏk{/_x]$ e-sQNkxh};pO΍ ӒMInzCZï Y(S0b9*n?~t'Tu gzWUӹIܒj:ȊCE:QEQEu<7U>Dd>嫭*/GT񞩨;j\ly䓀^x&]Av y"B:p_<774 GuN}WYsNM?Cr7YS]mue Dnڅv3%wy>}WgX,zmQ.c| ͼ@r8*t;ml~Zki?"bm1]]0i*-ܤQX.,^њpKIq:" RQNRM&--@Ұ{Vf#1S`~hu]NN)<ʙ&]/a9)t֢]L1fYDl6]G$q.NOAY} jܑOUv^vt ]iɊmJq*,2K |ڶ!2{uR;dTVu|%q{xkK૩x~Ў{TC5HP0pdeD{xӵ][OQ-˹";ЊsGn[oed 1R4+C>X'rKzdcd?s7.iAn~s޾4?[Pbd' :}km; ʦRkv5Jw{}uZ/ {nF\nQ=x#|J42ItUwZQ/%_ ;1Mtcr?MLin;ro^ y#5x3u;aW,Gs\rjIvvQyvs$?!SEz $ (5fA5 pF>z*uMGŚZ(yK{ Gz7Yz5xny@$~&GM.mt-\ȷ'ڨ\Qƹ2PA#?^gw61>VaUs w}MUIrzC5Ver7񅟆mnlAv-!g_Iї 6}ƹwuTdjqz$cr@,=]Ͱ8Ζf9XH:8 ЊubKT/ڪ"V7xF1~XV.ݧgpY".0HMvnj薊(g~кZ>g!|T;W98=}j-36<(5 KRq;@er2?58𷉕/`%cڹz~-ŎXL0GLsKOk|eUKg@3m&G ҽּpx#j'!I2OAӊt~tsrx5 QƙEQߴ$DI1e*4߆R)ƹq$e錎.ŧ=q]$Gv5NǾԹxj7tָCWͳ-[|-54y&~]~$u4QEwQEy7 'LU٬",pcqڼ5m msk4SUpu?|;gm%9nh<O\x^񇅯.Rd*?(;ztx̻I~{^8c^**Ѓ)?ZZC+%yDwp { k;Y?O,X^{].a|ԶE$szR.uB]B yw3Mo sd{e_dF H$xg׾,h4r Uջg\򣪋ThAnYyn>d'!p$(wq* +;}: ;H+xG(T i$o MǛ&}21_&>6P}!!qN|mƾ9{A4Y[ɷpcEZYN/ yφ\^[Έeb2w0;8OA5O xL]?PD+*̦& C/NjuM.͟:Cgm,O!$rn՘.}=.#[0K281w.{k~hi[yL~L˂27Lwnk}2+x>g>ǖ>*w.s8(\nz({Hr9?_7VQ5;0P]]^:ПIIouo|} ˀS{O| tVf=En-7!)C̨zO\g{pN{k[6t/x}O:V\AqnJ D@kc.#H,{ט|0V 3FytaG˂p<רM-Ok s?¢G$F9QԴS:(EPEPEPEPEPEPEPEP.=Wm5;_YRD7([aܡ<P$ FPU {@UTPTt` Z(((((((((((((((((C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222,! ڤ z}"!/g:.3Y$֬l5*\9yU27 )C-Wkj+y[-Ǥ L4H.FXԨsٲ)$62/Z.!pfA0-6Rw jph *ƓfIGo"fX?eXfS\ADSXgXUnWvɠW?ԥ/4o$cG%eOSđ /o,j uȡ\_Á!쩰o]*7IO'8heX% 湨ЋSl#Ξgm -iЋevR:JQ\Cz|MūyK>6 lx7+ j 0zTBiֈ=F vÜ ׽GFK.#s;U4+JV)Ҏ/7"m9~:ZfbT i^cBOͩ[G-3y̩k#zv : 0+z9{tQ]T$ $Mw*-_y/+X ޽+0^p{kBٓU5}G/%se8j۶Tf\ȬbsV $(NyڏΈcGXr)]vUV1Z˸C\>н"aňAFsY7Uut /DE_Mhs_qÆ@#P`E?.rc)0>d+Vv&N~!8-L$<VUUٌ%44I_P nu6n+QcR 1rQWD`H"ZG +EpU'4mfZbܞDۋQzn)US-µ}Eoz9($qE d%xu# t̻_ujFPV(a~#+ !1"0A2aq@Q#P?:߿}#7WQضv~te]jl8hyM1=j!T&h'.E.-}Mƛh:(N&@I&Q4_X_5ru s=Pt>tK scs.NB#bi7OQqˤ{EX 7#'8xnwW<ݵ>M#${J:cP-,+A3&4ȃWabbہ nw`qؑBSe3)1i,a(;pDcyxpA`/> !1 "AQq2a#3BR0@brS$CP`c?nxY4;7 j\Wx(O{I m2cPqڕr 2QZ +WYh?Bpx#O*ji-_09GXHvbon/p\n[|W]L|2OܭeV4)Od?ZFsAPJe>%VxU0OҪ!9+ InERԿ$ &$-ֻ t{VqjVS0NoeS0q4꧀ѫz(Ls+U -!87 (kI-8a[lA֫-DfЁ6Uhs˅ܑC7`Z쏊qͣ&ꃼx"Խ"T8·?u \\kiA5l*:C3;%޷< ZF>+pS絻 ÖO<]`@44#!N=]S(<5u D5 r (=g2m*̇]OЅZk~=*TdDžgE s}Ps+898Y%x#c=B$$f7lFsZm4 !$<0#==$U! iG#IsۿV"ȎQNԙn`;5Ϳu*F#g}$]V_B@[6)C P |+5|E)sdǤ/3xv6"Fsm7z]O^eΛ쒎2Ⱦ6Ei\]WAh@s`pHSi\" mFpSPw2=fy˱f4ba<H-C4og{'VThrV q a6I# X@ @cʳ|8m{4gK,HⷜRxv9܄cBjdӚ x&;ٷN6:*Zdl_|0 nxSF`&-pSMwEoIktfVqs2Lkm{wdeV:/YU"43}Jnç\ʆݞ1&~dK)WZP'^;-b%[)Ԣ(mzӈ (8(c|0 rz]OЩc>~J7[N$s,D?7-\G.2_׵C8j~ڭpoPx\(BO-7=U{v[SlWxZ2fP٩g$A!Rb ċ:մcL>ڻkʛ4V^p\%F.ϥjIJ2YA[O ΣzOOL+weIHWzw&$m(MjQ߿*/Lm?yӬҏM ;X7*߭ 9r<A@Hu~+D0pA=l- !śdWl a|Fuy~@;>[ KD)N>~S!c~1LM6v0( oL;&fǔ/Az|t% OLj]'ބPͫZ Ԅn۽)!- pa)nN|1MY;_vg.%ҡȶ~=i ſpZCq.?4W 9qx|dфh&%׵񁾤&B,xa ]!+tߣ >R SWOf #o(u£P6\gS|{D" 7RPdVz7h cE~;R;40:BWÔx0yQ }J1`{yu{^\@_:dw {6<ҦN;s*2D0%"JIY-[7g™0-Äϥ IJŸ\>$OJUBz,+xKR%7jRPLz4Fs^x{gmNtV~CP+l~A&Tm ({}扉xRSQ9wzaS VH؋ե6:~S$^Ď\:6c0/ڭr,4\}*C%#Xڂ3ҎC]{sQ-`͚/Qf *lڇ=y<̓FxB@}+TBm꠪"8ߥC6ߥL$." ϗJmj(uj(C_(|C,Nj{G ضRIĺ56!t޳ÕTVJKء^Fr '뚓DTDiQ rMN[ +ՠucu46"}8N`)۽YĒNLéE6ٗ\Q vLsj~tdmaIz,GBrrٗ*v[[ʓCeszPh EP#&h1cۭ.R=1Wqo"ÊVȉ4{R=OPõ&ưRc2; X2 <̽cӣu"3TUL35YS ^k0} ZiZ[M$fh}5)zm#NX-ƻ@Vi s6{(F_ҭPwF+exсӧ\m -ֽ{R+0}ng11tg~.-dpX&͛h<}6]^SNخ ez8M1o^oS[9k IVuZ cn`:*!1QAaq 0@P?+KXR $$D3n-V2[4*txd.6 gD"džt7 ZxJd=A\ˣw]8kʵ!5bmD%~kRT.%8/&P,,K,tHN?)1VecsE N{TZ]YzS3;ivJc-@bth=dOj !5t4&6(T٨-i(dxVwi%!m}fY:~ v m:;Mj2С]v5}ޅ"xЎ'Y>Gĕ/sXNsIQRT2Nl<q޺"prބb6"]=MI 6 M] J LY`4MTV=5Xi.׶*Cnφ\Ҍ8q!)\ݙH0%!y !0- jn<ĠD]ckĎd?gAF EtQ9D)İa^4)8, ARJ8^ʼn50@f{Rgr+7Db~,XGu~%)ˀh2ѓ́G vq>@) N9WKhc1wʢ)8,bW/ H"(H6|,zGxCfa>g-Qʘ$ha`r #Qi ͢Dh)7ʞOB?? F:y{XP. d`<'joxzH{b2pck>]<Ɇp^h2Ԯ^0s&OHCĥj$f5n [O.*99=@byrܿœpBJ{aSh G 9EG[M3hةX)hcc cU@- w;g7?oU; _` hL%6{w/g wM<8GH&1j0DhMx@1L@GEPaAJr'n'<頯Wd@S^uФHODȦl/FDsкPc:.jQ.>C\W#`$rqYY5 ]Wy |W G0{V-.]U]U "a%ƹ^ϰ % [M0hɢ C?/ KH&*w `.%M0\ȡh *CsF/vi8l7O(#E2&Ի- gpn]<Tx˞5Y7"/x{ }`%:sagz>πSJk_uAk3uX&%U<>8дJpxyL1À֋4Z( FcL16//Ļ"9xA-D j ,p/yӓC2k,3CCB +/#B:<+m|rM%,:BR8m70ϹIql gh)n=†uF| y[eDpt<;1w_* */kBn>qP6f=r 0ܿ*kᶭ$ 41|S`Bc?L1VU>9JX?cNmrTAu Q,;1DFFcOL5r-Ag'FQ1>G ܒ^KSQkF,~y& _b8J< M+P@dDP4 CHA(~"A؟R l$O'&hi%CPr79[.6rh¨- 0Md<3AѮ8dC?t{㖱ҿ>6IUaW0[j78I%CCf/ }Gq^Iϴ_dMNQ.ĶGv쏾)h+.23$,~ qن&DÑՙEϤs|Ltxo\R>j#Fc$fh;-:E-Xgo (s,`fJh{%=SwoFxD_#+Ws؝$;^dƒ Ji(0P]4^ Y"Z? KpFƍ}F \s3 iFg\tydDjPgt1Pu>qٜ돱T@ٶBǁF?FH .xRNIv%`K8.쿄0؜.G6Bc\WF A"|' @Z0;L+?E0E(ZApL1oLvv" @MB`F(iNxHH02100100(HHJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( (g3$,h: 4lW%Rhźdm+ ֵ-~VGszo7 >OZg&:VbaWX{Hw: +Iٻ}Z:vz{Xw: +5''x|k0$]M?VWs- ZwXPbp*+hv$o!b2:B|tW.<}^ҼQRe34LTlҕWZ^ڢVwʷtRYӡ̷w#cNpJ2ٗh((()JjiVs/8Tuf+*Tv]_uHdn 2'[+:?/"WV>QB=sz\p9fYr}.3ϙp@\( ,uq *j$m|YЈu{1  }G=V*\^w՞Oe90~еU|;`bE<Z5y':ܐLR/@;cwwZo<0.ͨ`eJxS^̹j*HɴQcz'L_- es;ˆSZ=2|{*杬r]jݴ&w2d#8M%QjGڻ.HhIo`ْ)nI<(1RFΟ)*ÞЦƏ2g'uz}e`l5BAEm'kϕXJQgBipY_ ͘b?CXzմg}mA ͟l"Vm =2x?|!bod+H?:[֞Ԍ*3/^m>[ xH ^%n&O>Ҥ%^*vI%յf[h-Ņz(5>dž?]9%H. Ē? ڶO$$¹+Ь5RLhQ\EPEPEPHzR@-"]/ZyvS"tn&-CMŸv^>t^Ě,R}dqC_;kxoZh5p}=oɍ;N;T[3ټggZ#O/)#UJ =?+2|A2g9Zͻ΄d7Jź«.糂W,2iy/cS3|/ȴIj.||?ʳegYO3 P=[O]}$:vXхq­HOnl+tW^+-W2OEѢfE4(739*o^%ȵ]<7n [d\Ags'UPZ5'B_9_Fa < mGAפ5!"}q<|U]$cLIէ k }Xrz|L<=rQE.O{oj0yM 9q\rꥺ6XtU->Be:z\-4΄QEQEQE!{|Ob;tk8ىՙÏH??Sͩit|6JHQXT{C4g,-7^2+ζ-|MK\@[ ^}}H1L:Nsc_dP.(S"qCz\ƹ,40,-8iKᙸm)aT46p@AJd2H.\w_N AlJğv5__^B{:Zl6Z] sM1fh=7{XS>~/bħ#2H9;>$8-5dzO`VRq2E,5%1}?]?k~ខj?~7s4q]:'J汧8c5s'<;%g&T}+ Qw)5fyF^f|klX(Ь[62C2+18ֵY#$S~Mb״[{FhYU0?Z(((((((((((t 3Umז#C&076]pb\T1|3kdBܾӜ[TQR((@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEFhttp://ns.adobe.com/xap/1.0/ 72 72 Zoll Interner Fehler (unbekannter Wert 0) 72 72 Zoll Exif-Version 2.1 FlashPix-Version 1.0 Nicht kalibriert C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222,! si֙0g&JΟ3@9z1זY_Nы}gV[sk -RwHxZ#撐gYc =Cߔ V>=;6Of[ԝKӛn.4ԹK@jǼ/V7& ^SWI퍼xk\{va{zXڀ)]9kgh KGmN=6 ~7-租Jgf66FyS:ruisn.+#3Wfќ}g=sk?MzzՠkwՙuEM&<'L{yZ.} f H17.=;FrOfV9In7W0g0r2b*ՅՕǸ-]qt#QԐ)0!"# 1Pp%25JȢ]lk5w]WlJ6">Bek!]CYxXa1 2-a6R];3Ve𾮟kSF:fb4u\Nmoԇ sis!';6:7^2BR] ix5 c\ZO'fN ¨9;o[&͆8EFhø iF_MX~IX'͂*%&uF}i\YXЖ<ϡ ǩQ_:ďJ?-bZH ^Rn;w&Df nc^QADɬZk\R(%6^P^Pl`%'_ [FۦX\}T?#{X={cO9.d"4m]|pUFۧ[6 UfxW֟]:F$ V-El٬`ue#),ןYoݵF2 /%1!2 0A"@`B?Z5Z5qk旦,XMr>e鶩 $ppppq,Ds;n,\H8?C>!]ʈQ4O$Ϣ=`諂rxRh Y*ॏE\>L,%DM$&<)> Tǂ;ܦ"K2)JұbW "Ȳ4ފLNsHu)2.U!tr6k5fa@!rͳ@mLTh^Vw6K~)!2 #01"@AQ3`?D:2:2:2::Rљ*FIe{4C/,sHȤz: C2X)fYO,Y x[<nLxlwrZ"+ /+O/JbO(_#$YZ̋^Ɨ;QeR2"iVfj/yyf%o6}]ŜExk4q)J?>}3 Tq,x_$k\~.&jpQqr5o3-Lt7 M <IMlrbFg>SLO%۲FT* P'(݂W$OT?zwy{Jc27E&'_d;d7B[e?ޥ^߳O9!12"AQa03Bq#@Rb Ppr?DºڬVյmuufBvDT,eB]l ,pqܵB2Ύ:Y!d*]{DaK+2M(m5 m"gEPtB,hd, dϔ'53PhŅ!4K# XL %!\Q:]9) C+5kXFV-ִEvvLA &X1< B8dD38qT*vPUutlqy+萿LfL fTh"as/^!^h/sO]_R"DU%/tm-~/g]#KP|gYxM Ot)Ե^:몼.+jyw+(_NsvgYv[ºγFqY+LXM[X]ݽh[GrGUܕ!{!CeLwpa̯ '+||D L$!1 0A@`q?BA~XIHa!;~)^5*ƭՓ{l^3A}WBomhg93\}-_c=6BR#nCchXۭO}!ρٌdv5[T-m8)ˈ&<X7/R|} {$?oքK{cߗ+?a| 25#v>c0@0\0"!1AQ 0a@`q?ћ&zw3D1c q&9pXtⲲA/9`1X~ M2c6 ̍"C,".BSA.seU4ܯ؄>uǼR#[|r}"_8 1cТn{ˍt'-Ip~W<`g *e-dwi}9ї~Zؑ^b͆yr.{vcH2vǒ",2 K8./սh=3K*1RD0@I?jh*!1AQaq0Pp@?!YTz,o K4z pl #Y:J2鉄]bRҌֹPF2W'89zNL[&!0y nm3ʷi 5Jw`SUc a|aP]G"iFW:6;ܻp*SR:BJ̈́1$u/;5.k^ez] pg)K 3n^n_^N rE6}?qi(p+e Nw]a CqX D84D~cJn.h:;5rYXSqi9XKX= ~`@n-@q~J:2oK2 nA+emKbc[t{B|5NBdIrn1̦h>]EpS1(Q}@< }t:b֏ϔPcK|2۠G96FlW)_<6Z/&em@RfVU3M*^jzR;ļ%^aDA }_8 =o{HJZø}F }7}A2mj̲Q70C` кů)ybq+pi1wD1LKG4઩K?<X\h%v]sYb)k~=XL1PJ;mwZJnXBeжez,9R/D-afV,$h_qѦn1]s8Ż r(0 ,eHtj߽WQ*R|/` hyy/fަstb'GepsHykB*}%R_SM,{ug-WboQ_Ê8yD\7RG9~4+X$Ni+4;JgddP,HOPn2y r:@3] 0EcdܿQz1_VRXʼnO%d!n߈ZV/̨-@@XLE|e~bV܍bGU-㱌Gp˗F&,YB1ʰL[vn/fjV^P\jPƁ[jAP vX" d5P]`w/{ 6.oVC'=6E-ĜQ{IgHc8ÒFiZH56~.⑱* CYysĬE]V+Ok]-1{ŐY`Cݫ}W5?eiRWAr0n<ǭxt!Sq5 |}*UJK6h}-w_@5Z>%%%D0T_֠;!j4,ǫE~bGXRǃ(T3)TX9\dSW]=trvC(ZXI-l4< + VW/c< + V/g7?d4(*Xʿ]]k.qYVyeM1&n`/3ϑ392&PR#r1-o\M<1.Eg[?]gdM BsmCu"8ZwwxmFNfӫdʼnsYWY>[˶}2}{ub[7yŭLV+bU?f YSNYF9K,Y!@1(P,Pn0ass)d1 g d!`Ski`8'勇>Ǣ[d>ZE^xwQ+g"ZGC8|u&6nSɵPR +ǰ7GɡΟd8O :gS_^++PCq ~>/r~"s,d,u0vNa`݈WIBrjzֳHt ֽH&,$Ո(>$̟IQ$ߡxHK{H< ??>y}m^#]}|. jNC%SwYv{[K=$e>XE ъ-$1;×~]4ML ڊm& CrzA,fdjקd2& ,b64g㑡55Z4$0O3]I).aUR_j_k] 9W: 049.$lpL׶Y?9;˜7O'_`/Kʟ Kfy2SͧTveߴ So sz8J]rn=#G.WVJ6;3L&6lE>Q+ZoeN掐.֚à pS1?ܛPLcZcccّw2F]@(J3#T8UCӔSҩ?)Cg7Wsm^m}sHGu[W/2<< _= xt[ ^ZYB2Q`2&5k|atvB xf|vIɯ)֬oR#$$$""&!-3OF'gǠy|>)"3#n[%sSlN_uZ"I"—?YۚT^! ! 1 %*,H2 1qᛀdɓg!<<3I>;ʁܙ֫k+j2UI>ZՙL,N-m)qDdrldž0a -:ao0si+,oV^_x9;H,j$q->XhxpL"\JA6R\,232;^o/G|٣xkcnquIȒs?ƔbŲK-+Eg+(G3yt{:\oϼ_LKKLx{DVmklTj, 7*)׍q%ٱ3<.-"0HOzoWՅE7p. 1ȓ1bZ ^Po^ǵkɕ?cɔ #j̵>!0 1|l 7+y{|W8K PmE>}IW.qZSx+:;XTc_!orV*$һ \[nCWH<sL0.~1M4awXsq~:ɑcP-+Et,=Q-qTy;| U [|X\#T ! 8׺j`arNN#x-l~ ?.R񫈑93f׹a0Ȗ`Q,E뮳~qG8?&Itc 0XGd`rHSAǾfcj<\)KWS:ཙs2n ۥڌfF86xL8n۷|)*X̒Dˌ'3FFY#Mޝ;śF}FfJI\teY\XsFDE3}ρ|?{|5@`7k*h/[ZdfoTְ,'*8vC|;ޙ|'MsrWHdu:%Y3)rڜ1gK Xlŷޚ{^7jyr.1wa 5ĄxV' . b90%qen5X^^̕UEHv%|Wt*K(QĄb"d,;i{H0$9hEԔ55\g|k`II"d85pɴ0 c_c.^ 5e:a&B}lQpF-g;a~N%L$¶אk,<σNC9y<Ϭ8Ax|Q>50٦fk0x[l}#ESɽEcQUǩ2S(X`9p|8CP۾UcYh45 jbyě6u֒,RC[_9Ce([LK&W/JM!x ήңl1C+bN9FؕXϜg|{ 15f,Q=}dNaD>| eK4;˴.1յfwib*ᇠf*X!~9#CB7GH鏹Uxwgs@\PZɄ\(H-u{2LY8ZܶVFmʾw/E-,AN dd2Yj6J QewQ B>LVPx6v%Y_Ⱥ̆y}ҍjqح:VzK],G(x9<:Z=%Ԯ=<# "ߠ;k9Bɹl]WKZOnL?E~ }'~.-%Q<XՙLyׯP yJIi#>U^ImA!3@^q-4*dZ-OeuVLolmͱWTz|P@ˮ4mVMFޠJ%]uO~HȒ-CS ѸXh(ŠKWơ9PK7wg"q#r VbPH܊rE/=즄6Wn0D1Sۯ.Ω`)]X||> p$UWj^t/ԒrR!=`0?Ha]WаUwbV?[ꑞX;&n BLL9Rsawp[!G"IxVc3`~ǵp8Ir2]Cx7lX9n+ﻲ-gsZkXX 6,b ub,8H\BU }8RcVGMB>\!0 H+U$|?@:op\xi-ma|N/Djrz$4[ 8Nb$UBE{HuJT4oZY'Vt#0xMD`^׽`EIH5.TT6`]B%*aVjKCdCduvq79 Ov}ZR`bUo,B҈HB`Đ1~]kD9觏sqԈT-SDm|ea].V{j!e.3K\maUi>E-bp`E*º(x9hsߋ+g9S02dM>H]BZg)e2` O DPrejIm9Υ<9DS\.-f&RN*onz6m*XK(K̒+Q˕i{с#;Dz^1V95BX6[c`mhY*bx-fp2ѣs| Rc5n]?OTmP $d:IU?MI 2g6EXղ=I1(15['+Ŗ+QEDMBD/mQ<7^]` "Ƿ:8{Iqh)U(a9eSe9K)^b.ˊ`zWE,.X[[]W^Xm1 }ؗ݃gһ_U=<0}^q9յvdkq\KLJw-v,ښո@piqݞ{T&JSL[$[ڻ+-&aOn}^mc ~5%YǀP4UJ<6j#>J\BVA뻄bH:9upMk׸lW(RXILGF95pdZ1p\o^׳o?bc@!\S`ݯfI>A{<>1 =`;,(C<9ƈ?u?צ#tHx$09+ɪa?&|<Ro-,M:wM֬8;82ܝ:9 ` 'xSm(Ҧ\[ަuxqTR! i ᩍu99T4Â+(6NoR `|X9qv$m"ҵnfyoj6M]K2!QC1;~Op0D j }JAVn0Olysp=}O?L>`f3:bFӣgɲ:Cqbp8*LԦ(O5\^ʛR%Y;4pNr|ni}$CzQmqԦE2I^xԯqxE6' 1XKKLN&f+sTZ[ONNrpa‹<\V.6WqDQZd k|u~xf-fxd_ 3KyH^#,ek"%[\CT1TOk]mںa@~gN1o㋓L.NQeBKBL#Q0xs ؀{G8P38L- XILcqg+9Wj`sN<`@LM;W_`QNdn~n4Лǁ}8ô87'YTJHDLL, Vtmq2J;L? KLcm/Q8]A@_߿ ņ%z`jxr8B 8>|}2䖻2fcF剑GIHHzmIa-'L:OzVT`C~n"5m[s$/u;_QUagӨJoV/S j-2Yc%u+VV,sn& >~к_WI񍏤y+:!Tv?Q&wѕn ȪHغ7wwKK3Rɔen4ܮsr7ުg7Q+l"Z[#> T-/m7Hxg}t'<3n 7 ^|Oq,s3u>WB]Hv]6A>BO'^ <dוmh2m䣭 H[Wd+\,_'Z<ǢYMB#yv班6*x|ה{LQ*+̔ncg> } soMp@di{0nŨYVnB=+|c e|l#iHꢲ%01d,`Mۚ𮂵tK奍E'iJ kӼ>g=ΉQF6ھ}ı~rlM@<8zW"c:ɨk^ DČǓx9UĞ83({Qd70\zZm~l5癩k!M:ף*Pp=\{\`f`8R8W~7f'=d i q6,qs({1CA @"&mBjTRN*TjeaRTa.Qr7qbua&0 s"?|WeF9:pG} aAO'eFq;.>l"'ko|z,Fγ8-<[n7Y~6 +52#O`t`X$* ȭd 3K3̔n1W]*\HZZ[>*X*Xw8)*\^eH91zHad'e e2kt!RFardly3\e#cv\¬eZfs\S }$6$)DL@"jqJXVp~B9ߑXhH`UT'rvU=0g-ֳd?G yrM>)'Gf& A%h!TĄqD),Q+TbĞCAzZAo/=tykf+)dvV} ,sԺ,*RZYnhL ..غ'R?]i7mL mߛ,~Z%r1Ugys3QYÈJm$gj6d +|2]AxKLE3\qɬޮ$̫LtبORJ^0u]#eIԭ0H;>uWKW-Wl KS$mo)MS ^+oUƒr!A#N^|ӣ8;(o > >*_\lŔ |;=lI Wygѽw7mصVV*g}xi &0d 5H&`M/${1 +7:6gɡ|Ku-_껓M3ݴ^u^, @Oxs-^`RWIN$gWT(Nڭ$TDq+Y[JfŢpM?Kӌ|X0Kx缿pʊc#2P.`N&v6i2bJͅn`'ݺoe{{'j37n+7_gU[yNNK'pv8.oM 2to,\وrRh |/tߍ۩wH({t4Ed/<_`@oCI}X-$ +V,\KX`qNQ5d{螻>,eJ9k8yrv2`ED8۳ҕp#,bx?k<;{UMIeѫ CϬnãD3>2 S@ko7KH\,3Oܳשt|\xУaxUK&oz7oGK3gX2ej&F*Vi KI`H'^  ̅%^|e%>*]%Un^?K(C#_ɩ_3`,,W %.71ǏJ`1.q<X _zZ7+eĐ5Y^"*F,R Je3:Xݒa՞v=h^,EQwqWEQREQREKQEKQEKQ,EQ,EQ,EQTEQTEQTEQREQREQREKQEKQEKQ,EQ,EQvWql l*IENDB`photoqt-2.5/img/settingsmanager/filetypes/im.png000644 001750 001750 00000175376 14006707323 022523 0ustar00luspiluspi000000 000000 PNG  IHDR,7l|-,?zTXtRaw profile type exifxڭiv9sA/'vf ]N["r线o[N.J/_/goϻXj||/?a7j /u7χ;7Bzy,_z|y>^Y~;Ϸۿ+3׉f'Ӣ}n .`7'O1GeAl+>olJ,;>b!7top~\ϯe}ny KZQɒ¯ѻ헟Zc[nHan8 [Lv-1e}Eݖv-=JZ=F>k?%wށiƯ|{!NEk BnC;?.6$8o5-s9|Ŗ(|c'B_oq̈́b%jVC`3xf1d BζKK16kjxk>؈ ؠ^ ؈14r)\r-Ճocڌ3<ˬ>"|VZyUWsm Nnq!N:SO;Kxͷzwص^څ~wN]㥵~Ed;f)U;@@̷9mww9;ht~w}s)Gf;usںعOvmmP#7 k'SwBemڇll91 B׌t̼ؕWt xט XaV/.cN @wspGֱJߕLv9Zڼ ;ޏ*<08f׍_fV ys^3ȭQHsDwq}YaW'IV mqcxD}ug܋~ #fºEL>tq"&u"p^hnR)u]' $(|@Ilr3'҉ۆ`7v74ޱ9",T7{B7}ji̴Az7srZ3!O:&4u0sFgT"l uy|>oE_ɾ4_cv~z%%MVBp&`UIB;2*Yvgjs;@#NPr<ɨbm(;},n˯Sj勠r%.%⠤Xo\+hŃÝu;w$fEL'$r'[m75K^fȧgGo4BE:RV{rLt;3 y|x$#˅HOn7j_<^äe,vZuHx4"{<#+'4J!K9A= V<2z> BNY3=9JeYX`3h)m0J] oOK%@b\(8/_l`IP>!!ȭGDf5\ʇA;":Tj_wpA'Táv Q0Ɨ,CuOE ¼E%/+ȹ^<ףc?H H6d>C&rky_42@\ Ue&1~*q/ƈVQ|;:QW|w8֩ 'owLP=YRY6k0W _f `G]"m,%# 5<ؙ$ovIIt,ECi'3$Lx7n;:9 }B?$Pv`Iޘ 4{3b3(|u0~;ndt ߅oglr-O!8)_Kr J'n!G Dd>Rj䃗2s|ӝ{=. ^=N-8.ۄ C`2CEب PB/]@=Auԩ05TcVB_|w$KeQg3zQ&[I RpV@ ocTVqGwG;k%;_Pa@<l!YA/V# d!\ %8 gw ^3pQT݈,k*SIAT K r]bPi?H^60DByǸް,wp<$ 5uMfw@SwvQ&ȕP(U{I塦8yC m`+ S2j6.=M+V ӝ):qףH@l$X Z)-P)a6y+$7^[q- ɋ@)d T#NKeA^>@d  +s WWA"-G_!YpGYA^@*:-iU j i|'`kkR"(^n+E0Kb1^9NąLB\D5ѢҒ4% v>̫9`A0%0Y ŃduI/-eQDM]F9:=94<nzfCH 4jp gk1@mwl]Va|1[qzTvc/+"PA/ZV0fU`]ya d7rFˊ@AR팩Z(*|qY;QT`l$AcH6#ƈs iђ8,KYzpeʈ8΅@u-T/("< ^DqEτa@ o^y#5{CG| I iւ\խ L jxwaԧV5^뻉,Ǯ+P{(v*T!D^Y Il%7|U}|(V'r]:KC/4%K]*G^(ꢪc}MZW0P@D!Jn}jDަzWH4Y}dn0$̈+4,j!pSbd`66995'M@d_,5 z4!_:$S(۩2i"6"UɩMkRQΈ"|{oQ*>Q(Zr>)C5PoA]8r]QrXDPh8&3\NB>Y ʄIi70kj 0;+V +iQ}Û8>/^hSP~h4Zz[]GU&X-jk`(wC\Y,P//*}MZC^qKuD(r`-bYP0`1Dd#zA΀V5P@s}ݑ5% |aJ\‘?p.: WiM)[o-/Mq zO}\Aɪa'ZD'Qu D ^zw0)59E(FTd Zz&8Ft~ ' دK`SB.["RrXU{@͟+㦈C \d?;ǢVPK6NQq\Y0f8e_ n$ٹ5'tb*Pcn1AxĢ+fR ! phj-pԈ5up %W9U m"ZhOjkZwS]DbQHpU>[:>!{)hdSp@j1,_ߩ·L%Fk 6gymKqU,[^I"%bҕ(Dy"iB4$Ý|c +&V'A5&;`$\yK Kz=-zhtu%up|>,<^*; NUQklˬ_!ժ[|W!fehTH^6yVԪ .:>1U. TigG+ .EryW,O]cgCS>A:42^?^l pr :2VE`c!?[ v8M CҚLhc +M*4$v';T{}Ry5t@6uppxJ@dP$_t%%|=W,+]ұ:d78ဌ%a tSRR9I1U.ҁK.ANZ2JT)X]L|  `}u%u]\$&,˫v^UmhXM׸FDs9a;HFVLuhAP2/֍x!|^CΑ lbU_yu5|o4@p#DcPI M8IgM+8 &nbɦ|EP̩D 9y W-%~9o zK3 k}Q!m>"NrYIC[7c;<^{Ps"o"81r1F)SW_6qΙ u*hF|y30/?4Uw'5~Oͅ]KNL@:l~P#h `)`^Z 20qݠ@)zj:II lnA?cb#w;k:d)> d~ ~w=Bj0s:f[G}%+D9N͒55fsy綦f{wz_(#y/tG%4Ȧ;UBi$` &YQ9t0 u`ba: Ijj(lR9q8(t|H9Mg$u(ױ3nr 橬6uL6XnB 8U? ɥ'LVޟn| QR .putItX谼%5Jz0 +i6?kF7~䶈 $dYgB۠Δ'әFGQ:~}Ʀc46Շ/,nk B;n9scI":o;vM4Ks^"@mGB᳄6DC")<y#?r6PfLVu,4X* $NhZc2a @:Wa$M@l TZ45}׸g|Q_X{l]9:Ġ6JRIGԸψEUIB|Bꕠҏ~8 6 Px^1~$˶'lHިt ͫ $$`ɁATxmƌU7uגּi*\E[PNFCa40 \A$VyPS'CQ9ޙrӸ|H&^Snб}T48!I"j 8g@'i :pr;F(V un])ݪcFz@`QwM%ǧgq9H,~G_Z1Ɋ>쯨)7.{Wd#0dA{ǞiXMiuAah~R !d@:"USN Æop )c:L6ԫ4(gGgaUL^l}Jx~ʐOO*Į#e:Gl߁<5 s}?C?Gh iCCPICC profilex}=H@_S"8dNDEt*BZu0~B$Qp-8XupqU?@]%1ݽ;@jfXTLW+A?0#3S8<=||,sLdO$eaoOmZ:}+sQ.Hu7y2yoaYP'U|!rgTa{2i!E,AQ)&:~\ `X@*d5snR0 0U> \?I6н \\75etِOS34{ t5q$ pp){{drxiTXtXML:com.adobe.xmp ubKGD pHYs  tIME ,#k IDATxwtTUwJI2$$ދt颂қ*J T@P|BQDRJ$Ԑ3ra@5+uܽyފB Mp=܃{SW F&qÍ=""S}< qtq 7a>(hJ߯(Z%,D[axCN{@pvw 7pnnrovMXnT3յ,oS7܄ARRҿʪq6^~Ԅ Ի4i 7a=PCDUصkgnf+Z_Hzp&xEsǺuxzfn 7a=h +5%/`XHOOg߾}̝;Go kr @1X}ƍ9y$\rtVeZ>MeXl9QgRb.TgϞE;)-V|=d"66sqA,YABB Ŕ*u4"7܄u_`Z"<\9uj3elIy0>>>E\.$;IX,̝;y`4_LȮ][Ozbbl<SRD % 8L:/UjTUKKa h֬"0ۼgZe”#SRT&[oϠZj 7akPc7%l|߿lfÆ <վ=Cf{~)7l`0($$$'/OOOO^?0aB˲l܄ 7ۄ%`;j$ԫñ0Tl&''Zkn/Kf'OO#ux(T\NA8qf5X̸pRQHK.R @Ģ b('dܯzs^cl6o6 0sj'/LL97|Y3V~!ϧpرW)Iw@! +^a(>ϣ5['R jDFFO3nGԯoaW5xYQc&D/ 232سLJO_w`0=uֱo>ڵkwNĚHBs%'&(~wZ$Ai DՊe *Gto)rf 7+~KIJJ"33R4G2<.NZdveܭys.$,yj(<.b!--/r kIX^gIv'ڵ_ӳdhW£ʙ ߱/9%]DufOoRIWnq$-;zwFӦdl, ;xةLq!X$wZRSixlٲQFREubTeP'fs&'V1h(7o߳$ŋ7dw+W7ͥ]su Yb4Jb֭e0.qG8ST}͚:N7BW06$DΖl)RR࣏[tQtx0( >(_|1w~k/8Bt?端>$(($o߇^u8y# +WJ²K*V\9G!&ƕ )#Xe;X6mkʹZOBlI/ʭ\ ?j̘!u,-ugǟJ8}ZnrAǰ4iœ/3kv"4ؼ)aqJfg套[Լ9#gn\\ݸ%FDHi)8H햢HYF,m8vղ5 j׆@D]L;8%Km$'H˖M7;Kɉg*UB7#3?j#L7)9bK0 ]}l)}ͭי?_֥JJ};KOwX ԩ7Zg;fgŋv쀱c&4uq*vFN0]j-˥ gǬY㒈K,?+UJjՄضͱlJ DB/DvrFZ (Km㏅3ڵBUMKysW_u,۹u u넨[W⋎[,B,X徾6C9o;+V$nr txHNNСC,[_W&Z:e iN燰`db:t3zJLfq"Jrd;~Ec}˝uRwVYYad yuޞNmbnֹYnK~ӧOY֓cT)çsp %Sy]o ͛7faraa2225sl2 QVMZB,\(DBcݫW9SVL)zؠ 1{k 9+W [BT$Ą 6hّ.ɓB>ﺎMBC:UGZ|T$ԤBB|\zU,_\tYEQi-JW(mi%bʉϛUa%ի |9aeg ˮ /s纮3qbM!sEo<Μ{w6LcDŽHNN' fl2x{8wc,!>D`B,Z$?Bb^ί`HDM>!²&DNlǎ'O5W"XQBWQqCDCũuDr"Eh"O,]4_Ŏq(^Uݻep|yD9sr{Hci011r:2$?] ¸q2/\9v֪%yh42xsRr0m2^/||*)mWX&(74?4' 4VU" M9!;;]vY@P226lTl tص<Iv۴M6 N}%4;,KyYG/g̀eUe ֕Ԭ٠TȐطoAM\_?Uzʂ7oNn2 $Dm:Çci#Ih}rOD.(b(x+7KIIIlٲ3goolw` < ( 5'՚jF堪VZͳ!Ǐ[.+Wyf9KF0 a#g;U>_ٕ+S'S x8Orɞ:^Th_찾ʕ7oԫΈXSEU\VTk2qojNFժJ؁ۮ['-xiۭ} 9FVP 5\vk2glN>F!!>yCVq/vlfT|] `UI޽{3}|W(YW~E"vM٭h5(#%] { dAKJV믻ҥRzMW]37AzNJm߂-MQeݏfEJNX|09Y]߶| R5_6ov|Q`Du/_Μ_pE4@|C[cV 0j Z4:BlA?ޛX7U!OQ#%hWNLtMiu?(HV5je Tʧ|2F2}L'Y~Eסt۶oP DX'^J9n vm ;b;y۹ .r >2t^ 6J#0zѶy" PU R Z7Y,W8:8w4uX&r!/Wk6vxxH޽|keljg$eow몝ra,JpcoTʿ]kt~r&7*66_~Y3g{";br=fgS "801Щ9.Gp4 ii4Z/TLV.߿? p0uNALq;p (9'~L9ALz}1oA q7n3H˷gOxiYGF~ÛK긑NI"K.e֬DG*C` | ϋtci/b, XR8#5ɋثFHM؁fƍO %H5(H6ep&!{9QkH5ҥnw$+pO-ꬢONƍHKKcٲeiӆcFr9V!L?B?X>Y!TlV+?CX%Y)V_V-alÜ}5jѩ(8U4 Cc:ٻV=VL\/Zōk}hsQ3[lWϞ З r/՛0WB5{'@j&3 ׉J$$x*,SVMOo:\|}>k1c$iͮ=*g\숋Hdbu}̿ YC. ס*Ge䫯ҩS0%{Pz_I62c{4 VZZ3źªp6:GJ?jKТE~W|rTI^--ΝW.tCJu߾r&0&FvKV?^~6{,r5ms#͚5G_uPzhŴiӨ^:7mzԼլnueѢELƀxkѪ͡Ҷi2CۀF1 |ΫIX6+BҮE2Zb3+DS" o3Z6kY9r$>^t1I>evdG XOǬ=9ET]>bX=x<վ9UV0.O@~э;׭[DŽ 8wCQyd;;cԯΨWq\G.XKgqd #f);EC됆FU̼XcɒxTXxxSJ݀Ofu3?XgN_u(lݱ;) ,هɳH˰)vԃ'ӡ!db1e`aVZtdյw:=R(w6md}dפeqG8ϻw:N7],˖-Oozt?_ɓ'9.]ڵkCRaAǽAArr)E>(-d>ٳ۷_EV̞=͛tzJ"8Y]ٗ>,sCC.kxL ,4Q\^WSw@PIIIDGGs6nHz:^Ejzf̜'Srd}9۷HOO')) Wkē `xg^lxf\@CS?֭[Y~=_}}$l6{fϞ=x0ZӵGRTu)^"Nxy;Q^rl #_ØOlޔ+cGgqN-7iPmӫWjTkx̔f;wQ7:2s㌶me ''*2o[oI.^!ÇNim 8Xr#bY:bG7>}\h+Æ5j4+z-w 58"~%"s-_h &9++.]R4~x=0E |L hw Co ?A{8r~ IDATUfTFx g/g#;[0dXfܿV@tu)|8,W%Y%*]H5@j| ru.c@46vd@~Gێ+mۖe˖3~>U_~ly5YʂbǼ5kQ+&fRO=NڵHKK+ZCN,"[`zMf޽Z5_ ˋ%J`YX\;vs1 [w/(JUV>GB?=G'lfJ7JѣzUӵk>:uQ=4Tv]}v׬\9)VMZkvS&֯uoɭW2x0oyUt7,iiv9M6'WdggMzz:_}9ogblK|NN,Ad ᮠ F>#RRR8qbƍdefLjֳwݻ-$$,[f{y [Ĝ9sh:o yeV}3<{kyu%h{㪱UFQXĭ_~5ݺuQx,pYi~w^M9~XЧ:9jGjFBP?OfXXJm8BJʾ}fjVM=ǎ'24i{Os7 BE(UD|#,ʕ+Yv6_4Ry#ׯAzlْCbb;ƎShJ8a[1>򴪺|$&ͨv;{T ⷍ-*f4y}:g3Gc {Ai׮݃1 /d4:ښO"YٚdE8[SȒ1?9ش\7/ӧp옙Au=>Y*;v`XXm۶%5IZD)xTEbʶL0#LRS]gS&&tox{b\/Ozq L,#lrvVȗΊVQbŪr@㇟AՂ)65ƍca)t-q*iεqJ;tE{d6bN̞3e2bvINN&7cǎdƍחooRVAr|x"&Mb y(bU/ūېo,?`4}(j9q] la%5Ue|/16ykzAfL{}&K[ԏ?JhČhӦ Ϗ6mЪU+lWzP5dg ~DpUj22¿ pUUeM7 E|PRt<,LiţTs]/п Z+l-?,h˱0sIT.o%CfQTUv@1bg f[Ƀlh|oWש@Zӱc[>omZx!22҉TjK*| iW9w9(zHKKӯ>!Fktzr-WbːX9ȱ(%؇oF3ɞ DMG! zTԽ̌P ZƓ-.Yq/LL[е -alҵS_kᇡukr&*;Əķcxy9Lh4{{ƩMxx衺(Y~=gΜ)u|MVZoC(py)xHӔLҺPq(f޺i#%on_hĴiөP~~~|4hʕGѠ( ԪU?ЛOⅡC>K76SO p*Wr:% ._cyX { do3{auʊZy8 6`,Sp^yu<V|\ƎndC \K$'2W&2ׯ0a;5MP<)Vws>EZ5tTT !0.S&??Ć ;Ua2_=j$6MJϥl_Hjal=+T3–ZWB5ڮwQdCT/tF`1',,5klpG9Q Zs9:ofUoh@ٿPקxN*fc]fZDFF{nS?DW:Ot㶑̔)S3{&^(C?H˦okp>Tڬ`3#T;Y]'UՂj wd9Ը5&K/ws|t]s}&i5k&FEI)FA4׋іZi+N9tPV]v,[6ÆR#5ϟga̙!OX?+cXFQ)_(oϬI۩[5JK|d%o%hH(DD[g ϵy_cX;ԩRٹ,R\X?1Q["֯k vEWŻCZe徎u3|5w+#F 22恌 LkǢ,Cpxx߹ȹvLUjQ}ycJ ]ԡLQm7uwh=AV^5n#.t㪹yWXC2rR0j4j$۔<(z­[:Rв}ٳgѣbo*]IBR]DE}Y,V^I][Nvv6&鎒׮]˹g&Nje8pLtGZ&"Nnرc ޳]ľgSxynk?דAu ru+Z7YQm+*u=(ʖ-[(lN%,8> ׯOl ٹRc׻ʮ65juV\rޞ]O|JORRRXM_c-TR7L\xgrϧv@ օ$(Fґ;hiZ\2["0 ϟQJ ;v wU!hT'rS8)-fq<UJ=H{bŊΜ9O>%nxq-kىպ,%,:[&̏onpM92DP81q df""tƪl+ZjK}pooo6l\AN۶.YSO||Z7<FF~/ӷZ-y~Kչf 3kR:&MkI|B2ӊl7PZ+at XA ހvcf۳ݩWt{+ *}F㞔<Dž ܧMI*:u$< s &+KZV־zBhB233{ o΄h?5 4"zkysSc<#1'*Hgݔw MfH1 3`U?A*wYfnvkd۶m <Ąx<|Ti4ZoF9IGxç9yޛN'"Ԩvا caծ峙0~-ffGh/Qչ|=ۺƟPADcU dD_tdn+Qsُ~}&'cMMd3dٳoe&HaWFqY9Gw$BBB/ wsr~%u-[ @GSPoYqC$MR䁜Ͽ<ʤ+XƏ2m6L&e6oL^=޻2;zbjOfu`q_xa&6o+QH!Xtcm!6\,m7*;y327f :x)V*{+cVRe ΰ/QjB?75,[[K/(#aZ9z(111t2W vॗ⽀c!""$y_ɼ.^+n%u ů"rKO?~LGgsib_m_tt4۶mg,..__\;w![һWORy#8Zzws;bC10vi=Mߗ$Ǣic9rMaIt\;>+ksDj 3yqMlk'ժU+c#`0йsg+4Qr;S3k42Y(XmB}P,D$}2Тx] 5jĥ˗KQ[A"' GJiضՏuFj׮猥O Dv)p <؅1[pmΣ-Hˬ99v%,T'{FCj 5P#022wEt:iA͚%e ￟2NU6L.w0;vu1ԣ`BPw[D ^{1V}Q w\Oq`YHzv[Ywg$&ģT:Oj^7aϭ旕 ǃm3)2^򻴶^}.:2V$d,ۭc~?/T˼qkbظ6=oUe^^wQpNpVthdg^@ {(LU d1K932f5zt'[Qʣ 1"$R#7k@_y4'm@cKX9|!CFOPdo*`VodIpP#Sj(EK!Awg#@A dl}+"',"EҥaZLVuFzLzί8mOV"4n܊c.-GWmhC i9sÆ}EM`D/< ^*>U{D7N DX_MR%xg}{eK0jol0_**nfqިF::wڲjc mZ_\ׂPi/s=-Gŵ8ހ) 5 //}z.Ra.] G@zR@{e[テO<,JP E'-$$kqPs_G$Ͽ ޅiLL CAX>R/wDGRil6&EhiqotƎCF4ׯoUՏI4L_X ~Sd]i^hJ9(H":=a V9Z%|а!T!! qԹz%*Ӫ~k4Tޖ羦|Y ;VLÆ L߄$^?}{(qEɢBt~Ќo갞}28ƽT>^F ϱظd| k^ʜ.] +> KiPLeKYڸR%Ij7(t2^jbfﰕr9{*VL&LڵJt_ NfK3ƻ VBJw~,}#Qyv˥8=:k6EU+8zIN e?YADz/cW:]o#<./e@L?J72#}W)QU?$ؽwwӇٳyypq:i}yMdV잏WS(FQCgeԭ}5J!TFJx$,B F,D, )22i IDATJނ1cQعVebnFzewZWRvèS.k~BN"!1F΍zĉ'  O#l蛜k'+(y^G6Lnz0ӰZO?q/ɹUnM!hd={,w_BUӹso$dj?!.NƼܸQkhN]qay3 x7"ԓ(%1/=O 9f~{F˦Lj:a\"T3zp5ΓaoAU-y(1eFz|" !ʮ{TR}7YzaR)ݴ MMޮO(DD 7oÑ1+d_t =z4 }P T6>v/U͘:; 聗71U[ &p#QAY#Q)YBV9Py񥗋u*%ﯼ"O9#uX;D͚<DJ`L=ɾ{܃R@X,̘9{vD!T&eKX /w+6ՆכH4('=}ECٌ}U[#EBDxU@9w 5ݺSf"[=7TWc%Kd۶X<Ұ~CӦVӧO3nX@` kOކ[wJȿ@v-(W: hUEhHN'뷔dJ#jc\kh56& CA&Ny[!*ZZW/ /aqhذ=I] 6*el2228q {c|s[ eҽ ُ#Ţb0%ˏt+htI=S Պ"̀ ^Ϫ[9KAm uOcvM}~)aaj_ wQ{ϤwHBMRP@ł eek_ۮ ]ۮtQ wB(!L3-?&"E+0 ;߹9۾=|'$s?aÆ?ү_<|<ؒNp~Yٰ +3dz}jH#)! ,Z6;cXKI2R##TD+Q䐉ϊ9&'[v(hU&ĐM|HOߓwBTk.G2NXGDQdذsXy̚2{>⋨T7^ys Y0{VOc%HIһUJy;nӹwIΫTl3v#?LIuU\(Iv{#]s*d+,҈FD^'*Yƅ%>*ҺDL6!&@8<Ô8aKC,Yr k:z*E:-^<?ezxM|p8cG^ʮ3nd k[HV38u<" =וe9BhLJZSPU= On X^%3F+5]0 v6ƈ|8Ezw6-0 +jJŕ~ӯҫG)sv}۱YQ}bHO;X _gyl*S-3t/ fpHQ*U֕'`V =a.Z{YZ0~Ԥq:CaP|-^ s4_~ŋc( c|#O۽$&[n' S4vSՓfeܠV!HTIUUPNss%)[bN3^"ۜwC`;QÏHU8aE5j<|旱|S <|۱c .;m']}9Pĵ9?y:YCI4$P?-mJOVҭ|B0[K{3QhzӢ}s?bq‡w̋Rظq#7p+/s]n|~2!0y|lX+ORHS㎿qu3 9պ JVWYkfEEQx9X|)&kΟ}f}?<^3_;'^*"#CUu26-cnQl{>^xf5>_ֽ%g0ubq`CT-j*aଷ Ǽnrivs~eKc 0 ]LC$slذ[0Xf 'O^@$^^ۛ{R[+38{Q#奷NbPo?C-LEb.[B0',GQRS!4=6r'QCfث޳K '-` ˱W?1g/dssR}b7FM/0s3@n;jG,a}7^u(,#!{Ǽyz٥1GiSrtRz0? È5]d˹O#כAvn6o {n'Ʋʟ.Mnj?ӏ=#<}IK-w:qn[ƛGbJp:L ;oXȮNpNjY.tYU 9~-YhM5}zA!V8*QMظq# Ю];RSSZl6ӏ AL y+fp,׃= *++)(M[[$ Lw++EEСqd\q4"0WoR#h:\{8u8<(ib7쪎`  9~-wv;bGU{Q=o?M] e4S>7KcNg?}"5^ٔq:\}H2pw|xj@c3aCo4*i.?+-iA$ #z>Rlʕ+ٰa 7h##C;=,v:s?2jxdNwRfT-x蝙H)JLB.f $aVhlgL A.bneSj8bqv'5}f !004] c*KW,]%b mw>v"ѨE$@䪻!qcYDvV57c>7'_@a^g|2 #V܁82 U+1K7v{΍FZZn0-iGQ:,-QU,=6Y0c ~,NO$&xZªU u#IHH8fS=zrN>VL'[wzd%CsVDdrq>{w.YO?d#%, =JȳUn"Dє,膀&B]H$KFB4X0.3bdG9g\)۷gK1^{*2 ѿn4T5 )ȰkډN w@ $sFv-)ou-V׵mq_Es{VĄx=ǰ{(X]8R "n]0P5M7E4<(!RT*B5* H,2A#H.L&&s:?@DR T$6lLgؐ|(ԑP8 ^EKl P kM;:API:a=vD'͘-i ph7NW!j!,GWlL6ޟqfo%G ::&,,Xǯ &Zs[Hkxu Q]& (94?)f:3϶[o1fV677vLX]bGjքIp& *)eL1[GD!yRDT:B} B@Rg] ^%C щdJdJF2'1)hz&6 ԃ "]n "閿k5D?K(j'ڌ [; R$Ik׎;Q);V MMMGXُ'q=MYZwl,jih!sSGB ;$2:w.=]vҭ[nVµXX B1YZ i9wg"m^GĈ w jj%͚dltjoDaws _t¥QV:4LLd$ UWIKh(b$.9K;| ]h*{ԎǤriـ6aDIjk5o=czRvDA ;FܒBd'IYW̺f.F"ց[HGړ5tDzrdn+ )Sy% ?1+̓lꄮ+h: &'1|>kv;CE$*+dlݺA5|.մ72*./cڀt;+'+ܪ n| )v tn"틎)f.6 ̙3k"'4s=WOsrr835saFo=tHb5NO.~yo}AH0yY치-::q pI+Tt7&Iٱip‰:vhl괣}ĩ5,Z E"cR<0d ]@uWz_]ۓ3z#\rֻ'tbl%9HuXw `%;͙|駤:/\MCؒC}x8~]RRs'PYY {Rw|ճ0(UqeVW6qZM#j{yeEW .`@^숂@sXaEi}t`8-{sKyzE9$* ,XlوNiQfݲ^GSWY^fA f^F0,ǧ0 oQuf}_N>\?:݇zPcՌG T݈a#~. 6??cS x|YX,WVQ $e&1 9sp,N"8OWEEE< ƴU-S(qm|DT ƈ.Q|M0Ex8WyɎV"L[9Fwf 6ϛbpӈbQHQQ7z˭ q2%܀[4D ONH#ʟ+fy02"HvM<;;gw-g)r%h`stDWɒőn5}vk׮{ЁQFS]SKi67('SiIk\;o3 k"|mV5! h sIUe3.?/TzBC fIfbjRT'E{(p\~p9ΝPz|l`I?k .oA뎯cL:>/VҥK}"s $ըX^nEe`0X͈^R3K"yNw䢾|\rSIۼF?j7ߤƌّ= dE fV ]SNM <96l)ރNW CYgM^z'ݼp-T4 ۧ:xUoJ̒nI#/.ƋJyie IV3f`T2v4qfmvEA83 WG>^\_!Cql/Jec%U-m@^6sˋEF8g)^܃Z<~f9NXqt:jnj~5\79fGѢ*I@4Im˗Q`*ldh2fgl|a:uo6f2ر#C _? IDATaȑٓ%3`so~̜!(2㏹ ܥ ^V߄,ѫCY 'KUUY *&;/7tM!h*Ifh HyrzgҽGOJmPETFS#Xm}Q5Vjp͠lkH-:<,YUZGl +!'OwwOˣzrn\+K<4Ex<^j54nҜVb޾ Y-*1^ H`sCͨjłbjo.: q̩ b9DP3!K.yq9 x'9A̜5GN2V6ANɅΘ` ns2kև1MDr<6(6h-d;Tf6 ?O(V_8֭cdFfaDnQѵC!huX@ #=s:,ZPkmi}EAD?If<,%o?IĉؙTWU0yٹgy,̟?d.bytMaU. #__ADoxWrvYw#^P)HS(m^3vSK4 \2NXqf&l:vhn]QφrT!E Z|b|8>˦NCSUv8n6dFءO&,z#Z,NX àmOpAN? YnfRut]G49/ 3f@4U |uuTų7±knoAcc#VڞD5]KF$il|Aē1Um\{fVw`nбZc^ݻw +w=3FAEeΖj+q=Q 4DTYC pQN8rxKCH&%E?SO $g`gGr Xm6-[ƀXT(-v܉ H-ic69yHt5 Ub{N'_QRR*w<2L7<8W;ylYNL$цeݺuqŠ .b:o.)]j,>L:\Z_E7PU EѐMIZS}T7{, Mi{f,ګ_eGTj¢ѳ'ӦMc8(>P(D dǪ%dl +Qzf,iΙp.C TY*&eeZցi膎tsHXH` H~~]{;h(Jh ,8$ugϞ̜9/ێ^y&19vW5( UU%,+hrԃsrD")*kTVu}wXM"Bc9d`:MMx<=W2E|U7rKv%gq&<`t(*KsRwi:joGd:Xbyup(D0 8),,tr-&Q0Yb2~ 9jmS>:pA\ 4C@4JUj|㲘ktƽEnŚaZ[3۳+WLt]cj+)tq_0|Vpݸ|'ti'! OPT|_0fbpqc(/MAAgN8D(466%f|bihѲ`1dɒR`(D(" X,;Ɔ zL,BcM@ϏfVG'7Ɂ$Pȶ(FcU56+ bn<8܊ٜahB-f'f{w>sLzmqlO 9UX_źOF413byL:=G9>/} t{)vѣG0% ļy`hRFخjzl @ufʚt]oD"A @p86i8ehl6+V,#Yhi'c߂(韖kD"2UUdY!b6aGX؜N$޻+ܹ3Nb) kb_-Cee:YLIPuRwS=6:ujo̢nyPޫ$NWN3#h4J]]evinb#7ym|1vtJW54MհB]a FdIIIN0$z}x^\N'>Ʀ&f& UU V'8<qoRUUE(,nb\D $ @FQZA@@@D#d#cl`3I4kWIlva`9;@`anV(00Z&QkFsS9.C]5{Hl cBA^ f AfV&O>7aP>Ƣ+UU iFl\&L)>>/>+S__Oe00 Bt]۴ +bp)$&p٥SF7CY8fk4{H&ɦT '{3%VSmXl$K&sffҤI@^Bj+w2E!"-=:f0 o50 M pk FuHꫯ"552{Bb."6mDF .ٝvi:MѴnaD_:f())aU5f8g'uJ'3$ +fio9EJ)δYK~9EQyYҤs2`@ڷk ձm6xYye $)BhP[[+9}^i-vWަE^ȪƎ |}-NO/; J`kUl> Q__wO5vʛ|WZ  Ivdlf^N~Z7Qq]wurM70en.N 'i6SdB'2Ҳ&&Bڃa8]@]ǜ9sQIdWS?Xʨ)W33-,,O/fӮ-X3`&;Äu'3U& $0k6c& á)Pdmu3_mV'((J4RQtᴘ1 **+*bwY6i#)ΰ#:Y|8iӨb|\ٗ*pۨtJiKقjFQ(f j46GzALqZFAVTM)v:<آNMS8ʚ&v+0jԨDF|֭[DFbMlC5XP(!66'Jd%INc s~SD5J~~>SL_O SL}~"ٌ$a1D `W!77YQd]زu3C:1PTj_o8`Ĉ<_u Cun݊(Y'ήM~y @*"Jbh=e0ifΜEaٌ;Rp8LeE;v`wYYlg@eBpp86:SYQaQif^I)JH(ƚr[AI>Թ)(ZgTL bVc~b#&Q`h~n4*W_sQky'cnZD.@ёGB?$^gw  : A$1k8)[z3+VYs?aUuU5wS_[GYY555hg CCH$eG]]-(u@hڳjZbذ$ 9"U|>Qս[2l6;wq449DQ(іI:*i`IޒN8uլ%P` ^__͘2eau5è%{v~DdNBN్%HHT],d#%L;_7_'##|3Ü`TTcZhnbFuB>Nj,G0&V]CmM,PԘ8#)9ӉjE$0bsQUEdYF G"1]`PKjՔn/? ܫ}i0PpD&1 .'_Uxdx<d9Dэ؎l΅8{/LOazayI 7}a!D"|^II\.l6fQ1X.uEeH$B8&1ǡh4GsCUÄ{*ֽ1U068yoWB-h 0 ;i缹N7e^ ??8gu 0OCXZias|l6sUW)sk2br0I!  R[[uHJNgdثWo>`> o|>;vՊlBc1ehTAQkoJUU%B.|kO* Db $oL7;vO3hРԒ(@At̤IeM4tHMME6b*YuJDXD8AVdh4&km|Im4EGa Fl54 XCFh?5DǑ9;J9w9<̿4!χWFnn.dffb2~ƒ(LdHO$VSR՘}c?i_V ,^hQ =Lt(Z4s3S % sםwp嗳zDmTc:cFkPc-J4ښ2;6G  +#bP.GXLWz/r9Hx&[}6Oc=Fuu5( Tncjɾ @SU(jTm0t5m/ױccװa졗#p5R |4ң`j. IDAT{쉅\?fsvIN!.a{OǫXlaR9] H4hL]ohX EXm.xт=+BTCݙ멨;[I@ZӍ͐&{o! FrrJZTeYP3F }]vC >_y_0YS0YSh(~wYZM U4\=8eVZKa?]F=-id MD Ss$T0fGO뮬J123~ۥEqŠXĞDM?)JT|KAS~H'2U-}j(4Q`TQ\X1NXŞM<̎9UudY7}l6I0f&@ vO K0`  6v,1Ƌb,]-uV9g+,[-~S]uoRۿ;1Q,gϠqO*da]AM#^A$ ~fhŮ4Rr/b=rdx^__FezV<#^ltʝ A+ 6 lkgw,*ڥ&u/t`JR,?i9ێV௽i=i!r'8Q]{<aOVZآF !2< m֭qCDG,]z Gdif 땗0N ةk ڝ@+/H0&, ŁOG˶貄!۹-5joLҥK[FXT.S=wzITvI+U$,ާ l8lRư 7ׂlْ+ё%Kd<D Rmؙ.F oڧ{ǸW X!eɖH\.Bf͚X\po@^wpCXX!]C)?\T}G]>x]@KyAhq[5>ݼa*%p[˒2pYR4nV>O*|G}4V#;wcLn+`z/p1X.+QrAPeQʕǍ mX90Q!lXP0/k`%ztꩧd)o;]d,98UJu]r @)@7nj&htV**Sm| ivTB4^5Mq;ҿ0e,i Fm֨ w.?-s `%J4Gi."n6>cfLO܏V kq5[F{E,2i1e/e3(eiX~OhiN7iKhޫ~Gwr|w ?~d#̸ vۧkضm[D7Yt)]w79XLmzuî1aMUae#@~׿Ŋl;-;~ݎS[HJ=B:|W\?+QU*Moz3яi*325q/JvmaTR[X72ӜǒQ`Ym_V !8F{z%R>vf>p?o{[ˮ jkmi3P-u[QwV4Lcw{ry^IvV cܙ`{8i>''<쳇վX^Uٶ[o|C1UL>K1:nS@qyfռ<-\vFXN0bMgt _B[o翎o}[Vk6jkku;G-Z`t)Xvh%1~%ť j+CnŲ,,Yg=/eA)ZkVh_W>@۲,ڵk@X8He&'qR/G?!=0/f``ŭ%Jh։'Ȋ+x6xf 綂vxDo5ZSy*tip饗bs۬ (VZs}R~KR<ʰ_l񭡓!~ Ѹխ[nض};Ŧ t144E]Ė-[NyZc 4jUan*ޅŖ-y/s^~vJ䴴R1⯅1L&Mw΂l~}$y2V?A)p%J4//J# h0һ1j9s8gXi MjfhiR>WQ%`< u ƯOp?ضmR+Q(Ʉ$Z sX) 2^e5B|^:orWtҍp1 ҩ4?8BRف=RڤrC:ce)Om_[qXEpg@ -ƑV. -iv GX~]v93,B6uTh,۶oF)|I?-rHeu]r hIgNiev3{_ë 7q^.7,z-Lg3Y}9*Vjtnh?_b:ȵK}9jczb5O>0߹Fnf6n܄ytvv޹Ja%Zn_vV0u_Dht8{n\Y ׬cddd}Fc RըVԪUZVacJp?__ Q.y e5T&ū"17 guA9WI{yQ>F_UrH'( 3F)gn9xUc_{^v|k9t/Bq˖9J%VD-o};^}+1_VlI1ny;+Sv@.'x8VX 'ģl/]gɟ=O?+QٔNKIWs m?xڹ'V,liE?x@P5~}Wu<ǭkDfQ__=*kskr<7t㼝[hvkhNNrYd2yY`fؾ܍1>žӿt ' 7Ezim+Zô-I: 2joop_}~ H =gAhs7KkVT&j^-lqZG/%/`TLkYtm+HbOuY6_g|MHM!YbAiG+!|>J}0k>o]zVK.qBI)r4v[{l{3@6z\9K?&fBb>P,(tI'ſ^}bA`93~y6o<]Va+*aT4[Xztuu56'|c>LdKM;K5\V]axWWWJhoZhQ|-e.) \?X`ȯU\\V6圳 V ߍaτ+a9GA8v7VD{P}W/}qY7ď/}y9򆦭:5YVmV`9B>h1a)C2^}x+[q W!ae2$$Lh.```0tҦEgƍ2,єp*t bca/+e!G/YB13v_*[qF(VAT*ETs97~u#dڂu/ovۼ)R6:94:QɃZbBjS+\`塵 ,OX,&JhomGy7[by8g>7^z^]ޭԶKWr(`hp?0lFQ]R^S9Cpu;#6,VCJBFGG^u~#s!ro|}}޸vk4Jx'< )%^`ΰRucL+#xr $:ԲRXYV> sd3jhUF|Š׾t:+Q*Ns9ďYNK_"͛u#V ceɖSisOx+LK)IRZS+=I>6z=wx=._DXXy|牤 A7?aag .EjXN椓N3Jpga|7wlٲX7A+wbsmUYK+, %-q? *1qY )%g~e1j5h6JZx/'VD*a׼~Nw> m]f5QgB "@ @i0 ߘd=D+zzz8/7p-̋vQX(luV}+ђQɃNQioZyn][ fr)e&EǛ1StZ"O|+W#pZ"<!amBxO<+[1⬳ vQO:c=6VDb*sOn/ ;Gȥğ)6m:lSHp\"Qxho"-[b@S-@s671W^~2LD+l嚶B9: <ԓ\sՔJ٣\%ZBZ-!S3ҷms>+<[Σd2Y=y+!ayثl`_%Eeӷ=/ 1".ŦQqiJ^Z6"tY,[v,`V Ϡ1|%,YrtD^>q^zN#}s 7܀R_!vr\Vqe5yH9xqP-1[GH':T522"#MЅ B?;a-fx!v Lruze GGC´F(tl伢pqmN:uzQaV>S %\pc9|1K /<[r1_4c .{m3*C5;/KkB=άWLORը+O<1VD;:Ҧ\:G@X1K.2tܳr]Zu[S\ n=\<|^`oKFج=  ^`6CcN]ON(ќph<˫9Ym_Fϒ䂒~u?x۸YvOZ\.S*Te*JJC«^wq]z.7WĔS*΁i!aF1XN[ƨo=O|8];uOt,?z]jjz0p3"hQ:Msz!_?pWρ_%z暫_4݋taѼ Lo ^Q~Cvtww0)nrTw(Q5X9l8B{xG,e;=)9~>]4Sj%K3|ɜr)P(QgP!í6B00iX Tq~J& ;]33w'?NTp{~+|?~:}k&:,t '4My,!SA_c(m_Ie>Pxx_?1KaѢEJ~mpS3]M A-VXTjvUcV<+ۏ,VN^xaxaK/%'dw"YBAh{m)v/u\MNAebeI+)BX 侤)tv- sRя-\w܁ v,jۓG%a!d趬`9- e`˖ͼ__3>~`%JtXN7 ٭ˊۇ Q^K8AnK{tZR(vTf QyWp}h J\uUTM''eVn&`HmC B8:NBT?y`%J;y\򎧒j'gpj-.{V.U eQsw|DrG(oߝJN.j [qn  ]W&kq2A'x}/++a{ŕ]!4هЊ #irZ{~} E8Z<3 %MTv*^ޘYƭ;0EⴌQ(w=xXN{,W_`|6jI ݏW 2[a }r< 6?3j+#~7wkk!B;;Z6J "9lx6#e i ͛6DXs? K@O29@X)**s!V#Fw_`Kӝtdd!`b0Dos~I 2=5Φ7SsYQS(=x DC[G.; Qm\3}Wta#TzLr0Ǩ2˗/OVDsUX//=GZb˚P1+9Pͭ`)&ͅWBHLcVR)/^R+>' *~G@wQUӄf'F ^Εs+Nb<֬~͛6055ֵ^{mHT&sϡϝ:$W8>>|A[Ztfw'HeN(oKViJJzqr*舗֚{w~#vM >/$q,B؇'mjZam0>jaF7G 9ER^|ʶ(oz y,Ŷ"twuCOo==dҙ~;uMt7of۶mLNN.#Moz3oPUn:u2žr,,hLd⯙H 7z*!mL'43;4=z l|>OFgg;&)QTp5r RJyҷi$-o نhǩ~C,`;ݼUƩeŎJ2*iu쬚f4NaU6Pz!lCHI:"_(4rZ(Z@>_H nF>sᛩ}n ;<*f 5 1>?q_3RZIN>pѪ%lo jMCCۄJw3LmI\JZFifRDV@HT+AM?VSl;8i]^[7fpp.Jcb'&ɒe||@>LIn=7qN3KIn?_K`P7) Q'LT7(D9 B90wI}+)S~ʎ1 @QT,hAˡ%<=lلnun^^wTUj*JX ٶe](W_}5?}œcҢ($ibiChfb4*C ̈́l2i =r*2;VcЪLen*AtzI.J#XuMa1n'=!*HnN FZiB*:j3Ϡq^+R'%bBP KgÆud2r|S.K \ nIV#O۷o>_cÆh ` qCMa:hʗuvvA6òPu]* SLOO Zݓ8٥nleB =E NBO O;jk0Fsc| yX^Efب|6cZ("ͱd1d3,a  `HDG6V\ɯ~+nvVO&mԞVR)D{q>Y,ew waLAEL|v-6ZM( ˹}N4mF])۴j~EP`xdaFptX!u댏OvZ6o3VҺرcrzxB |,ƒ2(h/oS 7j5j j% gl!݅I)c83314f;[3-gֆzQ\0)A.pG,{Uq!],fdFFaxdI+Q")%L `x.SSl޼-[u6&&&19 33j ZsQ6fG!E.'Ս1WG^֩V*Te<'e5,rBL&C&T*el׹TR;ÊT - 4aCEkJPҚ1D;i\l.4T˲(OZarr`bbɩ)gf(ʔJ TVk5ܺyVz@p`ppARTDGS՘ffz)JZJJZFRŭ.:1Ë@ZiK=ʥJA #%md[BK_=C_/?oI(сp^*JrD\T*STT+Az=L-suݠC~fFWܙ Ҳm;IyuvQ)K3LOynyۻZz줻nz{顧>WDR)!bVm@ -/uhE*S(C)W-LQGаlt/xHi-'E*JIg2dLt*VBݰSh;SZgњT&M!_b[;Ŷ"mm蠳#Wwtu[L`%JJeAi1*ZzFV^w`k@ʍzx~1Ǐ(%t9]"(ϰ$cǙ4tl68r,\|>ߗILMO g|hmSq4t\6C>#_(V,Vl:::)Z%J Lk$  ӪQZ}|lciR ,m•PZIJT!J [rYO&XlT1z&zn\7u=7pZ\ovwjvXѺaږeضM:8UB.pBB|HFPrAZGC)Z5ð˲=-˚X<:@(znv}?L7QxK+n1 Z"@ %-l `efdsy g.5T{+QCba1haS2>my(o j$`4M䰢0XtR)ҩT d %J(nAfW & #eL =c\V*ms +QD/K SopSr,hrIOuIENDB`photoqt-2.5/img/settingsmanager/filetypes/poppler.jpg000644 001750 001750 00000023025 14006707323 023552 0ustar00luspiluspi000000 000000 JFIFHHExifMM*,{JFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (BO+C} W޾YFI)|^Pzb¶;bsh "vPp2B+Rifjj(C ( ( ( (! -Nx;KJi|;WԦSWAETQ@Q@Q@gk/ʴk;_PwTg#|w?ν3:%q #Iqʐ3ּg#Ʋ0,oLGk7{>Xsyz:WeJsun*u Y!]Ҳ2ܠCG$'(sQ߈"tiKY@>تŭ"ⴶiu; +ύ\Lt#D-mSFY]A$TN0Rkq)ԔSأ|O{9,<Õ'5]sg7s?ʼk⇆mk}B1 7$"r> $ռ 66+EHGN;N'_?%{6<,qF733}$,6zTLUf̲J窢gF|wk{Sȭ/Iu뵴t{;CZ/"6 Wu)Բgy}o{*ehT'ʓRq\ͯCܵ+62y(_`8=놲kq5͜&%2di`95Z ,`o[!1t&I5U8kSG.on$TXБ^/|sҩyXdj[ UtN*@3ֻ 3gO1hSK42nbOe6M6|R8HWz KAp(8=_?ݧkg1ՏOQ[nj4cJ* Gj*qM؈MƤW6>0jL:\n$Lf uK"iVIp}M'Z֬7n()&E51h`ؠ\ŀ1ޢT")H??1ZȺw0}'? 'QOYP3m IC AsPj4"#8c4kՖP e+lpvt拾@EʂGi]DחR+/@$u=65=2OJ]Ս&fUrq^cF[ƱyaXJo7c$u\W<7xoWm4N&G>泃ܓzy+#OUo kVts#^ksu4E{w64z)Xw-S%TCOK6Ҵk"6=jf{9c֩S4k)ɹzaWx|b ٰbk9Jլ\33IsԆ6.FI?eP] Klne'ȫSHtӚb{d3c!Yv5}"=0ZLos%i^3y X +tdM ?N.Z0xsRD)ɾ DN85r \`}AȝԶVgMGBl~5.!c&Ԛݱ:A±b<3%uhl ۞) V$X:J `v8I{PETQE?ѰH ҮϷ}1T#ܩJs0T%l%|銳qh&;῝:S=jzM437av~-!EW@ʣ$4.pxhc=s֭[ۈՏSSQEi%r=sIk>G֯Etj@)ԍOҋ?hKʅZ~5C@[\BOޖ;7i7}Wac`$qYc)S:sִ0Z9-qjRQEQEQEQEQEQEQEQEQE)h ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222,!  u>#Lܔ*Zpl:LeT͎t;r?f>vZ{crXS:|o}?yէAa.fl_wUעL^mu[%=+>l-s'_kqGwKcn>m?;оxet-yK w6çd:\}sW9+-\~>~,6tp4ѵ-B[=>NͱmbF:Zڽl~z[u2։y̵LjuvMJ Tι[+^;εǣ_2@!L;&x"ͱ Z덖Y|Ezi@7Y™fRb,yng|yRRf0lla adeDܙ4F "Gj!#Y1 eN1ɸ1OZn>koъ]K7f]1 24b @Le=Q6*123! 4$0@`o_GԔG77V2C-@/߹ ui,͓ (w5RYg@% jJUͷNdĹ.)xh橷%*E #)(1q>r%?qY1HzKÍc"nsb]DDDFBj+Re}TP v\l]zdKG4rbs6FD˘nCg6Q SuPKu]_e}FGm]>w_hL&m+>coo{$$"@Gl\r91n B*]%\&RzrBC/< V7Z9 faaĕ51Nd@>yWL(k \]A'RQbtװ25(^krq[iTX"R9V3ʂ51kb+bp]ċAUJBåߞջiqJU@ETQT,:H*ش(4.ښ_Jnqydw*$8 B/J9M{S^|Jīi =B9} J]:r˥ 5|N>TTDNLQp^,hS](NӠ7M (K E|ELk.8˭)t ˤ:9MJ]e֝;)Bp.JXЎ?7JJO!Ƅp'!1 02AC"3@`p?Oby y%<D#&垦[خ[<1=}f\L[IY{G%K|*[Em,J+Y}Kԫe~s}ϰĊHt|?OЩ[ȷKl,afɝ*׭K%qrKf|eՙ҉kH<]I#Ty!ʙS_Ql:W"*y)xWe-%U줽*,J\ fLFO1ue5c %ESVF oň&J쨮t1ŭ~DҟūfM-X]vŽh_[{41!q"AQ2Ra 0@brB#CPp? taÜx9,8| `ۤ89+(羐kHfDnfw.lZ1us&oЏ)rWcCj)>@N>u0.1*&}6<iUm'y'ě_}'Ae.c02_S 0Rn214]PNG#y`70 rqS?RoHuXύhiL:_JFi16b`M`tqa{6PB"iXCM>7 bӟ) `s!f:Xܘo.JTf>s-nsqKtr@kHuTL{ ` V_ooaoaoa0n9U=%X9!eby0ȱcscZ'Js7ewL{ N1. ~;UCIh}#6!`U05Ei2223ym]#.|J-c>yy<_+?,!1AQaq @0P`?!Jek˾|fZo7s@>Ot^)Pп)G|3:gOb KQ@8]+,Y Z`LӒ) ?> guB O~#SK ;  `=?X@rښ e# R† I_  x" m1>W.ƒT:Y%j2?OļkQ[pЫf..:!F`.etb׊]eAyE]t0[sGײs ](,EpF&J.p] ;duxƖ`0s(t^Dok6Nd00KvDײs Mr%*4Lgo邠2̯BNd K:g3M=~hEh3ɅD{Q K`j[?_NgCzԽ lcM ѵj3 ̬2el̥\&Ll<̧f 7Y=/f O'Wՙ nKG w7O0e qo π'ћ/=+!1AQaq 0@`?-;gdi̵ksb601&^d&:qhdx@RW4!.{Q A兤95:Ń/iJBn33z P <Q 2:2PƊ9:Lجi1.j_۔J2'4te,]]X{JdB1)΂%|6Fyn Z+r P+S\6c,Vds^vAY|(w̘#20u~srxT8\ëFҖy~@_=aWv`r̃S܇t Fs5qq4}XKPi?V+TyNgz7Y+`#2C@rW)HN쎂nQ_Q#HX_Fs7=;De iRzu0-APX XőnC ` oYAM&A柳?&5Op9> L!=換+n'(rnBZA;krײ)y7u}9R/D#CT_pcn5US40CiAR-]{@9x #0CHrJꔂ۾HN,*"$Z$Pe}r4ߡ˗ ʪl(ed{z :7dxDGӖAh`mي2 rB3gqatB*P4JXf`F]f]sԆ":3Ԡ#T]} 3:PǏ\?Az\DOi4`yMSOpjkߪ g]x{E2yӄ6Kh>}cor']* ^Y| gcr{$T[Tg]qKhqc #DHHǂR v'-<3c76c úL5j :$8F$12GWx‹%X!:&PB{>bmͷ # A^%z}5O6*kͷ - k]"fF]7R *qAOe1mEK"֙photoqt-2.5/img/settingsmanager/filetypes/freeimage.jpg000644 001750 001750 00000033166 14006707323 024024 0ustar00luspiluspi000000 000000 JFIFHH ExifMM*>F(iNxHH02100100( HHJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?c}M6iHQEQEQEQEQEQEQEQEQEQEQEfYEc}M6iQEQEQEQEQEQEQEQEQEQEQEYV~Qoh2XSM?m1Q@IuxV;X㑀ϧJf0j>սv::>C?Eo#EO<:-7M=; iNw (`xM{h**qm=PZI (AEPEPEPEPEPgE֊C 4soU}>=-nxoD6¹ڧsS_x:!^5lʬ<>Ҏ%gON4lLS-[+h2]@c㻾: {U6&Kvz>|XxRU*⼬+1ݨo;yua=r+BAs޶t;HeeK=84k̍IVRw}##0i:e' 72 72 Zoll Interner Fehler (unbekannter Wert 0) 72 72 Zoll Exif-Version 2.1 FlashPix-Version 1.0 Nicht kalibriert C   C , >ƌkjXv5kjXv5kjXv5kjX ڤ2-9}w,Y$s/R@[T@Náv9PBD@ϬH$ [T@n>/|gAջ|+vS2O|оq^y(DNw-)$6mRk ;|[yN7|6+9뮽=!n;_'/oPluzqqiMZyZ# Qvm/)p܎1 v5o]S~g;zr[㮧L^#Ozi~tg-;:Sj?m\Lr^1{:U?'PzZa2mb'ߏ#Pͣ0{7"~OQj$VRzaS{,ew>{31i޺x`ve^ھSWuϤmV3'kZ(Z2R3+}-oY^bOmjOzYiYo3׎ ZgjZci[jo]wJ)[S@b1  mRk.&mRk.&mRk.&mRk.&m+2P 5!01@"#%:oeYm[x@- u僖 %ΩXP-[fe)^;ìD4LYs(lUF?c/RK{mì*.0A53d֍x։NBe!rI~⪱ Q4iY7T5#sl K|j.:[TJiάIaQXW-nYH۬v9F6nV$mhح1EIF'bǪ;zC r##A!Ѓؿ\;+%pu rWI)S(ɼ..F\^uk1\\s5zsKδϰ>q {NK*+KJZ^uWu|uZ^uZNuZNy/-1]|ks%|A58đa"ɘ%dF4dl[,D'br T`4~> &1͆XN@L1I8FO , ,P ``+%{ZT⊽#hs/Ұ^KӁ[c9p:oeYm[x@- u:7  !1 AP"204@QaR#$BSqr?裣:0ã:0%bfz#e?o-r+O>KrPo}¥1*~P\< .aOqsjyP, h<?v'6}@6S]Ἱo ku;Ez fU]*YrFр[1$ ۛc? 1׉Ry -DDdZKsbWtSZSS.XfᴚvQƝOm\: ʞGvjxbq#0H(xN @s.%9 q \skj=v3UV\Vjw/1¬!XU j u VBaV bXV"!Nۂ߲>GTuE0e.Nl+%Bk%ԫJ AMn$V`QFkeB-nV Z`Q8AU~h_\$" F~i `e8wT¿B:vy֎:0ã:0ã6 !1 AP"205Raqs#@BQс?解z1ǣz1Ws;E3-81jS y9"^7Pe63A%R'>Ӡ&_yi7۾S'EBjVo NχfRtu\h1Ǡ<spkLj.S2Kmj]ÏlK kUnk LJ9ٕI_deK#}ro=b,vXs92KW쌄^&jsPynN<Tᜀ[k(f$ƃ VPõ?S&iI5*G0hMMSphPԮyL4Ny vC$@VBc=* pu<+h{,ϟ.8uD+W அz^n]jQpWp &śj|+8 z+eGZ- Wݙ?a`pTi6l`B$ښE\@W ᪻D\r.'E*NH:L+ӝ Pt٢Oi.4ZYɅlN PiZSKQB,( Jks촢3gvf 3V"4=cяF=cяF=> !13Aq"2BPQa #04bs$@RDTr?; x`^0w/;4v?XW;pmD[#XcW; [Mc,#v1rL-\?}ͶԣL,B` <(m`iRnU>P.It;ɒ[G&Itκ%tYֵ:{2*y|?ӤĬ: ~8\S({(#:By!S )YVa"$g7g%:΁UDͷqDͤ? ez\ ;arg(.gOky~=+7̼76H3\%:U;ԽƋavj*;3%D'tL)&rE"Y ͦնM!-lb83GRj0vRXsW~b]#IJGUu3kYLWgsY#\ϸ#^Ǹ"dGWN0ECH"dDk[۷+tFpFpFpF`zC6iE!+J ®!גUC|_:㔧wUOOtFpFpBm7~ V55{5{5{5{5{B 8٢QqLQS+Y2%opaFXZT짜%}PZd2CʶSU.d N! rl%]!+q0Mɽ/kVByawEpG Z>QD" bB(r t>Y֖#tGs-aImRx6^[&ۑdihsE߱[a jMMgQ ztfaxS+SHj; ܧi; DN8=1垮a \ bT.Ls KV]5ACaDFw>+RWC<PL6T2؇ZY5B"] w;sK:mI?=&aҕ\6YJzWm`K1R/.+dhsGb[_utB%!U7q m0Gyi}J_x`^0w/; ?)1!AQaqP 0@?!:eNmSw[|T:eNmSw[|T0͈㍲i-*u$WC3VfH '8׻=Uf UaB;S5?N MVXώY{A!0FV>@?;|Tp}"8'R-Y4O(ٻ@B> E!bАx*d6Cd+eD4hB E0|Mq iS"X8mGMP`뉬.%eStk2CP٨{(c?iB]VトkY*u rxA8K8YfOHwq o1A`x$&ʝ5 |"+ =`xʀ,PPrML ȆP^dS) mNCvepYgLd) pa\Y:Sc(фc $ A~dM`7d'pȰ0!.3L(/_H0].0@H3 Ċ•bWMq r}楑׻&%9cvC&ߵMK& OSSEa1cY  DN%)@4 j&n[&E'99mA9~q0:E $(8t=&ʼn`-Q[U؄#vd a8 QW(=!Q c9Jt`p0@)*uarpdt6Qp̲MsH #' -q5H)*ȡ+L1FGs I˼)3_8g8$ꀌ&@0(['20#&X M@|L +?A ȬYN Z|t$i-Sw[|T:eNmSw[|T:eNmS 8N8Nf8%V, NU闈zvA<î)5DH*b" +%2sy"PJ~$ 8N8N?)!1AQaPq0 @?wG~ˤwG~ˤwG~ˤwGi+-0y};WwU_H՗Gx_E4;gK6Yy)M[E9\@p_HlZ>fh{ Pj۽<# cd*&3b, ܫt# ;/JlSx kH>&XR#d[C h[Gg!y(m$ S(_UQEM.nU[vsEi* F_DP I iY^%עE1JpK!F"H(*:),twܺpWyRzTQߪQcS"ЇyIWfpQ^DeO23yveM7S |F(͗/hSR5n[; w3y//////1ߨDa=_2]S2)-Hn-#q>QWrq7{Ue]/@IPW%ʷpe{JU{|K[w󙃋q QX*;TVP_hī%LŦzs*uIw-/m: *^0!4zJ+CbuwziKiK_HtHtHtHt)!1AQaPq0 @?5C^˴5C^˴5C^˴5C_57H,)whSQ8' f%^u,~>~/ zЕX{~bUD|GyժɎw I-Ms2>enqɞ'o!o>B肍Npe挜唸--~ fWGf FuX :*.ێ/랱; nD:a@&YHM;V?Vת`~x=M;Fe_RpA`ՑK#^V4K |0mnѩg(1Jt2Lе)R8A]5j-_5] 19(ҺF֕g ~#㧶'H|Nv/ uA/#}b>%F j'a,00Xʺj?iMįG>&|NWWv ~@:j}冓tʣ01N h6f + (G-c lԭe ,U]1ۼSPU,ќԵ SJS=^emf n%RUEAPv'Es*ۮY6(x_C]bUK ~n^PՑ9B \[?̽q5¦8C_!˴5C^˴5C^˴5C^˴5O)!1AQa Pq0@?߅f|o׳>}kٟπ_Zgv/{3;~ֽ%yZgv‚CfLT 6ٽH}$X#9xֽciq1J.,6=|<1Ay1߉.NYpOMa%0璄TL&h':sO9?HY}πNƌ,H'GFO nraD~msGߋQ<԰eѬ<)Ib @;/x K];L \HIX ZzPj) Ew>|% Lp,Ad5b;q.e#VKӌPDAȃ'鬨'cܰX3vcPR0]-$.ӨW77s@†ZèofXX.l f+ B(>DXND ,[,=A'7z׳>] ORZy>$\W$袨N:C Hd< QI(@ \x91|i&r6)/y/!؋dj)@*7&# IHbiRE8pIEB p`**HdR@ |-$Z;?W@i*$s1F8`Dΰ@Xu\w`x Vo~|o[A'G1xNhg{&neyb=xhWɤNK);j&O9x{7Фj̆OIRkj"#XI@4a vVӧ\X;ԽƇ&*";2[`2h|F4( $( L%x=dAi.w?EaQj0dNـ;E##dA"z\;BkcBq+! 'H R1dO)fjH[)hCGl#M&> @N''w%r,ɺ"CN+T-_CK%~3yQ 4nwኾevࢢu>YQD6xǫY\+qrNb*jkΆ=nKeU{À)wgπ|=s߼$vs$luVp$52xJ[[18$qulq$MbB逊0\bBUkEb!be\ aZa,FDVdv#UiC: ѥ)G8ݠ͛!c>$BSNA'EEoJu1ZfkRSLm#:6Xd,KuL|c*6Ec/`OV󎕕YA&bq7 H/FWyhOc6l9 Elb<8LLi.?ZgvR~/{3;~ֽ ^߅f|o׳>}kٟπ_Zgphotoqt-2.5/img/settingsmanager/filetypes/advancedclose.png000644 001750 001750 00000011050 14006707323 024663 0ustar00luspiluspi000000 000000 PNG  IHDR\rf&zTXtRaw profile type exifxXY+grtN-CdeWk?++BVb%kJ ??>_8λO1ゴmПϻr^rNt[0ʄH|HDu?r-hjc۔|܏K{<(MBh=)v&PNK~|WS;wXkBk7 ǻE|!? ,]Kӣ~=X!0~>*|;j .0C G01"H4@+QG!&;g,`nr,Eu7B3V ,w: +E0ØoBv܃? o 6|?|+n#cG'am1!C䐃" 8`9D f0RP![HS&;"%Rbj91sfr19gɖDI’EHVbIK.RJU9kRK5r 5pÙN=Թ.ۀ4x!:ڤ'SfuBXiKVYu5iԤYEVmwNV?`-f;k8DnSK'l1J1&̗sƙ`lܸ1PV p/|77Q's#oMsc3vDa#WiJ~;g'jIʄg:9ÁuΊ Hsvu}RC&< +b-؃Tri}6xHSgb*Mq)ms{b&/L#J9p1MXe4_$'^mUxChewTYlO$ 7+5uU3c{>1~lxdhFi}</>K5ԌaOfs1ݿ0I$ t UbFU$S.ܐ M[j 44"e{mX  %HjsSb̫D-2fɔ}s1#L@LhtJ4  g찔 '[+FprFϛA2664.IT^zzQM[N*j?$(*z}{ʪu ;p*R܅uߪ֊ۼZ4tAMV60.TrLl!Ο0*CKRgA!i/( αPxbWw(踠0A%l Ĉ7t3e!fƍF @"^ˁZ-]pYvJyX1IAapҕvWnmp/W\G OwOJpBK.( H, @2:Rt&dA_V*2CR:G2!,054lבT#AV4=0 }}jp:su߃57N> k/?{? bwmu>9fȌ G*cw9h ;bKmc< Ģ8+':diUq#:,q_'muʆ[e54TZfxh~e[`rf`[Kyhdʖi&"=nyK .KKG95%:NM$~i z #NC@Њ"L=V:2N03=d*Űe*@u1O&(ܱ" {pD\+KyMp/^Qj|QD+YrgJ<"kR"42MJyu3*euSEo*n#M gѷ5԰Fex>%[tk_ { mjW$VEYt/dn{/nѱ9'b-䵢(r}vB]ڈ{,>"L K5 [?&CWc/= =6k%f tϼM=yUziCCPICC profilex}=HPO["dNDE EjVL^MGbYWWAqrtRtK -bxsx>_+1lT2ά Wt> cPb>' x=uREywߟխdMYs'tAG.q;a#' [ x8.+8 kܓ0VNkq,b "Ȩ,DiH1U#P!9~?=[379&b@m]^cۮgJk5`jS=uSI ɑ~Fߔzo5wns>)U88FֹӘArQ />bKGD pHYs.#.#x?vtIME&IDATx?\g)`AD.QPoɎb$ݔV86D"DI?Ys~ʅG33N$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$Ir8vIN8~T}No%iI>.9gTIQ&y,ˣu]ϝNwFIeYp1I~$!o%p{No$8$W\@ ^ rO@݆:~1~h6~1~h6~1~h6~1~h@e<~1~T1J\!0#Ќ_f04㇀E?.!`uh㯋@3~]C"Ќ_f04㇀E?.!`uh㯋@3~]C"Ќ_f04㇀Ekey'GI/>n0"p-zA>N$gԷ]݆v+ɍm_g}+*Ƀ> S:$wWl]eY%~0g$}ן^W3!@?\|^?;!!`sX p| @O4@#`?xqϏ,'_sSBA_%i?-xfM$O  %*?nvR2@@_q />@Hs' `0~@@?  `2~@@? d2~@@7~@Ix$K'ΒL_N@ @Gl۝&NHג_ѺV\u*?ە|w$C!? ㇀cC@0~! ?㇀`C@0~!? !7~ `_ 0~A/ `u<ɉ@3}dۅH!Ќ&Imh_v|_Ioh_vٺ˲<@M߀@]?j#Ќ!Pf47~EC.uho@3~@]?"Ќ!Pf47~Eke]Cx-~ =+ʫRg^mlLy7a7I7_I7_~"ɧox==@(C*@H#*0/h*p/ψ)/ϨÙ_ǟG3)ӌrFdL7If0ӎ2L? #Pf#0`@ʍPt @(?A~1?%?5"`c Pf?_01(72D J//%"`c Pz% ʏ,GD@p G@pp G@pp G@pp G?C#p-ߓ1x-98vIN8C$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$'? m!(IENDB`photoqt-2.5/img/settingsmanager/shortcuts/000755 001750 001750 00000000000 13766352720 021430 5ustar00luspiluspi000000 000000 photoqt-2.5/img/settingsmanager/shortcuts/categorymouse.png000644 001750 001750 00000022726 14006705632 025025 0ustar00luspiluspi000000 000000 PNG  IHDRߊbKGD pHYs  tIME biTXtCommentCreated with GIMPd.e IDATxw\eNA)"P)nE%~ ۲"nvX<*(4A]&$ ! cl#›YSq́Bf5sͳfI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$IaRX`  _Nfԟ OOGS(YZ[kַ1/* 3ᙺS["biKr!<0 -tW I`2ppaD+!YV+o^.{H+ 0  ]%=wo lup>dK\è~^x/r1Mঈ++YRJHU=~ 3|% ]"_x%f T'y qdKT[{v_/UG{dK\QZ)=3#$ ]"_8ȟm:_D\^" #+q/T{fUf~2K\#fp;D;*D#18$GR'1T[KP|8:3]" 1#bQHԮ2_!|,"dK.Wߡ FwZD۳ߥ7ti"˼weW""3]j̏q 0Gĉi.5U#sԷ]R8`}e+Ju~@>3f;dKM,`NyHu= LK+exP]7ޢ#G$ ]*Uj[Guù ""lQ_jGMY 'IT6~Bu]jzL3y1N`_`I8=QХmTүnϙE]ܯ3"r$-KYSeI}foՋ잙$ jCucyey}C̍+%I)ºCz 3yvbfu$B̟̋{)9/>/s/$-die{z8:q{$ii%tPfjȟ4y\~/*d y@|p7JT:k5]aC3's%INd.3s>x\fZk{%I,]S93.#J3sA'Д%o_rJҏ7UI\F1.ne'dO)371YIr9Cs~PQ.Շě~dYf.oIfP.3R_} fJRɨ&M/&*IU" -4KRZЄ5)ur܌| 1Aq0إ_)> [ * ]Q~Ȃ=tqO}+u) ]oS"b6N]#m7tOԥ^N&* ]2 [=(7EM3!3_dХ.OE,mܔBqBwtˁM nt[V3 l'SԽ&-C5"b*HM v5QYRز~kK/0B_(eK](3G.əK ~^0JYRwXxT-WZo2ej,tM?Id=1NM2s7`.{sJr1JYRwקZchM^טlR`){FХ (tF<.u|%`z$68g{(u(.uWS-Rj$wv mgdK::^ 69="~nN& ]l{7T.vtvK mid(N+Yぷ޷#)c(ӌ@֧ZY㌢TR_f9x{M%?jg4`er.]'M6V.0]lϋХ:;|𾤮Vu|=`B \^%BZ쀂ۺH%YR:>ғ$YReD`BT%YRG7یT.vt }q*BZo/`BۺJХۍ2 oyz˨#ef6 p^ o^P>6?YR9;qGP-2jZձTَ]6j6_koښ9 ޢ? nHed0ԥ>c% ]znQ^|8#/MϷsF4m³-^յ66-"bvh#;aSx""3z pMDbk3xMMއ.Guk#wOk7^ L_# eAAux*u[ b(``2Gs<_R^>| yRٽ'm[.kG-wYT 2 ~mz꒹?#bBW'ж_$;;7ַ'+3N@/7 ]/&"x%bҒ,Qd=e)XR\h;+"bn`_ ``EZ;=ߋˁ2QqgQڪ7]GfReA:34 ]9ou^hKG[#+EbjC 2\8,tieT'~Am|f~ 9p:Zׁ3sХת^a3;_M5!TI*#3󗙹XҲXvFD'OG VoynХzNz6pQϨ<8'mRvºz#YRjX[P-q/zT+.BPOX`LaGjХ%F@(8MǖzPԥ7pj=_Ģ+SdKk+eAK%"|5_NpC5)WD8!RcT;6<Yd済88,t ^p{'#">ԇyqqt#6FļV<̿gϭ 3w3 ]m4;_F>lK836 ]k`Bۚ \ܢ2Re=z(YC։@3sgTmHvTש`zk93st֍׹JڷBzWTshnd;eAL=o|ro:&cлϧ:>I5ۯ2sxڥu0{{Ը+`oEE|\k3 ~"  zܤ73j\(,n/VZ[]m\{zX<׽Sj]BR?. jg2sP{*7{'pI3A5ϼ֘,^)_iFui[+@Rx:/!;#Iy,P1LuyCS3;ZmmbBQp׀K3sepD2̧:~sùj I {#T'ʵGP-zdf.WΣZLm2\X?`z Y=U%m[i޺\ju! xi78."&7öX@-6 ;/ZdN v\#3.?N`*e^Yo[eORm`7ctFg[~~Q z ݾ \wOO/o;5XiDE6FIm BR8.V Pߞ|j߆SҤF2kInnݥ~Kf McE}k/4_XMjMϚCRj )/>^lKmA]{yG}t \[kKP& /J}~D 3sj] Bb?2'{|9"h^%xȶ8 <\CMTS.͏&)I:sMB %I%I.I,tIdKdK$ ]$Y$B$B$I$I%I.I.I,tIdK$ ]FA߿AdƧ|\<Y ,+eK}\?.S1sٍV'3`XDcU%J$I$I$I$I$I$I$I$I$I$I$I8Ff؁e_!KR9Ás" qT3BjѸ.-TG7 If$ ]$Y$B$I$I$I%I.I,tI,tIdK$ ]$Y$Y$B$I$I%I%I.I,tIdKdK$ ]$Y$B$B$I$I%I.I,tI,tIdK$ ]$Y$Y$B$I$I%I%I.I,tIdKdK$ ]$Y$B$B$I$I%I.I.I,tIdK$ ]$ ]$Y$B$I$I$I%I.I,tI,tIdK$ ]$Y$Y$B$I$I%I%I.I,tIdK$ ]$ ]$Y$B$I$I$I%I.I,tI,tIdK$ ]$Y$Y$B$I$I%I%I.I,tIdKdK$ ]$Y$B$B$I$I%I.I.I,tIdK$ ]$ ]$Y$B$I$I$I%I.ICi ,1-tiY=41P$ ]$Y$.- uDU ]ZFOӌAÍB3#N,cKh&0peDX4px$,ti0DjS& ]Zf|R,tB޽. 4<'dcХjfIsnK5:. TZHjGBJc R }1XR OR|( ][Kms;0,ti"a!⮈pF ]*fJjG&.{]jA.GR[F.LURBJ;yȘ,t@jU`KMH-@Dm T\[MBj,tGF77#a&#&3on"#D^]zFDtG7 ]Ew8>.H8j,R/ZE[qqXR/^Ł?.CCukfDēFaKz$#/.(cq pZ,t?dfD$\QnDxn.=8DŦ_ۍZ R.IDAT>@*>Z ؏D9g&9!,suPͭ Go \ m{.H-=ӀLCo(ܥ&1G\@ujjGI`K*SZ耈8,tIeK}.> xp0D4woF?<'uʷq;ph ^2%44]jҢ"A%uFO&曈bppD|$"G~ԡ23&`"ZsBNB#bqB7>4I18dKW_ƚH_/.uwv4r$pxD xY/TӲL3Yz7:nX=ũ1W]~(y=~=YN|T+-ͦWU$ >s KTgO ~0e~]؏ '9Tׇ\n}dK ~$$6[Q-Iv++mV#E#镀1}n- ݢ\f~^[T׈O׎.I кģ/B_B. }:0MV$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I ֙;hIENDB`photoqt-2.5/img/settingsmanager/shortcuts/categorykeyboard.png000644 001750 001750 00000022030 14006705632 025461 0ustar00luspiluspi000000 000000 PNG  IHDRߊbKGD pHYs  tIME iTXtCommentCreated with GIMPd.e IDATx{}(3k D@NmRe'U7Py9#\@a;X#anx\'$# Ha,cRH&KZIH;Gno {G3*j)>;>!L(!莛o9袋 gO~𨣎 R) ɓ'0u0mڴ0eʔpל{`\(oE ẑ  ,Yc) @wYfON*hHR:@2e ɓ' :@s @BGBı_!z{e^$t~E #uZM&aA@B5gg~ǎkO0WD Ǽ};?{yHԐzY_j󢆄cOy;v9$t/lذ!>ZFCB!ӦM ?2EoC!N)^}UkbKf̘iŋ^ =??38} GL8$t^8  fާ^ :@/>}z%t$tsGk} !@׽[k.kl /:@6meپh:@eپZ , z뭱aCxӳ3o,O{5!?3}qtRߟ3*C[Z;#pkCᥗ^2C WDov5HЮ{,^dI|Yg=/| W*Ъm۶]Eo޽{/}044ݻWڵZׯ_vi 6kiZ``RS.gM4RtDRBjݻwn.\[ov/n \r 3'-[wy$n:.?=۾}o176lMYгq GuT!pK,IP(u]֭[8cb >KȻ3#_QK%{ǥ$wֽK_/gg8{G=vx!\ve[{x˖-ft2`я~(x:BB.7ouGN;8):+Vğ"}饗CO:0s0iҤGuBB:bҥ׿'BXhѽGy?088&MN”)SF\._!h4B^z=DQ8judPB[VCVUVhOZ}hY_B00cƌsg̘?<̜93qaapp0̜9s˱{@גy'-^x[n{׭[g?7o>_ַ{'~'[>!'?B_מGn贡y%B㧞zJ<W^)C+  6ryF;qYg0ʇkך@7=-b?36m$@}+_dhѢ{_{"OY?lْyBP|G{ t-ҭ{mv<}[un-̛7ϓ o߾ l/ !;v=un!-w#7n ͋HP(|S8Ё^//e~…G̞=w d͚5{l?wE $t{3DzP^z%ā: _H耄k۶mgݧ\.o9ЁqEU^yo %fͺ$>?O$t,X`0۷o4Ё^sI'e[/jcV\ eZi78]`+ ٳgc=vW_ !_ -w#{l9 ;v!_E ze]%KB_bE3HK8e˖IK^xxŊ@3A;wne8'|Rb^o?%vb܄RJ4xߣ( BB[o*JH>R=Jf`%ծ&tI=r @B  /^-X7⯴`@B$t@B$t  &rxɒ%韆Jg P,CZ WWuP,-C'O˖-og~hh(޻wo7ZzO?=L6-cGQ~8s駟zSO=5s17I&!0gΜCL觜rٿ{ JRmO9p^cX{ك}ej3I'zaٹO^B8`B_:'ec>O<12|Tme̽ L$ $3(BZmie=ֶYGSLygqˈtXgd D[Suy@j;:(kPQVGf$Qewrexx8k2˵8zr(]$hde'wZ˳^(ԾtY &5X&NBony JR(˙.vHHsBlW[ytm|rNZv%!6o@3\.vʐCr(̓,4:(#0m[( T*vu}Bˬ2ZٜDCs_21[~Z󐞡'`Ǚ:!<TQq@hLyCsh$RdV`gA33هhm&϶gD皡Fty7K3:@B$o&C л~|Ѿ&@B$t OͿ th_۲HXev}:A(2n~g{]JH~)r9"=zRIIz"y? %e,ٷT*v0yu"^m[}d݊AsocRe(ˡX,D[̻OumRoG<C"Zj֭[F[q(JP(Z.vWlxZ^oqrs)q \./}K?k]5gΜZ8CX z=T*o~3wyw}7(_rv+WNڴi}RDX,.(K[5k֬F#h4Z*KRZ-ۍq[n%n4m_Qr BXn̴.YdռyzLEQXhQK R)Nv?i馛~N{햡R/~?dŊZȓT.+!za7n|g`` DQ4ҮZCuۺZxQtzT//ߡ HH : :Hu=ĝv/߽{wGʐw:rG}4u^}ՎꫯNU+Vt6mJ|#eRa߾}޽w$Ra)Saٲe]oׯHV\ 8;RH nXByIhՒ:RzMpE=Zs˳89,ռmrnIR;%y^ O+mhveֽݢq>НW>mVw @ng1/ˬKs ջ$5:XG(+6޵nQ9,9ϻ-tLz9v*7tLe *~릟FajS~~-N[6H : |(|/hJyv~"˻PK=TӉ'~{į  C={3.B~“߮t+n, #: z&U /;(F>/_mW^oϫQe*HdퟴY,3Šhd:ށʑlYʐYEP(dR7> ¤>[]}SӞ3GɷҁU*P,G{ rson^b1S")JX|IőjjVvG+oX|Yc0*kCgdiY]/ͣ#'4Fzh؍W磕#K[L$YţX,y}qcRd^,N\i&UjQt3ƛggvgGri7vc{+I)KjciǬhsgymցf J&TC\NLKiL\YgisrJVz>?OϊEўr<^N]J#L`ooe9… :q\xb8q5k^:,mX,6uYǏuRt! dOh5ICz1L:HH: :Ь`|#d]rt4ɂz=\uUxx```=y6mZSᦛnBhR~};\fo|;8[h'qF׾D8Y رchҥw9(Fޫ߮z)K.K;zu_>8P_ ˗/} _䴯d˷yGq6/r%e⬋Y^xܹs/+J# HR ]tQp qwy]]vm\l٩iséN+ ŷ.2o-Myi}֬Yw<ٳ#eH{;S#я~ [lHTeXreGy1x;RPs?~^O}z#1Xvm2lݺ#eTe:r_~9u |Ɏ;[;>?ܑyq^{+4Ĕe!z9ݝL4?u=zr%YroǙczvnl WmKv-v[:P^߼PeںTZx.KZèsI,DIΧza4: HOs,KJ#: :H@_y_D$+TqhjvġxH-w EP>'0u93Q}8CđW;pH $t_GE3!hvEQm4#Gvjuyu>Y\xj5 Z*{b~аX,fny8CX {~ BhY`vey $jVyW-.z( XR v EQJR'h42]chRO[+~: 7000Æ R<vam7rL>=7nƍ?[,C^%T*1ضm[(JX#hZ-⋧wvi\iyl޼9~>l8BD BB(!Qr4wI><!rL<9< n.bǡh7|3O=T5kVT*"]CCCswiqQ|: : wC??׭,C{ڵK/M?x|G(rY50eʔ0{T;_ŭ_/j!PCl~Grvݎ~Su u+e^FXjUꪫx^{-޳gO[K^}֭xO~yAX,~a}3|eJ+pIDAT;wn{ 'CP2eJ?S.={{ KݬYr;f򖶙3gg憤?.Gۡ4d$٩Qx*{f/9 t4$}Y,oi=Ir s]`k͌~ Z 2$>y偊d i{mO}:: z[ r'̛Of0y $t@B$B'&;0ܡA= =C34tV$tI$np+ ]Rw@r8ܒh^r9 P3-Jm'Ic׮]LK`sfM>'U^R }п|ẈJR!pW믿~a6T*FȲR~ѢEhx;бoZ /N7~k; ~mΝ/OO \b( _~yd4'OQ|: : HH0c/(3t  =nLZ(De]5cǎq~&l-ʯxF7IENDB`photoqt-2.5/img/popin.png000644 001750 001750 00000002270 14006707323 016022 0ustar00luspiluspi000000 000000 PNG  IHDRXiCCPICC profile(}=HPOS"3HqP,8jP! :GbYWWAqssRtK -bxsx>@hTnwXTRW+BAD,X_MuY}VVgi9SyXdeE#>'ď\W}~\XRfeK'$kABggZc{F i !,B5TP)62t

Magick
%1

").arg(load_magick->errormsg); } } inline void loadWithFreeImage(QString filename, QSize requestedSize, QSize *origSize, QImage &img, QString &err) { DBG << CURDATE << "attempt to load image with freeimage" << NL; img = load_freeimage->load(filename, requestedSize, origSize); if(load_freeimage->errormsg != "") { LOG << CURDATE << "PQLoadImage::load(): failed to load image with freeimage" << NL; err += QString("FreeImage
%1

").arg(load_freeimage->errormsg); } } inline void loadWithDevIL(QString filename, QSize requestedSize, QSize *origSize, QImage &img, QString &err) { DBG << CURDATE << "attempt to load image with devil" << NL; img = load_devil->load(filename, requestedSize, origSize); if(load_devil->errormsg != "") { LOG << CURDATE << "PQLoadImage::load(): failed to load image with devil" << NL; err += QString("DevIL
%1

").arg(load_devil->errormsg); } } inline void loadWithVideo(QString filename, QSize requestedSize, QSize *origSize, QImage &img, QString &err) { DBG << CURDATE << "attempt to load image with video" << NL; img = load_video->load(filename, requestedSize, origSize); if(load_video->errormsg != "") { LOG << CURDATE << "PQLoadImage::load(): failed to load image with video" << NL; err += QString("Video
%1

").arg(load_video->errormsg); } } }; #endif // PQLOADIMAGE_H photoqt-2.5/cplusplus/imageprovider/imageprovidericon.cpp000644 001750 001750 00000007066 14164671223 024530 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "imageprovidericon.h" QImage PQImageProviderIcon::requestImage(const QString &icon, QSize *origSize, const QSize &requestedSize) { DBG << CURDATE << "PQImageProviderIcon::requestPixmap() " << NL << CURDATE << "** icon = " << icon.toStdString() << NL << CURDATE << "** requestedSize = " << requestedSize.width() << "x" << requestedSize.height() << NL; QSize use = requestedSize; if(use == QSize(-1,-1)) { use.setWidth(256); use.setHeight(256); origSize->setWidth(256); origSize->setHeight(256); } else { origSize->setWidth(requestedSize.width()); origSize->setHeight(requestedSize.width()); } // get filetype icon if(icon.startsWith("IMAGE////")) { QString i = const_cast(icon); QString suf = i.remove(0,9); if(QFile::exists(QString(":/filetypes/%1.ico").arg(suf.toLower()))) return QImage(QString(":/filetypes/%1.ico").arg(suf.toLower())); else return QImage(":/filetypes/unknown.ico"); } // Attempt to load icon from current theme QIcon ico = QIcon::fromTheme(icon); QImage ret = QImage(ico.pixmap(use).toImage()); // If icon is not available or if on Windows, choose from a small selection of custom provided icons // These backup icons are taken from the Breese-Dark icon theme, created by KDE/Plasma if(ret.isNull()) { LOG << CURDATE << "ImageProviderIcon: Icon not found in theme, using fallback icon: " << icon.toStdString() << NL; if(QFile(":/filedialog/backupicons/" + icon + ".svg").exists()) ret = QImage(":/filedialog/backupicons/" + icon + ".svg"); else if(icon.contains("folder") || icon.contains("directory")) ret = QImage(":/filedialog/backupicons/folder.svg"); else if(icon.contains("image")) ret = QImage(":/filedialog/backupicons/image.svg"); else ret = QImage(":/filedialog/backupicons/unknown.svg"); } return ret; } photoqt-2.5/cplusplus/imageprovider/imageproviderfull.h000644 001750 001750 00000004346 14164671235 024210 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef IMAGEPROVIDERFULL_H #define IMAGEPROVIDERFULL_H #include #include #include #include "../settings/imageformats.h" #include "../logger.h" #include "loadimage.h" class PQImageProviderFull : public QQuickImageProvider { public: explicit PQImageProviderFull(); ~PQImageProviderFull(); QImage requestImage(const QString &filename_encoded, QSize *origSize, const QSize &requestedSize); private: QString whatDoIUse(QString filename); QByteArray getUniqueCacheKey(QString path); int foundExternalUnrar; PQLoadImage *loader; PQLoadImageErrorImage *load_err; }; #endif // IMAGEPROVIDERFULL_H photoqt-2.5/cplusplus/imageprovider/imageproviderthumb.cpp000644 001750 001750 00000020666 14164671220 024715 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "imageproviderthumb.h" #include "../settings/settings.h" QQuickImageResponse *PQAsyncImageProviderThumb::requestImageResponse(const QString &url, const QSize &requestedSize) { DBG << CURDATE << "PQAsyncImageProviderThumb::requestImageResponse()" << NL << CURDATE << "** url = " << url.toStdString() << NL << CURDATE << "** requestedSize = " << requestedSize.width() << "x" << requestedSize.height() << NL; PQAsyncImageResponseThumb *response = new PQAsyncImageResponseThumb(url, requestedSize); QThreadPool::globalInstance()->setMaxThreadCount(qMax(1,PQSettings::get()["thumbnailsMaxNumberThreads"].toInt())); pool.start(response); return response; } PQAsyncImageResponseThumb::PQAsyncImageResponseThumb(const QString &url, const QSize &requestedSize) : m_url(url), m_requestedSize(requestedSize) { setAutoDelete(false); foundExternalUnrar = -1; loader = new PQLoadImage; load_err = new PQLoadImageErrorImage; } PQAsyncImageResponseThumb::~PQAsyncImageResponseThumb() { delete loader; delete load_err; } QQuickTextureFactory *PQAsyncImageResponseThumb::textureFactory() const { return QQuickTextureFactory::textureFactoryForImage(m_image); } void PQAsyncImageResponseThumb::run() { QString filename = QByteArray::fromPercentEncoding(m_url.toUtf8()); filename = filename.replace("'","'"); // Create the md5 hash for the thumbnail file QByteArray path = QUrl::fromLocalFile(filename).toString().toUtf8(); QByteArray md5 = QCryptographicHash::hash(path,QCryptographicHash::Md5).toHex(); // Prepare the return QImage QImage p; // We always opt for the 256px resolution for the thumbnails, // as then we don't have to re-create thumbnails depending on change in settings m_requestedSize = QSize(256, 256); // If files in XDG_CACHE_HOME/thumbnails/ shall be used, then do use them if(PQSettings::get()["thumbnailsCache"].toBool()) { // If there exists a thumbnail of the current file already if(QFile(ConfigFiles::GENERIC_CACHE_DIR() + "/thumbnails/large/" + md5 + ".png").exists()) { DBG << CURDATE << "ImageProviderThumbnail: Found cached thumbnail (file cache): " << QFileInfo(filename).fileName().toStdString() << NL; p.load(ConfigFiles::GENERIC_CACHE_DIR() + "/thumbnails/large/" + md5 + ".png"); uint mtime = p.text("Thumb::MTime").trimmed().toInt(); // Use image if it's up-to-date if(QFileInfo(filename).lastModified().toTime_t() == mtime) { m_image = p; Q_EMIT finished(); return; } else DBG << CURDATE << "ImageProviderThumbnail: Image was modified since thumbnail creation, not using cached thumbnail: " << QFileInfo(filename).fileName().toStdString() << NL; } } /**********************************************************/ // If file wasn't loaded from file or database, then it doesn't exist yet (or isn't up-to-date anymore) and we have to create it QString filenameForChecking = filename; if(filenameForChecking.contains("::PQT::")) filenameForChecking = filenameForChecking.split("::PQT::").at(1); if(filenameForChecking.contains("::ARC::")) filenameForChecking = filenameForChecking.split("::ARC::").at(1); // We create a temporary pointer, so that we can delete it properly afterwards if(!QFileInfo::exists(filenameForChecking)) { QString err = QCoreApplication::translate("imageprovider", "File failed to load, it does not exist!"); LOG << CURDATE << "ImageProviderThumb: ERROR: " << err.toStdString() << NL; LOG << CURDATE << "ImageProviderThumb: Filename: " << filenameForChecking.toStdString() << NL; m_image = load_err->load(err); Q_EMIT finished(); return; } // Load image QSize origSize; QString msg = loader->load(filename, m_requestedSize, &origSize, p); /**********************************************************/ if(p.isNull() || msg != "") { m_image = QIcon(":/filedialog/unknownfile.svg").pixmap(m_requestedSize).toImage(); Q_EMIT finished(); return; } if((p.width() < m_requestedSize.width() && p.height() < m_requestedSize.height())) { DBG << CURDATE << "ImageProviderThumbnail: Image is smaller than potential thumbnail, no need to cache: " << QFileInfo(filename).fileName().toStdString() << NL; m_image = p; Q_EMIT finished(); return; } // scale thumbnail if(m_requestedSize.width() > 2 && m_requestedSize.height() > 2 && origSize.width() > m_requestedSize.width() && origSize.height() > m_requestedSize.height()) p = p.scaled(m_requestedSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); // Create file cache thumbnail if(PQSettings::get()["thumbnailsCache"].toBool() && msg != "x") { // If the file itself wasn't read from the thumbnails folder, is not a temporary file, and if the original file isn't at thumbnail size itself if(!filename.startsWith(QString(ConfigFiles::GENERIC_CACHE_DIR() + "/thumbnails").toUtf8()) && !filename.startsWith(QDir::tempPath().toUtf8())) { // Set some required (and additional) meta information p.setText("Thumb::URI", QString("file://%1").arg(QString(filename))); p.setText("Thumb::MTime", QString("%1").arg(QFileInfo(filename).lastModified().toTime_t())); QString mime = mimedb.mimeTypeForFile(filename, QMimeDatabase::MatchContent).name(); // this is the default mime type if no mime type is available or file cannot be found if(mime != "application/octet-stream") p.setText("Thumb::Mimetype", mime); #if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) p.setText("Thumb::Size", QString("%1").arg(p.sizeInBytes())); #else QFileInfo info(filename); p.setText("Thumb::Size", QString("%1").arg(info.size())); #endif // If the file does already exist, then the image has likely been updated -> delete old thumbnail image if(QFile(ConfigFiles::GENERIC_CACHE_DIR() + "/thumbnails/large/" + md5 + ".png").exists()) QFile(ConfigFiles::GENERIC_CACHE_DIR() + "/thumbnails/large/" + md5 + ".png").remove(); // And save new thumbnail image if(!p.save(ConfigFiles::GENERIC_CACHE_DIR() + "/thumbnails/large/" + md5 + ".png")) LOG << CURDATE << "ImageProviderThumbnail: ERROR creating new thumbnail file: " << QFileInfo(filename).fileName().toStdString() << NL; else DBG << CURDATE << "ImageProviderThumbnail: Successfully cached thumbnail (file cache): " << QFileInfo(filename).fileName().toStdString() << NL; } } // aaaaand done! m_image = p; Q_EMIT finished(); } photoqt-2.5/cplusplus/imageprovider/imageproviderfull.cpp000644 001750 001750 00000010567 14164671226 024545 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "imageproviderfull.h" #include "../settings/settings.h" PQImageProviderFull::PQImageProviderFull() : QQuickImageProvider(QQuickImageProvider::Image) { foundExternalUnrar = -1; loader = new PQLoadImage; load_err = new PQLoadImageErrorImage; } PQImageProviderFull::~PQImageProviderFull() { delete loader; delete load_err; } QImage PQImageProviderFull::requestImage(const QString &filename_encoded, QSize *origSize, const QSize &requestedSize) { DBG << CURDATE << "PQImageProviderFull::requestImage()" << NL << CURDATE << "** filename = " << filename_encoded.toStdString() << NL << CURDATE << "** requestedSize = " << requestedSize.width() << "x" << requestedSize.height() << NL; QString full_filename = QByteArray::fromPercentEncoding(filename_encoded.toUtf8()); #ifdef Q_OS_WIN // It is not always clear whether the file url prefix comes with two or three slashes // This makes sure that in Windows the file always starts with something like C:/path and not /C:/path while(full_filename.startsWith("/")) full_filename = full_filename.remove(0,1); #endif QString filename = full_filename; QString filenameForChecking = filename; if(filenameForChecking.contains("::PQT::")) filenameForChecking = filenameForChecking.split("::PQT::").at(1); if(filenameForChecking.contains("::ARC::")) filenameForChecking = filenameForChecking.split("::ARC::").at(1); if(!QFileInfo::exists(filenameForChecking)) { QString err = QCoreApplication::translate("imageprovider", "File failed to load, it does not exist!"); LOG << CURDATE << "PQImageProviderFull: ERROR: " << err.toStdString() << NL; LOG << CURDATE << "PQImageProviderFull: Filename: " << filenameForChecking.toStdString() << NL; return load_err->load(err); } // Load image QImage ret; QString err = loader->load(filename, requestedSize, origSize, ret); // if returned image is not an error image ... if(ret.isNull()) ret = load_err->load(err); // return scaled version if(requestedSize.width() > 2 && requestedSize.height() > 2 && origSize->width() > requestedSize.width() && origSize->height() > requestedSize.height()) return ret.scaled(requestedSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); // return full version return ret; } QByteArray PQImageProviderFull::getUniqueCacheKey(QString path) { DBG << CURDATE << "PQImageProviderFull::getUniqueCacheKey() " << NL << CURDATE << "** path = " << path.toStdString() << NL; path = path.remove("image://full/"); path = path.remove("file:/"); QFileInfo info(path); QString fn = QString("%1%2").arg(path).arg(info.lastModified().toMSecsSinceEpoch()); return QCryptographicHash::hash(fn.toUtf8(),QCryptographicHash::Md5).toHex(); } photoqt-2.5/cplusplus/imageprovider/imageproviderhistogram.h000644 001750 001750 00000004671 14164671234 025243 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef IMAGEPROVIDERHISTOGRAM_H #define IMAGEPROVIDERHISTOGRAM_H #include #include #include #include #include #include "../logger.h" #include "loadimage.h" class PQImageProviderHistogram : public QQuickImageProvider { public: explicit PQImageProviderHistogram() : QQuickImageProvider(QQuickImageProvider::Pixmap) { loader = new PQLoadImage; } ~PQImageProviderHistogram() { delete loader; } QPixmap requestPixmap(const QString &fpath, QSize *, const QSize &requestedSize); private: int *levels_grey; int *levels_red; int *levels_green; int *levels_blue; QPolygon polyGREY; QPolygon polyRED; QPolygon polyGREEN; QPolygon polyBLUE; QString filepath; bool colorversion; QImage histimg; int greatestvalue; PQLoadImage *loader; }; #endif photoqt-2.5/cplusplus/imageprovider/imageproviderhistogram.cpp000644 001750 001750 00000017726 14164671225 025603 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "imageproviderhistogram.h" QPixmap PQImageProviderHistogram::requestPixmap(const QString &fpath, QSize *, const QSize &requestedSize) { DBG << CURDATE << "PQImageProviderHistogram::requestPixmap() " << NL << CURDATE << "** fpath = " << fpath.toStdString() << NL << CURDATE << "** requestedSize = " << requestedSize.width() << "x" << requestedSize.height() << NL; // Obtain type of histogram bool color = false; QString tmp = fpath; if(tmp.startsWith("color")) { color = true; tmp = tmp.remove(0,5); } else if(tmp.startsWith("grey")) { color = false; tmp = tmp.remove(0,4); } // If no path specified, return empty transparent image if(tmp.trimmed() == "") { QPixmap pix = QPixmap(1,1); pix.fill(Qt::transparent); return pix; } bool recalcvalues_filepath = false; bool recalcvalues_color = false; if(tmp != filepath) recalcvalues_filepath = true; if(color != colorversion) recalcvalues_color = true; filepath = tmp; colorversion = color; // Get width and height int w = requestedSize.width(); int h = requestedSize.height(); if(w%256 != 0) w = (w/256 +1)*256; // Get the spacing of the data points int interval = w/256; if(recalcvalues_filepath || recalcvalues_color) { // Retrieve the current image if(recalcvalues_filepath) { QSize origSize; loader->load(filepath, QSize(), &origSize, histimg); } // Read and store image dimensions int imgWidth = histimg.width(); int imgHeight = histimg.height(); // Prepare the lists for the levels levels_grey = new int[256]{}; levels_red = new int[256]{}; levels_green = new int[256]{}; levels_blue = new int[256]{}; // Loop over all rows of the image for(int i = 0; i < imgHeight; ++i) { // Get the pixel data of row i of the image QRgb *rowData = (QRgb*)histimg.scanLine(i); // Loop over all columns for(int j = 0; j < imgWidth; ++j) { // Get pixel data of pixel at column j in row i QRgb pixelData = rowData[j]; // Get RGB values int red = qRed(pixelData); int green = qGreen(pixelData); int blue = qBlue(pixelData); // Add a pixel at current gray level if(!colorversion) { // Compute the gray level int gray_level = qGray(red,green,blue); ++levels_grey[gray_level]; } else { ++levels_red[red]; ++levels_green[green]; ++levels_blue[blue]; } } } // Figure out the greatest value for normalisation greatestvalue = 0; if(!colorversion) greatestvalue = *std::max_element(levels_grey, levels_grey+256); else { int allgreat[3]; allgreat[0] = *std::max_element(levels_red, levels_red+256); allgreat[1] = *std::max_element(levels_green, levels_green+256); allgreat[2] = *std::max_element(levels_blue, levels_blue+256); greatestvalue = *std::max_element(allgreat, allgreat+3); } } // Set up the needed polygons for filling them with color // This has to ALWAYS been done even if only the size changed, as then the interval changes, too polyGREY.clear(); polyRED.clear(); polyGREEN.clear(); polyBLUE.clear(); if(!colorversion) { polyGREY << QPoint(0,h); for(int i = 0; i < 256; ++i) polyGREY << QPoint(i*interval,h*(1-((double)levels_grey[i]/(double)greatestvalue))); polyGREY << QPoint(w,h); } else { polyRED << QPoint(0,h); for(int i = 0; i < 256; ++i) polyRED << QPoint(i*interval,h*(1-((double)levels_red[i]/(double)greatestvalue))); polyRED << QPoint(w,h); polyGREEN << QPoint(0,h); for(int i = 0; i < 256; ++i) polyGREEN << QPoint(i*interval,h*(1-((double)levels_green[i]/(double)greatestvalue))); polyGREEN << QPoint(w,h); polyBLUE << QPoint(0,h); for(int i = 0; i < 256; ++i) polyBLUE << QPoint(i*interval,h*(1-((double)levels_blue[i]/(double)greatestvalue))); polyBLUE << QPoint(w,h); } if(recalcvalues_filepath || recalcvalues_color) { if(!colorversion) delete[] levels_grey; else { delete[] levels_red; delete[] levels_green; delete[] levels_blue; } } // Create pixmap... QPixmap pix(w,h); // ... and fill it with transparent color pix.fill(QColor(0,0,0,0)); // Start painter on return pixmap QPainter paint(&pix); // set lightly grey colored pen paint.setPen(QColor(255,255,255,50)); // draw outside rectangle paint.drawRect(1,1,w-2,h-2); // draw mesh lines int verticallines = 10; int horizontallines = 5; for(int i = 0; i < verticallines; ++i) paint.drawLine(QPointF((i+1)*(w/(verticallines+1)), 0), QPointF((i+1)*(w/(verticallines+1)), h)); for(int i = 0; i < horizontallines; ++i) paint.drawLine(QPointF(0, (i+1)*(h/(horizontallines+1))), QPointF(w, (i+1)*(h/(horizontallines+1)))); if(!colorversion) { // set pen color paint.setPen(QPen(QColor(50,50,50,255),2)); // draw values paint.drawPolygon(polyGREY); QPainterPath pathGREY; pathGREY.addPolygon(polyGREY); paint.fillPath(pathGREY,QColor(150,150,150,180)); } else { // draw red part paint.setPen(QPen(QColor(50,50,50,255),2)); paint.drawPolygon(polyRED); QPainterPath pathRED; pathRED.addPolygon(polyRED); paint.fillPath(pathRED,QColor(255,0,0,120)); // draw green part paint.setPen(QPen(QColor(50,50,50,255),2)); paint.drawPolygon(polyGREEN); QPainterPath pathGREEN; pathGREEN.addPolygon(polyGREEN); paint.fillPath(pathGREEN,QColor(0,255,0,120)); // draw blue part paint.setPen(QPen(QColor(50,50,50,255),2)); paint.drawPolygon(polyBLUE); QPainterPath pathBLUE; pathBLUE.addPolygon(polyBLUE); paint.fillPath(pathBLUE,QColor(0,0,255,120)); } paint.end(); return pix; } photoqt-2.5/cplusplus/imageprovider/imageprovidericon.h000644 001750 001750 00000004002 14164671232 024160 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef IMAGEPROVIDERICON_H #define IMAGEPROVIDERICON_H #include #include #include #include "../logger.h" class PQImageProviderIcon : public QQuickImageProvider { public: explicit PQImageProviderIcon() : QQuickImageProvider(QQuickImageProvider::Image) { } ~PQImageProviderIcon() { } QImage requestImage(const QString &icon, QSize *, const QSize &requestedSize); }; #endif // IMAGEPROVIDERICON_H photoqt-2.5/cplusplus/imageprovider/imageproviderthumb.h000644 001750 001750 00000005111 14164671231 024350 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQASYNCIMAGEPROVIDERTHUMB_H #define PQASYNCIMAGEPROVIDERTHUMB_H #include #include #include #include #include "../settings/imageformats.h" #include "loadimage.h" class PQAsyncImageProviderThumb : public QQuickAsyncImageProvider { public: QQuickImageResponse *requestImageResponse(const QString &url, const QSize &requestedSize) override; private: QThreadPool pool; }; class PQAsyncImageResponseThumb : public QQuickImageResponse, public QRunnable { public: PQAsyncImageResponseThumb(const QString &url, const QSize &requestedSize); ~PQAsyncImageResponseThumb(); QQuickTextureFactory *textureFactory() const override; void run() override; QString m_url; QSize m_requestedSize; QImage m_image; private: QMimeDatabase mimedb; int foundExternalUnrar; QString whatDoIUse(QString filename); PQLoadImage *loader; PQLoadImageErrorImage *load_err; }; #endif // PQASYNCIMAGEPROVIDERTHUMB_H photoqt-2.5/cplusplus/imageprovider/loader/000755 001750 001750 00000000000 14164671177 021563 5ustar00luspiluspi000000 000000 photoqt-2.5/cplusplus/imageprovider/loader/loadimage_qt.h000644 001750 001750 00000014313 14164671173 024360 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQLOADIMAGEQT_H #define PQLOADIMAGEQT_H #include #include #include "../../logger.h" #include "../../settings/settings.h" class PQLoadImageQt { public: PQLoadImageQt() { errormsg = ""; } QImage load(QString filename, QSize maxSize, QSize *origSize) { errormsg = ""; // For reading SVG files QSvgRenderer svg; QImage svg_image; // For all other supported file types QImageReader reader; // Suffix, for easier access later-on QString suffix = QFileInfo(filename).suffix().toLower(); if(suffix == "svg") { // Loading SVG file svg.load(filename); // Invalid vector graphic if(!svg.isValid()) { LOG << CURDATE << "LoadImageQt: reader svg - Error: invalid svg file" << NL; return QImage(); // PQLoadImage::ErrorImage::load("The file doesn't contain a valid vector graphic"); } // Render SVG into pixmap svg_image = QImage(svg.defaultSize(), QImage::Format_RGB32); svg_image.fill(::Qt::transparent); QPainter painter(&svg_image); svg.render(&painter); // Store the width/height for later use *origSize = svg.defaultSize(); return svg_image; } else { // Setting QImageReader reader.setFileName(filename); // Fix: this loads the image properly even if the extension is wrong QMimeType mimetype = db.mimeTypeForFile(filename, QMimeDatabase::MatchContent); if(!mimetype.isValid()) { errormsg = "invalid mime type received"; LOG << CURDATE << "PQLoadImageQt::load(): Error: " << errormsg.toStdString() << NL; return QImage(); } QStringList mime = mimetype.name().split("/"); if(mime.size() == 2 && mime.at(0) == "image") reader.setFormat(mime.at(1).toUtf8()); reader.setAutoTransform(PQSettings::get()["metadataAutoRotation"].toBool()); QImage img; bool imgAlreadyLoaded = false; // Store the width/height for later use *origSize = reader.size(); // check if we need to read the image in full to get the original size if(origSize->width() == -1 || origSize->height() == -1) { reader.read(&img); imgAlreadyLoaded = true; *origSize = img.size(); } // check if we need to scale the image if(maxSize.width() > -1 && origSize->width() > 0 && origSize->height() > 0) { int dispWidth = origSize->width(); int dispHeight = origSize->height(); if(reader.autoTransform() && reader.transformation().testFlag(QImageIOHandler::TransformationRotate90)) { QSize tmp = maxSize; maxSize.setWidth(tmp.height()); maxSize.setHeight(tmp.width()); } double q; if(dispWidth > maxSize.width()) { q = maxSize.width()/(dispWidth*1.0); dispWidth = static_cast(dispWidth*q); dispHeight = static_cast(dispHeight*q); } // If thumbnails are kept visible, then we need to subtract their height from the absolute height otherwise they overlap with main image if(dispHeight > maxSize.height()) { q = maxSize.height()/(dispHeight*1.0); dispWidth = static_cast(dispWidth*q); dispHeight = static_cast(dispHeight*q); } // scaling if(imgAlreadyLoaded) img = img.scaled(dispWidth, dispHeight); else reader.setScaledSize(QSize(dispWidth,dispHeight)); } // Eventually load the image if(!reader.canRead()) { errormsg = "image reader unable to read image"; LOG << CURDATE << "PQLoadImageQt::load(): " << errormsg.toStdString() << NL; return QImage(); } if(!imgAlreadyLoaded) reader.read(&img); // If an error occured if(img.isNull()) { errormsg = reader.errorString(); LOG << CURDATE << "PQLoadImageQt::load(): " << errormsg.toStdString() << NL; return QImage(); } return img; } } QString errormsg; private: QMimeDatabase db; }; #endif photoqt-2.5/cplusplus/imageprovider/loader/helper.h000644 001750 001750 00000007020 14164671177 023212 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQLOADIMAGEHELPER_H #define PQLOADIMAGEHELPER_H #include #include #include #include "../../settings/imageformats.h" #include "../../settings/settings.h" class PQLoadImageHelper { public: PQLoadImageHelper() { mincost = 15; cache = new QCache; cache->setMaxCost(qMax(mincost, PQSettings::get()["imageviewCache"].toInt())); } ~PQLoadImageHelper() { delete cache; } QString getUniqueCacheKey(QString filename) { return QCryptographicHash::hash(QString("%1%2").arg(filename).arg(QFileInfo(filename).lastModified().toMSecsSinceEpoch()).toUtf8(),QCryptographicHash::Md5).toHex(); } bool getCachedImage(QString filename, QImage &img) { if(cache->contains(getUniqueCacheKey(filename))) { img = *cache->object(getUniqueCacheKey(filename)); return true; } return false; } bool saveImageToCache(QString filename, QImage *img) { // we need to use a copy of the image here as otherwise img will have two owners (BAD idea!) QImage *n = new QImage(*img); #if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) return cache->insert(getUniqueCacheKey(filename), n, qMin(mincost, qMax(1,static_cast(n->sizeInBytes()/(1024.0*1024.0))))); #else return cache->insert(getUniqueCacheKey(filename), n, qMin(mincost, qMax(1,static_cast(n->byteCount()/(1024.0*1024.0))))); #endif } bool ensureImageFitsMaxSize(QImage &img, QSize maxSize) { if(maxSize.width() < 3 || maxSize.height() < 3) return false; if(img.width() > maxSize.width() || img.height() > maxSize.height()) { img = img.scaled(maxSize.width(), maxSize.height(), ::Qt::KeepAspectRatio, ::Qt::SmoothTransformation); return true; } return false; } private: QCache *cache; int mincost; }; #endif // PQIMAGELOADERHELPER_H photoqt-2.5/cplusplus/imageprovider/loader/errorimage.h000644 001750 001750 00000005066 14164671163 024072 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef LOADIMAGE_ERROR_H #define LOADIMAGE_ERROR_H #include #include #include #include #include "../../logger.h" class PQLoadImageErrorImage { public: PQLoadImageErrorImage() {} QImage load(QString errormessage) { QPixmap pix(":/image/plainerrorimg.png"); QPainter paint(&pix); QTextDocument txt; txt.setHtml("
Image failed to load

" + errormessage + "
"); txt.setTextWidth(800); paint.translate(0,(600-txt.size().height())/2.0); QPen pen; pen.setColor(Qt::white); pen.setWidth(30); paint.setPen(pen); txt.drawContents(&paint); paint.end(); QImage pix2img = pix.toImage(); pix2img.setText("error", "error"); pix2img.setText("", "error"); return pix2img; } }; #endif // LOADIMAGE_ERROR_H photoqt-2.5/cplusplus/imageprovider/loader/loadimage_raw.h000644 001750 001750 00000016754 14164671155 024540 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQLOADIMAGESRAW_H #define PQLOADIMAGESRAW_H #include #ifdef RAW #include #endif #include "../../logger.h" class PQLoadImageRAW { public: PQLoadImageRAW() { errormsg = ""; } QImage load(QString filename, QSize maxSize, QSize *origSize) { #ifdef RAW errormsg = ""; // Later we decide according to thumbnail/image size whether to load thumbnail or half/full image bool thumb = false; bool half = false; // The LibRaw instance LibRaw raw; raw.recycle(); // Some settings to improve speed // Since we don't care about manipulating RAW images but only want to display // them, we can optimise for speed raw.imgdata.params.user_qual = 2; raw.imgdata.params.use_rawspeed = 1; raw.imgdata.params.use_camera_wb = 1; // Open the RAW image int ret = raw.open_file((const char*)(QFile::encodeName(filename)).constData()); if(ret != LIBRAW_SUCCESS) { raw.recycle(); errormsg = QString("Failed to run open_file: %1").arg(libraw_strerror(ret)); LOG << CURDATE << "PQLoadImageRAW::load(): " << errormsg.toStdString() << NL; return QImage(); } // If either dimension is set to 0 (or actually -1), then the full image is supposed to be loaded if(maxSize.width() > 0 && maxSize.height() > 0) { // Depending on the RAW image anf the requested image size, we can opt for the thumbnail or half size if that's enough if(raw.imgdata.thumbnail.twidth >= maxSize.width() && raw.imgdata.thumbnail.theight >= maxSize.height() && raw.imgdata.thumbnail.tformat != LIBRAW_THUMBNAIL_UNKNOWN) thumb = true; else if(raw.imgdata.sizes.iwidth >= maxSize.width()*2 && raw.imgdata.sizes.iheight >= maxSize.height()) { half = true; raw.imgdata.params.half_size = 1; } } // Unpack the RAW image/thumbnail if(thumb) ret = raw.unpack_thumb(); else ret = raw.unpack(); if(ret != LIBRAW_SUCCESS) { raw.recycle(); errormsg = QString("Failed to run %1: %2").arg((thumb ? "unpack_thumb" : "unpack"), libraw_strerror(ret)); LOG << CURDATE << "PQLoadImageRAW::load(): " << errormsg.toStdString() << NL; return QImage(); } // Post-process image. Not necessary for embedded preview... if(!thumb) ret = raw.dcraw_process(); if (ret != LIBRAW_SUCCESS) { raw.recycle(); errormsg = QString("Failed to run dcraw_process: %1").arg(libraw_strerror(ret)); LOG << CURDATE << "PQLoadImageRAW::load(): " << errormsg.toStdString() << NL; return QImage(); } // Create processed image libraw_processed_image_t* img; if(thumb) img = raw.dcraw_make_mem_thumb(&ret); else img = raw.dcraw_make_mem_image(&ret); // This will hold the loaded image data QByteArray imgData; QImage image; // This means, that the structure contains an in-memory image of JPEG file. // Only type, data_size and data fields are valid (and nonzero). if(img->type == LIBRAW_IMAGE_JPEG) { // The return image is loaded from the QByteArray above if(!image.loadFromData(img->data, img->data_size, "JPEG")) { raw.recycle(); errormsg = "Failed to load JPEG data!"; LOG << CURDATE << "PQLoadImageRAW::load(): " << errormsg.toStdString() << NL; return QImage(); } } else { // Create a header and load the image data into QByteArray QString header = QString::fromUtf8("P%1\n%2 %3\n%4\n") .arg(img->colors == 3 ? QLatin1String("6") : QLatin1String("5")) .arg(img->width) .arg(img->height) .arg((1 << img->bits)-1); imgData.append(header.toLatin1()); if(img->colors == 3) imgData.append(QByteArray((const char*)img->data, (int)img->data_size)); else { QByteArray imgData_tmp; // img->colors == 1 (Grayscale) : convert to RGB for(int i = 0 ; i < (int)img->data_size ; ++i) { for(int j = 0 ; j < 3 ; ++j) imgData_tmp.append(img->data[i]); } imgData.append(imgData_tmp); } if(imgData.isEmpty()) { raw.recycle(); errormsg = "Failed to load " + QString(half ? "half preview" : (thumb ? "thumbnail" : "image")) + "!"; LOG << CURDATE << "PQLoadImageRAW::load(): " << errormsg.toStdString() << NL; return QImage(); } // The return image is loaded from the QByteArray above if(!image.loadFromData(imgData)) { raw.recycle(); errormsg = "Failed to load image from data!"; LOG << CURDATE << "PQLoadImageRAW::load(): " << errormsg.toStdString() << NL; return QImage(); } } // Clean up memory raw.dcraw_clear_mem(img); raw.recycle(); if(thumb || half) *origSize = QSize(-1,-1); else *origSize = image.size(); if(maxSize.width() > 5 && maxSize.height() > 5 && (image.width() > maxSize.width() || image.height() > maxSize.height())) return image.scaled(maxSize, ::Qt::KeepAspectRatio, ::Qt::SmoothTransformation); return image; #endif errormsg = "Failed to load image, LibRaw not supported by this build of PhotoQt!"; LOG << CURDATE << "PQLoadImageRAW::load(): " << errormsg.toStdString() << NL; return QImage(); } QString errormsg; }; #endif // PQLOADIMAGESRAW_H photoqt-2.5/cplusplus/imageprovider/loader/loadimage_unrar.h000644 001750 001750 00000011520 14164671171 025056 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQLOADIMAGEUNRAR_H #define PQLOADIMAGEUNRAR_H #include #include #include "../../logger.h" #include "../../scripts/handlingfiledir.h" class PQLoadImageUNRAR { public: PQLoadImageUNRAR() { errormsg = ""; } QImage load(QString filename, QSize maxSize, QSize *origSize) { errormsg = ""; // filter out name of archivefile and of compressed file inside QString archivefile = filename; QString compressedFilename = ""; if(archivefile.contains("::ARC::")) { QStringList parts = archivefile.split("::ARC::"); archivefile = parts.at(1); compressedFilename = parts.at(0); } else { PQHandlingFileDir handling; QStringList cont = handling.listArchiveContent(archivefile); if(cont.length() == 0) { errormsg = "Unable to list contents of archive file..."; LOG << CURDATE << "PQLoadImageUNRAR::load() (1): " << errormsg.toStdString() << NL; return QImage(); } compressedFilename = cont.at(0).split("::ARC::").at(0); } if(!QFileInfo::exists(archivefile)) { errormsg = "Unable to load RAR archive, file doesn't seem to exist..."; LOG << CURDATE << "PQLoadImageUNRAR::load() (2): " << errormsg.toStdString() << NL; return QImage(); } // We first check if unrar is actually installed QProcess which; which.setStandardOutputFile(QProcess::nullDevice()); which.start("which", QStringList() << "unrar"); which.waitForFinished(); // If it isn't -> display error if(which.exitCode()) { errormsg = "'unrar' not found"; LOG << CURDATE << "PQLoadImageUNRAR::load() (3): " << errormsg.toStdString() << NL; return QImage(); } // Extract file to standard output (the -ierr flag moves any other output by unrar to standard error output -> ignored) QProcess p; p.start("unrar", QStringList() << "-ierr" << "p" << archivefile << compressedFilename); // Make sure everything starts off well if(!p.waitForStarted()) { errormsg = "Unable to start 'unrar' process..."; LOG << CURDATE << "PQLoadImageUNRAR::load() (4): " << errormsg.toStdString() << NL; return QImage(); } // This will hold the accumulated image data QByteArray imgdata = ""; // if there is something to read, read it while(p.waitForReadyRead()) imgdata.append(p.readAll()); // And load image from the read data QImage img = QImage::fromData(imgdata); *origSize = img.size(); // If image data is invalid or something went wrong, show error image if(img.isNull()) { errormsg = "Extracted file is not valid image file..."; LOG << CURDATE << "PQLoadImageUNRAR::load() (5): " << errormsg.toStdString() << NL; return QImage(); } // Make sure image fits into size specified by maxSize if(maxSize.width() > 5 && maxSize.height() > 5) return img.scaled(maxSize, ::Qt::KeepAspectRatio); return img; } QString errormsg; }; #endif // PQLOADIMAGEUNRAR_H photoqt-2.5/cplusplus/imageprovider/loader/loadimage_video.h000644 001750 001750 00000006625 14164671154 025050 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQLOADIMAGEVIDEO_H #define PQLOADIMAGEVIDEO_H #include #include #include "../../logger.h" #include "../../settings/settings.h" class PQLoadImageVideo { public: PQLoadImageVideo() { errormsg = ""; } QImage load(QString filename, QSize maxSize, QSize *) { errormsg = ""; #ifdef Q_OS_LINUX if(PQSettings::get()["filetypesVideoThumbnailer"].toString() == "ffmpegthumbnailer") { // the temp image thumbnail path (incl random int) QString tmp_path = QString("%1/photoqt_videothumb_%2.jpg").arg(QDir::tempPath()).arg(rand()); // create thumbnail using ffmpegthumbnailer QProcess proc; int ret = proc.execute("ffmpegthumbnailer", QStringList() << "-i" << filename << "-s" << QString::number(maxSize.width()) << "-o" << tmp_path); if(ret != 0) { LOG << CURDATE << "PQLoadImageVideo: ffmpegthumbnailer ended with error code " << ret << " - is it installed?" << NL; QImage img(":/image/genericvideothumb.png"); return img.scaledToWidth(maxSize.width()); } QImage thumb(tmp_path); // remove temporary thumbnail file QFile::remove(tmp_path); // store in return variable return thumb; } else if(PQSettings::get()["filetypesVideoThumbnailer"].toString() == "") { #endif QImage img(":/image/genericvideothumb.png"); return img.scaledToWidth(maxSize.width()); #ifdef Q_OS_LINUX } errormsg = "Unknown video thumbnailer used: " + PQSettings::get()["filetypesVideoThumbnailer"].toString(); LOG << CURDATE << "PQLoadImageVideo::load(): " << errormsg.toStdString() << NL; return QImage(); #endif } QString errormsg; }; #endif // PQLOADIMAGEVIDEO_H photoqt-2.5/cplusplus/imageprovider/loader/loadimage_archive.h000644 001750 001750 00000014036 14164671161 025354 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQLOADIMAGEARCHIVE_H #define PQLOADIMAGEARCHIVE_H #include #ifdef LIBARCHIVE #include #include #endif #include "../../logger.h" #include "../../scripts/handlingfiledir.h" class PQLoadImageArchive { public: PQLoadImageArchive() { errormsg = ""; } QImage load(QString filename, QSize maxSize, QSize *origSize) { errormsg = ""; // filter out name of archivefile and of compressed file inside QString archivefile = filename; QString compressedFilename = ""; if(archivefile.contains("::ARC::")) { QStringList parts = archivefile.split("::ARC::"); archivefile = parts.at(1); compressedFilename = parts.at(0); } else { PQHandlingFileDir handling; QStringList cont = handling.listArchiveContent(archivefile); if(cont.length() == 0) { errormsg = "Unable to list contents of archive file..."; LOG << CURDATE << "PQLoadImageArchive::load(): " << errormsg.toStdString() << NL; return QImage(); } compressedFilename = cont.at(0).split("::ARC::").at(0); } if(!QFileInfo::exists(archivefile)) { errormsg = "File doesn't seem to exist..."; LOG << CURDATE << "PQLoadImageArchive::load(): " << errormsg.toStdString() << NL; return QImage(); } #ifdef LIBARCHIVE // Create new archive handler struct archive *a = archive_read_new(); // We allow any type of compression and format archive_read_support_filter_all(a); archive_read_support_format_all(a); // Read file int r = archive_read_open_filename(a, archivefile.toLocal8Bit().data(), 10240); // If something went wrong, output error message and stop here if(r != ARCHIVE_OK) { errormsg = QString("archive_read_open_filename() returned code of %1").arg(r); LOG << CURDATE << "PQLoadImageArchive::load(): " << errormsg.toStdString() << NL; return QImage(); } // Loop over entries in archive struct archive_entry *entry; QImage ret; while(archive_read_next_header(a, &entry) == ARCHIVE_OK) { // Read the current file entry // We use the '_w' variant here, as otherwise on Windows this call causes a segfault when a file in an archive contains non-latin characters QString filenameinside = QString::fromWCharArray(archive_entry_pathname_w(entry)); // If this is the file we are looking for: if(filenameinside == compressedFilename || (compressedFilename == "" && QFileInfo(filenameinside).suffix() != "")) { // Find out the size of the data int64_t size = archive_entry_size(entry); // Create a uchar buffer of that size to hold the image data uchar *buff = new uchar[size]; // And finally read the file into the buffer ssize_t r = archive_read_data(a, (void*)buff, size); if(r != size) { errormsg = QString("Failed to read image data, read size (%1) doesn't match expected size (%2)...").arg(r).arg(size); LOG << CURDATE << "PQLoadImageArchive::load(): " << errormsg.toStdString() << NL; return QImage(); } // and finish off by turning it into an image ret = QImage::fromData(buff, size); *origSize = ret.size(); delete[] buff; // Nothing more to do except some cleaning up below break; } } // Close archive r = archive_read_free(a); if(r != ARCHIVE_OK) LOG << CURDATE << "PQLoadImage::Archive::load(): ERROR: archive_read_free() returned code of " << r << NL; // If image needs to be scaled down, return scaled down version if(maxSize.width() > 5 && maxSize.height() > 5) if(ret.width() > maxSize.width() || ret.height() > maxSize.height()) return ret.scaled(maxSize, ::Qt::KeepAspectRatio); return ret; #else errormsg = "Failed to load archive, LibArchive not supported by this build of PhotoQt!"; LOG << CURDATE << "PQLoadImageArchive::load(): " << errormsg.toStdString() << NL; return QImage(); #endif } QString errormsg; }; #endif // PQLOADIMAGEARCHIVE_H photoqt-2.5/cplusplus/imageprovider/loader/loadimage_magick.h000644 001750 001750 00000015602 14164671175 025173 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQLOADIMAGEMAGICK_H #define PQLOADIMAGEMAGICK_H #include #include #include "../../settings/imageformats.h" #include "../../logger.h" #if defined(IMAGEMAGICK) || defined(GRAPHICSMAGICK) #include #endif class PQLoadImageMagick { public: PQLoadImageMagick() { errormsg = ""; #if defined(IMAGEMAGICK) || defined(GRAPHICSMAGICK) image = Magick::Image(); #endif } QImage load(QString filename, QSize maxSize, QSize *origSize, bool onlyLoadMagickImage = false) { #if defined(IMAGEMAGICK) || defined(GRAPHICSMAGICK) errormsg = ""; QSize finalSize; // We first read the image into memory QFile file(filename); if(!file.open(QIODevice::ReadOnly)) { errormsg = "QFile::open() failed."; LOG << CURDATE << "PQLoadImageMagick::load(): " << errormsg.toStdString() << NL; return QImage(); } // Prepare Magick QString suf = QFileInfo(filename).suffix().toUpper(); image = Magick::Image(); QMimeDatabase db; QString mimetype = db.mimeTypeForFile(filename).name(); QStringList mgs; if(suf != "") { mgs = QStringList() << suf.toUpper(); if(PQImageFormats::get().getMagick().keys().contains(suf.toLower())) mgs = PQImageFormats::get().getMagick().value(suf.toLower()).toStringList(); } if(mimetype != "") { if(PQImageFormats::get().getMagickMimeType().keys().contains(mimetype)) { const QStringList lst = PQImageFormats::get().getMagickMimeType().value(mimetype).toStringList(); for(const QString &mt : lst) if(!mgs.contains(mt)) mgs << mt; } } // if nothing else worked try without any magick, maybe this will help... mgs << ""; int howOftenFailed = 0; for(int i = 0; i < mgs.length(); ++i) { try { // set current magick image.magick(mgs.at(i).toUpper().toStdString()); // Read image into Magick image.read(filename.toStdString()); // done with the loop if we manage to get here. break; } catch(Magick::Exception &e) { ++howOftenFailed; LOG << CURDATE << "PQLoadImageMagick::load(): Exception (1): " << e.what() << NL; errormsg += QString("
%1
").arg(e.what()); } } // no attempt was successful -> stop here if(howOftenFailed == mgs.length()) { // no need to add anything to the errormsg variable here, it already contains the errors from the loop above LOG << CURDATE << "PQLoadImageMagick::load(): Failed to read image" << NL; return QImage(); } try { finalSize = QSize(image.columns(), image.rows()); *origSize = finalSize; // Scale image if necessary if(maxSize.width() != -1) { double q; if(finalSize.width() > maxSize.width()) { q = maxSize.width()/(finalSize.width()*1.0); finalSize.setWidth(finalSize.width()*q); finalSize.setHeight(finalSize.height()*q); } if(finalSize.height() > maxSize.height()) { q = maxSize.height()/(finalSize.height()*1.0); finalSize.setWidth(finalSize.width()*q); finalSize.setHeight(finalSize.height()*q); } // For small images we can use the faster algorithm, as the quality is good enough for that if(finalSize.width() < 300 && finalSize.height() < 300) image.thumbnail(Magick::Geometry(finalSize.width(),finalSize.height())); else image.scale(Magick::Geometry(finalSize.width(),finalSize.height())); } // this stops after successfully loading the image into Magick. if(!onlyLoadMagickImage) { // Write Magick as BMP to memory // We used to use PNG here, but BMP is waaaayyyyyy faster (even faster than JPG) // PPM can be even faster but causes some formats to fail. Magick::Blob ob; image.magick("BMP"); image.write(&ob); // And load JPG from memory into QImage const QByteArray imgData((char*)(ob.data()),ob.length()); QImage img = QImage::fromData(imgData); // And we're done! return img; } else return QImage(); } catch(Magick::Exception &e) { errormsg = e.what(); LOG << CURDATE << "PQLoadImageMagick::load(): Exception (2): " << errormsg.toStdString() << NL; return QImage(); } #endif errormsg = "Failed to load image, ImageMagick/GraphicsMagick not supported by this build of PhotoQt!"; LOG << CURDATE << "PQLoadImageMagick::load(): " << errormsg.toStdString() << NL; return QImage(); } QString errormsg; #if defined(IMAGEMAGICK) || defined(GRAPHICSMAGICK) Magick::Image image; #endif }; #endif // PQLOADIMAGEMAGICK_H photoqt-2.5/cplusplus/imageprovider/loader/loadimage_devil.h000644 001750 001750 00000016033 14164671176 025043 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQLOADIMAGEDEVIL_H #define PQLOADIMAGEDEVIL_H #include #include #include #ifdef DEVIL #include #endif #include "../../logger.h" // class to provide a global mutex // we need to have one and only one for each thread // this is needed because DevIL is not threadsafe class PQLoadImageDevilMutex : public QObject { Q_OBJECT public: static PQLoadImageDevilMutex& get() { static PQLoadImageDevilMutex instance; return instance; } PQLoadImageDevilMutex(PQLoadImageDevilMutex const&) = delete; void operator=(PQLoadImageDevilMutex const&) = delete; #ifdef DEVIL // DevIL is not threadsafe -> this ensures only one image is loaded at a time QMutex devilMutex; #endif private: PQLoadImageDevilMutex() {} }; class PQLoadImageDevil { public: PQLoadImageDevil() { errormsg = ""; } QImage load(QString filename, QSize maxSize, QSize *origSize) { #ifdef DEVIL errormsg = ""; // DevIL is NOT threadsafe -> need to ensure only one image is loaded at a time... QMutexLocker locker(&PQLoadImageDevilMutex::get().devilMutex); // THIS IS CURRENTLY SLIGHTLY HACKY: // DevIL loads the image and then writes it to a temporary jpg file. // This file is then loaded by Qt's built in image plugin and returned to the user // TODO: PASSING IMAGE DIRECTLY FROM DEVIL TO QIMAGE! // Create an image id and make current ILuint imageID; ilGenImages(1, &imageID); ilBindImage(imageID); if(checkForError()) return QImage(); // load the passed on image file ilLoadImage(filename.toStdString().c_str()); if(checkForError()) return QImage(); // get the width/height const int width = ilGetInteger(IL_IMAGE_WIDTH); const int height = ilGetInteger(IL_IMAGE_HEIGHT); *origSize = QSize(width, height); if(checkForError()) return QImage(); /* // this would be the way to load images directly from DevIL into QImage, // but DevIL seems has some issues with being used simultaneously from different threads // this *will* make PhotoQt crash often (possibly not always) ILubyte *bt = ilGetData(); if(bt == NULL) LOG << "bt is NULL!!" << NL; QImage tmpimg(bt, width, height, QImage::Format_ARGB32); if(tmpimg.isNull()) LOG << "QImage is NULL!!" << NL; QImage img; // If image needs to be scaled down, do so now if(maxSize.width() > 5 && maxSize.height() > 5) { double q = 1; if(width > maxSize.width()) q = (double)maxSize.width()/(double)width; if(height*q > maxSize.height()) q = (double)maxSize.height()/(double)height; img = tmpimg.scaled(width*q, height*q); } else img = tmpimg.copy(); ilBindImage(0); ilDeleteImages(1, &imageID); */ // This is the temporary file we will load the image into QString tempimage = QDir::tempPath() + "/photoqtdevil.bmp"; // Make sure DevIL can overwrite any previously created file ilEnable(IL_FILE_OVERWRITE); // Save the decoded image to this temporary file if(!ilSaveImage(tempimage.toStdString().c_str())) { // If it fails, return error image ilBindImage(0); ilDeleteImages(1, &imageID); checkForError(); if(errormsg == "") { errormsg = "Failed to save image decoded with DevIL!"; LOG << CURDATE << "PQLoadImageDevIL::load(): " << errormsg.toStdString() << NL; } return QImage(); } if(checkForError()) return QImage(); // Create reader for temporary image QImageReader reader(tempimage); // If image needs to be scaled down, do so now if(maxSize.width() > 5 && maxSize.height() > 5) { double q = 1; if(width > maxSize.width()) q = (double)maxSize.width()/(double)width; if(height*q > maxSize.height()) q = (double)maxSize.height()/(double)height; reader.setScaledSize(reader.size()*q); } // Clear the DevIL memory ilBindImage(0); ilDeleteImages(1, &imageID); // Return read image file QImage img = reader.read(); QFile(tempimage).remove(); if(img.isNull() || img.size() == QSize(1,1)) { errormsg = "Failed to load image with DevIL (unknown error)!"; LOG << CURDATE << "PQLoadImageDevIL::load(): " << errormsg.toStdString() << NL; return QImage(); } return img; #endif errormsg = "Failed to load image, DevIL not supported by this build of PhotoQt!"; LOG << CURDATE << "PQLoadImageDevIL::load(): " << errormsg.toStdString() << NL; return QImage(); } QString errormsg; private: #ifdef DEVIL bool checkForError() { ILenum err_enum = ilGetError(); while(err_enum != IL_NO_ERROR) { if(errormsg == "") errormsg = "Error: "; else errormsg += ", "; errormsg += QString::number(err_enum); err_enum = ilGetError(); } if(errormsg != "") { LOG << CURDATE << "PQLoadImageDevIL::load(): " << errormsg.toStdString() << NL; return true; } return false; } #endif }; #endif // PQLOADIMAGEDEVIL_H photoqt-2.5/cplusplus/imageprovider/loader/loadimage_poppler.h000644 001750 001750 00000007603 14164671157 025423 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQLOADIMAGESPOPPLER_H #define PQLOADIMAGESPOPPLER_H #include #include "../../settings/settings.h" #ifdef POPPLER #include #endif #include "../../logger.h" class PQLoadImagePoppler { public: PQLoadImagePoppler() { errormsg = ""; } QImage load(QString filename, QSize maxSize, QSize *origSize) { #ifdef POPPLER errormsg = ""; // extract page and totalpage value from filename (prepended to filename (after filepath)) int page = 0; if(filename.contains("::PQT::")) { page = filename.split("::PQT::").at(0).toInt(); filename = filename.split("::PQT::").at(1); } // Load poppler document and render to QImage Poppler::Document* document = Poppler::Document::load(filename); if(!document || document->isLocked()) { errormsg = "Invalid PDF document, unable to load!"; LOG << CURDATE << "PQLoadImagePoppler::load(): " << errormsg.toStdString() << NL; return QImage(); } document->setRenderHint(Poppler::Document::TextAntialiasing); document->setRenderHint(Poppler::Document::Antialiasing); Poppler::Page *p = document->page(page); if(p == nullptr) { errormsg = QString("Unable to read page %1").arg(page); LOG << CURDATE << "PQLoadImagePoppler::load(): " << errormsg.toStdString() << NL; return QImage(); } double useQuality = PQSettings::get()["filetypesPDFQuality"].toDouble(); if(maxSize.width() != -1 && maxSize.height() != -1) { double factor1 = maxSize.width()/p->pageSizeF().width(); double factor2 = maxSize.height()/p->pageSizeF().height(); double factor = qMin(factor1, factor2); useQuality = 72.0*factor; } QImage ret = p->renderToImage(useQuality, useQuality); *origSize = p->pageSize()*(PQSettings::get()["filetypesPDFQuality"].toDouble()/72.0); delete document; // return render image return ret; #endif errormsg = "Failed to load image, Poppler not supported by this build of PhotoQt!"; LOG << CURDATE << "PQLoadImagePoppler::load(): " << errormsg.toStdString() << NL; return QImage(); } QString errormsg; }; #endif // PQLOADIMAGESPOPPLER_H photoqt-2.5/cplusplus/imageprovider/loader/loadimage_xcf.h000644 001750 001750 00000006675 14164667645 024541 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQLOADIMAGEXCF_H #define PQLOADIMAGEXCF_H #include #include #include #include "../../logger.h" class PQLoadImageXCF { public: PQLoadImageXCF() { errormsg = ""; } QImage load(QString filename, QSize maxSize, QSize *origSize) { errormsg = ""; // We first check if xcftools is actually installed QProcess which; which.setStandardOutputFile(QProcess::nullDevice()); which.start("which", QStringList() << "xcf2png"); which.waitForFinished(); // If it isn't -> display error if(which.exitCode()) { errormsg = "'xcftools' not found"; LOG << CURDATE << "PQLoadImageXCF::load(): " << errormsg.toStdString() << NL; return QImage(); } // Convert xcf to png using xcf2png (part of xcftools) QProcess p; p.execute("xcf2png", QStringList() << filename << "-o" << QString(QDir::tempPath() + "/photoqt_xcf.png")); // And load it QImageReader reader(QDir::tempPath() + "/photoqt_xcf.png"); *origSize = reader.size(); // Make sure image fits into size specified by maxSize if(maxSize.width() > 5 && maxSize.height() > 5) { double q = 1; if(reader.size().width() > maxSize.width()) q = (double)maxSize.width()/(double)reader.size().width(); if(reader.size().height()*q > maxSize.height()) q = (double)maxSize.height()/(double)reader.size().height(); reader.setScaledSize(reader.size()*q); } QImage img = reader.read(); if(img.isNull()) { errormsg = "Invalid PNG image rendered by xcftools."; LOG << CURDATE << "PQLoadImageXCF::load(): " << errormsg.toStdString() << NL; } return img; } QString errormsg; }; #endif // PQLOADIMAGEXCF_H photoqt-2.5/cplusplus/imageprovider/loader/loadimage_freeimage.h000644 001750 001750 00000020123 14164671160 025650 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQLOADIMAGEFREEIMAGE_H #define PQLOADIMAGEFREEIMAGE_H #include #ifdef FREEIMAGE #include #endif #include "../../logger.h" #ifdef FREEIMAGE static char freeImageErrorMessage; static FREE_IMAGE_FORMAT freeImageErrorFormat; #endif class PQLoadImageFreeImage { public: PQLoadImageFreeImage() { errormsg = ""; #ifdef FREEIMAGE freeImageErrorMessage = *"\0"; freeImageErrorFormat = FIF_UNKNOWN; #endif } QImage load(QString filename, QSize maxSize, QSize *origSize) { #ifdef FREEIMAGE // Reset variables at start, set handler for log output errormsg = ""; freeImageErrorMessage = *"\0"; freeImageErrorFormat = FIF_UNKNOWN; FreeImage_SetOutputMessage([](FREE_IMAGE_FORMAT fif, const char *message) { freeImageErrorMessage = *(const_cast(message)); freeImageErrorFormat = fif; }); // Get image format // First we try to get it through file type... FREE_IMAGE_FORMAT fif = FreeImage_GetFileType(filename.toStdString().c_str(), 0); // If an error occured (caught by output handler), return error image if(freeImageErrorMessage != *"\0") { errormsg = QString("FreeImage_GetFileType: %1 (image type: %2)").arg(freeImageErrorMessage).arg(freeImageErrorFormat); LOG << CURDATE << "PQLoadImageFreeImage::load(): " << errormsg.toStdString() << NL; return QImage(); } // .. and if that didn't work, we look at the filename if(fif == FIF_UNKNOWN) fif = FreeImage_GetFIFFromFilename(filename.toStdString().c_str()); // If an error occured (caught by output handler), return error image if(freeImageErrorMessage != *"\0") { errormsg = QString("FreeImage_GetFIFFromFilename: %1 (image type: %2)").arg(freeImageErrorMessage).arg(freeImageErrorFormat); LOG << CURDATE << "PQLoadImageFreeImage::load(): " << errormsg.toStdString() << NL; return QImage(); } // If loading the image failed for any other reason, return error image if(fif == FIF_UNKNOWN) { errormsg = "Unknown file type (FIF_UNKNOWN)"; LOG << CURDATE << "PQLoadImageFreeImage::load(): " << errormsg.toStdString() << NL; return QImage(); } // This will be the handler for the image data FIBITMAP *dib = nullptr; // If the image is supported for reading... if(FreeImage_FIFSupportsReading(fif)) { // Load the image with the previously detected type dib = FreeImage_Load(fif, filename.toStdString().c_str()); // Error check! if(freeImageErrorMessage != *"\0") { errormsg = QString("FreeImage_FIFSupportsReading: %1 (image type: %2)").arg(freeImageErrorMessage).arg(freeImageErrorFormat); LOG << CURDATE << "PQLoadImageFreeImage::load(): " << errormsg.toStdString() << NL; return QImage(); } // If anything else went wrong, return error image if(dib == nullptr) { errormsg = "FreeImage_FIFSupportsReading: Loading failed, nullptr returned!"; LOG << CURDATE << "PQLoadImageFreeImage::load(): " << errormsg.toStdString() << NL; return QImage(); } // If reading of this format is not supported, return error image } else { errormsg = "FreeImage_FIFSupportsReading: FIF not supported!"; LOG << CURDATE << "PQLoadImageFreeImage::load(): " << errormsg.toStdString() << NL; return QImage(); } // the width/height of the image, needed to ensure we respect the maxSize further down int width = FreeImage_GetWidth(dib); int height = FreeImage_GetHeight(dib); *origSize = QSize(width, height); // This will be the access handler for the data that we can load into QImage FIMEMORY *stream = FreeImage_OpenMemory(); // Error check! if(freeImageErrorMessage != *"\0") { errormsg = QString("FreeImage_OpenMemory: %1 (image type: %2)").arg(freeImageErrorMessage).arg(freeImageErrorFormat); LOG << CURDATE << "PQLoadImageFreeImage::load(): " << errormsg.toStdString() << NL; return QImage(); } // We save the image to memory as BMP as Qt can understand BMP very well // Note: BMP seems to be about 10 times faster than JPEG! FreeImage_SaveToMemory(FIF_BMP, dib, stream); // Error check! if(freeImageErrorMessage != *"\0") { errormsg = QString("FreeImage_SaveToMemory: %1 (image type: %2)").arg(freeImageErrorMessage).arg(freeImageErrorFormat); LOG << CURDATE << "PQLoadImageFreeImage::load(): " << errormsg.toStdString() << NL; return QImage(); } // Free up some memory FreeImage_Unload(dib); // These will be the raw data (and its size) that we are after BYTE *mem_buffer = nullptr; DWORD size_in_bytes = 0; // Acquire the memory and fill the above variables FreeImage_AcquireMemory(stream, &mem_buffer, &size_in_bytes); // Error check! if(freeImageErrorMessage != *"\0") { errormsg = QString("FreeImage_AcquireMemory: %1 (image type: %2)").arg(freeImageErrorMessage).arg(freeImageErrorFormat); LOG << CURDATE << "PQLoadImageFreeImage::load(): " << errormsg.toStdString() << NL; return QImage(); } // Load the raw JPEG data into the QByteArray ... QByteArray array = QByteArray::fromRawData((char*)mem_buffer, size_in_bytes); // ... and load QByteArray into QImage QImage img = QImage::fromData(array); if(img.isNull()) { errormsg = "Loading FreeImage image into QImage resulted in NULL image"; LOG << CURDATE << "PQLoadImageFreeImage::load(): " << errormsg.toStdString() << NL; return QImage(); } // If image needs to be scaled down, return scaled down version if(maxSize.width() > 5 && maxSize.height() > 5) if(width > maxSize.width() || height > maxSize.height()) return img.scaled(maxSize, ::Qt::KeepAspectRatio); // return full image return img; #endif errormsg = "Failed to load image, FreeImage not supported by this build of PhotoQt!"; LOG << CURDATE << "PQLoadImageFreeImage::load(): " << errormsg.toStdString() << NL; return QImage(); } QString errormsg; }; #endif // PQLOADIMAGEFREEIMAGE_H photoqt-2.5/cplusplus/configfiles.h000644 001750 001750 00000010434 14164671426 020120 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef CONFIGFILES_H #define CONFIGFILES_H #include #include class ConfigFiles { public: static const QString CONFIG_DIR() { return QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); } static const QString DATA_DIR() { return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); } static const QString CACHE_DIR() { return QStandardPaths::writableLocation(QStandardPaths::CacheLocation); } static const QString GENERIC_DATA_DIR() { return QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); } static const QString GENERIC_CACHE_DIR() { return QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation); } static const QString SETTINGS_FILE() { return QString("%1/settings").arg(CONFIG_DIR()); } static const QString CONTEXTMENU_FILE() { return QString("%1/contextmenu").arg(CONFIG_DIR()); } static const QString CONTEXTMENU_DB() { return QString("%1/contextmenu.db").arg(CONFIG_DIR()); } static const QString IMAGEFORMATS_FILE() { return QString("%1/imageformats_disabled").arg(CONFIG_DIR()); } static const QString IMAGEFORMATS_DB() { return QString("%1/imageformats.db").arg(CONFIG_DIR()); } static const QString SETTINGS_DB() { return QString("%1/settings.db").arg(CONFIG_DIR()); } static const QString MIMEFORMATS_FILE() { return QString("%1/mimeformats_disabled").arg(CONFIG_DIR()); } static const QString SHORTCUTS_FILE() { return QString("%1/shortcuts").arg(CONFIG_DIR()); } static const QString SHORTCUTS_DB() { return QString("%1/shortcuts.db").arg(CONFIG_DIR()); } static const QString SHORTCUTSNOTIFIER_FILE() { return QString("%1/shortcutsnotifier").arg(CONFIG_DIR()); } static const QString THUMBNAILS_DB() { return QString("%1/thumbnails").arg(GENERIC_CACHE_DIR()); } static const QString SETTINGS_SESSION_FILE() { return QString("%1/settings_session").arg(CACHE_DIR()); } static const QString WINDOW_GEOMETRY_FILE() { return QString("%1/geometry").arg(CONFIG_DIR()); } static const QString OPENFILE_LAST_LOCATION() { return QString("%1/openfilelastlocation").arg(CACHE_DIR()); } static const QString LASTOPENEDIMAGE_FILE() { return QString("%1/lastimageloaded").arg(CONFIG_DIR()); } static const QString SHAREONLINE_IMGUR_FILE() { return QString("%1/imgurconfig").arg(CONFIG_DIR()); } static const QString COLOR_FILE() { return QString("%1/colors").arg(CONFIG_DIR()); } }; #endif // CONFIGFILES_H photoqt-2.5/cplusplus/singleinstance/000755 001750 001750 00000000000 14164671403 020456 5ustar00luspiluspi000000 000000 photoqt-2.5/cplusplus/singleinstance/singleinstance.h000644 001750 001750 00000005747 14164671400 023647 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQSINGLEINSTANCE_H #define PQSINGLEINSTANCE_H #include #include #include #include #include #include #include "commandlineparser.h" #include "../logger.h" #include "../passon.h" #include "../keypresschecker.h" // DO NOT use PQSettings in this class! // The right folders are not yet set up at this point // This will cause unintended side effects // including not loading the settings properly/resetting defaults // Makes sure only one instance of PhotoQt is running, and enables remote communication class PQSingleInstance : public QApplication { Q_OBJECT public: explicit PQSingleInstance(int&, char *[]); ~PQSingleInstance(); QString exportAndQuit; QString importAndQuit; bool checkConfig; bool resetConfig; QQmlApplicationEngine *qmlEngine; QVector qmlWindowAddresses; protected: virtual bool notify(QObject * receiver, QEvent * event) override; Q_SIGNALS: // Interact with application void interaction(PQCommandLineResult result, QString value); private Q_SLOTS: // A new application instance was started (notification to main instance) void newConnection(); private: QLocalSocket *socket; QLocalServer *server; // This one is used in main process, handling the message sent by sub-instances void handleMessage(QString msg); }; #endif // PQSINGLEINSTANCE_H photoqt-2.5/cplusplus/singleinstance/commandlineparser.h000644 001750 001750 00000021747 14164671403 024345 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQCOMMANDLINEPARSER_H #define PQCOMMANDLINEPARSER_H #include #include #include #include #include #include enum PQCommandLineResult { PQCOmmandLineNothing = 0, PQCommandLineFile = 1, PQCommandLineOpen = 2, PQCommandLineShow = 4, PQCommandLineHide = 8, PQCommandLineToggle = 16, PQCommandLineThumbs = 32, PQCommandLineNoThumbs = 64, PQCommandLineStartInTray = 128, PQCommandLineStandalone = 256, PQCommandLineDebug = 512, PQCommandLineNoDebug = 1024, PQCommandLineExport = 2048, PQCommandLineImport = 4096, PQShortcutSequence = 8192, PQCommandLineEnableTray = 16384, PQCommandLineDisableTray = 32768, PQCommandLineCheckConfig = 65536, PQCommandLineResetConfig = 131072 }; inline PQCommandLineResult operator|(PQCommandLineResult a, PQCommandLineResult b) { return static_cast(static_cast(a) | static_cast(b)); } class PQCommandLineParser : public QObject, public QCommandLineParser { Q_OBJECT public: explicit PQCommandLineParser(QApplication &app, QObject *parent = nullptr) : QObject(parent), QCommandLineParser() { // install translator if help message is to be displayed // we can't always install the translator as this would overwrite any translator set later (i.e., the settings would be ignored) if(app.arguments().contains("--help") || app.arguments().contains("-h")) { QTranslator *trans = new QTranslator; const QString langCode = QLocale::system().name(); if(QFile(":/photoqt_" + langCode + ".qm").exists()) { trans->load(":/photoqt_" + langCode); qApp->installTranslator(trans); } if(langCode.contains("_")) { const QString cc = langCode.split("_").at(0); if(QFile(":/photoqt_" + cc + ".qm").exists()) { trans->load(":/photoqt_" + cc); qApp->installTranslator(trans); } } else { const QString cc = QString("%1_%2").arg(langCode, langCode.toUpper()); if(QFile(":/photoqt_" + cc + ".qm").exists()) { trans->load(":/photoqt_" + cc); qApp->installTranslator(trans); } } } setApplicationDescription(QApplication::translate("commandlineparser", "Image Viewer")); addPositionalArgument("[filename]", QApplication::translate("commandlineparser", "Image file to open.")); addHelpOption(); addVersionOption(); addOptions({ //: Command line option {{"o", "open"}, QApplication::translate("commandlineparser", "Make PhotoQt ask for a new file.")}, //: Command line option {{"s", "show"}, QApplication::translate("commandlineparser", "Shows PhotoQt from system tray.")}, //: Command line option {"hide", QApplication::translate("commandlineparser", "Hides PhotoQt to system tray.")}, //: Command line option {{"t", "toggle"}, QApplication::translate("commandlineparser", "Show/Hide PhotoQt.")}, //: Command line option {"thumbs", QApplication::translate("commandlineparser", "Enable thumbnails.")}, //: Command line option {"no-thumbs", QApplication::translate("commandlineparser", "Disable thumbnails.")}, //: Command line option {"enable-tray", QApplication::translate("commandlineparser", "Enable system tray icon.")}, //: Command line option {"disable-tray", QApplication::translate("commandlineparser", "Disable system tray icon.")}, //: Command line option {"start-in-tray", QApplication::translate("commandlineparser", "Start PhotoQt hidden to the system tray.")}, //: Command line option {"standalone", QApplication::translate("commandlineparser", "Open standalone PhotoQt, allows for multiple instances but without remote interaction.")}, //: Command line option {"send-shortcut", QApplication::translate("commandlineparser", "Simulate a shortcut sequence"), "shortcut"}, //: Command line option {"debug", QApplication::translate("commandlineparser", "Switch on debug messages.")}, //: Command line option {"no-debug", QApplication::translate("commandlineparser", "Switch off debug messages.")}, //: Command line option {"export", QApplication::translate("commandlineparser", "Export configuration to given filename."), //: Command line option QApplication::translate("commandlineparser", "filename")}, //: Command line option {"import", QApplication::translate("commandlineparser", "Import configuration from given filename."), //: Command line option QApplication::translate("commandlineparser", "filename")}, //: Command line option {"check-config", QApplication::translate("commandlineparser", "Check the configuration and correct any detected issues.")}, //: Command line option {"reset-config", QApplication::translate("commandlineparser", "Reset default configuration.")} }); process(app); } PQCommandLineResult getResult() { PQCommandLineResult ret = PQCOmmandLineNothing; if(positionalArguments().length() > 0) { ret = ret|PQCommandLineFile; filename = positionalArguments().at(0); } if(isSet("o") || isSet("open")) ret = ret|PQCommandLineOpen; if(isSet("s") || isSet("show")) ret = ret|PQCommandLineShow; if(isSet("hide")) ret = ret|PQCommandLineHide; if(isSet("t") || isSet("toggle")) ret = ret|PQCommandLineToggle; if(isSet("thumbs")) ret = ret|PQCommandLineThumbs; if(isSet("no-thumbs")) ret = ret|PQCommandLineNoThumbs; if(isSet("start-in-tray")) ret = ret|PQCommandLineStartInTray; if(isSet("enable-tray")) ret = ret|PQCommandLineEnableTray; if(isSet("disable-tray")) ret = ret|PQCommandLineDisableTray; if(isSet("standalone")) ret = ret|PQCommandLineStandalone; shortcutSequence = value("send-shortcut"); if(shortcutSequence != "") ret = ret|PQShortcutSequence; if(isSet("debug")) ret = ret|PQCommandLineDebug; if(isSet("no-debug")) ret = ret|PQCommandLineNoDebug; exportFileName = value("export"); if(exportFileName != "") ret = ret|PQCommandLineExport; importFileName = value("import"); if(importFileName != "") ret = ret|PQCommandLineImport; if(isSet("check-config")) ret = ret|PQCommandLineCheckConfig; if(isSet("reset-config")) ret = ret|PQCommandLineResetConfig; return ret; } QString exportFileName; QString importFileName; QString filename; QString shortcutSequence; }; #endif // PQCOMMANDLINEPARSER_H photoqt-2.5/cplusplus/singleinstance/singleinstance.cpp000644 001750 001750 00000020335 14164671402 024172 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "singleinstance.h" PQSingleInstance::PQSingleInstance(int &argc, char *argv[]) : QApplication(argc, argv) { setApplicationName("photoqt"); setApplicationVersion(VERSION); // Parse the command line arguments PQCommandLineParser parser(*this); PQCommandLineResult result = parser.getResult(); // This is the message string that we send to a running instance (if it exists QByteArray message = ""; socket = nullptr; server = nullptr; if(result & PQCommandLineFile) { QString fullfilename = parser.filename; if(!QFileInfo(fullfilename).isAbsolute()) fullfilename = QDir::currentPath() + "/" + parser.filename; message += ":://::_F_I_L_E_" + QFileInfo(fullfilename).canonicalFilePath().toUtf8(); } if(result & PQCommandLineOpen) message += ":://::_O_P_E_N_"; if(result & PQCommandLineShow) message += ":://::_S_H_O_W_"; if(result & PQCommandLineHide) message += ":://::_H_I_D_E_"; if(result & PQCommandLineToggle) message += ":://::_T_O_G_G_L_E_"; if(result & PQCommandLineThumbs) message += ":://::_T_H_U_M_B_S_"; if(result & PQCommandLineNoThumbs) message += ":://::_N_O_T_H_U_M_B_S_"; if(result & PQShortcutSequence) message += ":://::_S_H_O_R_T_C_U_T_" + parser.shortcutSequence.toUtf8(); if(result & PQCommandLineStartInTray) message += ":://::_S_T_A_R_T_I_N_T_R_A_Y_"; if(result & PQCommandLineEnableTray) message += ":://::_T_R_A_Y_"; if(result & PQCommandLineDisableTray) message += ":://::_N_O_T_R_A_Y_"; if(result & PQCommandLineDebug) message += ":://::_D_E_B_U_G_"; if(result & PQCommandLineNoDebug) message += ":://::_N_O_D_E_B_U_G_"; if(result & PQCommandLineStandalone) message += ":://::_S_T_A_N_D_A_L_O_N_E_"; // validation requested checkConfig = false; if(result & PQCommandLineCheckConfig) { checkConfig = true; socket = new QLocalSocket(); server = new QLocalServer(); return; } // reset defaults resetConfig = false; if(result & PQCommandLineResetConfig) { resetConfig = true; socket = new QLocalSocket(); server = new QLocalServer(); return; } // STANDALONE, EXPORT, IMPORT exportAndQuit = ""; if(result & PQCommandLineExport) { exportAndQuit = parser.exportFileName; socket = new QLocalSocket(); server = new QLocalServer(); return; } importAndQuit = ""; if(result & PQCommandLineImport) { importAndQuit = parser.importFileName; socket = new QLocalSocket(); server = new QLocalServer(); return; } if(message.contains(":://::_S_T_A_N_D_A_L_O_N_E_")) { handleMessage(message); return; } /*****************/ /* Server/Socket */ /*****************/ // Create server name QString server_str = "org.photoqt.PhotoQt"; // Connect to a Local Server (if available) socket = new QLocalSocket(); socket->connectToServer(server_str); // If this is successfull, then an instance is already running if(socket->waitForConnected(100)) { if(message == "") message = ":://::_S_H_O_W_"; // Send composed message string socket->write(message); socket->flush(); // Inform user LOG << CURDATE << "Running instance of PhotoQt detected..." << NL; // Exit the code (need to use stdlib exit function to ensure an immediate exit) // We wait 100ms as otherwise this instance might return as a crash (even though it doesn't really) std::this_thread::sleep_for(std::chrono::milliseconds(100)); std::exit(0); } else { // Create a new local server server = new QLocalServer(); server->removeServer(server_str); server->listen(server_str); connect(server, &QLocalServer::newConnection, this, &PQSingleInstance::newConnection); handleMessage(message); } } void PQSingleInstance::newConnection() { QLocalSocket *socket = server->nextPendingConnection(); if(socket->waitForReadyRead(2000)) handleMessage(socket->readAll()); socket->close(); delete socket; } void PQSingleInstance::handleMessage(QString msg) { DBG << CURDATE << "PQSingleInstance::handleMessage()" << NL << CURDATE << "** msg = " << msg.toStdString() << NL; QStringList parts = msg.split(":://::"); for(QString m : qAsConst(parts)) { if(m.startsWith("_F_I_L_E_")) PQPassOn::get().setFilePath(m.remove(0, 9)); else if(m == "_O_P_E_N_") Q_EMIT PQPassOn::get().cmdOpen(); else if(m == "_S_H_O_W_") Q_EMIT PQPassOn::get().cmdShow(); else if(m == "_H_I_D_E_") Q_EMIT PQPassOn::get().cmdHide(); else if(m == "_T_O_G_G_L_E_") Q_EMIT PQPassOn::get().cmdToggle(); else if(m == "_T_H_U_M_B_S_") PQPassOn::get().setThumbs(true); else if(m == "_N_O_T_H_U_M_B_S_") PQPassOn::get().setThumbs(false); else if(m == "_S_T_A_R_T_I_N_T_R_A_Y_") PQPassOn::get().setStartInTray(); else if(m == "_T_R_A_Y_") Q_EMIT PQPassOn::get().cmdTray(true); else if(m == "_N_O_T_R_A_Y_") Q_EMIT PQPassOn::get().cmdTray(false); else if(m.startsWith("_S_H_O_R_T_C_U_T_")) Q_EMIT PQPassOn::get().cmdShortcutSequence(m.remove(0, 17)); else if(m == "_D_E_B_U_G_") DBG.setDebug(true); else if(m == "_N_O_D_E_B_U_G_") DBG.setDebug(false); } } bool PQSingleInstance::notify(QObject *receiver, QEvent *e) { if(e->type() == QEvent::KeyPress) { QKeyEvent *ev = reinterpret_cast(e); if(qmlWindowAddresses.contains(receiver)) Q_EMIT PQKeyPressMouseChecker::get().receivedKeyPress(ev->key(), ev->modifiers()); } else if(e->type() == QEvent::MouseButtonPress) { QMouseEvent *ev = reinterpret_cast(e); if(qmlWindowAddresses.contains(receiver)) Q_EMIT PQKeyPressMouseChecker::get().receivedMouseButtonPress(ev->buttons(), ev->pos()); } else if(e->type() == QEvent::MouseMove) { QMouseEvent *ev = reinterpret_cast(e); if(qmlWindowAddresses.contains(receiver)) Q_EMIT PQKeyPressMouseChecker::get().receivedMouseMove(ev->pos()); } return QApplication::notify(receiver, e); } PQSingleInstance::~PQSingleInstance() { if(socket != nullptr) delete socket; if(server != nullptr) { server->close(); delete server; } } photoqt-2.5/cplusplus/settings/000755 001750 001750 00000000000 14164671372 017315 5ustar00luspiluspi000000 000000 photoqt-2.5/cplusplus/settings/settings.cpp000644 001750 001750 00000025602 14164671371 021665 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ /* auto-generated using generatesettings.py */ #include "settings.h" //#include "../startup/settings.h" PQSettings::PQSettings() { db = QSqlDatabase::database("settings"); dbtables = QStringList() << "general" << "interface" << "imageview" << "thumbnails" << "mainmenu" << "metadata" << "filetypes" << "openfile" << "slideshow" << "histogram"; readonly = false; QFileInfo infodb(ConfigFiles::SETTINGS_DB()); if(!infodb.exists() || !db.open()) { LOG << CURDATE << "PQSettings::PQSettings(): ERROR opening database: " << db.lastError().text().trimmed().toStdString() << NL; LOG << CURDATE << "PQSettings::PQSettings(): Will load read-only database of default settings" << NL; readonly = true; db.setConnectOptions("QSQLITE_OPEN_READONLY"); QString tmppath = QStandardPaths::writableLocation(QStandardPaths::TempLocation)+"/settings.db"; if(QFile::exists(tmppath)) QFile::remove(tmppath); if(!QFile::copy(":/settings.db", tmppath)) { LOG << CURDATE << "PQSettings::PQSettings(): ERROR copying read-only default database!" << NL; //: This is the window title of an error message box QMessageBox::critical(0, QCoreApplication::translate("PQSettings", "ERROR getting database with default settings"), QCoreApplication::translate("PQSettings", "I tried hard, but I just cannot open even a read-only version of the settings database.") + QCoreApplication::translate("PQSettings", "Something went terribly wrong somewhere!")); return; } db.setDatabaseName(tmppath); if(!db.open()) { LOG << CURDATE << "PQSettings::PQSettings(): ERROR opening read-only default database!" << NL; QMessageBox::critical(0, QCoreApplication::translate("PQSettings", "ERROR opening database with default settings"), QCoreApplication::translate("PQSettings", "I tried hard, but I just cannot open the database of default settings.") + QCoreApplication::translate("PQSettings", "Something went terribly wrong somewhere!")); return; } } else { readonly = false; if(!infodb.permission(QFileDevice::WriteOwner)) readonly = true; } readDB(); dbCommitTimer = new QTimer(); dbCommitTimer->setSingleShot(true); dbCommitTimer->setInterval(400); connect(dbCommitTimer, &QTimer::timeout, this, [=](){ db.commit(); dbIsTransaction = false; if(db.lastError().text().trimmed().length()) LOG << "PQSettings::commitDB: ERROR committing database: " << db.lastError().text().trimmed().toStdString() << NL; }); // if a value is changed in the ui, write to database connect(this, &QQmlPropertyMap::valueChanged, this, &PQSettings::saveChangedValue); #ifndef NDEBUG checkvalid = new QTimer; checkvalid->setInterval(1000); checkvalid->setSingleShot(false); connect(checkvalid, &QTimer::timeout, this, &PQSettings::checkValidSlot); checkvalid->start(); #endif } PQSettings::~PQSettings() { delete dbCommitTimer; #ifndef NDEBUG delete checkvalid; #endif } void PQSettings::readDB() { #ifndef NDEBUG valid.clear(); #endif for(const auto &table : qAsConst(dbtables)) { QSqlQuery query(db); query.prepare(QString("SELECT name,value,datatype FROM %1").arg(table)); if(!query.exec()) LOG << CURDATE << "PQSettings::readDB(): SQL Query error: " << query.lastError().text().trimmed().toStdString() << NL; while(query.next()) { QString name = QString("%1%2").arg(table).arg(query.value(0).toString()); QString value = query.value(1).toString(); QString datatype = query.value(2).toString(); if(datatype == "int") this->insert(name, value.toInt()); else if(datatype == "double") this->insert(name, value.toDouble()); else if(datatype == "bool") this->insert(name, static_cast(value.toInt())); else if(datatype == "list") { if(value.contains(":://::")) this->insert(name, value.split(":://::")); else if(value != "") this->insert(name, QStringList() << value); else this->insert(name, QStringList()); } else if(datatype == "point") { const QStringList parts = value.split(","); if(parts.length() == 2) this->insert(name, QPoint(parts[0].toUInt(), parts[1].toInt())); else { LOG << CURDATE << "PQSettings::readDB(): ERROR: invalid format of QPoint for setting '" << name.toStdString() << "': '" << value.toStdString() << "'" << NL; this->insert(name, QPoint(0,0)); } } else if(datatype == "size") { const QStringList parts = value.split(","); if(parts.length() == 2) this->insert(name, QSize(parts[0].toUInt(), parts[1].toInt())); else { LOG << CURDATE << "PQSettings::readDB(): ERROR: invalid format of QSize for setting '" << name.toStdString() << "': '" << value.toStdString() << "'" << NL; this->insert(name, QSize(0,0)); } } else if(datatype == "string") this->insert(name, value); else LOG << CURDATE << "PQSettings::readDB(): ERROR: datatype not handled for setting '" << name.toStdString() << "': " << datatype.toStdString() << NL; #ifndef NDEBUG valid.push_back(name); #endif } } } void PQSettings::saveChangedValue(const QString &_key, const QVariant &value) { if(readonly) return; dbCommitTimer->stop(); QString key = _key; QString category = ""; for(const auto &table : qAsConst(dbtables)) { if(key.startsWith(table)) { category = table; key = key.remove(0, table.length()); break; } } if(category == "") { LOG << CURDATE << "PQSettings::saveChangedValue(): ERROR: invalid category received: " << key.toStdString() << NL; return; } QSqlQuery query(db); if(!dbIsTransaction) { db.transaction(); dbIsTransaction = true; } // Using a placeholder also for table name causes an sqlite 'parameter count mismatch' error query.prepare(QString("UPDATE %1 SET value=:val WHERE name=:name").arg(category)); // we convert the value to a string if(value.type() == QVariant::Bool || value.type() == QVariant::Int) query.bindValue(":val", QString::number(value.toInt())); else if(value.type() == QVariant::StringList) query.bindValue(":val", value.toStringList().join(":://::")); else if(value.type() == QVariant::Point || value.type() == QVariant::PointF) { query.bindValue(":val", QString("%1,%2").arg(value.toPoint().x()).arg(value.toPoint().y())); } else if(value.type() == QVariant::Size || value.type() == QVariant::SizeF) query.bindValue(":val", QString("%1,%2").arg(value.toSize().width()).arg(value.toSize().height())); else query.bindValue(":val", value.toString()); query.bindValue(":name", key); // and update database if(!query.exec()) LOG << CURDATE << "PQSettings::saveChangedValue(): SQL Error: " << query.lastError().text().trimmed().toStdString() << NL; dbCommitTimer->start(); } void PQSettings::setDefault(bool ignoreLanguage) { if(readonly) return; dbCommitTimer->stop(); if(!dbIsTransaction) { db.transaction(); dbIsTransaction = true; } for(const auto &table : qAsConst(dbtables)) { QSqlQuery query(db); if(ignoreLanguage) query.prepare(QString("UPDATE %1 SET value=defaultvalue WHERE name!='Language'").arg(table)); else query.prepare(QString("UPDATE %1 SET value=defaultvalue").arg(table)); if(!query.exec()) LOG << CURDATE << "PQSettings::setDefault(): SQL Error: " << query.lastError().text().trimmed().toStdString() << NL; } QSqlQuery query(db); query.prepare("UPDATE general SET value=:ver WHERE name='Version'"); query.bindValue(":ver", VERSION); if(!query.exec()) LOG << CURDATE << "PQSettings::setDefault() (version): SQL Error: " << query.lastError().text().trimmed().toStdString() << NL; dbCommitTimer->start(); } void PQSettings::update(QString key, QVariant value) { (*this)[key] = value; saveChangedValue(key, value); } void PQSettings::checkValidSlot() { #ifndef NDEBUG for(auto key : this->keys()){ if(!valid.contains(key)) LOG << CURDATE << "PQSettings::checkValidSlot(): INVALID KEY: " << key.toStdString() << NL; } #endif } photoqt-2.5/cplusplus/settings/settings.h000644 001750 001750 00000004702 14164671362 021330 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQSETTINGS2_H #define PQSETTINGS2_H #include #include #include #include #include "../logger.h" class PQSettings : public QQmlPropertyMap { Q_OBJECT public: static PQSettings& get() { static PQSettings instance; return instance; } ~PQSettings(); PQSettings(PQSettings const&) = delete; void operator=(PQSettings const&) = delete; void setDefault(bool ignoreLanguage = false); void update(QString key, QVariant value); void readDB(); private: PQSettings(); QStringList dbtables; QSqlDatabase db; bool dbIsTransaction; QTimer *dbCommitTimer; bool readonly; void saveChangedValue(const QString &key, const QVariant &value); #ifndef NDEBUG QStringList valid; QTimer *checkvalid; #endif private Q_SLOTS: void checkValidSlot(); }; #endif photoqt-2.5/cplusplus/settings/shortcuts.cpp000644 001750 001750 00000026026 14164671370 022063 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "shortcuts.h" PQShortcuts::PQShortcuts() { db = QSqlDatabase::database("shortcuts"); readonly = false; QFileInfo infodb(ConfigFiles::SHORTCUTS_DB()); if(!infodb.exists() || !db.open()) { LOG << CURDATE << "PQShortcuts::PQShortcuts(): ERROR opening database: " << db.lastError().text().trimmed().toStdString() << NL; LOG << CURDATE << "PQShortcuts::PQShortcuts(): Will load read-only database of default shortcuts" << NL; readonly = true; db.setConnectOptions("QSQLITE_OPEN_READONLY"); QString tmppath = QStandardPaths::writableLocation(QStandardPaths::TempLocation)+"/shortcuts.db"; if(QFile::exists(tmppath)) QFile::remove(tmppath); if(!QFile::copy(":/shortcuts.db", tmppath)) { LOG << CURDATE << "PQShortcuts::PQShortcuts(): ERROR copying read-only default database!" << NL; //: This is the window title of an error message box QMessageBox::critical(0, QCoreApplication::translate("PQShortcuts", "ERROR getting database with default shortcuts"), QCoreApplication::translate("PQShortcuts", "I tried hard, but I just cannot open even a read-only version of the shortcuts database.") + QCoreApplication::translate("PQShortcuts", "Something went terribly wrong somewhere!")); return; } db.setDatabaseName(tmppath); if(!db.open()) { LOG << CURDATE << "PQShortcuts::PQShortcuts(): ERROR opening read-only default database!" << NL; QMessageBox::critical(0, QCoreApplication::translate("PQShortcuts", "ERROR opening database with default settings"), QCoreApplication::translate("PQShortcuts", "I tried hard, but I just cannot open the database of default shortcuts.") + QCoreApplication::translate("PQShortcuts", "Something went terribly wrong somewhere!")); return; } } else { readonly = false; if(!infodb.permission(QFileDevice::WriteOwner)) readonly = true; } readDB(); dbCommitTimer = new QTimer(); dbCommitTimer->setSingleShot(true); dbCommitTimer->setInterval(400); connect(dbCommitTimer, &QTimer::timeout, this, [=](){ db.commit(); dbIsTransaction = false; if(db.lastError().text().trimmed().length()) LOG << "PQShortcuts::commitDB: ERROR committing database: " << db.lastError().text().trimmed().toStdString() << NL; }); } PQShortcuts::~PQShortcuts() {} void PQShortcuts::setDefault() { DBG << CURDATE << "PQShortcuts::setDefault()" << NL; if(readonly) return; dbCommitTimer->stop(); if(!dbIsTransaction) db.transaction(); QSqlQuery query(db); // set default builtin query.prepare("UPDATE builtin SET shortcuts = defaultshortcuts"); if(!query.exec()) { LOG << CURDATE << "PQShortcuts::setDefault [1]: SQL error: " << query.lastError().text().trimmed().toStdString() << NL; return; } shortcuts.clear(); query.clear(); // remove external shortcuts query.prepare("DELETE FROM external"); if(!query.exec()) { LOG << CURDATE << "PQShortcuts::setDefault [2]: SQL error: " << query.lastError().text().trimmed().toStdString() << NL; return; } externalShortcuts.clear(); // we need to write changes to the database so we can read them right after db.commit(); dbIsTransaction = false; if(db.lastError().text().trimmed().length()) LOG << "PQShortcuts::setDefault: ERROR committing database: " << db.lastError().text().trimmed().toStdString() << NL; readDB(); } QStringList PQShortcuts::getCommandForShortcut(QString sh) { DBG << CURDATE << "PQShortcuts::getCommandForShortcut()" << NL << CURDATE << "** sh = " << sh.toStdString() << NL; QMapIterator iter(shortcuts); while(iter.hasNext()) { iter.next(); if(iter.value().contains(sh)) return QStringList() << "0" << iter.key(); } QMapIterator iter2(externalShortcuts); while(iter2.hasNext()) { iter2.next(); if(iter2.value().mid(1).contains(sh)) return QStringList() << iter2.value().at(0) << iter2.key(); } return QStringList() << "" << ""; } QStringList PQShortcuts::getShortcutsForCommand(QString cmd) { DBG << CURDATE << "PQShortcuts::getShortcutsForCommand()" << NL << CURDATE << "** cmd = " << cmd.toStdString() << NL; if(shortcuts.contains(cmd)) return QStringList() << "0" << shortcuts[cmd]; else if(externalShortcuts.contains(cmd)) return externalShortcuts[cmd]; return QStringList(); } QVariantList PQShortcuts::getAllExternalShortcuts() { DBG << CURDATE << "PQShortcuts::getAllExternalShortcuts()" << NL; QVariantList ret; QMapIterator iter(externalShortcuts); while(iter.hasNext()) { iter.next(); ret.append(QStringList() << iter.key() << iter.value()); } return ret; } void PQShortcuts::setShortcut(QString cmd, QStringList sh) { DBG << CURDATE << "PQShortcuts::getShortcutsForCommand()" << NL << CURDATE << "** cmd = " << cmd.toStdString() << NL << CURDATE << "** sh = " << sh.join(", ").toStdString() << NL; if(readonly) return; dbCommitTimer->stop(); if(!dbIsTransaction) { db.transaction(); dbIsTransaction = true; } if(cmd.startsWith("__")) { shortcuts[cmd] = sh; QSqlQuery query(db); query.prepare("UPDATE builtin SET shortcuts=:sh WHERE command=:cmd"); query.bindValue(":sh", sh.join(", ")); query.bindValue(":cmd", cmd); if(!query.exec()) LOG << CURDATE << "PQShortcuts::setShortcut() [1]: SQL error: " << query.lastError().text().trimmed().toStdString() << NL; } else { if(externalShortcuts.contains(cmd)) { externalShortcuts[cmd] = sh; QSqlQuery query(db); query.prepare("UPDATE external SET shortcuts=:sh,close=:cl WHERE command=:cmd"); query.bindValue(":cl", sh[0]); query.bindValue(":sh", sh.mid(1).join(", ")); query.bindValue(":cmd", cmd); if(!query.exec()) LOG << CURDATE << "PQShortcuts::setShortcut() [2]: SQL error: " << query.lastError().text().trimmed().toStdString() << NL; } else { externalShortcuts[cmd] = sh; QSqlQuery query(db); query.prepare("INSERT INTO external (command,shortcuts,close) VALUES(:cmd, :sh, :cl)"); query.bindValue(":cl", sh[0]); query.bindValue(":sh", sh.mid(1).join(", ")); query.bindValue(":cmd", cmd); if(!query.exec()) LOG << CURDATE << "PQShortcuts::setShortcut() [3]: SQL error: " << query.lastError().text().trimmed().toStdString() << NL; } } dbCommitTimer->start(); } void PQShortcuts::readDB() { DBG << CURDATE << "PQShortcuts::readShortcuts()" << NL; QSqlQuery query(db); query.prepare("SELECT command, shortcuts FROM builtin"); if(!query.exec()) { LOG << CURDATE << "PQShortcuts::readDB() [1]: SQL error: " << query.lastError().text().trimmed().toStdString() << NL; return; } while(query.next()) { const QString cmd = query.record().value(0).toString(); QString sh = query.record().value(1).toString(); QStringList sh_parts; if(sh == ",") sh_parts << ","; else if(sh != "") { sh = sh.replace(",,","COMMA,"); if(sh.endsWith(", ,")) sh.replace(sh.length()-3, sh.length(), ", COMMA"); const QStringList tmp = sh.split(","); for(auto p : qAsConst(tmp)) sh_parts << p.replace("COMMA",",").trimmed(); } shortcuts[cmd] = sh_parts; } query.clear(); query.prepare("SELECT command, shortcuts, close FROM external"); if(!query.exec()) { LOG << CURDATE << "PQShortcuts::readDB() [2]: SQL error: " << query.lastError().text().trimmed().toStdString() << NL; return; } while(query.next()) { const QString cmd = query.record().value(0).toString(); QString sh = query.record().value(1).toString(); const QString close = query.record().value(2).toString(); QStringList sh_parts; sh_parts << close; if(sh == ",") sh_parts << ","; else { QStringList tmp = sh.replace(",,","COMMA,").split(","); for(auto p : qAsConst(tmp)) sh_parts << p.replace("COMMA",",").trimmed(); } externalShortcuts[cmd] = sh_parts; } } void PQShortcuts::deleteAllExternalShortcuts() { DBG << CURDATE << "PQShortcuts::deleteAllExternalShortcuts()" << NL; if(readonly) return; dbCommitTimer->stop(); if(!dbIsTransaction) { db.transaction(); dbIsTransaction = true; } externalShortcuts.clear(); QSqlQuery query(db); query.prepare("DELETE FROM external"); if(!query.exec()) LOG << CURDATE << "PQShortcuts::deleteAllExternalShortcuts(): SQL error: " << query.lastError().text().trimmed().toStdString() << NL; dbCommitTimer->start(); } photoqt-2.5/cplusplus/settings/imageformats.h000644 001750 001750 00000013545 14164671363 022154 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQIMAGEFORMATS_H #define PQIMAGEFORMATS_H #include #include #include #include #if defined(IMAGEMAGICK) || defined(GRAPHICSMAGICK) #include #endif #include "../logger.h" #include "../configfiles.h" class PQImageFormats : public QObject { Q_OBJECT public: static PQImageFormats& get() { static PQImageFormats instance; return instance; } PQImageFormats(PQImageFormats const&) = delete; void operator=(PQImageFormats const&) = delete; Q_INVOKABLE void readDatabase() { readFromDatabase(); } Q_INVOKABLE QVariantList getAllFormats() { return formats; } Q_INVOKABLE void setAllFormats(QVariantList f) { writeToDatabase(f); } Q_INVOKABLE QStringList getEnabledFormats() { return formats_enabled; } Q_INVOKABLE QStringList getEnabledMimeTypes() { return mimetypes_enabled; } Q_INVOKABLE QStringList getEnabledFormatsQt() { return formats_qt; } Q_INVOKABLE QStringList getEnabledMimeTypesQt() { return mimetypes_qt; } Q_INVOKABLE QStringList getEnabledFormatsMagick() { return formats_magick; } Q_INVOKABLE QStringList getEnabledMimeTypesMagick() { return mimetypes_magick; } Q_INVOKABLE QStringList getEnabledFormatsLibRaw() { return formats_libraw; } Q_INVOKABLE QStringList getEnabledMimeTypesLibRaw() { return mimetypes_libraw; } Q_INVOKABLE QStringList getEnabledFormatsPoppler() { return formats_poppler; } Q_INVOKABLE QStringList getEnabledMimeTypesPoppler() { return mimetypes_poppler; } Q_INVOKABLE QStringList getEnabledFormatsXCFTools() { return formats_xcftools; } Q_INVOKABLE QStringList getEnabledMimeTypesXCFTools() { return mimetypes_xcftools; } Q_INVOKABLE QStringList getEnabledFormatsDevIL() { return formats_devil; } Q_INVOKABLE QStringList getEnabledMimeTypesDevIL() { return mimetypes_devil; } Q_INVOKABLE QStringList getEnabledFormatsFreeImage() { return formats_freeimage; } Q_INVOKABLE QStringList getEnabledMimeTypesFreeImage() { return mimetypes_freeimage; } Q_INVOKABLE QStringList getEnabledFormatsLibArchive() { return formats_archive; } Q_INVOKABLE QStringList getEnabledMimeTypesLibArchive() { return mimetypes_archive; } Q_INVOKABLE QStringList getEnabledFormatsVideo() { return formats_video; } Q_INVOKABLE QStringList getEnabledMimeTypesVideo() { return mimetypes_video; } Q_INVOKABLE QVariantMap getMagick() { return magick; } Q_INVOKABLE QVariantMap getMagickMimeType() { return magick_mimetype; } Q_INVOKABLE QVariantList getWriteableFormats(); QVariantMap getFormatsInfo(QString endings); bool enterNewFormat(QString endings, QString mimetypes, QString description, QString category, int enabled, int qt, int imagemagick, int graphicsmagick, int libraw, int poppler, int xcftools, int devil, int freeimage, int archive, int video, QString im_gm_magick, QString qt_formatname, bool silentIfExists); Q_INVOKABLE void restoreDefaults(); private: PQImageFormats(); void readFromDatabase(); void writeToDatabase(QVariantList f); QSqlDatabase db; QVariantList formats; QStringList formats_enabled; QStringList mimetypes_enabled; QStringList formats_qt; QStringList mimetypes_qt; QStringList formats_magick; QStringList mimetypes_magick; QStringList formats_libraw; QStringList mimetypes_libraw; QStringList formats_poppler; QStringList mimetypes_poppler; QStringList formats_xcftools; QStringList mimetypes_xcftools; QStringList formats_devil; QStringList mimetypes_devil; QStringList formats_freeimage; QStringList mimetypes_freeimage; QStringList formats_archive; QStringList mimetypes_archive; QStringList formats_video; QStringList mimetypes_video; QVariantMap magick; QVariantMap magick_mimetype; // this is true if reading from the permanent database failed // in that case we load the built-in default database but read-only bool readonly; }; #endif // PQIMAGEFORMATS_H photoqt-2.5/cplusplus/settings/windowgeometry.cpp000644 001750 001750 00000032261 14164671367 023114 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "windowgeometry.h" PQWindowGeometry::PQWindowGeometry(QObject *parent) : QObject(parent) { int sw = handlingExternal.getScreenSize().width(); int sh = handlingExternal.getScreenSize().height(); int w, h; m_mainWindowMaximized = false; w = 1280; h = 960; m_mainWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); m_fileDialogWindowMaximized = false; w = 1200; h = 800; m_fileDialogWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); m_mainMenuWindowMaximized = false; m_mainMenuWindowGeometry = QRect(sw-400, 0, 400, 700); m_metaDataWindowMaximized = false; m_metaDataWindowGeometry = QRect(0, 0, 400, 700); m_histogramWindowMaximized = false; m_histogramWindowGeometry = QRect(100, 100, 300, 200); m_slideshowWindowMaximized = false; w = 1024; h = 768; m_slideshowWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); m_slideshowControlsWindowMaximized = false; m_slideshowControlsWindowGeometry = QRect(0, 0, 200, 200); m_fileRenameWindowMaximized = false; w = 400; h = 300; m_fileRenameWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); m_fileDeleteWindowMaximized = false; w = 400; h = 300; m_fileDeleteWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); m_scaleWindowMaximized = false; w = 800; h = 600; m_scaleWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); m_aboutWindowMaximized = false; w = 600; h = 480; m_aboutWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); m_imgurWindowMaximized = false; w = 800; h = 600; m_imgurWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); m_wallpaperWindowMaximized = false; w = 800; h = 600; m_wallpaperWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); m_filterWindowMaximized = false; w = 600; h = 480; m_filterWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); m_settingsManagerWindowMaximized = false; w = 1100; h = 768; m_settingsManagerWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); m_fileSaveAsWindowMaximized = false; w = 800; h = 600; m_fileSaveAsWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); m_unavailableWindowMaximized = false; w = 400; h = 300; m_unavailableWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); m_chromecastWindowMaximized = false; w = 800; h = 600; m_chromecastWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); m_loggingWindowMaximized = false; w = 600; h = 400; m_loggingWindowGeometry = QRect((sw-w)/2.0, (sh-h)/2.0, w, h); settings = new QSettings(ConfigFiles::WINDOW_GEOMETRY_FILE(), QSettings::IniFormat); readGeometries(); } PQWindowGeometry::~PQWindowGeometry() { delete settings; } void PQWindowGeometry::readGeometries() { DBG << CURDATE << "PQWindowGeometry::readGeometries()" << NL; if(settings->allKeys().contains("mainWindowGeometry")) m_mainWindowGeometry = settings->value("mainWindowGeometry").toRect(); if(settings->allKeys().contains("mainWindowMaximized")) m_mainWindowMaximized = settings->value("mainWindowMaximized").toBool(); if(settings->allKeys().contains("fileDialogWindowGeometry")) m_fileDialogWindowGeometry = settings->value("fileDialogWindowGeometry").toRect(); if(settings->allKeys().contains("fileDialogWindowMaximized")) m_fileDialogWindowMaximized = settings->value("fileDialogWindowMaximized").toBool(); if(settings->allKeys().contains("mainMenuWindowGeometry")) m_mainMenuWindowGeometry = settings->value("mainMenuWindowGeometry").toRect(); if(settings->allKeys().contains("mainMenuWindowMaximized")) m_mainMenuWindowMaximized = settings->value("mainMenuWindowMaximized").toBool(); if(settings->allKeys().contains("metaDataWindowGeometry")) m_metaDataWindowGeometry = settings->value("metaDataWindowGeometry").toRect(); if(settings->allKeys().contains("metaDataWindowMaximized")) m_metaDataWindowMaximized = settings->value("metaDataWindowMaximized").toBool(); if(settings->allKeys().contains("histogramWindowGeometry")) m_histogramWindowGeometry = settings->value("histogramWindowGeometry").toRect(); if(settings->allKeys().contains("histogramWindowMaximized")) m_histogramWindowMaximized = settings->value("histogramWindowMaximized").toBool(); if(settings->allKeys().contains("slideshowWindowGeometry")) m_slideshowWindowGeometry = settings->value("slideshowWindowGeometry").toRect(); if(settings->allKeys().contains("slideshowWindowMaximized")) m_slideshowWindowMaximized = settings->value("slideshowWindowMaximized").toBool(); if(settings->allKeys().contains("slideshowControlsWindowGeometry")) m_slideshowControlsWindowGeometry = settings->value("slideshowControlsWindowGeometry").toRect(); if(settings->allKeys().contains("slideshowControlsWindowMaximized")) m_slideshowControlsWindowMaximized = settings->value("slideshowControlsWindowMaximized").toBool(); if(settings->allKeys().contains("fileRenameWindowGeometry")) m_fileRenameWindowGeometry = settings->value("fileRenameWindowGeometry").toRect(); if(settings->allKeys().contains("fileRenameWindowMaximized")) m_fileRenameWindowMaximized = settings->value("fileRenameWindowMaximized").toBool(); if(settings->allKeys().contains("fileDeleteWindowGeometry")) m_fileDeleteWindowGeometry = settings->value("fileDeleteWindowGeometry").toRect(); if(settings->allKeys().contains("fileDeleteWindowMaximized")) m_fileDeleteWindowMaximized = settings->value("fileDeleteWindowMaximized").toBool(); if(settings->allKeys().contains("scaleWindowGeometry")) m_scaleWindowGeometry = settings->value("scaleWindowGeometry").toRect(); if(settings->allKeys().contains("scaleWindowMaximized")) m_scaleWindowMaximized = settings->value("scaleWindowMaximized").toBool(); if(settings->allKeys().contains("aboutWindowGeometry")) m_aboutWindowGeometry = settings->value("aboutWindowGeometry").toRect(); if(settings->allKeys().contains("aboutWindowMaximized")) m_aboutWindowMaximized = settings->value("aboutWindowMaximized").toBool(); if(settings->allKeys().contains("imgurWindowGeometry")) m_imgurWindowGeometry = settings->value("imgurWindowGeometry").toRect(); if(settings->allKeys().contains("imgurWindowMaximized")) m_imgurWindowMaximized = settings->value("imgurWindowMaximized").toBool(); if(settings->allKeys().contains("wallpaperWindowGeometry")) m_wallpaperWindowGeometry = settings->value("wallpaperWindowGeometry").toRect(); if(settings->allKeys().contains("wallpaperWindowMaximized")) m_wallpaperWindowMaximized = settings->value("wallpaperWindowMaximized").toBool(); if(settings->allKeys().contains("filterWindowGeometry")) m_filterWindowGeometry = settings->value("filterWindowGeometry").toRect(); if(settings->allKeys().contains("filterWindowMaximized")) m_filterWindowMaximized = settings->value("filterWindowMaximized").toBool(); if(settings->allKeys().contains("settingsManagerWindowGeometry")) m_settingsManagerWindowGeometry = settings->value("settingsManagerWindowGeometry").toRect(); if(settings->allKeys().contains("settingsManagerWindowMaximized")) m_settingsManagerWindowMaximized = settings->value("settingsManagerWindowMaximized").toBool(); if(settings->allKeys().contains("fileSaveAsWindowGeometry")) m_fileSaveAsWindowGeometry = settings->value("fileSaveAsWindowGeometry").toRect(); if(settings->allKeys().contains("fileSaveAsWindowMaximized")) m_fileSaveAsWindowMaximized = settings->value("fileSaveAsWindowMaximized").toBool(); if(settings->allKeys().contains("unavailableWindowGeometry")) m_unavailableWindowGeometry = settings->value("unavailableWindowGeometry").toRect(); if(settings->allKeys().contains("unavailableWindowMaximized")) m_unavailableWindowMaximized = settings->value("unavailableWindowMaximized").toBool(); if(settings->allKeys().contains("chromecastWindowGeometry")) m_chromecastWindowGeometry = settings->value("chromecastWindowGeometry").toRect(); if(settings->allKeys().contains("chromecastWindowMaximized")) m_chromecastWindowMaximized = settings->value("chromecastWindowMaximized").toBool(); if(settings->allKeys().contains("loggingWindowGeometry")) m_loggingWindowGeometry = settings->value("loggingWindowGeometry").toRect(); if(settings->allKeys().contains("loggingWindowMaximized")) m_loggingWindowMaximized = settings->value("loggingWindowMaximized").toBool(); } void PQWindowGeometry::saveGeometries() { DBG << CURDATE << "PQWindowGeometry::saveGeometries()" << NL; settings->setValue("mainWindowGeometry", m_mainWindowGeometry); settings->setValue("mainWindowMaximized", m_mainWindowMaximized); settings->setValue("fileDialogWindowGeometry", m_fileDialogWindowGeometry);; settings->setValue("fileDialogWindowMaximized", m_fileDialogWindowMaximized); settings->setValue("mainMenuWindowGeometry", m_mainMenuWindowGeometry);; settings->setValue("mainMenuWindowMaximized", m_mainMenuWindowMaximized); settings->setValue("metaDataWindowGeometry", m_metaDataWindowGeometry);; settings->setValue("metaDataWindowMaximized", m_metaDataWindowMaximized); settings->setValue("histogramWindowGeometry", m_histogramWindowGeometry);; settings->setValue("histogramWindowMaximized", m_histogramWindowMaximized); settings->setValue("slideshowWindowGeometry", m_slideshowWindowGeometry);; settings->setValue("slideshowWindowMaximized", m_slideshowWindowMaximized); settings->setValue("slideshowControlsWindowGeometry", m_slideshowControlsWindowGeometry); settings->setValue("slideshowControlsWindowMaximized", m_slideshowControlsWindowMaximized); settings->setValue("fileRenameWindowGeometry", m_fileRenameWindowGeometry); settings->setValue("fileRenameWindowMaximized", m_fileRenameWindowMaximized); settings->setValue("fileDeleteWindowGeometry", m_fileDeleteWindowGeometry); settings->setValue("fileDeleteWindowMaximized", m_fileDeleteWindowMaximized); settings->setValue("scaleWindowGeometry", m_scaleWindowGeometry); settings->setValue("scaleWindowMaximized", m_scaleWindowMaximized); settings->setValue("aboutWindowGeometry", m_aboutWindowGeometry); settings->setValue("aboutWindowMaximized", m_aboutWindowMaximized); settings->setValue("imgurWindowGeometry", m_imgurWindowGeometry); settings->setValue("imgurWindowMaximized", m_imgurWindowMaximized); settings->setValue("wallpaperWindowGeometry", m_wallpaperWindowGeometry); settings->setValue("wallpaperWindowMaximized", m_wallpaperWindowMaximized); settings->setValue("filterWindowGeometry", m_filterWindowGeometry); settings->setValue("filterWindowMaximized", m_filterWindowMaximized); settings->setValue("settingsManagerWindowGeometry", m_settingsManagerWindowGeometry); settings->setValue("settingsManagerWindowMaximized", m_settingsManagerWindowMaximized); settings->setValue("fileSaveAsWindowGeometry", m_fileSaveAsWindowGeometry); settings->setValue("fileSaveAsWindowMaximized", m_fileSaveAsWindowMaximized); settings->setValue("unavailableWindowGeometry", m_unavailableWindowGeometry); settings->setValue("unavailableWindowMaximized", m_unavailableWindowMaximized); settings->setValue("chromecastWindowGeometry", m_chromecastWindowGeometry); settings->setValue("chromecastWindowMaximized", m_chromecastWindowMaximized); settings->setValue("loggingWindowGeometry", m_loggingWindowGeometry); settings->setValue("loggingWindowMaximized", m_loggingWindowMaximized); } photoqt-2.5/cplusplus/settings/imageformats.cpp000644 001750 001750 00000045071 14164671372 022506 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "imageformats.h" #include PQImageFormats::PQImageFormats() { db = QSqlDatabase::database("imageformats"); QFileInfo infodb(ConfigFiles::IMAGEFORMATS_DB()); if(!infodb.exists() || !db.open()) { LOG << CURDATE << "PQImageFormats::PQImageFormats(): ERROR opening database: " << db.lastError().text().trimmed().toStdString() << NL; LOG << CURDATE << "PQImageFormats::PQImageFormats(): Will load built-in read-only database of imageformats" << NL; readonly = true; db.setConnectOptions("QSQLITE_OPEN_READONLY"); QString tmppath = QStandardPaths::writableLocation(QStandardPaths::TempLocation)+"/imageformats.db"; if(QFile::exists(tmppath)) QFile::remove(tmppath); if(!QFile::copy(":/imageformats.db", tmppath)) { LOG << CURDATE << "PQImageFormats::PQImageFormats(): ERROR copying read-only default database!" << NL; //: This is the window title of an error message box QMessageBox::critical(0, QCoreApplication::translate("PQImageFormats", "ERROR getting default image formats"), QCoreApplication::translate("PQImageFormats", "I tried hard, but I just cannot open even a read-only version of the database of default image formats.") + QCoreApplication::translate("PQImageFormats", "Something went terribly wrong somewhere!")); return; } db.setDatabaseName(tmppath); if(!db.open()) { LOG << CURDATE << "PQImageFormats::PQImageFormats(): ERROR opening read-only default database!" << NL; QMessageBox::critical(0, QCoreApplication::translate("PQImageFormats", "ERROR getting default image formats"), QCoreApplication::translate("PQImageFormats", "I tried hard, but I just cannot open the database of default image formats.") + QCoreApplication::translate("PQImageFormats", "Something went terribly wrong somewhere!")); return; } readFromDatabase(); } else { readonly = false; if(!infodb.permission(QFileDevice::WriteOwner)) readonly = true; readFromDatabase(); } } void PQImageFormats::readFromDatabase() { DBG << CURDATE << "PQImageFormats::readFromDatabase()" << NL; formats.clear(); formats_enabled.clear(); formats_qt.clear(); formats_magick.clear(); formats_libraw.clear(); formats_poppler.clear(); formats_xcftools.clear(); formats_devil.clear(); formats_freeimage.clear(); formats_archive.clear(); formats_video.clear(); mimetypes_enabled.clear(); mimetypes_qt.clear(); mimetypes_magick.clear(); mimetypes_libraw.clear(); mimetypes_poppler.clear(); mimetypes_xcftools.clear(); mimetypes_devil.clear(); mimetypes_freeimage.clear(); mimetypes_archive.clear(); mimetypes_video.clear(); magick.clear(); magick_mimetype.clear(); const QList qtSupported = QImageReader::supportedImageFormats(); QSqlQuery query("SELECT * FROM imageformats ORDER BY enabled DESC, description ASC", db); while(query.next()) { const QString endings = query.record().value("endings").toString(); const QString mimetypes = query.record().value("mimetypes").toString(); const QString desc = query.record().value("description").toString(); const QString cat = query.record().value("category").toString(); const int enabled = query.record().value("enabled").toInt(); const int qt = query.record().value("qt").toInt(); #ifdef IMAGEMAGICK const int imgmmagick = query.record().value("imagemagick").toInt(); #elif defined(GRAPHICSMAGICK) const int imgmmagick = query.record().value("graphicsmagick").toInt(); #endif const int libraw = query.record().value("libraw").toInt(); const int poppler = query.record().value("poppler").toInt(); const int xcftools = query.record().value("xcftools").toInt(); const int devil = query.record().value("devil").toInt(); const int freeimage = query.record().value("freeimage").toInt(); const int archive = query.record().value("archive").toInt(); const int video = query.record().value("video").toInt(); const QString im_gm_magick = query.record().value("im_gm_magick").toString(); const QString qt_formatname = query.record().value("qt_formatname").toString(); bool supportedByAnyLibrary = false; bool magickToBeAdded = false; QList all; all << endings; all << enabled; all << desc; all << cat; if(qt) { // we check the formats against the list of supported image formats // this list can vary depending on which plugins are installed if(qtSupported.contains(qt_formatname.toUtf8())) { supportedByAnyLibrary = true; all << "Qt"; formats_qt << endings.split(","); if(mimetypes != "") mimetypes_qt << mimetypes.split(","); } } #if defined(IMAGEMAGICK) || defined(GRAPHICSMAGICK) if(imgmmagick) { // we check with the Magick++ API to see if each format is readable // by default we assume it is and if either no codec is available (exception thrown) // or when it is reported as not readable, then we skip this format bool alright = true; if(im_gm_magick != "") { try { Magick::CoderInfo magickCoderInfo(im_gm_magick.toStdString()); if(!magickCoderInfo.isReadable()) alright = false; } catch(Magick::Exception &) { alright = false; } } if(alright) { supportedByAnyLibrary = true; magickToBeAdded = true; #ifdef IMAGEMAGICK all << "ImageMagick"; #elif defined(GRAPHICSMAGICK) all << "GraphicsMagick"; #endif formats_magick << endings.split(","); if(mimetypes != "") mimetypes_magick << mimetypes.split(","); } } #endif #ifdef RAW if(libraw) { supportedByAnyLibrary = true; all << "libraw"; formats_libraw << endings.split(","); if(mimetypes != "") mimetypes_libraw << mimetypes.split(","); } #endif #ifdef POPPLER if(poppler) { supportedByAnyLibrary = true; all << "Poppler"; formats_poppler << endings.split(","); if(mimetypes != "") mimetypes_poppler << mimetypes.split(","); } #endif if(xcftools) { supportedByAnyLibrary = true; all << "XCFTools"; formats_xcftools << endings.split(","); if(mimetypes != "") mimetypes_xcftools << mimetypes.split(","); } #ifdef DEVIL if(devil) { supportedByAnyLibrary = true; all << "DevIL"; formats_devil << endings.split(","); if(mimetypes != "") mimetypes_devil << mimetypes.split(","); } #endif #ifdef FREEIMAGE if(freeimage) { supportedByAnyLibrary = true; all << "FreeImage"; formats_freeimage << endings.split(","); if(mimetypes != "") mimetypes_freeimage << mimetypes.split(","); } #endif #ifdef LIBARCHIVE if(archive) { supportedByAnyLibrary = true; all << "LibArchive"; formats_archive << endings.split(","); if(mimetypes != "") mimetypes_archive << mimetypes.split(","); } #endif #ifdef VIDEO if(video) { supportedByAnyLibrary = true; all << "Video"; formats_video << endings.split(","); if(mimetypes != "") mimetypes_video << mimetypes.split(","); } #endif if(supportedByAnyLibrary) { formats << QVariant::fromValue(all); if(enabled) { formats_enabled << endings.split(","); if(mimetypes != "") mimetypes_enabled << mimetypes.split(","); } if(magickToBeAdded && im_gm_magick != "") { for(QString &e : endings.split(",")) { if(magick.contains(e)) magick[e] = QStringList() << magick[e].toStringList() << im_gm_magick; else magick.insert(e, QStringList() << im_gm_magick); } for(QString &mt : mimetypes.split(",")) { if(magick_mimetype.contains(mt)) magick_mimetype[mt] = QStringList() << magick_mimetype[mt].toStringList() << im_gm_magick; else magick_mimetype.insert(mt, QStringList() << im_gm_magick); } } } } } void PQImageFormats::writeToDatabase(QVariantList f) { DBG << CURDATE << "PQImageFormats::writeToDatabase()" << NL; if(readonly) return; db.transaction(); for(QVariant entry : f) { QSqlQuery query(db); query.prepare("UPDATE imageformats SET enabled=:enabled WHERE endings=:endings"); query.bindValue(":enabled", entry.toList()[1].toInt()); query.bindValue(":endings", entry.toList()[0].toString()); if(!query.exec()) LOG << CURDATE << "PQImageFormats::writeToDatabase(): SQL Query error: " << query.lastError().text().trimmed().toStdString() << NL; } db.commit(); if(!db.lastError().text().trimmed().isEmpty()) LOG << CURDATE << "PQImageFormats::writeToDatabase(): SQL Query error: " << db.lastError().text().trimmed().toStdString() << NL; readFromDatabase(); } QVariantList PQImageFormats::getWriteableFormats() { DBG << CURDATE << "PQImageFormats::getWriteableFormats()" << NL; QVariantList ret; QImageWriter writer; QSqlQuery query("SELECT * FROM imageformats ORDER BY qt DESC", db); while(query.next()) { QString qt_formatname = query.record().value("qt_formatname").toString(); const QString endings = query.record().value("endings").toString(); const QString description = query.record().value("description").toString(); const QString magick = query.record().value("im_gm_magick").toString(); bool qt = false; bool imgm = false; if(qt_formatname != "" &&writer.supportedImageFormats().contains(qt_formatname.toUtf8())) qt = true; #if defined(IMAGEMAGICK) || defined(GRAPHICSMAGICK) else if(magick != "") { try { Magick::CoderInfo magickCoderInfo(magick.toStdString()); if(magickCoderInfo.isReadable() && magickCoderInfo.isWritable()) imgm = true; } catch(Magick::Exception &) {} } #endif if(qt || imgm) { QVariantList entry; entry << (qt&&imgm ? "qt/magick" : (qt ? "qt" : "magick")); entry << endings << description << magick; ret << QVariant::fromValue(entry); } } return ret; } QVariantMap PQImageFormats::getFormatsInfo(QString endings) { DBG << CURDATE << "PQImageFormats::getFormatsInfo()" << NL; QVariantMap ret; QSqlQuery query(db); query.prepare("SELECT * FROM imageformats WHERE endings=:endings"); query.bindValue(":endings", endings); if(!query.exec()) { LOG << CURDATE << "PQImageFormats::getFormatsInfo(): SQL Query error: " << query.lastError().text().trimmed().toStdString() << NL; return ret; } if(!query.next()) { LOG << CURDATE << "PQImageFormats::getFormatsInfo(): No SQL results returned" << NL; return ret; } ret.insert("endings", endings); ret.insert("mimetypes", query.record().value("mimetypes")); ret.insert("description", query.record().value("description")); ret.insert("category", query.record().value("category")); ret.insert("enabled", query.record().value("enabled")); ret.insert("qt", query.record().value("qt")); ret.insert("imagemagick", query.record().value("imagemagick")); ret.insert("graphicsmagick", query.record().value("graphicsmagick")); ret.insert("libraw", query.record().value("libraw")); ret.insert("poppler", query.record().value("poppler")); ret.insert("xcftools", query.record().value("xcftools")); ret.insert("devil", query.record().value("devil")); ret.insert("freeimage", query.record().value("freeimage")); ret.insert("archive", query.record().value("archive")); ret.insert("video", query.record().value("video")); ret.insert("im_gm_magick", query.record().value("im_gm_magick")); ret.insert("qt_formatname", query.record().value("qt_formatname")); return ret; } bool PQImageFormats::enterNewFormat(QString endings, QString mimetypes, QString description, QString category, int enabled, int qt, int imagemagick, int graphicsmagick, int libraw, int poppler, int xcftools, int devil, int freeimage, int archive, int video, QString im_gm_magick, QString qt_formatname, bool silentIfExists = false) { // first check that it doesn't exist yet QSqlQuery query(db); query.prepare("SELECT COUNT(endings) AS NumFormats FROM imageformats WHERE description=:description"); query.bindValue(":description", description); if(!query.exec()) { LOG << CURDATE << "PQImageFormats::enterNewFormat(): SQL Query error (1): " << query.lastError().text().trimmed().toStdString() << NL; return false; } if(!query.next()) { LOG << CURDATE << "PQImageFormats::enterNewFormat(): No SQL results returned" << NL; return false; } int howmany = query.record().value("NumFormats").toInt(); if(howmany != 0) { if(!silentIfExists) LOG << CURDATE << "PQImageFormats::enterNewFormat(): Found " << howmany << " format with the new descrption, not entering anything new." << NL; return false; } QSqlQuery query2(db); query2.prepare("INSERT INTO imageformats (endings, mimetypes, description, category, enabled, qt, imagemagick, graphicsmagick, libraw, poppler, xcftools, devil, freeimage, archive, video, im_gm_magick, qt_formatname) VALUES (:endings, :mimetypes, :description, :category, :enabled, :qt, :imagemagick, :graphicsmagick, :libraw, :poppler, :xcftools, :devil, :freeimage, :archive, :video, :im_gm_magick, :qt_formatname)"); query2.bindValue(":endings", endings); query2.bindValue(":mimetypes", mimetypes); query2.bindValue(":description", description); query2.bindValue(":category", category); query2.bindValue(":enabled", enabled); query2.bindValue(":qt", qt); query2.bindValue(":imagemagick", imagemagick); query2.bindValue(":graphicsmagick", graphicsmagick); query2.bindValue(":libraw", libraw); query2.bindValue(":poppler", poppler); query2.bindValue(":xcftools", xcftools); query2.bindValue(":devil", devil); query2.bindValue(":freeimage", freeimage); query2.bindValue(":archive", archive); query2.bindValue(":video", video); query2.bindValue(":im_gm_magick", im_gm_magick); query2.bindValue(":qt_formatname", qt_formatname); if(!query2.exec()) { LOG << CURDATE << "PQImageFormats::enterNewFormat(): SQL Query error (2): " << query2.lastError().text().trimmed().toStdString() << NL; return false; } // it is recommended to re-read the database after inserting formats // it is not done automatically as this function might be called multiple times // thus it should be taken care of from whererever this function is called. return true; } void PQImageFormats::restoreDefaults() { db.close(); QSqlDatabase::removeDatabase("imageformats"); if(!QFile::remove(ConfigFiles::IMAGEFORMATS_DB())) { LOG << CURDATE << "PQImageFormats::restoreDefaults(): Error removing old database." << NL; return; } if(!QFile::copy(":/imageformats.db", ConfigFiles::IMAGEFORMATS_DB())) { LOG << CURDATE << "PQImageFormats::restoreDefaults(): Error copying over new database." << NL; return; } QFile file(ConfigFiles::IMAGEFORMATS_DB()); if(!file.setPermissions(file.permissions()|QFile::WriteOwner)) { LOG << CURDATE << "PQImageFormats::restoreDefaults(): Error setting write permission to new database, setting read-only flag." << NL; readonly = true; return; } if(!db.open()) { LOG << CURDATE << "PQImageFormats::restoreDefaults(): Error opening new database: " << db.lastError().text().trimmed().toStdString() << NL; return; } if(QSqlDatabase::isDriverAvailable("QSQLITE3")) db = QSqlDatabase::addDatabase("QSQLITE3", "imageformats"); else db = QSqlDatabase::addDatabase("QSQLITE", "imageformats"); db.setDatabaseName(ConfigFiles::IMAGEFORMATS_DB()); readFromDatabase(); } photoqt-2.5/cplusplus/settings/windowgeometry.h000644 001750 001750 00000055641 14164671360 022561 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQWINDOWGEOMETRY_H #define PQWINDOWGEOMETRY_H #include #include #include #include #include #include "../logger.h" #include "../scripts/handlingexternal.h" class PQWindowGeometry : public QObject { Q_OBJECT public: explicit PQWindowGeometry(QObject *parent = 0); ~PQWindowGeometry(); Q_PROPERTY(QRect mainWindowGeometry READ getMainWindowGeometry WRITE setMainWindowGeometry NOTIFY mainWindowGeometryChanged) const QRect getMainWindowGeometry() { return m_mainWindowGeometry; } void setMainWindowGeometry(QRect rect) { if(rect != m_mainWindowGeometry) { m_mainWindowGeometry = rect; Q_EMIT mainWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool mainWindowMaximized READ getMainWindowMaximized WRITE setMainWindowMaximized NOTIFY mainWindowMaximizedChanged) bool getMainWindowMaximized() { return m_mainWindowMaximized; } void setMainWindowMaximized(bool maximized) { if(maximized != m_mainWindowMaximized) { m_mainWindowMaximized = maximized; Q_EMIT mainWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect fileDialogWindowGeometry READ getFileDialogWindowGeometry WRITE setFileDialogWindowGeometry NOTIFY fileDialogWindowGeometryChanged) QRect getFileDialogWindowGeometry() { return m_fileDialogWindowGeometry; } void setFileDialogWindowGeometry(QRect rect) { if(rect != m_fileDialogWindowGeometry) { m_fileDialogWindowGeometry = rect; Q_EMIT fileDialogWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool fileDialogWindowMaximized READ getFileDialogWindowMaximized WRITE setFileDialogWindowMaximized NOTIFY fileDialogWindowMaximizedChanged) bool getFileDialogWindowMaximized() { return m_fileDialogWindowMaximized; } void setFileDialogWindowMaximized(bool maximized) { if(maximized != m_fileDialogWindowMaximized) { m_fileDialogWindowMaximized = maximized; Q_EMIT fileDialogWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect mainMenuWindowGeometry READ getMainMenuWindowGeometry WRITE setMainMenuWindowGeometry NOTIFY mainMenuWindowGeometryChanged) QRect getMainMenuWindowGeometry() { return m_mainMenuWindowGeometry; } void setMainMenuWindowGeometry(QRect rect) { if(rect != m_mainMenuWindowGeometry) { m_mainMenuWindowGeometry = rect; Q_EMIT mainMenuWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool mainMenuWindowMaximized READ getMainMenuWindowMaximized WRITE setMainMenuWindowMaximized NOTIFY mainMenuWindowMaximizedChanged) bool getMainMenuWindowMaximized() { return m_mainMenuWindowMaximized; } void setMainMenuWindowMaximized(bool maximized) { if(maximized != m_mainMenuWindowMaximized) { m_mainMenuWindowMaximized = maximized; Q_EMIT mainMenuWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect metaDataWindowGeometry READ getMetaDataWindowGeometry WRITE setMetaDataWindowGeometry NOTIFY metaDataWindowGeometryChanged) QRect getMetaDataWindowGeometry() { return m_metaDataWindowGeometry; } void setMetaDataWindowGeometry(QRect rect) { if(rect != m_metaDataWindowGeometry) { m_metaDataWindowGeometry = rect; Q_EMIT metaDataWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool metaDataWindowMaximized READ getMetaDataWindowMaximized WRITE setMetaDataWindowMaximized NOTIFY metaDataWindowMaximizedChanged) bool getMetaDataWindowMaximized() { return m_metaDataWindowMaximized; } void setMetaDataWindowMaximized(bool maximized) { if(maximized != m_metaDataWindowMaximized) { m_metaDataWindowMaximized = maximized; Q_EMIT metaDataWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect histogramWindowGeometry READ getHistogramWindowGeometry WRITE setHistogramWindowGeometry NOTIFY histogramWindowGeometryChanged) QRect getHistogramWindowGeometry() { return m_histogramWindowGeometry; } void setHistogramWindowGeometry(QRect rect) { if(rect != m_histogramWindowGeometry) { m_histogramWindowGeometry = rect; Q_EMIT histogramWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool histogramWindowMaximized READ getHistogramWindowMaximized WRITE setHistogramWindowMaximized NOTIFY histogramWindowMaximizedChanged) bool getHistogramWindowMaximized() { return m_histogramWindowMaximized; } void setHistogramWindowMaximized(bool maximized) { if(maximized != m_histogramWindowMaximized) { m_histogramWindowMaximized = maximized; Q_EMIT histogramWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect slideshowWindowGeometry READ getSlideshowWindowGeometry WRITE setSlideshowWindowGeometry NOTIFY slideshowWindowGeometryChanged) QRect getSlideshowWindowGeometry() { return m_slideshowWindowGeometry; } void setSlideshowWindowGeometry(QRect rect) { if(rect != m_slideshowWindowGeometry) { m_slideshowWindowGeometry = rect; Q_EMIT slideshowWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool slideshowWindowMaximized READ getSlideshowWindowMaximized WRITE setSlideshowWindowMaximized NOTIFY slideshowWindowMaximizedChanged) bool getSlideshowWindowMaximized() { return m_slideshowWindowMaximized; } void setSlideshowWindowMaximized(bool maximized) { if(maximized != m_slideshowWindowMaximized) { m_slideshowWindowMaximized = maximized; Q_EMIT slideshowWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect slideshowControlsWindowGeometry READ getSlideshowControlsWindowGeometry WRITE setSlideshowControlsWindowGeometry NOTIFY slideshowControlsWindowGeometryChanged) QRect getSlideshowControlsWindowGeometry() { return m_slideshowControlsWindowGeometry; } void setSlideshowControlsWindowGeometry(QRect rect) { if(rect != m_slideshowControlsWindowGeometry) { m_slideshowControlsWindowGeometry = rect; Q_EMIT slideshowControlsWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool slideshowControlsWindowMaximized READ getSlideshowControlsWindowMaximized WRITE setSlideshowControlsWindowMaximized NOTIFY slideshowControlsWindowMaximizedChanged) bool getSlideshowControlsWindowMaximized() { return m_slideshowControlsWindowMaximized; } void setSlideshowControlsWindowMaximized(bool maximized) { if(maximized != m_slideshowControlsWindowMaximized) { m_slideshowControlsWindowMaximized = maximized; Q_EMIT slideshowControlsWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect fileRenameWindowGeometry READ getFileRenameWindowGeometry WRITE setFileRenameWindowGeometry NOTIFY fileRenameWindowGeometryChanged) QRect getFileRenameWindowGeometry() { return m_fileRenameWindowGeometry; } void setFileRenameWindowGeometry(QRect rect) { if(rect != m_fileRenameWindowGeometry) { m_fileRenameWindowGeometry = rect; Q_EMIT fileRenameWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool fileRenameWindowMaximized READ getFileRenameWindowMaximized WRITE setFileRenameWindowMaximized NOTIFY fileRenameWindowMaximizedChanged) bool getFileRenameWindowMaximized() { return m_fileRenameWindowMaximized; } void setFileRenameWindowMaximized(bool maximized) { if(maximized != m_fileRenameWindowMaximized) { m_fileRenameWindowMaximized = maximized; Q_EMIT fileRenameWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect fileDeleteWindowGeometry READ getFileDeleteWindowGeometry WRITE setFileDeleteWindowGeometry NOTIFY fileDeleteWindowGeometryChanged) QRect getFileDeleteWindowGeometry() { return m_fileDeleteWindowGeometry; } void setFileDeleteWindowGeometry(QRect rect) { if(rect != m_fileDeleteWindowGeometry) { m_fileDeleteWindowGeometry = rect; Q_EMIT fileDeleteWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool fileDeleteWindowMaximized READ getFileDeleteWindowMaximized WRITE setFileDeleteWindowMaximized NOTIFY fileDeleteWindowMaximizedChanged) bool getFileDeleteWindowMaximized() { return m_fileDeleteWindowMaximized; } void setFileDeleteWindowMaximized(bool maximized) { if(maximized != m_fileDeleteWindowMaximized) { m_fileDeleteWindowMaximized = maximized; Q_EMIT fileDeleteWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect scaleWindowGeometry READ getScaleWindowGeometry WRITE setScaleWindowGeometry NOTIFY scaleWindowGeometryChanged) QRect getScaleWindowGeometry() { return m_scaleWindowGeometry; } void setScaleWindowGeometry(QRect rect) { if(rect != m_scaleWindowGeometry) { m_scaleWindowGeometry = rect; Q_EMIT scaleWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool scaleWindowMaximized READ getScaleWindowMaximized WRITE setScaleWindowMaximized NOTIFY scaleWindowMaximizedChanged) bool getScaleWindowMaximized() { return m_scaleWindowMaximized; } void setScaleWindowMaximized(bool maximized) { if(maximized != m_scaleWindowMaximized) { m_scaleWindowMaximized = maximized; Q_EMIT scaleWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect aboutWindowGeometry READ getAboutWindowGeometry WRITE setAboutWindowGeometry NOTIFY aboutWindowGeometryChanged) QRect getAboutWindowGeometry() { return m_aboutWindowGeometry; } void setAboutWindowGeometry(QRect rect) { if(rect != m_aboutWindowGeometry) { m_aboutWindowGeometry = rect; Q_EMIT aboutWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool aboutWindowMaximized READ getAboutWindowMaximized WRITE setAboutWindowMaximized NOTIFY aboutWindowMaximizedChanged) bool getAboutWindowMaximized() { return m_aboutWindowMaximized; } void setAboutWindowMaximized(bool maximized) { if(maximized != m_aboutWindowMaximized) { m_aboutWindowMaximized = maximized; Q_EMIT aboutWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect imgurWindowGeometry READ getImgurWindowGeometry WRITE setImgurWindowGeometry NOTIFY imgurWindowGeometryChanged) QRect getImgurWindowGeometry() { return m_imgurWindowGeometry; } void setImgurWindowGeometry(QRect rect) { if(rect != m_imgurWindowGeometry) { m_imgurWindowGeometry = rect; Q_EMIT imgurWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool imgurWindowMaximized READ getImgurWindowMaximized WRITE setImgurWindowMaximized NOTIFY imgurWindowMaximizedChanged) bool getImgurWindowMaximized() { return m_imgurWindowMaximized; } void setImgurWindowMaximized(bool maximized) { if(maximized != m_imgurWindowMaximized) { m_imgurWindowMaximized = maximized; Q_EMIT imgurWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect wallpaperWindowGeometry READ getWallpaperWindowGeometry WRITE setWallpaperWindowGeometry NOTIFY wallpaperWindowGeometryChanged) QRect getWallpaperWindowGeometry() { return m_wallpaperWindowGeometry; } void setWallpaperWindowGeometry(QRect rect) { if(rect != m_wallpaperWindowGeometry) { m_wallpaperWindowGeometry = rect; Q_EMIT wallpaperWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool wallpaperWindowMaximized READ getWallpaperWindowMaximized WRITE setWallpaperWindowMaximized NOTIFY wallpaperWindowMaximizedChanged) bool getWallpaperWindowMaximized() { return m_wallpaperWindowMaximized; } void setWallpaperWindowMaximized(bool maximized) { if(maximized != m_wallpaperWindowMaximized) { m_wallpaperWindowMaximized = maximized; Q_EMIT wallpaperWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect filterWindowGeometry READ getFilterWindowGeometry WRITE setFilterWindowGeometry NOTIFY filterWindowGeometryChanged) QRect getFilterWindowGeometry() { return m_filterWindowGeometry; } void setFilterWindowGeometry(QRect rect) { if(rect != m_filterWindowGeometry) { m_filterWindowGeometry = rect; Q_EMIT filterWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool filterWindowMaximized READ getFilterWindowMaximized WRITE setFilterWindowMaximized NOTIFY filterWindowMaximizedChanged) bool getFilterWindowMaximized() { return m_filterWindowMaximized; } void setFilterWindowMaximized(bool maximized) { if(maximized != m_filterWindowMaximized) { m_filterWindowMaximized = maximized; Q_EMIT filterWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect settingsManagerWindowGeometry READ getSettingsManagerWindowGeometry WRITE setSettingsManagerWindowGeometry NOTIFY settingsManagerWindowGeometryChanged) QRect getSettingsManagerWindowGeometry() { return m_settingsManagerWindowGeometry; } void setSettingsManagerWindowGeometry(QRect rect) { if(rect != m_settingsManagerWindowGeometry) { m_settingsManagerWindowGeometry = rect; Q_EMIT settingsManagerWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool settingsManagerWindowMaximized READ getSettingsManagerWindowMaximized WRITE setSettingsManagerWindowMaximized NOTIFY settingsManagerWindowMaximizedChanged) bool getSettingsManagerWindowMaximized() { return m_settingsManagerWindowMaximized; } void setSettingsManagerWindowMaximized(bool maximized) { if(maximized != m_settingsManagerWindowMaximized) { m_settingsManagerWindowMaximized = maximized; Q_EMIT settingsManagerWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect fileSaveAsWindowGeometry READ getFileSaveAsWindowGeometry WRITE setFileSaveAsWindowGeometry NOTIFY fileSaveAsWindowGeometryChanged) QRect getFileSaveAsWindowGeometry() { return m_fileSaveAsWindowGeometry; } void setFileSaveAsWindowGeometry(QRect rect) { if(rect != m_fileSaveAsWindowGeometry) { m_fileSaveAsWindowGeometry = rect; Q_EMIT fileSaveAsWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool fileSaveAsWindowMaximized READ getFileSaveAsWindowMaximized WRITE setFileSaveAsWindowMaximized NOTIFY fileSaveAsWindowMaximizedChanged) bool getFileSaveAsWindowMaximized() { return m_fileSaveAsWindowMaximized; } void setFileSaveAsWindowMaximized(bool maximized) { if(maximized != m_fileSaveAsWindowMaximized) { m_fileSaveAsWindowMaximized = maximized; Q_EMIT fileSaveAsWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect unavailableWindowGeometry READ getUnavailableWindowGeometry WRITE setUnavailableWindowGeometry NOTIFY unavailableWindowGeometryChanged) QRect getUnavailableWindowGeometry() { return m_unavailableWindowGeometry; } void setUnavailableWindowGeometry(QRect rect) { if(rect != m_unavailableWindowGeometry) { m_unavailableWindowGeometry = rect; Q_EMIT unavailableWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool unavailableWindowMaximized READ getUnavailableWindowMaximized WRITE setUnavailableWindowMaximized NOTIFY unavailableWindowMaximizedChanged) bool getUnavailableWindowMaximized() { return m_unavailableWindowMaximized; } void setUnavailableWindowMaximized(bool maximized) { if(maximized != m_unavailableWindowMaximized) { m_unavailableWindowMaximized = maximized; Q_EMIT unavailableWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect chromecastWindowGeometry READ getChromecastWindowGeometry WRITE setChromecastWindowGeometry NOTIFY chromecastWindowGeometryChanged) QRect getChromecastWindowGeometry() { return m_chromecastWindowGeometry; } void setChromecastWindowGeometry(QRect rect) { if(rect != m_chromecastWindowGeometry) { m_chromecastWindowGeometry = rect; Q_EMIT chromecastWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool chromecastWindowMaximized READ getChromecastWindowMaximized WRITE setChromecastWindowMaximized NOTIFY chromecastWindowMaximizedChanged) bool getChromecastWindowMaximized() { return m_chromecastWindowMaximized; } void setChromecastWindowMaximized(bool maximized) { if(maximized != m_chromecastWindowMaximized) { m_chromecastWindowMaximized = maximized; Q_EMIT chromecastWindowMaximizedChanged(); saveGeometries(); } } Q_PROPERTY(QRect loggingWindowGeometry READ getLoggingWindowGeometry WRITE setLoggingWindowGeometry NOTIFY loggingWindowGeometryChanged) QRect getLoggingWindowGeometry() { return m_loggingWindowGeometry; } void setLoggingWindowGeometry(QRect rect) { if(rect != m_loggingWindowGeometry) { m_loggingWindowGeometry = rect; Q_EMIT loggingWindowGeometryChanged(); saveGeometries(); } } Q_PROPERTY(bool loggingWindowMaximized READ getLoggingWindowMaximized WRITE setLoggingWindowMaximized NOTIFY loggingWindowMaximizedChanged) bool getLoggingWindowMaximized() { return m_loggingWindowMaximized; } void setLoggingWindowMaximized(bool maximized) { if(maximized != m_loggingWindowMaximized) { m_loggingWindowMaximized = maximized; Q_EMIT loggingWindowMaximizedChanged(); saveGeometries(); } } private: QRect m_mainWindowGeometry; bool m_mainWindowMaximized; QRect m_fileDialogWindowGeometry; bool m_fileDialogWindowMaximized; QRect m_mainMenuWindowGeometry; bool m_mainMenuWindowMaximized; QRect m_metaDataWindowGeometry; bool m_metaDataWindowMaximized; QRect m_histogramWindowGeometry; bool m_histogramWindowMaximized; QRect m_slideshowWindowGeometry; bool m_slideshowWindowMaximized; QRect m_slideshowControlsWindowGeometry; bool m_slideshowControlsWindowMaximized; QRect m_fileRenameWindowGeometry; bool m_fileRenameWindowMaximized; QRect m_fileDeleteWindowGeometry; bool m_fileDeleteWindowMaximized; QRect m_scaleWindowGeometry; bool m_scaleWindowMaximized; QRect m_aboutWindowGeometry; bool m_aboutWindowMaximized; QRect m_imgurWindowGeometry; bool m_imgurWindowMaximized; QRect m_wallpaperWindowGeometry; bool m_wallpaperWindowMaximized; QRect m_filterWindowGeometry; bool m_filterWindowMaximized; QRect m_settingsManagerWindowGeometry; bool m_settingsManagerWindowMaximized; QRect m_fileSaveAsWindowGeometry; bool m_fileSaveAsWindowMaximized; QRect m_unavailableWindowGeometry; bool m_unavailableWindowMaximized; QRect m_chromecastWindowGeometry; bool m_chromecastWindowMaximized; QRect m_loggingWindowGeometry; bool m_loggingWindowMaximized; QSettings *settings; PQHandlingExternal handlingExternal; void saveGeometries(); private Q_SLOTS: void readGeometries(); Q_SIGNALS: void mainWindowGeometryChanged(); void mainWindowMaximizedChanged(); void fileDialogWindowGeometryChanged(); void fileDialogWindowMaximizedChanged(); void mainMenuWindowGeometryChanged(); void mainMenuWindowMaximizedChanged(); void metaDataWindowGeometryChanged(); void metaDataWindowMaximizedChanged(); void histogramWindowGeometryChanged(); void histogramWindowMaximizedChanged(); void slideshowWindowGeometryChanged(); void slideshowWindowMaximizedChanged(); void slideshowControlsWindowGeometryChanged(); void slideshowControlsWindowMaximizedChanged(); void fileRenameWindowGeometryChanged(); void fileRenameWindowMaximizedChanged(); void fileDeleteWindowGeometryChanged(); void fileDeleteWindowMaximizedChanged(); void scaleWindowGeometryChanged(); void scaleWindowMaximizedChanged(); void aboutWindowGeometryChanged(); void aboutWindowMaximizedChanged(); void imgurWindowGeometryChanged(); void imgurWindowMaximizedChanged(); void wallpaperWindowGeometryChanged(); void wallpaperWindowMaximizedChanged(); void filterWindowGeometryChanged(); void filterWindowMaximizedChanged(); void settingsManagerWindowGeometryChanged(); void settingsManagerWindowMaximizedChanged(); void fileSaveAsWindowGeometryChanged(); void fileSaveAsWindowMaximizedChanged(); void unavailableWindowGeometryChanged(); void unavailableWindowMaximizedChanged(); void chromecastWindowGeometryChanged(); void chromecastWindowMaximizedChanged(); void loggingWindowGeometryChanged(); void loggingWindowMaximizedChanged(); }; #endif // PQWINDOWGEOMETRY_H photoqt-2.5/cplusplus/settings/shortcuts.h000644 001750 001750 00000005254 14164671361 021530 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ /* auto-generated using generatesettings.py */ #ifndef PQSHORTCUTS_H #define PQSHORTCUTS_H #include #include #include #include #include "../logger.h" class PQShortcuts : public QObject { Q_OBJECT public: static PQShortcuts& get() { static PQShortcuts instance; return instance; } ~PQShortcuts(); PQShortcuts(PQShortcuts const&) = delete; void operator=(PQShortcuts const&) = delete; Q_INVOKABLE void setDefault(); Q_INVOKABLE QStringList getCommandForShortcut(QString sh); Q_INVOKABLE QStringList getShortcutsForCommand(QString cmd); Q_INVOKABLE QVariantList getAllExternalShortcuts(); Q_INVOKABLE void deleteAllExternalShortcuts(); Q_INVOKABLE void setShortcut(QString cmd, QStringList shortcuts); public Q_SLOTS: void readDB(); private: PQShortcuts(); QMap shortcuts; QMap externalShortcuts; QSqlDatabase db; bool readonly; bool dbIsTransaction; QTimer *dbCommitTimer; Q_SIGNALS: void aboutChanged(); }; #endif // PQSHORTCUTS_H photoqt-2.5/cplusplus/passon.h000644 001750 001750 00000007305 14164671423 017133 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQPASSON_H #define PQPASSON_H #include // DO NOT use PQSettings in this class! // The right folders are not yet set up at this point // This will cause unintended side effects // including not loading the settings properly/resetting defaults class PQPassOn : public QObject { Q_OBJECT public: static PQPassOn& get() { static PQPassOn instance; return instance; } PQPassOn(PQPassOn const&) = delete; void operator=(PQPassOn const&) = delete; /******************************************************/ // at startup, call this method instead of signal directly // later-on, the signal can be used without this method void setFilePath(QString path) { filepath = path; Q_EMIT cmdFilePath(filepath); } Q_INVOKABLE QString getFilePath() { return filepath; } /******************************************************/ // used to show 'welcome' screen if this seems to be a new install void setFreshInstall(bool inst) { freshInstall = inst; } Q_INVOKABLE bool getFreshInstall() { return freshInstall; } /******************************************************/ void setThumbs(bool thb) { thumbs = int(thb); Q_EMIT cmdThumbs(thb); } Q_INVOKABLE int getThumbs() { return thumbs; } /******************************************************/ void setStartInTray() { startintray = true; } Q_INVOKABLE bool getStartInTray() { return startintray; } /******************************************************/ private: PQPassOn() { filepath = ""; freshInstall = false; startintray = false; thumbs = 2; } // these are used at startup // afterwards we only listen to the signals QString filepath; bool freshInstall; int thumbs; bool startintray; Q_SIGNALS: void cmdFilePath(QString path); void cmdOpen(); void cmdShow(); void cmdHide(); void cmdToggle(); void cmdThumbs(bool thb); void cmdShortcutSequence(QString seq); void cmdTray(bool tray); }; #endif // PQPASSON_H photoqt-2.5/cplusplus/filefoldermodel/000755 001750 001750 00000000000 14164671140 020602 5ustar00luspiluspi000000 000000 photoqt-2.5/cplusplus/filefoldermodel/filefoldermodel.h000644 001750 001750 00000022706 14164671135 024122 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef FILEFOLDERMODEL_H #define FILEFOLDERMODEL_H #include #include #include #include #include #include #include #include "../settings/settings.h" #include "../logger.h" #include "../settings/imageformats.h" #include "../scripts/handlingfiledir.h" #include "filefoldermodelcache.h" #ifdef POPPLER #include #endif class PQFileFolderModel : public QObject { Q_OBJECT public: enum FileRoles { FileNameRole = Qt::UserRole + 1, FilePathRole, PathRole, FileSizeRole, FileModifiedRole, FileIsDirRole, FileTypeRole }; enum SortBy { Name, NaturalName, Time, Size, Type }; Q_ENUM(SortBy) PQFileFolderModel(QObject *parent = nullptr); ~PQFileFolderModel(); Q_PROPERTY(QString fileInFolderMainView READ getFileInFolderMainView WRITE setFileInFolderMainView NOTIFY fileInFolderMainViewChanged) QString getFileInFolderMainView() { return m_fileInFolderMainView; } void setFileInFolderMainView(QString val) { m_fileInFolderMainView = val; Q_EMIT fileInFolderMainViewChanged(); loadDelayMainView->start(); } Q_PROPERTY(QString folderFileDialog READ getFolderFileDialog WRITE setFolderFileDialog NOTIFY folderFileDialogChanged) QString getFolderFileDialog() { return m_folderFileDialog; } void setFolderFileDialog(QString val) { m_folderFileDialog = val; Q_EMIT folderFileDialogChanged(); loadDelayFileDialog->start(); } Q_PROPERTY(int countMainView READ getCountMainView WRITE setCountMainView NOTIFY countMainViewChanged) int getCountMainView() { return m_countMainView; } void setCountMainView(int c) { m_countMainView = c; Q_EMIT countMainViewChanged(); } Q_PROPERTY(int countFoldersFileDialog READ getCountFoldersFileDialog WRITE setCountFoldersFileDialog NOTIFY countFileDialogChanged) int getCountFoldersFileDialog() { return m_countFoldersFileDialog; } void setCountFoldersFileDialog(int c) { m_countFoldersFileDialog = c; Q_EMIT countFileDialogChanged(); } Q_PROPERTY(int countFilesFileDialog READ getCountFilesFileDialog WRITE setCountFilesFileDialog NOTIFY countFileDialogChanged) int getCountFilesFileDialog() { return m_countFilesFileDialog; } void setCountFilesFileDialog(int c) { m_countFilesFileDialog = c; Q_EMIT countFileDialogChanged(); } Q_PROPERTY(int readDocumentOnly READ getReadDocumentOnly WRITE setReadDocumentOnly NOTIFY readDocumentOnlyChanged()) int getReadDocumentOnly() { return m_readDocumentOnly; } void setReadDocumentOnly(int c) { m_readDocumentOnly = c; Q_EMIT readDocumentOnlyChanged(); } Q_PROPERTY(int readArchiveOnly READ getReadArchiveOnly WRITE setReadArchiveOnly NOTIFY readArchiveOnlyChanged()) int getReadArchiveOnly() { return m_readArchiveOnly; } void setReadArchiveOnly(int c) { m_readArchiveOnly = c; Q_EMIT readArchiveOnlyChanged(); } Q_PROPERTY(int includeFilesInSubFolders READ getIncludeFilesInSubFolders WRITE setIncludeFilesInSubFolders NOTIFY includeFilesInSubFoldersChanged) int getIncludeFilesInSubFolders() { return m_includeFilesInSubFolders; } void setIncludeFilesInSubFolders(int c) { m_includeFilesInSubFolders = c; Q_EMIT includeFilesInSubFoldersChanged(); loadDelayMainView->start(); } Q_PROPERTY(QStringList defaultNameFilters READ getDefaultNameFilters WRITE setDefaultNameFilters NOTIFY defaultNameFiltersChanged) QStringList getDefaultNameFilters() { return m_defaultNameFilters; } void setDefaultNameFilters(QStringList val) { m_defaultNameFilters = val; Q_EMIT defaultNameFiltersChanged(); loadDelayMainView->start(); loadDelayFileDialog->start(); } Q_PROPERTY(QStringList nameFilters READ getNameFilters WRITE setNameFilters NOTIFY nameFiltersChanged) QStringList getNameFilters() { return m_nameFilters; } void setNameFilters(QStringList val) { m_nameFilters = val; Q_EMIT nameFiltersChanged(); loadDelayMainView->start(); loadDelayFileDialog->start(); } Q_PROPERTY(QStringList filenameFilters READ getFilenameFilters WRITE setFilenameFilters NOTIFY filenameFiltersChanged) QStringList getFilenameFilters() { return m_filenameFilters; } void setFilenameFilters(QStringList val) { m_filenameFilters = val; Q_EMIT filenameFiltersChanged(); loadDelayMainView->start(); loadDelayFileDialog->start(); } Q_PROPERTY(QStringList mimeTypeFilters READ getMimeTypeFilters WRITE setMimeTypeFilters NOTIFY mimeTypeFiltersChanged) QStringList getMimeTypeFilters() { return m_mimeTypeFilters; } void setMimeTypeFilters(QStringList val) { m_mimeTypeFilters = val; Q_EMIT mimeTypeFiltersChanged(); loadDelayMainView->start(); loadDelayFileDialog->start(); } Q_PROPERTY(bool showHidden READ getShowHidden WRITE setShowHidden NOTIFY showHiddenChanged) bool getShowHidden() { return m_showHidden; } void setShowHidden(bool val) { m_showHidden = val; Q_EMIT showHiddenChanged(); loadDelayMainView->start(); loadDelayFileDialog->start(); } Q_PROPERTY(SortBy sortField READ getSortField WRITE setSortField NOTIFY sortFieldChanged) SortBy getSortField() { return m_sortField; } void setSortField(SortBy val) { m_sortField = val; Q_EMIT sortFieldChanged(); loadDelayMainView->start(); loadDelayFileDialog->start(); } Q_PROPERTY(bool sortReversed READ getSortReversed WRITE setSortReversed NOTIFY sortReversedChanged) bool getSortReversed() { return m_sortReversed; } void setSortReversed(bool val) { m_sortReversed = val; Q_EMIT sortReversedChanged(); loadDelayMainView->start(); loadDelayFileDialog->start(); } Q_PROPERTY(QStringList entriesFileDialog READ getEntriesFileDialog NOTIFY entriesFileDialogChanged) QStringList getEntriesFileDialog() { return m_entriesFileDialog; } Q_PROPERTY(QStringList entriesMainView READ getEntriesMainView NOTIFY entriesMainViewChanged) QStringList getEntriesMainView() { return m_entriesMainView; } Q_INVOKABLE void removeEntryMainView(int index); Q_INVOKABLE int getIndexOfMainView(QString filepath) { for(int i = 0; i < m_entriesMainView.length(); ++i) { if(m_entriesMainView[i] == filepath) return i; } return -1; } Q_INVOKABLE void forceReloadMainView() { loadDelayMainView->stop(); loadDataMainView(); } private: PQFileFolderModelCache cache; QFileSystemWatcher *watcherMainView; QFileSystemWatcher *watcherFileDialog; QString m_fileInFolderMainView; QString m_folderFileDialog; int m_countMainView; int m_countFoldersFileDialog; int m_countFilesFileDialog; bool m_readDocumentOnly; bool m_readArchiveOnly; bool m_includeFilesInSubFolders; QStringList m_entriesMainView; QStringList m_entriesFileDialog; QStringList m_nameFilters; QStringList m_defaultNameFilters; QStringList m_filenameFilters; QStringList m_mimeTypeFilters; bool m_showHidden; SortBy m_sortField; bool m_sortReversed; QTimer *loadDelayMainView; QTimer *loadDelayFileDialog; QStringList getAllFolders(QString folder); QStringList getAllFiles(QString folder); QMimeDatabase db; QStringList listPDFPages(QString path); private Q_SLOTS: void loadDataMainView(); void loadDataFileDialog(); Q_SIGNALS: void newDataLoadedMainView(); void newDataLoadedFileDialog(); void countMainViewChanged(); void countFileDialogChanged(); void entriesMainViewChanged(); void entriesFileDialogChanged(); void fileInFolderMainViewChanged(); void folderFileDialogChanged(); void nameFiltersChanged(); void defaultNameFiltersChanged(); void filenameFiltersChanged(); void mimeTypeFiltersChanged(); void showHiddenChanged(); void sortFieldChanged(); void sortReversedChanged(); void readDocumentOnlyChanged(); void readArchiveOnlyChanged(); void includeFilesInSubFoldersChanged(); }; #endif photoqt-2.5/cplusplus/filefoldermodel/filefoldermodelcache.h000644 001750 001750 00000011700 14164671125 025075 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQFILEFOLDERMODELCACHE_H #define PQFILEFOLDERMODELCACHE_H #include #include #include "../logger.h" class PQFileFolderModelCache : public QObject { Q_OBJECT public: PQFileFolderModelCache() { cacheFiles.clear(); cacheFolders.clear(); } bool loadFilesFromCache(QString foldername, bool showHidden, int sortFlags, QStringList defaultNameFilters, QStringList nameFilters, QStringList filenameFileters, QStringList mimeTypeFilters, int sortField, bool sortReversed, QStringList &entriesFiles) { const QString key = getUniqueCacheKey(foldername, showHidden, sortFlags, defaultNameFilters, nameFilters, filenameFileters, mimeTypeFilters, sortField, sortReversed); if(cacheFiles.contains(key)) { entriesFiles = cacheFiles.value(key); return true; } return false; } bool loadFoldersFromCache(QString foldername, bool showHidden, int sortFlags, QStringList defaultNameFilters, QStringList nameFilters, QStringList filenameFileters, QStringList mimeTypeFilters, int sortField, bool sortReversed, QStringList &entriesFolders) { const QString key = getUniqueCacheKey(foldername, showHidden, sortFlags, defaultNameFilters, nameFilters, filenameFileters, mimeTypeFilters, sortField, sortReversed); if(cacheFiles.contains(key)) { entriesFolders = cacheFolders.value(key); return true; } return false; } void saveFilesToCache(QString foldername, bool showHidden, int sortFlags, QStringList defaultNameFilters, QStringList nameFilters, QStringList filenameFileters, QStringList mimeTypeFilters, int sortField, bool sortReversed, QStringList &entriesFiles) { const QString key = getUniqueCacheKey(foldername, showHidden, sortFlags, defaultNameFilters, nameFilters, filenameFileters, mimeTypeFilters, sortField, sortReversed); cacheFiles.insert(key, entriesFiles); } void saveFoldersToCache(QString foldername, bool showHidden, int sortFlags, QStringList defaultNameFilters, QStringList nameFilters, QStringList filenameFileters, QStringList mimeTypeFilters, int sortField, bool sortReversed, QStringList &entriesFolders) { const QString key = getUniqueCacheKey(foldername, showHidden, sortFlags, defaultNameFilters, nameFilters, filenameFileters, mimeTypeFilters, sortField, sortReversed); cacheFolders.insert(key, entriesFolders); } private: QString getUniqueCacheKey(QString foldername, bool showHidden, int sortFlags, QStringList defaultNameFilters, QStringList nameFilters, QStringList filenameFilters, QStringList mimeTypeFilters, int sortField, bool sortReversed) { QString key; QTextStream(&key) << foldername << showHidden << QFileInfo(foldername).lastModified().toMSecsSinceEpoch() << sortFlags << nameFilters.join("") << defaultNameFilters.join("") << filenameFilters.join("") << mimeTypeFilters.join("") << sortField << sortReversed; return QCryptographicHash::hash(key.toUtf8(),QCryptographicHash::Md5).toHex(); } QHash cacheFiles; QHash cacheFolders; }; #endif // PQFILEFOLDERMODELCACHE_H photoqt-2.5/cplusplus/filefoldermodel/filefoldermodelcache.cpp000644 001750 001750 00000003312 14164671130 025424 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "filefoldermodelcache.h" PQFileFolderModelCache::PQFileFolderModelCache() { cacheFiles.clear(); cacheFolders.clear(); } photoqt-2.5/cplusplus/filefoldermodel/filefoldermodel.cpp000644 001750 001750 00000034132 14164671140 024445 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "filefoldermodel.h" PQFileFolderModel::PQFileFolderModel(QObject *parent) : QObject(parent) { m_fileInFolderMainView = ""; m_folderFileDialog = ""; m_countMainView = 0; m_countFoldersFileDialog = 0; m_countFilesFileDialog = 0; m_readDocumentOnly = false; m_readArchiveOnly = false; m_includeFilesInSubFolders = false; m_entriesMainView.clear(); m_entriesFileDialog.clear(); m_nameFilters = QStringList(); m_defaultNameFilters = QStringList(); m_filenameFilters = QStringList(); m_mimeTypeFilters = QStringList(); m_showHidden = false; m_sortField = SortBy::NaturalName; m_sortReversed = false; watcherMainView = new QFileSystemWatcher; watcherFileDialog = new QFileSystemWatcher; connect(watcherMainView, &QFileSystemWatcher::directoryChanged, this, &PQFileFolderModel::loadDataMainView); connect(watcherFileDialog, &QFileSystemWatcher::directoryChanged, this, &PQFileFolderModel::loadDataFileDialog); loadDelayMainView = new QTimer; loadDelayMainView->setInterval(10); loadDelayMainView->setSingleShot(true); connect(loadDelayMainView, &QTimer::timeout, this, &PQFileFolderModel::loadDataMainView); loadDelayFileDialog = new QTimer; loadDelayFileDialog->setInterval(10); loadDelayFileDialog->setSingleShot(true); connect(loadDelayFileDialog, &QTimer::timeout, this, &PQFileFolderModel::loadDataFileDialog); } PQFileFolderModel::~PQFileFolderModel() { delete loadDelayMainView; delete loadDelayFileDialog; delete watcherMainView; delete watcherFileDialog; } void PQFileFolderModel::loadDataMainView() { DBG << CURDATE << "PQFileFolderModel::loadDataMainView()" << NL; //////////////////////// // clear old entries m_entriesMainView.clear(); m_countMainView = 0; delete watcherMainView; watcherMainView = new QFileSystemWatcher; //////////////////////// // no new directory if(m_fileInFolderMainView.isEmpty()) { Q_EMIT newDataLoadedMainView(); Q_EMIT countMainViewChanged(); return; } //////////////////////// // watch directory for changes watcherMainView->addPath(QFileInfo(m_fileInFolderMainView).absolutePath()); connect(watcherMainView, &QFileSystemWatcher::directoryChanged, this, &PQFileFolderModel::loadDataMainView); //////////////////////// // load files if(m_fileInFolderMainView.contains("::PQT::")) { m_readDocumentOnly = true; m_fileInFolderMainView = m_fileInFolderMainView.split("::PQT::").at(1); } else if(m_fileInFolderMainView.contains("::ARC::")) { m_readArchiveOnly = true; m_fileInFolderMainView = m_fileInFolderMainView.split("::ARC::").at(1); } if(m_readDocumentOnly && PQImageFormats::get().getEnabledFormatsPoppler().contains(QFileInfo(m_fileInFolderMainView).suffix().toLower())) { m_entriesMainView = listPDFPages(m_fileInFolderMainView); m_countMainView = m_entriesMainView.length(); m_readDocumentOnly = false; } else if(m_readArchiveOnly && PQImageFormats::get().getEnabledFormatsLibArchive().contains(QFileInfo(m_fileInFolderMainView).suffix().toLower())) { PQHandlingFileDir handling; m_entriesMainView = handling.listArchiveContent(m_fileInFolderMainView); m_countMainView = m_entriesMainView.length(); m_readArchiveOnly = false; } else { m_entriesMainView = getAllFiles(QFileInfo(m_fileInFolderMainView).absolutePath()); m_countMainView = m_entriesMainView.length(); } Q_EMIT newDataLoadedMainView(); Q_EMIT countMainViewChanged(); } void PQFileFolderModel::loadDataFileDialog() { DBG << CURDATE << "PQFileFolderModel::loadData()" << NL; //////////////////////// // clear old entries m_entriesFileDialog.clear(); m_countFoldersFileDialog = 0; m_countFilesFileDialog = 0; delete watcherFileDialog; watcherFileDialog = new QFileSystemWatcher; //////////////////////// // no new directory if(m_folderFileDialog.isEmpty()) { Q_EMIT newDataLoadedFileDialog(); Q_EMIT countFileDialogChanged(); return; } //////////////////////// // watch directory for changes watcherFileDialog->addPath(m_folderFileDialog); connect(watcherFileDialog, &QFileSystemWatcher::directoryChanged, this, &PQFileFolderModel::loadDataFileDialog); //////////////////////// // load folders m_entriesFileDialog = getAllFolders(m_folderFileDialog); m_countFoldersFileDialog = m_entriesFileDialog.length(); //////////////////////// // load files m_entriesFileDialog.append(getAllFiles(m_folderFileDialog)); m_countFilesFileDialog = m_entriesFileDialog.length()-m_countFoldersFileDialog; Q_EMIT newDataLoadedFileDialog(); Q_EMIT countFileDialogChanged(); } QStringList PQFileFolderModel::getAllFolders(QString folder) { DBG << CURDATE << "PQFileFolderModel::getAllFolders()" << NL << CURDATE << "** folder = " << folder.toStdString() << NL; QStringList ret; QDir::SortFlags sortFlags = QDir::IgnoreCase; if(m_sortReversed) sortFlags |= QDir::Reversed; if(m_sortField == SortBy::Name) sortFlags |= QDir::Name; else if(m_sortField == SortBy::Time) sortFlags |= QDir::Time; else if(m_sortField == SortBy::Size) sortFlags |= QDir::Size; else if(m_sortField == SortBy::Type) sortFlags |= QDir::Type; if(!cache.loadFoldersFromCache(folder, m_showHidden, sortFlags, m_defaultNameFilters, m_nameFilters, m_filenameFilters, m_mimeTypeFilters, m_sortField, m_sortReversed, ret)) { QDir dir(folder); if(!dir.exists()) { LOG << CURDATE << "ERROR: Folder location does not exist: " << folder.toStdString() << NL; return ret; } if(m_showHidden) dir.setFilter(QDir::Dirs|QDir::NoDotAndDotDot|QDir::Hidden); else dir.setFilter(QDir::Dirs|QDir::NoDotAndDotDot); if(m_sortField != SortBy::NaturalName) dir.setSorting(sortFlags); QDirIterator iter(dir); while(iter.hasNext()) { iter.next(); ret << iter.filePath(); } if(m_sortField == SortBy::NaturalName) { QCollator collator; collator.setNumericMode(true); if(m_sortReversed) std::sort(ret.begin(), ret.end(), [&collator](const QString &file1, const QString &file2) { return collator.compare(file2, file1) < 0; }); else std::sort(ret.begin(), ret.end(), [&collator](const QString &file1, const QString &file2) { return collator.compare(file1, file2) < 0; }); } cache.saveFoldersToCache(folder, m_showHidden, sortFlags, m_defaultNameFilters, m_nameFilters, m_filenameFilters, m_mimeTypeFilters, m_sortField, m_sortReversed, ret); } return ret; } QStringList PQFileFolderModel::getAllFiles(QString folder) { DBG << CURDATE << "PQFileFolderModel::getAllFiles()" << NL << CURDATE << "** folder = " << folder.toStdString() << NL; QStringList ret; QDir::SortFlags sortFlags = QDir::IgnoreCase; if(m_sortReversed) sortFlags |= QDir::Reversed; if(m_sortField == SortBy::Name) sortFlags |= QDir::Name; else if(m_sortField == SortBy::Time) sortFlags |= QDir::Time; else if(m_sortField == SortBy::Size) sortFlags |= QDir::Size; else if(m_sortField == SortBy::Type) sortFlags |= QDir::Type; // In order to properly sort the resulting list (sorting by directory first and by chosen sorting criteria second (on a per-directory basis) // we need to consider each directory on its own before adding it to the resulting list at the end QStringList foldersToScan; foldersToScan << folder; if(m_includeFilesInSubFolders) { QDirIterator iter(folder, QDir::Dirs|QDir::NoDotAndDotDot, QDirIterator::Subdirectories); int count = 0; while(iter.hasNext()) { iter.next(); foldersToScan << iter.filePath(); // we limit the number of subfolders to avoid getting stuck ++count; if(count > 100) break; } } for(const QString &f : qAsConst(foldersToScan)) { if(!cache.loadFilesFromCache(f, m_showHidden, sortFlags, m_defaultNameFilters, m_nameFilters, m_filenameFilters, m_mimeTypeFilters, m_sortField, m_sortReversed, ret)) { QStringList ret_cur; QDir dir(f); if(!dir.exists()) { LOG << CURDATE << "ERROR: Folder location does not exist: " << f.toStdString() << NL; continue; } if(m_showHidden) dir.setFilter(QDir::Files|QDir::NoDotAndDotDot|QDir::Hidden); else dir.setFilter(QDir::Files|QDir::NoDotAndDotDot); if(m_sortField != SortBy::NaturalName) dir.setSorting(sortFlags); if(m_nameFilters.size() == 0 && m_defaultNameFilters.size() == 0 && m_mimeTypeFilters.size() == 0) { QDirIterator iter(dir); while(iter.hasNext()) { iter.next(); ret_cur << iter.filePath(); } } else { QDirIterator iter(dir); while(iter.hasNext()) { iter.next(); const QFileInfo f = iter.fileInfo(); if((m_nameFilters.size() == 0 || m_nameFilters.contains(f.suffix().toLower())) && (m_defaultNameFilters.size() == 0 || m_defaultNameFilters.contains(f.suffix().toLower()))) { if(m_filenameFilters.length() == 0) ret_cur << f.absoluteFilePath(); else { for(const QString &fil : qAsConst(m_filenameFilters)) { if(f.baseName().contains(fil)) { ret_cur << f.absoluteFilePath(); break; } } } } // if not the ending, then check the mime type else if(m_nameFilters.size() == 0 && m_mimeTypeFilters.contains(db.mimeTypeForFile(f.absoluteFilePath()).name())) { if(m_filenameFilters.length() == 0) ret_cur << f.absoluteFilePath(); else { for(const QString &fil : qAsConst(m_filenameFilters)) { if(f.baseName().contains(fil)) { ret_cur << f.absoluteFilePath(); break; } } } } } } if(m_sortField == SortBy::NaturalName) { QCollator collator; collator.setNumericMode(true); if(m_sortReversed) std::sort(ret_cur.begin(), ret_cur.end(), [&collator](const QString &file1, const QString &file2) { return collator.compare(file2, file1) < 0; }); else std::sort(ret_cur.begin(), ret_cur.end(), [&collator](const QString &file1, const QString &file2) { return collator.compare(file1, file2) < 0; }); } // add current list, sorted, to global result list ret << ret_cur; cache.saveFilesToCache(f, m_showHidden, sortFlags, m_defaultNameFilters, m_nameFilters, m_filenameFilters, m_mimeTypeFilters, m_sortField, m_sortReversed, ret_cur); } } return ret; } QStringList PQFileFolderModel::listPDFPages(QString path) { DBG << CURDATE << "PQFileFolderModel::listPDFPages()" << NL << CURDATE << "** path = " << path.toStdString() << NL; QStringList ret; #ifdef POPPLER Poppler::Document* document = Poppler::Document::load(path); if(document && !document->isLocked()) { int numPages = document->numPages(); for(int i = 0; i < numPages; ++i) ret.append(QString("%1::PQT::%2").arg(i).arg(path)); } delete document; #endif return ret; } void PQFileFolderModel::removeEntryMainView(int index) { DBG << CURDATE << "PQFileFolderModel::removeEntryMainView()" << NL << CURDATE << "** index = " << index << NL; loadDelayFileDialog->start(); m_entriesMainView.removeAt(index); setCountMainView(m_countMainView-1); Q_EMIT newDataLoadedMainView(); Q_EMIT newDataLoadedFileDialog(); } photoqt-2.5/cplusplus/logger.h000644 001750 001750 00000012254 14164671424 017107 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQLOG_H #define PQLOG_H #include #include #include #include #include #include #include #include "configfiles.h" /***************************************************************/ // Combined log/debug messages class PQLogDebugMessage : public QObject { Q_OBJECT public: static PQLogDebugMessage& get() { static PQLogDebugMessage instance; return instance; } PQLogDebugMessage(PQLogDebugMessage const&) = delete; void operator=(PQLogDebugMessage const&) = delete; Q_INVOKABLE QString getMessage() { return debugMessage; } Q_INVOKABLE void addMessage(QString msg) { debugMessage.append(msg); } Q_SIGNALS: void debugMessageChanged(); private: PQLogDebugMessage() { debugMessage = ""; } QString debugMessage; }; /***************************************************************/ // LOGGER class PQLog : public QObject { Q_OBJECT public: static PQLog& get() { static PQLog instance; return instance; } PQLog(PQLog const&) = delete; void operator=(PQLog const&) = delete; template PQLog &operator<<(const T &v) { std::stringstream str; str << v; if(str.str() == "[[[DATE]]]") { std::stringstream ss; ss << "[" << QDateTime::currentDateTime().toString("dd/MM/yyyy HH:mm:ss:zzz").toStdString() << "] "; std::clog << ss.str(); PQLogDebugMessage::get().addMessage(ss.str().c_str()); } else { std::clog << v; PQLogDebugMessage::get().addMessage(str.str().c_str()); } return *this; } PQLog &operator<<(std::ostream&(*f)(std::ostream&)) { std::stringstream ss; ss << f; PQLogDebugMessage::get().addMessage(ss.str().c_str()); std::clog << f; return *this; } private: PQLog() { } }; /***************************************************************/ // DEBUG LOGGER class PQDebugLog : public QObject { Q_OBJECT public: static PQDebugLog& get() { static PQDebugLog instance; return instance; } PQDebugLog(PQDebugLog const&) = delete; void operator=(PQDebugLog const&) = delete; template PQDebugLog &operator<<(const T &v) { if(!m_debug) return *this; std::stringstream str; str << v; if(str.str() == "[[[DATE]]]") { std::stringstream ss; ss << "[" << QDateTime::currentDateTime().toString("dd/MM/yyyy HH:mm:ss:zzz").toStdString() << "] "; std::clog << ss.str(); PQLogDebugMessage::get().addMessage(ss.str().c_str()); } else { std::clog << v; PQLogDebugMessage::get().addMessage(str.str().c_str()); } return *this; } PQDebugLog &operator<<(std::ostream&(*f)(std::ostream&)) { if(!m_debug) return *this; std::stringstream ss; ss << f; PQLogDebugMessage::get().addMessage(ss.str().c_str()); std::clog << f; return *this; } Q_PROPERTY(bool debug READ getDebug WRITE setDebug NOTIFY debugChanged) bool getDebug() { return m_debug; } void setDebug(bool val) { if(val != m_debug) { m_debug = val; Q_EMIT debugChanged(); } } Q_SIGNALS: void debugChanged(); private: PQDebugLog() { m_debug = false; } bool m_debug; }; #define LOG PQLog::get() #define DBG PQDebugLog::get() #define CURDATE "[[[DATE]]]" #define NL "\n" #endif // PQLOG_H photoqt-2.5/cplusplus/startup/000755 001750 001750 00000000000 14165361343 017152 5ustar00luspiluspi000000 000000 photoqt-2.5/cplusplus/startup/validate.cpp000644 001750 001750 00000030360 14164671412 021451 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "validate.h" PQValidate::PQValidate(QObject *parent) : QObject(parent) { } bool PQValidate::validate() { LOG << NL << "PhotoQt v" << VERSION << NL << " > Validating configuration... " << NL; bool ret = validateSettingsDatabase(); if(!ret) { LOG << " >> Failed!" << NL << NL; return false; } ret = validateShortcutsDatabase(); if(!ret) { LOG << " >> Failed!" << NL << NL; return false; } LOG << " >> Done!" << NL << NL; return true; } bool PQValidate::validateSettingsDatabase() { // first we check all the settings // we do so automatically by loading the default settings database and check that all items there are present in the actual one QSqlDatabase dbinstalled = QSqlDatabase::database("settings"); QSqlDatabase dbdefault; if(QSqlDatabase::isDriverAvailable("QSQLITE3")) dbdefault = QSqlDatabase::addDatabase("QSQLITE3", "settingsdefault"); else if(QSqlDatabase::isDriverAvailable("QSQLITE")) dbdefault = QSqlDatabase::addDatabase("QSQLITE", "settingsdefault"); else { LOG << CURDATE << "PQValidate::validateSettingsDatabase(): ERROR: SQLite driver not available. Available drivers are: " << QSqlDatabase::drivers().join(",").toStdString() << NL; LOG << CURDATE << "PQValidate::validateSettingsDatabase(): PhotoQt cannot function without SQLite available." << NL; return false; } // open database QFile::remove(QDir::tempPath()+"/photoqt_tmp.db"); QFile::copy(":/settings.db", QDir::tempPath()+"/photoqt_tmp.db"); dbdefault.setDatabaseName(QDir::tempPath()+"/photoqt_tmp.db"); if(!dbdefault.open()) LOG << CURDATE << "PQValidate::validateSettingsDatabase(): Error opening default database: " << dbdefault.lastError().text().trimmed().toStdString() << NL; // read the list of all tables from the default database QStringList tables; QSqlQuery queryTables("SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%' ORDER BY 1;", dbdefault); if(!queryTables.exec()) { LOG << CURDATE << "PQValidate::validateSettingsDatabase(): Error getting list of tables: " << queryTables.lastError().text().trimmed().toStdString() << NL; queryTables.clear(); QFile::remove(QDir::tempPath()+"/photoqt_tmp.db"); return false; } // iterate over all tables while(queryTables.next()) tables << queryTables.value(0).toString(); queryTables.clear(); QSqlQuery query(dbdefault); for(const auto &table : qAsConst(tables)) { // get reference data query.prepare(QString("SELECT name,value,defaultvalue,datatype FROM '%1'").arg(table)); if(!query.exec()) { LOG << CURDATE << "PQValidate::validateSettingsDatabase(): Error getting default data: " << query.lastError().text().trimmed().toStdString() << NL; query.clear(); QFile::remove(QDir::tempPath()+"/photoqt_tmp.db"); return false; } // loop over reference data while(query.next()) { const QString name = query.value(0).toString(); const QString value = query.value(1).toString(); const QString defaultvalue = query.value(2).toString(); const QString datatype = query.value(3).toString(); // check whether an entry with that name exists in the in-production database QSqlQuery check(dbinstalled); check.prepare(QString("SELECT count(name) FROM %1 WHERE name=:name").arg(table)); check.bindValue(":name", name); if(!check.exec()) { LOG << CURDATE << "PQValidate::validateSettingsDatabase(): Error checking entry: " << name.toStdString() << ": " << check.lastError().text().trimmed().toStdString() << NL; continue; } check.next(); int count = check.value(0).toInt(); check.clear(); // if entry does not exist, add it if(count == 0) { QSqlQuery insquery(dbinstalled); insquery.prepare(QString("INSERT INTO %1 (name,value,defaultvalue,datatype) VALUES(:nam,:val,:def,:dat)").arg(table)); insquery.bindValue(":nam", name); insquery.bindValue(":val", value); insquery.bindValue(":def", defaultvalue); insquery.bindValue(":dat", datatype); if(!insquery.exec()) { LOG << CURDATE << "PQValidate::validateSettingsDatabase(): ERROR inserting missing entry " << table.toStdString() << "/" << name.toStdString() << ": " << insquery.lastError().text().trimmed().toStdString() << NL; continue; } // if entry does exist, make sure defaultvalue and datatype is valid } else { QSqlQuery check(dbinstalled); check.prepare(QString("UPDATE %1 SET defaultvalue=:def,datatype=:dat WHERE name=:nam").arg(table)); check.bindValue(":def", defaultvalue); check.bindValue(":dat", datatype); check.bindValue(":nam", name); if(!check.exec()) { LOG << CURDATE << "PQValidate::validateSettingsDatabase(): Error updating defaultvalue and datatype: " << name.toStdString() << ": " << check.lastError().text().trimmed().toStdString() << NL; continue; } check.clear(); } } query.clear(); } QFile::remove(QDir::tempPath()+"/photoqt_tmp.db"); return true; } bool PQValidate::validateShortcutsDatabase() { QSqlDatabase dbinstalled = QSqlDatabase::database("shortcuts"); QSqlDatabase dbdefault; if(QSqlDatabase::isDriverAvailable("QSQLITE3")) dbdefault = QSqlDatabase::addDatabase("QSQLITE3", "shortcutsdefault"); else if(QSqlDatabase::isDriverAvailable("QSQLITE")) dbdefault = QSqlDatabase::addDatabase("QSQLITE", "shortcutsdefault"); else { LOG << CURDATE << "PQValidate::validateShortcutsDatabase(): ERROR: SQLite driver not available. Available drivers are: " << QSqlDatabase::drivers().join(",").toStdString() << NL; LOG << CURDATE << "PQValidate::validateShortcutsDatabase(): PhotoQt cannot function without SQLite available." << NL; return false; } // open database QFile::remove(QDir::tempPath()+"/photoqt_tmp.db"); QFile::copy(":/shortcuts.db", QDir::tempPath()+"/photoqt_tmp.db"); dbdefault.setDatabaseName(QDir::tempPath()+"/photoqt_tmp.db"); if(!dbdefault.open()) LOG << CURDATE << "PQValidate::validateShortcutsDatabase(): Error opening default database: " << dbdefault.lastError().text().trimmed().toStdString() << NL; QSqlQuery query(dbdefault); // get reference data query.prepare("SELECT category,command,shortcuts,defaultshortcuts FROM 'builtin'"); if(!query.exec()) { LOG << CURDATE << "PQValidate::validateShortcutsDatabase(): Error getting default data: " << query.lastError().text().trimmed().toStdString() << NL; query.clear(); QFile::remove(QDir::tempPath()+"/photoqt_tmp.db"); return false; } // loop over reference data while(query.next()) { const QString category = query.value(0).toString(); const QString command = query.value(1).toString(); QString shortcuts = query.value(2).toString(); const QString defaultshortcuts = query.value(3).toString(); // check whether an entry with that name exists in the in-production database QSqlQuery check(dbinstalled); check.prepare("SELECT count(category) FROM builtin WHERE command=:command"); check.bindValue(":command", command); if(!check.exec()) { LOG << CURDATE << "PQValidate::validateShortcutsDatabase(): Error checking entry: " << command.toStdString() << ": " << check.lastError().text().trimmed().toStdString() << NL; continue; } check.next(); int count = check.value(0).toInt(); check.clear(); // if there are multiples, we first get and store the possible desired value and then remove all of them if(count > 1) { QSqlQuery rem(dbinstalled); rem.prepare("SELECT shortcuts FROM builtin WHERE command=:cmd AND shortcuts!=''"); rem.bindValue(":cmd", command); if(!rem.exec()) { LOG << CURDATE << "PQValidate::validateShortcutsDatabase(): ERROR getting value of multiples " << command.toStdString() << ": " << rem.lastError().text().trimmed().toStdString() << NL; continue; } if(rem.next()) shortcuts = rem.value(0).toString(); else shortcuts = ""; rem.clear(); rem.prepare("DELETE FROM builtin WHERE command=:cmd"); rem.bindValue(":cmd", command); if(!rem.exec()) { LOG << CURDATE << "PQValidate::validateShortcutsDatabase(): ERROR removing multiples " << command.toStdString() << ": " << rem.lastError().text().trimmed().toStdString() << NL; continue; } rem.clear(); count = 0; } // if entry does not exist, add it if(count == 0) { QSqlQuery insquery(dbinstalled); insquery.prepare("INSERT INTO builtin (category,command,shortcuts,defaultshortcuts) VALUES(:cat,:cmd,:sh,:def)"); insquery.bindValue(":cat", category); insquery.bindValue(":cmd", command); insquery.bindValue(":sh", shortcuts); insquery.bindValue(":def", defaultshortcuts); if(!insquery.exec()) { LOG << CURDATE << "PQValidate::validateShortcutsDatabase(): ERROR inserting missing entry " << command.toStdString() << ": " << insquery.lastError().text().trimmed().toStdString() << NL; continue; } // if entry does exist, make sure category and defaultshortcuts is valid } else { QSqlQuery check(dbinstalled); check.prepare("UPDATE builtin SET category=:cat,defaultshortcuts=:def WHERE command=:cmd"); check.bindValue(":cat", category); check.bindValue(":def", defaultshortcuts); check.bindValue(":cmd", command); if(!check.exec()) { LOG << CURDATE << "PQValidate::validateShortcutsDatabase(): Error updating defaultvalue and datatype: " << command.toStdString() << ": " << check.lastError().text().trimmed().toStdString() << NL; continue; } check.clear(); } } query.clear(); QFile::remove(QDir::tempPath()+"/photoqt_tmp.db"); return true; } photoqt-2.5/cplusplus/startup/startup.h000644 001750 001750 00000004730 14164671417 021036 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQSTARTUP_H #define PQSTARTUP_H #include #include #include #include #include "../scripts/handlingexternal.h" #include "../scripts/handlinggeneral.h" #include "../settings/shortcuts.h" #include "../configfiles.h" #include "../logger.h" #include "../settings/imageformats.h" class PQStartup : public QObject { Q_OBJECT public: PQStartup(QObject *parent = nullptr); // 0: no update // 1: update // 2: fresh install int check(bool onlyCreateDatabase = false); Q_INVOKABLE void setupFresh(int defaultPopout); Q_INVOKABLE void performChecksAndMigrations(); void exportData(QString path); void importData(QString path); void resetToDefaults(); bool migrateContextmenuToDb(); bool migrateSettingsToDb(); bool migrateShortcutsToDb(); private: bool checkIfBinaryExists(QString exec); }; #endif // PQSTARTUP_H photoqt-2.5/cplusplus/startup/startup.cpp000644 001750 001750 00000134667 14165361343 021401 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "startup.h" PQStartup::PQStartup(QObject *parent) : QObject(parent) { } // 0: no update // 1: update // 2: fresh install int PQStartup::check(bool onlyCreateDatabase) { QSqlDatabase db_settings; QSqlDatabase db_shortcuts; QSqlDatabase db_context; QSqlDatabase db_imageformats; // check if sqlite is available // this is a hard requirement now and we wont launch PhotoQt without it if(QSqlDatabase::isDriverAvailable("QSQLITE3")) { db_settings = QSqlDatabase::addDatabase("QSQLITE3", "settings"); db_shortcuts = QSqlDatabase::addDatabase("QSQLITE3", "shortcuts"); db_context = QSqlDatabase::addDatabase("QSQLITE3", "contextmenu"); db_imageformats = QSqlDatabase::addDatabase("QSQLITE3", "imageformats"); } else if(QSqlDatabase::isDriverAvailable("QSQLITE")) { db_settings = QSqlDatabase::addDatabase("QSQLITE", "settings"); db_shortcuts = QSqlDatabase::addDatabase("QSQLITE", "shortcuts"); db_context = QSqlDatabase::addDatabase("QSQLITE", "contextmenu"); db_imageformats = QSqlDatabase::addDatabase("QSQLITE", "imageformats"); } else { LOG << CURDATE << "PQStartup::check(): ERROR: SQLite driver not available. Available drivers are: " << QSqlDatabase::drivers().join(",").toStdString() << NL; LOG << CURDATE << "PQStartup::check(): PhotoQt cannot function without SQLite available." << NL; //: This is the window title of an error message box QMessageBox::critical(0, QCoreApplication::translate("PQStartup", "SQLite error"), QCoreApplication::translate("PQStartup", "You seem to be missing the SQLite driver for Qt. This is needed though for a few different things, like reading and writing the settings. Without it, PhotoQt cannot function!")); std::exit(1); } // if no config files exist, then it is a fresh install if((!QFile::exists(ConfigFiles::SETTINGS_FILE()) && !QFile::exists(ConfigFiles::SETTINGS_DB())) || !QFile::exists(ConfigFiles::IMAGEFORMATS_DB()) || (!QFile::exists(ConfigFiles::SHORTCUTS_FILE()) && !QFile::exists(ConfigFiles::SHORTCUTS_DB()))) { db_settings.setDatabaseName(ConfigFiles::SETTINGS_DB()); db_shortcuts.setDatabaseName(ConfigFiles::SHORTCUTS_DB()); db_context.setDatabaseName(ConfigFiles::CONTEXTMENU_DB()); db_imageformats.setDatabaseName(ConfigFiles::IMAGEFORMATS_DB()); return 2; } db_settings.setDatabaseName(ConfigFiles::SETTINGS_DB()); db_shortcuts.setDatabaseName(ConfigFiles::SHORTCUTS_DB()); db_context.setDatabaseName(ConfigFiles::CONTEXTMENU_DB()); db_imageformats.setDatabaseName(ConfigFiles::IMAGEFORMATS_DB()); /******************************************************************************************************/ // If we perform an action like export/import/check/... we need access to the db but no more than that if(onlyCreateDatabase) return 0; // 2.4 and older used a settings and shortcuts file // 2.5 and later uses a settings and shortcuts database if((QFile::exists(ConfigFiles::SETTINGS_FILE()) && !QFile::exists(ConfigFiles::SETTINGS_DB())) || (QFile::exists(ConfigFiles::SHORTCUTS_FILE()) && !QFile::exists(ConfigFiles::SHORTCUTS_DB()))) return 1; // open database if(!db_settings.open()) LOG << CURDATE << "PQStartup::check(): Error opening database: " << db_settings.lastError().text().trimmed().toStdString() << NL; // compare version string in database to current version string QSqlQuery query(db_settings); if(!query.exec("SELECT `value` from `general` where `name`='Version'")) LOG << CURDATE << "PQStartup::check(): SQL query error: " << query.lastError().text().trimmed().toStdString() << NL; query.next(); // last time a dev version was run QString version = query.record().value(0).toString(); query.clear(); if(version == "dev") { // update stored version string query.prepare("UPDATE general SET value=:val WHERE name='Version'"); query.bindValue(":val", VERSION); if(!query.exec()) LOG << CURDATE << "PQStartup::check(): Unable to update version string..." << NL; return 3; } // updated if(version != QString(VERSION)) { // update stored version string query.prepare("UPDATE general SET value=:val WHERE name='Version'"); query.bindValue(":val", VERSION); if(!query.exec()) LOG << CURDATE << "PQStartup::check(): Unable to update version string..." << NL; return 1; } // nothing happened return 0; } void PQStartup::exportData(QString path) { LOG << NL << "PhotoQt v" << VERSION << NL << " > Exporting configuration to " << path.toStdString() << "... " << NL; if(PQHandlingExternal::exportConfigTo(path)) std::cout << " >> Done!" << NL << NL; else std::cout << " >> Failed!" << NL << NL; } void PQStartup::importData(QString path) { LOG << NL << "PhotoQt v" << VERSION << NL << " > Importing configuration from " << path.toStdString() << "... " << NL; if(PQHandlingExternal::importConfigFrom(path)) std::cout << " >> Done!" << NL << NL; else std::cout << " >> Failed!" << NL << NL; } bool PQStartup::checkIfBinaryExists(QString exec) { #ifdef Q_OS_WIN return false; #endif QProcess p; p.setStandardOutputFile(QProcess::nullDevice()); p.start("which", QStringList() << exec); p.waitForFinished(); return p.exitCode() == 0; } void PQStartup::setupFresh(int defaultPopout) { /**************************************************************/ // make sure necessary folder exist QDir dir; dir.mkpath(ConfigFiles::CONFIG_DIR()); dir.mkpath(ConfigFiles::GENERIC_DATA_DIR()); dir.mkpath(ConfigFiles::GENERIC_CACHE_DIR()); dir.mkpath(QString("%1/thumbnails/large/").arg(ConfigFiles::GENERIC_CACHE_DIR())); /**************************************************************/ // create default imageformats database if(!QFile::copy(":/imageformats.db", ConfigFiles::IMAGEFORMATS_DB())) LOG << CURDATE << "PQStartup::setupFresh(): unable to create default imageformats database" << NL; else { QFile file(ConfigFiles::IMAGEFORMATS_DB()); file.setPermissions(QFile::WriteOwner|QFile::ReadOwner|QFile::ReadGroup|QFile::ReadOther); } /**************************************************************/ // create default settings database if(!QFile::copy(":/settings.db", ConfigFiles::SETTINGS_DB())) LOG << CURDATE << "PQStartup::setupFresh(): unable to create settings database" << NL; else { QFile file(ConfigFiles::SETTINGS_DB()); file.setPermissions(QFile::WriteOwner|QFile::ReadOwner|QFile::ReadGroup|QFile::ReadOther); } PQSettings::get().update("generalVersion", VERSION); // record popout selection // default is all integrated (defaultPopout == 0) if(defaultPopout == 1) { // some integrated, some individual PQSettings::get().update("interfacePopoutScale", true); PQSettings::get().update("interfacePopoutOpenFile", true); PQSettings::get().update("interfacePopoutSlideShowSettings", true); PQSettings::get().update("interfacePopoutSlideShowControls", true); PQSettings::get().update("interfacePopoutImgur", true); PQSettings::get().update("interfacePopoutWallpaper", true); PQSettings::get().update("interfacePopoutSettingsManager", true); } else if(defaultPopout == 2) { // all individual PQSettings::get().update("interfacePopoutMainMenu", true); PQSettings::get().update("interfacePopoutMetadata", true); PQSettings::get().update("interfacePopoutHistogram", true); PQSettings::get().update("interfacePopoutScale", true); PQSettings::get().update("interfacePopoutOpenFile", true); PQSettings::get().update("interfacePopoutOpenFileKeepOpen", true); PQSettings::get().update("interfacePopoutSlideShowSettings", true); PQSettings::get().update("interfacePopoutSlideShowControls", true); PQSettings::get().update("interfacePopoutFileRename", true); PQSettings::get().update("interfacePopoutFileDelete", true); PQSettings::get().update("interfacePopoutAbout", true); PQSettings::get().update("interfacePopoutImgur", true); PQSettings::get().update("interfacePopoutWallpaper", true); PQSettings::get().update("interfacePopoutFilter", true); PQSettings::get().update("interfacePopoutSettingsManager", true); PQSettings::get().update("interfacePopoutFileSaveAs", true); PQSettings::get().update("interfacePopoutUnavailable", true); } /**************************************************************/ // create default shortcuts database if(!QFile::copy(":/shortcuts.db", ConfigFiles::SHORTCUTS_DB())) LOG << CURDATE << "PQStartup::Settings: unable to create shortcuts database" << NL; else { QFile file(ConfigFiles::SHORTCUTS_DB()); file.setPermissions(QFile::WriteOwner|QFile::ReadOwner|QFile::ReadGroup|QFile::ReadOther); } #ifndef Q_OS_WIN /**************************************************************/ // create default contextmenu database if(!QFile::copy(":/contextmenu.db", ConfigFiles::CONTEXTMENU_DB())) LOG << CURDATE << "PQStartup::setupFresh(): unable to create default contextmenu database" << NL; else { QFile file(ConfigFiles::CONTEXTMENU_DB()); file.setPermissions(QFile::WriteOwner|QFile::ReadOwner|QFile::ReadGroup|QFile::ReadOther); } // These are the possible entries // There will be a ' %f' added at the end of each executable. QStringList m; //: Used as in 'Edit with [application]'. %1 will be replaced with application name. m << QApplication::translate("startup", "Edit with %1").arg("Gimp") << "gimp" //: Used as in 'Edit with [application]'. %1 will be replaced with application name. << QApplication::translate("startup", "Edit with %1").arg("Krita") << "krita" //: Used as in 'Edit with [application]'. %1 will be replaced with application name. << QApplication::translate("startup", "Edit with %1").arg("KolourPaint") << "kolourpaint" //: Used as in 'Open with [application]'. %1 will be replaced with application name. << QApplication::translate("startup", "Open in %1").arg("GwenView") << "gwenview" //: Used as in 'Open with [application]'. %1 will be replaced with application name. << QApplication::translate("startup", "Open in %1").arg("showFoto") << "showfoto" //: Used as in 'Open with [application]'. %1 will be replaced with application name. << QApplication::translate("startup", "Open in %1").arg("Shotwell") << "shotwell" //: Used as in 'Open with [application]'. %1 will be replaced with application name. << QApplication::translate("startup", "Open in %1").arg("GThumb") << "gthumb" //: Used as in 'Open with [application]'. %1 will be replaced with application name. << QApplication::translate("startup", "Open in %1").arg("Eye of Gnome") << "eog"; { QSqlDatabase db = QSqlDatabase::database("contextmenu"); if(!db.open()) LOG << CURDATE << "PQStartup::setupFresh(): Error opening contextmenu database: " << db.lastError().text().trimmed().toStdString() << NL; // Check for all entries for(int i = 0; i < m.size()/2; ++i) { if(checkIfBinaryExists(m[2*i+1])) { QSqlQuery query(db); query.prepare("INSERT INTO entries (command,desc,close) VALUES(:cmd,:dsc,:cls)"); query.bindValue(":cmd", m[2*i+1]+" %f"); query.bindValue(":dsc", m[2*i]); query.bindValue(":cls", "0"); if(!query.exec()) LOG << CURDATE << "PQStartup::setupFresh(): SQL error, contextmenu insert: " << query.lastError().text().trimmed().toStdString() << NL; } } } #endif /**************************************************************/ } void PQStartup::resetToDefaults() { LOG << NL << "PhotoQt v" << VERSION << NL << " > Resetting to default configuration... " << NL; PQHandlingGeneral general; general.setDefaultSettings(); PQShortcuts::get().setDefault(); LOG << " >> Done!" << NL << NL; } void PQStartup::performChecksAndMigrations() { /**************************************************************/ // remove version info from imageformats.db // the version info is managed through settings.db QSqlDatabase db = QSqlDatabase::database("imageformats"); if(!db.open()) LOG << CURDATE << "PQStartup::performChecksAndMigrations(): Error opening imageformats database: " << db.lastError().text().trimmed().toStdString() << NL; QSqlQuery query(db); if(!query.exec("DROP TABLE IF EXISTS info")) LOG << CURDATE << "PQStartup::performChecksAndMigrations(): SQL query error: " << query.lastError().text().trimmed().toStdString() << NL; query.next(); // attempt to enter new format if(PQImageFormats::get().enterNewFormat("jxl", "image/jxl", "JPEG XL", "img", 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", "jxl", true)) PQImageFormats::get().readDatabase(); /**************************************************************/ // migrate data migrateContextmenuToDb(); migrateShortcutsToDb(); migrateSettingsToDb(); PQSettings::get().update("generalVersion", VERSION); } /**************************************************************/ /**************************************************************/ // the following migration functions are below (in this order): // * migrateContextmenuToDb // * migrateShortcutsToDb() // * migrateSettingsToDb() bool PQStartup::migrateContextmenuToDb() { QFile file(ConfigFiles::CONTEXTMENU_FILE()); QFile dbfile(ConfigFiles::CONTEXTMENU_DB()); // if the database doesn't exist, we always need to create it if(!dbfile.exists()) { if(!QFile::copy(":/contextmenu.db", ConfigFiles::CONTEXTMENU_DB())) LOG << CURDATE << "PQStartup::migrateContextmenuToDb(): unable to create contextmenu database" << NL; else { QFile file(ConfigFiles::CONTEXTMENU_DB()); file.setPermissions(QFile::WriteOwner|QFile::ReadOwner|QFile::ReadGroup|QFile::ReadOther); } } // nothing to migrate -> we're done if(!file.exists()) return true; // access database QSqlDatabase db = QSqlDatabase::database("contextmenu"); // open database if(!db.open()) { LOG << CURDATE << "PQStartup::migrateContextmenuToDb(): Error opening database: " << db.lastError().text().trimmed().toStdString() << NL; return false; } QSqlQuery query(db); query.prepare("DELETE FROM entries"); if(!query.exec()) { LOG << CURDATE << "PQStartup::migrateContextmenuToDb(): SQL error, truncate: " << query.lastError().text().trimmed().toStdString() << NL; return false; } if(!file.open(QIODevice::ReadOnly)) { LOG << CURDATE << "PQStartup::migrateContextmenuToDb(): Failed to open old contextmenu file" << NL; return false; } QTextStream in(&file); QString txt = file.readAll(); QStringList allEntries = txt.split("\n\n"); for(const auto &entry : qAsConst(allEntries)) { QStringList parts = entry.split("\n"); if(parts.length() != 2) continue; QString close = parts[0].at(0); QString cmd = parts[0].remove(0,1); QString dsc = parts[1]; QSqlQuery query(db); query.prepare("INSERT INTO entries (command,desc,close) VALUES (:cmd,:dsc,:cls)"); query.bindValue(":cmd", cmd); query.bindValue(":dsc", dsc); query.bindValue(":cls", close); if(!query.exec()) LOG << CURDATE << "PQStartup::migrateContextmenuToDb(): SQL error, insert: " << query.lastError().text().trimmed().toStdString() << NL; } if(!QFile::exists(QString("%1.pre-v2.5").arg(ConfigFiles::CONTEXTMENU_FILE()))) if(!QFile::copy(ConfigFiles::CONTEXTMENU_FILE(), QString("%1.pre-v2.5").arg(ConfigFiles::CONTEXTMENU_FILE()))) LOG << CURDATE << "PQStartup::migrateContextmenuToDb(): Failed to copy old contextmenu file to 'contextmenu.pre-v2.5' filename" << NL; if(QFile::exists(QString("%1.pre-v2.5").arg(ConfigFiles::CONTEXTMENU_FILE()))) if(!QFile::remove(ConfigFiles::CONTEXTMENU_FILE())) LOG << CURDATE << "PQStartup::migrateShortcutsToDb(): Failed to remove old contextmenu file" << NL; return true; } bool PQStartup::migrateShortcutsToDb() { QFile file(ConfigFiles::SHORTCUTS_FILE()); QFile dbfile(ConfigFiles::SHORTCUTS_DB()); // if the database doesn't exist, we always need to create it if(!dbfile.exists()) { if(!QFile::copy(":/shortcuts.db", ConfigFiles::SHORTCUTS_DB())) LOG << CURDATE << "PQStartup::migrateShortcutsToDb: unable to create shortcuts database" << NL; else { QFile file(ConfigFiles::SHORTCUTS_DB()); file.setPermissions(QFile::WriteOwner|QFile::ReadOwner|QFile::ReadGroup|QFile::ReadOther); } } // nothing to migrate -> we're done if(!file.exists()) return true; // access database QSqlDatabase db = QSqlDatabase::database("shortcuts"); // open database if(!db.open()) { LOG << CURDATE << "PQStartup::migrateShortcutsToDb(): Error opening database: " << db.lastError().text().trimmed().toStdString() << NL; return false; } if(!file.open(QIODevice::ReadOnly)) { LOG << CURDATE << "PQStartup::migrateShortcutsToDb(): Failed to open old shortcuts file" << NL; return false; } QTextStream in(&file); QString txt = file.readAll(); // before 2.3, we used an old format // for 2.3 and 2.4, the format was already better bool oldFormat = false; if(txt.contains("Version=") && !txt.contains("Version=dev")) { double oldVersion = txt.split("Version=").at(1).split("\n").at(0).toDouble(); if(oldVersion < 2.3) oldFormat = true; } // old pre-2.3 format if(oldFormat) { // first we need to collect the shortcuts set for each command QMap newShortcuts; const QStringList parts = txt.split("\n"); for(const QString &p : parts) { if(!p.contains("::")) continue; const QStringList entries = p.split("::"); if(entries.count() > 3 || entries.at(1) == "__") continue; const QString cmd = QString("%1::%2").arg(entries.at(0), entries.at(2)); const QString sh = entries.at(1); if(newShortcuts.contains(cmd)) newShortcuts[cmd].append(sh); else newShortcuts.insert(cmd, QStringList() << sh); } db.transaction(); // write shortcuts to database QMap::const_iterator iter = newShortcuts.constBegin(); while(iter != newShortcuts.constEnd()) { const QString close = iter.key().split("::").at(0); const QString cmd = iter.key().split("::").at(1); const QString sh = iter.value().join(", "); if(cmd.startsWith("__")) { QSqlQuery query(db); query.prepare("UPDATE builtin SET shortcuts=:sh WHERE command=:cmd"); query.bindValue(":sh", sh); query.bindValue(":cmd", cmd); if(!query.exec()) LOG << CURDATE << "PQStartup::migrateShortcutsToDb(): SQL Error [1]: " << query.lastError().text().trimmed().toStdString() << NL; } else { QSqlQuery query(db); query.prepare("INSERT INTO external (command,shortcuts,close) VALUES(:cmd,:sh,:cl)"); query.bindValue(":sh", sh); query.bindValue(":cl", close); query.bindValue(":cmd", cmd); if(!query.exec()) LOG << CURDATE << "PQStartup::migrateShortcutsToDb(): SQL Error [2]: " << query.lastError().text().trimmed().toStdString() << NL; } ++iter; } db.commit(); // format of 2.3 and 2.4 } else { const QStringList parts = txt.split("\n"); db.transaction(); for(const auto &line : parts) { if(line.startsWith("Version=")) continue; QStringList p = line.split("::"); if(p.length() < 3) continue; const QString close = p.at(0); const QString cmd = p.at(1); const QString sh = p.mid(2).join(", "); if(cmd.startsWith("__")) { QSqlQuery query(db); query.prepare("UPDATE builtin SET shortcuts=:sh WHERE command=:cmd"); query.bindValue(":sh", sh); query.bindValue(":cmd", cmd); if(!query.exec()) LOG << CURDATE << "PQStartup::migrateShortcutsToDb(): SQL Error [3]: " << query.lastError().text().trimmed().toStdString() << NL; } else { QSqlQuery query(db); query.prepare("INSERT INTO external (command,shortcuts,close) VALUES(:cmd,:sh,:cl)"); query.bindValue(":sh", sh); query.bindValue(":cl", close); query.bindValue(":cmd", cmd); if(!query.exec()) LOG << CURDATE << "PQStartup::migrateShortcutsToDb(): SQL Error [4]: " << query.lastError().text().trimmed().toStdString() << NL; } } // add __chromecast as shortcut (no default set) QSqlQuery query(db); query.prepare("INSERT OR IGNORE INTO builtin (category, command, shortcuts, defaultshortcuts) VALUES(:cat, :cmd, :sh, :def)"); query.bindValue(":cat", "other"); query.bindValue(":cmd", "__chromecast"); query.bindValue(":sh", ""); query.bindValue(":def", ""); if(!query.exec()) LOG << CURDATE << "PQStartup::migrateShortcutsToDb(): SQL Error, insert new: " << query.lastError().text().trimmed().toStdString() << NL; db.commit(); } if(!QFile::exists(QString("%1.pre-v2.5").arg(ConfigFiles::SHORTCUTS_FILE()))) if(!QFile::copy(ConfigFiles::SHORTCUTS_FILE(), QString("%1.pre-v2.5").arg(ConfigFiles::SHORTCUTS_FILE()))) LOG << CURDATE << "PQStartup::migrateShortcutsToDb(): Failed to copy old shortcuts file to 'shortcuts.pre-v2.5' filename" << NL; if(QFile::exists(QString("%1.pre-v2.5").arg(ConfigFiles::SHORTCUTS_FILE()))) if(!QFile::remove(ConfigFiles::SHORTCUTS_FILE())) LOG << CURDATE << "PQStartup::migrateShortcutsToDb(): Failed to remove old shortcuts file" << NL; return true; } bool PQStartup::migrateSettingsToDb() { QFile file(ConfigFiles::SETTINGS_FILE()); QFile dbfile(ConfigFiles::SETTINGS_DB()); // if the database doesn't exist, we always need to create it if(!dbfile.exists()) { if(!QFile::copy(":/settings.db", ConfigFiles::SETTINGS_DB())) LOG << CURDATE << "PQStartup::Settings: unable to create settings database" << NL; else { QFile file(ConfigFiles::SETTINGS_DB()); file.setPermissions(QFile::WriteOwner|QFile::ReadOwner|QFile::ReadGroup|QFile::ReadOther); } } else { if(file.exists()) file.remove(); return true; } // nothing to migrate -> we're done if(!file.exists()) return true; QSqlDatabase db = QSqlDatabase::database("settings"); db.setHostName("migratesettings"); db.setDatabaseName(ConfigFiles::SETTINGS_DB()); if(!db.open()) { LOG << CURDATE << "PQStartup::migrateSettingsToDb(): Error opening database: " << db.lastError().text().trimmed().toStdString() << NL; return false; } if(!file.open(QIODevice::ReadOnly)) { LOG << CURDATE << "PQStartup::migrateSettingsToDb(): Failed to open old settings file" << NL; return false; } QTextStream in(&file); QString txt = file.readAll(); QMap conversions; /******************************************************/ conversions.insert("Version", QStringList() << "general" << "Version"); conversions.insert("Language", QStringList() << "interface" << "Language"); conversions.insert("WindowMode", QStringList() << "interface" << "WindowMode"); conversions.insert("WindowDecoration", QStringList() << "interface" << "WindowDecoration"); conversions.insert("SaveWindowGeometry", QStringList() << "interface" << "SaveWindowGeometry"); conversions.insert("KeepOnTop", QStringList() << "interface" << "KeepWindowOnTop"); conversions.insert("StartupLoadLastLoadedImage", QStringList() << "interface" << "RememberLastImage"); /******************************************************/ // Category: Look /******************************************************/ conversions.insert("BackgroundColorAlpha", QStringList() << "interface" << "OverlayColorAlpha"); conversions.insert("BackgroundColorBlue", QStringList() << "interface" << "OverlayColorBlue"); conversions.insert("BackgroundColorGreen", QStringList() << "interface" << "OverlayColorGreen"); conversions.insert("BackgroundColorRed", QStringList() << "interface" << "OverlayColorRed"); conversions.insert("BackgroundImageCenter", QStringList() << "interface" << "BackgroundImageCenter"); conversions.insert("BackgroundImagePath", QStringList() << "interface" << "BackgroundImagePath"); conversions.insert("BackgroundImageScale", QStringList() << "interface" << "BackgroundImageScale"); conversions.insert("BackgroundImageScaleCrop", QStringList() << "interface" << "BackgroundImageScaleCrop"); conversions.insert("BackgroundImageScreenshot", QStringList() << "interface" << "BackgroundImageScreenshot"); conversions.insert("BackgroundImageStretch", QStringList() << "interface" << "BackgroundImageStretch"); conversions.insert("BackgroundImageTile", QStringList() << "interface" << "BackgroundImageTile"); conversions.insert("BackgroundImageUse", QStringList() << "interface" << "BackgroundImageUse"); /******************************************************/ // category: Behaviour /******************************************************/ conversions.insert("AnimationDuration", QStringList() << "imageview" << "AnimationDuration"); conversions.insert("AnimationType", QStringList() << "imageview" << "AnimationType"); conversions.insert("ArchiveUseExternalUnrar", QStringList() << "imageview" << "ExternalUnrar"); conversions.insert("CloseOnEmptyBackground", QStringList() << "imageview" << "CloseOnEmptyBackground"); conversions.insert("NavigateOnEmptyBackground", QStringList() << "imageview" << "NavigateOnEmptyBackground"); conversions.insert("FitInWindow", QStringList() << "imageview" << "FitInWindow"); conversions.insert("HotEdgeWidth", QStringList() << "imageview" << "HotEdgeSize"); conversions.insert("InterpolationThreshold", QStringList() << "imageview" << "InterpolationThreshold"); conversions.insert("InterpolationDisableForSmallImages", QStringList() << "imageview" << "InterpolationDisableForSmallImages"); conversions.insert("KeepZoomRotationMirror", QStringList() << "imageview" << "RememberZoomRotationMirror"); conversions.insert("LeftButtonMouseClickAndMove", QStringList() << "imageview" << "LeftButtonMoveImage"); conversions.insert("LoopThroughFolder", QStringList() << "imageview" << "LoopThroughFolder"); conversions.insert("MarginAroundImage", QStringList() << "imageview" << "Margin"); conversions.insert("MouseWheelSensitivity", QStringList() << "imageview" << "MouseWheelSensitivity"); conversions.insert("PdfQuality", QStringList() << "imageview" << "PDFQuality"); conversions.insert("PixmapCache", QStringList() << "imageview" << "Cache"); conversions.insert("QuickNavigation", QStringList() << "imageview" << "QuickNavigation"); conversions.insert("ShowTransparencyMarkerBackground", QStringList() << "imageview" << "TransparencyMarker"); conversions.insert("SortImagesBy", QStringList() << "imageview" << "SortImagesBy"); conversions.insert("SortImagesAscending", QStringList() << "imageview" << "SortImagesAscending"); conversions.insert("TrayIcon", QStringList() << "imageview" << "TrayIcon"); conversions.insert("ZoomSpeed", QStringList() << "imageview" << "ZoomSpeed"); /******************************************************/ // category: Labels /******************************************************/ conversions.insert("LabelsWindowButtonsSize", QStringList() << "interface" << "LabelsWindowButtonsSize"); conversions.insert("LabelsHideCounter", QStringList() << "interface" << "LabelsHideCounter"); conversions.insert("LabelsHideFilepath", QStringList() << "interface" << "LabelsHideFilepath"); conversions.insert("LabelsHideFilename", QStringList() << "interface" << "LabelsHideFilename"); conversions.insert("LabelsWindowButtons", QStringList() << "interface" << "LabelsWindowButtons"); conversions.insert("LabelsHideZoomLevel", QStringList() << "interface" << "LabelsHideZoomLevel"); conversions.insert("LabelsHideRotationAngle", QStringList() << "interface" << "LabelsHideRotationAngle"); conversions.insert("LabelsManageWindow", QStringList() << "interface" << "LabelsManageWindow"); /******************************************************/ // category: Exclude /******************************************************/ conversions.insert("ExcludeCacheFolders", QStringList() << "thumbnails" << "ExcludeFolders"); conversions.insert("ExcludeCacheDropBox", QStringList() << "thumbnails" << "ExcludeDropBox"); conversions.insert("ExcludeCacheNextcloud", QStringList() << "thumbnails" << "ExcludeNextcloud"); conversions.insert("ExcludeCacheOwnCloud", QStringList() << "thumbnails" << "ExcludeOwnCloud"); /******************************************************/ // category: Thumbnail /******************************************************/ conversions.insert("ThumbnailCache", QStringList() << "thumbnails" << "Cache"); conversions.insert("ThumbnailCenterActive", QStringList() << "thumbnails" << "CenterOnActive"); conversions.insert("ThumbnailDisable", QStringList() << "thumbnails" << "Disable"); conversions.insert("ThumbnailFilenameInstead", QStringList() << "thumbnails" << "FilenameOnly"); conversions.insert("ThumbnailFilenameInsteadFontSize", QStringList() << "thumbnails" << "FilenameOnlyFontSize"); conversions.insert("ThumbnailFontSize", QStringList() << "thumbnails" << "FontSize"); conversions.insert("ThumbnailKeepVisible", QStringList() << "thumbnails" << ""); conversions.insert("ThumbnailKeepVisibleWhenNotZoomedIn", QStringList() << "thumbnails" << ""); conversions.insert("ThumbnailLiftUp", QStringList() << "thumbnails" << "LiftUp"); conversions.insert("ThumbnailMaxNumberThreads", QStringList() << "thumbnails" << "MaxNumberThreads"); conversions.insert("ThumbnailPosition", QStringList() << "thumbnails" << "Edge"); conversions.insert("ThumbnailSize", QStringList() << "thumbnails" << "Size"); conversions.insert("ThumbnailSpacingBetween", QStringList() << "thumbnails" << "Spacing"); conversions.insert("ThumbnailWriteFilename", QStringList() << "thumbnails" << "Filename"); /******************************************************/ // Slideshow /******************************************************/ conversions.insert("SlideShowHideLabels", QStringList() << "slideshow" << "HideLabels"); conversions.insert("SlideShowImageTransition", QStringList() << "slideshow" << "ImageTransition"); conversions.insert("SlideShowLoop", QStringList() << "slideshow" << "Loop"); conversions.insert("SlideShowMusicFile", QStringList() << "slideshow" << "MusicFile"); conversions.insert("SlideShowShuffle", QStringList() << "slideshow" << "Shuffle"); conversions.insert("SlideShowTime", QStringList() << "slideshow" << "Time"); conversions.insert("SlideShowTypeAnimation", QStringList() << "slideshow" << "TypeAnimation"); conversions.insert("SlideShowIncludeSubFolders", QStringList() << "slideshow" << "IncludeSubFolders"); /******************************************************/ // category: Metadata /******************************************************/ conversions.insert("MetaApplyRotation", QStringList() << "metadata" << "AutoRotation"); conversions.insert("MetaCopyright", QStringList() << "metadata" << "Copyright"); conversions.insert("MetaDimensions", QStringList() << "metadata" << "Dimensions"); conversions.insert("MetaExposureTime", QStringList() << "metadata" << "ExposureTime"); conversions.insert("MetaFilename", QStringList() << "metadata" << "Filename"); conversions.insert("MetaFileType", QStringList() << "metadata" << "FileType"); conversions.insert("MetaFileSize", QStringList() << "metadata" << "FileSize"); conversions.insert("MetaFlash", QStringList() << "metadata" << "Flash"); conversions.insert("MetaFLength", QStringList() << "metadata" << "FLength"); conversions.insert("MetaFNumber", QStringList() << "metadata" << "FNumber"); conversions.insert("MetaGps", QStringList() << "metadata" << "Gps"); conversions.insert("MetaGpsMapService", QStringList() << "metadata" << "GpsMap"); conversions.insert("MetaImageNumber", QStringList() << "metadata" << "ImageNumber"); conversions.insert("MetaIso", QStringList() << "metadata" << "Iso"); conversions.insert("MetaKeywords", QStringList() << "metadata" << "Keywords"); conversions.insert("MetaLightSource", QStringList() << "metadata" << "LightSource"); conversions.insert("MetaLocation", QStringList() << "metadata" << "Location"); conversions.insert("MetaMake", QStringList() << "metadata" << "Make"); conversions.insert("MetaModel", QStringList() << "metadata" << "Model"); conversions.insert("MetaSceneType", QStringList() << "metadata" << "SceneType"); conversions.insert("MetaSoftware", QStringList() << "metadata" << "Software"); conversions.insert("MetaTimePhotoTaken", QStringList() << "metadata" << "Time"); /******************************************************/ // category: Metadata Element /******************************************************/ conversions.insert("MetadataEnableHotEdge", QStringList() << "metadata" << "ElementHotEdge"); conversions.insert("MetadataOpacity", QStringList() << "metadata" << "ElementOpacity"); conversions.insert("MetadataWindowWidth", QStringList() << "metadata" << "ElementWidth"); /******************************************************/ // category: People Tags in Metadata /******************************************************/ conversions.insert("PeopleTagInMetaBorderAroundFace", QStringList() << "metadata" << "FaceTagsBorder"); conversions.insert("PeopleTagInMetaBorderAroundFaceColor", QStringList() << "metadata" << "FaceTagsBorderColor"); conversions.insert("PeopleTagInMetaBorderAroundFaceWidth", QStringList() << "metadata" << "FaceTagsBorderWidth"); conversions.insert("PeopleTagInMetaDisplay", QStringList() << "metadata" << "FaceTagsEnabled"); conversions.insert("PeopleTagInMetaFontSize", QStringList() << "metadata" << "FaceTagsFontSize"); conversions.insert("PeopleTagInMetaAlwaysVisible", QStringList() << "metadata" << ""); conversions.insert("PeopleTagInMetaHybridMode", QStringList() << "metadata" << ""); conversions.insert("PeopleTagInMetaIndependentLabels", QStringList() << "metadata" << ""); /******************************************************/ // category: Open File /******************************************************/ conversions.insert("OpenDefaultView", QStringList() << "openfile" << "DefaultView"); conversions.insert("OpenKeepLastLocation", QStringList() << "openfile" << "KeepLastLocation"); conversions.insert("OpenPreview", QStringList() << "openfile" << "Preview"); conversions.insert("OpenShowHiddenFilesFolders", QStringList() << "openfile" << "ShowHiddenFilesFolders"); conversions.insert("OpenThumbnails", QStringList() << "openfile" << "Thumbnails"); conversions.insert("OpenUserPlacesStandard", QStringList() << "openfile" << "UserPlacesStandard"); conversions.insert("OpenUserPlacesUser", QStringList() << "openfile" << "UserPlacesUser"); conversions.insert("OpenUserPlacesVolumes", QStringList() << "openfile" << "UserPlacesVolumes"); conversions.insert("OpenUserPlacesWidth", QStringList() << "openfile" << "UserPlacesWidth"); conversions.insert("OpenZoomLevel", QStringList() << "openfile" << "ZoomLevel"); /******************************************************/ // category: Histogram /******************************************************/ conversions.insert("Histogram", QStringList() << "histogram" << "Visibility"); conversions.insert("HistogramPosition", QStringList() << "histogram" << "Position"); conversions.insert("HistogramSize", QStringList() << "histogram" << "Size"); conversions.insert("HistogramVersion", QStringList() << "histogram" << "Version"); /******************************************************/ // category: Main Menu Element /******************************************************/ conversions.insert("MainMenuWindowWidth", QStringList() << "mainmenu" << "ElementWidth"); /******************************************************/ // category: Video /******************************************************/ conversions.insert("VideoAutoplay", QStringList() << "filetypes" << "VideoAutoplay"); conversions.insert("VideoLoop", QStringList() << "filetypes" << "VideoLoop"); conversions.insert("VideoVolume", QStringList() << "filetypes" << "VideoVolume"); conversions.insert("VideoThumbnailer", QStringList() << "filetypes" << "VideoThumbnailer"); /******************************************************/ // category: Popout /******************************************************/ conversions.insert("MainMenuPopoutElement", QStringList() << "interface" << "PopoutMainMenu"); conversions.insert("MetadataPopoutElement", QStringList() << "interface" << "PopoutMetadata"); conversions.insert("HistogramPopoutElement", QStringList() << "interface" << "PopoutHistogram"); conversions.insert("ScalePopoutElement", QStringList() << "interface" << "PopoutScale"); conversions.insert("OpenPopoutElement", QStringList() << "interface" << "PopoutOpenFile"); conversions.insert("OpenPopoutElementKeepOpen", QStringList() << "interface" << "PopoutOpenFileKeepOpen"); conversions.insert("SlideShowSettingsPopoutElement", QStringList() << "interface" << "PopoutSlideShowSettings"); conversions.insert("SlideShowControlsPopoutElement", QStringList() << "interface" << "PopoutSlideShowControls"); conversions.insert("FileRenamePopoutElement", QStringList() << "interface" << "PopoutFileRename"); conversions.insert("FileDeletePopoutElement", QStringList() << "interface" << "PopoutFileDelete"); conversions.insert("AboutPopoutElement", QStringList() << "interface" << "PopoutAbout"); conversions.insert("ImgurPopoutElement", QStringList() << "interface" << "PopoutImgur"); conversions.insert("WallpaperPopoutElement", QStringList() << "interface" << "PopoutWallpaper"); conversions.insert("FilterPopoutElement", QStringList() << "interface" << "PopoutFilter"); conversions.insert("SettingsManagerPopoutElement", QStringList() << "interface" << "PopoutSettingsManager"); conversions.insert("FileSaveAsPopoutElement", QStringList() << "interface" << "PopoutFileSaveAs"); // These are settings combined out of multiple old settings QString thumbnailsVisibility = "0"; QString metadataFaceTagsVisibility = "3"; const QStringList lines = txt.split("\n"); for(const auto &line : lines) { if(!line.contains("=")) continue; bool dontExecQuery = false; QSqlQuery query(db); QString key = line.split("=")[0].trimmed(); QString val = line.split("=")[1].trimmed(); if(!conversions.contains(key)) continue; QString table = conversions.value(key)[0]; QString newkey = conversions.value(key)[1]; query.prepare(QString("UPDATE `%1` SET value=:val WHERE name='%2'").arg(table).arg(newkey)); /******************************************************/ if(key == "Version") val = QString(VERSION); else if(key == "BackgroundImagePath") { // workaround to old bug where this value was either 0 or 1 instead of filepath if(val == "0" || val == "1") val = ""; } else if(key == "ExcludeCacheFolders") { QStringList result; QByteArray byteArray = QByteArray::fromBase64(val.toUtf8()); QDataStream in(&byteArray, QIODevice::ReadOnly); in >> result; val = result.join(":://::"); } else if(key == "ThumbnailKeepVisible") { dontExecQuery = true; if(val == "1") thumbnailsVisibility = "1"; } else if(key == "ThumbnailKeepVisibleWhenNotZoomedIn") { dontExecQuery = true; if(val == "1") thumbnailsVisibility = "2"; } else if(key == "PeopleTagInMetaAlwaysVisible") { dontExecQuery = true; if(val == "1") metadataFaceTagsVisibility = "1"; } else if(key == "PeopleTagInMetaHybridMode") { dontExecQuery = true; if(val == "1") metadataFaceTagsVisibility = "0"; } else if(key == "PeopleTagInMetaIndependentLabels") { dontExecQuery = true; if(val == "1") metadataFaceTagsVisibility = "2"; } if(!dontExecQuery) { query.bindValue(":val", val); if(!query.exec()) { LOG << CURDATE << "PQStartup::migrateSettingsToDb(): Updating setting failed: " << key.toStdString() << " / " << val.toStdString() << NL; LOG << CURDATE << "PQStartup::migrateSettingsToDb(): SQL error: " << query.lastError().text().trimmed().toStdString() << NL; } } query.clear(); } // The following multiple old settings combine, thus they can only be updated here QSqlQuery query(db); query.prepare("UPDATE `thumbnails` SET value=:val WHERE name='Visibility'"); query.bindValue(":val", thumbnailsVisibility); if(!query.exec()) { LOG << CURDATE << "PQStartup::migrateSettingsToDb(): Updating setting failed: thumbnailsVisibility / " << thumbnailsVisibility.toStdString() << NL; LOG << CURDATE << "PQStartup::migrateSettingsToDb(): SQL error: " << query.lastError().text().trimmed().toStdString() << NL; } query.clear(); query.prepare("UPDATE `metadata` SET value=:val WHERE name='FaceTagsVisibility'"); query.bindValue(":val", metadataFaceTagsVisibility); if(!query.exec()) { LOG << CURDATE << "PQStartup::migrateSettingsToDb(): Updating setting failed: metadataFaceTagsVisibility / " << metadataFaceTagsVisibility.toStdString() << NL; LOG << CURDATE << "PQStartup::migrateSettingsToDb(): SQL error: " << query.lastError().text().trimmed().toStdString() << NL; } if(!QFile::exists(QString("%1.pre-v2.5").arg(ConfigFiles::SETTINGS_FILE()))) if(!QFile::copy(ConfigFiles::SETTINGS_FILE(), QString("%1.pre-v2.5").arg(ConfigFiles::SETTINGS_FILE()))) LOG << CURDATE << "PQStartup::migrateSettingsToDb(): Failed to copy old settings file to 'settings.pre-v2.5' filename" << NL; if(QFile::exists(QString("%1.pre-v2.5").arg(ConfigFiles::SETTINGS_FILE()))) if(!QFile::remove(ConfigFiles::SETTINGS_FILE())) LOG << CURDATE << "PQStartup::migrateSettingsToDb(): Failed to rename old settings file to 'settings.pre-v2.5'" << NL; query.clear(); return true; } photoqt-2.5/cplusplus/startup/validate.h000644 001750 001750 00000003622 14164671415 021122 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQVALIDATE_H #define PQVALIDATE_H #include #include #include "../logger.h" class PQValidate : public QObject { Q_OBJECT public: PQValidate(QObject *parent = nullptr); bool validate(); private: bool validateSettingsDatabase(); bool validateShortcutsDatabase(); }; #endif // PQVALIDATE_H photoqt-2.5/cplusplus/scripts/000755 001750 001750 00000000000 14165350766 017146 5ustar00luspiluspi000000 000000 photoqt-2.5/cplusplus/scripts/filewatcher.cpp000644 001750 001750 00000011701 14164671311 022136 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "filewatcher.h" PQFileWatcher::PQFileWatcher(QObject *parent) : QObject(parent) { userPlacesWatcher = new QFileSystemWatcher; connect(userPlacesWatcher, &QFileSystemWatcher::fileChanged, this, &PQFileWatcher::userPlacesChangedSLOT); userPlacesWatcher->addPath(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel"); contextmenuWatcher = new QFileSystemWatcher; connect(contextmenuWatcher, &QFileSystemWatcher::fileChanged, this, &PQFileWatcher::contextmenuChangedSLOT); contextmenuWatcher->addPath(ConfigFiles::CONTEXTMENU_DB()); currentFileWatcher = new QFileSystemWatcher; connect(currentFileWatcher, &QFileSystemWatcher::fileChanged, this, &PQFileWatcher::currentFileChangedSLOT); checkRepeatedly = new QTimer; checkRepeatedly->setInterval(2500); checkRepeatedly->setSingleShot(false); connect(checkRepeatedly, &QTimer::timeout, this, &PQFileWatcher::checkRepeatedlyTimeout); checkRepeatedly->start(); } PQFileWatcher::~PQFileWatcher() { delete userPlacesWatcher; delete contextmenuWatcher; delete currentFileWatcher; delete checkRepeatedly; } void PQFileWatcher::checkRepeatedlyTimeout() { DBG << CURDATE << "PQFileWatcher::checkRepeatedlyTimeout()" << NL; if(!userPlacesWatcher->files().contains(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel")) { if(QFile(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel").exists()) userPlacesWatcher->addPath(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel"); } if(!contextmenuWatcher->files().contains(ConfigFiles::CONTEXTMENU_DB())) { if(QFile(ConfigFiles::CONTEXTMENU_DB()).exists()) contextmenuWatcher->addPath(ConfigFiles::CONTEXTMENU_DB()); } } void PQFileWatcher::userPlacesChangedSLOT() { DBG << CURDATE << "PQFileWatcher::userPlacesChangedSLOT()" << NL; QFileInfo info(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel"); for(int i = 0; i < 5; ++i) { if(info.exists()) break; std::this_thread::sleep_for(std::chrono::milliseconds(50)); } Q_EMIT userPlacesChanged(); if(info.exists()) userPlacesWatcher->addPath(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel"); } void PQFileWatcher::contextmenuChangedSLOT() { DBG << CURDATE << "PQFileWatcher::contextmenuChangedSLOT()" << NL; QFileInfo info(ConfigFiles::CONTEXTMENU_DB()); for(int i = 0; i < 5; ++i) { if(info.exists()) break; std::this_thread::sleep_for(std::chrono::milliseconds(50)); } Q_EMIT contextmenuChanged(); if(info.exists()) contextmenuWatcher->addPath(ConfigFiles::CONTEXTMENU_DB()); } void PQFileWatcher::currentFileChangedSLOT() { DBG << CURDATE << "PQFileWatcher::currentFileChangedSLOT()" << NL; QFileInfo info(currentFile); for(int i = 0; i < 5; ++i) { if(info.exists()) break; std::this_thread::sleep_for(std::chrono::milliseconds(50)); } Q_EMIT currentFileChanged(); if(info.exists()) contextmenuWatcher->addPath(currentFile); } void PQFileWatcher::setCurrentFile(QString file) { currentFile = file; delete currentFileWatcher; currentFileWatcher = new QFileSystemWatcher; connect(currentFileWatcher, &QFileSystemWatcher::fileChanged, this, &PQFileWatcher::currentFileChangedSLOT); currentFileWatcher->addPath(currentFile); } photoqt-2.5/cplusplus/scripts/simplecrypt.h000644 001750 001750 00000023772 14164670136 021700 0ustar00luspiluspi000000 000000 /* Copyright (c) 2011, Andre Somers All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the Rathenau Instituut, Andre Somers nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANDRE SOMERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #######; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Modified for use in PhotoQt by Lukas Spies. */ #ifndef SIMPLECRYPT_H #define SIMPLECRYPT_H #include #include #include #if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) #include #endif /* Replaced deprecated functions in this file wth updated versions. */ /** @short Simple encryption and decryption of strings and byte arrays This class provides a simple implementation of encryption and decryption of strings and byte arrays. @warning The encryption provided by this class is NOT strong encryption. It may help to shield things from curious eyes, but it will NOT stand up to someone determined to break the encryption. Don't say you were not warned. The class uses a 64 bit key. Simply create an instance of the class, set the key, and use the encryptToString() method to calculate an encrypted version of the input string. To decrypt that string again, use an instance of SimpleCrypt initialized with the same key, and call the decryptToString() method with the encrypted string. If the key matches, the decrypted version of the string will be returned again. If you do not provide a key, or if something else is wrong, the encryption and decryption function will return an empty string or will return a string containing nonsense. lastError() will return a value indicating if the method was succesful, and if not, why not. SimpleCrypt is prepared for the case that the encryption and decryption algorithm is changed in a later version, by prepending a version identifier to the cypertext. */ class SimpleCrypt { public: /** CompressionMode describes if compression will be applied to the data to be encrypted. */ enum CompressionMode { CompressionAuto, /*!< Only apply compression if that results in a shorter plaintext. */ CompressionAlways, /*!< Always apply compression. Note that for short inputs, a compression may result in longer data */ CompressionNever /*!< Never apply compression. */ }; /** IntegrityProtectionMode describes measures taken to make it possible to detect problems with the data or wrong decryption keys. Measures involve adding a checksum or a cryptograhpic hash to the data to be encrypted. This increases the length of the resulting cypertext, but makes it possible to check if the plaintext appears to be valid after decryption. */ enum IntegrityProtectionMode { ProtectionNone, /*!< The integerity of the encrypted data is not protected. It is not really possible to detect a wrong key, for instance. */ ProtectionChecksum,/*!< A simple checksum is used to verify that the data is in order. If not, an empty string is returned. */ ProtectionHash/*!< A cryptographic hash is used to verify the integrity of the data. This method produces a much stronger, but longer check */ }; /** Error describes the type of error that occured. */ enum Error { ErrorNoError, /*!< No error occurred. */ ErrorNoKeySet, /*!< No key was set. You can not encrypt or decrypt without a valid key. */ ErrorUnknownVersion, /*!< The version of this data is unknown, or the data is otherwise not valid. */ ErrorIntegrityFailed, /*!< The integrity check of the data failed. Perhaps the wrong key was used. */ }; /** Constructor. Constructs a SimpleCrypt instance without a valid key set on it. */ SimpleCrypt(); /** Constructor. Constructs a SimpleCrypt instance and initializes it with the given @arg key. */ explicit SimpleCrypt(quint64 key); /** (Re-) initializes the key with the given @arg key. */ void setKey(quint64 key); /** Returns true if SimpleCrypt has been initialized with a key. */ bool hasKey() const {return !m_keyParts.isEmpty();} /** Sets the compression mode to use when encrypting data. The default mode is Auto. Note that decryption is not influenced by this mode, as the decryption recognizes what mode was used when encrypting. */ void setCompressionMode(CompressionMode mode) {m_compressionMode = mode;} /** Returns the CompressionMode that is currently in use. */ CompressionMode compressionMode() const {return m_compressionMode;} /** Sets the integrity mode to use when encrypting data. The default mode is Checksum. Note that decryption is not influenced by this mode, as the decryption recognizes what mode was used when encrypting. */ void setIntegrityProtectionMode(IntegrityProtectionMode mode) {m_protectionMode = mode;} /** Returns the IntegrityProtectionMode that is currently in use. */ IntegrityProtectionMode integrityProtectionMode() const {return m_protectionMode;} /** Returns the last error that occurred. */ Error lastError() const {return m_lastError;} /** Encrypts the @arg plaintext string with the key the class was initialized with, and returns a cyphertext the result. The result is a base64 encoded version of the binary array that is the actual result of the string, so it can be stored easily in a text format. */ QString encryptToString(const QString& plaintext) ; /** Encrypts the @arg plaintext QByteArray with the key the class was initialized with, and returns a cyphertext the result. The result is a base64 encoded version of the binary array that is the actual result of the encryption, so it can be stored easily in a text format. */ QString encryptToString(QByteArray plaintext) ; /** Encrypts the @arg plaintext string with the key the class was initialized with, and returns a binary cyphertext in a QByteArray the result. This method returns a byte array, that is useable for storing a binary format. If you need a string you can store in a text file, use encryptToString() instead. */ QByteArray encryptToByteArray(const QString& plaintext) ; /** Encrypts the @arg plaintext QByteArray with the key the class was initialized with, and returns a binary cyphertext in a QByteArray the result. This method returns a byte array, that is useable for storing a binary format. If you need a string you can store in a text file, use encryptToString() instead. */ QByteArray encryptToByteArray(QByteArray plaintext) ; /** Decrypts a cyphertext string encrypted with this class with the set key back to the plain text version. If an error occured, such as non-matching keys between encryption and decryption, an empty string or a string containing nonsense may be returned. */ QString decryptToString(const QString& cyphertext) ; /** Decrypts a cyphertext string encrypted with this class with the set key back to the plain text version. If an error occured, such as non-matching keys between encryption and decryption, an empty string or a string containing nonsense may be returned. */ QByteArray decryptToByteArray(const QString& cyphertext) ; /** Decrypts a cyphertext binary encrypted with this class with the set key back to the plain text version. If an error occured, such as non-matching keys between encryption and decryption, an empty string or a string containing nonsense may be returned. */ QString decryptToString(QByteArray cypher) ; /** Decrypts a cyphertext binary encrypted with this class with the set key back to the plain text version. If an error occured, such as non-matching keys between encryption and decryption, an empty string or a string containing nonsense may be returned. */ QByteArray decryptToByteArray(QByteArray cypher) ; //enum to describe options that have been used for the encryption. Currently only one, but //that only leaves room for future extensions like adding a cryptographic hash... enum CryptoFlag{CryptoFlagNone = 0, CryptoFlagCompression = 0x01, CryptoFlagChecksum = 0x02, CryptoFlagHash = 0x04 }; Q_DECLARE_FLAGS(CryptoFlags, CryptoFlag) private: void splitKey(); #if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) QRandomGenerator randgen; #endif quint64 m_key; QVector m_keyParts; CompressionMode m_compressionMode; IntegrityProtectionMode m_protectionMode; Error m_lastError; }; Q_DECLARE_OPERATORS_FOR_FLAGS(SimpleCrypt::CryptoFlags) #endif // SimpleCrypt_H photoqt-2.5/cplusplus/scripts/handlingmanipulation.cpp000644 001750 001750 00000023506 14164671275 024065 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "handlingmanipulation.h" bool PQHandlingManipulation::canThisBeScaled(QString filename) { DBG << CURDATE << "PQHandlingManipulation::canThisBeScaled()" << NL << CURDATE << "** filename = " << filename.toStdString() << NL; // These image formats known by exiv2 are also supported by PhotoQt QStringList formats; formats << "jpeg" << "jpg" << "tif" << "tiff" << "png" << "psd" << "jpeg2000" << "jp2" << "jpc" << "j2k" << "jpf" << "jpx" << "jpm" << "mj2" << "bmp" << "bitmap" << "gif" << "tga"; return formats.contains(QFileInfo(filename).suffix().toLower()); } int PQHandlingManipulation::chooseLocationAndConvertImage(QString sourceFilename, QString targetFilename, QString targetEndings) { DBG << CURDATE << "PQHandlingManipulation::chooseLocationAndConvertImage()" << NL << CURDATE << "** sourceFilename = " << sourceFilename.toStdString() << NL << CURDATE << "** targetFilename = " << targetFilename.toStdString() << NL << CURDATE << "** targetEndings = " << targetEndings.toStdString() << NL; // get info about new file format and source file QVariantMap databaseinfo = PQImageFormats::get().getFormatsInfo(targetEndings); QFileInfo fileinfo(sourceFilename); // request user to select target directory QString targetdir = QFileDialog::getExistingDirectory(nullptr, "Choose new location", fileinfo.absolutePath()); if(targetdir == "") return -1; // -1 means cancelled // if we succeeded converting the image bool success = false; // qt might support it if(databaseinfo.value("qt").toInt() == 1) { QImageWriter writer; // if the QImageWriter supports the format then we're good to go if(writer.supportedImageFormats().contains(databaseinfo.value("qt_formatname").toString().toUtf8())) { // First we load the image... PQLoadImageQt loader; QSize tmp; QImage img = loader.load(sourceFilename, QSize(-1,-1), &tmp); // ... and then we write it into the new format writer.setFileName(QString("%1/%2").arg(targetdir, targetFilename)); writer.setFormat(databaseinfo.value("qt_formatname").toString().toUtf8()); // if the actual writing suceeds we're done now if(!writer.write(img)) LOG << "ERR: " << writer.errorString().toStdString() << NL; else success = true; } } // imagemagick/graphicsmagick might support it #if defined(IMAGEMAGICK) || defined(GRAPHICSMAGICK) #ifdef IMAGEMAGICK if(!success && databaseinfo.value("imagemagick").toInt() == 1) { #else if(!success && databaseinfo.value("graphicsmagick").toInt() == 1) { #endif // first check whether ImageMagick/GraphicsMagick supports writing this filetype bool canproceed = false; try { QString magick = databaseinfo.value("im_gm_magick").toString(); Magick::CoderInfo magickCoderInfo(magick.toStdString()); if(magickCoderInfo.isWritable()) canproceed = true; } catch(Magick::Exception &) { } // yes, it's supported if(canproceed) { try { // first load the image but skip the conversion into QImage type PQLoadImageMagick loader; QSize tmp; loader.load(sourceFilename, QSize(-1,-1), &tmp, true); // get raw Magick image from loader Magick::Image img = loader.image; // and write new output file img.magick(databaseinfo.value("im_gm_magick").toString().toStdString()); img.write(QString("%1/%2").arg(targetdir, targetFilename).toStdString()); // success! success = true; } catch(Magick::Exception &) { } } } #endif // 0 = error, 1 = success return (success ? 1 : 0); } QSize PQHandlingManipulation::getCurrentImageResolution(QString filename) { DBG << CURDATE << "PQHandlingManipulation::getCurrentImageResolution()" << NL << CURDATE << "** filename = " << filename.toStdString() << NL; QImageReader reader(filename); return reader.size(); } bool PQHandlingManipulation::scaleImage(QString sourceFilename, bool scaleInPlace, QSize targetSize, int targetQuality) { DBG << CURDATE << "PQHandlingManipulation::scaleImage()" << NL << CURDATE << "** sourceFilename = " << sourceFilename.toStdString() << NL << CURDATE << "** scaleInPlace = " << scaleInPlace << NL << CURDATE << "** targetSize = " << targetSize.width() << "x" << targetSize.height() << NL << CURDATE << "** targetQuality = " << targetQuality << NL; if(!canThisBeScaled(sourceFilename)) { LOG << CURDATE << "PQHandlingManipulation::scaleImage: ERROR file '" << sourceFilename.toStdString() << "' not supported for scaling" << NL; return false; } #ifdef EXIV2 // This will store all the exif data Exiv2::ExifData exifData; Exiv2::IptcData iptcData; Exiv2::XmpData xmpData; bool gotExifData = false; try { // Open image for exif reading #if EXIV2_TEST_VERSION(0, 28, 0) Exiv2::Image::UniquePtr image_read = Exiv2::ImageFactory::open(sourceFilename.toStdString()); #else Exiv2::Image::AutoPtr image_read = Exiv2::ImageFactory::open(sourceFilename.toStdString()); #endif if(image_read.get() != 0) { // YAY, WE FOUND SOME!!!!! gotExifData = true; // read exif image_read->readMetadata(); exifData = image_read->exifData(); iptcData = image_read->iptcData(); xmpData = image_read->xmpData(); // Update dimensions exifData["Exif.Photo.PixelXDimension"] = int32_t(targetSize.width()); exifData["Exif.Photo.PixelYDimension"] = int32_t(targetSize.height()); } } catch (Exiv2::Error& e) { LOG << CURDATE << "PQHandlingManipulation::scaleImage: ERROR reading exif data (caught exception): " << e.what() << NL; } #endif // We need to do the actual scaling in between reading the exif data above and writing it below, // since we might be scaling the image in place and thus would overwrite old exif data QImageReader reader(sourceFilename); reader.setScaledSize(QSize(targetSize.width(),targetSize.height())); QImage img = reader.read(); QString targetFilename = sourceFilename; if(!scaleInPlace) { QFileInfo info(sourceFilename); QString suggestedfilename = QString("%2_%3x%4.%5").arg(info.baseName()) .arg(targetSize.width()) .arg(targetSize.height()) .arg(info.suffix()); QFileDialog dialog; dialog.setWindowTitle(QApplication::translate("scale", "Select new file")); dialog.setDirectory(info.absolutePath()); dialog.selectFile(suggestedfilename); if(!dialog.exec()) return false; targetFilename = dialog.selectedFiles().at(0); } if(!img.save(targetFilename, 0, targetQuality)) { LOG << CURDATE << "PQHandlingManipulation::scaleImage: ERROR: Unable to save scaled image file" << NL; return false; } #ifdef EXIV2 if(gotExifData) { try { // And write exif data to new image file #if EXIV2_TEST_VERSION(0, 28, 0) Exiv2::Image::UniquePtr image_write = Exiv2::ImageFactory::open(targetFilename.toStdString()); #else Exiv2::Image::AutoPtr image_write = Exiv2::ImageFactory::open(targetFilename.toStdString()); #endif image_write->setExifData(exifData); image_write->setIptcData(iptcData); image_write->setXmpData(xmpData); image_write->writeMetadata(); } catch (Exiv2::Error& e) { LOG << CURDATE << "PQHandlingManipulation::scaleImage: ERROR writing exif data (caught exception): " << e.what() << NL; } } #endif return true; } photoqt-2.5/cplusplus/scripts/metadata.h000644 001750 001750 00000026537 14164671263 021111 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQMETADATA_H #define PQMETADATA_H #include #include #include #include "../logger.h" #ifdef EXIV2 #include #endif class PQMetaData : public QObject { Q_OBJECT public: PQMetaData(QObject *parent = 0); Q_INVOKABLE void updateMetadata(QString path); Q_PROPERTY(bool validFile READ getValidFile WRITE setValidFile NOTIFY validFileChanged) bool getValidFile() { return m_validFile; } void setValidFile(bool val) { if(m_validFile != val) { m_validFile = val; Q_EMIT validFileChanged(); } } Q_PROPERTY(QString fileSize READ getFileSize WRITE setFileSize NOTIFY fileSizeChanged) QString getFileSize() { return m_fileSize; } void setFileSize(QString val) { if(m_fileSize != val) { m_fileSize = val; Q_EMIT fileSizeChanged(); } } Q_PROPERTY(QString dimensions READ getDimensions WRITE setDimensions NOTIFY dimensionsChanged) QString getDimensions() { return m_dimensions; } void setDimensions(QString val) { if(m_dimensions != val) { m_dimensions = val; Q_EMIT dimensionsChanged(); } } Q_PROPERTY(QString exifImageMake READ getExifImageMake WRITE setExifImageMake NOTIFY exifImageMakeChanged) QString getExifImageMake() { return m_exifImageMake; } void setExifImageMake(QString val) { if(m_exifImageMake != val) { m_exifImageMake = val; Q_EMIT exifImageMakeChanged(); } } Q_PROPERTY(QString exifImageModel READ getExifImageModel WRITE setExifImageModel NOTIFY exifImageModelChanged) QString getExifImageModel() { return m_exifImageModel; } void setExifImageModel(QString val) { if(m_exifImageModel != val) { m_exifImageModel = val; Q_EMIT exifImageModelChanged(); } } Q_PROPERTY(QString exifImageSoftware READ getExifImageSoftware WRITE setExifImageSoftware NOTIFY exifImageSoftwareChanged) QString getExifImageSoftware() { return m_exifImageSoftware; } void setExifImageSoftware(QString val) { if(m_exifImageSoftware != val) { m_exifImageSoftware = val; Q_EMIT exifImageSoftwareChanged(); } } Q_PROPERTY(QString exifPhotoDateTimeOriginal READ getExifPhotoDateTimeOriginal WRITE setExifPhotoDateTimeOriginal NOTIFY exifPhotoDateTimeOriginalChanged) QString getExifPhotoDateTimeOriginal() { return m_exifPhotoDateTimeOriginal; } void setExifPhotoDateTimeOriginal(QString val) { if(m_exifPhotoDateTimeOriginal != val) { m_exifPhotoDateTimeOriginal = val; Q_EMIT exifPhotoDateTimeOriginalChanged(); } } Q_PROPERTY(QString exifPhotoExposureTime READ getExifPhotoExposureTime WRITE setExifPhotoExposureTime NOTIFY exifPhotoExposureTimeChanged) QString getExifPhotoExposureTime() { return m_exifPhotoExposureTime; } void setExifPhotoExposureTime(QString val) { if(m_exifPhotoExposureTime != val) { m_exifPhotoExposureTime = val; Q_EMIT exifPhotoExposureTimeChanged(); } } Q_PROPERTY(QString exifPhotoFlash READ getExifPhotoFlash WRITE setExifPhotoFlash NOTIFY exifPhotoFlashChanged) QString getExifPhotoFlash() { return m_exifPhotoFlash; } void setExifPhotoFlash(QString val) { if(m_exifPhotoFlash != val) { m_exifPhotoFlash = val; Q_EMIT exifPhotoFlashChanged(); } } Q_PROPERTY(QString exifPhotoISOSpeedRatings READ getExifPhotoISOSpeedRatings WRITE setExifPhotoISOSpeedRatings NOTIFY exifPhotoISOSpeedRatingsChanged) QString getExifPhotoISOSpeedRatings() { return m_exifPhotoISOSpeedRatings; } void setExifPhotoISOSpeedRatings(QString val) { if(m_exifPhotoISOSpeedRatings != val) { m_exifPhotoISOSpeedRatings = val; Q_EMIT exifPhotoISOSpeedRatingsChanged(); } } Q_PROPERTY(QString exifPhotoSceneCaptureType READ getExifPhotoSceneCaptureType WRITE setExifPhotoSceneCaptureType NOTIFY exifPhotoSceneCaptureTypeChanged) QString getExifPhotoSceneCaptureType() { return m_exifPhotoSceneCaptureType; } void setExifPhotoSceneCaptureType(QString val) { if(m_exifPhotoSceneCaptureType != val) { m_exifPhotoSceneCaptureType = val; Q_EMIT exifPhotoSceneCaptureTypeChanged(); } } Q_PROPERTY(QString exifPhotoFocalLength READ getExifPhotoFocalLength WRITE setExifPhotoFocalLength NOTIFY exifPhotoFocalLengthChanged) QString getExifPhotoFocalLength() { return m_exifPhotoFocalLength; } void setExifPhotoFocalLength(QString val) { if(m_exifPhotoFocalLength != val) { m_exifPhotoFocalLength = val; Q_EMIT exifPhotoFocalLengthChanged(); } } Q_PROPERTY(QString exifPhotoFNumber READ getExifPhotoFNumber WRITE setExifPhotoFNumber NOTIFY exifPhotoFNumberChanged) QString getExifPhotoFNumber() { return m_exifPhotoFNumber; } void setExifPhotoFNumber(QString val) { if(m_exifPhotoFNumber != val) { m_exifPhotoFNumber = val; Q_EMIT exifPhotoFNumberChanged(); } } Q_PROPERTY(QString exifPhotoLightSource READ getExifPhotoLightSource WRITE setExifPhotoLightSource NOTIFY exifPhotoLightSourceChanged) QString getExifPhotoLightSource() { return m_exifPhotoLightSource; } void setExifPhotoLightSource(QString val) { if(m_exifPhotoLightSource != val) { m_exifPhotoLightSource = val; Q_EMIT exifPhotoLightSourceChanged(); } } Q_PROPERTY(QString exifPhotoPixelXDimension READ getExifPhotoPixelXDimension WRITE setExifPhotoPixelXDimension NOTIFY exifPhotoPixelXDimensionChanged) QString getExifPhotoPixelXDimension() { return m_exifPhotoPixelXDimension; } void setExifPhotoPixelXDimension(QString val) { if(m_exifPhotoPixelXDimension != val) { m_exifPhotoPixelXDimension = val; Q_EMIT exifPhotoPixelXDimensionChanged(); } } Q_PROPERTY(QString exifPhotoPixelYDimension READ getExifPhotoPixelYDimension WRITE setExifPhotoPixelYDimension NOTIFY exifPhotoPixelYDimensionChanged) QString getExifPhotoPixelYDimension() { return m_exifPhotoPixelYDimension; } void setExifPhotoPixelYDimension(QString val) { if(m_exifPhotoPixelYDimension != val) { m_exifPhotoPixelYDimension = val; Q_EMIT exifPhotoPixelYDimensionChanged(); } } Q_PROPERTY(QString exifGPS READ getExifGPS WRITE setExifGPS NOTIFY exifGPSChanged) QString getExifGPS() { return m_exifGPS; } void setExifGPS(QString val) { if(m_exifGPS != val) { m_exifGPS = val; Q_EMIT exifGPSChanged(); } } Q_PROPERTY(QString iptcApplication2Keywords READ getIptcApplication2Keywords WRITE setIptcApplication2Keywords NOTIFY iptcApplication2KeywordsChanged) QString getIptcApplication2Keywords() { return m_iptcApplication2Keywords; } void setIptcApplication2Keywords(QString val) { if(m_iptcApplication2Keywords != val) { m_iptcApplication2Keywords = val; Q_EMIT iptcApplication2KeywordsChanged(); } } Q_PROPERTY(QString iptcLocation READ getIptcLocation WRITE setIptcLocation NOTIFY iptcLocationChanged) QString getIptcLocation() { return m_iptcLocation; } void setIptcLocation(QString val) { if(m_iptcLocation != val) { m_iptcLocation = val; Q_EMIT iptcLocationChanged(); } } Q_PROPERTY(QString iptcApplication2Copyright READ getIptcApplication2Copyright WRITE setIptcApplication2Copyright NOTIFY iptcApplication2CopyrightChanged) QString getIptcApplication2Copyright() { return m_iptcApplication2Copyright; } void setIptcApplication2Copyright(QString val) { if(m_iptcApplication2Copyright != val) { m_iptcApplication2Copyright = val; Q_EMIT iptcApplication2CopyrightChanged(); } } private: bool m_validFile; QString m_fileSize; QString m_dimensions; QString m_exifImageMake; QString m_exifImageModel; QString m_exifImageSoftware; QString m_exifPhotoDateTimeOriginal; QString m_exifPhotoExposureTime; QString m_exifPhotoFlash; QString m_exifPhotoISOSpeedRatings; QString m_exifPhotoSceneCaptureType; QString m_exifPhotoFocalLength; QString m_exifPhotoFNumber; QString m_exifPhotoLightSource; QString m_exifPhotoPixelXDimension; QString m_exifPhotoPixelYDimension; QString m_exifGPS; QString m_iptcApplication2Keywords; QString m_iptcLocation; QString m_iptcApplication2Copyright; QString analyzeDateTimeOriginal(const QString val); QString analyzeExposureTime(const QString val); QString analyzeFlash(const QString val); QString analyzeSceneCaptureType(const QString val); QString analyzeFocalLength(const QString val); QString analyzeFNumber(const QString val); QString analyzeLightSource(const QString val); QString analyzeGPS(QString latRef, QString lat, QString lonRef, QString lon); Q_SIGNALS: void validFileChanged(); void fileSizeChanged(); void dimensionsChanged(); void exifImageMakeChanged(); void exifImageModelChanged(); void exifImageSoftwareChanged(); void exifPhotoDateTimeOriginalChanged(); void exifPhotoExposureTimeChanged(); void exifPhotoFlashChanged(); void exifPhotoISOSpeedRatingsChanged(); void exifPhotoSceneCaptureTypeChanged(); void exifPhotoFocalLengthChanged(); void exifPhotoFNumberChanged(); void exifPhotoLightSourceChanged(); void exifPhotoPixelXDimensionChanged(); void exifPhotoPixelYDimensionChanged(); void exifGPSChanged(); void iptcApplication2KeywordsChanged(); void iptcLocationChanged(); void iptcApplication2CopyrightChanged(); }; #endif // PQMETADATA_H photoqt-2.5/cplusplus/scripts/metadata.cpp000644 001750 001750 00000063243 14164671316 021436 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "metadata.h" PQMetaData::PQMetaData(QObject *parent) : QObject(parent) { m_validFile = true; m_fileSize = ""; m_dimensions = ""; m_exifImageMake = ""; m_exifImageModel = ""; m_exifImageSoftware = ""; m_exifPhotoDateTimeOriginal = ""; m_exifPhotoExposureTime = ""; m_exifPhotoFlash = ""; m_exifPhotoISOSpeedRatings = ""; m_exifPhotoSceneCaptureType = ""; m_exifPhotoFocalLength = ""; m_exifPhotoFNumber = ""; m_exifPhotoLightSource = ""; m_exifPhotoPixelXDimension = ""; m_exifPhotoPixelYDimension = ""; m_exifGPS = ""; m_iptcApplication2Keywords = ""; m_iptcLocation = ""; m_iptcApplication2Copyright = ""; } void PQMetaData::updateMetadata(QString path) { DBG << CURDATE << "PQMetaData::updateMetadata()" << NL << CURDATE << "** path = " << path.toStdString() << NL; if(path.contains("::PQT::")) path = path.split("::PQT::").at(1); if(path.contains("::ARC::")) path = path.split("::ARC::").at(1); QFileInfo info(path); if(!QFile(path).exists()) { LOG << CURDATE << "PQMetaData::updateMetadata(): ERROR: File does not exist" << NL; setValidFile(false); return; } setValidFile(true); setFileSize(QString("%1 KB").arg(info.size()/1024.0)); // Obtain dimensions (if supported by ImageReader) if(QImageReader::supportedImageFormats().contains(info.suffix().toLower().toUtf8())) { QSize s = QImageReader(path).size(); if(s.width() > 0 && s.height() > 0) setDimensions(QString("%1x%2").arg(s.width()).arg(s.height())); else setDimensions(""); } else setDimensions(""); // These formats are supported by exiv2 QStringList formats; formats << "jpeg" << "jpg" << "tif" << "tiff" << "png" << "psd" << "jpeg2000" << "jp2" << "j2k" << "jpc" << "jpf" << "jpx" << "jpm" << "mj2" << "bmp" << "bitmap" << "gif" << "tga"; if(!formats.contains(info.suffix().toLower())) { setExifImageMake(""); setExifImageModel(""); setExifImageSoftware(""); setExifPhotoDateTimeOriginal(""); setExifPhotoExposureTime(""); setExifPhotoFlash(""); setExifPhotoISOSpeedRatings(""); setExifPhotoSceneCaptureType(""); setExifPhotoFocalLength(""); setExifPhotoFNumber(""); setExifPhotoLightSource(""); setExifPhotoPixelXDimension(""); setExifPhotoPixelYDimension(""); setExifGPS(""); setIptcApplication2Keywords(""); setIptcLocation(""); setIptcApplication2Copyright(""); return; } #ifdef EXIV2 // Obtain METADATA #if EXIV2_TEST_VERSION(0, 28, 0) Exiv2::Image::UniquePtr image; #else Exiv2::Image::AutoPtr image; #endif try { image = Exiv2::ImageFactory::open(path.toStdString()); image->readMetadata(); } catch (Exiv2::Error& e) { LOG << CURDATE << "PQMetaData::updateMetadaya(): ERROR reading exiv data (caught exception): " << e.what() << NL; return; } /******************* * Obtain EXIF data * ********************/ Exiv2::ExifData exifData; try { exifData = image->exifData(); } catch(Exiv2::Error &e) { LOG << CURDATE << "PQMetaData::updateMetaData(): ERROR: Unable to read exif metadata: " << e.what() << NL; } try { Exiv2::ExifMetadata::const_iterator iter = exifData.findKey(Exiv2::ExifKey("Exif.Image.Make")); if(iter != exifData.end()) setExifImageMake(QString::fromStdString(Exiv2::toString(iter->value()))); else setExifImageMake(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setExifImageMake(""); } try { Exiv2::ExifMetadata::const_iterator iter = exifData.findKey(Exiv2::ExifKey("Exif.Image.Model")); if(iter != exifData.end()) setExifImageModel(QString::fromStdString(Exiv2::toString(iter->value()))); else setExifImageModel(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setExifImageModel(""); } try { Exiv2::ExifMetadata::const_iterator iter = exifData.findKey(Exiv2::ExifKey("Exif.Image.Software")); if(iter != exifData.end()) setExifImageSoftware(QString::fromStdString(Exiv2::toString(iter->value()))); else setExifImageSoftware(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setExifImageSoftware(""); } try { Exiv2::ExifMetadata::const_iterator iter = exifData.findKey(Exiv2::ExifKey("Exif.Photo.DateTimeOriginal")); if(iter != exifData.end()) setExifPhotoDateTimeOriginal(analyzeDateTimeOriginal(QString::fromStdString(Exiv2::toString(iter->value())))); else setExifPhotoDateTimeOriginal(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setExifPhotoDateTimeOriginal(""); } try { Exiv2::ExifMetadata::const_iterator iter = exifData.findKey(Exiv2::ExifKey("Exif.Photo.ExposureTime")); if(iter != exifData.end()) setExifPhotoExposureTime(analyzeExposureTime(QString::fromStdString(Exiv2::toString(iter->value())))); else setExifPhotoExposureTime(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setExifPhotoExposureTime(""); } try { Exiv2::ExifMetadata::const_iterator iter = exifData.findKey(Exiv2::ExifKey("Exif.Photo.Flash")); if(iter != exifData.end()) setExifPhotoFlash(analyzeFlash(QString::fromStdString(Exiv2::toString(iter->value())))); else setExifPhotoFlash(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setExifPhotoFlash(""); } try { Exiv2::ExifMetadata::const_iterator iter = exifData.findKey(Exiv2::ExifKey("Exif.Photo.ISOSpeedRatings")); if(iter != exifData.end()) setExifPhotoISOSpeedRatings(QString::fromStdString(Exiv2::toString(iter->value()))); else setExifPhotoISOSpeedRatings(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setExifPhotoISOSpeedRatings(""); } try { Exiv2::ExifMetadata::const_iterator iter = exifData.findKey(Exiv2::ExifKey("Exif.Photo.SceneCaptureType")); if(iter != exifData.end()) setExifPhotoSceneCaptureType(analyzeSceneCaptureType(QString::fromStdString(Exiv2::toString(iter->value())))); else setExifPhotoSceneCaptureType(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setExifPhotoSceneCaptureType(""); } try { Exiv2::ExifMetadata::const_iterator iter = exifData.findKey(Exiv2::ExifKey("Exif.Photo.FocalLength")); if(iter != exifData.end()) setExifPhotoFocalLength(analyzeFocalLength(QString::fromStdString(Exiv2::toString(iter->value())))); else setExifPhotoFocalLength(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setExifPhotoFocalLength(""); } try { Exiv2::ExifMetadata::const_iterator iter = exifData.findKey(Exiv2::ExifKey("Exif.Photo.FNumber")); if(iter != exifData.end()) setExifPhotoFNumber(analyzeFNumber(QString::fromStdString(Exiv2::toString(iter->value())))); else setExifPhotoFNumber(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setExifPhotoFNumber(""); } try { Exiv2::ExifMetadata::const_iterator iter = exifData.findKey(Exiv2::ExifKey("Exif.Photo.LightSource")); if(iter != exifData.end()) setExifPhotoLightSource(analyzeLightSource(QString::fromStdString(Exiv2::toString(iter->value())))); else setExifPhotoLightSource(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setExifPhotoLightSource(""); } try { Exiv2::ExifMetadata::const_iterator iter = exifData.findKey(Exiv2::ExifKey("Exif.Photo.PixelXDimension")); if(iter != exifData.end()) setExifPhotoPixelXDimension(QString::fromStdString(Exiv2::toString(iter->value()))); else setExifPhotoPixelXDimension(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setExifPhotoPixelXDimension(""); } try { Exiv2::ExifMetadata::const_iterator iter = exifData.findKey(Exiv2::ExifKey("Exif.Photo.PixelYDimension")); if(iter != exifData.end()) setExifPhotoPixelYDimension(QString::fromStdString(Exiv2::toString(iter->value()))); else setExifPhotoPixelYDimension(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setExifPhotoPixelYDimension(""); } QString gpsLatRef = "", gpsLat = "", gpsLonRef = "", gpsLon = ""; try { Exiv2::ExifMetadata::const_iterator iter = exifData.findKey(Exiv2::ExifKey("Exif.GPSInfo.GPSLatitudeRef")); if(iter != exifData.end()) gpsLatRef = QString::fromStdString(Exiv2::toString(iter->value())); iter = exifData.findKey(Exiv2::ExifKey("Exif.GPSInfo.GPSLatitude")); if(iter != exifData.end()) gpsLat = QString::fromStdString(Exiv2::toString(iter->value())); iter = exifData.findKey(Exiv2::ExifKey("Exif.GPSInfo.GPSLongitudeRef")); if(iter != exifData.end()) gpsLonRef = QString::fromStdString(Exiv2::toString(iter->value())); iter = exifData.findKey(Exiv2::ExifKey("Exif.GPSInfo.GPSLongitude")); if(iter != exifData.end()) gpsLon = QString::fromStdString(Exiv2::toString(iter->value())); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist } if(gpsLatRef != "" && gpsLat != "" && gpsLonRef != "" && gpsLon != "") setExifGPS(analyzeGPS(gpsLatRef, gpsLat, gpsLonRef, gpsLon)); else setExifGPS(""); /******************* * Obtain IPTC data * ********************/ Exiv2::IptcData iptcData; try { iptcData = image->iptcData(); } catch(Exiv2::Error &e) { LOG << CURDATE << "PQMetaData::updateMetaData(): ERROR: Unable to read iptc metadata: " << e.what() << NL; } try { Exiv2::IptcMetadata::const_iterator iter = iptcData.findKey(Exiv2::IptcKey("Iptc.Application2.Keywords")); if(iter != iptcData.end()) setIptcApplication2Keywords(QString::fromStdString(Exiv2::toString(iter->value()))); else setIptcApplication2Keywords(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setIptcApplication2Keywords(""); } QString city = "", country = ""; try { Exiv2::IptcMetadata::const_iterator iter = iptcData.findKey(Exiv2::IptcKey("Iptc.Application2.City")); if(iter != iptcData.end()) city = QString::fromStdString(Exiv2::toString(iter->value())); iter = iptcData.findKey(Exiv2::IptcKey("Iptc.Application2.CountryName")); if(iter != iptcData.end()) country = QString::fromStdString(Exiv2::toString(iter->value())); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist } if(city != "" && country != "") setIptcLocation(city + ", " + country); else if(city != "") setIptcLocation(city); else setIptcLocation(country); try { Exiv2::IptcMetadata::const_iterator iter = iptcData.findKey(Exiv2::IptcKey("Iptc.Application2.Copyright")); if(iter != iptcData.end()) setIptcApplication2Copyright(QString::fromStdString(Exiv2::toString(iter->value()))); else setIptcApplication2Copyright(""); } catch(Exiv2::Error &) { // ignore exception -> most likely thrown as key does not exist setIptcApplication2Copyright(""); } #endif } QString PQMetaData::analyzeDateTimeOriginal(const QString val) { DBG << CURDATE << "PQMetaData::analyzeDateTimeOriginal()" << NL << CURDATE << "** val = " << val.toStdString() << NL; QStringList split1 = val.split(" "); QStringList split2 = split1.at(0).split(":"); if(split1.length() > 1 && split2.length() > 2) return split2.at(2) + "/" + split2.at(1) + "/" + split2.at(0) + ", " + split1.at(1); return val; } QString PQMetaData::analyzeExposureTime(const QString val) { DBG << CURDATE << "PQMetaData::analyzeExposureTime()" << NL << CURDATE << "** val = " << val.toStdString() << NL; if(val.contains("/")) { QStringList split = val.split("/"); int t1 = split.at(0).toInt(); double t2 = split.at(1).split(" ").at(0).toDouble(); // I got a bug report of PhotoQt crashing for certain images that have an exposure time // of "1/0". So we have to check for it, or we get a division by zero, i.e., crash if(t1 == 0 || t2 == 0) return "0"; else if(t1 != 1) return QString("1/%2").arg(t2/t1); return QString("%1/%2").arg(t1).arg(t2); } return val; } QString PQMetaData::analyzeFlash(const QString val) { DBG << CURDATE << "PQMetaData::analyzeFlash()" << NL << CURDATE << "** val = " << val.toStdString() << NL; //: This string identifies that flash was fired, stored in image metadata QString fYes = tr("yes"); //: This string identifies that flash was not fired, stored in image metadata QString fNo = tr("no"); //: This string refers to the absense of a flash, stored in image metadata QString fNoFlash = tr("No flash function"); //: This string refers to a flash mode, stored in image metadata QString fNoStrobe = tr("strobe return light not detected"); //: This string refers to a flash mode, stored in image metadata QString fYesStrobe = tr("strobe return light detected"); //: This string refers to a flash mode, stored in image metadata QString fComp = tr("compulsory flash mode"); //: This string refers to a flash mode, stored in image metadata QString fAuto = tr("auto mode"); //: This string refers to a flash mode, stored in image metadata QString fRed = tr("red-eye reduction mode"); //: This string refers to a flash mode, stored in image metadata QString fYesReturn = tr("return light detected"); //: This string refers to a flash mode, stored in image metadata QString fNoReturn = tr("return light not detected"); if(val == "0") return fYes; else if(val == "1") return fNo; else if(val == "5") return fNoStrobe; else if(val == "6") return fYesStrobe; else if(val == "9") return fYes + " (" + fComp + ")"; else if(val == "13") return fYes + " (" + fComp + ", " + fNoReturn + ")"; else if(val == "15") return fYes + " (" + fComp + ", " + fYesReturn + ")"; else if(val == "16") return fNo + " (" + fComp + ")"; else if(val == "24") return fNo + " (" + fAuto + ")"; else if(val == "25") return fYes + " (" + fAuto + ")"; else if(val == "29") return fYes + " (" + fAuto + ", " + fNoReturn + ")"; else if(val == "31") return fYes + " (" + fAuto + ", " + fYesReturn + ")"; else if(val == "32") return fNoFlash; else if(val == "65") return fYes + " (" + fRed + ")"; else if(val == "69") return fYes + " (" + fRed + ", " + fNoReturn + ")"; else if(val == "71") return fYes + " (" + fRed + ", " + fYesReturn + ")"; else if(val == "73") return fYes + " (" + fComp + ", " + fRed + ")"; else if(val == "77") return fYes + " (" + fComp + ", " + fRed + ", " + fNoReturn + ")"; else if(val == "79") return fYes + " (" + fComp + ", " + fRed + ", " + fYesReturn + ")"; else if(val == "89") return fYes + " (" + fAuto + ", " + fRed + ")"; else if(val == "93") return fYes + " (" + fAuto + ", " + fNoReturn + ", " + fRed + ")"; else if(val == "95") return fYes + " (" + fAuto + ", " + fYesReturn + ", " + fRed + ")"; else //: This string refers to a flash mode, stored in image metadata return tr("Invalid flash") + " " + val; } QString PQMetaData::analyzeSceneCaptureType(const QString val) { DBG << CURDATE << "PQMetaData::analyzeSceneCaptureType()" << NL << CURDATE << "** val = " << val.toStdString() << NL; if(val == "0") //: This string refers to a type of scene, stored in image metadata return tr("Standard"); else if(val == "1") //: This string refers to a type of scene, stored in image metadata return tr("Landscape"); else if(val == "2") //: This string refers to a type of scene, stored in image metadata return tr("Portrait"); else if(val == "3") //: This string refers to a type of scene, stored in image metadata return tr("Night Scene"); else //: This string refers to a type of scene, stored in image metadata return tr("Invalid Scene Type") + " " + val; } QString PQMetaData::analyzeFocalLength(const QString val) { DBG << CURDATE << "PQMetaData::analyzeFocalLength()" << NL << CURDATE << "** val = " << val.toStdString() << NL; if(val.contains("/")) { QStringList split = val.split("/"); if(split.at(0) == "f") split.removeFirst(); if(split.length() == 2) return QString::number(split.at(0).toFloat()/split.at(1).toFloat()); } return val; } QString PQMetaData::analyzeFNumber(const QString val) { DBG << CURDATE << "PQMetaData::analyzeFNumber()" << NL << CURDATE << "** val = " << val.toStdString() << NL; if(val.contains("/")) { QStringList split = val.split("/"); if(split.at(0) == "f") split.removeFirst(); if(split.length() == 2) return QString::number(split.at(0).toFloat()/split.at(1).toFloat()); } return val; } QString PQMetaData::analyzeLightSource(const QString val) { DBG << CURDATE << "PQMetaData::analyzeLightSource()" << NL << CURDATE << "** val = " << val.toStdString() << NL; if(val == "0") //: This string refers to the light source stored in image metadata return tr("Unknown"); else if(val == "1") //: This string refers to the light source stored in image metadata return tr("Daylight"); else if(val == "2") //: This string refers to the light source stored in image metadata return tr("Fluorescent"); else if(val == "3") //: This string refers to the light source stored in image metadata return tr("Tungsten (incandescent light)"); else if(val == "4") //: This string refers to the light source stored in image metadata return tr("Flash"); else if(val == "9") //: This string refers to the light source stored in image metadata return tr("Fine weather"); else if(val == "10") //: This string refers to the light source stored in image metadata return tr("Cloudy Weather"); else if(val == "11") //: This string refers to the light source stored in image metadata return tr("Shade"); else if(val == "12") //: This string refers to the light source stored in image metadata return tr("Daylight fluorescent") + " (D 5700 - 7100K)"; else if(val == "13") //: This string refers to the light source stored in image metadata return tr("Day white fluorescent") + " (N 4600 - 5400K)"; else if(val == "14") //: This string refers to the light source stored in image metadata return tr("Cool white fluorescent") + " (W 3900 - 4500K)"; else if(val == "15") //: This string refers to the light source stored in image metadata return tr("White fluorescent") + " (WW 3200 - 3700K)"; else if(val == "17") //: This string refers to the light source stored in image metadata return tr("Standard light") + " A"; else if(val == "18") //: This string refers to the light source stored in image metadata return tr("Standard light") + " B"; else if(val == "19") //: This string refers to the light source stored in image metadata return tr("Standard light") + " C"; else if(val == "20") return "D55"; else if(val == "21") return "D65"; else if(val == "22") return "D75"; else if(val == "23") return "D50"; else if(val == "24") return "ISO studio tungsten"; else if(val == "255") //: This string refers to the light source stored in image metadata return tr("Other light source"); else //: This string refers to the light source stored in image metadata return tr("Invalid light source") + " " + val; } QString PQMetaData::analyzeGPS(QString latRef, QString lat, QString lonRef, QString lon) { DBG << CURDATE << "PQMetaData::analyzeGPS()" << NL << CURDATE << "** latRef = " << latRef.toStdString() << NL << CURDATE << "** lat = " << lat.toStdString() << NL << CURDATE << "** lonRef = " << lonRef.toStdString() << NL << CURDATE << "** lon = " << lon.toStdString() << NL; if(latRef == "") latRef = "N"; if(lonRef == "") lonRef = "E"; // Format the latitude string QStringList split = lat.split(" "); // Some photos have the GPS minutes stored as decimal. That needs to be converted into: // - Integer value for minute // - Decimal value *60 for seconds // This float holds the decimal value (if any) float calcSecs = 0; for(int i = 0; i < split.length(); ++i) { if(split.at(i).contains("/")) { float t1 = split.at(i).split("/").at(0).toFloat(); float t2 = split.at(i).split("/").at(1).toFloat(); float division = t1/t2; // If there's a decimal value... if(i == 1 && t2 > 1) { calcSecs = division-int(division); division = int(division); } split.replace(i,QString("%1").arg(division)); } else if(split.at(i) == "") split[i] = "0"; } // And calculate seconds and set them into third position if(calcSecs > 0 && split.length() >= 3) split.replace(2,QString::number(split.at(2).toFloat()+calcSecs*60)); if(split.length() == 3) lat = split.at(0) + "°" + split.at(1) + "'" + split.at(2) + "''"; else if(split.length() == 2) lat = split.at(0) + "°" + split.at(1) + "'0''"; else if(split.length() == 1) lat = split.at(0) + "°0'0''"; // Format the longitude string split = lon.split(" "); // See above for this float's role calcSecs = 0; for(int i = 0; i < split.length(); ++i) { if(split.at(i).contains("/")) { float t1 = split.at(i).split("/").at(0).toFloat(); float t2 = split.at(i).split("/").at(1).toFloat(); float division = t1/t2; // If there's a decimal value... if(i == 1 && t2 > 1) { calcSecs = division-int(division); division = int(division); } split.replace(i,QString("%1").arg(division)); } else if(split.at(i) == "") split[i] = "0"; } // And calculate seconds and set them into third position if(calcSecs > 0 && split.length() > 2) split.replace(2,QString::number(split.at(2).toFloat()+calcSecs*60)); if(split.length() == 3) lon = split.at(0) + "°" + split.at(1) + "'" + split.at(2) + "''"; else if(split.length() == 2) lon = split.at(0) + "°" + split.at(1) + "'0''"; else if(split.length() == 1) lon = split.at(0) + "°0'0''"; return lat + " " + latRef + ", " + lon + " " + lonRef; } photoqt-2.5/cplusplus/scripts/handlingwallpaper.h000644 001750 001750 00000004571 14164671322 023013 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQHANDLINGWALLPAPER_H #define PQHANDLINGWALLPAPER_H #include #include #include #include #include "../logger.h" class PQHandlingWallpaper : public QObject { Q_OBJECT public: Q_INVOKABLE bool checkEnlightenmentMsgbus(); Q_INVOKABLE bool checkEnlightenmentRemote(); Q_INVOKABLE bool checkFeh(); Q_INVOKABLE bool checkGSettings(); Q_INVOKABLE bool checkNitrogen(); Q_INVOKABLE bool checkXfce(); Q_INVOKABLE QString detectWM(); Q_INVOKABLE QList getEnlightenmentWorkspaceCount(); Q_INVOKABLE int getScreenCount(); Q_INVOKABLE void setWallpaper(QString category, QString filename, QVariantMap options); private: bool checkIfCommandExists(QString cmd, QStringList args, QString &out); }; #endif // PQHANDLINGWALLPAPER_H photoqt-2.5/cplusplus/scripts/handlingmanipulation.h000644 001750 001750 00000004701 14164671326 023523 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQHANDLINGMANIPULATION_H #define PQHANDLINGMANIPULATION_H #include #include #include #include #include "../logger.h" #include "../settings/imageformats.h" #include "../imageprovider/loader/loadimage_qt.h" #if defined(IMAGEMAGICK) || defined(GRAPHICSMAGICK) #include "../imageprovider/loader/loadimage_magick.h" #endif #ifdef EXIV2 #include #endif class PQHandlingManipulation : public QObject { Q_OBJECT public: Q_INVOKABLE bool canThisBeScaled(QString filename); Q_INVOKABLE int chooseLocationAndConvertImage(QString sourceFilename, QString targetFilename, QString targetEndings); Q_INVOKABLE QSize getCurrentImageResolution(QString filename); Q_INVOKABLE bool scaleImage(QString sourceFilename, bool scaleInPlace, QSize targetSize, int targetQuality); }; #endif // PQHANDLINGMANIPULATION_H photoqt-2.5/cplusplus/scripts/handlingwallpaper.cpp000644 001750 001750 00000030222 14164671270 023340 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "handlingwallpaper.h" bool PQHandlingWallpaper::checkEnlightenmentMsgbus() { DBG << CURDATE << "PQHandlingWallpaper::checkEnlightenmentMsgbus()" << NL; QString out; checkIfCommandExists("enlightenment_remote", QStringList() << "-module-list", out); return (out.contains("msgbus -- Enabled") ? 0 : 1); } bool PQHandlingWallpaper::checkEnlightenmentRemote() { DBG << CURDATE << "PQHandlingWallpaper::checkEnlightenmentRemote()" << NL; QString out; checkIfCommandExists("enlightenment_remote", QStringList() << "-h", out); return (out==""); } bool PQHandlingWallpaper::checkFeh() { DBG << CURDATE << "PQHandlingWallpaper::checkFeh()" << NL; QString out; checkIfCommandExists("feh", QStringList() << "--version", out); return (out==""); } bool PQHandlingWallpaper::checkGSettings() { DBG << CURDATE << "PQHandlingWallpaper::checkGSettings()" << NL; QString out; checkIfCommandExists("gsettings", QStringList() << "--version", out); return (out==""); } bool PQHandlingWallpaper::checkNitrogen() { DBG << CURDATE << "PQHandlingWallpaper::checkNitrogen()" << NL; QString out; checkIfCommandExists("nitrogen", QStringList() << "--version", out); return (out==""); } bool PQHandlingWallpaper::checkXfce() { DBG << CURDATE << "PQHandlingWallpaper::checkXfce()" << NL; QString out; checkIfCommandExists("xfconf-query", QStringList() << "--version", out); return (out==""); } bool PQHandlingWallpaper::checkIfCommandExists(QString cmd, QStringList args, QString &out) { DBG << CURDATE << "PQHandlingWallpaper::checkIfCommandExists()" << NL << CURDATE << "** cmd = " << cmd.toStdString() << NL << CURDATE << "** args = " << args.join(",").toStdString() << NL; QProcess proc; proc.setProcessChannelMode(QProcess::MergedChannels); proc.start(cmd, args); proc.waitForFinished(1000); out = proc.readAll(); int ret = proc.exitCode(); return (ret == 0); } QString PQHandlingWallpaper::detectWM() { DBG << CURDATE << "PQHandlingWallpaper::detectWM()" << NL; if(QString(getenv("KDE_FULL_SESSION")).toLower() == "true" && QString(getenv("KDE_SESSION_VERSION")).toLower() == "5") return "plasma"; else if(QString(getenv("DESKTOP_SESSION")).toLower() == "gnome" || QString(getenv("DESKTOP_SESSION")).toLower() == "unity" || QString(getenv("DESKTOP_SESSION")).toLower() == "ubuntu" || QString(getenv("DESKTOP_SESSION")).toLower() == "cinnamon") return "gnome"; else if(QString(getenv("XDG_CURRENT_DESKTOP")).toLower() == "xfce4" || QString(getenv("XDG_CURRENT_DESKTOP")).toLower() == "xfce") return "xfce"; else if(QString(getenv("DESKTOP_SESSION")).toLower() == "enlightenment") return "enlightenment"; else return "other"; } QList PQHandlingWallpaper::getEnlightenmentWorkspaceCount() { DBG << CURDATE << "PQHandlingWallpaper::getEnlightenmentWorkspaceCount()" << NL; QProcess proc; proc.setProcessChannelMode(QProcess::MergedChannels); proc.start("enlightenment_remote", QStringList() << "-desktops-get"); while(proc.waitForFinished()) {} QString out = proc.readAll(); int ret= proc.exitCode(); if(ret != 0) { LOG << CURDATE << "PQHandlingWallpaper::getEnlightenmentWorkspaceCount: ERROR: enlightenment_remote failed with return code " << ret << " - is Enlightenment installed and the DBUS module activated?" << NL; return {1,1}; } QStringList parts = out.trimmed().split(" "); if(parts.length() != 2) { LOG << CURDATE << "PQHandlingWallpaper::getEnlightenmentWorkspaceCount: ERROR: Failed to get proper workspace count! " << "Falling back to default (1x1)" << NL; return {1,1}; } return {parts.at(0).toInt(), parts.at(1).toInt()}; } int PQHandlingWallpaper::getScreenCount() { DBG << CURDATE << "PQHandlingWallpaper::getScreenCount()" << NL; return QApplication::screens().count(); } void PQHandlingWallpaper::setWallpaper(QString category, QString filename, QVariantMap options) { DBG << CURDATE << "PQHandlingWallpaper::setWallpaper()" << NL << CURDATE << "** category = " << category.toStdString() << NL << CURDATE << "** filename = " << filename.toStdString() << NL; if(category == "plasma") { QVariantList screens = options.value("screens").toList(); for(int i = 0; i < screens.length(); ++i) { QString arg = "string: " "var allDesktops = desktops(); " "for(i = 0; i < allDesktops.length; i++) {" "d = allDesktops[i];" "d.wallpaperPlugin = \"org.kde.image\"; " "d.currentConfigGroup = Array(\"Wallpaper\", \"org.kde.image\", \"General\"); " "d.writeConfig(\"Image\", \"file://" + filename + "\");" "}"; QDBusConnection bus = QDBusConnection::sessionBus(); QDBusInterface *interface = new QDBusInterface("org.kde.plasmashell", "/PlasmaShell", "org.kde.PlasmaShell", bus, this); interface->call("evaluateScript", arg); } } else if(category == "gnome") { QString opt = options.value("option").toString(); QProcess proc; int ret = proc.execute("gsettings", QStringList() << "set" << "org.gnome.desktop.background" << "picture-options" << opt); if(ret != 0) LOG << CURDATE << "PQHandlingWallpaper::setWallpaper: ERROR: gsettings failed with exit code " << ret << " - are you sure Gnome/Unity is installed?" << NL; else proc.execute("gsettings", QStringList() << "set" << "org.gnome.desktop.background" << "picture-uri" << QString("file://%1").arg(filename)); } else if(category == "xfce") { QString opt = options.value("option").toString(); QVariantList screens = options.value("screens").toList(); QProcess proc; proc.setProcessChannelMode(QProcess::MergedChannels); proc.start("xfconf-query", QStringList() << "-c" << "xfce4-desktop" << "-lv"); while(proc.waitForFinished(1000)) {} int ret = proc.exitCode(); if(ret != 0) { LOG << CURDATE << "PQHandlingWallpaper::setWallpaper: ERROR: xfconf-query failed with return code " << ret << " - is XFCE4 installed?" << NL; return; } const QStringList output = QString(proc.readAll()).split("\n"); // Filter out all the config paths that we need to adjust QStringList pathToSetImageTo; for(QString line : output) { // Correct line if(line.startsWith("/backdrop/screen0/monitor") && line.contains("/image-style")) { line = line.split("/image-style").at(0).trimmed(); bool ignore = true; // Check for screen for(int i = 0; i < screens.length(); ++i) { if(line.contains(QString("%1/workspace").arg(screens.at(i).toInt()-1))) { ignore = false; break; } } if(!ignore) pathToSetImageTo.append(line); } } for(int i = 0; i < pathToSetImageTo.length(); ++i) { QProcess setwallpaper; setwallpaper.execute("xfconf-query", QStringList() << "-c" << "xfce4-desktop" << "-p" << QString("%1/image-style").arg(pathToSetImageTo.at(i)) << "-s" << opt); setwallpaper.execute("xfconf-query", QStringList() << "-c" << "xfce4-desktop" << "-p" << QString("%1/last-image").arg(pathToSetImageTo.at(i)) << "-s" << filename); } } else if(category == "enlightenment") { QVariantList screens = options.value("screens").toList(); QVariantList workspaces = options.value("workspaces").toList(); // First we check if DBUS is enabled // (we could enable it automatically, however, the available options presented to the user might change depending on its output!) QProcess proc; proc.setProcessChannelMode(QProcess::MergedChannels); proc.start("enlightenment_remote", QStringList() << "-module-list"); while(proc.waitForFinished(1000)) {} int ret = proc.exitCode(); if(ret != 0) { LOG << CURDATE << "PQHandlingWallpaper::setWallpaper: ERROR: enlightenment_remote failed with return code " << ret << " - is Enlightenment installed?" << NL; return; } QString sep = "\n"; QStringList output = QString(proc.readAll()).split(QRegularExpression("(\\s*)"+sep+"(\\s*)")); if(!output.contains("msgbus -- Enabled")) { LOG << CURDATE << "PQHandlingWallpaper::setWallpaper: ERROR: Enlightenment module 'msgbus' doesn't seem to be loaded! Please fix that first..." << NL; return; } for(int i = 0; i < screens.length(); ++i) { for(int w = 0; w < workspaces.length(); ++w) { QString sep = "-"; QStringList w_parts = workspaces[w].toString().split(QRegularExpression("(\\s*)"+sep+"(\\s*)")); int w_col = w_parts[0].toInt()-1; int w_row = w_parts[1].toInt()-1; QProcess::execute("enlightenment_remote", QStringList() << "-desktop-bg-add" << "0" << QString::number(screens.at(i).toInt()-1) << QString::number(w_row) << QString::number(w_col) << filename); } } } else if(category == "other") { QString app = options.value("app").toString(); QString opt = options.value("option").toString(); if(app == "feh") { int ret = QProcess::execute("feh", QStringList() << opt << filename); if(ret != 0) LOG << CURDATE << "PQHandlingWallpaper::setWallpaper: ERROR: feh exited with return code " << ret << " - are you sure it is installed?" << NL; } else { int ret = QProcess::execute("nitrogen", QStringList() << opt << filename); if(ret != 0) LOG << CURDATE << "PQHandlingWallpaper::setWallpaper: ERROR: nitrogen exited with return code " << ret << " - are you sure it is installed?" << NL; } } else LOG << CURDATE << "PQHandlingWallpaper::setWallpaper: ERROR: Unknown window manager: " << category.toStdString() << NL; } photoqt-2.5/cplusplus/scripts/filewatcher.h000644 001750 001750 00000004666 14164671340 021621 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQFILEWATCHER_H #define PQFILEWATCHER_H #include #include #include #include #include #include "../configfiles.h" #include "../logger.h" class PQFileWatcher : public QObject { Q_OBJECT public: explicit PQFileWatcher(QObject *parent = nullptr); ~PQFileWatcher(); Q_INVOKABLE void setCurrentFile(QString file); private: QFileSystemWatcher *userPlacesWatcher; QFileSystemWatcher *contextmenuWatcher; QFileSystemWatcher *currentFileWatcher; QTimer *checkRepeatedly; QString currentFile; private Q_SLOTS: void userPlacesChangedSLOT(); void contextmenuChangedSLOT(); void currentFileChangedSLOT(); void checkRepeatedlyTimeout(); Q_SIGNALS: void userPlacesChanged(); void contextmenuChanged(); void currentFileChanged(); }; #endif // PQFILEWATCHER_H photoqt-2.5/cplusplus/scripts/localisation.h000644 001750 001750 00000006623 14164671264 022005 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQLOCALISATION_H #define PQLOCALISATION_H #include #include #include #include class PQLocalisation : public QObject { Q_OBJECT public: PQLocalisation(QObject *parent = nullptr) : QObject(parent) { trans = new QTranslator; } ~PQLocalisation() { delete trans; } Q_INVOKABLE void setLanguage(QString code) { if(!trans->isEmpty()) qApp->removeTranslator(trans); const QStringList allcodes = code.split("/"); for(const QString &c : allcodes) { if(QFile(":/photoqt_" + c + ".qm").exists()) { trans->load(":/photoqt_" + c); qApp->installTranslator(trans); Q_EMIT languageChanged(); return; } if(c.contains("_")) { const QString cc = c.split("_").at(0); if(QFile(":/photoqt_" + cc + ".qm").exists()) { trans->load(":/photoqt_" + cc); qApp->installTranslator(trans); Q_EMIT languageChanged(); return; } } else { const QString cc = QString("%1_%2").arg(c, c.toUpper()); if(QFile(":/photoqt_" + cc + ".qm").exists()) { trans->load(":/photoqt_" + cc); qApp->installTranslator(trans); Q_EMIT languageChanged(); return; } } } // no translator to be added // signal change (to English) Q_EMIT languageChanged(); } Q_PROPERTY(QString pty READ getPty NOTIFY languageChanged) QString getPty() { return ""; } private: QTranslator *trans; Q_SIGNALS: void languageChanged(); }; #endif // PQLOCALISATION_H photoqt-2.5/cplusplus/scripts/httpserver.cpp000644 001750 001750 00000006245 14164671266 022067 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "httpserver.h" #include #include #include #include void delayms( int millisecondsToWait ); PQHttpServer::PQHttpServer(QObject *parent) : QObject(parent) { server = new QTcpServer(this); // waiting for the web brower to make contact,this will emit signal connect(server, SIGNAL(newConnection()),this, SLOT(serve())); } PQHttpServer::~PQHttpServer() { if(server->isListening()) server->close(); } int PQHttpServer::start() { if(!server->listen(QHostAddress::Any,0)) LOG << CURDATE << "PQHTTPserver::PQHTTPserver(): ERROR: server unable to listen on automatic port" << NL; int count = 0; while(!server->isListening() && count < 10) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); ++count; } return server->serverPort(); } void PQHttpServer::stop() { server->close(); } void PQHttpServer::serve() { socket = server->nextPendingConnection(); QImage image(QString("%1/photoqtchromecast.jpg").arg(QDir::tempPath())); QByteArray data; QBuffer buffer(&data); buffer.open(QIODevice::WriteOnly); image.save(&buffer, "JPG"); QByteArray payload = "HTTP/1.0 200 Ok\n"; payload += "Content-Type: image/jpg\n"; payload += QString("Content-Length: %1\n\n").arg(data.size()).toUtf8(); payload += data; socket->write(payload); socket->waitForBytesWritten(); socket->flush(); connect(socket, SIGNAL(disconnected()),socket, SLOT(deleteLater())); socket->disconnectFromHost(); } bool PQHttpServer::isRunning() { return server->isListening(); } photoqt-2.5/cplusplus/scripts/imageproperties.cpp000644 001750 001750 00000007252 14164671265 023056 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "imageproperties.h" PQImageProperties::PQImageProperties(QObject *parent) : QObject(parent) { } bool PQImageProperties::isAnimated(QString path) { DBG << CURDATE << "PQImageProperties::isAnimated()" << NL << CURDATE << "** path = " << path.toStdString() << NL; QImageReader reader(path); return (reader.supportsAnimation()&&reader.imageCount()>1); } bool PQImageProperties::isPopplerDocument(QString path) { DBG << CURDATE << "PQImageProperties::isPopplerDocument()" << NL << CURDATE << "** path = " << path.toStdString() << NL; QString suf = QFileInfo(path).suffix().toLower(); const QStringList tmp = PQImageFormats::get().getEnabledFormatsPoppler(); for(const QString &f : tmp) { if(f == suf) return true; } return false; } bool PQImageProperties::isArchive(QString path) { DBG << CURDATE << "PQImageProperties::isArchive()" << NL << CURDATE << "** path = " << path.toStdString() << NL; QString suf = QFileInfo(path).suffix().toLower(); const QStringList tmp = PQImageFormats::get().getEnabledFormatsLibArchive(); for(const QString &f : tmp) { if(f == suf) return true; } return false; } bool PQImageProperties::isVideo(QString path) { DBG << CURDATE << "PQImageProperties::isVideo()" << NL << CURDATE << "** path = " << path.toStdString() << NL; QString suf = QFileInfo(path).suffix().toLower(); const QStringList tmp = PQImageFormats::get().getEnabledFormatsVideo(); for(const QString &f : tmp) { if(f == suf) return true; } return false; } int PQImageProperties::getDocumentPages(QString path) { DBG << CURDATE << "PQImageProperties::getDocumentPages()" << NL << CURDATE << "** path = " << path.toStdString() << NL; if(path.trimmed().isEmpty()) return 0; if(path.contains("::PQT::")) path = path.split("::PQT::").at(1); #ifdef POPPLER Poppler::Document* document = Poppler::Document::load(path); if(document && !document->isLocked()) return document->numPages(); #endif return 0; } photoqt-2.5/cplusplus/scripts/handlinggeneral.h000644 001750 001750 00000006762 14164671327 022452 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #ifndef PQHANDLINGGENERAL_H #define PQHANDLINGGENERAL_H #include #include #include #include #include #include #include #include #include "../imageprovider/imageproviderfull.h" #include "../logger.h" #include "../singleinstance/singleinstance.h" class PQHandlingGeneral : public QObject { Q_OBJECT public: Q_INVOKABLE bool amIOnWindows(); Q_INVOKABLE bool askForConfirmation(QString text, QString informativeText); Q_INVOKABLE void cleanUpScreenshotsTakenAtStartup(); Q_INVOKABLE QString convertBytesToHumanReadable(qint64 bytes); Q_INVOKABLE QVariantList convertHexToRgba(QString hex); Q_INVOKABLE QString convertRgbaToHex(QVariantList rgba); Q_INVOKABLE QString convertSecsToProperTime(int secs, int sameFormatsAsVal); Q_INVOKABLE void deleteLastLoadedImage(); Q_INVOKABLE QString escapeHTML(QString str); Q_INVOKABLE QStringList getAvailableTranslations(); Q_INVOKABLE QString getLastLoadedImage(); Q_INVOKABLE QString getQtVersion(); Q_INVOKABLE QString getUniqueId(); Q_INVOKABLE QString getVersion(); Q_INVOKABLE bool isChromecastEnabled(); Q_INVOKABLE bool isDevILSupportEnabled(); Q_INVOKABLE bool isFreeImageSupportEnabled(); Q_INVOKABLE bool isGraphicsMagickSupportEnabled(); Q_INVOKABLE bool isImageMagickSupportEnabled(); Q_INVOKABLE bool isLibRawSupportEnabled(); Q_INVOKABLE bool isLibArchiveSupportEnabled(); Q_INVOKABLE bool isPopplerSupportEnabled(); Q_INVOKABLE bool isVideoSupportEnabled(); Q_INVOKABLE void setLastLoadedImage(QString path); Q_INVOKABLE void setOverrideCursor(bool enabled); Q_INVOKABLE void storeQmlWindowMemoryAddress(QString objName); Q_INVOKABLE void setDefaultSettings(bool ignoreLanguage = false); private: PQImageProviderFull *imageprovider; QMimeDatabase mimedb; }; #endif // PQHandlingGeneral photoqt-2.5/cplusplus/scripts/simplecrypt.cpp000644 001750 001750 00000020023 14057627070 022215 0ustar00luspiluspi000000 000000 /* Copyright (c) 2011, Andre Somers All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the Rathenau Instituut, Andre Somers nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANDRE SOMERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #######; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Modified for use in PhotoQt by Lukas Spies. */ #include "../logger.h" #include "simplecrypt.h" #include #include #include #include #include SimpleCrypt::SimpleCrypt(): m_key(0), m_compressionMode(CompressionAuto), m_protectionMode(ProtectionChecksum), m_lastError(ErrorNoError) { #if QT_VERSION < QT_VERSION_CHECK(5, 10, 0) qsrand(uint(QDateTime::currentMSecsSinceEpoch() & 0xFFFF)); #else randgen.seed(uint(QDateTime::currentMSecsSinceEpoch() & 0xFFFF)); #endif } SimpleCrypt::SimpleCrypt(quint64 key): m_key(key), m_compressionMode(CompressionAuto), m_protectionMode(ProtectionChecksum), m_lastError(ErrorNoError) { #if QT_VERSION < QT_VERSION_CHECK(5, 10, 0) qsrand(uint(QDateTime::currentMSecsSinceEpoch() & 0xFFFF)); #else randgen.seed(uint(QDateTime::currentMSecsSinceEpoch() & 0xFFFF)); #endif splitKey(); } void SimpleCrypt::setKey(quint64 key) { m_key = key; splitKey(); } void SimpleCrypt::splitKey() { m_keyParts.clear(); m_keyParts.resize(8); for (int i=0;i<8;i++) { quint64 part = m_key; for (int j=i; j>0; j--) part = part >> 8; part = part & 0xff; m_keyParts[i] = static_cast(part); } } QByteArray SimpleCrypt::encryptToByteArray(const QString& plaintext) { QByteArray plaintextArray = plaintext.toUtf8(); return encryptToByteArray(plaintextArray); } QByteArray SimpleCrypt::encryptToByteArray(QByteArray plaintext) { if (m_keyParts.isEmpty()) { LOG << CURDATE << "SimpleCrypt::encryptToByteArray() :: ERROR: No key set." << NL; m_lastError = ErrorNoKeySet; return QByteArray(); } QByteArray ba = plaintext; CryptoFlags flags = CryptoFlagNone; if (m_compressionMode == CompressionAlways) { ba = qCompress(ba, 9); //maximum compression flags |= CryptoFlagCompression; } else if (m_compressionMode == CompressionAuto) { QByteArray compressed = qCompress(ba, 9); if (compressed.count() < ba.count()) { ba = compressed; flags |= CryptoFlagCompression; } } QByteArray integrityProtection; if (m_protectionMode == ProtectionChecksum) { flags |= CryptoFlagChecksum; QDataStream s(&integrityProtection, QIODevice::WriteOnly); s << qChecksum(ba.constData(), ba.length()); } else if (m_protectionMode == ProtectionHash) { flags |= CryptoFlagHash; QCryptographicHash hash(QCryptographicHash::Sha1); hash.addData(ba); integrityProtection += hash.result(); } //prepend a random char to the string #if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) char randomChar = char(randgen.generate() & 0xFF); #else char randomChar = char(qrand() & 0xFF); #endif ba = randomChar + integrityProtection + ba; int pos(0); char lastChar(0); int cnt = ba.count(); while (pos < cnt) { ba[pos] = ba.at(pos) ^ m_keyParts.at(pos % 8) ^ lastChar; lastChar = ba.at(pos); ++pos; } QByteArray resultArray; resultArray.append(char(0x03)); //version for future updates to algorithm resultArray.append(char(flags)); //encryption flags resultArray.append(ba); m_lastError = ErrorNoError; return resultArray; } QString SimpleCrypt::encryptToString(const QString& plaintext) { QByteArray plaintextArray = plaintext.toUtf8(); QByteArray cypher = encryptToByteArray(plaintextArray); QString cypherString = QString::fromLatin1(cypher.toBase64()); return cypherString; } QString SimpleCrypt::encryptToString(QByteArray plaintext) { QByteArray cypher = encryptToByteArray(plaintext); QString cypherString = QString::fromLatin1(cypher.toBase64()); return cypherString; } QString SimpleCrypt::decryptToString(const QString &cyphertext) { QByteArray cyphertextArray = QByteArray::fromBase64(cyphertext.toLatin1()); QByteArray plaintextArray = decryptToByteArray(cyphertextArray); QString plaintext = QString::fromUtf8(plaintextArray, plaintextArray.size()); return plaintext; } QString SimpleCrypt::decryptToString(QByteArray cypher) { QByteArray ba = decryptToByteArray(cypher); QString plaintext = QString::fromUtf8(ba, ba.size()); return plaintext; } QByteArray SimpleCrypt::decryptToByteArray(const QString& cyphertext) { QByteArray cyphertextArray = QByteArray::fromBase64(cyphertext.toLatin1()); QByteArray ba = decryptToByteArray(cyphertextArray); return ba; } QByteArray SimpleCrypt::decryptToByteArray(QByteArray cypher) { if (m_keyParts.isEmpty()) { LOG << CURDATE << "SimpleCrypt::decryptToByteArray() :: ERROR: No key set." << NL; m_lastError = ErrorNoKeySet; return QByteArray(); } QByteArray ba = cypher; if( cypher.count() < 3 ) return QByteArray(); char version = ba.at(0); if (version !=3) { //we only work with version 3 m_lastError = ErrorUnknownVersion; LOG << CURDATE << "SimpleCrypt::decryptToByteArray() :: ERROR: Invalid version or not a cyphertext." << NL; return QByteArray(); } CryptoFlags flags = CryptoFlags(ba.at(1)); ba = ba.mid(2); int pos(0); int cnt(ba.count()); char lastChar = 0; while (pos < cnt) { char currentChar = ba[pos]; ba[pos] = ba.at(pos) ^ lastChar ^ m_keyParts.at(pos % 8); lastChar = currentChar; ++pos; } ba = ba.mid(1); //chop off the random number at the start bool integrityOk(true); if (flags.testFlag(CryptoFlagChecksum)) { if (ba.length() < 2) { m_lastError = ErrorIntegrityFailed; return QByteArray(); } quint16 storedChecksum; { QDataStream s(&ba, QIODevice::ReadOnly); s >> storedChecksum; } ba = ba.mid(2); quint16 checksum = qChecksum(ba.constData(), ba.length()); integrityOk = (checksum == storedChecksum); } else if (flags.testFlag(CryptoFlagHash)) { if (ba.length() < 20) { m_lastError = ErrorIntegrityFailed; return QByteArray(); } QByteArray storedHash = ba.left(20); ba = ba.mid(20); QCryptographicHash hash(QCryptographicHash::Sha1); hash.addData(ba); integrityOk = (hash.result() == storedHash); } if (!integrityOk) { m_lastError = ErrorIntegrityFailed; return QByteArray(); } if (flags.testFlag(CryptoFlagCompression)) ba = qUncompress(ba); m_lastError = ErrorNoError; return ba; } photoqt-2.5/cplusplus/scripts/handlingfiledialog.cpp000644 001750 001750 00000051264 14164671304 023457 0ustar00luspiluspi000000 000000 /************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see . ** ** ** **************************************************************************/ #include "handlingfiledialog.h" void PQHandlingFileDialog::addNewUserPlacesEntry(QString path, int pos) { DBG << CURDATE << "PQHandlingFileDialog::addNewUserPlacesEntry()" << NL << CURDATE << "** path = " << path.toStdString() << NL << CURDATE << "** pos = " << pos << NL; #ifdef PUGIXML pugi::xml_document doc; pugi::xml_parse_result result = doc.load_file(QString(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel").toUtf8()); if(!result) { LOG << CURDATE << "PQHandlingFileDialog::addNewUserPlacesEntry(): ERROR: Unable to read user places. Either file doesn't exist (yet) or cannot be read..." << NL; return; } pugi::xpath_node_set bookmarks = doc.select_nodes("/xbel/bookmark"); QStringList allIds; for(pugi::xpath_node node : bookmarks) { pugi::xml_node cur = node.node(); QString path = cur.attribute("href").value(); if(path == "trash:/" || path.startsWith("file:/")) allIds.push_back(cur.select_node("info/metadata/ID").node().child_value()); } QString newid_base = QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch()); int counter = 0; while(allIds.contains(QString("%1/%2").arg(newid_base).arg(counter))) ++counter; // no items currenty set if(allIds.length() == 0) { pugi::xpath_node_set toplevel = doc.select_nodes("/xbel"); pugi::xml_node newnode = toplevel.first().node().append_child("bookmark"); if(newnode == nullptr) LOG << CURDATE << "PQHandlingFileDialog::addNewUserPlacesEntry(): ERROR: Unable to add first node..." << NL; // newnode.set_name("bookmark"); newnode.append_attribute("href"); newnode.attribute("href").set_value(QString("file://%1").arg(path).toStdString().c_str()); // pugi::xml_node title = newnode.append_child("title"); title.text().set(QFileInfo(path).fileName().toStdString().c_str()); // <info> pugi::xml_node info = newnode.append_child("info"); // <metadata> freedesktop.org pugi::xml_node metadata1 = info.append_child("metadata"); metadata1.append_attribute("owner"); metadata1.attribute("owner").set_value("http://freedesktop.org"); // <bookmark:icon> pugi::xml_node icon = metadata1.append_child("bookmark:icon"); icon.append_attribute("name"); icon.attribute("name").set_value("folder"); // <metadata> kde.org pugi::xml_node metadata2 = info.append_child("metadata"); metadata2.append_attribute("owner"); metadata2.attribute("owner").set_value("http://www.kde.org"); // <ID> pugi::xml_node ID = metadata2.append_child("ID"); ID.text().set(QString("%1/%2").arg(newid_base).arg(counter).toStdString().c_str()); // <IsHidden> pugi::xml_node IsHidden = metadata2.append_child("IsHidden"); IsHidden.text().set("false"); // <isSystemItem> pugi::xml_node isSystemItem = metadata2.append_child("isSystemItem"); isSystemItem.text().set("false"); } else { QString insertAfterId = allIds.length() == 0 ? "" : allIds[qMax(0, pos-2)]; for(pugi::xpath_node node : bookmarks) { pugi::xml_node cur = node.node(); if(insertAfterId == "" || cur.select_node("info/metadata/ID").node().child_value() == insertAfterId) { pugi::xml_node newnode = cur.parent().insert_child_after(pugi::node_element, cur); if(newnode == nullptr) LOG << CURDATE << "PQHandlingFileDialog::addNewUserPlacesEntry(): ERROR: Unable to add new node..." << NL; // <bookmark> newnode.set_name("bookmark"); newnode.append_attribute("href"); newnode.attribute("href").set_value(QString("file://%1").arg(path).toStdString().c_str()); // <title> pugi::xml_node title = newnode.append_child("title"); title.text().set(QFileInfo(path).fileName().toStdString().c_str()); // <info> pugi::xml_node info = newnode.append_child("info"); // <metadata> freedesktop.org pugi::xml_node metadata1 = info.append_child("metadata"); metadata1.append_attribute("owner"); metadata1.attribute("owner").set_value("http://freedesktop.org"); // <bookmark:icon> pugi::xml_node icon = metadata1.append_child("bookmark:icon"); icon.append_attribute("name"); icon.attribute("name").set_value("folder"); // <metadata> kde.org pugi::xml_node metadata2 = info.append_child("metadata"); metadata2.append_attribute("owner"); metadata2.attribute("owner").set_value("http://www.kde.org"); // <ID> pugi::xml_node ID = metadata2.append_child("ID"); ID.text().set(QString("%1/%2").arg(newid_base).arg(counter).toStdString().c_str()); // <IsHidden> pugi::xml_node IsHidden = metadata2.append_child("IsHidden"); IsHidden.text().set("false"); // <isSystemItem> pugi::xml_node isSystemItem = metadata2.append_child("isSystemItem"); isSystemItem.text().set("false"); break; } } } doc.save_file(QString(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel").toUtf8(), " "); #endif } QStringList PQHandlingFileDialog::getFoldersIn(QString path) { DBG << CURDATE << "PQHandlingFileDialog::getFoldersIn()" << NL << CURDATE << "** path = " << path.toStdString() << NL; QDir dir(path); dir.setFilter(QDir::Dirs|QDir::NoDotAndDotDot); return dir.entryList(); } QString PQHandlingFileDialog::getLastLocation() { DBG << CURDATE << "PQHandlingFileDialog::getLastLocation()" << NL; QString ret = QDir::currentPath(); QFile file(ConfigFiles::OPENFILE_LAST_LOCATION()); if(file.exists() && file.open(QIODevice::ReadOnly)) { QTextStream in(&file); ret = in.readAll().trimmed(); file.close(); } QDir folder(ret); if(folder.exists()) return ret; return QDir::homePath(); } unsigned int PQHandlingFileDialog::getNumberOfFilesInFolder(QString path) { // no debug statement here, this function is only and always called by the next function with the same name // cache key const QString key = QString("%1%2").arg(path,QFileInfo(path).lastModified().toString()); // if already loaded before, read from cache if(cacheNumberOfFilesInFolder.contains(key)) return cacheNumberOfFilesInFolder[key]; // fresh count of files in folder QDir dir(path); QStringList checkForTheseFormats; const QStringList lst = PQImageFormats::get().getEnabledFormats(); for(const QString &c : lst) checkForTheseFormats << QString("*.%1").arg(c); dir.setNameFilters(checkForTheseFormats); dir.setFilter(QDir::Files); const int count = dir.count(); cacheNumberOfFilesInFolder.insert(key, count); return count; } void PQHandlingFileDialog::getNumberOfFilesInFolder(QString path, const QJSValue &callback) { DBG << CURDATE << "PQHandlingFileDialog::getNumberOfFilesInFolder()" << NL << CURDATE << "** path = " << path.toStdString() << NL; auto *watcher = new QFutureWatcher<unsigned int>(this); QObject::connect(watcher, &QFutureWatcher<unsigned int>::finished, this, [this,watcher,callback]() { unsigned int count = watcher->result(); QJSValue cbCopy(callback); // needed as callback is captured as const QJSEngine *engine = qjsEngine(this); cbCopy.call(QJSValueList { engine->toScriptValue(count) }); watcher->deleteLater(); }); watcher->setFuture(QtConcurrent::run(this, &PQHandlingFileDialog::getNumberOfFilesInFolder, path)); } QVariantList PQHandlingFileDialog::getStorageInfo() { DBG << CURDATE << "PQHandlingFileDialog::getStorageInfo()" << NL; QVariantList ret; const QList<QStorageInfo> info = QStorageInfo::mountedVolumes(); for(const QStorageInfo &s : info) { if(s.isValid()) { QString name = s.name(); if(name == "") name = s.rootPath(); QVariantList vol; vol << name << s.bytesTotal() << QString(s.fileSystemType()) << s.rootPath(); ret.append(vol); } } return ret; } QString PQHandlingFileDialog::getNewUniqueId() { DBG << CURDATE << "PQHandlingFileDialog::getNewUniqueId()" << NL; #ifdef PUGIXML pugi::xml_document doc; pugi::xml_parse_result result = doc.load_file(QString(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel").toUtf8()); if(!result) { LOG << CURDATE << "PQHandlingFileDialog::getNewUniqueId(): ERROR: Unable to read user places. Either file doesn't exist (yet) or cannot be read..." << NL; return ""; } pugi::xpath_node_set bookmarks = doc.select_nodes("/xbel/bookmark"); QStringList allIds; for(pugi::xpath_node node : bookmarks) { pugi::xml_node cur = node.node(); QString curId = cur.select_node("info/metadata/ID").node().child_value(); QString curPath = cur.attribute("href").value(); if(curPath.startsWith("file:/") || curPath == "trash:/") allIds.append(curId); } QString newid_base = QString::number(QDateTime::currentSecsSinceEpoch()); int counter = 0; while(allIds.contains(QString("%1/%2").arg(newid_base).arg(counter))) ++counter; return QString("%1/%2").arg(newid_base).arg(counter); #endif return ""; } QVariantList PQHandlingFileDialog::getUserPlaces() { DBG << CURDATE << "PQHandlingFileDialog::getUserPlaces()" << NL; QVariantList ret; #ifdef PUGIXML // if file does not exist yet then we create a sceleton file if(!QFile(QString(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel")).exists()) { QString cont = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; cont += "<xbel xmlns:kdepriv=\"http://www.kde.org/kdepriv\" xmlns:mime=\"http://www.freedesktop.org/standards/shared-mime-info\" xmlns:bookmark=\"http://www.freedesktop.org/standards/desktop-bookmarks\">\n"; cont += "</xbel>"; QFile file(QString(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel")); if(file.open(QIODevice::WriteOnly)) { QTextStream out(&file); out << cont; file.close(); } } pugi::xml_document doc; pugi::xml_parse_result result = doc.load_file(QString(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel").toUtf8()); if(!result) { LOG << CURDATE << "PQHandlingFileDialog::getUserPlaces(): ERROR: Unable to read user places. Either file doesn't exist (yet) or cannot be read..." << NL; return ret; } bool docUpdated = false; pugi::xpath_node_set bookmarks = doc.select_nodes("/xbel/bookmark"); for(pugi::xpath_node node: bookmarks) { QVariantList entry; pugi::xml_node bm = node.node(); QString path = bm.attribute("href").value(); #ifdef Q_OS_WIN if(path.startsWith("file:///")) path = path.remove(0,8); else if(path.startsWith("file://")) path = path.remove(0,7); else if(path.startsWith("file:/")) path = path.remove(0,6); else continue; #else if(path.startsWith("file:///")) path = path.remove(0,7); else if(path.startsWith("file://")) path = path.remove(0,6); else if(path == "trash:/") path = ConfigFiles::GENERIC_DATA_DIR() + "/Trash/files"; else continue; #endif // name entry << bm.select_node("title").node().child_value(); // path entry << path; // icon entry << bm.select_node("info/metadata/bookmark:icon").node().attribute("name").value(); // id QString id = bm.select_node("info/metadata/ID").node().child_value(); // id doesn't exist (i.e., kde metadata part missing) if(id.isEmpty()) { id = getNewUniqueId(); pugi::xml_node info = bm.select_node("info").node(); // <metadata> kde.org pugi::xml_node metadata = info.append_child("metadata"); metadata.append_attribute("owner"); metadata.attribute("owner").set_value("http://www.kde.org"); // <ID> pugi::xml_node ID = metadata.append_child("ID"); ID.text().set(id.toStdString().c_str()); // <IsHidden> pugi::xml_node IsHidden = metadata.append_child("IsHidden"); IsHidden.text().set("false"); // <isSystemItem> pugi::xml_node isSystemItem = metadata.append_child("isSystemItem"); isSystemItem.text().set("false"); docUpdated = true; } entry << id; // hidden QString hidden = bm.select_node("info/metadata/IsHidden").node().child_value(); if(hidden.isEmpty()) hidden = "false"; entry << hidden; ret.append(entry); } if(docUpdated) doc.save_file(QString(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel").toUtf8(), " "); #endif return ret; } void PQHandlingFileDialog::hideUserPlacesEntry(QString id, bool hidden) { DBG << CURDATE << "PQHandlingFileDialog::hideUserPlacesEntry()" << NL << CURDATE << "** id = " << id.toStdString() << NL << CURDATE << "** hidden = " << hidden << NL; #ifdef PUGIXML pugi::xml_document doc; pugi::xml_parse_result result = doc.load_file(QString(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel").toUtf8()); if(!result) { LOG << CURDATE << "PQHandlingFileDialog::hideUserPlacesEntry(): ERROR: Unable to read user places. Either file doesn't exist (yet) or cannot be read..." << NL; return; } pugi::xpath_node_set bookmarks = doc.select_nodes("/xbel/bookmark"); for(pugi::xpath_node node : bookmarks) { pugi::xml_node cur = node.node(); QString curId = cur.select_node("info/metadata/ID").node().child_value(); if(curId == id) { if(QString(cur.select_node("info/metadata/IsHidden").node().child_value()) == "") { pugi::xml_node metadata = cur.select_node("info/metadata").node(); pugi::xml_node isHidden = metadata.append_child("IsHidden"); isHidden.text().set(hidden ? "true" : "false"); } else if(!cur.select_node("info/metadata/IsHidden").node().text().set(hidden ? "true" : "false")) LOG << CURDATE << "ERROR: Unable to hide/show item with id " << id.toStdString() << NL; break; } } doc.save_file(QString(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel").toUtf8(), " "); #endif } void PQHandlingFileDialog::moveUserPlacesEntry(QString id, bool moveDown, int howmany) { DBG << CURDATE << "PQHandlingFileDialog::moveUserPlacesEntry()" << NL << CURDATE << "** id = " << id.toStdString() << NL << CURDATE << "** moveDown = " << moveDown << NL << CURDATE << "** howmany = " << howmany << NL; #ifdef PUGIXML pugi::xml_document doc; pugi::xml_parse_result result = doc.load_file(QString(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel").toUtf8()); if(!result) { LOG << CURDATE << "PQHandlingFileDialog::moveUserPlacesEntry(): ERROR: Unable to read user places. Either file doesn't exist (yet) or cannot be read..." << NL; return; } pugi::xpath_node_set bookmarks = doc.select_nodes("/xbel/bookmark"); // first get a handle for this node QStringList allIds; for(pugi::xpath_node node : bookmarks) { pugi::xml_node cur = node.node(); QString curId = cur.select_node("info/metadata/ID").node().child_value(); QString curPath = cur.attribute("href").value(); if(curPath.startsWith("file:/") || curPath == "trash:/") allIds.append(curId); } for(pugi::xpath_node nodeToBeMoved : bookmarks) { pugi::xml_node cur = nodeToBeMoved.node(); QString curId = cur.select_node("info/metadata/ID").node().child_value(); if(id == curId) { QString targetId = ""; bool addAtBeginning = false; if(moveDown) targetId = allIds[qMin(allIds.length()-1, allIds.indexOf(id)+howmany)]; else { int newid =allIds.indexOf(id)-howmany-1; if(newid < 0) addAtBeginning = true; targetId = allIds[qMax(0, newid)]; } for(pugi::xpath_node targetNode : bookmarks) { QString curId = targetNode.node().select_node("info/metadata/ID").node().child_value(); if(curId == targetId) { pugi::xml_node ret; if(addAtBeginning) ret = targetNode.node().parent().insert_move_before(nodeToBeMoved.node(), targetNode.node()); else ret = targetNode.node().parent().insert_move_after(nodeToBeMoved.node(), targetNode.node()); if(ret == nullptr) LOG << CURDATE << "ERROR: Reordering items in user-places.xbel failed..." << NL; break; } } break; } } doc.save_file(QString(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel").toUtf8(), " "); #endif } void PQHandlingFileDialog::removeUserPlacesEntry(QString id) { DBG << CURDATE << "PQHandlingFileDialog::removeUserPlacesEntry()" << NL << CURDATE << "** id = " << id.toStdString() << NL; #ifdef PUGIXML pugi::xml_document doc; pugi::xml_parse_result result = doc.load_file(QString(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel").toUtf8()); if(!result) { LOG << CURDATE << "PQHandlingFileDialog::removeUserPlacesEntry(): ERROR: Unable to read user places. Either file doesn't exist (yet) or cannot be read..." << NL; return; } pugi::xpath_node_set bookmarks = doc.select_nodes("/xbel/bookmark"); for(pugi::xpath_node node : bookmarks) { pugi::xml_node cur = node.node(); QString curId = cur.select_node("info/metadata/ID").node().child_value(); if(curId == id) { if(!cur.parent().remove_child(cur)) LOG << CURDATE << "PQHandlingFileDialog::removeUserPlacesEntry(): ERROR: Unable to remove item with id " << id.toStdString() << NL; break; } } doc.save_file(QString(ConfigFiles::GENERIC_DATA_DIR() + "/user-places.xbel").toUtf8(), " "); #endif } void PQHandlingFileDialog::setLastLocation(QString path) { DBG << CURDATE << "PQHandlingFileDialog::setLastLocation()" << NL << CURDATE << "** path = " << path.toStdString() << NL; QFile file(ConfigFiles::OPENFILE_LAST_LOCATION()); if(file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { QTextStream out(&file); out << path; file.close(); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/handlingfacetags.cpp��������������������������������������������������000644 �001750 �001750 �00000024734 14164671305 023140� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #include "handlingfacetags.h" bool PQHandlingFaceTags::canWriteXmpTags(QString filename) { DBG << CURDATE << "PQHandlingFaceTags::canWriteXmpTags()" << NL << CURDATE << "** filename = " << filename.toStdString() << NL; QStringList supportedEndings; supportedEndings << "jpg" << "jpeg" << "exv" << "cr2" << "tif" << "tiff" << "webp" << "dng" << "net" << "pef" << "srw" << "orf" << "png" << "pgf" << "eps" << "xmp" << "psd" << "jp2"; return supportedEndings.contains(QFileInfo(filename).suffix().toLower()); } QVariantList PQHandlingFaceTags::getFaceTags(QString filename) { DBG << CURDATE << "PQHandlingFaceTags::getFaceTags()" << NL << CURDATE << "** filename = " << filename.toStdString() << NL; QVariantList ret; #ifdef EXIV2 if(filename.contains("::PQT::") || filename.contains("::ARC::")) return ret; #if EXIV2_TEST_VERSION(0, 28, 0) Exiv2::Image::UniquePtr image; #else Exiv2::Image::AutoPtr image; #endif try { image = Exiv2::ImageFactory::open(filename.toStdString()); image->readMetadata(); } catch (Exiv2::Error& e) { // An error code of 11 means image not supported. This is much more reliable than, e.g., checking a file ending if(e.code() != 11) LOG << CURDATE << "PQHandlingFaceTags::getFaceTags() - ERROR reading metadata (caught exception): " << e << NL; return ret; } // This will hold the data extracted from the metadata // It will be filtered again before returning to make sure the data is coherent QMap<QString, QMap<QString,QString> > facedata; try { // This data is stored in the XMP data Exiv2::XmpData &xmpData = image->xmpData(); for(Exiv2::XmpData::const_iterator it_xmp = xmpData.begin(); it_xmp != xmpData.end(); ++it_xmp) { QString familyName = QString::fromStdString(it_xmp->familyName()); QString groupName = QString::fromStdString(it_xmp->groupName()); QString tagName = QString::fromStdString(it_xmp->tagName()); // Find the right key pattern (part before index) if(familyName == "Xmp" && groupName == "MP" && tagName.startsWith("RegionInfo/MPRI:Regions[")) { // Remove beginning part (up to index) tagName = tagName.remove(0,QString("RegionInfo/MPRI:Regions[").length()); // Make sure this is data we are actually interested in if(tagName.contains("]/MPReg:")) { // Filter out index (usually starts at 1, increments by 1 for each tag) QString index = tagName.split("]/MPReg:").at(0); // If this item contains the rectangle data if(tagName.contains("MPReg:Rectangle")) { // Find the four values specifying the rectangle: x, y, width, height QString value = QString::fromStdString(Exiv2::toString(it_xmp->value())); QStringList pos = value.split(","); // If all the data is there, store data if(pos.length() == 4) { facedata[index].insert("x",pos.at(0).trimmed()); facedata[index].insert("y",pos.at(1).trimmed()); facedata[index].insert("w",pos.at(2).trimmed()); facedata[index].insert("h",pos.at(3).trimmed()); } // If this item contains the person's name } else if(tagName.contains("MPReg:PersonDisplayName")) // Store person's name facedata[index].insert("name", QString::fromStdString(Exiv2::toString(it_xmp->value()))); } } } } catch(Exiv2::Error& e) { LOG << CURDATE << "PQHandlingFaceTags::getFaceTags() - ERROR analyzing metadata (caught exception): " << e.what() << NL; return ret; } // Loop over all the extracted data QMapIterator<QString,QMap<QString,QString> > iter(facedata); while(iter.hasNext()) { iter.next(); // If we found all the information we need: x, y, width, height, name if(iter.value().keys().contains("x") && iter.value().keys().contains("y") && iter.value().keys().contains("w") && iter.value().keys().contains("h") && iter.value().keys().contains("name")) { // Store data in return list ret.append(iter.key()); ret.append(iter.value()["x"]); ret.append(iter.value()["y"]); ret.append(iter.value()["w"]); ret.append(iter.value()["h"]); ret.append(iter.value()["name"]); } } #endif // Done :) return ret; } void PQHandlingFaceTags::setFaceTags(QString filename, QVariantList tags) { DBG << CURDATE << "PQHandlingFaceTags::setFaceTags()" << NL << CURDATE << "** filename = " << filename.toStdString() << NL; if(!canWriteXmpTags(filename)) return; #ifdef EXIV2 try { // Open image for exif reading #if EXIV2_TEST_VERSION(0, 28, 0) Exiv2::Image::UniquePtr xmpImage = Exiv2::ImageFactory::open(filename.toStdString()); #else Exiv2::Image::AutoPtr xmpImage = Exiv2::ImageFactory::open(filename.toStdString()); #endif if(xmpImage.get() != 0) { // read exif xmpImage->readMetadata(); Exiv2::XmpData &xmpDataOld = xmpImage->xmpData(); xmpImage->clearXmpData(); Exiv2::XmpData xmpDataNew; // we first need to remove already existing data before replacing it with the new stuff for(Exiv2::XmpData::const_iterator it_xmp = xmpDataOld.begin(); it_xmp != xmpDataOld.end(); ++it_xmp) { QString key = QString::fromStdString(it_xmp->key()); if(!key.startsWith("Xmp.MP.RegionInfo")) { xmpDataNew.add(Exiv2::XmpKey(it_xmp->key()), &it_xmp->value()); } } // The intro node #if EXIV2_TEST_VERSION(0, 28, 0) Exiv2::Value::UniquePtr regioninfo = Exiv2::Value::create(Exiv2::xmpText); #else Exiv2::Value::AutoPtr regioninfo = Exiv2::Value::create(Exiv2::xmpText); #endif regioninfo->read("type=\"Struct\""); xmpDataNew.add(Exiv2::XmpKey("Xmp.MP.RegionInfo"), regioninfo.get()); // Start of 'Bag' #if EXIV2_TEST_VERSION(0, 28, 0) Exiv2::Value::UniquePtr arrayStart = Exiv2::Value::create(Exiv2::xmpText); #else Exiv2::Value::AutoPtr arrayStart = Exiv2::Value::create(Exiv2::xmpText); #endif arrayStart->read("type=\"Bag\""); xmpDataNew.add(Exiv2::XmpKey("Xmp.MP.RegionInfo/MPRI:Regions"), arrayStart.get()); // Loop over the passed on value for(int i = 0; i < tags.length()/6; ++i) { // First: This is a struct #if EXIV2_TEST_VERSION(0, 28, 0) Exiv2::XmpTextValue::UniquePtr arrayOne(new Exiv2::XmpTextValue); #else Exiv2::XmpTextValue::AutoPtr arrayOne(new Exiv2::XmpTextValue); #endif arrayOne->read("type=\"Struct\""); xmpDataNew.add(Exiv2::XmpKey(QString("Xmp.MP.RegionInfo/MPRI:Regions[%1]").arg(i+1).toStdString()), arrayOne.get()); // Second: This is the rectangle where the face is located #if EXIV2_TEST_VERSION(0, 28, 0) Exiv2::XmpTextValue::UniquePtr arrayTwo(new Exiv2::XmpTextValue); #else Exiv2::XmpTextValue::AutoPtr arrayTwo(new Exiv2::XmpTextValue); #endif arrayTwo->read(QString("%1, %2, %3, %4").arg(tags[6*i+1].toString(), tags[6*i+2].toString(), tags[6*i+3].toString(), tags[6*i+4].toString()).toStdString()); xmpDataNew.add(Exiv2::XmpKey(QString("Xmp.MP.RegionInfo/MPRI:Regions[%1]/MPReg:Rectangle").arg(i+1).toStdString()), arrayTwo.get()); // Third: This is the name of the person #if EXIV2_TEST_VERSION(0, 28, 0) Exiv2::XmpTextValue::UniquePtr arrayThree(new Exiv2::XmpTextValue); #else Exiv2::XmpTextValue::AutoPtr arrayThree(new Exiv2::XmpTextValue); #endif arrayThree->read(tags[6*i+5].toString().toStdString()); xmpDataNew.add(Exiv2::XmpKey(QString("Xmp.MP.RegionInfo/MPRI:Regions[%1]/MPReg:PersonDisplayName").arg(i+1).toStdString()), arrayThree.get()); } // and write XMP metadata xmpImage->setXmpData(xmpDataNew); xmpImage->writeMetadata(); } } catch(Exiv2::Error& e) { LOG << CURDATE << "PQHandlingFaceTags::setFaceTags() - ERROR writing face tags (caught exception): " << e.what() << NL; return; } #endif } ������������������������������������photoqt-2.5/cplusplus/scripts/httpserver.h����������������������������������������������������������000644 �001750 �001750 �00000004071 14164671321 021517� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #ifndef PQHTTPSERVER_H #define PQHTTPSERVER_H #include <QNetworkInterface> #include <QObject> #include <QTcpSocket> #include <QTcpServer> #include "../logger.h" class PQHttpServer : public QObject { Q_OBJECT public: explicit PQHttpServer(QObject *parent = 0); ~PQHttpServer(); QTcpSocket *socket ; bool isRunning(); public Q_SLOTS: void serve(); int start(); void stop(); private: qint64 bytesAvailable() const; QTcpServer *server; }; #endif // PQHTTPSERVER_H �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/handlingshortcuts.cpp�������������������������������������������������000644 �001750 �001750 �00000022111 14164671272 023407� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #include "handlingshortcuts.h" QString PQHandlingShortcuts::composeDisplayString(QString combo) { DBG << CURDATE << "PQHandlingShortcuts::composeDisplayString()" << NL << CURDATE << "** combo = " << combo.toStdString() << NL; QString ret; if(combo.startsWith("Left Button+") || combo.startsWith("Middle Button+") || combo.startsWith("Right Button+")) { QStringList p = combo.split("+"); ret = p[0] + " + "; #if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)) QStringList dir = p[1].split("", Qt::SkipEmptyParts); #else QStringList dir = p[1].split("", QString::SkipEmptyParts); #endif ret += dir.join("-"); } else if(combo.contains("+")) ret = combo.split("+").join(" + "); else ret = combo; if(ret == "") return "..."; return ret; } QString PQHandlingShortcuts::composeString(Qt::KeyboardModifiers mods, Qt::Key keys) { DBG << CURDATE << "PQHandlingShortcuts::composeString()" << NL; QString combostring = ""; if(mods & Qt::ControlModifier) combostring += "Ctrl+"; if(mods & Qt::AltModifier) combostring += "Alt+"; if(mods & Qt::ShiftModifier) combostring += "Shift+"; if(mods & Qt::MetaModifier) combostring += "Meta+"; if(mods & Qt::KeypadModifier) combostring += "Keypad+"; switch(keys) { case Qt::Key_Control: case Qt::Key_Alt: case Qt::Key_Shift: case Qt::Key_Meta: break; case Qt::Key_Escape: combostring += "Escape"; break; case Qt::Key_Right: combostring += "Right"; break; case Qt::Key_Left: combostring += "Left"; break; case Qt::Key_Up: combostring += "Up"; break; case Qt::Key_Down: combostring += "Down"; break; case Qt::Key_Space: combostring += "Space"; break; case Qt::Key_Delete: combostring += "Delete"; break; case Qt::Key_Home: combostring += "Home"; break; case Qt::Key_End: combostring += "End"; break; case Qt::Key_PageUp: combostring += "Page Up"; break; case Qt::Key_PageDown: combostring += "Page Down"; break; case Qt::Key_Insert: combostring += "Insert"; break; case Qt::Key_Tab: combostring += "Tab"; break; case Qt::Key_Backtab: combostring += "Tab"; break; case Qt::Key_Return: combostring += "Return"; break; case Qt::Key_Enter: combostring += "Enter"; break; case Qt::Key_Pause: combostring += "Pause"; break; case Qt::Key_Print: combostring += "Print"; break; case Qt::Key_SysReq: combostring += "SysReq"; break; case Qt::Key_Clear: combostring += "Clear"; break; case Qt::Key_CapsLock: combostring += "CapsLock"; break; case Qt::Key_NumLock: combostring += "NumLock"; break; case Qt::Key_ScrollLock: combostring += "ScrollLock"; break; case Qt::Key_Super_L: combostring += "Super L"; break; case Qt::Key_Super_R: combostring += "Super R"; break; case Qt::Key_Menu: combostring += "Menu"; break; case Qt::Key_Hyper_L: combostring += "Hyper L"; break; case Qt::Key_Hyper_R: combostring += "Hyper R"; break; case Qt::Key_Help: combostring += "Help"; break; case Qt::Key_Direction_L: combostring += "Direction L"; break; case Qt::Key_Direction_R: combostring += "Direction R"; break; case Qt::Key_F1: combostring += "F1"; break; case Qt::Key_F2: combostring += "F2"; break; case Qt::Key_F3: combostring += "F3"; break; case Qt::Key_F4: combostring += "F4"; break; case Qt::Key_F5: combostring += "F5"; break; case Qt::Key_F6: combostring += "F6"; break; case Qt::Key_F7: combostring += "F7"; break; case Qt::Key_F8: combostring += "F8"; break; case Qt::Key_F9: combostring += "F9"; break; case Qt::Key_F10: combostring += "F10"; break; case Qt::Key_F11: combostring += "F11"; break; case Qt::Key_F12: combostring += "F12"; break; case Qt::Key_F13: combostring += "F13"; break; case Qt::Key_F14: combostring += "F14"; break; case Qt::Key_F15: combostring += "F15"; break; case Qt::Key_F16: combostring += "F16"; break; case Qt::Key_F17: combostring += "F17"; break; case Qt::Key_F18: combostring += "F18"; break; case Qt::Key_F19: combostring += "F19"; break; case Qt::Key_F20: combostring += "F20"; break; case Qt::Key_F21: combostring += "F21"; break; case Qt::Key_F22: combostring += "F22"; break; case Qt::Key_F23: combostring += "F23"; break; case Qt::Key_F24: combostring += "F24"; break; case Qt::Key_F25: combostring += "F25"; break; case Qt::Key_F26: combostring += "F26"; break; case Qt::Key_F27: combostring += "F27"; break; case Qt::Key_F28: combostring += "F28"; break; case Qt::Key_F29: combostring += "F29"; break; case Qt::Key_F30: combostring += "F30"; break; case Qt::Key_F31: combostring += "F31"; break; case Qt::Key_F32: combostring += "F32"; break; case Qt::Key_F33: combostring += "F33"; break; case Qt::Key_F34: combostring += "F34"; break; case Qt::Key_F35: combostring += "F35"; break; default: { if(QKeySequence(keys).toString() != "") combostring += QKeySequence(keys).toString(); } } return combostring; } int PQHandlingShortcuts::convertCharacterToKeyCode(QString key) { DBG << CURDATE << "PQHandlingShortcuts::convertCharacterToKeyCode()" << NL << CURDATE << "** key = " << key.toStdString() << NL; return QKeySequence(key)[0]; } QString PQHandlingShortcuts::convertKeyCodeToText(int id) { DBG << CURDATE << "PQHandlingShortcuts::convertKeyCodeToText()" << NL << CURDATE << "** id = " << id << NL; QString ret = QKeySequence(id).toString(); if(ret == "Esc") ret = "Escape"; // Up to v1.7.1 'Escape' was used so we should stick to that if(ret == "Del") ret = "Delete"; return ret; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/handlingshareimgur.h��������������������������������������������������000644 �001750 �001750 �00000011304 14164671325 023165� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #ifndef PQHANDLINGSHAREIMGUR_H #define PQHANDLINGSHAREIMGUR_H #include <QObject> #include <QFileInfo> #include <QDir> #include <QNetworkReply> #include <thread> #include <QEventLoop> #include <QTimer> #include <iostream> #include <QNetworkInterface> #include <QRegExpValidator> #include <QSysInfo> #include "../logger.h" #include "../configfiles.h" #include "simplecrypt.h" #include "replytimeout.h" class PQHandlingShareImgur : public QObject { Q_OBJECT public: enum Code { IMGUR_NOERROR = 0, IMGUR_FILENAME_ERROR, IMGUR_FILE_OPEN_ERROR, IMGUR_FILE_REMOVE_ERROR, IMGUR_DECRYPTION_ERROR, IMGUR_NETWORK_TIMEOUT, IMGUR_NETWORK_REPLY_ERROR, IMGUR_ACCESS_TOKEN_ERROR, IMGUR_CLIENT_ID_SECRET_ERROR, IMGUR_DELETION_ERROR, IMGUR_NOT_CONNECTED_TO_INET, IMGUR_OTHER_ERROR}; Q_ENUM(Code) explicit PQHandlingShareImgur(QObject *parent = 0); ~PQHandlingShareImgur(); Q_INVOKABLE bool checkIfConnectedToInternet(); // three public upload function Q_INVOKABLE int upload(QString filename); Q_INVOKABLE int anonymousUpload(QString filename); Q_INVOKABLE int deleteImage(QString hash); // Authenticate with an account or forget existing authentication Q_INVOKABLE int authAccount(); Q_INVOKABLE int forgetAccount(); Q_INVOKABLE QString getAccountUsername() { return account_name; } Q_INVOKABLE bool isAuthenticated() { return account_name!=""; } Q_INVOKABLE QString getAuthDateTime(); // The following function return the URL for obtaining a pin code Q_INVOKABLE QString authorizeUrlForPin(); // The following function takes a pin and exchanges it for an access_token and refresh_token Q_INVOKABLE int authorizeHandlePin(QByteArray pin); // Abort all network operations Q_INVOKABLE void abort(); private: // NetworkManager handling requests QNetworkAccessManager *networkManager; // Store the access stuff QString access_token; QString refresh_token; QString account_name; // This data is read in from the server, not stored locally! QString imgurClientID; QString imgurClientSecret; // Request the client id/secret from user int obtainClientIdSecret(); // Location where to store local file containing access_/refresh_token QString imgurLocalConfigFilename; // An encryption handler SimpleCrypt crypt; bool debug; private Q_SLOTS: // functions to connect to an account. the *_request function sets the whole thing in motion int saveAccessRefreshTokenUserName(QString filename); // receive feedback from the upload/connecting handler void uploadProgress(qint64 bytesSent, qint64 bytesTotal); void uploadError(QNetworkReply::NetworkError err); void uploadFinished(); Q_SIGNALS: // signal percentage of upload completed void imgurUploadProgress(double perc); void imgurImageUrl(QString url); void imgurDeleteHash(QString url); void imgurUploadError(QNetworkReply::NetworkError err); void abortAllRequests(); void finished(); }; #endif // PQHANDLINGSHAREIMGUR_H ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/handlingfiledialog.h��������������������������������������������������000644 �001750 �001750 �00000005555 14164671333 023130� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #ifndef PQHANDLINGFILEDIALOG_H #define PQHANDLINGFILEDIALOG_H #include <QObject> #include <QXmlStreamWriter> #include <QStorageInfo> #include <QUrl> #include <QFutureWatcher> #include <QJSValue> #include <QJSEngine> #include <QtConcurrent/QtConcurrent> #include <QDomDocument> #ifdef PUGIXML #include <pugixml.hpp> #endif #include <QMimeDatabase> #include <QKeySequence> #include "../logger.h" #include "../settings/imageformats.h" #include "../settings/settings.h" class PQHandlingFileDialog : public QObject { Q_OBJECT public: Q_INVOKABLE void addNewUserPlacesEntry(QString path, int pos); Q_INVOKABLE QStringList getFoldersIn(QString path); Q_INVOKABLE QString getLastLocation(); unsigned int getNumberOfFilesInFolder(QString path); Q_INVOKABLE void getNumberOfFilesInFolder(QString path, const QJSValue &callback); Q_INVOKABLE QVariantList getStorageInfo(); QString getNewUniqueId(); Q_INVOKABLE QVariantList getUserPlaces(); Q_INVOKABLE void hideUserPlacesEntry(QString id, bool hidden); Q_INVOKABLE void moveUserPlacesEntry(QString id, bool moveDown, int howmany); Q_INVOKABLE void removeUserPlacesEntry(QString id); Q_INVOKABLE void setLastLocation(QString path); private: QHash<QString,int> cacheNumberOfFilesInFolder; }; #endif // PQHANDLINGFILEDIALOG_H ���������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/handlingfacetags.h����������������������������������������������������000644 �001750 �001750 �00000003766 14164671334 022611� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #ifndef PQHANDLINGFACETAGS_H #define PQHANDLINGFACETAGS_H #include <QObject> #include "../logger.h" #ifdef EXIV2 #include <exiv2/exiv2.hpp> #endif class PQHandlingFaceTags : public QObject { Q_OBJECT public: Q_INVOKABLE bool canWriteXmpTags(QString filename); Q_INVOKABLE QVariantList getFaceTags(QString filename); Q_INVOKABLE void setFaceTags(QString filename, QVariantList tags); }; #endif // PQHANDLINGFACETAGS_H ����������photoqt-2.5/cplusplus/scripts/handlingchromecast.cpp������������������������������������������������000644 �001750 �001750 �00000033347 14165350766 023521� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #include "handlingchromecast.h" #include <QtDebug> #include <QFutureWatcher> PQHandlingChromecast::PQHandlingChromecast(QObject *parent) : QObject(parent) { #ifdef CHROMECAST server = new PQHttpServer; currentFriendlyName = ""; chromecastModuleName = QString("%1/photoqt_chromecast.py").arg(QDir::tempPath()); if(QFile::exists(chromecastModuleName)) QFile::remove(chromecastModuleName); if(!QFile::copy(":/chromecast.py", chromecastModuleName)) LOG << CURDATE << "PQHandlingStreaming::PQHandlingStreaming(): Unable to make chromecast module accessible" << NL; watcher = nullptr; imageprovider = nullptr; Py_Initialize(); chromecastCast = new PQPyObject; chromecastServices = new PQPyObject; chromecastBrowser = new PQPyObject; chromecastMediaController = new PQPyObject; triedReconnectingAfterDisconnect = 0; #endif } PQHandlingChromecast::~PQHandlingChromecast() { #ifdef CHROMECAST delete server; if(watcher != nullptr) { if(watcher->isRunning()) { watcher->cancel(); LOG << "Waiting for Chromecast connection to terminate..." << NL; watcher->waitForFinished(); } delete watcher; } delete chromecastCast; delete chromecastServices; delete chromecastBrowser; delete chromecastMediaController; #if PY_MINOR_VERSION < 10 Py_FinalizeEx(); #endif if(!QFile::remove(chromecastModuleName)) LOG << CURDATE << "PQHandlingStreaming::~PQHandlingStreaming: Unable to remove chromecast module file" << NL; #endif } void PQHandlingChromecast::getListOfChromecastDevices() { #ifdef CHROMECAST if(!QFile::exists(QString("%1/photoqt_chromecast.py").arg(QDir::tempPath()))) return; if(watcher != nullptr) delete watcher; watcher = new QFutureWatcher<QVariantList>(this); QObject::connect(watcher, &QFutureWatcher<QVariantList>::finished, this, [=]() { QVariantList devices = watcher->result(); if(devices.length() > 0) { *chromecastServices = devices[0].value<PQPyObject>(); Q_EMIT updatedListChromecast(devices.mid(1)); } else Q_EMIT updatedListChromecast(QVariantList()); }); watcher->setFuture(QtConcurrent::run(&PQHandlingChromecast::_getListOfChromecastDevices)); connect(this, &PQHandlingChromecast::cancelScan, watcher, &QFutureWatcher<QVariantList>::cancel); #endif } QVariantList PQHandlingChromecast::_getListOfChromecastDevices() { QVariantList ret; #ifdef CHROMECAST PyObject *sys_path = PySys_GetObject("path"); if(PyList_Append(sys_path, PyUnicode_FromString(QDir::tempPath().toStdString().c_str())) == -1) { LOG << CURDATE << "PQHandlingChromecast::_getListOfChromecastDevices(): Python error: Unable to append temp path to sys path" << NL; return ret; } PQPyObject pModule = PyImport_ImportModule("photoqt_chromecast"); if(PQPyObject::catchEx("PQHandlingChromecast::_getListOfChromecastDevices() 1")) return ret; PQPyObject funcGetAvailable = PyObject_GetAttrString(pModule, "getAvailable"); if(PQPyObject::catchEx("PQHandlingChromecast::_getListOfChromecastDevices() 2")) return ret; PQPyObject services_count = PyObject_CallFunction(funcGetAvailable, NULL); if(PQPyObject::catchEx("PQHandlingChromecast::_getListOfChromecastDevices() 3")) return ret; PQPyObject count = PyList_GetItem(services_count, 0); if(PQPyObject::catchEx("PQHandlingChromecast::_getListOfChromecastDevices() 4")) return ret; PQPyObject services = PyList_GetItem(services_count, 1); if(PQPyObject::catchEx("PQHandlingChromecast::_getListOfChromecastDevices() 5")) return ret; int c = PyLong_AsSize_t(count); if(c == 0) return ret; // the first one is a pychromecast variable // since this is static we need to wrap it into the return type // as we do not have access to global class variables as easily ret.push_back(QVariant::fromValue(services)); PQPyObject funcGetNames = PyObject_GetAttrString(pModule, "getNamesIps"); if(PQPyObject::catchEx("PQHandlingChromecast::_getListOfChromecastDevices() 6")) return ret; PQPyObject args = PyTuple_Pack(1, services.get()); if(PQPyObject::catchEx("PQHandlingChromecast::_getListOfChromecastDevices() 7")) return ret; PQPyObject keywords = PyDict_New(); if(PQPyObject::catchEx("PQHandlingChromecast::_getListOfChromecastDevices() 8")) return ret; PQPyObject namesips = PyObject_Call(funcGetNames, args, keywords); if(PQPyObject::catchEx("PQHandlingChromecast::_getListOfChromecastDevices() 9")) return ret; PQPyObject names = PyList_GetItem(namesips, 0); if(PQPyObject::catchEx("PQHandlingChromecast::_getListOfChromecastDevices() 10")) return ret; PQPyObject ips = PyList_GetItem(namesips, 1); if(PQPyObject::catchEx("PQHandlingChromecast::_getListOfChromecastDevices() 11")) return ret; auto len = PyList_Size(names); for(int i = 0; i < len; ++i) { ret.push_back(PyUnicode_AsUTF8(PyList_GetItem(names, i))); ret.push_back(PyUnicode_AsUTF8(PyList_GetItem(ips, i))); if(PQPyObject::catchEx("PQHandlingChromecast::_getListOfChromecastDevices() 12")) return ret; } #endif return ret; } void PQHandlingChromecast::cancelScanForChromecast() { Q_EMIT cancelScan(); } bool PQHandlingChromecast::connectToDevice(QString friendlyname) { #ifdef CHROMECAST PyObject *sys_path = PySys_GetObject("path"); if(PyList_Append(sys_path, PyUnicode_FromString(QDir::tempPath().toStdString().c_str())) == -1) { LOG << CURDATE << "PQHandlingChromecast::connectToDevice(): Python error: Unable to append temp path to sys path" << NL; return false; } PQPyObject pModule = PyImport_ImportModule("photoqt_chromecast"); if(PQPyObject::catchEx("PQHandlingChromecast::connectToDevice() 1")) return false; PQPyObject funcConnectTo = PyObject_GetAttrString(pModule, "connectTo"); if(PQPyObject::catchEx("PQHandlingChromecast::connectToDevice() 2")) return false; PQPyObject args = PyTuple_Pack(1, PyUnicode_FromString(friendlyname.toStdString().c_str())); if(PQPyObject::catchEx("PQHandlingChromecast::connectToDevice() 3")) return false; PQPyObject keywords = PyDict_New(); if(PQPyObject::catchEx("PQHandlingChromecast::connectToDevice() 4")) return false; PQPyObject cast_browser_mc = PyObject_Call(funcConnectTo, args, keywords); if(PQPyObject::catchEx("PQHandlingChromecast::connectToDevice() 5")) return false; int c = PyList_Size(cast_browser_mc); if(c != 3) { LOG << CURDATE << "PQHandlingChromecast::connectToDevice(): Error: device unreachable..." << NL; return false; } *chromecastCast = PyList_GetItem(cast_browser_mc, 0); if(PQPyObject::catchEx("PQHandlingChromecast::connectToDevice() 6")) return false; *chromecastBrowser = PyList_GetItem(cast_browser_mc, 1); if(PQPyObject::catchEx("PQHandlingChromecast::connectToDevice() 7")) return false; *chromecastMediaController = PyList_GetItem(cast_browser_mc, 2); if(PQPyObject::catchEx("PQHandlingChromecast::connectToDevice() 8")) return false; currentFriendlyName = friendlyname; if(server->isRunning()) return true; serverPort = server->start(); // find local ip address localIP = ""; const auto addresses = QNetworkInterface::allAddresses(); for(const auto &entry : addresses) { if(!entry.isLoopback() && entry.protocol() == QAbstractSocket::IPv4Protocol) { const QString ip = entry.toString(); if(ip != "127.0.0.1" && ip != "localhost") { localIP = ip; break; } } } if(localIP == "") return false; return true; #else return false; #endif } bool PQHandlingChromecast::disconnectFromDevice() { #ifdef CHROMECAST PyObject *sys_path = PySys_GetObject("path"); if(PyList_Append(sys_path, PyUnicode_FromString(QDir::tempPath().toStdString().c_str())) == -1) { LOG << CURDATE << "PQHandlingChromecast::disconnectFromDevice(): Python error: Unable to append temp path to sys path" << NL; return false; } PQPyObject pModule = PyImport_ImportModule("photoqt_chromecast"); if(PQPyObject::catchEx("PQHandlingChromecast::disconnectFromDevice() 1")) return false; PQPyObject funcDisconnectFrom = PyObject_GetAttrString(pModule, "disconnectFrom"); if(PQPyObject::catchEx("PQHandlingChromecast::disconnectFromDevice() 2")) return false; PQPyObject args = PyTuple_Pack(2, chromecastCast->get(), chromecastBrowser->get()); if(PQPyObject::catchEx("PQHandlingChromecast::disconnectFromDevice() 3")) return false; PQPyObject keywords = PyDict_New(); if(PQPyObject::catchEx("PQHandlingChromecast::disconnectFromDevice() 4")) return false; PQPyObject disc = PyObject_Call(funcDisconnectFrom, args, keywords); if(PQPyObject::catchEx("PQHandlingChromecast::disconnectFromDevice() 5")) { if(triedReconnectingAfterDisconnect < 4) { ++triedReconnectingAfterDisconnect; connectToDevice(currentFriendlyName); disconnectFromDevice(); } else triedReconnectingAfterDisconnect = 0; return false; } triedReconnectingAfterDisconnect = 0; currentFriendlyName = ""; return true; #else return false; #endif } void PQHandlingChromecast::streamOnDevice(QString src) { #ifdef CHROMECAST // Make sure image provider exists if(imageprovider == nullptr) imageprovider = new PQImageProviderFull; // request image if(src.isNull() || src == "") { QImage img(":/other/logo_smallinsidelarge.jpg"); if(!img.save(QString("%1/photoqtchromecast.jpg").arg(QDir::tempPath()), nullptr, 50)) LOG << CURDATE << "PQHandlingChromecast::streamOnDevice(): Failed to save default image." << NL; } else { QImage img = imageprovider->requestImage(src, new QSize, QSize(1920,1080)); // if image is smaller than display and is not to be fit to window size if(!PQSettings::get()["imageviewFitInWindow"].toBool() && (img.width() < 1920 || img.height() < 1080)) { QImage ret(1920, 1080, QImage::Format_ARGB32); ret.fill(Qt::black); QPainter painter(&ret); painter.drawImage((1920-img.width())/2, (1080-img.height())/2, img); painter.end(); if(!ret.save(QString("%1/photoqtchromecast.jpg").arg(QDir::tempPath()), nullptr, 50)) LOG << CURDATE << "PQHandlingChromecast::streamOnDevice(): Failed to save image: " << src.toStdString() << NL; } else if(!img.save(QString("%1/photoqtchromecast.jpg").arg(QDir::tempPath()), nullptr, 50)) LOG << CURDATE << "PQHandlingChromecast::streamOnDevice(): Failed to save image: " << src.toStdString() << NL; } PyObject *sys_path = PySys_GetObject("path"); if(PyList_Append(sys_path, PyUnicode_FromString(QDir::tempPath().toStdString().c_str())) == -1) { LOG << CURDATE << "PQHandlingChromecast::streamOnDevice(): Python error: Unable to append temp path to sys path" << NL; return; } PQPyObject pModule = PyImport_ImportModule("photoqt_chromecast"); if(PQPyObject::catchEx("PQHandlingChromecast::streamOnDevice() 1")) return; PQPyObject funcStreamOn = PyObject_GetAttrString(pModule, "streamOnDevice"); if(PQPyObject::catchEx("PQHandlingChromecast::streamOnDevice() 2")) return; PQPyObject args = PyTuple_Pack(3, PyUnicode_FromString(localIP.toStdString().c_str()), PyLong_FromLong(serverPort), chromecastMediaController->get()); if(PQPyObject::catchEx("PQHandlingChromecast::streamOnDevice() 3")) return; PQPyObject keywords = PyDict_New(); if(PQPyObject::catchEx("PQHandlingChromecast::streamOnDevice() 4")) return; PQPyObject browser_mc = PyObject_Call(funcStreamOn, args, keywords); if(PQPyObject::catchEx("PQHandlingChromecast::streamOnDevice() 5")) { if(triedReconnectingAfterDisconnect < 4) { ++triedReconnectingAfterDisconnect; connectToDevice(currentFriendlyName); streamOnDevice(src); } else triedReconnectingAfterDisconnect = 0; return; } triedReconnectingAfterDisconnect = 0; #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/replytimeout.h��������������������������������������������������������000644 �001750 �001750 �00000004547 14164671315 022066� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #ifndef PQREPLYTIMEOUT_H #define PQREPLYTIMEOUT_H #include <QObject> #include <QTimerEvent> class PQReplyTimeout : public QObject { Q_OBJECT QBasicTimer m_timer; public: PQReplyTimeout(QNetworkReply* reply, const int timeout) : QObject(reply) { Q_ASSERT(reply); if (reply && reply->isRunning()) m_timer.start(timeout, this); } static void set(QNetworkReply* reply, const int timeout) { new PQReplyTimeout(reply, timeout); } protected: void timerEvent(QTimerEvent * ev) { if (!m_timer.isActive() || ev->timerId() != m_timer.timerId()) return; auto reply = static_cast<QNetworkReply*>(parent()); if (reply->isRunning()) reply->close(); m_timer.stop(); } }; #endif // PQREPLYTIMEOUT_H ���������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/imageproperties.h�����������������������������������������������������000644 �001750 �001750 �00000004300 14164671320 022502� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #ifndef PQIMAGEPROPERTIES_H #define PQIMAGEPROPERTIES_H #include <QObject> #include <QImageReader> #include <QUrl> #include "../logger.h" #include "../settings/imageformats.h" #ifdef POPPLER #include <poppler/qt5/poppler-qt5.h> #endif class PQImageProperties : public QObject { Q_OBJECT public: explicit PQImageProperties(QObject *parent = nullptr); Q_INVOKABLE bool isAnimated(QString path); Q_INVOKABLE bool isPopplerDocument(QString path); Q_INVOKABLE bool isArchive(QString path); Q_INVOKABLE bool isVideo(QString path); Q_INVOKABLE int getDocumentPages(QString path); }; #endif // PQIMAGEPROPERTIES_H ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/handlingfiledir.cpp���������������������������������������������������000644 �001750 �001750 �00000050044 14164671301 022766� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #include "handlingfiledir.h" QString PQHandlingFileDir::cleanPath(QString path) { DBG << CURDATE << "PQHandlingFileDir::cleanPath()" << NL << CURDATE << "** path = " << path.toStdString() << NL; #ifdef Q_OS_WIN if(path.startsWith("file:///")) path = path.remove(0, 8); if(path.startsWith("file://")) path = path.remove(0, 7); if(path.startsWith("file:/")) path = path.remove(0, 6); #else if(path.startsWith("file:///")) path = path.remove(0, 7); if(path.startsWith("file://")) path = path.remove(0, 6); #endif if(path.startsWith("image://full/")) path = path.remove(0, 13); if(path.startsWith("image://thumb/")) path = path.remove(0, 14); return QDir::cleanPath(path); } QString PQHandlingFileDir::copyFile(QString filename) { DBG << CURDATE << "PQHandlingFileDir::copyFile()" << NL << CURDATE << "** filename = " << filename.toStdString() << NL; const QString ending = QFileInfo(filename).suffix(); //: Title of filedialog to select new filename/location to copy file to. QString newfilename = QFileDialog::getSaveFileName(0, "Where to copy the file to", filename, QString("*.%1 (*.%2)").arg(ending, ending)); if(newfilename.trimmed() == "") return ""; QFile file(filename); if(!file.copy(newfilename)) { LOG << CURDATE << "PQHandlingFileDir::copyFile(): ERROR: The file could not be copied to its new location." << NL; return ""; } return newfilename; } bool PQHandlingFileDir::deleteFile(QString filename, bool permanent) { DBG << CURDATE << "PQHandlingFileDir::deleteFile()" << NL << CURDATE << "** filename = " << filename.toStdString() << NL << CURDATE << "** permanent = " << permanent << NL; #ifndef Q_OS_WIN if(permanent) { #endif QFile file(filename); return file.remove(); #ifndef Q_OS_WIN } else { // The file to delete QFile file(filename); // Of course we only proceed if the file actually exists if(file.exists()) { // Create the meta .trashinfo file QString info = "[Trash Info]\n"; info += "Path=" + QUrl(filename).toEncoded() + "\n"; info += "DeletionDate=" + QDateTime::currentDateTime().toString("yyyy-MM-ddThh:mm:ss"); // The base patzh for the Trah (files on external devices use the external device for Trash) QString baseTrash = ""; // If file lies in the home directory if(QFileInfo(filename).absoluteFilePath().startsWith(QDir::homePath())) { // Set the base path and make sure all the dirs exist baseTrash = ConfigFiles::GENERIC_DATA_DIR() + "/Trash/"; QDir dir; dir.setPath(baseTrash); if(!dir.exists()) { if(!dir.mkpath(baseTrash)) { LOG << "PQHandlingFileDir::deleteFile(): ERROR: mkdir(baseTrash) failed!"; return false; } } dir.setPath(baseTrash + "files"); if(!dir.exists()) { if(!dir.mkdir(baseTrash + "files")) { LOG << "PQHandlingFileDir::deleteFile(): ERROR: mkdir(files) failed!"; return false; } } dir.setPath(baseTrash + "info"); if(!dir.exists()) { if(!dir.mkdir(baseTrash + "info")) { LOG << "PQHandlingFileDir::deleteFile(): ERROR: mkdir(info) failed!"; return false; } } } else { // Set the base path ... for(QStorageInfo &storage : QStorageInfo::mountedVolumes()) { if(!storage.isReadOnly() && storage.isValid() && filename.startsWith(storage.rootPath()) && baseTrash.length() < storage.rootPath().length()) { baseTrash = storage.rootPath(); } } baseTrash += "/" + QString("/.Trash-%1/").arg(getuid()); // ... and make sure all the dirs exist QDir dir; dir.setPath(baseTrash); if(!dir.exists()) { if(!dir.mkdir(baseTrash)) { LOG << "PQHandlingFileDir::deleteFile(): ERROR: mkdir(baseTrash) failed!"; return false; } } dir.setPath(baseTrash + "files"); if(!dir.exists()) { if(!dir.mkdir(baseTrash + "files")) { LOG << "PQHandlingFileDir::deleteFile(): ERROR: mkdir(files) failed!"; return false; } } dir.setPath(baseTrash + "info"); if(!dir.exists()) { if(!dir.mkdir(baseTrash + "info")) { LOG << "PQHandlingFileDir::deleteFile(): ERROR: mkdir(info) failed!"; return false; } } } // that's the new trash file QString trashFile = baseTrash + "files/" + QUrl::toPercentEncoding(QFileInfo(file).fileName(),""," "); QString backupTrashFile = trashFile; // If there exists already a file with that name, we simply append the next higher number (sarting at 1) QFile ensure(trashFile); int j = 1; while(ensure.exists()) { trashFile = backupTrashFile + QString(" (%1)").arg(j++); ensure.setFileName(trashFile); } // Copy the file to the Trash if(file.copy(trashFile)) { // And remove the old file if(!file.remove()) { LOG << CURDATE << "PQHandlingFileDir::deleteFile(): ERROR: Old file couldn't be removed!" << NL; return false; } // Write the .trashinfo file QFile i(baseTrash + "info/" + QFileInfo(trashFile).fileName() + ".trashinfo"); if(i.open(QIODevice::WriteOnly)) { QTextStream out(&i); out << info; i.close(); } else { LOG << CURDATE << "PQHandlingFileDir::deleteFile(): ERROR: *.trashinfo file couldn't be created!" << NL; return false; } } else { LOG << CURDATE << "PQHandlingFileDir::deleteFile(): ERROR: File couldn't be deleted (moving file failed)" << NL; return false; } } else { LOG << CURDATE << "PQHandlingFileDir::deleteFile(): ERROR: File '" << filename.toStdString() << "' doesn't exist...?" << NL; return false; } } return true; #endif } bool PQHandlingFileDir::doesItExist(QString path) { DBG << CURDATE << "PQHandlingFileDir::doesItExist()" << NL << CURDATE << "** path = " << path.toStdString() << NL; QFile file(path); return file.exists(); } QString PQHandlingFileDir::getBaseName(QString path, bool lowerCase) { DBG << CURDATE << "PQHandlingFileDir::getBaseName()" << NL << CURDATE << "** path = " << path.toStdString() << NL << CURDATE << "** lowerCase = " << lowerCase << NL; if(lowerCase) return QFileInfo(path).baseName().toLower(); return QFileInfo(path).baseName(); } QString PQHandlingFileDir::getDirectory(QString path, bool lowerCase) { DBG << CURDATE << "PQHandlingFileDir::getDirectory()" << NL << CURDATE << "** path = " << path.toStdString() << NL << CURDATE << "** lowerCase = " << lowerCase << NL; if(lowerCase) return QFileInfo(path).absolutePath().toLower(); return QFileInfo(path).absolutePath(); } QString PQHandlingFileDir::getExistingDirectory(QString startDir) { DBG << CURDATE << "PQHandlingFileDir::getExistingDirectory()" << NL << CURDATE << "** startDir = " << startDir.toStdString() << NL; return QFileDialog::getExistingDirectory(nullptr, QString(), startDir); } QString PQHandlingFileDir::getFileNameFromFullPath(QString path, bool onlyExtraInfo) { DBG << CURDATE << "PQHandlingFileDir::getFileNameFromFullPath()" << NL << CURDATE << "** path = " << path.toStdString() << NL << CURDATE << "** onlyExtraInfo = " << onlyExtraInfo << NL; QString ret = QFileInfo(path).fileName(); if(onlyExtraInfo) { if(path.contains("::PQT::")) ret = QString("Page %1").arg(path.split("::PQT::").at(0).toInt()+1); if(path.contains("::ARC::")) ret = path.split("::ARC::").at(0); } return ret; } QString PQHandlingFileDir::getFilePathFromFullPath(QString path) { DBG << CURDATE << "PQHandlingFileDir::getFilePathFromFullPath()" << NL << CURDATE << "** path = " << path.toStdString() << NL; if(path.contains("::PQT::")) path = path.split("::PQT::").at(1); if(path.contains("::ARC::")) path = path.split("::ARC::").at(1); return QFileInfo(path).absolutePath(); } qint64 PQHandlingFileDir::getFileSize(QString path) { DBG << CURDATE << "PQHandlingFileDir::getFileSize()" << NL << CURDATE << "** path = " << path.toStdString() << NL; return QFileInfo(path).size(); } QString PQHandlingFileDir::getFileType(QString path) { DBG << CURDATE << "PQHandlingFileDir::getFileType()" << NL << CURDATE << "** path = " << path.toStdString() << NL; return db.mimeTypeForFile(path).name(); } QDateTime PQHandlingFileDir::getFileModified(QString path) { DBG << CURDATE << "PQHandlingFileDir::getFileModified()" << NL << CURDATE << "** path = " << path.toStdString() << NL; return QFileInfo(path).lastModified(); } QString PQHandlingFileDir::getHomeDir() { DBG << CURDATE << "PQHandlingFileDir::getHomeDir()" << NL; return QDir::homePath(); } QString PQHandlingFileDir::getInternalFilenameArchive(QString path) { DBG << CURDATE << "PQHandlingFileDir::getInternalFilename()" << NL << CURDATE << "** path = " << path.toStdString() << NL; if(!path.contains("::ARC::")) return ""; QFileInfo info(path.split("::ARC::")[0]); return info.fileName(); } QString PQHandlingFileDir::getSuffix(QString path, bool lowerCase) { DBG << CURDATE << "PQHandlingFileDir::getSuffix()" << NL << CURDATE << "** path = " << path.toStdString() << NL << CURDATE << "** lowerCase = " << lowerCase << NL; if(lowerCase) return QFileInfo(path).suffix().toLower(); return QFileInfo(path).suffix(); } QString PQHandlingFileDir::getTempDir() { DBG << CURDATE << "PQHandlingFileDir::getTempDir()" << NL; return QDir::tempPath(); } bool PQHandlingFileDir::isDir(QString path) { DBG << CURDATE << "PQHandlingFileDir::isDir()" << NL << CURDATE << "** path = " << path.toStdString() << NL; return QFileInfo(path).isDir(); } bool PQHandlingFileDir::isExcludeDirFromCaching(QString filename) { DBG << CURDATE << "PQHandlingFileDir::isExcludeDirFromCaching()" << NL << CURDATE << "** filename = " << filename.toStdString() << NL; if(PQSettings::get()["thumbnailsExcludeDropBox"].toString() != "") { if(filename.indexOf(PQSettings::get()["thumbnailsExcludeDropBox"].toString())== 0) return true; } if(PQSettings::get()["thumbnailsExcludeNextcloud"].toString() != "") { if(filename.indexOf(PQSettings::get()["thumbnailsExcludeNextcloud"].toString())== 0) return true; } if(PQSettings::get()["thumbnailsExcludeOwnCloud"].toString() != "") { if(filename.indexOf(PQSettings::get()["thumbnailsExcludeOwnCloud"].toString())== 0) return true; } const QStringList str = PQSettings::get()["thumbnailsExcludeFolders"].toStringList(); for(const QString &dir: str) { if(filename.indexOf(dir) == 0) return true; } return false; } bool PQHandlingFileDir::isRoot(QString path) { DBG << CURDATE << "PQHandlingFileDir::isRoot()" << NL << CURDATE << "** path = " << path.toStdString() << NL; QDir dir(path); dir.setPath(dir.canonicalPath()); return dir.isRoot(); } QStringList PQHandlingFileDir::listArchiveContent(QString path) { DBG << CURDATE << "PQHandlingFileDialog::listArchiveContent()" << NL << CURDATE << "** path = " << path.toStdString() << NL; QStringList ret; const QFileInfo info(path); #ifndef Q_OS_WIN QProcess which; which.setStandardOutputFile(QProcess::nullDevice()); which.start("which", QStringList() << "unrar"); which.waitForFinished(); if(!which.exitCode() && PQSettings::get()["filetypesExternalUnrar"].toBool() && (info.suffix() == "cbr" || info.suffix() == "rar")) { QProcess p; p.start("unrar", QStringList() << "lb" << info.absoluteFilePath()); if(p.waitForStarted()) { QByteArray outdata = ""; while(p.waitForReadyRead()) outdata.append(p.readAll()); // We need to use a QTextCodec as otherwise non-latin characters would be lost #if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)) QStringList allfiles = QTextCodec::codecForMib(106)->toUnicode(outdata).split('\n', Qt::SkipEmptyParts); #else QStringList allfiles = QTextCodec::codecForMib(106)->toUnicode(outdata).split('\n', QString::SkipEmptyParts); #endif allfiles.sort(); for(const QString &f : qAsConst(allfiles)) { if(PQImageFormats::get().getEnabledFormatsQt().contains(QFileInfo(f).suffix())) ret.append(QString("%1::ARC::%2").arg(f, path)); } } } // this either means there is nothing in that archive // or something went wrong above with unrar if(ret.length() == 0) { #endif #ifdef LIBARCHIVE // Create new archive handler struct archive *a = archive_read_new(); // We allow any type of compression and format archive_read_support_filter_all(a); archive_read_support_format_all(a); // Read file int r = archive_read_open_filename(a, info.absoluteFilePath().toLocal8Bit().data(), 10240); // If something went wrong, output error message and stop here if(r != ARCHIVE_OK) { LOG << CURDATE << "PQHandlingFileDialog::listArchiveContent: ERROR: archive_read_open_filename() returned code of " << r << NL; return ret; } // Loop over entries in archive struct archive_entry *entry; QStringList allfiles; while(archive_read_next_header(a, &entry) == ARCHIVE_OK) { // Read the current file entry // We use the '_w' variant here, as otherwise on Windows this call causes a segfault when a file in an archive contains non-latin characters QString filenameinside = QString::fromWCharArray(archive_entry_pathname_w(entry)); // If supported file format, append to temporary list if((PQImageFormats::get().getEnabledFormatsQt().contains(QFileInfo(filenameinside).suffix()))) allfiles.append(filenameinside); } // Sort the temporary list and add to global list allfiles.sort(); for(const QString &f : qAsConst(allfiles)) ret.append(QString("%1::ARC::%2").arg(f, path)); // Close archive r = archive_read_free(a); if(r != ARCHIVE_OK) LOG << CURDATE << "PQHandlingFileDialog::listArchiveContent: ERROR: archive_read_free() returned code of " << r << NL; #endif #ifndef Q_OS_WIN } #endif QCollator collator; collator.setCaseSensitivity(Qt::CaseInsensitive); collator.setIgnorePunctuation(true); collator.setNumericMode(true); if(PQSettings::get()["imageviewSortImagesAscending"].toBool()) std::sort(ret.begin(), ret.end(), [&collator](const QString &file1, const QString &file2) { return collator.compare(file1, file2) < 0; }); else std::sort(ret.begin(), ret.end(), [&collator](const QString &file1, const QString &file2) { return collator.compare(file2, file1) < 0; }); return ret; } QString PQHandlingFileDir::moveFile(QString filename) { DBG << CURDATE << "PQHandlingFileDir::moveFile()" << NL << CURDATE << "** filename = " << filename.toStdString() << NL; const QString ending = QFileInfo(filename).suffix(); //: Title of filedialog to select new filename/location to move file to. QString newfilename = QFileDialog::getSaveFileName(0, "Where to move the file to", filename, QString("*.%1 (*.%2)").arg(ending, ending)); if(newfilename.trimmed() == "") return ""; QFile file(filename); if(!file.copy(newfilename)) { LOG << CURDATE << "PQHandlingFileDir::moveFile(): ERROR: The file could not be moved to its new location, copy process failed." << NL; return ""; } if(!file.remove()) { LOG << CURDATE << "PQHandlingFileDir::moveFile(): ERROR: The file was successfully copied to new location but the old file could not be removed." << NL; return newfilename; } return newfilename; } bool PQHandlingFileDir::renameFile(QString dir, QString oldName, QString newName) { DBG << CURDATE << "PQHandlingFileDir::renameFile()" << NL << CURDATE << "** dir = " << dir.toStdString() << NL << CURDATE << "** oldName = " << oldName.toStdString() << NL << CURDATE << "** newName = " << newName.toStdString() << NL; QFile file(dir + "/" + oldName); return file.rename(dir + "/" + newName); } QString PQHandlingFileDir::replaceSuffix(QString filename, QString newSuffix) { DBG << CURDATE << "PQHandlingFileDir::replaceSuffix()" << NL << CURDATE << "** dir = " << filename.toStdString() << NL << CURDATE << "** oldName = " << newSuffix.toStdString() << NL; const QFileInfo info(filename); return QString("%1.%2").arg(info.baseName(), newSuffix); } void PQHandlingFileDir::saveStringToNewFile(QString txt) { DBG << CURDATE << "PQHandlingFileDir::saveStringToNewFile()" << NL << CURDATE << "** txt = " << txt.toStdString() << NL; QString newfile = QFileDialog::getSaveFileName(nullptr, QString(), QString("%1/photoqt-%2.log").arg(QDir::homePath()).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd-hhmm"))); if(newfile == "") return; QFile file(newfile); file.open(QIODevice::WriteOnly|QIODevice::Truncate); QTextStream out(&file); out << txt; file.close(); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/handlingshareimgur.cpp������������������������������������������������000644 �001750 �001750 �00000053206 14164671273 023531� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #include "handlingshareimgur.h" PQHandlingShareImgur::PQHandlingShareImgur(QObject *parent) : QObject(parent) { // set up network access manager, used in various locations below networkManager = new QNetworkAccessManager; // Store debug value this->debug = false; // Initialise client config to empty strings imgurClientID = ""; imgurClientSecret = ""; // Initialise user config to empty strings access_token = ""; refresh_token = ""; // Location of local file containing acces_/refresh_token imgurLocalConfigFilename = ConfigFiles::SHAREONLINE_IMGUR_FILE(); // This ensures the path actually exists QFileInfo info(imgurLocalConfigFilename); QDir dir; dir.mkpath(info.absolutePath()); // The cryptkey is based on the hostname of the machine. This way this value is preserved much more reliably. int key = 0; QString hostname = QSysInfo::machineHostName(); if(hostname.length() < 4) key = 63871234; else { hostname = hostname.remove(5, hostname.length()+1); int p = 1; for(const auto &character : qAsConst(hostname)) { key += character.unicode()*p; p *= 10; } } crypt = SimpleCrypt(key); } PQHandlingShareImgur::~PQHandlingShareImgur() { delete networkManager; } bool PQHandlingShareImgur::checkIfConnectedToInternet() { DBG << CURDATE << "PQHandlingShareImgur::checkIfConnectedToInternet()" << NL; // will store the return value bool internetConnected = false; // Get a list of all network interfaces QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces(); // a reg exp to validate an ip address QRegExp ipRegExp( "[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}" ); QRegExpValidator ipRegExpValidator(ipRegExp, 0); // loop over all network interfaces for(int i = 0; i < ifaces.count(); i++) { // get the current network interface QNetworkInterface iface = ifaces.at(i); // if the interface is up and not a loop back interface if(iface.flags().testFlag(QNetworkInterface::IsUp) && !iface.flags().testFlag(QNetworkInterface::IsLoopBack)) { // loop over all possible ip addresses for (int j=0; j<iface.allAddresses().count(); j++) { // get the ip address QString ip = iface.allAddresses().at(j).toString(); // validate the ip. We have to double check 127.0.0.1 as isLoopBack above does not always work reliably int pos = 0; if(ipRegExpValidator.validate(ip, pos) == QRegExpValidator::Acceptable && ip != "127.0.0.1") { internetConnected = true; break; } } } // done if(internetConnected) break; } // return whether we're connected or not return internetConnected; } // Return the web address to obtain a new pin QString PQHandlingShareImgur::authorizeUrlForPin() { DBG << CURDATE << "PQHandlingShareImgur::authorizeUrlForPin()" << NL; if(imgurClientID == "" || imgurClientSecret == "") { int ret = obtainClientIdSecret(); if(ret != IMGUR_NOERROR) return "failed to obtain URL"; } // return authorisation url return QString("https://api.imgur.com/oauth2/authorize?client_id=%1&response_type=pin&state=requestaccess").arg(imgurClientID); } // Handle a new PIN passed on by the user int PQHandlingShareImgur::authorizeHandlePin(QByteArray pin) { DBG << CURDATE << "PQHandlingShareImgur::authorizeHandlePin()" << NL << CURDATE << "** pin = " << pin.toStdString() << NL; if(imgurClientID == "" || imgurClientSecret == "") { int ret = obtainClientIdSecret(); if(ret != IMGUR_NOERROR) return ret; } // Compose data to send as post message QByteArray postData; postData.append("client_id="); postData.append(imgurClientID.toUtf8()); postData.append("&client_secret="); postData.append(imgurClientSecret.toUtf8()); postData.append("&grant_type=pin&pin="); postData.append(pin); // Send network request QNetworkRequest req(QUrl(QString("https://api.imgur.com/oauth2/token.xml"))); req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); QNetworkReply *reply = networkManager->post(req, postData); PQReplyTimeout::set(reply, 5000); // Synchronous connect QEventLoop loop; connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); loop.exec(); // Read reply QString resp = reply->readAll(); // Reset variables access_token = ""; refresh_token = ""; // If not successful if(resp.contains("success=\"0\"")) { if(debug) { QString status = resp.split("status=\"").at(1).split("\"").at(0); QString errorMsg = resp.split("<error>").at(1).split("</error>").at(0); LOG << CURDATE << "Status: " << status.toStdString() << " - Error: " << errorMsg.toStdString() << NL; } return IMGUR_NETWORK_REPLY_ERROR; } // Read access_token if(resp.contains("<access_token>")) access_token = resp.split("<access_token>").at(1).split("</access_token>").at(0); else { if(debug) LOG << CURDATE << "ERROR! No access_token as part of response... Unable to proceed!" << NL; return IMGUR_NETWORK_REPLY_ERROR; } // Read refresh_token if(resp.contains("<refresh_token>")) refresh_token = resp.split("<refresh_token>").at(1).split("</refresh_token>").at(0); // Read access_token if(resp.contains("<account_username>")) account_name = resp.split("<account_username>").at(1).split("</account_username>").at(0); else { if(debug) LOG << CURDATE << "ERROR! No account_username as part of response... Unable to proceed!" << NL; return IMGUR_NETWORK_REPLY_ERROR; } // Save data to file return saveAccessRefreshTokenUserName(imgurLocalConfigFilename); } // Save access stuff to file int PQHandlingShareImgur::saveAccessRefreshTokenUserName(QString filename) { DBG << CURDATE << "PQHandlingShareImgur::saveAccessRefreshTokenUserName()" << NL << CURDATE << "** filename = " << filename.toStdString() << NL; // Compose text file content QString txt = QString("%1\n%2\n%3\n").arg(access_token, refresh_token, account_name); // Initiate and open file QFile file(filename); if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { if(debug) LOG << CURDATE << "ERROR: Unable to write access_token and refresh_token to file..." << NL; return IMGUR_FILE_OPEN_ERROR; } // Write encrypted data to file QTextStream out(&file); out << crypt.encryptToString(txt); // Close file file.close(); // And successfully finished return IMGUR_NOERROR; } // Read client id and secret from server int PQHandlingShareImgur::obtainClientIdSecret() { DBG << CURDATE << "PQHandlingShareImgur::obtainClientIdSecret()" << NL; // If we have done it already, no need to do it again if(imgurClientID != "" && imgurClientSecret != "") return IMGUR_NOERROR; // Request text file from server QNetworkRequest req(QUrl("https://photoqt.org/oauth2/imgur.php")); req.setRawHeader("Referer", "PhotoQt"); req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); QNetworkReply *reply = networkManager->get(req); PQReplyTimeout::set(reply, 2500); // Synchronous connect QEventLoop loop; connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); loop.exec(); // Read reply data QString dat = reply->readAll(); reply->deleteLater(); // If response invalid if(dat.trimmed() == "") return IMGUR_NOT_CONNECTED_TO_INET; else if(!dat.contains("client_id=") || !dat.contains("client_secret=")) { if(debug) LOG << CURDATE << "Network reply data: " << dat.toStdString() << NL; return IMGUR_NETWORK_REPLY_ERROR; } // Split client id and secret out of reply data imgurClientID = dat.split("client_id=").at(1).split("\n").at(0).trimmed(); imgurClientSecret = dat.split("client_secret=").at(1).split("\n").at(0).trimmed(); // success return IMGUR_NOERROR; } // Forget the currently connected account int PQHandlingShareImgur::forgetAccount() { DBG << CURDATE << "PQHandlingShareImgur::forgetAccount()" << NL; // Delete file QFile file(imgurLocalConfigFilename); if(file.exists() && !file.remove()) { if(debug) LOG << CURDATE << "file.remove() error: " << file.errorString().trimmed().toStdString() << NL; return IMGUR_FILE_REMOVE_ERROR; } // Make sure the file is gone int counter = 0; while(file.exists() && counter < 100) { std::this_thread::sleep_for(std::chrono::milliseconds(10)); ++counter; } access_token = ""; refresh_token = ""; account_name = ""; // Successfully forgot about account return IMGUR_NOERROR; } // Connect to saved account and return success int PQHandlingShareImgur::authAccount() { DBG << CURDATE << "PQHandlingShareImgur::authAccount()" << NL; // If data is stored if(QFile(imgurLocalConfigFilename).exists()) { // reset access/refresh tokens access_token = ""; refresh_token = ""; // Initiate and open config file QFile file(imgurLocalConfigFilename); if(!file.open(QIODevice::ReadOnly)) { if(debug) LOG << CURDATE << "ERROR: Unable to read saved access_token... Requesting new one!" << NL; return IMGUR_FILE_OPEN_ERROR; } // Read contents of file QString cont = ""; QTextStream in(&file); cont = crypt.decryptToString(in.readAll()); // Check for general file format if(!cont.contains("\n")) { if(debug) LOG << CURDATE << "ERROR: Can't read file with access_token, invalid file format... Maybe the cryptkey has changed?" << NL; return IMGUR_DECRYPTION_ERROR; } // Obtain user config access_token = cont.split("\n").at(0); refresh_token = cont.split("\n").at(1); account_name = cont.split("\n").at(2); // Close file and report success file.close(); // Yay!! Success!! return IMGUR_NOERROR; } // No stored config data found return IMGUR_FILENAME_ERROR; } // Upload a file to a connected account int PQHandlingShareImgur::upload(QString filename) { DBG << CURDATE << "PQHandlingShareImgur::upload()" << NL << CURDATE << "** filename = " << filename.toStdString() << NL; if(imgurClientID == "" || imgurClientSecret == "") { int ret = obtainClientIdSecret(); if(ret != IMGUR_NOERROR) { Q_EMIT abortAllRequests(); uploadError(QNetworkReply::UnknownServerError); return ret; } } // Ensure an access token is set if(access_token == "") { if(debug) LOG << CURDATE << "ERROR! Unable to upload image, no access_token set... Did you connect to an account?" << NL; return IMGUR_ACCESS_TOKEN_ERROR; } // Ensure that filename is not empty and that the file exists if(filename.trimmed() == "" || !QFileInfo::exists(filename)) { if(debug) LOG << CURDATE << QString("ERROR! Filename '%1' for uploading to imgur.com is invalid").arg(filename).toStdString() << NL; return IMGUR_FILENAME_ERROR; } // Initiate file and open for reading QFile file(filename); if(!file.open(QIODevice::ReadOnly)) { if(debug) LOG << CURDATE << QString("ERROR! Can't open file '%1' for reading to upload to imgur.com").arg(filename).toStdString() << NL; return IMGUR_FILE_OPEN_ERROR; } // Read binary data of file to bytearray QByteArray byteArray = file.readAll(); file.close(); // Setup network request, use XML format QNetworkRequest req(QUrl("https://api.imgur.com/3/image.xml")); // the following is not necessary (it's the default), but avoids an error message on standard output req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); // Set access_token to prove authorisation to connect to account req.setRawHeader("Authorization", QByteArray("Bearer ") + access_token.toLatin1()); // Send upload request and connect to feedback signals QNetworkReply *reply = networkManager->post(req, byteArray); connect(reply, &QNetworkReply::finished, this, &PQHandlingShareImgur::uploadFinished); connect(reply, &QNetworkReply::uploadProgress, this, &PQHandlingShareImgur::uploadProgress); // The following has to use the old syntax, as there is also a accessor member (not a signal) to access the error with the same name #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) connect(reply, static_cast<void (QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error), this, &PQHandlingShareImgur::uploadError); #else connect(reply, &QNetworkReply::errorOccurred, this, &PQHandlingShareImgur::uploadError); #endif connect(this, &PQHandlingShareImgur::abortAllRequests, reply, &QNetworkReply::abort); // Phew, no error occured! return IMGUR_NOERROR; } int PQHandlingShareImgur::anonymousUpload(QString filename) { DBG << CURDATE << "PQHandlingShareImgur::anonymousUpload()" << NL << CURDATE << "** filename = " << filename.toStdString() << NL; if(imgurClientID == "" || imgurClientSecret == "") { int ret = obtainClientIdSecret(); if(ret != IMGUR_NOERROR) { uploadError(QNetworkReply::NetworkSessionFailedError); return ret; } } // Ensure that filename is not empty and that the file exists if(filename.trimmed() == "" || !QFileInfo::exists(filename)) { if(debug) LOG << CURDATE << QString("ERROR! Filename '%1' for uploading to imgur.com is invalid").arg(filename).toStdString() << NL; return IMGUR_FILENAME_ERROR; } // Initiate file and open for reading QFile file(filename); if(!file.open(QIODevice::ReadOnly)) { if(debug) LOG << CURDATE << QString("ERROR! Can't open file '%1' for reading to upload to imgur.com").arg(filename).toStdString() << NL; return IMGUR_FILE_OPEN_ERROR; } // Read binary data of file to bytearray QByteArray byteArray = file.readAll(); // Setup network request (XML format) QNetworkRequest request(QUrl("https://api.imgur.com/3/image.xml")); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); request.setRawHeader("Authorization", QString("Client-ID " + imgurClientID).toLatin1()); // Send upload request and connect to feedback signals QNetworkReply *reply = networkManager->post(request, byteArray); connect(reply, &QNetworkReply::finished, this, &PQHandlingShareImgur::uploadFinished); connect(reply, &QNetworkReply::uploadProgress, this, &PQHandlingShareImgur::uploadProgress); #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) connect(reply, static_cast<void (QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error), this, &PQHandlingShareImgur::uploadError); #else connect(reply, &QNetworkReply::errorOccurred, this, &PQHandlingShareImgur::uploadError); #endif connect(this, &PQHandlingShareImgur::abortAllRequests, reply, &QNetworkReply::abort); // Phew, no error occured! return IMGUR_NOERROR; } // Delete an image, identified by delete_hash int PQHandlingShareImgur::deleteImage(QString hash) { DBG << CURDATE << "PQHandlingShareImgur::deleteImage()" << NL << CURDATE << "** hash = " << hash.toStdString() << NL; // Set up the network request QNetworkRequest request(QUrl(QString("https://api.imgur.com/3/image/%1").arg(hash))); request.setRawHeader("Authorization", QByteArray("Bearer ") + access_token.toLatin1()); // Send the deletion request QNetworkReply *reply = networkManager->deleteResource(request); PQReplyTimeout::set(reply, 2500); // Wait for it to finish QEventLoop loop; QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); loop.exec(); // Get return value QString ret = reply->readAll(); // Success! if(ret.contains("\"success\":true")) return IMGUR_NOERROR; // Error... if(ret.contains("\"success\":false")) { if(ret.contains("\"error\":\"")) { if(debug) { QString err = ret.split("\"error\":\"").at(1).split("\"").at(0); LOG << CURDATE << "Deletion error: " << err.toStdString() << NL; } return IMGUR_DELETION_ERROR; } else return IMGUR_OTHER_ERROR; } // Not sure what happened return IMGUR_OTHER_ERROR; } // Handle upload progress void PQHandlingShareImgur::uploadProgress(qint64 bytesSent, qint64 bytesTotal) { DBG << CURDATE << "PQHandlingShareImgur::uploadProgress()" << NL << CURDATE << "** bytesSent = " << bytesSent << NL << CURDATE << "** bytesTotal = " << bytesTotal << NL; // Avoid division by zero if(bytesTotal == 0) return; // Compute and emit progress, between 0 and 1 double progress = (double)bytesSent/(double)bytesTotal; Q_EMIT imgurUploadProgress(progress); } // An error occured void PQHandlingShareImgur::uploadError(QNetworkReply::NetworkError err) { DBG << CURDATE << "PQHandlingShareImgur::uploadError()" << NL; // Access sender object and delete it QNetworkReply *reply = (QNetworkReply*)(sender()); reply->deleteLater(); // This is an error, but caused by the user (by calling abort()) if(err == QNetworkReply::OperationCanceledError) return; // Compose, output, and emit error message if(debug) LOG << CURDATE << QString("ERROR! An error occured while uploading image: %1").arg(err).toStdString() << NL; Q_EMIT imgurUploadError(err); } // Finished uploading an image void PQHandlingShareImgur::uploadFinished() { DBG << CURDATE << "PQHandlingShareImgur::uploadFinished()" << NL; // The sending network reply QNetworkReply *reply = (QNetworkReply*)(sender()); // The reply is not open when operation was aborted if(!reply->isOpen()) { Q_EMIT imgurImageUrl(""); Q_EMIT finished(); return; } // Read output from finished network reply QString resp = reply->readAll(); // Delete sender object reply->deleteLater(); // If there has been an error... if(resp.contains("success=\"0\"")) { if(debug) { QString errorMsg = resp.split("<error>").at(1).split("</error>").at(0); LOG << CURDATE << QString("ERROR! An error occured. Error message: %1").arg(errorMsg).toStdString() << NL; } Q_EMIT finished(); return; } // If data doesn't contain a valid link, something went wrong if(!resp.contains("<link>") || !resp.contains("<deletehash>")) { if(debug) LOG << CURDATE << QString("ERROR! Invalid return data received: %1").arg(resp).toStdString() << NL; Q_EMIT finished(); return; } // Read out the link QString imgLink = resp.split("<link>").at(1).split("</link>").at(0); QString delHash = resp.split("<deletehash>").at(1).split("</deletehash>").at(0); // and tell the user Q_EMIT imgurImageUrl(imgLink); Q_EMIT imgurDeleteHash(delHash); Q_EMIT finished(); } QString PQHandlingShareImgur::getAuthDateTime() { DBG << CURDATE << "PQHandlingShareImgur::getAuthDateTime()" << NL; QFileInfo info(ConfigFiles::SHAREONLINE_IMGUR_FILE()); if(info.exists()) return info.lastModified().toString("yyyy-MM-dd, hh:mm:ss"); else return "???"; } // Abort all network requests and stop void PQHandlingShareImgur::abort() { DBG << CURDATE << "PQHandlingShareImgur::abort()" << NL; // We do it twice spaced out, in case we were just before a networkrequest to really cancel everything Q_EMIT abortAllRequests(); QTimer::singleShot(500, this, &PQHandlingShareImgur::abortAllRequests); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/handlingchromecast.h��������������������������������������������������000644 �001750 �001750 �00000005632 14164671337 023161� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #ifndef PQHANDLINGCHROMECAST_H #define PQHANDLINGCHROMECAST_H #include <QObject> #ifdef CHROMECAST #include <QJSValue> #include <QJSEngine> #include <QtConcurrent/QtConcurrent> #include "httpserver.h" #include "../../python/pqpy.h" #include "../logger.h" #include "../imageprovider/imageproviderfull.h" #endif class PQHandlingChromecast : public QObject { Q_OBJECT public: PQHandlingChromecast(QObject *parent = nullptr); ~PQHandlingChromecast(); Q_INVOKABLE void getListOfChromecastDevices(); static QVariantList _getListOfChromecastDevices(); Q_INVOKABLE bool connectToDevice(QString friendlyname); Q_INVOKABLE bool disconnectFromDevice(); Q_INVOKABLE void streamOnDevice(QString src); Q_INVOKABLE void cancelScanForChromecast(); #ifdef CHROMECAST QFutureWatcher<QVariantList> *watcher; #endif Q_SIGNALS: void updatedListChromecast(QVariantList devices); void cancelScan(); private: #ifdef CHROMECAST int triedReconnectingAfterDisconnect; QString chromecastModuleName; QString localIP; PQPyObject *chromecastCast; PQPyObject *chromecastServices; PQPyObject *chromecastBrowser; PQPyObject *chromecastMediaController; PQImageProviderFull *imageprovider; PQHttpServer *server; int serverPort; QString currentFriendlyName; #endif }; #endif // PQHANDLINGCHROMECAST_H ������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/handlingshortcuts.h���������������������������������������������������000644 �001750 �001750 �00000004115 14164671323 023055� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #ifndef PQHANDLINGSHORTCUTS_H #define PQHANDLINGSHORTCUTS_H #include <QObject> #include <QFile> #include <QKeySequence> #include <QProcess> #include "../logger.h" class PQHandlingShortcuts : public QObject { Q_OBJECT public: Q_INVOKABLE QString composeDisplayString(QString combo); Q_INVOKABLE QString composeString(Qt::KeyboardModifiers mods, Qt::Key keys); Q_INVOKABLE int convertCharacterToKeyCode(QString key); Q_INVOKABLE QString convertKeyCodeToText(int id); }; #endif // PQHANDLINGSHORTCUTS_H ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/handlingexternal.h����������������������������������������������������000644 �001750 �001750 �00000005377 14164671336 022660� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #ifndef PQHANDLINGEXTERNAL_H #define PQHANDLINGEXTERNAL_H #include <QObject> #include <QFileDialog> #include <QTextStream> #include <QProcess> #include <QtSql> #ifdef LIBARCHIVE #include <archive.h> #include <archive_entry.h> #endif #include "../imageprovider/imageproviderfull.h" #include "../logger.h" #include "../startup/startup.h" class PQHandlingExternal : public QObject { Q_OBJECT public: Q_INVOKABLE void copyToClipboard(QString filename); Q_INVOKABLE void copyTextToClipboard(QString txt); Q_INVOKABLE void executeExternal(QString cmd, QString currentfile); Q_INVOKABLE static bool exportConfigTo(QString path); Q_INVOKABLE QString findDropBoxFolder(); Q_INVOKABLE QString findNextcloudFolder(); Q_INVOKABLE QString findOwnCloudFolder(); Q_INVOKABLE QVariantList getContextMenuEntries(); Q_INVOKABLE QString getIconPathFromTheme(QString binary); Q_INVOKABLE static bool importConfigFrom(QString path); Q_INVOKABLE void openInDefaultFileManager(QString filename); Q_INVOKABLE void saveContextMenuEntries(QVariantList entries); Q_INVOKABLE QSize getScreenSize(); private: PQImageProviderFull *imageprovider; }; #endif // PQHANDLINGEXTERNAL_H �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/handlingfiledir.h�����������������������������������������������������000644 �001750 �001750 �00000007014 14164671332 022436� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #ifndef PQHANDLINGFILEDIR_H #define PQHANDLINGFILEDIR_H #include <QObject> #include <QFile> #include <QUrl> #include <QStorageInfo> #include <QFileDialog> #include <QMimeDatabase> #include <QProcess> #include "../settings/imageformats.h" #include "../settings/settings.h" #ifndef Q_OS_WIN #include <unistd.h> #endif #ifdef LIBARCHIVE #include <archive.h> #include <archive_entry.h> #endif #include "../logger.h" class PQHandlingFileDir : public QObject { Q_OBJECT public: Q_INVOKABLE QString cleanPath(QString path); Q_INVOKABLE QString copyFile(QString filename); Q_INVOKABLE bool deleteFile(QString filename, bool permanent); Q_INVOKABLE bool doesItExist(QString path); Q_INVOKABLE QString getBaseName(QString path, bool lowerCase = true); Q_INVOKABLE QString getDirectory(QString path, bool lowerCase = true); Q_INVOKABLE QString getExistingDirectory(QString startDir = QDir::homePath()); Q_INVOKABLE QString getFileNameFromFullPath(QString path, bool onlyExtraInfo = false); Q_INVOKABLE QString getFilePathFromFullPath(QString path); Q_INVOKABLE qint64 getFileSize(QString path); Q_INVOKABLE QString getFileType(QString path); Q_INVOKABLE QDateTime getFileModified(QString path); Q_INVOKABLE QString getHomeDir(); Q_INVOKABLE QString getInternalFilenameArchive(QString path); Q_INVOKABLE QString getSuffix(QString path, bool lowerCase = true); Q_INVOKABLE QString getTempDir(); Q_INVOKABLE bool isDir(QString path); Q_INVOKABLE bool isExcludeDirFromCaching(QString filename); Q_INVOKABLE bool isRoot(QString path); Q_INVOKABLE QStringList listArchiveContent(QString path); Q_INVOKABLE QString moveFile(QString filename); Q_INVOKABLE bool renameFile(QString dir, QString oldName, QString newName); Q_INVOKABLE QString replaceSuffix(QString filename, QString newSuffix); Q_INVOKABLE void saveStringToNewFile(QString txt); private: QMimeDatabase db; }; #endif // PQHANDLINGFILEDIR_H ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/handlinggeneral.cpp���������������������������������������������������000644 �001750 �001750 �00000023407 14164671277 023004� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #include "handlinggeneral.h" bool PQHandlingGeneral::amIOnWindows() { #ifdef Q_OS_WIN return true; #endif return false; } bool PQHandlingGeneral::askForConfirmation(QString text, QString informativeText) { DBG << CURDATE << "PQHandlingGeneral::askForConfirmation()" << NL << CURDATE << "** text = " << text.toStdString() << NL << CURDATE << "** informativeText = " << informativeText.toStdString() << NL; QMessageBox msg; msg.setText(text); msg.setInformativeText(informativeText); msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msg.setDefaultButton(QMessageBox::Yes); int ret = msg.exec(); return (ret==QMessageBox::Yes); } void PQHandlingGeneral::cleanUpScreenshotsTakenAtStartup() { DBG << CURDATE << "PQHandlingGeneral::cleanUpScreenshotsTakenAtStartup()" << NL; int count = 0; while(true) { QFile file(QDir::tempPath() + QString("/photoqt_screenshot_%1.jpg").arg(count)); if(file.exists()) file.remove(); else break; } } QString PQHandlingGeneral::convertBytesToHumanReadable(qint64 bytes) { DBG << CURDATE << "PQHandlingGeneral::convertBytesToHumanReadable()" << NL << CURDATE << "** bytes = " << bytes << NL; if(bytes <= 1024) return (QString::number(bytes) + " B"); else if(bytes <= 1024*1024) return (QString::number(qRound(10.0*(bytes/1024.0))/10.0) + " KB"); return (QString::number(qRound(100.0*(bytes/(1024.0*1024.0)))/100.0) + " MB"); } QVariantList PQHandlingGeneral::convertHexToRgba(QString hex) { DBG << CURDATE << "PQHandlingGeneral::convertHexToRgba()" << NL << CURDATE << "** hex = " << hex.toStdString() << NL; int r,g,b,a; // no transparency if(hex.length() == 7) { a = 255; r = QStringRef(&hex, 1, 2).toUInt(nullptr, 16); g = QStringRef(&hex, 3, 2).toUInt(nullptr, 16); b = QStringRef(&hex, 5, 2).toUInt(nullptr, 16); } else { a = QStringRef(&hex, 1, 2).toUInt(nullptr, 16); r = QStringRef(&hex, 3, 2).toUInt(nullptr, 16); g = QStringRef(&hex, 5, 2).toUInt(nullptr, 16); b = QStringRef(&hex, 7, 2).toUInt(nullptr, 16); } return QVariantList() << r << g << b << a; } QString PQHandlingGeneral::convertRgbaToHex(QVariantList rgba) { DBG << CURDATE << "PQHandlingGeneral::convertRgbaToHex()" << NL; std::stringstream ss; ss << "#"; ss << std::hex << (rgba[3].toInt() << 24 | rgba[0].toInt() << 16 | rgba[1].toInt() << 8 | rgba[2].toInt()); return QString::fromStdString(ss.str()); } QString PQHandlingGeneral::convertSecsToProperTime(int secs, int sameFormatsAsVal) { DBG << CURDATE << "PQHandlingGeneral::convertSecsToProperTime()" << NL << CURDATE << "** secs = " << secs << NL << CURDATE << "** sameFormatsAsVal = " << sameFormatsAsVal << NL; if(secs < 10 && sameFormatsAsVal < 10) return QString("0%1").arg(secs); if(secs <= 60 && sameFormatsAsVal <= 60) { if(secs < 10) return QString("0%1").arg(secs); return QString::number(secs); } if(secs < 3600 && sameFormatsAsVal < 3600) { int mins_int = secs/60; int secs_int = secs%60; QString mins_str = QString(mins_int<10 ? "0%1" : "%1").arg(mins_int); QString secs_str = QString(secs_int<10 ? "0%1" : "%1").arg(secs_int); return mins_str+":"+secs_str; } int hours_int = secs/(60*60); int mins_int = (secs - hours_int*60*60)/60; int secs_int = (secs - hours_int*60*60 - mins_int*60)/60; QString hours_str = QString(hours_int<10 ? "0%1" : "%1").arg(hours_int); QString mins_str = QString(mins_int<10 ? "0%1" : "%1").arg(mins_int); QString secs_str = QString(secs_int<10 ? "0%1" : "%1").arg(secs_int); return hours_str+":"+mins_str+":"+secs_str; } void PQHandlingGeneral::deleteLastLoadedImage() { DBG << CURDATE << "PQHandlingGeneral::deleteLastLoadedImage()" << NL; // attempts to remove stored last loaded image // not a big deal if this fails thus no need to error check QFile file(ConfigFiles::LASTOPENEDIMAGE_FILE()); if(file.exists()) file.remove(); } QString PQHandlingGeneral::escapeHTML(QString str) { return str.toHtmlEscaped(); } QStringList PQHandlingGeneral::getAvailableTranslations() { DBG << CURDATE << "PQHandlingGeneral::getAvailableTranslations()" << NL; QStringList ret; // these are shown first // they are the ones with recent activity // this list will be updated before release // the other ones are shown afterwards sorted alphabetically ret << "en"; ret << "de_DE"; ret << "es_ES"; ret << "lt_LT"; ret << "pl_PL"; ret << "pt_PT"; QStringList tmp; QDirIterator it(":"); while (it.hasNext()) { QString file = it.next(); if(file.endsWith(".qm")) { file = file.remove(0, 10); file = file.remove(file.length()-3, file.length()); if(!ret.contains(file)) tmp.push_back(file); } } tmp.sort(); ret.append(tmp); return ret; } QString PQHandlingGeneral::getLastLoadedImage() { DBG << CURDATE << "PQHandlingGeneral::getLastLoadedImage()" << NL; QString ret = ""; QFile file(ConfigFiles::LASTOPENEDIMAGE_FILE()); if(file.open(QIODevice::ReadOnly)) { QTextStream in(&file); ret = in.readAll(); file.close(); } return ret.trimmed(); } QString PQHandlingGeneral::getQtVersion() { DBG << CURDATE << "PQHandlingGeneral::getQtVersion()" << NL; return QString::fromStdString(QT_VERSION_STR); } QString PQHandlingGeneral::getUniqueId() { DBG << CURDATE << "PQHandlingGeneral::getUniqueId()" << NL; return QString::number(QDateTime::currentMSecsSinceEpoch()); } QString PQHandlingGeneral::getVersion() { DBG << CURDATE << "PQHandlingGeneral::getVersion()" << NL; return QString::fromStdString(VERSION); } bool PQHandlingGeneral::isChromecastEnabled() { #ifdef CHROMECAST return true; #else return false; #endif } bool PQHandlingGeneral::isDevILSupportEnabled() { #ifdef DEVIL return true; #else return false; #endif } bool PQHandlingGeneral::isFreeImageSupportEnabled() { #ifdef FREEIMAGE return true; #else return false; #endif } bool PQHandlingGeneral::isGraphicsMagickSupportEnabled() { #ifdef GRAPHICSMAGICK return true; #else return false; #endif } bool PQHandlingGeneral::isImageMagickSupportEnabled() { #ifdef IMAGEMAGICK return true; #else return false; #endif } bool PQHandlingGeneral::isLibRawSupportEnabled() { #ifdef RAW return true; #else return false; #endif } bool PQHandlingGeneral::isLibArchiveSupportEnabled() { #ifdef LIBARCHIVE return true; #else return false; #endif } bool PQHandlingGeneral::isPopplerSupportEnabled() { #ifdef POPPLER return true; #else return false; #endif } bool PQHandlingGeneral::isVideoSupportEnabled() { #ifdef VIDEO return true; #else return false; #endif } void PQHandlingGeneral::setLastLoadedImage(QString path) { DBG << CURDATE << "PQHandlingGeneral::setLastLoadedImage()" << NL << CURDATE << "** path = " << path.toStdString() << NL; QFile file(ConfigFiles::LASTOPENEDIMAGE_FILE()); if(file.open(QIODevice::WriteOnly|QIODevice::Truncate)) { QTextStream out(&file); out << path; out.flush(); file.close(); } } void PQHandlingGeneral::setOverrideCursor(bool enabled) { DBG << CURDATE << "PQHandlingGeneral::setOverrideCursor()" << NL << CURDATE << "** enabled = " << enabled << NL; if(enabled) qApp->setOverrideCursor(Qt::BusyCursor); else qApp->restoreOverrideCursor(); } void PQHandlingGeneral::storeQmlWindowMemoryAddress(QString objName) { DBG << CURDATE << "PQHandlingGeneral::storeQmlWindowMemoryAddress()" << NL << CURDATE << "** objName = " << objName.toStdString() << NL; PQSingleInstance *inst = reinterpret_cast<PQSingleInstance*>(PQSingleInstance::instance()); inst->qmlWindowAddresses.push_back(inst->qmlEngine->rootObjects().at(0)->findChild<QObject*>(objName)); } void PQHandlingGeneral::setDefaultSettings(bool ignoreLanguage) { PQSettings::get().setDefault(ignoreLanguage); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/cplusplus/scripts/handlingexternal.cpp��������������������������������������������������000644 �001750 �001750 �00000046656 14164671307 023216� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************** ** ** ** Copyright (C) 2011-2022 Lukas Spies ** ** Contact: https://photoqt.org ** ** ** ** This file is part of PhotoQt. ** ** ** ** PhotoQt 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. ** ** ** ** PhotoQt 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 PhotoQt. If not, see <http://www.gnu.org/licenses/>. ** ** ** **************************************************************************/ #include "handlingexternal.h" void PQHandlingExternal::copyTextToClipboard(QString txt) { DBG << CURDATE << "PQHandlingExternal::copyTextToClipboard()" << NL << CURDATE << "** txt = " << txt.toStdString() << NL; QApplication::clipboard()->setText(txt, QClipboard::Clipboard); } void PQHandlingExternal::copyToClipboard(QString filename) { DBG << CURDATE << "PQHandlingExternal::copyToClipboard()" << NL << CURDATE << "** filename = " << filename.toStdString() << NL; if(filename == "") return; // Make sure image provider exists if(imageprovider == nullptr) imageprovider = new PQImageProviderFull; // set image to clipboard qApp->clipboard()->setImage(imageprovider->requestImage(filename, new QSize, QSize())); } void PQHandlingExternal::executeExternal(QString cmd, QString currentfile) { DBG << CURDATE << "PQHandlingExternal::executeExternal()" << NL << CURDATE << "** cmd = " << cmd.toStdString() << NL << CURDATE << "** currentfile = " << currentfile.toStdString() << NL; QString executable = ""; QStringList arguments = cmd.split(" "); if(!arguments.at(0).startsWith("/")) { executable = arguments.at(0); arguments.removeFirst(); } else { QString path = arguments[0]; int i; for(i = 1; i < arguments.length(); ++i) { path += " "; path += arguments[i]; QFileInfo info(path); if(info.exists() && info.isFile()) { i += 1; break; } } if(i == arguments.length()) { LOG << CURDATE << "PQHandlingExternal::executeExternal(): Error, unable to execute: " << cmd.toStdString() << NL; return; } executable = path; arguments.erase(arguments.begin(), arguments.begin()+i); } QFileInfo info(currentfile); for(int i = 0; i < arguments.length(); ++i) { if(arguments[i].contains("%f")) arguments[i] = arguments[i].replace("%f", currentfile); if(arguments[i].contains("%u")) arguments[i] = arguments[i].replace("%u", info.fileName()); if(arguments[i].contains("%d")) arguments[i] = arguments[i].replace("%d", info.absolutePath()); } QProcess::startDetached(executable, arguments); } bool PQHandlingExternal::exportConfigTo(QString path) { DBG << CURDATE << "PQHandlingExternal::exportConfigTo()" << NL << CURDATE << "** path = " << path.toStdString() << NL; #ifdef LIBARCHIVE // Obtain a filename from the user or used passed on filename QString archiveFile; if(path == "") { archiveFile = QFileDialog::getSaveFileName(0, "Select Location", QDir::homePath() + "/photoqtconfig.pqt", "PhotoQt Config File (*.pqt);;All Files (*.*)"); if(archiveFile.trimmed() == "") return false; } else archiveFile = path; // if no suffix, append the pqt suffix if(!archiveFile.endsWith(".pqt")) archiveFile += ".pqt"; // All the config files QHash<QString,QString> allfiles; allfiles["CFG_SETTINGS_DB"] = ConfigFiles::SETTINGS_DB(); allfiles["CFG_IMAGEFORMATS_DB"] = ConfigFiles::IMAGEFORMATS_DB(); allfiles["CFG_CONTEXTMENU_DB"] = ConfigFiles::CONTEXTMENU_DB(); allfiles["CFG_SHORTCUTS_DB"] = ConfigFiles::SHORTCUTS_DB(); // handler to the file struct archive *a = archive_write_new(); // Write a zip file with gzip compression archive_write_add_filter_gzip(a); archive_write_set_format_zip(a); // open archive for writing archive_write_open_filename(a, archiveFile.toLatin1()); // loop over config files QHash<QString, QString>::const_iterator iter = allfiles.constBegin(); while(iter != allfiles.constEnd()) { QFile config(iter.value()); // Ignore files that do not exist if(config.exists()) { if(config.open(QIODevice::ReadOnly)) { // Get file content QByteArray configtxt = config.readAll(); // create new entry in archive struct archive_entry *entry = archive_entry_new(); // Set some metadata archive_entry_set_pathname(entry, iter.key().toLatin1()); archive_entry_set_size(entry, config.size()); archive_entry_set_filetype(entry, AE_IFREG); archive_entry_set_perm(entry, 0644); // write header info archive_write_header(a, entry); // write config data to compressed file archive_write_data(a, configtxt, config.size()); // Clean up memory archive_entry_free(entry); } else LOG << CURDATE << "PQHandlingExternal::exportConfig(): ERROR: Unable to read config file '" << iter.value().toStdString() << "'... Skipping!" << NL; } ++iter; } // Clean up memory archive_write_close(a); archive_write_free(a); return true; #endif return false; } QString PQHandlingExternal::findDropBoxFolder() { #if defined Q_OS_UNIX || defined Q_OS_WIN // credit for how to find DropBox location: // https://stackoverflow.com/questions/12118162/how-to-determine-the-dropbox-folder-location-programmatically #ifdef Q_OS_UNIX QFile f(QDir::homePath()+"/.dropbox/host.db"); #elif defined Q_OS_WIN QFile f(QString("%1/Dropbox/host.db").arg(QStandardPaths::AppDataLocation)); #endif if(f.exists()) { f.open(QIODevice::ReadOnly); QTextStream in(&f); QStringList txt = in.readAll().split("\n"); if(txt.length() > 1) { QString path = QByteArray::fromBase64(txt[1].toUtf8()); if(path.endsWith("/")) return path.remove(path.length()-1,1); return path; } } #endif return ""; } QString PQHandlingExternal::findNextcloudFolder() { #if defined Q_OS_UNIX || defined Q_OS_WIN #if defined Q_OS_UNIX QFile f(QDir::homePath()+"/.config/Nextcloud/nextcloud.cfg"); #elif defined Q_OS_WIN QFile f(QString("%1/Nextcloud/nextcloud.cfg").arg(QStandardPaths::AppDataLocation)); #endif if(f.exists()) { f.open(QIODevice::ReadOnly); QTextStream in(&f); QString txt = in.readAll(); if(txt.contains("0\\Folders\\1\\localPath=")) { QString path = txt.split("0\\Folders\\1\\localPath=")[1].split("\n")[0]; if(path.endsWith("/")) return path.remove(path.length()-1,1); return path; } } #endif return ""; } QString PQHandlingExternal::findOwnCloudFolder() { #if defined Q_OS_UNIX || defined Q_OS_WIN #if defined Q_OS_UNIX QFile f(QDir::homePath()+"/.config/ownCloud/owncloud.cfg"); #elif defined Q_OS_WIN QFile f(QString("%1/ownCloud/owncloud.cfg").arg(QStandardPaths::AppDataLocation)); #endif if(f.exists()) { f.open(QIODevice::ReadOnly); QTextStream in(&f); QString txt = in.readAll(); if(txt.contains("0\\Folders\\1\\localPath=")) { QString path = txt.split("0\\Folders\\1\\localPath=")[1].split("\n")[0]; if(path.endsWith("/")) return path.remove(path.length()-1,1); return path; } } #endif return ""; } QVariantList PQHandlingExternal::getContextMenuEntries() { DBG << CURDATE << "PQHandlingExternal::getContextMenuEntries()" << NL; QVariantList ret; QSqlDatabase db = QSqlDatabase::database("contextmenu"); if(!db.open()) { LOG << CURDATE << "PQHandlingExternal::getContextMenuEntries(): SQL error, db.open(): " << db.lastError().text().trimmed().toStdString() << NL; return ret; } QSqlQuery query(db); query.prepare("SELECT command,desc,close FROM entries"); if(!query.exec()) { LOG << CURDATE << "PQHandlingExternal::getContextMenuEntries(): SQL error, select: " << query.lastError().text().trimmed().toStdString() << NL; return ret; } while(query.next()) { const QString command = query.record().value(0).toString(); const QString desc = query.record().value(1).toString(); const QString close = query.record().value(2).toString(); QStringList thisentry; thisentry << QString("_:_EX_:_%1").arg(command); thisentry << command.split(" ").at(0); thisentry << desc; thisentry << (close=="1" ? "close" : "donthide"); ret << thisentry; } query.clear(); return ret; } QString PQHandlingExternal::getIconPathFromTheme(QString binary) { DBG << CURDATE << "PQHandlingExternal::getIconPathFromTheme()" << NL << CURDATE << "** binary = " << binary.toStdString() << NL; // We go through all the themeSearchPath elements for(int i = 0; i < QIcon::themeSearchPaths().length(); ++i) { // Setup path (this is the most likely directory) and format (PNG) QString path = QIcon::themeSearchPaths().at(i) + "/hicolor/32x32/apps/" + binary.trimmed() + ".png"; if(QFile(path).exists()) return "file:" + path; else { // Also check a smaller version path = path.replace("32x32","22x22"); if(QFile(path).exists()) return "file:" + path; else { // And check 24x24, if not in the two before, it most likely is in here (e.g., shotwell on my system) path = path.replace("22x22","24x24"); if(QFile(path).exists()) return "file:" + path; } } // Do the same checks as above for SVG path = path.replace("22x22","32x32").replace(".png",".svg"); if(QFile(path).exists()) return "file:" + path; else { path = path.replace("32x32","22x22"); if(QFile(path).exists()) return "file:" + path; else { path = path.replace("22x22","24x24"); if(QFile(path).exists()) return "file:" + path; } } } // Nothing found return ""; } bool PQHandlingExternal::importConfigFrom(QString path) { DBG << CURDATE << "PQHandlingExternal::importConfigFrom()" << NL << CURDATE << "** path = " << path.toStdString() << NL; #ifdef LIBARCHIVE // All the config files to be imported QHash<QString,QString> oldfiles; oldfiles["CFG_SETTINGS_FILE"] = ConfigFiles::SETTINGS_FILE(); oldfiles["CFG_CONTEXTMENU_FILE"] = ConfigFiles::CONTEXTMENU_FILE(); oldfiles["CFG_SHORTCUTS_FILE"] = ConfigFiles::SHORTCUTS_FILE(); QHash<QString,QString> allfiles; allfiles["CFG_SETTINGS_DB"] = ConfigFiles::SETTINGS_DB(); allfiles["CFG_CONTEXTMENU_DB"] = ConfigFiles::CONTEXTMENU_DB(); allfiles["CFG_SHORTCUTS_DB"] = ConfigFiles::SHORTCUTS_DB(); allfiles["CFG_IMAGEFORMATS_DB"] = ConfigFiles::IMAGEFORMATS_DB(); // Create new archive handler struct archive *a = archive_read_new(); // We allow any type of compression and format archive_read_support_filter_all(a); archive_read_support_format_zip(a); // Read file int r = archive_read_open_filename(a, path.toLocal8Bit().data(), 10240); // If something went wrong, output error message and stop here if(r != ARCHIVE_OK) { std::stringstream ss; ss << CURDATE << "PQHandlingExternal::importConfigFrom(): ERROR: archive_read_open_filename() returned code of " << r << NL; LOG << ss.str(); return false; } PQStartup startup; // Loop over entries in archive struct archive_entry *entry; while(archive_read_next_header(a, &entry) == ARCHIVE_OK) { // Read the current file entry // We use the '_w' variant here, as otherwise on Windows this call causes a segfault when a file in an archive contains non-latin characters QString filenameinside = QString::fromWCharArray(archive_entry_pathname_w(entry)); if(allfiles.contains(filenameinside) || oldfiles.contains(filenameinside)) { // Find out the size of the data size_t size = archive_entry_size(entry); // Create a uchar buffer of that size to hold the data uchar *buff = new uchar[size+1]; // And finally read the file into the buffer int r = archive_read_data(a, (void*)buff, size); if(r != (int)size) { LOG << CURDATE << "PQHandlingExternal::importConfigFrom(): ERROR: Unable to extract file '" << allfiles[filenameinside].toStdString() << "': " << archive_error_string(a) << " - Skipping file!" << NL; continue; } // libarchive does not add a null terminating character, but Qt expects it, so we need to add it on buff[size] = '\0'; // export in new database-based format if(allfiles.contains(filenameinside)) { // The output file... QFile file(allfiles[filenameinside]); // Overwrite old content if(file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { file.write(reinterpret_cast<const char*>(buff), size+1); file.close(); } else LOG << CURDATE << "PQHandlingExternal::importConfigFrom(): ERROR: Unable to write new config file '" << allfiles[filenameinside].toStdString() << "'... Skipping file!" << NL; // export in old text-based format } else { QFile file(oldfiles[filenameinside]); // Overwrite old content if(file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { file.write(reinterpret_cast<const char*>(buff), size+1); file.close(); if(filenameinside == "CFG_CONTEXTMENU_FILE") { QFile::remove(ConfigFiles::CONTEXTMENU_DB()); if(!startup.migrateContextmenuToDb()) LOG << CURDATE << "PQHandlingExternal::importConfigFrom(): ERROR: Unable to migrate imported contextmenu" << NL; } else if(filenameinside == "CFG_SHORTCUTS_FILE") { QFile::remove(ConfigFiles::SHORTCUTS_DB()); if(!startup.migrateShortcutsToDb()) LOG << CURDATE << "PQHandlingExternal::importConfigFrom(): ERROR: Unable to migrate imported shortcuts" << NL; } else if(filenameinside == "CFG_SETTINGS_FILE") { QFile::remove(ConfigFiles::SETTINGS_DB()); if(!startup.migrateSettingsToDb()) LOG << CURDATE << "PQHandlingExternal::importConfigFrom(): ERROR: Unable to migrate imported settings" << NL; } } else LOG << CURDATE << "PQHandlingExternal::importConfigFrom(): ERROR: Unable to write new temporary config file '" << oldfiles[filenameinside].toStdString() << "'... Skipping file!" << NL; } delete[] buff; } } // Close archive r = archive_read_free(a); if(r != ARCHIVE_OK) LOG << CURDATE << "PQHandlingExternal::importConfigFrom(): ERROR: archive_read_free() returned code of " << r << NL; // reload settings, shortcuts, and imageformats // we don't need to reload the contextmenu, the filewatcher takes care of that PQSettings::get().readDB(); PQShortcuts::get().readDB(); PQImageFormats::get().readDatabase(); return true; #endif return false; } void PQHandlingExternal::openInDefaultFileManager(QString filename) { DBG << CURDATE << "PQHandlingExternal::openInDefaultFileManager()" << NL << CURDATE << "** filename = " << filename.toStdString() << NL; QDesktopServices::openUrl(QUrl("file://" + QFileInfo(filename).absolutePath())); } void PQHandlingExternal::saveContextMenuEntries(QVariantList entries) { DBG << CURDATE << "PQHandlingExternal::saveContextMenuEntries()" << NL << CURDATE << "** entries.length() = " << entries.length() << NL; QString cont = ""; bool dontcontinue = false; QSqlDatabase db = QSqlDatabase::database("contextmenu"); if(!db.open()) { LOG << CURDATE << "PQHandlingExternal::saveContextMenuEntries(): SQL error, db.open(): " << db.lastError().text().trimmed().toStdString() << NL; dontcontinue = true; } if(!dontcontinue) { QSqlQuery query(db); query.prepare("DELETE FROM entries"); if(!query.exec()) { LOG << CURDATE << "PQHandlingExternal::saveContextMenuEntries(): SQL error, truncate: " << query.lastError().text().trimmed().toStdString() << NL; dontcontinue = true; } for(const auto &entry : qAsConst(entries)) { if(dontcontinue) continue; QVariantList entrylist = entry.toList(); const QString close = QString::number(entrylist.at(2).toInt()); const QString cmd = entrylist.at(1).toString(); const QString dsc = entrylist.at(0).toString(); if(cmd != "" && dsc != "") { QSqlQuery query(db); query.prepare("INSERT INTO entries (command,desc,close) VALUES(:cmd,:dsc,:cls)"); query.bindValue(":cmd", cmd); query.bindValue(":dsc", dsc); query.bindValue(":cls", close); if(!query.exec()) LOG << CURDATE << "PQHandlingExternal::saveContextMenuEntries(): SQL error, insert: " << query.lastError().text().trimmed().toStdString() << NL; } } } } QSize PQHandlingExternal::getScreenSize() { DBG << CURDATE << "PQHandlingExternal::getScreenSize()" << NL; return QApplication::primaryScreen()->size(); } ����������������������������������������������������������������������������������photoqt-2.5/README.md�������������������������������������������������������������������������������000644 �001750 �001750 �00000006141 14165351123 014672� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# PhotoQt v2.5 __Copyright (C) 2011-2022, Lukas Spies (Lukas@photoqt.org)__ __License:__ GPLv2 (or later) __Website:__ http://photoqt.org PhotoQt is a fast and highly configurable image viewer with a simple and nice interface. PhotoQt is available in the repositories of an increasing number of Linux distributions, and can also be installed in several other ways (Windows installer, Flatpak, etc.). [Check the website](https://photoqt.org/down) to get more information on that, or see below for instructions about how to build PhotoQt from scratch. *************** ## DEPENDENCIES - Qt >= 5.9 - CMake (needed for building PhotoQt) - Qt5 ImageFormats Make sure that you have all the required QML modules installed: QtGraphicalEffects, QtMultimedia, QtQuick, QtQuick.Controls, QtQuick.Controls.Styles, QtQuick.Layouts, QtQuick.Window. Dependencies, that are needed by default, but can be disabled via CMake: - LibArchive - Exiv2 - ImageMagick _or_ GraphicsMagick - LibRaw - Poppler - FreeImage - DevIL - pugixml - Python (incl. pychromecast package) Please note that you probably want to have as many of these enabled as possible as they greatly enhance the experience of PhotoQt. #### NOTE On some systems you also need the *-dev package for compiling (e.g. exiv2-dev - names can vary slightly depending on your distribution). These packages usually can be uninstalled again after compilation is done. #### NOTE PhotoQt can work with either ImageMagick and GraphicsMagick, but due to conflicting naming schemes it is not possible to use both at the same time. By default ImageMagick will be enabled in CMake. ## ADDITIONAL IMAGE FORMATS These are some libraries and tools that can add additional formats to PhotoQt if installed. None of them are needed at compile time, but they can be picked up at runtime if available. - KImageFormats - https://api.kde.org/frameworks/kimageformats/html/index.html - Qt plug-in for AVIF images - https://github.com/novomesk/qt-avif-image-plugin - Qt plug-in for JPEG XL images - https://github.com/novomesk/qt-jpegxl-image-plugin - XCFtools - https://github.com/j-jorge/xcftools - libqpsd - https://github.com/Code-ReaQtor/libqpsd - unrar ## INSTALL 1. _mkdir build && cd build/_ 2. _cmake .._ \# Note: This installs PhotoQt by default into /usr/local/{bin,share} \# To install PhotoQt into another prefix e.g. /usr/{bin,share}, run: _cmake -DCMAKE\_INSTALL\_PREFIX=/usr .._ \# At this step you can also en-/disable any compile time features. 3. _make_ \# This creates an executeable photoqt binary located in the ./build/ folder 4. (as root or sudo) _make install_ \# This command: 1. installs the desktop file to share/applications/ 2. moves some icons to icons/hicolor/ 3. moves the binary to bin/ 4. installs the appdata file to share/appdata/ ## UNINSTALL If you want to uninstall PhotoQt, simply run __make uninstall__ as root. This removes the desktop file (via _xdg-desktop-menu uninstall_), the icons, the binary file, and the appdata file. Alternatively you can simply remove all the files manually which should yield the same result. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/����������������������������������������������������������������������������������000755 �001750 �001750 �00000000000 14007011042 014510� 5����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/64x64/����������������������������������������������������������������������������000755 �001750 �001750 �00000000000 13070101375 015313� 5����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/64x64/apps/�����������������������������������������������������������������������000755 �001750 �001750 �00000000000 14006704717 016267� 5����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/64x64/apps/photoqt.png������������������������������������������������������������000644 �001750 �001750 �00000004160 14006707170 020470� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���bKGD������ pHYs�� �� ����tIME g��IDATx[[lJ"ItU! v#J)}BHHy`@</H<! d b%s $ސƉoq2郏ّwlL#Yrf2}3py/1}c@���`s?�9�(p���9pT&˔!�+�{.J)V6z�>H�V)l�s �ݽǎkƆL&e �t@ɳ�3?eDYCj55vwwvud2)$޼y =|z 佡WT6,<t-e200+WaLvGp|||Sf <lٔݻ'%IR`ljj*rCCCṹT/{.>fA h$fTUJkooonooox1�Fɹ9tgW N*�h<Ȧ,ܹsի]fOeڵk۷o/jEa\-Bf`<:t.wSSͧOƢH$ XMJ n \eIKm��Zs89~x۹s>,ˊt\>ñ2<<Y__5R.ۜ1 ;&e8 BP. a<sGil-6d6@lvvvudd?44z�YZu�8 U�Z`�VWWwttttt?[nT`xxxett4211(#JR}o3 SXeZ[[�ANѣ婩R-P*!H0 SV(Ϟ={x’$8pԩS7nߣw|on0,2Q2R,r.\hӧ=zz5555tuu5D"Խ{|@Q{{QV+SUv}n�LZVgΜ9Iss3'v 4�~^Evnw fk~}j%` =h��?YV}*2?CiPst�/��DUULc x,[nlCSL[a0\6 GYTQV @0F%@ڭ@jT:Mz |@-f ? J[ܫ<F$W;-R dY$HK1JJU] Z,K$yeYay8y6`SSSa�cr%)xΞ=v{ k+vbY �<V%p~ֈV٬RtZd2(J2& Q)*뙍 1eE!`0ArU&hvcYĒɤ"ҥKa-ݰ`Qd(p[e[S�I.UyO<cPebi5YPrS95RnweY52*Ƿ4!R2 W<4 ր0R`{@(�(e y5o=MC`bI9[0:X,<kM !$IJ8n^}IЌu�su,? 2_$IY[[޾}~|ϊ޼yӫ +#fO�FׯWGGGC.+F-gp].mX5�BH x<k/_NNN&TUUhp&PDϥ[܂%�@"|tr^z>;;s~32|CnydG?!DQ:Ε/^'&&D"[a-l#K^k dH`pp0zӲ,{W @uObVnD0!0%?w*{�kbz@;6֨9# ^hFMP~S>e�7)B{1@<O]yp ߗ!ľ|pT����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/32x32/����������������������������������������������������������������������������000755 �001750 �001750 �00000000000 13070101375 015301� 5����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/32x32/apps/�����������������������������������������������������������������������000755 �001750 �001750 �00000000000 14006704651 016252� 5����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/32x32/apps/photoqt.png������������������������������������������������������������000644 �001750 �001750 �00000002174 14006707124 020460� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz���bKGD������ pHYs�� �� ����tIME  s�� IDATXýOcU?}PMY`l qd,$aʍk[6l 1BBƆ"+- (H-#J~^ގhBܼ޽{νGx(MhnG_oN#`ϒ ]Xv@y:ꀧ'C}| Vr�X^^L;==&pdiii(5D;5PhV6M̱YāRy�lkkkkk,B`0888}�|(HO`۶}#Tx200dtttumm0TTJ߀glEr_.@&ST6HDd__@r>E%~z444TWWWR___9_h qK [YYI_UUUَ׆/++sxN (ʥ%x< ,ӽ+�׹tSJ\W1 du0_/'|axD1)ϔFgx@>ZPťo�Հ4󸧧qNR9z^ZHYML0,4m4-]-0lMx< @.ض(Xe~;55, ]m00 !ʱV2vηGGGf,3.05 XkkMn, *wO7,B`Q�7&.(n>"<{`@8t)^&J. sdh4�Usp8Marcm[d2ݲ,+L@y{{WPoO^K `aaH$qm�ܡP( .UY+@4#JeD:&FFF~ܑ.Ii˻Lo]<jiiy `ww7 OM,4xK.~ t}TN�Oe)όl6h.|����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/128x128/��������������������������������������������������������������������������000755 �001750 �001750 �00000000000 13070101375 015455� 5����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/128x128/apps/���������������������������������������������������������������������000755 �001750 �001750 �00000000000 14006704741 016426� 5����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/128x128/apps/photoqt.png����������������������������������������������������������000644 �001750 �001750 �00000011573 14006707213 020636� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������>a���bKGD������ pHYs�� �� ����tIME :򝥳��IDATx]s՗>%Y[(@<p T@GU*Qł̖;v,fKVYa3UĎӲ$Kֻ,t;hTuX|;9s��*��6�@�H�1[O��D�9�X6�0(u��ǿ؈� �L �\��_m��1K�@t�1:�0p*���p��q Q� ��oo� /�"�U ̡8,a�%|��a6up0�L@1(h\]1(  �ȎXb� %�c`4�)�Dd1(<X\��w &f2Ek dž�D"9$IZ\[VC0�@� `qY`ipTBn 嗯NPt:NRl>Z̲in! ̠0Qm`PbU)`bbD"S/_~~yy9G)<K$IJT*8Nb(uE$u�,a3iT �o@27N �MtMt]uM\.L.,,WVV4QaVU*&RvTJh4MӴY<IMIe @wZAu4A@ 01;;t$I ˲RZed矍d2uau�ZܤbPu`F Z254�@ G<"zgN...~ MB6mV>|r\P*qfyR.?nR-`X3T0IĠp�`0I ^z܍7^AnZ\XD3h%XUA  TZ55(fP:B[0)|rIo4YYYyQQylrRNӭdj*�qҴ7Au�^(ૂYnq*W@\..\*2M|^gSTsccL&E$IEeԡ:(�F %x2m)# �}X(n+ o~~~ʕ+O?T8NjT*j&I:H0t+ˢ V�S؅= �8f Bv]P | 7o(4MRrT&SN٭-hȝ ӸܤLKC\2XtڒNe~#y^uB!4=$)ljz_}X,rӤz� Mͩ]|ձN-�t] dՋ`Ujvvvg?� pj؅&2N,fIG{�VW_ ܾ};z]=bX\.K)FI\(?K8ub'a 78H$2g]vZeYT*QlbMjkkb(k˦&�VkcL&%�ݮO>DgYVl>'d_]iU{*Ez|L:O&5,$h6� D$ڇ@`  ׯk_|PV۹\\]]6Vtk$2%$QRuRu�ELOOsaf *ɐDt:*0f�X'<t6Йc78,<!t>8̌A׹s.^8$)Er&777obvT2eG\NBg5 <욛 -// EQ|Vk'kkkd*bwww%ӂ+uU !H$zo߾RR|J&d,#\.ǷmUQàKM1 p8\^^* $ɗJ%zkkTcJ= ,pY$RTL.MLMM|ht歷z?d#47C5nw-`ejEQaYV|?a7x_xᅙׯ_8NT*흝2L[>ԡloo駟r9vqq1xsKKKᙙɩ)Ą BP(x͛75\.o_�#Ǎ\EQx<Ne��皞v_ti֭[oh4?svq"p\D0Ep8<1T8U1A\.abA=iooOw^W\ .--f.^8sυ~񸎩 Y!>Ld2ܝ;w*+X\\Z\\<sʕٳg'Cvyo({ ۵44Ro*I^(B ܽ{ �p8yצy̛o .I<.0瞘=~Z&j5isssN%x?~(l*x"p> �(t }@ 4MEQ<!Kin`}"$ "i:=Hz:c3龧 ˲aH'iU3m@ �'9urAjcoL�xu/:7�0m&EeȮ�ZT'+�ak�$<Tm.j"i 1S3m.amF8mi�@4HT=*86o[/=lvVWA f@"+iD),zUc`^WǬbqF�ntZ&^u;l}HEeVJ>)؊o)Y2 ? ceA(TVu]QKg$ꪪTS֎{ |k׮Ax<Fn\щ5@. \.db( z^:`4Thւ O}o|Wi4g dlD9b23VL?~p5,^��t G–i3=HHZ:6dSUU<v8dk N3giO],˪ $I(_0n˅BMQ0qi.˲o5EQ�0H꫼EQ)TVc89SX35eaeeTY5MtA4aTU5ATQ5YdYA:;NZ4M+,J4jZ,bM꟤opPh(j'p̩z#[U8�L$"�#�cl=k `:M,Я`�3 x�H ?I۱AEq6><࿠xa @)`@]tŽ<!F} 16w?Ue[l YXNǥh3!hU_h� �T�l�]}N 8dq}0Nɉ1wz  FD h8p4` 09a�]+x50XvNN'�Nf Q3V &; H�,`tG~t�0% sc�6O ?.�Rs܃q!iQ* JwE�؀j!dYVY&WV۱Xq޽J<\eeU;~wqR~?eYT*^ZeS?Cr9j]a~siAtovSQ8M q(Zm}X Èdfh85u?ҽ �(,+$u6ɴכTNgY~sZ4r�PUUEQfFLXX,FnllP\j2˲ʐ#t z|LeiZr{{{$4fb(0 ʲl>gh~m :��t�17I\\<H$ZkkkG|^ IReY; gH8`6w)�s<zs]$(>ϓDNx<N=xrtm.S9�U�(bGױ[u #0QeE$Rfd*bdYV=Hg?G< �5L%mllf �<˭V-Jt.#(#wWUYUpt<�E�(<Nv�j}fT՘6<zdJOf0�$tmlv#hXSx&NTH$ :FCP3^WBcޏ.�Bq9fɇ64S(T*5Ms d,:cl8��#!?ƍg#/0tۓͦUw%�42ݻ8gsY�&0Hw` j"Ŕw)K�SÑ2ѹ:"Ъܭ`f\!GG�W8GW1W˘qjv9E vq_8`0J*PJ0G!Ќf1;fS� 6Z:$G�kQ N=6�� 2� ^����IENDB`�������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/16x16/����������������������������������������������������������������������������000755 �001750 �001750 �00000000000 13070101375 015305� 5����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/16x16/apps/�����������������������������������������������������������������������000755 �001750 �001750 �00000000000 14006704620 016252� 5����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/16x16/apps/photoqt.png������������������������������������������������������������000644 �001750 �001750 �00000001022 14006707077 020462� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME %T��IDAT8ˍnPkH x*Oy <�L xD TEEʒdBPk[%%ӽ2˕/crWC�x�)+9E~^o&Zv | `S<t:3!۶OSpJDZDZ}Aq]uݨh\fBcwRp'�VUl6/bi8>GZ;J)Q)E^DB]TPJe:Ht�h�0⶿\.weݫT*{<Ki 8zm[9 M+�`Xj=0%Qb`7;%W! m.@Jh4Z,ˍ-p|0ziE[V0Cp*p<>]_K&dk]j����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/48x48/����������������������������������������������������������������������������000755 �001750 �001750 �00000000000 13070101375 015317� 5����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/48x48/apps/�����������������������������������������������������������������������000755 �001750 �001750 �00000000000 14006704675 016276� 5����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/icons/48x48/apps/photoqt.png������������������������������������������������������������000644 �001750 �001750 �00000003365 14006707146 020505� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���bKGD������ pHYs�� �� ����tIME ^��IDAThZoGfֱMmjQ4j(�7ı"78 DO@\p!2A\$!8'^gN'Ciu2}{of x�(�2�&asy�89�3�b:`a;`|@#o/s O XN��:B)d ML.''�H4pUm ~;vrrr1pztt4ח BiΔAQ `+�V2�EQthnnܼ�TUUUs2888wիWgslAl@v3\v�HUe͛?:urYZZZ~I$Dz{{dREє$(SY)ٕd4MV ;wthkk;��x<355bK.\ZZf7�EY-Gv%aZ^om�WCCCBpƍ#3t]y@(vtH zH⢔�`ĉN>}b;wLtuuEL&cR)0 +ڹx wl��J`U<bm>hoo?~He5^xI%z{{EI\znn�?ru�([|:MMMޓ'Ogjꋋ҃/]41>>`j�ȖU|kB)k?Jr,1cgCCCo<s̡sܟG<ۛ  ._<ѣ8�w>|xߵ]pϞ=%Wkk? eZz; I0T�L{<׮]; xXR�)��laMӌ'2�R>@)V,2Y+fJJePa(TQ 7:YV(Іɏ ǩz] &�_X.beW#!9N"-J/uݤBrJ)sƤc+vѳ]Hc4Mfl6/OU`iX4VEQ|L&|>oȲgYMe#(j,tZSTU[΀L7fϟ]XXXkLֽ2~p8( [r|Z@,shi-��\(?[\ 6uH$DX s�9V㤃n*lw�ĦV!%DJ9{vp'f¨v)[ �r� I@ ׷-�u =wܿ`0199 UAE,//kX,ŗ/_?.vttĬ߹r4^)@-z�h{͆B$I((FG `+eq�Yl\(W 說 Ksn݊޾};痹%d-2�-'%ȲD?'fU$|5_X)aoվU VRkhh.& ݶ%k!%/p؂+J2dLni'bX)=;~͠�+*z#73\"ۦJV8mj@K3%����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������photoqt-2.5/README����������������������������������������������������������������������������������000644 �001750 �001750 �00000006326 14165351110 014274� 0����������������������������������������������������������������������������������������������������ustar�00luspi���������������������������luspi���������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ PhotoQt v2.5 - Copyright (C) 2011-2022, Lukas Spies (Lukas@photoqt.org), License: GPLv2 (or later) -- Website: http://photoqt.org -------------------------------------------------------------------- PhotoQt is a fast and highly configurable image viewer with a simple and nice interface. PhotoQt is available in the repositories of an increasing number of Linux distributions, and can also be installed in several other ways (Windows installer, Flatpak, etc.). Check the website (https://photoqt.org/down) to get more information on that, or see below for instructions about how to build PhotoQt from scratch. DEPENDENCIES -------------- - Qt >= 5.9 - CMake (needed for building PhotoQt) - Qt5 ImageFormats > Make sure that you have the required QML modules installed: QtGraphicalEffects, QtMultimedia, QtQuick, QtQuick.Controls, QtQuick.Controls.Styles, QtQuick.Layouts, QtQuick.Window > Dependencies, that are needed by default, but can be disabled via CMake: - LibArchive - Exiv2 - ImageMagick or GraphicsMagick - LibRaw - Poppler - FreeImage - DevIL - pugixml - Python (incl. pychromecast package) > Please note that you probably want to have as many of these enabled as possible as they greatly enhance the experience of PhotoQt. > NOTE On some systems you also need the *-dev package for compiling (e.g. exiv2-dev - names can vary slightly depending on your distribution). These packages usually can be uninstalled again after compilation is done. > NOTE PhotoQt can work with either ImageMagick and GraphicsMagick, but due to conflicting naming schemes it is not possible to use both at the same time. By default GraphicsMagick will be enabled in CMake. OPTIONAL DEPENDENCIES ----------------------- > These are some libraries and tools that can add additional formats to PhotoQt if installed. None of them are needed at compile time, but they can be picked up at runtime if available. - KImageFormats - https://api.kde.org/frameworks/kimageformats/html/index.html - Qt plug-in for AVIF images - https://github.com/novomesk/qt-avif-image-plugin - Qt plug-in for JPEG XL images - https://github.com/novomesk/qt-jpegxl-image-plugin - XCFtools - https://github.com/j-jorge/xcftools - libqpsd - https://github.com/Code-ReaQtor/libqpsd - unrar INSTALL --------- 1) mkdir build && cd build/ 2) cmake .. # Note: This installs PhotoQt by default into /usr/local/{bin,share} # To install PhotoQt into another prefix e.g. /usr/{bin,share}, run: cmake -DCMAKE_INSTALL_PREFIX=/usr .. # At this step you can also en-/disable any compile time features. 3) make # This creates an executeable photoqt binary located in the ./build/ folder 4) (as root or sudo) make install # This ( i) installs the desktop file to share/applications/ # ( ii) installs some icons to icons/hicolor/ # (iii) installs the binary to bin/ # ( iv) installs the appdata file to share/appdata/ UNINSTALL ----------- If you want to uninstall PhotoQt, simply run "make uninstall" as root. This removes the desktop file (via xdg-desktop-menu uninstall), the icons, the binary file, and the appdata file. Alternatively you can simply remove all the files manually which should yield the same result. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������