Puppy Linux Discussion Forum Forum Index Puppy Linux Discussion Forum
Puppy HOME page : puppylinux.com
"THE" alternative forum : puppylinux.info
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

The time now is Mon 01 Sep 2014, 17:09
All times are UTC - 4
 Forum index » Advanced Topics » Additional Software (PETs, n' stuff) » Desktop
Glipper-lite
Post new topic   Reply to topic View previous topic :: View next topic
Page 1 of 4 [46 Posts]   Goto page: 1, 2, 3, 4 Next
Author Message
disciple

Joined: 20 May 2006
Posts: 6430
Location: Auckland, New Zealand

PostPosted: Fri 05 Feb 2010, 22:21    Post subject:  Glipper-lite
Subject description: later bugfixed version which allows pasting binary data (e.g. images)
 

DESCRIPTION
glipper puts a little icon in your system tray to keep a list of your clipboard (cut/copy) and your primary selection (which is what gets pasted when you click in a text editor [or wherever] with your middle mouse button). A welcome side-effect is that it takes ownership of what you cut/copy or select... so you can past it even after closing the application that you cut/copied or selected it in.

ABOUT THIS VERSION
This version seems to be one of the best kept secrets of open source Sad
After glipper got gnome dependencies and before they rewrote it in python, someone made a "glipper-lite" tree in cvs.
"Lite" means they removed the Gnome dependencies, so the "help" context menu entry and button in the preferences don't work (Perhaps someone would like to hack a fix for this? Or even just disable them? Note that the older version of glipper didn't have a help anyway). It does depend on glade now, unlike the old version Sad
They also fixed the bug that prevented pasting of binary data (e.g. images in Openoffice or wherever). I'm guessing this will also have fixed the bug related to paste in (Seamonkey?) Composer, which caused Barry to turn glipper off by default in Puppy... although I don't know the details of that problem.
You can also set a shortcut key combination to pop up the glipper history list.

ALTERNATIVES
This uses a fraction more ram than parcellite, which uses a fraction more than the old version of glipper. The latest version of parcellite has also fixed an equivalent bug preventing pasting binary data, and you can get it at http://www.murga-linux.com/puppy/viewtopic.php?t=51799, but note that glipper-lite is better, because with parcellite it is impossible to tell the difference between the situation where the
clipboard and the Primary selection contain the same text, and the
situation where the cliboard contains text but the Primary selection
contains binary data (e.g. a picture selected in openoffice.org). The advantages of parcellite are its "edit clipboard" and "actions" features... but I suspect most people don't use them.
In parcellite when the clipboard contents get to the bottom of the list they move to the top again, which is rather silly, but not too much of a problem.
Glipper also has a nice crisp icon, while Parcellite has a blurry one Smile

BUGS YOU CAN FIX
- the help entry in the context menu and button in the preferences dialogue don't work.
- if the Primary Selection is binary data, you can't click its entry to put it in the clipboard as well.
- if the Primary Selection is binary data and you close the program that owns it, glipper still lists it, but it is actually gone - if you middle click you can't paste it.
- if you clear the history, then select or copy a picture or whatever, glipper won't list it - i.e. there must be at least one text entry in the history before it will identify that you are selecting or copying binary data.
- if the clipboard contains binary data, then you clear the history, when you select something next the binary data reappears. ACTUALLY, even though text that was in the clipboard does not reappear, I consider the bug to be not that the entry reappears, but that the entries for both clipboard and primary selection (whether for text or binary data) disappear in the first place - the contents of the clipboard and the primary selection remain unless you close the program that put them there, so they should not be cleared from the list... or alternatively glipper should actually clear the clipboard and primary selection at the same time as clearing its list. I imagine there is a simple fix for this - adding a line or two of code at the end of the function that clears the list, to get the current selection and clipboard, like at startup.

N.B. I upxed the binary.
glipper-lite.pet
Description  Please try the one I made further down, unless you have an antique version of GTK, which doesn't support gtkbuilder http://www.murga-linux.com/puppy/viewtopic.php?p=571240#571240
pet

 Download 
Filename  glipper-lite.pet 
Filesize  18.6 KB 
Downloaded  701 Time(s) 
glipper-lite_NLS.pet
Description  International files
pet

 Download 
Filename  glipper-lite_NLS.pet 
Filesize  5.95 KB 
Downloaded  649 Time(s) 
glipper-lite_src.tar.gz
Description  The source if you don't want to get it from cvs
gz

 Download 
Filename  glipper-lite_src.tar.gz 
Filesize  92.21 KB 
Downloaded  659 Time(s) 

_________________
DEATH TO SPREADSHEETS
- - -
Classic Puppy quotes
- - -
Beware the demented serfers!

Last edited by disciple on Fri 07 Oct 2011, 10:04; edited 5 times in total
Back to top
View user's profile Send private message 
amigo

Joined: 02 Apr 2007
Posts: 2238

PostPosted: Sat 06 Feb 2010, 03:52    Post subject:  

I found that myself the other week when there was some discussion of glipper. I had already patched the last glipper C release to not need/use any gnome stuff, but I haven't compared the sources or running versions to see what other differences there were in the code.

It often pays to browse around the repos of projects! I also found some 'extra' code for the last inkscape version which doesn't need gtkmm a patchset which was submitted just days after that last C version was released. By a few days later the main branch of the repo was already changed to use the new gtkmm interface, but there was *one day* where the old code with the extra patchset was available, and with only *one file* of CPP code. Anyway, it's fun to dif around in peoples closets for old code...
Back to top
View user's profile Send private message 
ttuuxxx


Joined: 05 May 2007
Posts: 10747
Location: Ontario Canada,Sydney Australia

PostPosted: Sat 06 Feb 2010, 09:41    Post subject:  

I removed the help from the Ccode and also from the glade.
Now it works without error Smile
ttuuxxx
glipper-lite-1.0.tar.gz
Description 
gz

 Download 
Filename  glipper-lite-1.0.tar.gz 
Filesize  80.65 KB 
Downloaded  745 Time(s) 
glipper-lite-1.0-i386.pet
Description 
pet

 Download 
Filename  glipper-lite-1.0-i386.pet 
Filesize  18.47 KB 
Downloaded  683 Time(s) 

_________________
http://audio.online-convert.com/ <-- excellent site
http://samples.mplayerhq.hu/A-codecs/ <-- Codec Test Files
http://html5games.com/ <-- excellent HTML5 games Smile


Last edited by ttuuxxx on Sat 06 Feb 2010, 12:45; edited 2 times in total
Back to top
View user's profile Send private message Visit poster's website 
ttuuxxx


Joined: 05 May 2007
Posts: 10747
Location: Ontario Canada,Sydney Australia

PostPosted: Sat 06 Feb 2010, 09:54    Post subject:  

LOL I'll have to redo the sources.
ttuuxxx

_________________
http://audio.online-convert.com/ <-- excellent site
http://samples.mplayerhq.hu/A-codecs/ <-- Codec Test Files
http://html5games.com/ <-- excellent HTML5 games Smile

Back to top
View user's profile Send private message Visit poster's website 
amigo

Joined: 02 Apr 2007
Posts: 2238

PostPosted: Sat 06 Feb 2010, 12:30    Post subject:  

I looked over the various sources again today. As best as I can see, all the fixes which were part of the patch you found and applied before to the glipper-0.95.1 sources are in the glipper-lite sources -apparently without any changes.

I had also downloaded the last CVS sources from the regular glipper trunk -the last commit was 2007-06-04. There are lots of changes there, but I haven't looked enough to see where that date fits within the release versions -oh wait here it is -glipper-1.0 was released on 2007-08-07. glipper-lite is marked as 1.0 also so it was split from trunk just before the very gnome-dependent glipper-1.0. It might pay to do some cross-diffs to compare the earlier release versions with the last CVS and with 1.0 to see if any more fixes are in there which could be back-ported. Unfortunately, large hunks of the code have very significant changes which makes it harder to make sense of it... Nice hobby for someone with the time.
Back to top
View user's profile Send private message 
ttuuxxx


Joined: 05 May 2007
Posts: 10747
Location: Ontario Canada,Sydney Australia

PostPosted: Sat 06 Feb 2010, 12:48    Post subject:  

ok I posted updated sources again, lol last time I was missing 1/2 the files, anyways also change the root directory from root./glipper to root/.glipperlite and did some name changes also to Glipper-Lite
ttuuxxx

_________________
http://audio.online-convert.com/ <-- excellent site
http://samples.mplayerhq.hu/A-codecs/ <-- Codec Test Files
http://html5games.com/ <-- excellent HTML5 games Smile

Back to top
View user's profile Send private message Visit poster's website 
amigo

Joined: 02 Apr 2007
Posts: 2238

PostPosted: Sat 06 Feb 2010, 15:00    Post subject:  

ttuuxxx, I think you missed a couple of spots for changing the name of the hidden directory where glipper-lite keeps its' history and prefs files.
I rediffed your sources to fix that, and also to simply disable the help feature instead of removing the files -someone might come along and fix the feature to work without 'yelp', for all I know. I guess you found out that the 'fixes' diff referenced before was no longer needed as I see you left the *.rej file and the old patch in the sources.
Here are the refactored diffs -I have split it into two diffs to be clearer about what they each do:

glipper-lite-name.diff:
Code:
--- ./src/main.c.00   2007-04-25 22:38:59.000000000 +0200
+++ ./src/main.c   2010-02-06 19:24:16.000000000 +0100
@@ -130,7 +130,7 @@
       g_free(temp);
 
       //Add description tooltip to bold entry
-      gtk_tooltips_set_tip(toolTip, MenuItem, _("This entry was copied with ctrl+c.\nIt can be pasted with ctrl+v."), "Glipper");
+      gtk_tooltips_set_tip(toolTip, MenuItem, _("This entry was copied with ctrl+c.\nIt can be pasted with ctrl+v."), "Glipper-Lite");
    }
    else if (!item)
    {
@@ -177,7 +177,7 @@
          gtk_image_new_from_pixbuf(pixbuf));
    }   
    gtk_label_set_text((GtkLabel*)gtk_bin_get_child((GtkBin*)menuHeader),
-         g_strdup_printf(_("Glipper - Clipboardmanager  (%s)"), keyComb));
+         g_strdup_printf(_("Glipper-Lite - Clipboardmanager  (%s)"), keyComb));
 
    if (historyMenu != NULL)
    {
@@ -212,7 +212,7 @@
       }
 
       //Add description tooltip to first item
-      gtk_tooltips_set_tip(toolTip, firstItem, _("This is the last element to be copied.\nIt can be pasted with the middle mouse button."), "Glipper");
+      gtk_tooltips_set_tip(toolTip, firstItem, _("This is the last element to be copied.\nIt can be pasted with the middle mouse button."), "Glipper-Lite");
 
       if (temp != NULL || (DefaultClip.isBin && !PrimaryClip.isBin))
       {
@@ -432,8 +432,8 @@
 
    //Add description tooltip to the icon
    toolTip = gtk_tooltips_new();
-   gtk_tooltips_set_tip(toolTip, eventbox, g_strdup_printf(_("Glipper (%s)\nClipboardmanager"),
-      keyComb), "Glipper");
+   gtk_tooltips_set_tip(toolTip, eventbox, g_strdup_printf(_("Glipper-Lite (%s)\nClipboardmanager"),
+      keyComb), "Glipper-Lite");
 
    //connect and show everything:
    gtk_container_add(GTK_CONTAINER(eventbox), tray_icon_image);
@@ -469,7 +469,7 @@
       "translator-credits", _("translator-credits"),
       "license", license,
       "name", "Glipper-Lite",
-      "comments", _("Clipboardmanager"),
+      "comments", _("Clipboard manager"),
       "logo", gdk_pixbuf_new_from_file(PIXMAPDIR"/glipper.png", &pix_error),
       "website", "http://glipper.sourceforge.net/",
       "version", VERSION,
@@ -516,7 +516,7 @@
 //trys to open (or create) a file in "~/.glipper" for writing purposes:
 FILE* writeGlipperFile(char* filename)
 {
-   gchar* directory = g_build_path("/", g_get_home_dir(), ".glipper", NULL);
+   gchar* directory = g_build_path("/", g_get_home_dir(), ".glipperlite", NULL);
    gchar* path = g_build_filename(directory, filename, NULL);
    FILE* file = fopen(path, "w");
    if (file == NULL)
@@ -528,7 +528,7 @@
             g_warning("Can't open or create file %s!", path);
       }
       else
-         g_warning ("Can't create directory '.glipper' in user's home directory!");
+         g_warning ("Can't create directory '.glipperlite' in user's home directory!");
    }
    g_free(directory);
    g_free(path);
@@ -556,7 +556,7 @@
 
 void readHistory()
 {
-   gchar* path= g_build_filename(g_get_home_dir(), ".glipper/history", NULL);
+   gchar* path= g_build_filename(g_get_home_dir(), ".glipperlite/history", NULL);
    FILE* histFile = fopen(path, "r");
    g_free(path);
    if (histFile != 0)
@@ -581,7 +581,7 @@
 
 void readPreferences()
 {
-   gchar* path= g_build_filename(g_get_home_dir(), ".glipper/prefs", NULL);
+   gchar* path= g_build_filename(g_get_home_dir(), ".glipperlite/prefs", NULL);
    FILE* prefFile = fopen(path, "r");
    g_free(path);
    free(keyComb);
@@ -614,7 +614,7 @@
    hasChanged=1;
    deleteOldElement(maxElements);
    keybinder_bind(keyComb, keyhandler, NULL);
-   gtk_tooltips_set_tip(toolTip, eventbox, g_strdup_printf(_("Glipper (%s)\nClipboardmanager"),
+   gtk_tooltips_set_tip(toolTip, eventbox, g_strdup_printf(_("Glipper-Lite (%s)\nClipboardmanager"),
       keyComb), "Glipper");
 }
 
--- ./data/glipper-properties.glade.00   2007-01-04 21:06:06.000000000 +0100
+++ ./data/glipper-properties.glade   2010-02-06 19:16:36.000000000 +0100
@@ -5,7 +5,7 @@
 
 <widget class="GtkDialog" id="preferences-dialog">
   <property name="border_width">5</property>
-  <property name="title" translatable="yes">Glipper Preferences</property>
+  <property name="title" translatable="yes">Glipper-Lite Preferences</property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
   <property name="window_position">GTK_WIN_POS_NONE</property>
   <property name="modal">False</property>
@@ -280,7 +280,7 @@
         <child>
           <widget class="GtkLabel" id="label10">
             <property name="visible">True</property>
-            <property name="label" translatable="yes">Which clipboards should be managed by Glipper?</property>
+            <property name="label" translatable="yes">Which clipboards should be managed by Glipper-Lite?</property>
             <property name="use_underline">False</property>
             <property name="use_markup">True</property>
             <property name="justify">GTK_JUSTIFY_LEFT</property>


glipper-lite-disable-help.diff:
Code:
--- ./src/main.c.01   2010-02-06 19:24:16.000000000 +0100
+++ ./src/main.c   2010-02-06 19:30:23.000000000 +0100
@@ -489,7 +489,7 @@
    GtkWidget* about = gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT, NULL);
    g_signal_connect(G_OBJECT(about), "activate", G_CALLBACK(show_about), NULL);
 
-   GtkWidget* help = gtk_image_menu_item_new_from_stock(GTK_STOCK_HELP, NULL);
+   //GtkWidget* help = gtk_image_menu_item_new_from_stock(GTK_STOCK_HELP, NULL);
    //g_signal_connect(G_OBJECT(help), "activate", G_CALLBACK(showHelp), NULL);
 
    GtkWidget* preferences = gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, NULL);
@@ -497,7 +497,7 @@
 
    //Add the widgets to the menu
    gtk_menu_append((GtkMenu*)popupMenu, preferences);
-   gtk_menu_append((GtkMenu*)popupMenu, help);
+   //gtk_menu_append((GtkMenu*)popupMenu, help);
    gtk_menu_append((GtkMenu*)popupMenu, about);
    gtk_menu_append((GtkMenu*)popupMenu, gtk_separator_menu_item_new());
    gtk_menu_append((GtkMenu*)popupMenu, quit);
--- ./data/glipper-properties.glade.01   2010-02-06 19:16:36.000000000 +0100
+++ ./data/glipper-properties.glade   2010-02-06 19:28:46.000000000 +0100
@@ -45,18 +45,6 @@
        </widget>
      </child>
 
-     <child>
-       <widget class="GtkButton" id="helpButton">
-         <property name="visible">True</property>
-         <property name="can_default">True</property>
-         <property name="can_focus">True</property>
-         <property name="label">gtk-help</property>
-         <property name="use_stock">True</property>
-         <property name="relief">GTK_RELIEF_NORMAL</property>
-         <property name="focus_on_click">True</property>
-         <property name="response_id">-11</property>
-       </widget>
-     </child>
    </widget>
    <packing>
      <property name="padding">0</property>


In looking through the various sources from CVS, there is a glipper-ng branch which is the new glipper(1.0) which is all py-gtk, etc. But the cvs branch named simply 'glipper' has some interesting code in it in the form of python-based plugins (which are also in glipper-1.0).

For my sources of glipper-lite (and glipper-0.95.1) I have used a debian patch which provides a man-page (you know what those are, ttuuxxx? LOL) and some extra images (xpm, 48x48 png and a svg).
Back to top
View user's profile Send private message 
disciple

Joined: 20 May 2006
Posts: 6430
Location: Auckland, New Zealand

PostPosted: Sat 06 Feb 2010, 19:37    Post subject:  

Expanding on this, just for the record:
disciple wrote:
- if the Primary Selection is binary data, you can't click its entry to put it in the clipboard as well.

If the Primary Selection includes text and binary data (e.g. you select text and a picture in Firefox), when you click on its entry the text gets put in both the Primary Selection and the Clipboard, by itself Sad

_________________
DEATH TO SPREADSHEETS
- - -
Classic Puppy quotes
- - -
Beware the demented serfers!
Back to top
View user's profile Send private message 
ttuuxxx


Joined: 05 May 2007
Posts: 10747
Location: Ontario Canada,Sydney Australia

PostPosted: Sun 07 Feb 2010, 00:42    Post subject:  

amigo wrote:


For my sources of glipper-lite (and glipper-0.95.1) I have used a debian patch which provides a man-page (you know what those are, ttuuxxx? LOL) and some extra images (xpm, 48x48 png and a svg).


Hi amigo thanks for your input, I do know what man pages are, lol I even added a man page editor in 2.14x about 6 months back "gmanedit". But by default Puppy in general remove man pages to save space, so adding that feature would actually be working backwards since they just get tossed anyways. the largest icon needed for glipper is 24x24.png, it will never have a desktop 48x48 icon and svg is just a waste of space.
Help files are useless for this type of application, I even read the default help files and really, its a no-brainer application. extra code,extra icons, patch files, etc are just added uneeded extra weight. Code reduction, icon compression, no man pages is really whats best for overall size. i like parcellite better but there are a few dedicated glipper users, Barry is one.

ttuuxxx

_________________
http://audio.online-convert.com/ <-- excellent site
http://samples.mplayerhq.hu/A-codecs/ <-- Codec Test Files
http://html5games.com/ <-- excellent HTML5 games Smile

Back to top
View user's profile Send private message Visit poster's website 
ttuuxxx


Joined: 05 May 2007
Posts: 10747
Location: Ontario Canada,Sydney Australia

PostPosted: Sun 07 Feb 2010, 01:37    Post subject:  

here's another version of glipper that I removed the adjustable preferences from the menu and removed the glade file. 3kb smaller, lol
ttuuxx
glipper-lite-1.0-i386.pet
Description 
pet

 Download 
Filename  glipper-lite-1.0-i386.pet 
Filesize  15.47 KB 
Downloaded  653 Time(s) 

_________________
http://audio.online-convert.com/ <-- excellent site
http://samples.mplayerhq.hu/A-codecs/ <-- Codec Test Files
http://html5games.com/ <-- excellent HTML5 games Smile

Back to top
View user's profile Send private message Visit poster's website 
amigo

Joined: 02 Apr 2007
Posts: 2238

PostPosted: Sun 07 Feb 2010, 03:48    Post subject:  

Wow! 3KB saved! Just think, if you do that for 300 programs you save a whopping 1MB! I'll never understand the effort to cripple a program as much as possible and still have it run... Why not just gut the rest of the funtionality so that it only displays an icon and does nothing else? It's too bad the help doesn't work because someone who has never used a clipboard history app would be absolutley clueless as to what the icon is and what the app does.

I'll grant you that for your purposes you don't need the other larger icons because you have the thing always running at startup. But someone else might not want all those bloaty little apps running all the time, so a larger icon and the desktop file are handy to have around. Anyway, for my sources, I always try to collect as much useful material for or about the package as possible -including a copy of any pertinent web-page to go with them.

I sure don't understand why you'd disable the preferences for the program for a measly 3KB of saved space....

Thanks, disciple, for the precise explanation of the problems so someone might be able to fix them.
Back to top
View user's profile Send private message 
ttuuxxx


Joined: 05 May 2007
Posts: 10747
Location: Ontario Canada,Sydney Australia

PostPosted: Sun 07 Feb 2010, 04:32    Post subject:  

hi amigo, LOL no that wasn't what I was aiming for, I figured if I removed the glade file from the sources that it might cut the file size down by a lot, but when I saw only 3kb compressed I didn't even package or keep the sources,lol I agree 3 kb is nothing but 9 kb would of been nice to have it 1/2 the size. as for the functionality, I did increase the amount of lines kept in history and the size of lines. I kept defaults other than the 2 I increased, so it basically the functionality works the same, just not adjustable.
ttuuxxx

_________________
http://audio.online-convert.com/ <-- excellent site
http://samples.mplayerhq.hu/A-codecs/ <-- Codec Test Files
http://html5games.com/ <-- excellent HTML5 games Smile

Back to top
View user's profile Send private message Visit poster's website 
disciple

Joined: 20 May 2006
Posts: 6430
Location: Auckland, New Zealand

PostPosted: Fri 12 Feb 2010, 20:57    Post subject:  

OK,
I've done something a little more useful than Ttuuxxx - converted it to use gtkbuilder (built into newer GTK versions) instead of glade. I did this mainly as a learning experience, but it does remove the glade dependency and drop the memory usage below that of parcellite Smile

I was wondering if you guys can help me with either of these questions:
- instead of a glipper-properties.glade, it now has a glipper-properties.ui file, and I'm not sure how this affects the localisation files. Should I just replace all the instances of "glipper-properties.glade" with "glipper-properties.ui", directly in all the individual .po files, or is that not the proper thing to do?
- is there an equivalent of `make clean` that will clean out all the files created by autogen.sh, to make it easy to create a patch with diff?

_________________
DEATH TO SPREADSHEETS
- - -
Classic Puppy quotes
- - -
Beware the demented serfers!
Back to top
View user's profile Send private message 
technosaurus


Joined: 18 May 2008
Posts: 4348

PostPosted: Sat 13 Feb 2010, 00:07    Post subject:  

@disciple - sounds great, if only we could have gtkdialog updated for gtkbuilder vs. glade that would help about half of puppy's base and eliminate the last glade dependency
the locales "work in a slightly different way" http://library.gnome.org/devel/gtk/unstable/gtk-migrating-GtkBuilder.html

make distclean ???

_________________
Web Programming - Pet Packaging 100 & 101
Back to top
View user's profile Send private message 
disciple

Joined: 20 May 2006
Posts: 6430
Location: Auckland, New Zealand

PostPosted: Sat 13 Feb 2010, 03:00    Post subject:  

Quote:
the locales "work in a slightly different way"

It doesn't use "context", so I think that's not a problem.
So do you think I do just manually replace the string in all the .po files?

Quote:
make distclean ???

That seemed right... but I still get 57,889 lines of diff Smile
I suppose it isn't too hard to manually trim down.

_________________
DEATH TO SPREADSHEETS
- - -
Classic Puppy quotes
- - -
Beware the demented serfers!
Back to top
View user's profile Send private message 
Display posts from previous:   Sort by:   
Page 1 of 4 [46 Posts]   Goto page: 1, 2, 3, 4 Next
Post new topic   Reply to topic View previous topic :: View next topic
 Forum index » Advanced Topics » Additional Software (PETs, n' stuff) » Desktop
Jump to:  

You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group
[ Time: 0.1351s ][ Queries: 13 (0.0061s) ][ GZIP on ]