diff --git a/le-tour/css/browser.css b/le-tour/css/browser.css
new file mode 100644
index 0000000000000000000000000000000000000000..fc26823cc86400a6cf215a11acdce47973e38659
--- /dev/null
+++ b/le-tour/css/browser.css
@@ -0,0 +1,191 @@
+#browser {
+display: none;
+background-image: url("../images/browser/corpo.png");
+position: absolute;
+background-size: 100%;
+height: 675px;
+width: 974px;
+left: 169px;
+}
+
+#browserclose {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 0px;
+}
+
+#browserminimize {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 56px;
+}
+
+#abas {
+width: 972px;
+left: 1px;
+position: absolute;
+height: 25px;
+top: 54px;
+}
+
+#content-browser {
+position: absolute;
+top: 79px;
+left: 1px;
+}
+
+#dompub1 {
+z-index: 1;
+position: absolute;
+display: none;
+}
+#objedu1 {
+z-index: 1;
+position: absolute;
+display: none;
+}
+#porprof1 {
+z-index: 1;
+position: absolute;
+display: none;
+}
+#tvesc1 {
+z-index: 1;
+position: absolute;
+display: none;
+}
+#firefox1 {
+z-index: 1;
+position: absolute;
+display: none;
+width: 972px;
+height: 595px;
+}
+
+#dompub2 {
+z-index: 5;
+background-image: url("../images/browser/dompub2.png");
+}
+
+#objedu2 {
+z-index: 5;
+background-image: url("../images/browser/objedu2.png");
+}
+
+#porprof2 {
+z-index: 5;
+background-image: url("../images/browser/porprof2.png");
+}
+
+#tvesc2 {
+z-index: 5;
+background-image: url("../images/browser/tvesc2.png");
+}
+
+#firefox2 {
+z-index: 5;
+background-image: url("../images/browser/firefox2.png");
+}
+
+.browsercontent{
+position: relative;
+display: none;
+width: 194px;
+height: 25px;
+float: left;
+background-size: 100% 100%;
+background-repeat: no-repeat;
+}
+/*******************************/
+#dompubX {
+z-index: 6;
+display: none;
+width: 19px;
+height: 18px;
+float: left;
+top: 4px;
+left: 173px;
+position: absolute;
+}
+
+#objeduX {
+z-index: 6;
+display: none;
+width: 19px;
+height: 18px;
+float: left;
+top: 4px;
+left: 173px;
+position: absolute;
+}
+
+#porprofX {
+z-index: 6;
+display: none;
+width: 19px;
+height: 18px;
+float: left;
+top: 4px;
+left: 173px;
+position: absolute;
+}
+
+#tvescX {
+z-index: 6;
+display: none;
+width: 19px;
+height: 18px;
+float: left;
+top: 4px;
+left: 173px;
+position: absolute;
+}
+
+#firefoxX {
+z-index: 6;
+display: none;
+width: 19px;
+height: 18px;
+float: left;
+top: 4px;
+left: 173px;
+position: absolute;
+}
+
+#dompubclose {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 0px;}
+
+#objeduclose {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 0px;}
+
+#portprofclose {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 0px;}
+
+#tvescclose {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 0px;}
diff --git a/le-tour/css/desktop.css b/le-tour/css/desktop.css
new file mode 100644
index 0000000000000000000000000000000000000000..858dbbc86224445c0f1edb4884f7069e63d7ea16
--- /dev/null
+++ b/le-tour/css/desktop.css
@@ -0,0 +1,304 @@
+#hide{
+    display: none;
+}
+
+body{
+/*background-image: url("../images/backgrounds/LE5.png");
+background-size: 100%;
+background-repeat: no-repeat;*/
+overflow: hidden;
+margin: 0px;
+height: 100%;
+width: 100%;
+}
+
+#wallpaper{
+z-index:0;
+position: absolute;
+width: 100%;
+height: 100%;
+}
+
+#bar{
+background-color: white;
+top: 0px;
+left: 0px;
+position: absolute;
+width: 100%;
+height: 23px;
+z-index:9;
+}
+
+#menu-logo{
+top: 0px;
+left: 0px;
+position: absolute;
+width: 55px;
+z-index:10;
+}
+
+#clock{
+color: #18537D;
+margin-left: -58px;
+left: 50%;
+position: absolute;
+font-family: loma;
+margin-top: 4px;
+font-size: 14px;
+top: -2px;
+font-weight: bold;
+}
+
+#menu{
+width: 58px;
+}
+
+#shortcut-edubar{
+top: 0px;
+width: 4px;
+height: 50%;
+position: absolute;
+z-index: 30;
+}
+#shortcut-shortcuts{
+top: 50%;
+width: 4px;
+height: 50%;
+position: absolute;
+z-index: 30;
+}
+
+
+
+#bars-laterais{
+width: 76px;
+height: 100%;
+position: absolute;
+}
+#bars-laterais1{
+width: 76px;
+height: 50%;
+position: absolute;
+}
+#bars-laterais2{
+top: 50%;
+width: 76px;
+height: 50%;
+position: absolute;
+}
+
+#edubarIcon1{
+width: 54px;
+position: relative;
+}
+#edubarIcon2{
+width: 54px;
+position: relative;
+}
+#edubarIcon3{
+width: 54px;
+position: relative;
+}
+#edubarIcon4{
+width: 54px;
+position: relative;
+}
+
+#edubar{
+position: absolute;
+top: 100px;
+}
+
+#shortcuts{
+width: 68px;
+position: absolute;
+height: 297px;
+}
+
+#shortcut-background{
+width: 75px;
+position: absolute;
+height: 293px;
+margin: 0px;
+left: 0px;
+}
+
+#shortcut-overview{
+position: absolute;
+width: 11px;
+height: 11px;
+z-index: 40;
+}
+
+#icon_bar4{
+top: 5px;
+right: 110px;
+position: absolute;
+}
+#icon_bar3{
+top: 5px;
+right: 146px;
+position: absolute;
+}
+#icon_bar2{
+top: 5px;
+right: 184px;
+position: absolute;
+}
+
+#icon_bar1{
+top: 5px;
+right: 237px;
+position: absolute;
+}
+
+#icon_bar0{
+top: 5px;
+right: 262px;
+position: absolute;
+}
+
+
+#user{
+color: #18537D;
+font-family: loma;
+top: -1px;
+right: 10px;
+position: absolute;
+font-size: 16px;
+font-weight: bold;
+}
+
+#icon_bar0_sub{
+position: absolute;
+width: 11px;
+height: 11px;
+right: 192px;
+top: 20px;
+display: none;
+}
+
+#icon_bar1_sub{
+position: absolute;
+width: 11px;
+height: 11px;
+right: 9px;
+top: 20px;
+display: none;
+}
+#icon_bar2_sub{
+position: absolute;
+width: 11px;
+height: 11px;
+right: 117px;
+top: 20px;
+display: none;
+}
+#icon_bar3_sub{
+position: absolute;
+width: 11px;
+height: 11px;
+right: 182px;
+top: 20px;
+display: none;
+}
+#user_sub{
+position: absolute;
+width: 11px;
+height: 11px;
+right: 310px;
+top: 26px;
+display: none;
+}
+
+#loading{
+background-image: url("../images/loading/le-background-w.png");
+z-index: 48;
+position: absolute;
+width: 100%;
+height: 100%;
+background-repeat: no-repeat;
+}
+
+#logo{
+position: absolute;
+left: 50%;
+margin-top: -170px;
+margin-left: -258px;
+top: 50%;
+}
+
+#ball_w_1{
+position:absolute;
+left:45%;
+margin-top: 70px;
+top: 50%;
+}
+
+#ball_w_2{
+position:absolute;
+left:47%;
+margin-top: 70px;
+top: 50%;
+}
+
+#ball_w_3{
+position:absolute;
+left:49%;
+margin-top: 70px;
+top: 50%;
+}
+
+#ball_w_4{
+position:absolute;
+left:51%;
+margin-top: 70px;
+top: 50%;
+}
+
+#ball_w_5{
+position:absolute;
+left:53%;
+margin-top: 70px;
+top: 50%;
+}
+
+#ball_g_1{
+display: none;
+position:absolute;
+left:45%;
+margin-top: 70px;
+top: 50%;
+}
+
+#ball_g_2{
+display: none;
+position:absolute;
+left:47%;
+margin-top: 70px;
+top: 50%;
+}
+
+#ball_g_3{
+display: none;
+position:absolute;
+left:49%;
+margin-top: 70px;
+top: 50%;
+}
+
+#ball_g_4{
+display: none;
+position:absolute;
+left:51%;
+margin-top: 70px;
+top: 50%;
+}
+
+#ball_g_5{
+display: none;
+position:absolute;
+left:53%;
+margin-top: 70px;
+top: 50%;
+}
diff --git a/le-tour/css/iconsApps.css b/le-tour/css/iconsApps.css
new file mode 100644
index 0000000000000000000000000000000000000000..d0b3ff34db1c5b4ab884bc6dc84c408b7db89f3c
--- /dev/null
+++ b/le-tour/css/iconsApps.css
@@ -0,0 +1,620 @@
+span.category{
+position: absolute;
+top: 101px;
+color: white;
+font-family: cantarell;
+width: 86px;
+height: 21px;
+overflow: hidden;
+font-size: 16px;
+font-weight: bold;
+}
+
+#multimidia{
+display:none;
+}
+
+#jogos{
+display:none;
+}
+
+#internet{
+display:none;
+}
+
+#graficos{
+display:none;
+}
+
+#ferramentasdesistemas{
+display:none;
+}
+
+#escritorio{
+display:none;
+}
+
+#educativo{
+display:none;
+}
+
+#desenvolvimento{
+display:none;
+}
+
+#ciencia{
+display:none;
+}
+
+#acessorios{
+display:none;
+}
+
+#acessibilidade{
+display:none;
+}
+
+/***************************************************************************************/
+.icons{
+background-repeat: no-repeat;
+position: relative;
+background-size: 100%;
+width:100px;
+height:100px;
+float:left;
+margin: 30px;
+}
+
+#orca{
+background-image:url("../images/apps_overview/orca.png");
+}
+
+#onboard{
+background-image:url("../images/apps_overview/onboard.png");
+}
+
+#ajuda{
+background-image:url("../images/apps_overview/gnome-help.png");
+}
+
+#akonadi{
+background-image:url("../images/apps_overview/akonadi.png");
+}
+
+#arquivos{
+background-image:url("../images/apps_overview/file-manager.png");
+}
+
+#calc{
+background-image:url("../images/apps_overview/calc.png");
+}
+
+#printsc{
+background-image:url("../images/apps_overview/applets-screenshooter.png");
+}
+
+#contatos{
+background-image:url("../images/apps_overview/contacts.png");
+}
+
+#txteditor{
+background-image:url("../images/apps_overview/text-editor.png");
+}
+
+#xdiagnose{
+background-image:url("../images/apps_overview/xdiagnose.png");
+}
+
+#gerenciadorpkgs{
+background-image:url("../images/apps_overview/file-roller.png");
+}
+
+#mapachars{
+background-image:url("../images/apps_overview/character-map.png");
+}
+
+#terminal{
+background-image:url("../images/apps_overview/gnome-terminal.png");
+}
+
+#unidades{
+background-image:url("../images/apps_overview/palimpsest.png");
+}
+
+#xournal{
+background-image:url("../images/apps_overview/xournal.png");
+}
+
+#kalzium{
+background-image:url("../images/apps_overview/kalzium.png");
+}
+
+#kstars{
+background-image:url("../images/apps_overview/kstars.png");
+}
+
+#teoriagrafos{
+background-image:url("../images/apps_overview/teoriagrafos.png");
+}
+
+
+
+#python{
+background-image:url("../images/apps_overview/python.png");
+}
+
+#geogebra{
+background-image:url("../images/apps_overview/geogebra.png");
+}
+
+#tuxmath{
+background-image:url("../images/apps_overview/tuxmath.png");
+}
+
+#blinken{
+background-image:url("../images/apps_overview/blinken.png");
+}
+
+#kalgebra{
+background-image:url("../images/apps_overview/kalgebra.png");
+}
+
+#kanagram{
+background-image:url("../images/apps_overview/kanagram.png");
+}
+
+#kbruch{
+background-image:url("../images/apps_overview/kbruch.png");
+}
+
+#kgeography{
+background-image:url("../images/apps_overview/kgeography.png");
+}
+
+#khangman{
+background-image:url("../images/apps_overview/khangman.png");
+}
+
+#kig{
+background-image:url("../images/apps_overview/kig.png");
+}
+
+#klettres{
+background-image:url("../images/apps_overview/klettres.png");
+}
+
+#kmplot{
+background-image:url("../images/apps_overview/kmplot.png");
+}
+
+#ktouch{
+background-image:url("../images/apps_overview/ktouch.png");
+}
+
+#kturtle{
+background-image:url("../images/apps_overview/kturtle.png");
+}
+
+#kwordquiz{
+background-image:url("../images/apps_overview/kwordquiz.png");
+}
+
+#marble{
+background-image:url("../images/apps_overview/marble.png");
+}
+
+#tuxpaint{
+background-image:url("../images/apps_overview/tuxpaint.png");
+}
+
+#step{
+background-image:url("../images/apps_overview/step.png");
+}
+
+#parley{
+background-image:url("../images/apps_overview/parley.png");
+}
+
+#alacarte{
+background-image:url("../images/apps_overview/alacarte.png");
+}
+
+#libreimpress{
+background-image:url("../images/apps_overview/libreoffice-impress.png");
+}
+
+#librecalc{
+background-image:url("../images/apps_overview/libreoffice-calc.png");
+}
+
+#libredraw{
+background-image:url("../images/apps_overview/libreoffice-draw.png");
+}
+
+#libreoffice{
+background-image:url("../images/apps_overview/libreoffice-startcenter.png");
+}
+
+#librewriter{
+background-image:url("../images/apps_overview/libreoffice-writer.png");
+}
+
+#sistemas{
+background-image:url(de);
+}
+
+#gnomedesktop{
+background-image:url("../images/apps_overview/gnome-remote-desktop.png");
+}
+
+#transmission{
+background-image:url("../images/apps_overview/transmission.png");
+}
+
+#nepomuk{
+background-image:url("../images/apps_overview/nepomuk.png");
+}
+
+#usbcreator{
+background-image:url("../images/apps_overview/usb-creator-gtk.png");
+}
+
+#gparted{
+background-image:url("../images/apps_overview/gparted.png");
+}
+
+#aptoncd{
+background-image:url("../images/apps_overview/aptoncd.png");
+}
+
+#synaptic{
+background-image:url("../images/apps_overview/synaptic.png");
+}
+
+#ibus{
+background-image:url("../images/apps_overview/ibus.png");
+}
+
+#alacarte{
+background-image:url("../images/apps_overview/alacarte.png");
+}
+
+#enteclado{
+background-image:url("../images/apps_overview/ibus-engine.svg");
+}
+
+#openjdk6{
+background-image:url("../images/apps_overview/openjdk-6.png");
+}
+
+#gwibber{
+background-image:url("../images/apps_overview/gwibber.png");
+}
+
+#testesistema{
+background-image:url("../images/apps_overview/checkbox.png");
+}
+
+#unidades{
+background-image:url("../images/apps_overview/palimpsest.png");
+}
+
+#xterm{
+background-image:url("../images/apps_overview/xterm.png");
+}
+
+#gimp{
+background-image:url("../images/apps_overview/gimp.png");
+}
+
+#pdfeditor{
+background-image:url("../images/apps_overview/pdfeditor.png");
+}
+
+#libredraw{
+background-image:url("../images/apps_overview/libreoffice-draw.png");
+}
+
+#shotwelle{
+background-image:url("../images/apps_overview/shotwell.png");
+}
+
+#transmission{
+background-image:url("../images/apps_overview/transmission.png");
+}
+
+#remmina{
+background-image:url("../images/apps_overview/remmina.png");
+}
+
+#gwibber{
+background-image:url("../images/apps_overview/gwibber.png");
+}
+
+#pidgin{
+background-image:url("../images/apps_overview/pidgin.png");
+}
+
+#firefox{
+background-image:url("../images/apps_overview/firefox.png");
+}
+
+#batalhanaval{
+background-image:url("../images/apps_overview/kbattleship.png");
+}
+
+#ksirk{
+background-image:url("../images/apps_overview/ksirk.png");
+}
+
+#freecell{
+background-image:url("../images/apps_overview/gnome-freecell.png");
+}
+
+#homibatata{
+background-image:url("../images/apps_overview/ktuberling.png");
+}
+
+#bomber{
+background-image:url("../images/apps_overview/bomber.png");
+}
+
+#bovo{
+background-image:url("../images/apps_overview/bovo.png");
+}
+
+#kajongg{
+background-image:url("../images/apps_overview/kajongg.png");
+}
+
+#kanagram{
+background-image:url("../images/apps_overview/kanagram.png");
+}
+
+#kapman{
+background-image:url("../images/apps_overview/kapman.png");
+}
+
+#katomic{
+background-image:url("../images/apps_overview/katomic.png");
+}
+
+#kblackbox{
+background-image:url("../images/apps_overview/kblackbox.png");
+}
+
+#kblocks{
+background-image:url("../images/apps_overview/kblocks.png");
+}
+
+#kbounce{
+background-image:url("../images/apps_overview/kbounce.png");
+}
+
+#kbreakout{
+background-image:url("../images/apps_overview/kbreakout.png");
+}
+
+#kdiamond{
+background-image:url("../images/apps_overview/kdiamond.png");
+}
+
+#fourinline{
+background-image:url("../images/apps_overview/kfourinline.png");
+}
+
+#kgold{
+background-image:url("../images/apps_overview/kgoldrunner.png");
+}
+
+#khangman{
+background-image:url("../images/apps_overview/khangman.png");
+}
+
+#kigo{
+background-image:url("../images/apps_overview/kigo.png");
+}
+
+#killbots{
+background-image:url("../images/apps_overview/killbots.png");
+}
+
+#kiriki{
+background-image:url("../images/apps_overview/kiriki.png");
+}
+
+#jumpingcube{
+background-image:url("../images/apps_overview/kjumpingcube.png");
+}
+
+#klickety{
+background-image:url("../images/apps_overview/klickety.png");
+}
+
+#kmahjongg{
+background-image:url("../images/apps_overview/kmahjongg.png");
+}
+
+#kmines{
+background-image:url("../images/apps_overview/kmines.png");
+}
+
+#knetwalk{
+background-image:url("../images/apps_overview/knetwalk.png");
+}
+
+#kolf{
+background-image:url("../images/apps_overview/kolf.png");
+}
+
+#kollision{
+background-image:url("../images/apps_overview/kollision.png");
+}
+
+#konquest{
+background-image:url("../images/apps_overview/konquest.png");
+}
+
+#kpatience{
+background-image:url("../images/apps_overview/kpat.png");
+}
+
+#kreversi{
+background-image:url("../images/apps_overview/kreversi.png");
+}
+
+#visuais-ksirk{
+background-image:url("../images/apps_overview/ksirk-visuals.png");
+}
+
+#ksnake{
+background-image:url("../images/apps_overview/kdesnake.png");
+}
+
+#spaceduel{
+background-image:url("../images/apps_overview/kspaceduel.png");
+}
+
+#audacity{
+background-image:url("../images/apps_overview/audacity.png");
+}
+
+#avidemux{
+background-image:url("../images/apps_overview/avidemux.png");
+}
+
+#acidrip{
+background-image:url("../images/apps_overview/acidrip.png");
+}
+
+#brasero{
+background-image:url("../images/apps_overview/brasero.png");
+}
+
+#gravadorsom{
+background-image:url("../images/apps_overview/gnome-sound-recorder.svg");
+}
+
+#vlc{
+background-image:url("../images/apps_overview/vlc.png");
+}
+
+#rhythmbox{
+background-image:url("../images/apps_overview/rhythmbox.png");
+}
+
+#evince{
+background-image:url("../images/apps_overview/evince.png");
+}
+
+#planner{
+background-image:url("../images/apps_overview/gnome-planner.png");
+}
+
+#centralprogs{
+background-image:url("../images/apps_overview/centralprogs.png");
+}
+
+#systemnetwork{
+background-image:url("../images/apps_overview/system-network.png");
+}
+
+#libremath{
+background-image:url("../images/apps_overview/libreoffice-math.png");
+}
+
+#samegame{
+background-image:url("../images/apps_overview/samegame.png");
+}
+
+#mahjongg{
+background-image:url("../images/apps_overview/mahjongg.png");
+}
+
+#ksquares{
+background-image:url("../images/apps_overview/ksquares.png");
+}
+
+#lskat{
+background-image:url("../images/apps_overview/lskat.png");
+}
+
+#ubuntuone{
+background-image:url("../images/apps_overview/ubuntuone-installer.png");
+}
+
+#kmail{
+background-image:url("../images/apps_overview/kmail.png");
+}
+
+#bluetooth{
+background-image:url("../images/apps_overview/bluetooth.png");
+}
+
+#ksudoku{
+background-image:url("../images/apps_overview/ksudoku.png");
+}
+
+#kubrick{
+background-image:url("../images/apps_overview/kubrick.png");
+}
+
+#palapeli{
+background-image:url("../images/apps_overview/palapeli.png");
+}
+
+#mines{
+background-image:url("../images/apps_overview/mines.png");
+}
+
+#klines{
+background-image:url("../images/apps_overview/klines.png");
+}
+
+#sessionprops{
+background-image:url("../images/apps_overview/session-properties.svg");
+}
+
+#ubiquity{
+background-image:url("../images/apps_overview/ubiquity.png");
+}
+
+#network{
+background-image:url("../images/apps_overview/network.png");
+}
+
+#baobab{
+background-image:url("../images/apps_overview/baobab.png");
+}
+
+#settings{
+background-image:url("../images/apps_overview/xfce-system-settings.png");
+}
+
+#powerstats{
+background-image:url("../images/apps_overview/gnome-power-statistics.png");
+}
+
+#system-monitor{
+background-image:url("../images/apps_overview/utilities-system-monitor.png");
+}
+
+#shisen-sho{
+background-image:url("../images/apps_overview/kshisen.png");
+}
+
+#sudoku{
+background-image:url("../images/apps_overview/gnome-sudoku.png");
+}
+
+#paciencia{
+background-image:url("../images/apps_overview/gnome-aisleriot.png");
+}
+
+#snake-duel{
+background-image:url("../images/apps_overview/ktron.png");
+}
+
+#reprodutfilmes{
+background-image:url("../images/apps_overview/totem.png");
+}
diff --git a/le-tour/css/jScrollPane.css b/le-tour/css/jScrollPane.css
new file mode 100644
index 0000000000000000000000000000000000000000..b855f34091698a38758ff9efecb3a41e12167145
--- /dev/null
+++ b/le-tour/css/jScrollPane.css
@@ -0,0 +1,33 @@
+#scrollbar1 { width: 100%; height: 100%; clear: both;}
+#scrollbar1 .viewport { width: 100%; height: 100%;  overflow: hidden; position: relative; }
+#scrollbar1 .overview { list-style: none; position: absolute; left: 0; top: 0; }
+
+#scrollbar1 .thumb .end,
+#scrollbar1 .thumb { 
+background-color: dimGray;
+border-radius: 16px 16px; 
+}
+
+#scrollbar1 .scrollbar { 
+position: absolute;
+width: 15px;
+right: 0px;
+}
+
+#scrollbar1 .track { background-color: black;
+
+width: 13px;
+position: relative;
+padding: 0 1px;
+border: 1px solid dimGray;
+border-radius: 16px 16px; }
+
+#scrollbar1 .thumb {width: 13px; cursor: pointer; overflow: hidden; position: absolute; top: 0; }
+
+#scrollbar1 .thumb .end { overflow: hidden; height: 5px; width: 13px; }
+
+#scrollbar1 .disable{ display: none; }
+
+.noSelect { user-select: none; -o-user-select: none; -moz-user-select: none; -khtml-user-select: none; -webkit-user-select: none; }
+
+                    
diff --git a/le-tour/css/overview.css b/le-tour/css/overview.css
new file mode 100644
index 0000000000000000000000000000000000000000..9ca7378bf656dc70e260dbafbe5fe796ffe3c100
--- /dev/null
+++ b/le-tour/css/overview.css
@@ -0,0 +1,376 @@
+#desktop-change {
+height: 500px;
+border-radius: 12px 0px 0px 12px;
+top: 104px;
+right: -160px;
+padding-top: 6px;
+padding-right: 6px;
+padding-left: 9px;
+border: 2px #4F4F4F solid;
+background-color: black;
+opacity: 0.7;
+position: absolute;
+z-index: 40;
+display: none;
+border-right: black;
+}
+
+#change {
+width: 208px;
+height: 122px;
+position: relative;
+}
+
+#windowOverview {
+background-color: silver;
+position: absolute;
+left: 40px;
+top: 53px;
+font-family: arial;
+font-weight: bold;
+padding-top: 1px;
+border-radius: 4px 4px;
+padding-bottom: 3px;
+padding-left: 8px;
+padding-right: 8px;
+font-size: 18px;
+color: silver;
+opacity: 0.7;
+}
+#content-windows {
+display: none;
+z-index: 50;
+}
+
+#content-apps {
+display: none;
+z-index: 100;
+}
+#content-search-edu {
+display: none;
+z-index: 100;
+}
+
+
+#applications {
+background-color: transparent;
+position: absolute;
+left: 133px;
+top: 53px;
+font-family: arial;
+font-weight: bold;
+padding-top: 1px;
+border-radius: 4px 4px;
+padding-bottom: 3px;
+padding-left: 8px;
+padding-right: 8px;
+font-size: 18px;
+color: silver;
+opacity: 0.7;
+}
+
+#search-edu {
+background-color: transparent;
+position: absolute;
+left: 259px;
+top: 53px;
+font-family: arial, liberation;
+font-weight: bold;
+padding-top: 1px;
+border-radius: 4px 4px;
+padding-bottom: 3px;
+padding-left: 8px;
+padding-right: 8px;
+font-size: 18px;
+color: silver;
+opacity: 0.7;
+}
+
+#overview {
+display: none;
+z-index: 39;
+position: absolute;
+opacity: 0.6;
+background-color: black;
+width: 100%;
+height: 100%;
+}
+
+#content-overview {
+display: none;
+z-index: 39;
+position: absolute;
+width: 100%;
+height: 100%;
+}
+
+#search {
+height: 14px;
+width: 249px;
+padding-bottom: 6px;
+padding-top: 7px;
+padding-right: 7px;
+padding-left: 7px;
+border: 2px silver solid;
+border-radius: 16px 16px;
+position: absolute;
+background: -webkit-gradient(linear, left top, left bottom, from(black), to(silver)) repeat-X;
+opacity: 0.4;
+background: -moz-linear-gradient(top, black, white) repeat-X;
+}
+
+#search-control {
+top: 46px;position: absolute;
+right: 302px;
+display: none;
+z-index: 40;
+}
+
+/*-----------------------------------------dash---------------------------------------------*/
+#dash {
+display: block;
+top: 104px;
+left: 0px;
+padding-bottom: 9px;
+padding-top: 12px;
+padding-right: 3px;
+padding-left: 8px;
+border: 0px solid;
+border-radius: 0px 12px 12px 0px;
+background-color: #363636;
+opacity: 0.9;
+position: absolute;
+}
+
+#dashIcon1 {
+width: 54px;
+position: relative;
+}
+#dashIcon2 {
+width: 54px;
+position: relative;
+}
+#dashIcon3 {
+width: 54px;
+position: relative;
+}
+#dashIcon4 {
+width: 54px;
+position: relative;
+}
+/*subapp*/
+.fontsilver{
+font-family: arial;
+color: silver;
+}
+.fontwhite{
+font-family: 'arial black';
+color: white;
+}
+
+#sub_applications {
+background-color: transparent;
+position: absolute;
+right: 62px;
+top: 124px;
+font-family: arial;
+padding-top: 1px;
+border-radius: 4px 4px;
+padding-bottom: 3px;
+padding-left: 8px;
+padding-right: 8px;
+font-size: 16px;
+color: silver;
+width: 210px;
+}
+#subapp1{
+}
+#subapp2{
+position: absolute;
+top: 30px;
+}
+#subapp3{
+position: absolute;
+top: 60px;
+}
+#subapp4{
+position: absolute;
+top: 90px;
+}
+#subapp5{
+position: absolute;
+top: 120px;
+}
+#subapp6{
+position: absolute;
+top: 150px;
+}
+#subapp7{
+position: absolute;
+top: 180px;
+}
+#subapp8{
+position: absolute;
+top: 210px;
+}
+#subapp9{
+position: absolute;
+top: 240px;
+}
+#subapp10{
+position: absolute;
+top: 270px;
+}
+#subapp11{
+position: absolute;
+top: 300px;
+}
+#subapp12{
+position: absolute;
+top: 330px;
+}
+#subapp13{
+position: absolute;
+top: 360px;
+}
+
+/*-----------------------------------------subbus---------------------------------------------*/
+#sub_search-edu {
+background-color: transparent;
+position: absolute;
+right: 80px;
+top: 124px;
+font-family: arial;
+padding-top: 1px;
+border-radius: 4px 4px;
+padding-bottom: 3px;
+padding-left: 8px;
+padding-right: 8px;
+font-size: 16px;
+color: silver;
+width: 170px;
+}
+
+#subbus1 {
+position: absolute;
+top: 10px;
+}
+#subbus2 {
+position: absolute;
+top: 45px;
+}
+#subbus3 {
+position: absolute;
+top: 79px;
+}
+#subbus4 {
+position: absolute;
+top: 152px;
+}
+#subbus5 {
+position: absolute;
+top: 191px;
+}
+#subbus6 {
+position: absolute;
+top: 231px;
+}
+#subbus7 {
+position: absolute;
+top: 271px;
+}
+#subbus8 {
+position: absolute;
+top: 311px;
+}
+/*------------------------content-windows-----------------------------*/
+#browserWclose {
+display:none;
+position: absolute;
+}
+#libreWclose {
+display:none;
+position: absolute;
+}
+#nautilusWclose {
+display:none;
+position: absolute;
+}
+#termWclose {
+display:none;
+position: absolute;
+}
+
+#dompubW {
+margin: 10px;
+position: relative;
+float: left;
+}
+
+#objeduW {
+margin: 10px;
+position: relative;
+float: left;
+}
+
+#portprofW {
+margin: 10px;
+position: relative;
+float: left;
+}
+
+#tvescW {
+margin: 10px;
+position: relative;
+float: left;
+}
+
+#browserW {
+margin: 10px;
+position: relative;
+float: left;
+}
+.dompub{
+background-image: url("../images/browserAbas/dompub.png");
+background-repeat: no-repeat;
+background-size: 100% 100%;
+}
+.porprof{
+background-image: url("../images/browserAbas/porprof.png");
+background-repeat: no-repeat;
+background-size: 100% 100%;
+}
+.tvesc{
+background-image: url("../images/browserAbas/tvesc.png");
+background-repeat: no-repeat;
+background-size: 100% 100%;
+}
+.firefox{
+background-image: url("../images/browserAbas/firefox.png");
+background-repeat: no-repeat;
+background-size: 100% 100%;
+}
+.objedu{
+background-image: url("../images/browserAbas/objedu.png");
+background-repeat: no-repeat;
+background-size: 100% 100%;
+}
+
+#libreW {
+padding: 10px;
+position: relative;
+float: left;
+}
+
+#nautilusW {
+padding: 10px;
+position: relative;
+float: left;
+}
+
+#termW {
+padding: 10px;
+position: relative;
+float: left;
+}
+
diff --git a/le-tour/css/tourguide.css b/le-tour/css/tourguide.css
new file mode 100644
index 0000000000000000000000000000000000000000..4b589b1b36b7096e9d87cbe81f62236bb28131c1
--- /dev/null
+++ b/le-tour/css/tourguide.css
@@ -0,0 +1,111 @@
+#tour-guide{
+	position:absolute;
+	bottom:0px;
+	left:0px;
+	width:100%;
+	height:50px;
+	background-color:#e9eae3;
+	z-index:100;
+	display:none;
+	opacity: 0.97;
+}
+
+#tour-guide .guide-container{ 
+	height:50px;
+	left: 70px;
+    position: absolute;
+    text-align: center;
+}
+
+#next-button{
+	position: absolute;
+    width:50px;
+	height:50px;
+	right:20px;
+	cursor:pointer;
+}
+
+#prev-button{
+	position:absolute;
+    width:50px;
+	height:50px;
+	left:20px;
+	cursor:pointer;
+}
+
+.tour-step{
+    margin-left:10px;
+    color: #18537d;
+    font-size: 22px;
+    font-weight: normal;
+    font-family: Umpush;
+	width:100%;
+    height:100%;
+    position:absolute;
+    top:5px;
+}
+
+.step-container{
+    padding-left: 50px;
+}
+
+.iconTour{
+	position:absolute;
+    width:50px;
+	height:50px;
+	margin-left:0px;
+	cursor:pointer;
+	top: -4px;
+}
+
+#wellcome{
+    background-image: url("../images/tour_guide/wellcome.png");
+    background-size: 100%;
+    display: none;
+    position: absolute;
+    width: 660px;
+    height: 457px;
+    left: 50%;
+    top: 50%;
+    background-repeat: no-repeat;
+    margin-left: -330px;
+    margin-top: -245px;
+}
+
+#action-wellcome{
+    position: absolute;
+    width: 79px;
+    height: 26px;
+    right: 0px;
+    top: 0px;
+}
+
+.wellcome{
+    color: white;
+    font-size: 16px;
+    font-weight: normal;
+    font-family: Umpush;
+    width: 80%;
+    height: 100%;
+    position: absolute;
+    top: 35px;
+    margin: 10%;
+}
+
+#closeWellcome{
+    position: absolute;
+    width: 22px;
+    height: 22px;
+    top: 0px;
+    right: 0px;
+}
+
+#downloadLE5{
+    position: absolute;
+    width: 46px;
+    height: 46px;
+    right: 80px;
+    top: 2px;
+    z-index: 101;
+    border-radius: 12px;
+}
diff --git a/le-tour/css/tourguide.css~ b/le-tour/css/tourguide.css~
new file mode 100644
index 0000000000000000000000000000000000000000..5e279457825a322d183cd8004b28120e71480d50
--- /dev/null
+++ b/le-tour/css/tourguide.css~
@@ -0,0 +1,110 @@
+#tour-guide{
+	position:absolute;
+	bottom:0px;
+	left:0px;
+	width:100%;
+	height:50px;
+	background-color:#e9eae3;
+	z-index:100;
+	display:none;
+	opacity: 0.97;
+}
+
+#tour-guide .guide-container{ 
+	height:50px;
+	text-align: center;
+    position: absolute;
+}
+
+#next-button{
+	position: absolute;
+    width:50px;
+	height:50px;
+	right:20px;
+	cursor:pointer;
+}
+
+#prev-button{
+	position:absolute;
+    width:50px;
+	height:50px;
+	left:20px;
+	cursor:pointer;
+}
+
+.tour-step{
+    margin-left:10px;
+    color: #18537d;
+    font-size: 22px;
+    font-weight: normal;
+    font-family: Umpush;
+	width:100%;
+    height:100%;
+    position:absolute;
+    top:5px;
+}
+
+.step-container{
+    padding-left: 50px;
+}
+
+.iconTour{
+	position:absolute;
+    width:50px;
+	height:50px;
+	margin-left:0px;
+	cursor:pointer;
+	top: -4px;
+}
+
+#wellcome{
+    background-image: url("../images/tour_guide/wellcome.png");
+    background-size: 100%;
+    display: none;
+    position: absolute;
+    width: 660px;
+    height: 457px;
+    left: 50%;
+    top: 50%;
+    background-repeat: no-repeat;
+    margin-left: -330px;
+    margin-top: -245px;
+}
+
+#action-wellcome{
+    position: absolute;
+    width: 79px;
+    height: 26px;
+    right: 0px;
+    top: 0px;
+}
+
+.wellcome{
+    color: white;
+    font-size: 20px;
+    font-weight: normal;
+    font-family: Liberation sans-serif;
+    width: 80%;
+    height: 100%;
+    position: absolute;
+    top: 35px;
+    margin: 10%;
+}
+
+#closeWellcome{
+    position: absolute;
+    width: 22px;
+    height: 22px;
+    top: 0px;
+    right: 0px;
+}
+
+#downloadLE5{
+    position: absolute;
+    width: 46px;
+    height: 46px;
+    right: 80px;
+    top: 2px;
+    z-index: 101;
+    border-radius: 12px;
+}
diff --git a/le-tour/css/windows.css b/le-tour/css/windows.css
new file mode 100644
index 0000000000000000000000000000000000000000..6b8de96b08a6aaaacc46dd93053b2203fa9247bd
--- /dev/null
+++ b/le-tour/css/windows.css
@@ -0,0 +1,123 @@
+/*--------------------------------------------------------------*/
+#libre {
+background-image: url("../images/apps/libre1.png");
+position: absolute;
+background-size: 100%;
+width: 1066px;
+height: 620px;
+top: 23px;
+z-index: 6;
+background-repeat: no-repeat;
+}
+
+#libremove {
+width: 100%;
+height: 36px;
+position: absolute;
+margin: 0px;
+}
+
+#nautilus {
+background-image: url("../images/apps/nautilus1.png");
+position: absolute;
+background-size: 100%;
+width: 809px;
+height: 570px;
+top: 23px;
+z-index: 7;
+left:10px;
+background-repeat: no-repeat;
+}
+
+#nautilusmove {
+width: 100%;
+height: 36px;
+position: absolute;
+margin: 0px;
+}
+
+#term {
+background-image: url("../images/apps/term1.png");
+position: absolute;
+background-size: 100%;
+width: 723px;
+height: 450px;
+top: 23px;
+z-index: 8;
+background-repeat: no-repeat;
+}
+
+#termmove {
+width: 100%;
+height: 36px;
+position: absolute;
+margin: 0px;
+}
+
+/****************************contrl window******************************/
+
+#libreclose {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 0px;}
+#libremaxmin {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 28px;}
+#libreminimize {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 56px;}
+
+#nautilusclose {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 0px;}
+#nautilusmaxmin {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 28px;}
+#nautilusminimize {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 56px;}
+
+#termclose {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 0px;}
+#termmaxmin {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 28px;}
+#termminimize {
+width: 25px;
+height: 25px;
+position: absolute;
+top: 0px;
+margin: 0px;
+right: 56px;}
diff --git a/le-tour/images/apps/dom_pub1.png b/le-tour/images/apps/dom_pub1.png
new file mode 100644
index 0000000000000000000000000000000000000000..ebf9f9d5b57458d0e8af10e4fb9f508713170334
Binary files /dev/null and b/le-tour/images/apps/dom_pub1.png differ
diff --git a/le-tour/images/apps/dom_pub2.png b/le-tour/images/apps/dom_pub2.png
new file mode 100644
index 0000000000000000000000000000000000000000..17b88d435679878b6c68643d3cc3ee7299c1183e
Binary files /dev/null and b/le-tour/images/apps/dom_pub2.png differ
diff --git a/le-tour/images/apps/firefox1.png b/le-tour/images/apps/firefox1.png
new file mode 100644
index 0000000000000000000000000000000000000000..24e868d7ee1a4fbda732315dd651845e3b014d00
Binary files /dev/null and b/le-tour/images/apps/firefox1.png differ
diff --git a/le-tour/images/apps/firefox2.png b/le-tour/images/apps/firefox2.png
new file mode 100644
index 0000000000000000000000000000000000000000..8f07eb74e11413b4112970a19cfc5976ecd53697
Binary files /dev/null and b/le-tour/images/apps/firefox2.png differ
diff --git a/le-tour/images/apps/libre1.png b/le-tour/images/apps/libre1.png
new file mode 100644
index 0000000000000000000000000000000000000000..d996433c08f2c092d8b12390971e228b6b55c574
Binary files /dev/null and b/le-tour/images/apps/libre1.png differ
diff --git a/le-tour/images/apps/libre2.png b/le-tour/images/apps/libre2.png
new file mode 100644
index 0000000000000000000000000000000000000000..3e8e65aed68f5043b68970809d9c0384dd515ccd
Binary files /dev/null and b/le-tour/images/apps/libre2.png differ
diff --git a/le-tour/images/apps/nautilus1.png b/le-tour/images/apps/nautilus1.png
new file mode 100644
index 0000000000000000000000000000000000000000..adb2234ce2fd9745d8ce850b3ef89fbf8ded7a43
Binary files /dev/null and b/le-tour/images/apps/nautilus1.png differ
diff --git a/le-tour/images/apps/nautilus2.png b/le-tour/images/apps/nautilus2.png
new file mode 100644
index 0000000000000000000000000000000000000000..9921377df73a11276e6010b4c9e48764071bce3e
Binary files /dev/null and b/le-tour/images/apps/nautilus2.png differ
diff --git a/le-tour/images/apps/obj_edu1.png b/le-tour/images/apps/obj_edu1.png
new file mode 100644
index 0000000000000000000000000000000000000000..c96d0d62f7bde24f84e2697d8f6a52c3fb42b121
Binary files /dev/null and b/le-tour/images/apps/obj_edu1.png differ
diff --git a/le-tour/images/apps/obj_edu2.png b/le-tour/images/apps/obj_edu2.png
new file mode 100644
index 0000000000000000000000000000000000000000..0ed59509e7db9f5b585467a41b51b207b1dd3518
Binary files /dev/null and b/le-tour/images/apps/obj_edu2.png differ
diff --git a/le-tour/images/apps/port_prof1.png b/le-tour/images/apps/port_prof1.png
new file mode 100644
index 0000000000000000000000000000000000000000..550a29adb51c0187d0ee63224a09071a47a5c0cd
Binary files /dev/null and b/le-tour/images/apps/port_prof1.png differ
diff --git a/le-tour/images/apps/port_prof2.png b/le-tour/images/apps/port_prof2.png
new file mode 100644
index 0000000000000000000000000000000000000000..90a73ab9f24c8e2eda32902ddcc5265b88df2120
Binary files /dev/null and b/le-tour/images/apps/port_prof2.png differ
diff --git a/le-tour/images/apps/term1.png b/le-tour/images/apps/term1.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea0737e9b0d5979638c779c5f4d2fdb69838791d
Binary files /dev/null and b/le-tour/images/apps/term1.png differ
diff --git a/le-tour/images/apps/term2.png b/le-tour/images/apps/term2.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd890f23500af3c44e4e4bfeaf4c40c0ae8680cc
Binary files /dev/null and b/le-tour/images/apps/term2.png differ
diff --git a/le-tour/images/apps/tv_esc1.png b/le-tour/images/apps/tv_esc1.png
new file mode 100644
index 0000000000000000000000000000000000000000..da0d4557e9d2fb10e1cb2bdfa0645ba2cbfc5774
Binary files /dev/null and b/le-tour/images/apps/tv_esc1.png differ
diff --git a/le-tour/images/apps/tv_esc2.png b/le-tour/images/apps/tv_esc2.png
new file mode 100644
index 0000000000000000000000000000000000000000..290a269547f6b9cbfd71f693c20ded83ee1400b2
Binary files /dev/null and b/le-tour/images/apps/tv_esc2.png differ
diff --git a/le-tour/images/apps_overview/acidrip.png b/le-tour/images/apps_overview/acidrip.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa06ae3168b52d05de3b68513c0fa6a6c4121770
Binary files /dev/null and b/le-tour/images/apps_overview/acidrip.png differ
diff --git a/le-tour/images/apps_overview/akonadi.png b/le-tour/images/apps_overview/akonadi.png
new file mode 100644
index 0000000000000000000000000000000000000000..14500e3c41702c6ad857696450d85e11f27cc7a7
Binary files /dev/null and b/le-tour/images/apps_overview/akonadi.png differ
diff --git a/le-tour/images/apps_overview/alacarte.png b/le-tour/images/apps_overview/alacarte.png
new file mode 100644
index 0000000000000000000000000000000000000000..9c924a5426cdf7124c4e5c9f76eec8f05ef1619f
Binary files /dev/null and b/le-tour/images/apps_overview/alacarte.png differ
diff --git a/le-tour/images/apps_overview/applets-screenshooter.png b/le-tour/images/apps_overview/applets-screenshooter.png
new file mode 100644
index 0000000000000000000000000000000000000000..469899ad6e1179d4c841eb0bc6f8b665cc4bc589
Binary files /dev/null and b/le-tour/images/apps_overview/applets-screenshooter.png differ
diff --git a/le-tour/images/apps_overview/aptoncd.png b/le-tour/images/apps_overview/aptoncd.png
new file mode 100644
index 0000000000000000000000000000000000000000..4f54ac95a0a2223d7fcb2385beb9efe38c4e322e
Binary files /dev/null and b/le-tour/images/apps_overview/aptoncd.png differ
diff --git a/le-tour/images/apps_overview/audacity.png b/le-tour/images/apps_overview/audacity.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d5ae63068923ba18755c2808922cb0263d62aa9
Binary files /dev/null and b/le-tour/images/apps_overview/audacity.png differ
diff --git a/le-tour/images/apps_overview/avidemux.png b/le-tour/images/apps_overview/avidemux.png
new file mode 100644
index 0000000000000000000000000000000000000000..046843a3d5649d7c9be6636a6967a4145696fd7f
Binary files /dev/null and b/le-tour/images/apps_overview/avidemux.png differ
diff --git a/le-tour/images/apps_overview/baobab.png b/le-tour/images/apps_overview/baobab.png
new file mode 100644
index 0000000000000000000000000000000000000000..b6e4c34e823019c7c72923956000d8e15ea566a3
Binary files /dev/null and b/le-tour/images/apps_overview/baobab.png differ
diff --git a/le-tour/images/apps_overview/blinken.png b/le-tour/images/apps_overview/blinken.png
new file mode 100644
index 0000000000000000000000000000000000000000..8398e159a144f8b21fa82fef222e0311a9998036
Binary files /dev/null and b/le-tour/images/apps_overview/blinken.png differ
diff --git a/le-tour/images/apps_overview/bluetooth.png b/le-tour/images/apps_overview/bluetooth.png
new file mode 100644
index 0000000000000000000000000000000000000000..6eabdac941a7fcce0dc79d4ce90dba13dcc3ea38
Binary files /dev/null and b/le-tour/images/apps_overview/bluetooth.png differ
diff --git a/le-tour/images/apps_overview/bomber.png b/le-tour/images/apps_overview/bomber.png
new file mode 100644
index 0000000000000000000000000000000000000000..525cba96400f6668b597ce310835ba7e24f88246
Binary files /dev/null and b/le-tour/images/apps_overview/bomber.png differ
diff --git a/le-tour/images/apps_overview/bovo.png b/le-tour/images/apps_overview/bovo.png
new file mode 100644
index 0000000000000000000000000000000000000000..5ca7b6168776980ad84c7fb16cd9b6b75b0c81ac
Binary files /dev/null and b/le-tour/images/apps_overview/bovo.png differ
diff --git a/le-tour/images/apps_overview/brasero.png b/le-tour/images/apps_overview/brasero.png
new file mode 100644
index 0000000000000000000000000000000000000000..7e14c669a7a27cd2b5a87f823925bdd1264f0320
Binary files /dev/null and b/le-tour/images/apps_overview/brasero.png differ
diff --git a/le-tour/images/apps_overview/calc.png b/le-tour/images/apps_overview/calc.png
new file mode 100644
index 0000000000000000000000000000000000000000..299645207b884466b26611f37b8d2f908636cfc2
Binary files /dev/null and b/le-tour/images/apps_overview/calc.png differ
diff --git a/le-tour/images/apps_overview/centralprogs.png b/le-tour/images/apps_overview/centralprogs.png
new file mode 100644
index 0000000000000000000000000000000000000000..910b0ebad5b58e57c4d4a486dd025c1ad56cf16d
Binary files /dev/null and b/le-tour/images/apps_overview/centralprogs.png differ
diff --git a/le-tour/images/apps_overview/character-map.png b/le-tour/images/apps_overview/character-map.png
new file mode 100644
index 0000000000000000000000000000000000000000..39c88c73d02eb350fe247ff272346c63174dd775
Binary files /dev/null and b/le-tour/images/apps_overview/character-map.png differ
diff --git a/le-tour/images/apps_overview/checkbox.png b/le-tour/images/apps_overview/checkbox.png
new file mode 100644
index 0000000000000000000000000000000000000000..efb37361d620208c0b0808fbaef58d67306d2a2a
Binary files /dev/null and b/le-tour/images/apps_overview/checkbox.png differ
diff --git a/le-tour/images/apps_overview/contacts.png b/le-tour/images/apps_overview/contacts.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef58bb8a8d702fb9ecd2a17c455e30b9d62e4939
Binary files /dev/null and b/le-tour/images/apps_overview/contacts.png differ
diff --git a/le-tour/images/apps_overview/evince.png b/le-tour/images/apps_overview/evince.png
new file mode 100644
index 0000000000000000000000000000000000000000..0bb86a44bbf17e8fb187560b40cdc483ed7dd05d
Binary files /dev/null and b/le-tour/images/apps_overview/evince.png differ
diff --git a/le-tour/images/apps_overview/file-manager.png b/le-tour/images/apps_overview/file-manager.png
new file mode 100644
index 0000000000000000000000000000000000000000..93384359e446d35f5f523921ec66e04d701f1511
Binary files /dev/null and b/le-tour/images/apps_overview/file-manager.png differ
diff --git a/le-tour/images/apps_overview/file-roller.png b/le-tour/images/apps_overview/file-roller.png
new file mode 100644
index 0000000000000000000000000000000000000000..54b78924f1e425a77a4e3c214d11180a2b55765c
Binary files /dev/null and b/le-tour/images/apps_overview/file-roller.png differ
diff --git a/le-tour/images/apps_overview/firefox.png b/le-tour/images/apps_overview/firefox.png
new file mode 100644
index 0000000000000000000000000000000000000000..21ebd5eb5e6f4070304e4ae8681de66b09aeff0d
Binary files /dev/null and b/le-tour/images/apps_overview/firefox.png differ
diff --git a/le-tour/images/apps_overview/geogebra.png b/le-tour/images/apps_overview/geogebra.png
new file mode 100644
index 0000000000000000000000000000000000000000..dcbcb01f32f1155aa34d42a63b655f2677c6d66f
Binary files /dev/null and b/le-tour/images/apps_overview/geogebra.png differ
diff --git a/le-tour/images/apps_overview/gimp.png b/le-tour/images/apps_overview/gimp.png
new file mode 100644
index 0000000000000000000000000000000000000000..9431ac13ec4919be18df9d14ad83afaa6dbd31be
Binary files /dev/null and b/le-tour/images/apps_overview/gimp.png differ
diff --git a/le-tour/images/apps_overview/gnome-aisleriot.png b/le-tour/images/apps_overview/gnome-aisleriot.png
new file mode 100644
index 0000000000000000000000000000000000000000..361d4e44a4341c3808f5f77b12c2ee2491e82a9d
Binary files /dev/null and b/le-tour/images/apps_overview/gnome-aisleriot.png differ
diff --git a/le-tour/images/apps_overview/gnome-freecell.png b/le-tour/images/apps_overview/gnome-freecell.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e3eaf887183bc97caa1278b90d4697330df53a3
Binary files /dev/null and b/le-tour/images/apps_overview/gnome-freecell.png differ
diff --git a/le-tour/images/apps_overview/gnome-help.png b/le-tour/images/apps_overview/gnome-help.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2a97af225158eda47020834308fa2cec15fd48a
Binary files /dev/null and b/le-tour/images/apps_overview/gnome-help.png differ
diff --git a/le-tour/images/apps_overview/gnome-planner.png b/le-tour/images/apps_overview/gnome-planner.png
new file mode 100644
index 0000000000000000000000000000000000000000..92160c1f18e3a5f1bf051d34a3109e0b57ced4e6
Binary files /dev/null and b/le-tour/images/apps_overview/gnome-planner.png differ
diff --git a/le-tour/images/apps_overview/gnome-power-statistics.png b/le-tour/images/apps_overview/gnome-power-statistics.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e344acd97a85348c3c01573c006c30a7fe0f4c0
Binary files /dev/null and b/le-tour/images/apps_overview/gnome-power-statistics.png differ
diff --git a/le-tour/images/apps_overview/gnome-remote-desktop.png b/le-tour/images/apps_overview/gnome-remote-desktop.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d66c9d2e48e01b1298eabbc068908278350c15d
Binary files /dev/null and b/le-tour/images/apps_overview/gnome-remote-desktop.png differ
diff --git a/le-tour/images/apps_overview/gnome-sound-recorder.svg b/le-tour/images/apps_overview/gnome-sound-recorder.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0b968fa3ebeb7f86a25d73260dcb12f4094fc505
--- /dev/null
+++ b/le-tour/images/apps_overview/gnome-sound-recorder.svg
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg2424" xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs id="defs2426">
+  <radialGradient id="radialGradient5940" gradientUnits="userSpaceOnUse" cy="14.438" cx="34.5" gradientTransform="matrix(.59647 -.15982 .13257 .49474 12.008 12.809)" r="2.5625">
+   <stop id="stop5471" style="stop-color:#fff" offset="0"/>
+   <stop id="stop5473" style="stop-color:#c3c5c0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient6033" y2="32.442" xlink:href="#linearGradient5455" gradientUnits="userSpaceOnUse" x2="28.537" gradientTransform="matrix(1.0039 0 0 1 4.8059 .0000019793)" y1="21.924" x1="25.977"/>
+  <linearGradient id="linearGradient6031" y2="32.442" xlink:href="#linearGradient5447" gradientUnits="userSpaceOnUse" x2="29.509" gradientTransform="matrix(1.0039 0 0 1 3.8299 .0000019651)" y1="21.924" x1="26.95"/>
+  <radialGradient id="radialGradient6037" gradientUnits="userSpaceOnUse" cy="6.5401" cx="24.686" gradientTransform="matrix(.73017 -.0024407 .042932 3.5545 13.62 -20.118)" r="6.5022">
+   <stop id="stop5754" style="stop-color:#fff" offset="0"/>
+   <stop id="stop5756" style="stop-color:#c0c4be;stop-opacity:0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient5455">
+   <stop id="stop5457" style="stop-color:#949791" offset="0"/>
+   <stop id="stop5459" style="stop-color:#555753" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient6146" y2="32.442" xlink:href="#linearGradient5455" gradientUnits="userSpaceOnUse" x2="28.537" gradientTransform="matrix(.98726 0 0 .97620 4.3356 1.2591)" y1="21.924" x1="25.977"/>
+  <linearGradient id="linearGradient5447">
+   <stop id="stop5449" style="stop-color:#e4e5e3" offset="0"/>
+   <stop id="stop5451" style="stop-color:#afb4ab" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient6144" y2="32.442" xlink:href="#linearGradient5447" gradientUnits="userSpaceOnUse" x2="29.509" gradientTransform="matrix(.98726 0 0 .97620 3.3758 1.2591)" y1="21.924" x1="26.95"/>
+  <linearGradient id="linearGradient6151" y2="18.001" gradientUnits="userSpaceOnUse" x2="34.987" gradientTransform="matrix(.99762 0 0 .99990 4.0514 -.86971)" y1="3.3461" x1="26.537">
+   <stop id="stop5524" style="stop-color:#aeafac" offset="0"/>
+   <stop id="stop5526" style="stop-color:#5e5f5b" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient6149" y2="15.312" gradientUnits="userSpaceOnUse" x2="35.84" gradientTransform="matrix(.99762 0 0 .99990 4.0514 -.86971)" y1="3.3461" x1="26.537">
+   <stop id="stop5490" style="stop-color:#e2e4e1" offset="0"/>
+   <stop id="stop5492" style="stop-color:#8e968a" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient5924" y2="25.14" gradientUnits="userSpaceOnUse" x2="29.421" y1="44.087" x1="22.436">
+   <stop id="stop5768" style="stop-color:#fff" offset="0"/>
+   <stop id="stop5770" style="stop-color:#fff;stop-opacity:0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient5922" gradientUnits="userSpaceOnUse" cy="37.04" cx="28.417" gradientTransform="matrix(1 0 0 .51590 0 17.931)" r="12.507">
+   <stop id="stop5786" style="stop-opacity:.30534" offset="0"/>
+   <stop id="stop5788" style="stop-opacity:0" offset="1"/>
+  </radialGradient>
+  <radialGradient id="radialGradient5920" gradientUnits="userSpaceOnUse" cy="34.234" cx="22.667" gradientTransform="matrix(1 0 0 .53451 0 17.242)" r="13.007">
+   <stop id="stop4441" style="stop-color:#7b7e77" offset="0"/>
+   <stop id="stop4443" style="stop-color:#383a37" offset="1"/>
+  </radialGradient>
+  <radialGradient id="radialGradient5918" gradientUnits="userSpaceOnUse" cy="37.04" cx="28.417" gradientTransform="matrix(1 0 0 .51590 0 17.931)" r="12.507">
+   <stop id="stop4461" style="stop-opacity:.62595" offset="0"/>
+   <stop id="stop4463" style="stop-opacity:0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient6163" y2="43.313" gradientUnits="userSpaceOnUse" x2="21.779" gradientTransform="matrix(1.0194 0 0 .88223 -.72943 5.1374)" y1="44.188" x1="5.6109">
+   <stop id="stop6159" style="stop-color:#555753;stop-opacity:0" offset="0"/>
+   <stop id="stop6161" style="stop-color:#383a37" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient4570" y2="15.092" gradientUnits="userSpaceOnUse" x2=".96648" gradientTransform="matrix(1.0063 0 0 1.0088 14.489 17.298)" y1="1.6868" x1="-3.5967">
+   <stop id="stop4109" style="stop-color:#fff;stop-opacity:.51908" offset="0"/>
+   <stop id="stop4111" style="stop-color:#fff;stop-opacity:0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient4575" gradientUnits="userSpaceOnUse" cy="16.755" cx=".044194" r="10.444">
+   <stop id="stop4072" style="stop-color:#f13737" offset="0"/>
+   <stop id="stop4074" style="stop-color:#e11010" offset="1"/>
+  </radialGradient>
+  <radialGradient id="radialGradient4577" gradientUnits="userSpaceOnUse" cy="11.098" cx=".044194" r="9.9437">
+   <stop id="stop4123" style="stop-color:#ef2929" offset="0"/>
+   <stop id="stop4125" style="stop-color:#ef2929;stop-opacity:0" offset="1"/>
+  </radialGradient>
+ </defs>
+ <g id="layer1">
+  <rect id="rect2628" style="color:#000000;fill:#747671" rx="0" ry="0" height="2" width="3" y="26" x="30"/>
+  <path id="path4117" style="fill:url(#radialGradient4577)" d="m9.9879 11.098a9.9437 9.9437 0 1 1 -19.887 0 9.9437 9.9437 0 1 1 19.887 0z" transform="matrix(1.3576 0 0 1.3576 14.44 13.433)"/>
+  <path id="path3099" style="stroke:#c00;stroke-linecap:round;stroke-width:.99437;fill:url(#radialGradient4575)" d="m9.9879 11.098a9.9437 9.9437 0 1 1 -19.887 0 9.9437 9.9437 0 1 1 19.887 0z" transform="matrix(1.0057 0 0 1.0057 14.456 17.339)"/>
+  <path id="path4078" style="stroke-opacity:.54386;stroke:#fff;stroke-linecap:round;stroke-width:1.1049;fill:none" d="m9.9879 11.098a9.9437 9.9437 0 1 1 -19.887 0 9.9437 9.9437 0 1 1 19.887 0z" transform="matrix(.90510 0 0 .90510 14.46 18.455)"/>
+  <path id="path4084" style="fill:url(#linearGradient4570)" d="m18.826 24.456c-3.311 0.621-5.894 4.314-9.1828 5.315-2.188 0.666-4.6432-0.255-4.6432-1.275 0-5.242 4.2436-9.496 9.472-9.496 2.615 0 4.983 1.064 6.697 2.782 0.858 0.86 1.551 1.883 2.031 3.019-0.766-0.023-1.601-0.865-4.374-0.345z"/>
+  <path id="path5942" style="stroke:url(#linearGradient6163);stroke-width:1px;fill:none" d="m29.5 43.469s-1.323 1.133-2.997 1.795c-1.673 0.662-3.697 0.852-5.099-1.035-3.515-4.733-5.777-2.189-4.555-0.665 2.706 3.374-2.626 2.936-11.349 2.936"/>
+  <path id="path4447" style="fill:url(#radialGradient5918)" d="m40.924 37.04a12.507 6.4523 0 1 1 -25.014 0 12.507 6.4523 0 1 1 25.014 0z" transform="matrix(1.2793 0 0 1.2399 -4.3534 -7.9242)"/>
+  <path id="path4435" style="stroke:#2e3436;stroke-linecap:round;stroke-width:1.0172;fill:url(#radialGradient5920)" d="m40.924 37.04a12.507 6.4523 0 1 1 -25.014 0 12.507 6.4523 0 1 1 25.014 0z" transform="matrix(.95947 0 0 1.0074 4.235 -.31338)"/>
+  <path id="path5530" style="fill:url(#radialGradient5922)" d="m40.924 37.04a12.507 6.4523 0 1 1 -25.014 0 12.507 6.4523 0 1 1 25.014 0z" transform="matrix(.47723 0 0 .45796 18.47 18.992)"/>
+  <path id="path4437" style="stroke-opacity:.38012;stroke:url(#linearGradient5924);stroke-linecap:round;stroke-width:1.1549;fill:none" d="m40.924 37.04a12.507 6.4523 0 1 1 -25.014 0 12.507 6.4523 0 1 1 25.014 0z" transform="matrix(.87951 0 0 .85240 6.5071 5.4271)"/>
+  <rect id="rect5463" style="stroke:url(#linearGradient6151);stroke-linecap:round;fill:url(#linearGradient6149)" transform="matrix(.97764 .21027 -.20133 .97952 0 0)" rx="6.7873" ry="6.4573" height="25.192" width="13.575" y="-5.7428" x="27.867"/>
+  <path id="path5504" style="stroke-width:1px;fill-rule:evenodd;color:#000000;stroke:url(#linearGradient6146);fill:url(#linearGradient6144)" d="m32.5 35.65v-8.15l-1.975 0.021s-0.057 8.146 0 8.129c0.101 1.105 1.743 1.161 1.975 0z"/>
+  <rect id="rect5538" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="3" x="33"/>
+  <rect id="rect5540" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="4" x="32"/>
+  <rect id="rect5542" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="5" x="33"/>
+  <rect id="rect5544" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="4" x="34"/>
+  <rect id="rect5546" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="5" x="35"/>
+  <rect id="rect5548" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="4" x="36"/>
+  <rect id="rect5550" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="4" x="30"/>
+  <rect id="rect5552" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="5" x="31"/>
+  <rect id="rect5554" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="5" x="29"/>
+  <rect id="rect5556" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="6" x="30"/>
+  <rect id="rect5558" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="6" x="32"/>
+  <rect id="rect5560" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="6" x="34"/>
+  <rect id="rect5562" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="6" x="36"/>
+  <rect id="rect5564" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="7" x="37"/>
+  <rect id="rect5566" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="6" x="38"/>
+  <rect id="rect5568" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="7" x="29"/>
+  <rect id="rect5570" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="8" x="28"/>
+  <rect id="rect5572" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="8" x="30"/>
+  <rect id="rect5574" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="7" x="31"/>
+  <rect id="rect5576" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="7" x="33"/>
+  <rect id="rect5578" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="7" x="35"/>
+  <rect id="rect5580" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="8" x="32"/>
+  <rect id="rect5582" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="8" x="34"/>
+  <rect id="rect5584" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="8" x="36"/>
+  <rect id="rect5586" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="8" x="38"/>
+  <rect id="rect5588" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="10" x="38"/>
+  <rect id="rect5590" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="11" x="37"/>
+  <rect id="rect5592" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="12" x="36"/>
+  <rect id="rect5594" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="13" x="35"/>
+  <rect id="rect5596" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="10" x="36"/>
+  <rect id="rect5598" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="11" x="35"/>
+  <rect id="rect5600" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="12" x="34"/>
+  <rect id="rect5602" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="13" x="33"/>
+  <rect id="rect5604" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="10" x="34"/>
+  <rect id="rect5606" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="11" x="33"/>
+  <rect id="rect5608" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="12" x="32"/>
+  <rect id="rect5610" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="13" x="31"/>
+  <rect id="rect5612" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="10" x="32"/>
+  <rect id="rect5614" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="11" x="31"/>
+  <rect id="rect5616" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="12" x="30"/>
+  <rect id="rect5618" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="13" x="29"/>
+  <rect id="rect5620" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="10" x="30"/>
+  <rect id="rect5622" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="11" x="29"/>
+  <rect id="rect5624" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="12" x="28"/>
+  <rect id="rect5626" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="13" x="27"/>
+  <rect id="rect5628" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="14" x="30"/>
+  <rect id="rect5630" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="15" x="29"/>
+  <rect id="rect5632" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="16" x="28"/>
+  <rect id="rect5634" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="17" x="27"/>
+  <rect id="rect5636" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="14" x="32"/>
+  <rect id="rect5638" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="15" x="31"/>
+  <rect id="rect5640" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="16" x="30"/>
+  <rect id="rect5642" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="17" x="29"/>
+  <rect id="rect5644" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="14" x="34"/>
+  <rect id="rect5646" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="15" x="33"/>
+  <rect id="rect5648" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="16" x="32"/>
+  <rect id="rect5650" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="17" x="31"/>
+  <rect id="rect5652" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="15" x="35"/>
+  <rect id="rect5654" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="16" x="34"/>
+  <rect id="rect5656" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="17" x="33"/>
+  <rect id="rect5658" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="18" x="32"/>
+  <rect id="rect5660" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="17" x="35"/>
+  <rect id="rect5662" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="18" x="34"/>
+  <rect id="rect5664" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="19" x="33"/>
+  <rect id="rect5666" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="20" x="32"/>
+  <rect id="rect5668" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="18" x="36"/>
+  <rect id="rect5670" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="19" x="35"/>
+  <rect id="rect5672" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="20" x="34"/>
+  <rect id="rect5674" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="21" x="33"/>
+  <rect id="rect5676" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="20" x="36"/>
+  <rect id="rect5678" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="21" x="35"/>
+  <rect id="rect5680" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="22" x="34"/>
+  <rect id="rect5682" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="23" x="33"/>
+  <rect id="rect5684" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="18" x="30"/>
+  <rect id="rect5686" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="19" x="29"/>
+  <rect id="rect5688" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="20" x="28"/>
+  <rect id="rect5690" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="21" x="27"/>
+  <rect id="rect5692" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="19" x="31"/>
+  <rect id="rect5694" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="20" x="30"/>
+  <rect id="rect5696" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="21" x="29"/>
+  <rect id="rect5698" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="22" x="28"/>
+  <rect id="rect5700" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="14" x="28"/>
+  <rect id="rect5702" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="15" x="27"/>
+  <rect id="rect5704" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="16" x="26"/>
+  <rect id="rect5706" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="18" x="28"/>
+  <rect id="rect5708" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="19" x="27"/>
+  <rect id="rect5710" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="20" x="26"/>
+  <rect id="rect5712" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="21" x="31"/>
+  <rect id="rect5714" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="22" x="30"/>
+  <rect id="rect5716" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="23" x="29"/>
+  <rect id="rect5718" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="22" x="32"/>
+  <rect id="rect5720" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="23" x="31"/>
+  <rect id="rect5722" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="24" x="30"/>
+  <rect id="rect5724" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="23" x="27"/>
+  <rect id="rect5726" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="18" x="26"/>
+  <rect id="rect5728" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="24" x="32"/>
+  <rect id="rect5730" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="10" x="28"/>
+  <rect id="rect5732" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="9" x="29"/>
+  <rect id="rect5734" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="9" x="31"/>
+  <rect id="rect5736" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="9" x="33"/>
+  <rect id="rect5738" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="9" x="35"/>
+  <rect id="rect5740" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="9" x="37"/>
+  <rect id="rect5742" style="fill-opacity:.33333;color:#000000;fill-rule:evenodd;fill:#2e3436" rx="15.551" ry="1" height="1" width="1" y="5" x="37"/>
+  <rect id="rect5477" style="stroke-opacity:.43275;stroke:#fff;stroke-linecap:round;stroke-width:1.0003;fill:none" transform="matrix(.97023 .24220 -.21059 .97757 0 0)" rx="5.8462" ry="5.94" height="23.174" width="11.692" y="-5.8722" x="28.892"/>
+  <rect id="rect5746" style="fill:url(#radialGradient6037)" transform="matrix(.97659 .21509 -.19680 .98044 0 0)" rx="6.3699" ry="6.1932" height="24.162" width="12.74" y="-5.3979" x="28.256"/>
+  <path id="path5467" style="stroke:#555753;stroke-linecap:round;stroke-width:1.0313;fill:none" d="m36.562 15.25a2.0625 2.0625 0 1 1 -4.124 0 2.0625 2.0625 0 1 1 4.124 0z" transform="matrix(.96970 0 0 .96970 5.0455 .71212)"/>
+  <path id="path4467" style="stroke-width:1px;fill-rule:evenodd;color:#000000;stroke:url(#linearGradient6033);fill:url(#linearGradient6031)" d="m33.13 27.131l3.349 1.117s1.638 0.513 2.391 0.05 0.621-1.902 0.621-1.902l-0.022-9.964-1.982-0.733-0.044 10.709s-1.547-0.435-1.574-0.411c-0.697 0.609-2.739 1.134-2.739 1.134z"/>
+  <path id="path5776" style="stroke:#959691;stroke-linecap:round;stroke-width:1.8542;fill:url(#radialGradient5940)" d="m36.562 15.25a2.0625 2.0625 0 1 1 -4.124 0 2.0625 2.0625 0 1 1 4.124 0z" transform="matrix(.53931 0 0 .53931 19.906 7.3264)"/>
+ </g>
+</svg>
diff --git a/le-tour/images/apps_overview/gnome-sudoku.png b/le-tour/images/apps_overview/gnome-sudoku.png
new file mode 100644
index 0000000000000000000000000000000000000000..2efd4908fdc3d48f45b64a3c9647d8f5ec047c75
Binary files /dev/null and b/le-tour/images/apps_overview/gnome-sudoku.png differ
diff --git a/le-tour/images/apps_overview/gnome-terminal.png b/le-tour/images/apps_overview/gnome-terminal.png
new file mode 100644
index 0000000000000000000000000000000000000000..6dea447c97df67aa549f8e19d4988e8878f1f5d0
Binary files /dev/null and b/le-tour/images/apps_overview/gnome-terminal.png differ
diff --git a/le-tour/images/apps_overview/gparted.png b/le-tour/images/apps_overview/gparted.png
new file mode 100644
index 0000000000000000000000000000000000000000..95a627de1acd5c1380ebc1698908cec4b6b75866
Binary files /dev/null and b/le-tour/images/apps_overview/gparted.png differ
diff --git a/le-tour/images/apps_overview/gwibber.png b/le-tour/images/apps_overview/gwibber.png
new file mode 100644
index 0000000000000000000000000000000000000000..444cb14d4ed95b4923f88616da23253ab0497ef6
Binary files /dev/null and b/le-tour/images/apps_overview/gwibber.png differ
diff --git a/le-tour/images/apps_overview/ibus-engine.svg b/le-tour/images/apps_overview/ibus-engine.svg
new file mode 100644
index 0000000000000000000000000000000000000000..132ce1cf8e7e479fa91da7e46d5af9d5688a0bab
--- /dev/null
+++ b/le-tour/images/apps_overview/ibus-engine.svg
@@ -0,0 +1,393 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48.000000px"
+   height="48.000000px"
+   id="svg53383"
+   sodipodi:version="0.32"
+   inkscape:version="0.46+devel"
+   sodipodi:docname="ibus-setup.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.1">
+  <defs
+     id="defs3">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 24 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="48 : 24 : 1"
+       inkscape:persp3d-origin="24 : 16 : 1"
+       id="perspective31" />
+    <linearGradient
+       id="linearGradient3264">
+      <stop
+         style="stop-color:#c9c9c9;stop-opacity:1;"
+         offset="0"
+         id="stop3266" />
+      <stop
+         id="stop3276"
+         offset="0.25"
+         style="stop-color:#f8f8f8;stop-opacity:1;" />
+      <stop
+         id="stop3272"
+         offset="0.5"
+         style="stop-color:#e2e2e2;stop-opacity:1;" />
+      <stop
+         style="stop-color:#b0b0b0;stop-opacity:1;"
+         offset="0.75"
+         id="stop3274" />
+      <stop
+         style="stop-color:#c9c9c9;stop-opacity:1;"
+         offset="1"
+         id="stop3268" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3264"
+       id="linearGradient3281"
+       gradientUnits="userSpaceOnUse"
+       x1="14.462892"
+       y1="12.284524"
+       x2="34.534348"
+       y2="39.684914"
+       gradientTransform="matrix(1.241935,0,0,1.241935,-5.027508,-7.208988)" />
+    <linearGradient
+       id="linearGradient2300">
+      <stop
+         id="stop2302"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.32673267;" />
+      <stop
+         id="stop2304"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="aigrd1"
+       gradientUnits="userSpaceOnUse"
+       x1="99.7773"
+       y1="15.4238"
+       x2="153.0005"
+       y2="248.6311">
+      <stop
+         offset="0"
+         style="stop-color:#184375"
+         id="stop53300" />
+      <stop
+         offset="1"
+         style="stop-color:#C8BDDC"
+         id="stop53302" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#aigrd1"
+       id="linearGradient53551"
+       gradientUnits="userSpaceOnUse"
+       x1="99.7773"
+       y1="15.4238"
+       x2="153.0005"
+       y2="248.6311"
+       gradientTransform="matrix(0.200685,0.000000,0.000000,0.200685,-0.585758,-1.050787)" />
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       r="11.689870"
+       fy="72.568001"
+       fx="14.287618"
+       cy="68.872971"
+       cx="14.287618"
+       gradientTransform="matrix(1.399258,-2.234445e-7,8.196178e-8,0.513264,4.365074,4.839285)"
+       id="radialGradient2308"
+       xlink:href="#linearGradient2300"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3264"
+       id="linearGradient3760"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.241935,0,0,1.241935,-5.027508,-7.208988)"
+       x1="14.462892"
+       y1="12.284524"
+       x2="34.534348"
+       y2="39.684914" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3165"
+       id="linearGradient3773"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.200685,0,0,0.200685,-54.33576,-1.050787)"
+       x1="343.77731"
+       y1="169.57544"
+       x2="447.2099"
+       y2="7.4488621" />
+    <linearGradient
+       y2="13.872649"
+       x2="22.480242"
+       y1="27.427807"
+       x1="7.746789"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3236"
+       xlink:href="#linearGradient3165"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientTransform="matrix(0.7783402,0,0,0.8510982,20.293591,5.3791756)"
+       y2="13.821767"
+       x2="23.510868"
+       y1="28.256899"
+       x1="8.4049778"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3234"
+       xlink:href="#linearGradient3165"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="13.821767"
+       x2="23.510868"
+       y1="28.256899"
+       x1="8.4049778"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3231"
+       xlink:href="#linearGradient3165"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="13.821767"
+       x2="23.510868"
+       y1="28.256899"
+       x1="8.4049778"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3226"
+       xlink:href="#linearGradient3165"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="13.821767"
+       x2="23.510868"
+       y1="28.256899"
+       x1="8.4049778"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3220"
+       xlink:href="#linearGradient3165"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="13.821767"
+       x2="23.510868"
+       y1="28.256899"
+       x1="8.4049778"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3213"
+       xlink:href="#linearGradient3165"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="13.872649"
+       x2="22.480242"
+       y1="27.427807"
+       x1="7.746789"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3209"
+       xlink:href="#linearGradient3165"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="22.214285"
+       x2="24.428572"
+       y1="22.214285"
+       x1="4"
+       id="linearGradient3182"
+       xlink:href="#linearGradient3165"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="16.928572"
+       x2="21.285713"
+       y1="16.928572"
+       x1="9.4285707"
+       id="linearGradient3170"
+       xlink:href="#linearGradient3165"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="9.7142849"
+       x2="32.046146"
+       y1="39"
+       x1="15.953855"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2385"
+       xlink:href="#linearGradient3165"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       id="perspective2391"
+       inkscape:persp3d-origin="24 : 16 : 1"
+       inkscape:vp_z="48 : 24 : 1"
+       inkscape:vp_y="6.1230318e-14 : 1000 : 0"
+       inkscape:vp_x="0 : 24 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient3165">
+      <stop
+         id="stop3167"
+         offset="0"
+         style="stop-color:#3e9ade;stop-opacity:1;" />
+      <stop
+         id="stop3169"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective3735"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3165-2"
+       id="linearGradient3773-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.200685,0,0,0.200685,-54.33576,-1.050787)"
+       x1="343.77731"
+       y1="169.57544"
+       x2="447.2099"
+       y2="7.4488621" />
+    <linearGradient
+       id="linearGradient3165-2">
+      <stop
+         id="stop3167-1"
+         offset="0"
+         style="stop-color:#3e9ade;stop-opacity:1;" />
+      <stop
+         id="stop3169-0"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     inkscape:showpageshadow="false"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.11764706"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6568542"
+     inkscape:cx="37.851846"
+     inkscape:cy="20.457681"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1024"
+     inkscape:window-height="697"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata4">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>System Applications</dc:title>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Jakub Steiner</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:source>http://jimmac.musichall.cz/</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>system</rdf:li>
+            <rdf:li>applications</rdf:li>
+            <rdf:li>group</rdf:li>
+            <rdf:li>category</rdf:li>
+            <rdf:li>admin</rdf:li>
+            <rdf:li>root</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/publicdomain/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="shadow"
+     id="layer2"
+     inkscape:groupmode="layer">
+    <path
+       transform="matrix(1.186380,0.000000,0.000000,1.186380,-4.539687,-7.794678)"
+       d="M 44.285715 38.714287 A 19.928572 9.8372450 0 1 1  4.4285717,38.714287 A 19.928572 9.8372450 0 1 1  44.285715 38.714287 z"
+       sodipodi:ry="9.8372450"
+       sodipodi:rx="19.928572"
+       sodipodi:cy="38.714287"
+       sodipodi:cx="24.357143"
+       id="path1538"
+       style="color:#000000;fill:url(#radialGradient2308);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       inkscape:r_cy="true"
+       inkscape:r_cx="true"
+       style="color:#000000;fill:#000066;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+       d="m 25.164261,0.2379876 c -0.473175,0.03238 -0.933088,0.105662 -1.397852,0.158847 l -0.03177,0 -1.111928,6.0679506 C 20.810357,6.8775227 19.105298,7.5779755 17.57138,8.529795 L 12.583589,4.9398552 C 11.235257,5.9866593 10.008288,7.207523 8.9301096,8.529795 l 3.4628624,5.05133 c -1.051422,1.606783 -1.842083,3.441487 -2.287395,5.369025 -7.6e-5,0.0091 -6.2e-5,0.03018 0,0.03177 L 4.0693956,19.935 c -0.110357,0.901369 -0.158847,1.832904 -0.158847,2.763936 0,0.761753 0.02103,1.513329 0.09531,2.255625 l 6.0361824,1.080159 c 0.429297,2.096161 1.244809,4.053785 2.382703,5.782026 L 8.8348036,36.741 c 1.028135,1.276384 2.2151054,2.43848 3.4946324,3.462861 l 5.0831,-3.494631 c 1.776475,1.133244 3.759545,1.927892 5.909103,2.319165 l 0.953082,6.004411 c 0.677254,0.06165 1.371775,0.06354 2.065009,0.06354 0.978685,-10e-7 1.91352,-0.03709 2.859244,-0.158847 l 1.143697,-6.131489 c 2.040927,-0.507904 3.958179,-1.388998 5.62318,-2.573319 l 4.892483,3.55817 c 1.26877,-1.079445 2.428987,-2.320188 3.431093,-3.653479 l -3.55817,-5.146638 c 0.963606,-1.664197 1.631298,-3.500366 1.969701,-5.464333 L 48.70537,24.57333 c 0.05266,-0.62659 0.06354,-1.234265 0.06354,-1.874393 0,-1.1124 -0.129295,-2.203101 -0.285924,-3.272246 l -6.09972,-1.111928 c -0.478008,-1.76508 -1.262312,-3.41188 -2.255625,-4.892484 L 43.717578,8.498025 C 42.604813,7.1371705 41.335456,5.8800445 39.937022,4.8127777 L 34.758614,8.370948 C 33.270287,7.4907201 31.668635,6.815334 29.929669,6.4330159 L 28.976588,0.3968346 c -0.867481,-0.102044 -1.742101,-0.158847 -2.636858,-0.158847 -0.241826,0 -0.490706,-0.0076 -0.730696,0 -0.116995,0.0037 -0.232771,-0.0068 -0.349463,0 -0.0316,0.0018 -0.06376,-0.0022 -0.09531,0 z m 0.826004,15.4399164 c 0.116063,-0.0059 0.231944,0 0.349463,0 3.760606,0 6.830416,3.06981 6.830416,6.830416 10e-7,3.760605 -3.069811,6.798646 -6.830416,6.798646 -3.760605,1e-6 -6.798646,-3.038041 -6.798646,-6.798646 1e-6,-3.643086 2.851212,-6.647839 6.449183,-6.830416 z"
+       id="path3243-5"
+       sodipodi:nodetypes="ccccccccsccsccccccccsccccccccsccccccccsssccssssc" />
+    <path
+       inkscape:r_cy="true"
+       inkscape:r_cx="true"
+       style="opacity:1;color:#000000;fill:url(#linearGradient3773);fill-opacity:1;fill-rule:nonzero;stroke:#3f4561;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 22.699525,0.94746963 C 22.22635,0.97984519 21.766437,1.0531317 21.301673,1.1063165 L 21.269903,1.1063165 L 20.157975,7.1742671 C 18.345621,7.5870046 16.640562,8.2874574 15.106644,9.2392765 L 10.118853,5.6493371 C 8.770521,6.6961412 7.543552,7.9170049 6.465374,9.2392765 L 9.928236,14.290607 C 8.876814,15.89739 8.086153,17.732094 7.640841,19.659632 C 7.640765,19.668743 7.640779,19.689813 7.640841,19.691401 L 1.60466,20.644482 C 1.494303,21.545851 1.445813,22.477386 1.445813,23.408418 C 1.445813,24.170171 1.466846,24.921747 1.541121,25.664043 L 7.577303,26.744202 C 8.0066,28.840363 8.822112,30.797987 9.960006,32.526228 L 6.370066,37.450482 C 7.398201,38.726866 8.585171,39.888962 9.864698,40.913343 L 14.947798,37.418712 C 16.724273,38.551956 18.707343,39.346604 20.856901,39.737877 L 21.809983,45.742288 C 22.487237,45.803935 23.181758,45.805827 23.874992,45.805827 C 24.853677,45.805826 25.788512,45.768738 26.734236,45.64698 L 27.877933,39.515491 C 29.91886,39.007587 31.836112,38.126493 33.501113,36.942172 L 38.393596,40.500342 C 39.662366,39.420897 40.822583,38.180154 41.824689,36.846863 L 38.266519,31.700225 C 39.230125,30.036028 39.897817,28.199859 40.23622,26.235892 L 46.240632,25.282811 C 46.29329,24.656221 46.30417,24.048546 46.30417,23.408418 C 46.30417,22.296018 46.174875,21.205317 46.018246,20.136172 L 39.918526,19.024244 C 39.440518,17.259164 38.656214,15.612364 37.662901,14.13176 L 41.25284,9.2075071 C 40.140075,7.8466524 38.870718,6.5895264 37.472284,5.5222596 L 32.293876,9.0804296 C 30.805549,8.200202 29.203897,7.5248159 27.464931,7.1424978 L 26.51185,1.1063165 C 25.644369,1.0042729 24.769749,0.94746963 23.874992,0.94746963 C 23.633166,0.94746964 23.384286,0.93986063 23.144296,0.94746963 C 23.027301,0.95117908 22.911525,0.94066346 22.794833,0.94746963 C 22.763228,0.94931296 22.73107,0.94531125 22.699525,0.94746963 z M 23.525529,16.387386 C 23.641592,16.381497 23.757473,16.387386 23.874992,16.387386 C 27.635598,16.387386 30.705408,19.457196 30.705408,23.217802 C 30.705409,26.978407 27.635597,30.016448 23.874992,30.016448 C 20.114387,30.016449 17.076346,26.978407 17.076346,23.217802 C 17.076347,19.574716 19.927558,16.569963 23.525529,16.387386 z "
+       id="path3243" />
+    <path
+       inkscape:r_cy="true"
+       inkscape:r_cx="true"
+       sodipodi:type="arc"
+       style="opacity:0.64772728;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.62180054;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path3283"
+       sodipodi:cx="23.511301"
+       sodipodi:cy="23.781593"
+       sodipodi:rx="12.727922"
+       sodipodi:ry="12.727922"
+       d="M 36.239223 23.781593 A 12.727922 12.727922 0 1 1  10.783379,23.781593 A 12.727922 12.727922 0 1 1  36.239223 23.781593 z"
+       transform="matrix(0.616598,0,0,0.616598,9.38202,8.539674)" />
+    <path
+       inkscape:r_cy="true"
+       inkscape:r_cx="true"
+       id="path3285"
+       d="M 21.995808,2.2697875 21.103024,8.1448447 C 19.404254,8.531715 16.279442,9.7149239 14.841657,10.607091 L 10.091975,7.0619472 C 8.828145,8.0431461 8.741474,8.109686 7.730867,9.3490892 l 3.434196,5.0932188 c -0.985526,1.506083 -2.169267,4.189994 -2.594285,6.107942 0,0 -6.01779,1.014425 -6.01779,1.014425 -0.103441,0.844879 -0.053728,2.653173 0.015892,3.348948 l 5.748217,1.035517 c 0.402393,1.96479 1.908227,5.127412 2.974807,6.747341 l -3.635002,4.802558 c 0.963699,1.196391 1.156572,1.30587 2.355908,2.266051 l 4.860631,-3.561037 c 1.66514,1.062221 4.970289,2.354376 6.98513,2.721127 l 0.797728,5.801092 c 0.63481,0.05778 2.38853,0.219875 3.274984,0.105749 l 0.892783,-6.03888 c 1.913018,-0.476072 5.218473,-1.832925 6.779125,-2.943023 l 4.855433,3.50816 c 1.189254,-1.011792 1.199909,-1.164249 2.139211,-2.41398 l -3.59802,-5.114311 c 0.903215,-1.5599 2.071087,-4.610599 2.388282,-6.45148 l 5.890949,-0.977443 c 0.04935,-0.58732 0.05176,-2.225166 -0.09506,-3.227305 L 39.182092,20.138242 C 38.73404,18.483783 37.196418,15.502473 36.265359,14.114662 L 40.080075,9.3121061 C 39.037052,8.0365384 38.64924,7.8615206 37.338448,6.8611416 L 32.313994,10.459159 C 30.918941,9.6340986 28.137095,8.3763621 26.507114,8.0180046 L 25.619528,2.2697875 c -0.813114,-0.095648 -3.15904,-0.053175 -3.62372,0 z"
+       style="opacity:0.34659089;color:#000000;fill:none;stroke:#ffffff;stroke-width:0.99999923;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
+       sodipodi:nodetypes="ccccccccccccccccccccccccccccccccc" />
+    <path
+       style="opacity:0.5;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 10.102903,6.2970655 C 8.7545689,7.3438694 8.1656464,7.9719226 7.0874684,9.2941942 L 10.489927,14.259153 C 9.4385072,15.857755 8.3316275,18.426114 8.1423859,19.987706 C 8.1423859,19.987706 2.0798859,21.0319 2.0798859,21.0319 C 2.0109129,21.595256 1.90625,22.884803 1.90625,22.884803 L 2.0830267,24.447303 C 2.5107567,24.535638 2.9231817,24.617818 3.3642767,24.666053 L 3.8642767,23.134803 C 4.2083177,23.163279 4.5439297,23.197303 4.8955267,23.197303 C 5.2467347,23.197303 5.6139847,23.163473 5.9580267,23.134803 L 6.4267767,24.666053 C 6.8680647,24.617818 7.3115487,24.535638 7.7392767,24.447303 L 7.7392767,22.884803 C 8.4250337,22.72518 9.0712777,22.497045 9.7080267,22.228553 L 10.645527,23.509803 C 11.047878,23.327709 11.421123,23.133984 11.801777,22.916053 L 11.301777,21.416053 C 11.89901,21.053803 12.463529,20.620706 12.989277,20.166053 L 14.270527,21.103553 C 14.596162,20.806973 14.91164,20.491691 15.208027,20.166053 L 14.270527,18.916053 C 14.725373,18.390305 15.127027,17.826171 15.489277,17.228553 L 16.989277,17.697303 C 17.207208,17.316456 17.432571,16.943209 17.614277,16.541053 L 16.333027,15.603553 C 16.601517,14.966804 16.798016,14.320561 16.958027,13.634803 L 18.551777,13.634803 C 18.640112,13.207076 18.691236,12.763591 18.739277,12.322303 L 17.239277,11.853553 C 17.268139,11.509705 17.301777,11.142456 17.301777,10.791053 C 17.301776,10.43965 17.267753,10.104039 17.239277,9.7598034 L 18.739277,9.2910534 C 18.69373,8.8711662 18.633686,8.4490548 18.551777,8.0410534 C 17.404349,8.4403544 15.999117,9.1941729 14.983265,9.8245243 L 10.102903,6.2970655 z "
+       id="path3767"
+       inkscape:r_cx="true"
+       inkscape:r_cy="true"
+       sodipodi:nodetypes="cccccccccsccccccccccccccccccccsccccc" />
+    <path
+       style="opacity:0.5;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 37.236641,17.217754 C 36.85286,17.39913 36.490003,17.603509 36.123236,17.813295 L 36.692886,19.548136 C 35.995792,19.970436 35.338156,20.467825 34.725008,20.998151 L 33.249099,19.910639 C 32.869013,20.256538 32.507327,20.618223 32.161588,20.998151 L 33.249099,22.474059 C 32.718773,23.087371 32.221547,23.745002 31.799084,24.441937 L 31.255328,24.260685 C 31.207646,24.960968 31.018949,25.62217 30.737466,26.228563 L 30.841038,26.306242 C 30.527881,27.048922 30.27649,27.83664 30.090137,28.636624 L 28.614229,28.636624 C 28.477946,28.722076 28.343676,28.821684 28.199938,28.895555 C 28.121568,29.310822 28.065026,29.712881 28.018687,30.138426 L 29.77942,30.708074 C 29.746033,31.10935 29.727633,31.515269 29.727633,31.925052 C 29.727631,32.334993 29.746034,32.740753 29.77942,33.142029 L 28.018687,33.711677 C 28.074705,34.226432 28.148678,34.740347 28.251725,35.239372 L 30.090137,35.213479 C 30.218255,35.763466 30.393202,36.320918 30.582107,36.844746 C 31.327023,36.557466 32.05594,36.214561 32.731236,35.809021 C 32.319649,34.59298 32.083908,33.279913 32.083908,31.925052 C 32.083909,26.727119 35.376289,22.288397 39.981313,20.583861 L 38.893802,20.402608 C 38.671014,19.579946 38.382478,18.774017 38.013435,18.020441 C 38.002581,17.998277 37.99851,17.96486 37.987542,17.942761 L 37.935756,17.890975 L 37.236641,17.217754 z "
+       id="path3770"
+       inkscape:r_cx="true"
+       inkscape:r_cy="true" />
+  </g>
+</svg>
diff --git a/le-tour/images/apps_overview/ibus.png b/le-tour/images/apps_overview/ibus.png
new file mode 100644
index 0000000000000000000000000000000000000000..db1d2e8f006e060373a98ff1e556145693489d92
Binary files /dev/null and b/le-tour/images/apps_overview/ibus.png differ
diff --git a/le-tour/images/apps_overview/kajongg.png b/le-tour/images/apps_overview/kajongg.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ef56201582cf426cedfe2675de678d524fbb6a6
Binary files /dev/null and b/le-tour/images/apps_overview/kajongg.png differ
diff --git a/le-tour/images/apps_overview/kalgebra.png b/le-tour/images/apps_overview/kalgebra.png
new file mode 100644
index 0000000000000000000000000000000000000000..e42f2ee8a8aff7b2a32200b23f01064b1d7810c9
Binary files /dev/null and b/le-tour/images/apps_overview/kalgebra.png differ
diff --git a/le-tour/images/apps_overview/kalzium.png b/le-tour/images/apps_overview/kalzium.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d6c7bf87633992c99ee0257c176c588022e3a2e
Binary files /dev/null and b/le-tour/images/apps_overview/kalzium.png differ
diff --git a/le-tour/images/apps_overview/kanagram.png b/le-tour/images/apps_overview/kanagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..06cedc6485aaa7a3d5e85b462de231bfb30ff136
Binary files /dev/null and b/le-tour/images/apps_overview/kanagram.png differ
diff --git a/le-tour/images/apps_overview/kapman.png b/le-tour/images/apps_overview/kapman.png
new file mode 100644
index 0000000000000000000000000000000000000000..41283f23407eb7448968019ba60f04535cff22c9
Binary files /dev/null and b/le-tour/images/apps_overview/kapman.png differ
diff --git a/le-tour/images/apps_overview/katomic.png b/le-tour/images/apps_overview/katomic.png
new file mode 100644
index 0000000000000000000000000000000000000000..f102ad9afca8b4e7d8ef259f7c85a5634ee89867
Binary files /dev/null and b/le-tour/images/apps_overview/katomic.png differ
diff --git a/le-tour/images/apps_overview/kbattleship.png b/le-tour/images/apps_overview/kbattleship.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a23d203224764f9b8463b661d66448ef59f7134
Binary files /dev/null and b/le-tour/images/apps_overview/kbattleship.png differ
diff --git a/le-tour/images/apps_overview/kblackbox.png b/le-tour/images/apps_overview/kblackbox.png
new file mode 100644
index 0000000000000000000000000000000000000000..75ab65613a90a05f66259c0a667a1451fa5c2bd3
Binary files /dev/null and b/le-tour/images/apps_overview/kblackbox.png differ
diff --git a/le-tour/images/apps_overview/kblocks.png b/le-tour/images/apps_overview/kblocks.png
new file mode 100644
index 0000000000000000000000000000000000000000..7664de1bb592e525acddc871ae830811c4ca7b79
Binary files /dev/null and b/le-tour/images/apps_overview/kblocks.png differ
diff --git a/le-tour/images/apps_overview/kbounce.png b/le-tour/images/apps_overview/kbounce.png
new file mode 100644
index 0000000000000000000000000000000000000000..63f0c2f6c4472494cfe98ab5ee7d13db595cde72
Binary files /dev/null and b/le-tour/images/apps_overview/kbounce.png differ
diff --git a/le-tour/images/apps_overview/kbreakout.png b/le-tour/images/apps_overview/kbreakout.png
new file mode 100644
index 0000000000000000000000000000000000000000..99137b09e16cebf191270e43668e4c3af4e12ca4
Binary files /dev/null and b/le-tour/images/apps_overview/kbreakout.png differ
diff --git a/le-tour/images/apps_overview/kbruch.png b/le-tour/images/apps_overview/kbruch.png
new file mode 100644
index 0000000000000000000000000000000000000000..d0a6fe86ff373dbaf77797dae1dcbd43ce7477c1
Binary files /dev/null and b/le-tour/images/apps_overview/kbruch.png differ
diff --git a/le-tour/images/apps_overview/kdesnake.png b/le-tour/images/apps_overview/kdesnake.png
new file mode 100644
index 0000000000000000000000000000000000000000..a5e175c35dffd7cf4cb0ce5cffd4727f267a3b0a
Binary files /dev/null and b/le-tour/images/apps_overview/kdesnake.png differ
diff --git a/le-tour/images/apps_overview/kdiamond.png b/le-tour/images/apps_overview/kdiamond.png
new file mode 100644
index 0000000000000000000000000000000000000000..47a15b0e56e865bf4880b940d26e9b91b022a462
Binary files /dev/null and b/le-tour/images/apps_overview/kdiamond.png differ
diff --git a/le-tour/images/apps_overview/kfourinline.png b/le-tour/images/apps_overview/kfourinline.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b336b12b9f949f9695f7dad0db6fff8cd31977c
Binary files /dev/null and b/le-tour/images/apps_overview/kfourinline.png differ
diff --git a/le-tour/images/apps_overview/kgeography.png b/le-tour/images/apps_overview/kgeography.png
new file mode 100644
index 0000000000000000000000000000000000000000..43a50b1e0c3389188a7de8d1e65679d4ef720193
Binary files /dev/null and b/le-tour/images/apps_overview/kgeography.png differ
diff --git a/le-tour/images/apps_overview/kgoldrunner.png b/le-tour/images/apps_overview/kgoldrunner.png
new file mode 100644
index 0000000000000000000000000000000000000000..23ec53793ad6b4cf62c3b2d3aa2dd342cf26dc94
Binary files /dev/null and b/le-tour/images/apps_overview/kgoldrunner.png differ
diff --git a/le-tour/images/apps_overview/khangman.png b/le-tour/images/apps_overview/khangman.png
new file mode 100644
index 0000000000000000000000000000000000000000..5821246a661adbd285e5b17f16e9d43d99d94b54
Binary files /dev/null and b/le-tour/images/apps_overview/khangman.png differ
diff --git a/le-tour/images/apps_overview/kig.png b/le-tour/images/apps_overview/kig.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d86b86626b86ba90e36febcd7524e467b0a0808
Binary files /dev/null and b/le-tour/images/apps_overview/kig.png differ
diff --git a/le-tour/images/apps_overview/kigo.png b/le-tour/images/apps_overview/kigo.png
new file mode 100644
index 0000000000000000000000000000000000000000..c333220b5e3a8c0d59293bad6dd9ae6521d664a8
Binary files /dev/null and b/le-tour/images/apps_overview/kigo.png differ
diff --git a/le-tour/images/apps_overview/killbots.png b/le-tour/images/apps_overview/killbots.png
new file mode 100644
index 0000000000000000000000000000000000000000..f6dc1911fd11937c637d9b0c9eaf31328a8fb51d
Binary files /dev/null and b/le-tour/images/apps_overview/killbots.png differ
diff --git a/le-tour/images/apps_overview/kiriki.png b/le-tour/images/apps_overview/kiriki.png
new file mode 100644
index 0000000000000000000000000000000000000000..7239eb246d477d110fb1836dcf2bc14db70b7779
Binary files /dev/null and b/le-tour/images/apps_overview/kiriki.png differ
diff --git a/le-tour/images/apps_overview/kjumpingcube.png b/le-tour/images/apps_overview/kjumpingcube.png
new file mode 100644
index 0000000000000000000000000000000000000000..95d389a0b2c5e95d9950a9618eff5e4ce9aedc89
Binary files /dev/null and b/le-tour/images/apps_overview/kjumpingcube.png differ
diff --git a/le-tour/images/apps_overview/klettres.png b/le-tour/images/apps_overview/klettres.png
new file mode 100644
index 0000000000000000000000000000000000000000..c0d26627af157ca298e33e2e0de0802cc3190e07
Binary files /dev/null and b/le-tour/images/apps_overview/klettres.png differ
diff --git a/le-tour/images/apps_overview/klickety.png b/le-tour/images/apps_overview/klickety.png
new file mode 100644
index 0000000000000000000000000000000000000000..4e4986405b47b9d604daaff02032c0182ccb2391
Binary files /dev/null and b/le-tour/images/apps_overview/klickety.png differ
diff --git a/le-tour/images/apps_overview/klines.png b/le-tour/images/apps_overview/klines.png
new file mode 100644
index 0000000000000000000000000000000000000000..d605bc37e9ef0f5e90702902b4440159530c101f
Binary files /dev/null and b/le-tour/images/apps_overview/klines.png differ
diff --git a/le-tour/images/apps_overview/kmahjongg.png b/le-tour/images/apps_overview/kmahjongg.png
new file mode 100644
index 0000000000000000000000000000000000000000..d976ce5e611349e643d7555c1aa5fcf0a3bc4071
Binary files /dev/null and b/le-tour/images/apps_overview/kmahjongg.png differ
diff --git a/le-tour/images/apps_overview/kmail.png b/le-tour/images/apps_overview/kmail.png
new file mode 100644
index 0000000000000000000000000000000000000000..b7273a32750edcde2ae5a90707576d2135b21087
Binary files /dev/null and b/le-tour/images/apps_overview/kmail.png differ
diff --git a/le-tour/images/apps_overview/kmines.png b/le-tour/images/apps_overview/kmines.png
new file mode 100644
index 0000000000000000000000000000000000000000..a053fe9a18bd08ed58e769e65ffcc4c3d19ea812
Binary files /dev/null and b/le-tour/images/apps_overview/kmines.png differ
diff --git a/le-tour/images/apps_overview/kmplot.png b/le-tour/images/apps_overview/kmplot.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba6fc758e69a9a081324603573c17bd3972ddf4c
Binary files /dev/null and b/le-tour/images/apps_overview/kmplot.png differ
diff --git a/le-tour/images/apps_overview/knetwalk.png b/le-tour/images/apps_overview/knetwalk.png
new file mode 100644
index 0000000000000000000000000000000000000000..90ce7ba5ea2b4731f9e322ff5014afd88a276153
Binary files /dev/null and b/le-tour/images/apps_overview/knetwalk.png differ
diff --git a/le-tour/images/apps_overview/kolf.png b/le-tour/images/apps_overview/kolf.png
new file mode 100644
index 0000000000000000000000000000000000000000..03247b5ba2d6e7fe26440e73ab581a4429906970
Binary files /dev/null and b/le-tour/images/apps_overview/kolf.png differ
diff --git a/le-tour/images/apps_overview/kollision.png b/le-tour/images/apps_overview/kollision.png
new file mode 100644
index 0000000000000000000000000000000000000000..b1a393b212ee5b9627f7dc82a971eb43fbd6694f
Binary files /dev/null and b/le-tour/images/apps_overview/kollision.png differ
diff --git a/le-tour/images/apps_overview/konquest.png b/le-tour/images/apps_overview/konquest.png
new file mode 100644
index 0000000000000000000000000000000000000000..d4c88ba7de96b3e91bd8ac4d4a97bca704d44c56
Binary files /dev/null and b/le-tour/images/apps_overview/konquest.png differ
diff --git a/le-tour/images/apps_overview/kpat.png b/le-tour/images/apps_overview/kpat.png
new file mode 100644
index 0000000000000000000000000000000000000000..ffabc79ef67f97a41b8d6cc44adcd3d493c6c39f
Binary files /dev/null and b/le-tour/images/apps_overview/kpat.png differ
diff --git a/le-tour/images/apps_overview/kreversi.png b/le-tour/images/apps_overview/kreversi.png
new file mode 100644
index 0000000000000000000000000000000000000000..afd4e9927d7015fc8c69686c5dcd03245629a82b
Binary files /dev/null and b/le-tour/images/apps_overview/kreversi.png differ
diff --git a/le-tour/images/apps_overview/kshisen.png b/le-tour/images/apps_overview/kshisen.png
new file mode 100644
index 0000000000000000000000000000000000000000..b5e730764df775192a6cedcb2b287cb228ac9c47
Binary files /dev/null and b/le-tour/images/apps_overview/kshisen.png differ
diff --git a/le-tour/images/apps_overview/ksirk-visuals.png b/le-tour/images/apps_overview/ksirk-visuals.png
new file mode 100644
index 0000000000000000000000000000000000000000..1ae2c7e3ff100ee7ef3cb43cd7a095e5abaca828
Binary files /dev/null and b/le-tour/images/apps_overview/ksirk-visuals.png differ
diff --git a/le-tour/images/apps_overview/ksirk.png b/le-tour/images/apps_overview/ksirk.png
new file mode 100644
index 0000000000000000000000000000000000000000..44c5e9a3d5d374a9f619662e44dc08d16c3ca1fb
Binary files /dev/null and b/le-tour/images/apps_overview/ksirk.png differ
diff --git a/le-tour/images/apps_overview/kspaceduel.png b/le-tour/images/apps_overview/kspaceduel.png
new file mode 100644
index 0000000000000000000000000000000000000000..52b88f7cc7602794308c939c10a91645f3e44439
Binary files /dev/null and b/le-tour/images/apps_overview/kspaceduel.png differ
diff --git a/le-tour/images/apps_overview/ksquares.png b/le-tour/images/apps_overview/ksquares.png
new file mode 100644
index 0000000000000000000000000000000000000000..906e52ed91c5283d4559cfac34ec3a7311501151
Binary files /dev/null and b/le-tour/images/apps_overview/ksquares.png differ
diff --git a/le-tour/images/apps_overview/kstars.png b/le-tour/images/apps_overview/kstars.png
new file mode 100644
index 0000000000000000000000000000000000000000..e7e5d9842bb8985b273e91043561e4d4cc25dcef
Binary files /dev/null and b/le-tour/images/apps_overview/kstars.png differ
diff --git a/le-tour/images/apps_overview/ksudoku.png b/le-tour/images/apps_overview/ksudoku.png
new file mode 100644
index 0000000000000000000000000000000000000000..e6361b4a4e08a186e98f691244e966ddde2ed4a6
Binary files /dev/null and b/le-tour/images/apps_overview/ksudoku.png differ
diff --git a/le-tour/images/apps_overview/ktouch.png b/le-tour/images/apps_overview/ktouch.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2043a18d86c61583e1ca7b00e69cb58a2d17b29
Binary files /dev/null and b/le-tour/images/apps_overview/ktouch.png differ
diff --git a/le-tour/images/apps_overview/ktron.png b/le-tour/images/apps_overview/ktron.png
new file mode 100644
index 0000000000000000000000000000000000000000..c87e487f7115b98667c598433d0acf65e917ec85
Binary files /dev/null and b/le-tour/images/apps_overview/ktron.png differ
diff --git a/le-tour/images/apps_overview/ktuberling.png b/le-tour/images/apps_overview/ktuberling.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d402b42fcca9c769ee045f1de7701b467c9b943
Binary files /dev/null and b/le-tour/images/apps_overview/ktuberling.png differ
diff --git a/le-tour/images/apps_overview/kturtle.png b/le-tour/images/apps_overview/kturtle.png
new file mode 100644
index 0000000000000000000000000000000000000000..51797954d7fa31a0cba41ac336e6f8ccaed290f5
Binary files /dev/null and b/le-tour/images/apps_overview/kturtle.png differ
diff --git a/le-tour/images/apps_overview/kubrick.png b/le-tour/images/apps_overview/kubrick.png
new file mode 100644
index 0000000000000000000000000000000000000000..df568342c5f16a6a1d8d1ed250aaf5dd5c909967
Binary files /dev/null and b/le-tour/images/apps_overview/kubrick.png differ
diff --git a/le-tour/images/apps_overview/kwordquiz.png b/le-tour/images/apps_overview/kwordquiz.png
new file mode 100644
index 0000000000000000000000000000000000000000..a584cf4ee211635d4f46033db2a64911858343b1
Binary files /dev/null and b/le-tour/images/apps_overview/kwordquiz.png differ
diff --git a/le-tour/images/apps_overview/libreoffice-calc.png b/le-tour/images/apps_overview/libreoffice-calc.png
new file mode 100644
index 0000000000000000000000000000000000000000..9614ca81d6af07ef50296a491708e7f1bdcea202
Binary files /dev/null and b/le-tour/images/apps_overview/libreoffice-calc.png differ
diff --git a/le-tour/images/apps_overview/libreoffice-draw.png b/le-tour/images/apps_overview/libreoffice-draw.png
new file mode 100644
index 0000000000000000000000000000000000000000..b1405c52888afb79bda10049fe442b9dc2d4b572
Binary files /dev/null and b/le-tour/images/apps_overview/libreoffice-draw.png differ
diff --git a/le-tour/images/apps_overview/libreoffice-impress.png b/le-tour/images/apps_overview/libreoffice-impress.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d0fdc08af2f32c16e879686b7da19353b0bca24
Binary files /dev/null and b/le-tour/images/apps_overview/libreoffice-impress.png differ
diff --git a/le-tour/images/apps_overview/libreoffice-math.png b/le-tour/images/apps_overview/libreoffice-math.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a17a15f855c0192c6a178f13d46eb434ab7dd45
Binary files /dev/null and b/le-tour/images/apps_overview/libreoffice-math.png differ
diff --git a/le-tour/images/apps_overview/libreoffice-startcenter.png b/le-tour/images/apps_overview/libreoffice-startcenter.png
new file mode 100644
index 0000000000000000000000000000000000000000..59efe6991dfb72ae3e2f6d4df728ba700726475f
Binary files /dev/null and b/le-tour/images/apps_overview/libreoffice-startcenter.png differ
diff --git a/le-tour/images/apps_overview/libreoffice-writer.png b/le-tour/images/apps_overview/libreoffice-writer.png
new file mode 100644
index 0000000000000000000000000000000000000000..3fa71f4dc140eef6005415d37557c973c8b61503
Binary files /dev/null and b/le-tour/images/apps_overview/libreoffice-writer.png differ
diff --git a/le-tour/images/apps_overview/lskat.png b/le-tour/images/apps_overview/lskat.png
new file mode 100644
index 0000000000000000000000000000000000000000..660e3f40386c19b115cb690fea5dc1bf26cb4b4d
Binary files /dev/null and b/le-tour/images/apps_overview/lskat.png differ
diff --git a/le-tour/images/apps_overview/mahjongg.png b/le-tour/images/apps_overview/mahjongg.png
new file mode 100644
index 0000000000000000000000000000000000000000..c34e2eddb2fde020115d812815e164fa93727f9f
Binary files /dev/null and b/le-tour/images/apps_overview/mahjongg.png differ
diff --git a/le-tour/images/apps_overview/marble.png b/le-tour/images/apps_overview/marble.png
new file mode 100644
index 0000000000000000000000000000000000000000..3aa1fa662297221c0bf66bd96ca88b212ad5ef64
Binary files /dev/null and b/le-tour/images/apps_overview/marble.png differ
diff --git a/le-tour/images/apps_overview/mines.png b/le-tour/images/apps_overview/mines.png
new file mode 100644
index 0000000000000000000000000000000000000000..0e76cd48372f912c96f9edb0fe7d152ece733292
Binary files /dev/null and b/le-tour/images/apps_overview/mines.png differ
diff --git a/le-tour/images/apps_overview/nepomuk.png b/le-tour/images/apps_overview/nepomuk.png
new file mode 100644
index 0000000000000000000000000000000000000000..10c77514fd253ffc0576d75d9f0f3ec863663595
Binary files /dev/null and b/le-tour/images/apps_overview/nepomuk.png differ
diff --git a/le-tour/images/apps_overview/network.png b/le-tour/images/apps_overview/network.png
new file mode 100644
index 0000000000000000000000000000000000000000..e288a9db620720dd8f6b15bbd392b37f28871b87
Binary files /dev/null and b/le-tour/images/apps_overview/network.png differ
diff --git a/le-tour/images/apps_overview/onboard.png b/le-tour/images/apps_overview/onboard.png
new file mode 100644
index 0000000000000000000000000000000000000000..a93e09aa6744ec74d9c190446940e6e8026684cd
Binary files /dev/null and b/le-tour/images/apps_overview/onboard.png differ
diff --git a/le-tour/images/apps_overview/openjdk-6.png b/le-tour/images/apps_overview/openjdk-6.png
new file mode 100644
index 0000000000000000000000000000000000000000..af44ff47a644b8a979587d3aa38101a9b8f86796
Binary files /dev/null and b/le-tour/images/apps_overview/openjdk-6.png differ
diff --git a/le-tour/images/apps_overview/orca.png b/le-tour/images/apps_overview/orca.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ca8d8e3c939bb019e63c1adc5d757f72a9a1e14
Binary files /dev/null and b/le-tour/images/apps_overview/orca.png differ
diff --git a/le-tour/images/apps_overview/palapeli.png b/le-tour/images/apps_overview/palapeli.png
new file mode 100644
index 0000000000000000000000000000000000000000..e5ec87ba640e76fe6ae4e296064df35a5261dedc
Binary files /dev/null and b/le-tour/images/apps_overview/palapeli.png differ
diff --git a/le-tour/images/apps_overview/palimpsest.png b/le-tour/images/apps_overview/palimpsest.png
new file mode 100644
index 0000000000000000000000000000000000000000..df0c6b7185cb5528c33db8afc6b207100043a47a
Binary files /dev/null and b/le-tour/images/apps_overview/palimpsest.png differ
diff --git a/le-tour/images/apps_overview/parley.png b/le-tour/images/apps_overview/parley.png
new file mode 100644
index 0000000000000000000000000000000000000000..806c47e607edfad4138f5ae64f097ca1d4fd14a3
Binary files /dev/null and b/le-tour/images/apps_overview/parley.png differ
diff --git a/le-tour/images/apps_overview/pdfeditor.png b/le-tour/images/apps_overview/pdfeditor.png
new file mode 100644
index 0000000000000000000000000000000000000000..0f4d5a712e0c4a5f540d75cd495fe607813c5a19
Binary files /dev/null and b/le-tour/images/apps_overview/pdfeditor.png differ
diff --git a/le-tour/images/apps_overview/pidgin.png b/le-tour/images/apps_overview/pidgin.png
new file mode 100644
index 0000000000000000000000000000000000000000..839ef6f448f0f478e20bfe8bf6dd8389142cef0d
Binary files /dev/null and b/le-tour/images/apps_overview/pidgin.png differ
diff --git a/le-tour/images/apps_overview/python.png b/le-tour/images/apps_overview/python.png
new file mode 100644
index 0000000000000000000000000000000000000000..e7812ebc60a1e6a40517a857c87e0d206cab1cba
Binary files /dev/null and b/le-tour/images/apps_overview/python.png differ
diff --git a/le-tour/images/apps_overview/remmina.png b/le-tour/images/apps_overview/remmina.png
new file mode 100644
index 0000000000000000000000000000000000000000..8b001f40f8fd85aa909930cb14726ca2a73f221f
Binary files /dev/null and b/le-tour/images/apps_overview/remmina.png differ
diff --git a/le-tour/images/apps_overview/rhythmbox.png b/le-tour/images/apps_overview/rhythmbox.png
new file mode 100644
index 0000000000000000000000000000000000000000..e4e72f96f6c3a7ed1f934419d5b9a9edfe64128b
Binary files /dev/null and b/le-tour/images/apps_overview/rhythmbox.png differ
diff --git a/le-tour/images/apps_overview/rogerioviado.html b/le-tour/images/apps_overview/rogerioviado.html
new file mode 100644
index 0000000000000000000000000000000000000000..d1666bb5fbe33f3cd641b4687c642d4fac194450
--- /dev/null
+++ b/le-tour/images/apps_overview/rogerioviado.html
@@ -0,0 +1,130 @@
+<img src="./ibagens/apps_overview/orca.png" id="orca">
+<img src="./ibagens/apps_overview/onboard.png" id="onboard">
+<img src="./ibagens/apps_overview/gnome-help.png" id="ajuda">
+<img src="./ibagens/apps_overview/akonadi.png" id="akonadi">
+<img src="./ibagens/apps_overview/file-manager.png" id="arquivos">
+<img src="./ibagens/apps_overview/calc.png" id="calc">
+<img src="./ibagens/apps_overview/applets-screenshooter.png" id="printsc">
+<img src="./ibagens/apps_overview/contacts.png" id="contatos">
+<img src="./ibagens/apps_overview/text-editor.png" id="txteditor">
+<img src="./ibagens/apps_overview/file-roller.png" id="gerenciadorpkgs">
+<img src="./ibagens/apps_overview/character-map.png" id="mapachars">
+<img src="./ibagens/apps_overview/gnome-terminal.png" id="terminal">
+<img src="./ibagens/apps_overview/palimpsest.png" id="unidades">
+<img src="./ibagens/apps_overview/xdiagnose.png" id="xdiagnose">
+<img src="./ibagens/apps_overview/xournal.png" id="xournal">
+<img src="./ibagens/apps_overview/kalzium.png" id="kalzium">
+<img src="./ibagens/apps_overview/kstars.png" id="kstars">
+<img src="./ibagens/apps_overview/teoriagrafos.png" id="teoriagrafos">
+<img src="./ibagens/apps_overview/python.png" id="python">
+<img src="./ibagens/apps_overview/blinken.png" id="blinken">
+<img src="./ibagens/apps_overview/geogebra.png" id="geogebra">
+<img src="./ibagens/apps_overview/tuxmath.png" id="tuxmath">
+<img src="./ibagens/apps_overview/tuxpaint.png" id="tuxpaint">
+<img src="./ibagens/apps_overview/kalgebra.png" id="kalgebra">
+<img src="./ibagens/apps_overview/kanagram.png" id="kanagram">
+<img src="./ibagens/apps_overview/kbruch.png" id="kbruch">
+<img src="./ibagens/apps_overview/kgeography.png" id="kgeography">
+<img src="./ibagens/apps_overview/khangman.png" id="khangman">
+<img src="./ibagens/apps_overview/kig.png" id="kig">
+<img src="./ibagens/apps_overview/klettres.png" id="klettres">
+<img src="./ibagens/apps_overview/kmplot.png" id="kmplot">
+<img src="./ibagens/apps_overview/ktouch.png" id="ktouch">
+<img src="./ibagens/apps_overview/kturtle.png" id="kturtle">
+<img src="./ibagens/apps_overview/kwordquiz.png" id="kwordquiz">
+<img src="./ibagens/apps_overview/marble.png" id="marble">
+<img src="./ibagens/apps_overview/step.png" id="step">
+<img src="./ibagens/apps_overview/parley.png" id="parley">
+<img src="./ibagens/apps_overview/libreoffice-startcenter.png" id="libreoffice">
+<img src="./ibagens/apps_overview/libreoffice-calc.png" id="librecalc">
+<img src="./ibagens/apps_overview/libreoffice-draw.png" id="libredraw">
+<img src="./ibagens/apps_overview/libreoffice-impress.png" id="libreimpress">
+<img src="./ibagens/apps_overview/libreoffice-math.png" id="libremath">
+<img src="./ibagens/apps_overview/libreoffice-writer.png" id="librewriter">
+<img src="./ibagens/apps_overview/evince.png" id="evince">
+<img src="./ibagens/apps_overview/gnome-planner.png" id="planner">
+<img src="./ibagens/apps_overview/centralprogs.png" id="centralprogs">
+<img src="./ibagens/apps_overview/system-network.png" id="systemnetwork">
+<img src="./ibagens/apps_overview/gparted.png" id="gparted">
+<img src="./ibagens/apps_overview/aptoncd.png" id="aptoncd">
+<img src="./ibagens/apps_overview/gnome-remote-desktop.png" id="gnomedesktop">
+<img src="./ibagens/apps_overview/synaptic.png" id="synaptic">
+<img src="./ibagens/apps_overview/openjdk-6.png" id="openjdk6">
+<img src="./ibagens/apps_overview/xterm.png" id="xterm">
+<img src="./ibagens/apps_overview/gimp.png" id="gimp">
+<img src="./ibagens/apps_overview/pdfeditor.png" id="pdfeditor">
+<img src="./ibagens/apps_overview/shotwell.png" id="shotwelle">
+<img src="./ibagens/apps_overview/ibus.png" id="ibus">
+<img src="./ibagens/apps_overview/bomber.png" id="bomber">
+<img src="./ibagens/apps_overview/pidgin.png" id="pidgin">
+<img src="./ibagens/apps_overview/firefox.png" id="firefox">
+<img src="./ibagens/apps_overview/kapman.png" id="kapman">
+<img src="./ibagens/apps_overview/kblocks.png" id="kblocks">
+<img src="./ibagens/apps_overview/kbounce.png" id="kbounce">
+<img src="./ibagens/apps_overview/kbreakout.png" id="kbreakout">
+<img src="./ibagens/apps_overview/kgoldrunner.png" id="kgold">
+<img src="./ibagens/apps_overview/kolf.png" id="kolf">
+<img src="./ibagens/apps_overview/kollision.png" id="kollision">
+<img src="./ibagens/apps_overview/kdesnake.png" id="ksnake">
+<img src="./ibagens/apps_overview/kspaceduel.png" id="spaceduel">
+<img src="./ibagens/apps_overview/kbattleship.png" id="batalhanaval">
+<img src="./ibagens/apps_overview/katomic.png" id="katomic">
+<img src="./ibagens/apps_overview/ksirk.png" id="ksirk">
+<img src="./ibagens/apps_overview/killbots.png" id="killbots">
+<img src="./ibagens/apps_overview/kjumpingcube.png" id="jumpingcube">
+<img src="./ibagens/apps_overview/kmines.png" id="kmines">
+<img src="./ibagens/apps_overview/konquest.png" id="konquest">
+<img src="./ibagens/apps_overview/kajongg.png" id="kajongg">
+<img src="./ibagens/apps_overview/kblackbox.png" id="kblackbox">
+<img src="./ibagens/apps_overview/kigo.png" id="kigo">
+<img src="./ibagens/apps_overview/kiriki.png" id="kiriki">
+<img src="./ibagens/apps_overview/samegame.png" id="samegame">
+<img src="./ibagens/apps_overview/kmahjongg.png" id="kmahjongg">
+<img src="./ibagens/apps_overview/mahjongg.png" id="mahjongg">
+<img src="./ibagens/apps_overview/ksquares.png" id="ksquares">
+<img src="./ibagens/apps_overview/kreversi.png" id="kreversi">
+<img src="./ibagens/apps_overview/gnome-freecell.png" id="freecell">
+<img src="./ibagens/apps_overview/bovo.png" id="bovo">
+<img src="./ibagens/apps_overview/klickety.png" id="klickety">
+<img src="./ibagens/apps_overview/knetwalk.png" id="knetwalk">
+<img src="./ibagens/apps_overview/lskat.png" id="lskat">
+<img src="./ibagens/apps_overview/audacity.png" id="audacity">
+<img src="./ibagens/apps_overview/avidemux.png" id="avidemux">
+<img src="./ibagens/apps_overview/acidrip.png" id="acidrip">
+<img src="./ibagens/apps_overview/brasero.png" id="brasero">
+<img src="./ibagens/apps_overview/rhythmbox.png" id="rhythmbox">
+<img src="./ibagens/apps_overview/vlc.png" id="vlc">
+<img src="./ibagens/apps_overview/ubuntuone-installer.png" id="ubuntuone">
+<img src="./ibagens/apps_overview/kmail.png" id="kmail">
+<img src="./ibagens/apps_overview/bluetooth.png" id="bluetooth">
+<img src="./ibagens/apps_overview/transmission.png" id="transmission">
+<img src="./ibagens/apps_overview/kfourinline.png" id="fourinline">
+<img src="./ibagens/apps_overview/gwibber.png" id="gwibber">
+<img src="./ibagens/apps_overview/remmina.png" id="remmina">
+<img src="./ibagens/apps_overview/ksudoku.png" id="ksudoku">
+<img src="./ibagens/apps_overview/kubrick.png" id="kubrick">
+<img src="./ibagens/apps_overview/kdiamond.png" id="kdiamond">
+<img src="./ibagens/apps_overview/kpat.png" id="kpatience">
+<img src="./ibagens/apps_overview/palapeli.png" id="palapeli">
+<img src="./ibagens/apps_overview/mines.png" id="mines">
+<img src="./ibagens/apps_overview/klines.png" id="klines">
+<img src="./ibagens/apps_overview/usb-creator-gtk.png" id="usbcreator">
+<img src="./ibagens/apps_overview/checkbox.png" id="testesistema">
+<img src="./ibagens/apps_overview/nepomuk.png" id="nepomuk">
+<img src="./ibagens/apps_overview/session-properties.svg" id="sessionprops">
+<img src="./ibagens/apps_overview/ubiquity.png" id="ubiquity">
+<img src="./ibagens/apps_overview/network.png" id="network">
+<img src="./ibagens/apps_overview/alacarte.png" id="alacarte">
+<img src="./ibagens/apps_overview/ibus-engine.svg" id="enteclado">
+<img src="./ibagens/apps_overview/baobab.png" id="baobab">
+<img src="./ibagens/apps_overview/xfce-system-settings.png" id="settings">
+<img src="./ibagens/apps_overview/gnome-power-statistics.png" id="powerstats">
+<img src="./ibagens/apps_overview/utilities-system-monitor.png" id="system-monitor">
+<img src="./ibagens/apps_overview/ksirk-visuals.png" id="visuais-ksirk">
+<img src="./ibagens/apps_overview/kshisen.png" id="shisen-sho">
+<img src="./ibagens/apps_overview/gnome-sudoku.png" id="sudoku">
+<img src="./ibagens/apps_overview/gnome-aisleriot.png" id="paciencia">
+<img src="./ibagens/apps_overview/ktuberling.png" id="homibatata">
+<img src="./ibagens/apps_overview/ktron.png" id="snake-duel">
+<img src="./ibagens/apps_overview/gnome-sound-recorder.svg" id="gravadorsom">
+<img src="./ibagens/apps_overview/totem.png" id="reprodutfilmes">
diff --git a/le-tour/images/apps_overview/samegame.png b/le-tour/images/apps_overview/samegame.png
new file mode 100644
index 0000000000000000000000000000000000000000..a9ed73bef7c6f6cf2d5cf7730a8fa5d48813feb3
Binary files /dev/null and b/le-tour/images/apps_overview/samegame.png differ
diff --git a/le-tour/images/apps_overview/session-properties.svg b/le-tour/images/apps_overview/session-properties.svg
new file mode 100644
index 0000000000000000000000000000000000000000..cec2c39ed4ef751e259d07d3e1f7d8c9da55f6c1
--- /dev/null
+++ b/le-tour/images/apps_overview/session-properties.svg
@@ -0,0 +1,515 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48"
+   height="48"
+   id="svg7854"
+   sodipodi:version="0.32"
+   inkscape:version="0.44+devel"
+   version="1.0"
+   sodipodi:docname="session-properties.svg"
+   sodipodi:docbase="/home/jimmac/gfx/ximian/art/icons/control-center/scalable"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:modified="true">
+  <defs
+     id="defs7856">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5650">
+      <stop
+         style="stop-color:#d3d7cf;stop-opacity:1;"
+         offset="0"
+         id="stop5652" />
+      <stop
+         style="stop-color:#9ea795;stop-opacity:1"
+         offset="1"
+         id="stop5654" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5642">
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1;"
+         offset="0"
+         id="stop5644" />
+      <stop
+         style="stop-color:#c3c3bc;stop-opacity:1"
+         offset="1"
+         id="stop5646" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5634">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop5636" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop5638" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5598">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop5600" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop5602" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5716">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop5718" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop5720" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5700">
+      <stop
+         style="stop-color:#e4e4e4;stop-opacity:1;"
+         offset="0"
+         id="stop5702" />
+      <stop
+         id="stop5708"
+         offset="0.639386"
+         style="stop-color:#fefefe;stop-opacity:1" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0.79632628"
+         id="stop5710" />
+      <stop
+         style="stop-color:#949494;stop-opacity:1"
+         offset="1"
+         id="stop5704" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3832">
+      <stop
+         id="stop3834"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000" />
+      <stop
+         id="stop3836"
+         offset="1.0000000"
+         style="stop-color:#e0e0e0;stop-opacity:1.0000000" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4816">
+      <stop
+         id="stop4818"
+         offset="0.0000000"
+         style="stop-color:#204a87;stop-opacity:1.0000000" />
+      <stop
+         id="stop4820"
+         offset="1.0000000"
+         style="stop-color:#204a87;stop-opacity:0.0000000" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         id="stop5050"
+         offset="0"
+         style="stop-color:black;stop-opacity:0;" />
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0.5"
+         id="stop5056" />
+      <stop
+         id="stop5052"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5060"
+       inkscape:collect="always">
+      <stop
+         id="stop5062"
+         offset="0"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop5064"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient5664"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-6.6526975e-2,0,0,3.5014969e-2,47.812816,25.161837)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient5667"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(6.6526975e-2,0,0,3.5014969e-2,-0.2505064,25.161837)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5048"
+       id="linearGradient5670"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(6.6526975e-2,0,0,3.5014969e-2,-0.2635996,25.161837)"
+       x1="302.85715"
+       y1="366.64789"
+       x2="302.85715"
+       y2="609.50507" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3832"
+       id="linearGradient5682"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.367592,0,0,1.259127,-45.521751,9.5621318)"
+       x1="17.880680"
+       y1="11.072588"
+       x2="17.880680"
+       y2="21.767578" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4816"
+       id="linearGradient5684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.325819,0,0,1.19936,-44.590631,11.169522)"
+       x1="13.050564"
+       y1="11.353518"
+       x2="13.050564"
+       y2="5.6173568" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3832"
+       id="linearGradient5694"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.367592,0,0,1.259127,-45.521751,9.5621318)"
+       x1="17.880680"
+       y1="11.072588"
+       x2="17.880680"
+       y2="21.767578" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4816"
+       id="linearGradient5696"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.325819,0,0,1.19936,-44.590631,11.169522)"
+       x1="13.050564"
+       y1="11.353518"
+       x2="13.050564"
+       y2="5.6173568" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5700"
+       id="linearGradient5728"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.5,0)"
+       x1="24"
+       y1="23"
+       x2="45.505004"
+       y2="23" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5716"
+       id="linearGradient5730"
+       gradientUnits="userSpaceOnUse"
+       x1="40.745819"
+       y1="23"
+       x2="44.005268"
+       y2="23" />
+    <filter
+       inkscape:collect="always"
+       id="filter5786">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.62861987"
+         id="feGaussianBlur5788" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5598"
+       id="linearGradient5604"
+       x1="25.627417"
+       y1="8"
+       x2="25.627417"
+       y2="4.7617435"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       x="-0.019480519"
+       width="1.038961"
+       y="-0.14285714"
+       height="1.2857143"
+       id="filter5628">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.42857143"
+         id="feGaussianBlur5630" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5634"
+       id="linearGradient5640"
+       x1="25.313259"
+       y1="42.656792"
+       x2="25.313261"
+       y2="10.129107"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5642"
+       id="linearGradient5648"
+       x1="26.29347"
+       y1="7.3125"
+       x2="26.232994"
+       y2="3.5357027"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5650"
+       id="linearGradient5656"
+       x1="26.29347"
+       y1="7.3125"
+       x2="26.232994"
+       y2="3.5357027"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#e0e0e0"
+     borderopacity="1"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4"
+     inkscape:cx="20.372005"
+     inkscape:cy="14.768475"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     width="48px"
+     height="48px"
+     inkscape:showpageshadow="false"
+     inkscape:window-width="1102"
+     inkscape:window-height="958"
+     inkscape:window-x="2117"
+     inkscape:window-y="82"
+     showgrid="false" />
+  <metadata
+     id="metadata7859">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Jakub Steiner</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:source>http://jimmac.musichall.cz</dc:source>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+        <dc:title>Gnome Session Properties</dc:title>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Reproduction" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Distribution" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Notice" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/ShareAlike" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/SourceCode" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       id="g5672"
+       style="opacity:0.53714286">
+      <rect
+         y="38"
+         x="7.7196383"
+         height="8.5036354"
+         width="32.123024"
+         id="rect4173"
+         style="opacity:1;color:#000000;fill:url(#linearGradient5670);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path5058"
+         d="M 39.842663,38.000295 C 39.842663,38.000295 39.842663,46.503461 39.842663,46.503461 C 43.268636,46.519469 48.125002,44.598333 48.125,42.25133 C 48.125,39.904328 44.30187,38.000295 39.842663,38.000295 z "
+         style="opacity:1;color:#000000;fill:url(#radialGradient5667);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <path
+         style="opacity:1;color:#000000;fill:url(#radialGradient5664);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 7.7196385,38.000295 C 7.7196385,38.000295 7.7196385,46.503461 7.7196385,46.503461 C 4.2936621,46.519469 -0.56270146,44.598333 -0.56270146,42.25133 C -0.56270146,39.904328 3.2604286,38.000295 7.7196385,38.000295 z "
+         id="path5018"
+         sodipodi:nodetypes="cccc" />
+    </g>
+    <rect
+       style="opacity:1;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect4585"
+       width="42.848347"
+       height="39.870949"
+       x="2.6516504"
+       y="3.6290491"
+       rx="2.2839575"
+       ry="2.273742" />
+    <rect
+       ry="2.2922091"
+       rx="2.2922091"
+       y="4.3838844"
+       x="2.5"
+       height="5"
+       width="43"
+       id="rect5606"
+       style="opacity:0.28;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;filter:url(#filter5628)" />
+    <rect
+       style="opacity:1;color:#000000;fill:url(#linearGradient5648);fill-opacity:1.0;fill-rule:evenodd;stroke:url(#linearGradient5656);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5556"
+       width="43"
+       height="5"
+       x="2.5"
+       y="3.5"
+       rx="2.2922091"
+       ry="2.2922091" />
+    <rect
+       ry="1.2758038"
+       rx="1.2758038"
+       y="4.6290464"
+       x="3.6516466"
+       height="37.870953"
+       width="40.848354"
+       id="rect5632"
+       style="opacity:0.52571429;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5640);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <g
+       id="g5677"
+       transform="translate(43.499997,-2.124989)">
+      <rect
+         id="rect3818"
+         style="color:#000000;fill:url(#linearGradient5682);fill-opacity:1;fill-rule:evenodd;stroke:#8d8d8d;stroke-width:1.00000095;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="19.625"
+         x="-37.999996"
+         ry="0.53949153"
+         rx="0.54073501"
+         height="19.999989"
+         width="22.000008" />
+      <rect
+         id="rect3820"
+         style="color:#000000;fill:url(#linearGradient5684);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="21.125"
+         x="-36.499996"
+         ry="0.095258936"
+         rx="0.10055112"
+         height="3"
+         width="19" />
+      <rect
+         id="rect4962"
+         style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000143;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.47878789;visibility:visible;display:inline;overflow:visible"
+         y="20.624994"
+         x="-37"
+         ry="0.16447251"
+         rx="0.188051"
+         height="18.000002"
+         width="20.000011" />
+    </g>
+    <g
+       transform="translate(53.499997,-7.124989)"
+       id="g5686">
+      <rect
+         width="22.000008"
+         height="19.999989"
+         rx="0.54073501"
+         ry="0.53949153"
+         x="-37.999996"
+         y="19.625"
+         style="color:#000000;fill:url(#linearGradient5694);fill-opacity:1;fill-rule:evenodd;stroke:#8d8d8d;stroke-width:1.00000095;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect5688" />
+      <rect
+         width="19"
+         height="3"
+         rx="0.10055112"
+         ry="0.095258936"
+         x="-36.499996"
+         y="21.125"
+         style="color:#000000;fill:url(#linearGradient5696);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect5690" />
+      <rect
+         width="20.000011"
+         height="18.000002"
+         rx="0.188051"
+         ry="0.16447251"
+         x="-37"
+         y="20.624994"
+         style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000143;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.47878789;visibility:visible;display:inline;overflow:visible"
+         id="rect5692" />
+    </g>
+    <g
+       id="g5724"
+       transform="translate(0,8)">
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:0.31428571;filter:url(#filter5786)"
+         d="M 10.5,25.474874 L 20.5,15.474874 L 20.5,21.005204 L 40.5,21.005204 C 44.35508,21.005204 45.58678,20.95144 45.5,23 L 45.5,33 C 45.5,33 43.070425,29.988738 40.625,29.988738 L 20.5,29.988738 L 20.5,35.474874 L 10.5,25.474874 z "
+         id="path5738"
+         sodipodi:nodetypes="cccccccccc" />
+      <path
+         sodipodi:nodetypes="cccccccccc"
+         id="path5698"
+         d="M 10.5,23 L 20.5,13 L 20.5,18.53033 L 40.5,18.53033 C 44.35508,18.53033 45.58678,20.95144 45.5,23 L 45.5,33 C 45.5,33 45.096959,27.513864 40.625,27.513864 L 20.5,27.513864 L 20.5,33 L 10.5,23 z "
+         style="fill:url(#linearGradient5728);fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         d="M 19.5625,15.25 L 11.8125,23 L 19.5625,30.75 L 19.5625,27.5 C 19.55998,27.250596 19.657943,27.010672 19.834307,26.834307 C 20.010672,26.657943 20.250596,26.55998 20.5,26.5625 L 40.625,26.5625 C 42.489029,26.5625 43.674657,27.497362 44.5625,28.5625 L 44.5625,23 C 44.562325,22.989584 44.562325,22.979166 44.5625,22.96875 C 44.597378,22.145414 44.36819,21.273844 43.78125,20.625 C 43.19431,19.976156 42.233327,19.46875 40.5,19.46875 L 20.5,19.46875 C 20.250596,19.47127 20.010672,19.373307 19.834307,19.196943 C 19.657943,19.020578 19.55998,18.780654 19.5625,18.53125 L 19.5625,15.25 z "
+         inkscape:href="#path5698"
+         id="path5712"
+         style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5730);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         xlink:href="#path5698"
+         inkscape:original="M 20.5 13 L 10.5 23 L 20.5 33 L 20.5 27.5 L 40.625 27.5 C 45.096959 27.5 45.5 33 45.5 33 L 45.5 23 C 45.58678 20.95144 44.35508 18.531249 40.5 18.53125 L 20.5 18.53125 L 20.5 13 z "
+         inkscape:radius="-0.92807764"
+         sodipodi:type="inkscape:offset" />
+    </g>
+    <rect
+       ry="1.1278381"
+       rx="1.1278381"
+       y="4.5"
+       x="3.5"
+       height="3"
+       width="41"
+       id="rect4627"
+       style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5604);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+  </g>
+</svg>
diff --git a/le-tour/images/apps_overview/shotwell.png b/le-tour/images/apps_overview/shotwell.png
new file mode 100644
index 0000000000000000000000000000000000000000..fcd02a901a93c318555d05e030fbc53d5273bd19
Binary files /dev/null and b/le-tour/images/apps_overview/shotwell.png differ
diff --git a/le-tour/images/apps_overview/step.png b/le-tour/images/apps_overview/step.png
new file mode 100644
index 0000000000000000000000000000000000000000..c4eaf993cbe35dac8b080365a9e25d43826b270a
Binary files /dev/null and b/le-tour/images/apps_overview/step.png differ
diff --git a/le-tour/images/apps_overview/synaptic.png b/le-tour/images/apps_overview/synaptic.png
new file mode 100644
index 0000000000000000000000000000000000000000..b8a4740ae4b2f35a02c47d0b64c6ea4335b09d86
Binary files /dev/null and b/le-tour/images/apps_overview/synaptic.png differ
diff --git a/le-tour/images/apps_overview/system-network.png b/le-tour/images/apps_overview/system-network.png
new file mode 100644
index 0000000000000000000000000000000000000000..48ce96c198fa96c25d07a3d184f7d536d090cf8f
Binary files /dev/null and b/le-tour/images/apps_overview/system-network.png differ
diff --git a/le-tour/images/apps_overview/teoriagrafos.png b/le-tour/images/apps_overview/teoriagrafos.png
new file mode 100644
index 0000000000000000000000000000000000000000..c45955fef5d245215f2269006bd2bd4636454e2c
Binary files /dev/null and b/le-tour/images/apps_overview/teoriagrafos.png differ
diff --git a/le-tour/images/apps_overview/text-editor.png b/le-tour/images/apps_overview/text-editor.png
new file mode 100644
index 0000000000000000000000000000000000000000..4302d099ef98905281f0e64d3d236c0892645c02
Binary files /dev/null and b/le-tour/images/apps_overview/text-editor.png differ
diff --git a/le-tour/images/apps_overview/totem.png b/le-tour/images/apps_overview/totem.png
new file mode 100644
index 0000000000000000000000000000000000000000..0877689d650df7e15753b039663b34dc05b34135
Binary files /dev/null and b/le-tour/images/apps_overview/totem.png differ
diff --git a/le-tour/images/apps_overview/transmission.png b/le-tour/images/apps_overview/transmission.png
new file mode 100644
index 0000000000000000000000000000000000000000..0f8a1e8c3506e949285f9db548dd317292e1d624
Binary files /dev/null and b/le-tour/images/apps_overview/transmission.png differ
diff --git a/le-tour/images/apps_overview/tuxmath.png b/le-tour/images/apps_overview/tuxmath.png
new file mode 100644
index 0000000000000000000000000000000000000000..e4afc1e1c2581e32efdd9dd3bf5bcbdcebd30067
Binary files /dev/null and b/le-tour/images/apps_overview/tuxmath.png differ
diff --git a/le-tour/images/apps_overview/tuxpaint.png b/le-tour/images/apps_overview/tuxpaint.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7738d37f559dab42e03bfb0d6cb3b8e1d1d6121
Binary files /dev/null and b/le-tour/images/apps_overview/tuxpaint.png differ
diff --git a/le-tour/images/apps_overview/ubiquity.png b/le-tour/images/apps_overview/ubiquity.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2af09ca1517cc4265a43b705188918a11983416
Binary files /dev/null and b/le-tour/images/apps_overview/ubiquity.png differ
diff --git a/le-tour/images/apps_overview/ubuntuone-installer.png b/le-tour/images/apps_overview/ubuntuone-installer.png
new file mode 100644
index 0000000000000000000000000000000000000000..024f91baa68eba6faf5c64c0b1e1142a50008d44
Binary files /dev/null and b/le-tour/images/apps_overview/ubuntuone-installer.png differ
diff --git a/le-tour/images/apps_overview/usb-creator-gtk.png b/le-tour/images/apps_overview/usb-creator-gtk.png
new file mode 100644
index 0000000000000000000000000000000000000000..840fd67e17a9d5ae41ca5d565d6420b2950d4807
Binary files /dev/null and b/le-tour/images/apps_overview/usb-creator-gtk.png differ
diff --git a/le-tour/images/apps_overview/utilities-system-monitor.png b/le-tour/images/apps_overview/utilities-system-monitor.png
new file mode 100644
index 0000000000000000000000000000000000000000..4abff16c4ec7698aadf191dd8eb4f89ed536a420
Binary files /dev/null and b/le-tour/images/apps_overview/utilities-system-monitor.png differ
diff --git a/le-tour/images/apps_overview/vlc.png b/le-tour/images/apps_overview/vlc.png
new file mode 100644
index 0000000000000000000000000000000000000000..cebd5e0cca8b9583f6320895fe455711ac34e7c6
Binary files /dev/null and b/le-tour/images/apps_overview/vlc.png differ
diff --git a/le-tour/images/apps_overview/xdiagnose.png b/le-tour/images/apps_overview/xdiagnose.png
new file mode 100644
index 0000000000000000000000000000000000000000..c454d6069361c18d2bcfee3395cfc15dc61c6adf
Binary files /dev/null and b/le-tour/images/apps_overview/xdiagnose.png differ
diff --git a/le-tour/images/apps_overview/xfce-system-settings.png b/le-tour/images/apps_overview/xfce-system-settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d58ada8a6c88a2a73c483fc4bc38a2536436368
Binary files /dev/null and b/le-tour/images/apps_overview/xfce-system-settings.png differ
diff --git a/le-tour/images/apps_overview/xournal.png b/le-tour/images/apps_overview/xournal.png
new file mode 100644
index 0000000000000000000000000000000000000000..342c3bb3c88b7b3ab0eeabb055551cc236c1b085
Binary files /dev/null and b/le-tour/images/apps_overview/xournal.png differ
diff --git a/le-tour/images/apps_overview/xterm.png b/le-tour/images/apps_overview/xterm.png
new file mode 100644
index 0000000000000000000000000000000000000000..3018a91565b0a619fc745681d93042c25f4bb425
Binary files /dev/null and b/le-tour/images/apps_overview/xterm.png differ
diff --git a/le-tour/images/backgrounds/Delicate_Petals_by_lefthandgergo.jpg b/le-tour/images/backgrounds/Delicate_Petals_by_lefthandgergo.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a1dfcf5da24b0e4d55803c7677bf7f3bb0568364
Binary files /dev/null and b/le-tour/images/backgrounds/Delicate_Petals_by_lefthandgergo.jpg differ
diff --git a/le-tour/images/backgrounds/Early_Blossom_by_Dh0r.jpg b/le-tour/images/backgrounds/Early_Blossom_by_Dh0r.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7e87241905e19830b5107522f26718bb432ef785
Binary files /dev/null and b/le-tour/images/backgrounds/Early_Blossom_by_Dh0r.jpg differ
diff --git a/le-tour/images/backgrounds/Flocking_by_noombox.jpg b/le-tour/images/backgrounds/Flocking_by_noombox.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5ac0f035f840a2fe04f7b24d653519fc03bb41b4
Binary files /dev/null and b/le-tour/images/backgrounds/Flocking_by_noombox.jpg differ
diff --git "a/le-tour/images/backgrounds/Floorboards_by_Dawid_Huczy\305\204ski.jpg" "b/le-tour/images/backgrounds/Floorboards_by_Dawid_Huczy\305\204ski.jpg"
new file mode 100644
index 0000000000000000000000000000000000000000..6775dda582fee1e69d2aa2c965627625d3ce3929
Binary files /dev/null and "b/le-tour/images/backgrounds/Floorboards_by_Dawid_Huczy\305\204ski.jpg" differ
diff --git a/le-tour/images/backgrounds/Golden_Bloom_by_Twinmama.jpg b/le-tour/images/backgrounds/Golden_Bloom_by_Twinmama.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..364f068e2c9bac04621112e3b1d6585276f7f67c
Binary files /dev/null and b/le-tour/images/backgrounds/Golden_Bloom_by_Twinmama.jpg differ
diff --git a/le-tour/images/backgrounds/LE5.jpg b/le-tour/images/backgrounds/LE5.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5cbc3349ba1fddf56e04e0a7273b8f1b914d3275
Binary files /dev/null and b/le-tour/images/backgrounds/LE5.jpg differ
diff --git a/le-tour/images/backgrounds/LE5.png b/le-tour/images/backgrounds/LE5.png
new file mode 100644
index 0000000000000000000000000000000000000000..bec7f94244c646826c4ce7e44e7a2ed9ec01da26
Binary files /dev/null and b/le-tour/images/backgrounds/LE5.png differ
diff --git "a/le-tour/images/backgrounds/London_Eye_From_Beneath_by_Fernando_Garc\303\255a.jpg" "b/le-tour/images/backgrounds/London_Eye_From_Beneath_by_Fernando_Garc\303\255a.jpg"
new file mode 100644
index 0000000000000000000000000000000000000000..20e61ead3535871863c82c5f621047a5205d37b3
Binary files /dev/null and "b/le-tour/images/backgrounds/London_Eye_From_Beneath_by_Fernando_Garc\303\255a.jpg" differ
diff --git a/le-tour/images/backgrounds/Morning_Dew_by_Lars_Clausen.jpg b/le-tour/images/backgrounds/Morning_Dew_by_Lars_Clausen.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4168e1b9ebffd4c02129486095032194a41dbfd0
Binary files /dev/null and b/le-tour/images/backgrounds/Morning_Dew_by_Lars_Clausen.jpg differ
diff --git a/le-tour/images/backgrounds/Murales_by_Jan_Bencini.jpg b/le-tour/images/backgrounds/Murales_by_Jan_Bencini.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..cd8158e7b956e1d706ebb42cf10415eb2b827b49
Binary files /dev/null and b/le-tour/images/backgrounds/Murales_by_Jan_Bencini.jpg differ
diff --git a/le-tour/images/backgrounds/Precise_Pangolin_by_Vlad_Gerasimov.jpg b/le-tour/images/backgrounds/Precise_Pangolin_by_Vlad_Gerasimov.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..eac3ce2b4adbd85d73a5ece7823ee0bfe26ca9d9
Binary files /dev/null and b/le-tour/images/backgrounds/Precise_Pangolin_by_Vlad_Gerasimov.jpg differ
diff --git a/le-tour/images/backgrounds/Speaker_Weave_by_Phil_Jackson.jpg b/le-tour/images/backgrounds/Speaker_Weave_by_Phil_Jackson.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0330b9b02b44c539ebd3ecc98523aa09bcac0c0e
Binary files /dev/null and b/le-tour/images/backgrounds/Speaker_Weave_by_Phil_Jackson.jpg differ
diff --git a/le-tour/images/backgrounds/The_Forbidden_City_by_Daniel_Mathis.jpg b/le-tour/images/backgrounds/The_Forbidden_City_by_Daniel_Mathis.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e22802bca47fdc36f9a7d18d7aaaee8cb55a1db3
Binary files /dev/null and b/le-tour/images/backgrounds/The_Forbidden_City_by_Daniel_Mathis.jpg differ
diff --git "a/le-tour/images/backgrounds/Tie_My_Boat_by_Ray_Garc\303\255a.jpg" "b/le-tour/images/backgrounds/Tie_My_Boat_by_Ray_Garc\303\255a.jpg"
new file mode 100644
index 0000000000000000000000000000000000000000..d86decbf4086cf2da6569bce41b8db707325e533
Binary files /dev/null and "b/le-tour/images/backgrounds/Tie_My_Boat_by_Ray_Garc\303\255a.jpg" differ
diff --git a/le-tour/images/backgrounds/Twilight_Frost_by_Phil_Jackson.jpg b/le-tour/images/backgrounds/Twilight_Frost_by_Phil_Jackson.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d943a75916594a73571964c5eeb87069fe713b4c
Binary files /dev/null and b/le-tour/images/backgrounds/Twilight_Frost_by_Phil_Jackson.jpg differ
diff --git a/le-tour/images/backgrounds/Winter_Morning_by_Shannon_Lucas.jpg b/le-tour/images/backgrounds/Winter_Morning_by_Shannon_Lucas.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d3b417ea7a4f6a27fb09012e6fdae834da0e14e9
Binary files /dev/null and b/le-tour/images/backgrounds/Winter_Morning_by_Shannon_Lucas.jpg differ
diff --git a/le-tour/images/backgrounds/contest/precise.xml b/le-tour/images/backgrounds/contest/precise.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ac745b98c8b6c643132e75170f8f431e6cd53c48
--- /dev/null
+++ b/le-tour/images/backgrounds/contest/precise.xml
@@ -0,0 +1,137 @@
+<background>
+  <starttime>
+    <year>2009</year>
+    <month>08</month>
+    <day>04</day>
+    <hour>00</hour>
+    <minute>00</minute>
+    <second>00</second>
+  </starttime>
+<!-- This animation will start at midnight. -->
+  <static>
+    <duration>1795.0</duration>
+    <file>/usr/share/backgrounds/Twilight_Frost_by_Phil_Jackson.jpg</file>
+  </static>
+  <transition>
+    <duration>5.0</duration>
+    <from>/usr/share/backgrounds/Twilight_Frost_by_Phil_Jackson.jpg</from>
+    <to>/usr/share/backgrounds/Precise_Pangolin_by_Vlad_Gerasimov.jpg</to>
+  </transition>
+  <static>
+    <duration>1795.0</duration>
+    <file>/usr/share/backgrounds/Precise_Pangolin_by_Vlad_Gerasimov.jpg</file>
+  </static>
+  <transition>
+    <duration>5.0</duration>
+    <from>/usr/share/backgrounds/Precise_Pangolin_by_Vlad_Gerasimov.jpg</from>
+    <to>/usr/share/backgrounds/The_Forbidden_City_by_Daniel_Mathis.jpg</to>
+  </transition>
+  <static>
+    <duration>1795.0</duration>
+    <file>/usr/share/backgrounds/The_Forbidden_City_by_Daniel_Mathis.jpg</file>
+  </static>
+  <transition>
+    <duration>5.0</duration>
+    <from>/usr/share/backgrounds/The_Forbidden_City_by_Daniel_Mathis.jpg</from>
+    <to>/usr/share/backgrounds/Winter_Morning_by_Shannon_Lucas.jpg</to>
+  </transition>
+  <static>
+    <duration>1795.0</duration>
+    <file>/usr/share/backgrounds/Winter_Morning_by_Shannon_Lucas.jpg</file>
+  </static>
+  <transition>
+    <duration>5.0</duration>
+    <from>/usr/share/backgrounds/Winter_Morning_by_Shannon_Lucas.jpg</from>
+    <to>/usr/share/backgrounds/Morning_Dew_by_Lars_Clausen.jpg</to>
+  </transition>
+  <static>
+    <duration>1795.0</duration>
+    <file>/usr/share/backgrounds/Morning_Dew_by_Lars_Clausen.jpg</file>
+  </static>
+  <transition>
+    <duration>5.0</duration>
+    <from>/usr/share/backgrounds/Morning_Dew_by_Lars_Clausen.jpg</from>
+    <to>/usr/share/backgrounds/Early_Blossom_by_Dh0r.jpg</to>
+  </transition>
+  <static>
+    <duration>1795.0</duration>
+    <file>/usr/share/backgrounds/Early_Blossom_by_Dh0r.jpg</file>
+  </static>
+  <transition>
+    <duration>5.0</duration>
+    <from>/usr/share/backgrounds/Early_Blossom_by_Dh0r.jpg</from>
+    <to>/usr/share/backgrounds/Delicate_Petals_by_lefthandgergo.jpg</to>
+  </transition>
+  <static>
+    <duration>1795.0</duration>
+    <file>/usr/share/backgrounds/Delicate_Petals_by_lefthandgergo.jpg</file>
+  </static>
+  <transition>
+    <duration>5.0</duration>
+    <from>/usr/share/backgrounds/Delicate_Petals_by_lefthandgergo.jpg</from>
+    <to>/usr/share/backgrounds/Golden_Bloom_by_Twinmama.jpg</to>
+  </transition>
+  <static>
+    <duration>1795.0</duration>
+    <file>/usr/share/backgrounds/Golden_Bloom_by_Twinmama.jpg</file>
+  </static>
+  <transition>
+    <duration>5.0</duration>
+    <from>/usr/share/backgrounds/Golden_Bloom_by_Twinmama.jpg</from>
+    <to>/usr/share/backgrounds/Tie_My_Boat_by_Ray_García.jpg</to>
+  </transition>
+  <static>
+    <duration>1795.0</duration>
+    <file>/usr/share/backgrounds/Tie_My_Boat_by_Ray_García.jpg</file>
+  </static>
+  <transition>
+    <duration>5.0</duration>
+    <from>/usr/share/backgrounds/Tie_My_Boat_by_Ray_García.jpg</from>
+    <to>/usr/share/backgrounds/Murales_by_Jan_Bencini.jpg</to>
+  </transition>
+  <static>
+    <duration>1795.0</duration>
+    <file>/usr/share/backgrounds/Murales_by_Jan_Bencini.jpg</file>
+  </static>
+  <transition>
+    <duration>5.0</duration>
+    <from>/usr/share/backgrounds/Murales_by_Jan_Bencini.jpg</from>
+    <to>/usr/share/backgrounds/Flocking_by_noombox.jpg</to>
+  </transition>
+  <static>
+    <duration>1795.0</duration>
+    <file>/usr/share/backgrounds/Flocking_by_noombox.jpg</file>
+  </static>
+  <transition>
+    <duration>5.0</duration>
+    <from>/usr/share/backgrounds/Flocking_by_noombox.jpg</from>
+    <to>/usr/share/backgrounds/London_Eye_From_Beneath_by_Fernando_García.jpg</to>
+  </transition>
+  <static>
+    <duration>1795.0</duration>
+    <file>/usr/share/backgrounds/London_Eye_From_Beneath_by_Fernando_García.jpg</file>
+  </static>
+  <transition>
+    <duration>5.0</duration>
+    <from>/usr/share/backgrounds/London_Eye_From_Beneath_by_Fernando_García.jpg</from>
+    <to>/usr/share/backgrounds/Floorboards_by_Dawid_Huczyński.jpg</to>
+  </transition>
+  <static>
+    <duration>1795.0</duration>
+    <file>/usr/share/backgrounds/Floorboards_by_Dawid_Huczyński.jpg</file>
+  </static>
+  <transition>
+    <duration>5.0</duration>
+    <from>/usr/share/backgrounds/Floorboards_by_Dawid_Huczyński.jpg</from>
+    <to>/usr/share/backgrounds/Speaker_Weave_by_Phil_Jackson.jpg</to>
+  </transition>
+  <static>
+    <duration>1795.0</duration>
+    <file>/usr/share/backgrounds/Speaker_Weave_by_Phil_Jackson.jpg</file>
+  </static>
+  <transition>
+    <duration>5.0</duration>
+    <from>/usr/share/backgrounds/Speaker_Weave_by_Phil_Jackson.jpg</from>
+    <to>/usr/share/backgrounds/Twilight_Frost_by_Phil_Jackson.jpg</to>
+  </transition>
+</background>
diff --git a/le-tour/images/backgrounds/lacador.jpg b/le-tour/images/backgrounds/lacador.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..42d62a7a50ab5a8a9c0e2de145d21c8995f8f7e3
Binary files /dev/null and b/le-tour/images/backgrounds/lacador.jpg differ
diff --git a/le-tour/images/backgrounds/le5-login.png b/le-tour/images/backgrounds/le5-login.png
new file mode 100644
index 0000000000000000000000000000000000000000..65bf31a9df1f206a06a63c6e4867238ad0781281
Binary files /dev/null and b/le-tour/images/backgrounds/le5-login.png differ
diff --git a/le-tour/images/backgrounds/wallpaperbeautiful.jpg b/le-tour/images/backgrounds/wallpaperbeautiful.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..98650495dd8a65994de4afad1eac42b9664b0cd0
Binary files /dev/null and b/le-tour/images/backgrounds/wallpaperbeautiful.jpg differ
diff --git a/le-tour/images/backgrounds/warty-final-ubuntu.png b/le-tour/images/backgrounds/warty-final-ubuntu.png
new file mode 100644
index 0000000000000000000000000000000000000000..b0284988824b2288c30f15f60e167043cc095964
Binary files /dev/null and b/le-tour/images/backgrounds/warty-final-ubuntu.png differ
diff --git a/le-tour/images/browser/corpo.png b/le-tour/images/browser/corpo.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca3a9ec43b86a8ed14757bcd0876986001b600bf
Binary files /dev/null and b/le-tour/images/browser/corpo.png differ
diff --git a/le-tour/images/browser/dompub1.png b/le-tour/images/browser/dompub1.png
new file mode 100644
index 0000000000000000000000000000000000000000..c1a6bdda9d37cb9eedb4e9c543648840494580cc
Binary files /dev/null and b/le-tour/images/browser/dompub1.png differ
diff --git a/le-tour/images/browser/dompub2.png b/le-tour/images/browser/dompub2.png
new file mode 100644
index 0000000000000000000000000000000000000000..f57cb0d6885619a21960bdf0dad9e8eea8bd343a
Binary files /dev/null and b/le-tour/images/browser/dompub2.png differ
diff --git a/le-tour/images/browser/firefox1.png b/le-tour/images/browser/firefox1.png
new file mode 100644
index 0000000000000000000000000000000000000000..16a20f44bf55ec4d2d0810e435b3ea131c3a5fa9
Binary files /dev/null and b/le-tour/images/browser/firefox1.png differ
diff --git a/le-tour/images/browser/firefox2.png b/le-tour/images/browser/firefox2.png
new file mode 100644
index 0000000000000000000000000000000000000000..dc982ef4574f001b48d40292fa773896d50b7303
Binary files /dev/null and b/le-tour/images/browser/firefox2.png differ
diff --git a/le-tour/images/browser/gtk-close.png b/le-tour/images/browser/gtk-close.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea511276627e9bdcafff414a5bf3796739e85b81
Binary files /dev/null and b/le-tour/images/browser/gtk-close.png differ
diff --git a/le-tour/images/browser/mais.png b/le-tour/images/browser/mais.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a1b86006f5bae362025c913fde934d2bb6970cf
Binary files /dev/null and b/le-tour/images/browser/mais.png differ
diff --git a/le-tour/images/browser/objedu1.png b/le-tour/images/browser/objedu1.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff7257df8ae6a41b137ae73bde6e38b7ca3daa27
Binary files /dev/null and b/le-tour/images/browser/objedu1.png differ
diff --git a/le-tour/images/browser/objedu2.png b/le-tour/images/browser/objedu2.png
new file mode 100644
index 0000000000000000000000000000000000000000..09801b35874d4555f2723319077fc0ec222b3fbb
Binary files /dev/null and b/le-tour/images/browser/objedu2.png differ
diff --git a/le-tour/images/browser/porprof1.png b/le-tour/images/browser/porprof1.png
new file mode 100644
index 0000000000000000000000000000000000000000..2fc9f41e1911c658820d67572da55d96008f0761
Binary files /dev/null and b/le-tour/images/browser/porprof1.png differ
diff --git a/le-tour/images/browser/porprof2.png b/le-tour/images/browser/porprof2.png
new file mode 100644
index 0000000000000000000000000000000000000000..600c12afa32485ae29aaf85f0d455a9d46d96cb3
Binary files /dev/null and b/le-tour/images/browser/porprof2.png differ
diff --git a/le-tour/images/browser/tvesc1.png b/le-tour/images/browser/tvesc1.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c3fbfc492faecb7f4cdac79416d67e311ec7b3d
Binary files /dev/null and b/le-tour/images/browser/tvesc1.png differ
diff --git a/le-tour/images/browser/tvesc2.png b/le-tour/images/browser/tvesc2.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c41ba0030290ed063297d573c6ebb3be7cd5b6b
Binary files /dev/null and b/le-tour/images/browser/tvesc2.png differ
diff --git a/le-tour/images/browserAbas/dompub.png b/le-tour/images/browserAbas/dompub.png
new file mode 100644
index 0000000000000000000000000000000000000000..16ad1a4ee1981ce71b380b7403d748cffdf958e2
Binary files /dev/null and b/le-tour/images/browserAbas/dompub.png differ
diff --git a/le-tour/images/browserAbas/firefox.png b/le-tour/images/browserAbas/firefox.png
new file mode 100644
index 0000000000000000000000000000000000000000..a0d43b09e553301d09e1ce5f6dfaae77a3972f64
Binary files /dev/null and b/le-tour/images/browserAbas/firefox.png differ
diff --git a/le-tour/images/browserAbas/objedu.png b/le-tour/images/browserAbas/objedu.png
new file mode 100644
index 0000000000000000000000000000000000000000..980d09f4b4f70f507228cf772faddff881374065
Binary files /dev/null and b/le-tour/images/browserAbas/objedu.png differ
diff --git a/le-tour/images/browserAbas/porprof.png b/le-tour/images/browserAbas/porprof.png
new file mode 100644
index 0000000000000000000000000000000000000000..ab36656a25a2e4913462448c19d512a5cebbadfe
Binary files /dev/null and b/le-tour/images/browserAbas/porprof.png differ
diff --git a/le-tour/images/browserAbas/tvesc.png b/le-tour/images/browserAbas/tvesc.png
new file mode 100644
index 0000000000000000000000000000000000000000..12de7583cb0cd977f7197f3cc71737ad032537a9
Binary files /dev/null and b/le-tour/images/browserAbas/tvesc.png differ
diff --git a/le-tour/images/icons/Esqueleto_LE5_0506.cdr b/le-tour/images/icons/Esqueleto_LE5_0506.cdr
new file mode 100644
index 0000000000000000000000000000000000000000..8cb8fe7f62a3c50936d0ecdf4719920a6e7e6eea
Binary files /dev/null and b/le-tour/images/icons/Esqueleto_LE5_0506.cdr differ
diff --git a/le-tour/images/icons/LE5-Edubar-Dir.png b/le-tour/images/icons/LE5-Edubar-Dir.png
new file mode 100644
index 0000000000000000000000000000000000000000..784ec1f7e0e4ec606696fac262ed4782e6be5227
Binary files /dev/null and b/le-tour/images/icons/LE5-Edubar-Dir.png differ
diff --git a/le-tour/images/icons/LE5-Edubar-Firefox.png b/le-tour/images/icons/LE5-Edubar-Firefox.png
new file mode 100644
index 0000000000000000000000000000000000000000..63f84c01ba1e5d5cb4582828bf3be39f8d5b02ad
Binary files /dev/null and b/le-tour/images/icons/LE5-Edubar-Firefox.png differ
diff --git a/le-tour/images/icons/LE5-Edubar-Libre.png b/le-tour/images/icons/LE5-Edubar-Libre.png
new file mode 100644
index 0000000000000000000000000000000000000000..95e4cedaa3374d745847b14891749c8463d98992
Binary files /dev/null and b/le-tour/images/icons/LE5-Edubar-Libre.png differ
diff --git a/le-tour/images/icons/LE5-Edubar-Term.png b/le-tour/images/icons/LE5-Edubar-Term.png
new file mode 100644
index 0000000000000000000000000000000000000000..904dabdc8bfa663875d283d05ed0df28e226ab05
Binary files /dev/null and b/le-tour/images/icons/LE5-Edubar-Term.png differ
diff --git a/le-tour/images/icons/LE5-Edubar1.png b/le-tour/images/icons/LE5-Edubar1.png
new file mode 100644
index 0000000000000000000000000000000000000000..70ebfd20d5c5f54c944022847dea87a1468dd238
Binary files /dev/null and b/le-tour/images/icons/LE5-Edubar1.png differ
diff --git a/le-tour/images/icons/LE5-Edubar2.png b/le-tour/images/icons/LE5-Edubar2.png
new file mode 100644
index 0000000000000000000000000000000000000000..9100ae2d7aa4d47a06cd57e62d2ba2b438e4ed78
Binary files /dev/null and b/le-tour/images/icons/LE5-Edubar2.png differ
diff --git a/le-tour/images/icons/LE5-Edubar3.png b/le-tour/images/icons/LE5-Edubar3.png
new file mode 100644
index 0000000000000000000000000000000000000000..412fd96f2317c329159763e60ca91a96e4fd5033
Binary files /dev/null and b/le-tour/images/icons/LE5-Edubar3.png differ
diff --git a/le-tour/images/icons/LE5-Edubar4.png b/le-tour/images/icons/LE5-Edubar4.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff3cd6c2f78f72d6c2d97f9e72fee8ed72af4e64
Binary files /dev/null and b/le-tour/images/icons/LE5-Edubar4.png differ
diff --git a/le-tour/images/icons/LE5-button1.png b/le-tour/images/icons/LE5-button1.png
new file mode 100644
index 0000000000000000000000000000000000000000..2735d609e2f6c2268996f691a29cec98d0949010
Binary files /dev/null and b/le-tour/images/icons/LE5-button1.png differ
diff --git a/le-tour/images/icons/LE5-button1.svg b/le-tour/images/icons/LE5-button1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3e28d87591926bd7eac10a6f5d50e32d70f533d9
--- /dev/null
+++ b/le-tour/images/icons/LE5-button1.svg
@@ -0,0 +1,366 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Creator: CorelDRAW X5 -->
+<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="18.772mm" height="18.5975mm" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd"
+viewBox="0 0 0.666538 0.660342"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+  <style type="text/css">
+   <![CDATA[
+    .str0 {stroke:#87AF26;stroke-width:0.00710141}
+    .fil5 {fill:none}
+    .fil6 {fill:none;fill-rule:nonzero}
+    .fil1 {fill:#FEFEFE;fill-rule:nonzero}
+    .fil2 {fill:#6F901F;fill-rule:nonzero}
+    .fil3 {fill:#8DB727;fill-rule:nonzero}
+    .fil0 {fill:#BEBEBE;fill-rule:nonzero}
+    .fil4 {fill:url(#id3)}
+    .fil8 {fill:url(#id4);fill-rule:nonzero;fill-opacity:0.400000}
+    .fil7 {fill:url(#id5);fill-rule:nonzero;fill-opacity:0.788235}
+   ]]>
+  </style>
+   <clipPath id="id0">
+    <path d="M-0 0l0.666538 0 0 0.660342 -0.666538 0 0 -0.660342z"/>
+   </clipPath>
+   <clipPath id="id1" style="clip-rule:nonzero">
+    <path d="M0.0838144 0.382535c0.0356491,0.135807 0.174769,0.21703 0.310704,0.181434 0.135978,-0.0356242 0.217275,-0.174588 0.181629,-0.310406 -0.0356491,-0.135807 -0.174748,-0.21704 -0.310722,-0.18142 -0.135939,0.0356029 -0.217264,0.174581 -0.181611,0.310392z"/>
+   </clipPath>
+    <clipPath id="id2">
+     <path d="M0.178 0.178916l0.303962 0 0 0.278276 -0.303962 0 0 -0.278276z"/>
+    </clipPath>
+  <radialGradient id="id3" gradientUnits="userSpaceOnUse" cx="0.302229" cy="0.212687" r="0.286648" fx="0.302229" fy="0.212687">
+   <stop offset="0" style="stop-color:#8DB727"/>
+   <stop offset="1" style="stop-color:#215900"/>
+  </radialGradient>
+  <radialGradient id="id4" gradientUnits="userSpaceOnUse" cx="0.241498" cy="0.0437766" r="0.240205" fx="0.241498" fy="0.0437766">
+   <stop offset="0" style="stop-color:#FEFEFE"/>
+   <stop offset="0.14902" style="stop-color:#FEFEFE"/>
+   <stop offset="0.639216" style="stop-color:#6E6B6B"/>
+   <stop offset="1" style="stop-color:#292929"/>
+  </radialGradient>
+  <radialGradient id="id5" gradientUnits="userSpaceOnUse" xlink:href="#id4" cx="0.27258" cy="-0.0600424" r="0.241874" fx="0.27258" fy="-0.0600424">
+  </radialGradient>
+ </defs>
+<symbol id="x8-8-0" viewBox="11.334 -1.12989 0.808474 0.396866">
+ <path class="fil0" d="M11.3364 -0.848863c0.0182506,0.106422 0.176591,0.153934 0.250371,0.0751045 0.0867047,-0.0867047 0.220872,-0.0867047 0.307576,0 0.0543151,0.0543151 0.15316,0.0543151 0.207471,0 0.0543116,-0.0543116 0.0543116,-0.153156 0,-0.207468 -0.198225,-0.198215 -0.524244,-0.198215 -0.722504,0 -0.0350348,0.0333198 -0.0517196,0.0848512 -0.0429138,0.132363zm0 0z"/>
+</symbol>
+<symbol id="x7-7-0" viewBox="12.0168 -4.44984 0.479377 1.50299">
+ <path class="fil0" d="M12.0824 -4.44321c-0.0679676,0.0253875 -0.0887108,0.129018 -0.0357272,0.178632 0.314869,0.314919 0.314869,0.828589 0,1.1435 -0.0795535,0.0795145 0.0723279,0.231392 0.151832,0.151828 0.396827,-0.396766 0.396827,-1.05038 0,-1.4472 -0.0288246,-0.0306781 -0.0767236,-0.0417385 -0.116104,-0.0267546zm0 0z"/>
+</symbol>
+<symbol id="x6-6-0" viewBox="11.7762 -4.21908 0.393599 1.05747">
+ <path class="fil0" d="M11.8797 -4.21882c-0.0817088,0.00747778 -0.123444,0.12883 -0.0635576,0.184949 0.189256,0.189306 0.189256,0.492827 0,0.682083 -0.0483393,0.0369877 -0.0537257,0.117919 -0.0106734,0.160985 0.0430168,0.0430523 0.123998,0.0376801 0.160985,-0.0106734 0.271217,-0.271213 0.271217,-0.711444 0,-0.982657 -0.0217197,-0.0237755 -0.0545992,-0.0369415 -0.0867544,-0.0346868zm0 0z"/>
+</symbol>
+<symbol id="x5-5-0" viewBox="11.5581 -3.9909 0.291545 0.593866">
+ <path class="fil0" d="M11.6432 -3.9892c-0.0781865,0.0134039 -0.113072,0.129711 -0.0551886,0.183923 0.0637067,0.063657 0.0637067,0.162249 0,0.225956 -0.0398851,0.0398851 -0.0398851,0.112497 0,0.152368 0.0399206,0.0398851 0.112483,0.0398851 0.152418,0 0.145614,-0.145614 0.145614,-0.385127 0,-0.530742 -0.0244644,-0.0257284 -0.0622936,-0.0379677 -0.0972289,-0.0315054zm0 0z"/>
+</symbol>
+<symbol id="x10-10-0" viewBox="10.7098 -2.01017 2.046 0.652598">
+ <path class="fil0" d="M10.7187 -1.44693c0.0346336,0.0925172 0.175703,0.120749 0.24323,0.0486233 0.428669,-0.428666 1.12793,-0.428666 1.55661,0 0.108236,0.108289 0.315004,-0.0984894 0.206729,-0.206715 -0.540186,-0.54019 -1.42988,-0.54019 -1.97007,0 -0.0417882,0.0392814 -0.0568184,0.104455 -0.0364622,0.158092l-3.90578e-005 0zm0 0z"/>
+</symbol>
+<symbol id="x9-9-0" viewBox="11.0239 -1.56578 1.43951 0.535787">
+ <path class="fil0" d="M11.0242 -1.17082c0.0101337,0.111258 0.175366,0.168076 0.251802,0.0865555 0.25766,-0.257675 0.67082,-0.257675 0.928495,0 0.0503419,0.0658123 0.160534,0.0731055 0.219107,0.014533 0.0586221,-0.0586221 0.0512828,-0.168815 -0.0145295,-0.219157 -0.369181,-0.369185 -0.96848,-0.369185 -1.33765,0 -0.0323931,0.029549 -0.0503028,0.0743162 -0.0472244,0.118068zm0 0z"/>
+</symbol>
+ <g id="Layer_x0020_1">
+  <metadata id="CorelCorpID_0Corel-Layer"/>
+  <g style="clip-path:url(#id0)">
+   <image transform="matrix(1 0 0 1 -9.386 -5.1034)" x="9.386" y="5.1034" width="0.666538" height="0.660342" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABZCAIAAAFGWZRtAAAACXBIWXMA
+ABKbAAASmwHgklkMAAAW/klEQVR4nNVc+3PbRpIeYAYg+JBs+bFxnFx+SO1WUneb2v//D7mrS13i
+qrurTWzLtiyJLwADYL+vewBSFEmREulEbYUh8Rj09PS7e+DqujZLUJQen2nilg8ufrx9x3+TyQTf
+h8PhV6/478ZFb968+eWX/5nPcv354fzDu3dvp3+dfv/99+EijPDrL792VyjgJw4OhgOMx4ve/f52
+NpuZW4CDOMWLgOlkOr19hQJO4QKOFOHfBtBTDrMdjUbn5+drL8IpXMCRvn796vz8/Xg8uXXFEKfC
+7F68ePnDjz/+/PPPk/G4aeQpkRmORj/88ANOLej0zTff4ChoM7ke4+fwZPTVV6+ePnmiZxcUx6Hu
+6Aq4lbXL86LXS29c0RHjt3/+8+LikwdJEnd29uw1nj4YhCs+X17+93/+14cPH+smjPf+7fnH8w8/
+/se/49GurOo3v745/3Cu01HApTiS/vrmp3/8w11++vj+3fvl0wo4guM468ZYjiJfPS+A4zjrIiHU
+7TGUgDjrRsNhL+ut8I0CjuOse/7iBTjj//73/7uJKMRRjOM4y9l+/7e/+ap++/tv3leBSs6++vo1
+jgd6jAaDv//008sXzy8uLrz3zoFiZ199/VqlItAUP/7tu+/wdxub1XUBgIb5fDafTefzwle+qerI
+xs66LEuz/qCX9RMbr47SfcNg46srIPPx46fx9dV0Ovdl2U0Rk3NJMhhko5PT58+fAdXR6Wm8Mgo4
+4MP5+bu3bzFKURS3yYzhsBD4u7y8PH//DqP85dWrly9fLrhkPJn8/ttv+Lu6vF6h723AA8CN79+d
+Q17Lovj69WuuD276DAQuPu0yxDJq11fji8Gnfr8/wChlXmBVwMq7D9ENhLt4a144SEqSJGmaYvU7
+TtgFcD3uwr0YgXR5enY2n2Oa8+vrqx0HwhAnJ6dnz85wr1Hqgs7ffvtdr9d//+4tljmf51tmhyUH
+x2Ox//IV10iFPqw0fnz77TcYG+hcfLy4urqcTGcFSVaahirPuSTtpcNB//T0ydnzMyCiaxxQW34O
+TuAPogNVms+neZ77qmp51/YA2WDFVIRRbktABxCF2tPIxMDkFtevR0QBHDWdTiFHhS/rig+IbZy6
+BOIzGAxWVN/qEKWvJpPx5efPMF5YLlBECQxaghxZvw9z9uTp0+FwlDi7Zgg8HLT8+OHD54vPEAVI
+SgVatAreWjAFddBsOoWeGY5OBv3sxhC4//Ly4u3vXN3ZbLrCKRgIR7ynlpxBRxQF1tXGLxZLSyVw
+fQUlvfb+ZcApXPDxo4njmJzaexHrELA0nyF/n+64f3kUCGu/n6W97ORkJEOMry8vrybTyY6c7kn1
+GW4BXTnEdDafYlhYg3m5y/0KZZnjFt44m7uyyCEdgL3EXxQSb8TtDlwMLVDVe0i9Am6h/qgqZ+q6
+aer9RzC4BTfidhdbixWydqN7sglwSyx3wjJZKCLrEjhQ+w0Bk5HAq7EuTbNelmW9dDqJt0jtCkBq
+cAtuxO1UpUOByQT2bbbWhq8ARCbNEr0r6FGodmgkLDHkoCzu5g7MYDSEqXuCG02nRKFReb/3YzPe
+PkqS8v5nz57hloWVA4BRyS9NY8/j8WQMTr3NaZh/krqTk5MXL19C3uUWsxgCKmR0+gSrlLjk8vLz
+eDyGfQBeVUmGsVgx6yBXg+Ho7OnTs+fPlrXOQuVAO8L/wjoNR4Pr6+s5mbfQNcLyw3Zh2YACJGtZ
+g5vbulP1OK6D6Ij9K5V+4J+011u5ef0QywNtIeqNIXZnJyOBBwASVfGT0kURMw19P8w2IsuD4eXD
+rTU6G/HYfho4wh8oQRQ6QLl8h4QTD3wQkXb1BYcIqh4o4APkSyADaQ8rgXXG943GbDseYl3nBR1E
+aCiIEDVVKVAFACXAhEAliqImAjUMtYcVSARojDMa5L4IJkVzA5FWj9aMvuBSFpDdyXgKKzmdwcrC
+GSxKMdZ11dypayEQMdUS6ED3CAgM6KxBwgb4wQP9bIU8N/BQGgAD6Pnx9TUkBvq+9AXdvB0ev5gM
+lDKdC+iAGFSchSlNRtORSMAIy7pCmxs2Ho8HAa6vrvl/eAo5COM7S38PUITIThYjQQBzWE9M9OT0
+ZOhHzZLfsnAU8OyrqyuQ4erqGjPAPVAc+3q7a0H9DFAULIXlrShq5C9D39AsvA0sByhxPeZCACY3
+HZ5DAVmaylU1GiQdEhapnIWQu6BUTCkY8zkY4hhIKChhQP3pNAgUzWqaEA8wQCnEwqd40g9iiF1A
+tA+YpSh74bllL3NYKfmrRSFw5Y6KhBGq4Cl4ViXPVQQclkdPY6GO+/xb0D2RqoYqB8tEk6Ca0MXR
+3kHhXgAtZ/Vhjs4bni4qz1Lt0RYUyRwGIc1hTcjYx1kdhhtUsoheJYiF+0RujSkvMABViadXA5pT
+sioOwrQdHBWNeWh0+mJy+NHHL6P6A+hA/ctDG322hftu4uXExcNBUx8wwKPR8GR0ygjjZITnali5
+SNTAt7RxhCVzieulE2vFlwKVHqxVyRAJPIEEthcx6Mnp6cloBLuHiLQzMQv7QmWSnIJdYa1xNWiG
+kIwhLXR+UYpS2Y9pmBkjS5IbYGOHwwHoMMDDRyP49IiKl+Xzhr2NxZkD8XAdUIE5mk7G9N/z+Yrp
+p+exMSu3avTxbyiuJoZlgkRco5Ub13gluAh/jOLzAmvJQG0u/wEPorLkB1EXhSWDCMrsl/yglOLH
+eCZjdgIe8havbKM/FoslZFRzIq5h5SXlVErSSZiGOrFpWrKI2aIyUlZwBIolLchdTuE2PFYRMqlp
+ne+SRrxiJtGIhNV0CokIhrOMLJeTGDvCfv56BzUVDNWM2nE1DqDCvU3DHq69yG8Nzx1xufBGiBt4
+ToIGrgpllGqC4djmfNM98dDAQdICkhrQ0IGSvJAZoBHsEyHHl4IMskY07oOHYgAZ8QUjF4gufnvh
+jkYDKVFxGrxEYiydEAT4IFQo07JUybkLm42nNYIqirnILX0koqRZWq8eZt0s6VkVWoBroShUbNO6
+55t6m9BuxAMSIfEbHcaZBFJtECUBL4lR1bUSJBIkmliAGhwkEblN8xxqoywy3/c+q9PKA61NorQG
+DywAFFbOMGbGbNWU+pRp9VKTEpXkjFZVaqdJc9gzWikowwQTyQrWCjxjUMR/EPP1a7R6iJQQJKYM
+ohjGMLBi5F/Sf/MbrQwOUng8ECILxyQdOUuT5ljFRvNdEoXepsrNdCvji1yRkPhhDILAzKku39HO
+EaEmZAIYqqjnK2vYUg6ky1ak+gYeNRefKcMZk/RT4QxKDMmwwbBtwYbpO2/agqKmJIL5AQsZu674
+ZpQtCgluJ0oMxPghHXQ//0NXypT6XZPQVHS2VXpr4ltKKQmRzyYzYjDTfP79keiAtwsqGNCyNCCi
+DQvg3LIdCHhQVeSgBmNzZUzyhD9MfBtQacw8j9UMI4KDNSytW42zqaPKPFcUcqbWNKx6OBILVCrD
+pJLTkssM4lv6RZ4oxNmQMOoqejpUoiodh0JCQZwmqMcihVrI0yTPgYVP/aKgCc4QWae7pQ5XfcOE
+HQoPyE+DwQsxWniWSucCD4iXGDCvihvKiHx+BJD4uX0OxbOAy6innKQiq5Drp+b2xyDGApWqqdQ8
+SGrGU31zaVwj2dBKnd86ZAGPhQWFpssuVPJQrx6d85Imqlv7yUU5Zt5B9L1vn8WHAgE4v64hrerW
+zWs6K3A8kOcEL4o+vxx0UhwI7n8jqvjo0JjucfJEfnfNEgG+ADFuP0gRcIx+BIym8b4I6IPCg+W7
+IwaxZhDFs7ORpIKPiYRU4vi4iLkAJQHwiB3PSHwq6Bmzf6FwH5AANNJwmI+WLBntX9RFx+L2e7++
+w+ZASBgJPZkfY1lT4h0j/BGHjJmVU4LgwY3cEh6xPCluc3W2jUktfQK7FHfg/JHydEIMu3iQPHSR
+l0ocW0+k+0SSd0Ve+aOQRGOtRGt9AgmrxSbgwUxBGhph8AFkmF0pzWGzqC0x9Dmphpt49AIPRBOI
+ieGiFb2MHkiRavjaVAdjWM1YAg2GmkzvZPiUuO9m4RW4VanPMnhEmUYrYoRofB6OynLCjkmqvpTe
+EWMmi9Bhkbf0no0p6oWod4DQi408D0NFkZAUBJHAIwD4dDeTAEuF6DQFQ/TppKtBbrRe9BBUOiQw
++T5TlWwFGPT7SY/11OUrbxTEmyRtevQ/mkVhljVR8ZD2qBMqaNXSihBgKZg/HWlLAlOX2+JKEKqp
+Mw1QTZtdyW0MR97H3nizY4gbGMIJY5IrewMtm46GmsC8O3/aBTa0AogBnU1mM+eYPa0s2UaTDpto
+ozRQywEdAXZUnhjIkvSky+t2b9UaPDpUZE6m07NpKjmEMhTOQhakbv0mpj6iSDMfIUUWNBUZk1ns
+vlJiLRLr8VBUaJat0zExHEI9BhtSGKkkQRZ8O/FimAgSRNRSSo+B07Q6RDQTxlybzr4DDyO8ImNz
+ihJ7JSLSRRlcfsloL6+OJrXVZDA3pfV9ZtilJLnKmLviYUSCIG1FyQwghsNy5EXuxdln4KmOtfCt
+JrXVdJOEiZWCqGjM3VKXd1+haX9tCMQEq7KkfvGs4WmGPeBhJUvH5o9Y+522tw7ujYcCR7TMsmtG
+WwVH/H/Bo/Xl3M2sxu6wR15bIW4ptP+ztuJxvzz/XlCzA6PS4ElDNqMmQ6OYLn+n0YL6zcFzoxxS
+DN0+ufoHwIGpa9qqRCNxKy0lw+dGiQ45M6L4JHyVDORNK9HGMG1QQ6dFHDVJVYMqWuGJhEx7lTN2
+hAOQQ+Wnm38tyRRMWfMbWHxpqxKLxJi60TRD3cXTSxCCSvmUKEvSnGLmrHyhnlQDCtvrFtR5SAFq
+Ge5PDuUC1SKi0xqo/JrVKq8FEenIbsgb0lvRmaKm/d/GoQMlJOgURqDUILhhKCr2S7pDYTqYiE1S
+UKgsnaquB3LN3uToeKHkrofgAcD0YcL4rLVwFpqQJP1aUfs3IkBt5sW0eY/VlE+8SDyI3IQ2QfWD
+NDcfhShQjKnV+ht7J1n9qhx8P1c/gF/2K1XWUiTUUiVoAFJIkazScgQdJPoCoeuwkqSbF89AxUeK
+ijU0QtNVQFYczKglChih0UCDpMHswS3CFdo3HBwtNpGCO5wWrS0bSaz1Lb/co468a8VUVUMV3EEC
+W9x8aMP0WkuVtru2btdoCVHtCHSIzP0uB1vOqto14pX6kmscW80caTXUWEnVJOp9JoFJWL8vpH7f
+8/K7gisNFqql++kwhVut4bMHTwghRVwSguRgewpYJA8EEv8s+ER18J01F3zvOLBpR5B6H2kEAULc
+EsceM/Q+ZoupC+4zSDNnIdQVGcJ0BCo99UtrR1cMKO3CKdvqx74toxeiHVlDzllFzmdz4Y5CY2DR
+pL5VDYEKxyhTGOEvSbuaSPLzECsQpYwjUaI2gQ/tHHDmpy8T6aZGoASiNAm966ZJt+uUDWVsURPa
+cgKe4HYxqVHMZ3Op3hWhCcWHcgC+HIkKayFwjdIFKikyUk4nl1ruo6Kw4JOZhcRhKvjVZKm1wa5t
+8dvXV9M1UGKYQkqU2poEgsxDLMd9QF5KuV+YECugdIEYVaUhwxiraSNpJQc52GKBAykTKVXqPKlh
+vavTZkMz++oh7fKo2N+RY94M7j23CpVChlw0RcnmuuaPJcQy3CJKHdP9rbsOGQ31Ksfv4Bi5hSrp
+jpzHouOFPetKDkrHPJ+H8J7NdJKq2ty+9kfBMlEaG0F6IB26zUA3JNWJWCwtvbWob9yQXYrjQHMp
+adNcSCA7OSEsodHBSyVPuryPmP5/CBCrCChCNSBiiINhqqFZYtnzgDWsmOVr2lDgZv9JW9GXVIqX
+ZJNoylLr2ZLikH8kR32PPssvD8omTQWyhPgIh+DIkXdCTGSVHEIgOv6dZm0bPrzOmiRQ/iiDQvVS
+XC+1qPznp0UH2oEDNqli8RlkH5O3spmUVZ6oKEgaeCzcYWqX+j3AGqWW89WRCs2cC9jeGfWnBRWc
+SsqcmAVYgy3fEfw3Dy++gm/CfSf08OJqqfwklRXd5FTJZkjdWEAqeGkBkPDrkdFCQXmkqSPMIqpo
+huHNwsbAecOPSFrbQBrKlJKjrOpQWgnbK8RyBxBt4euj9n8cG7TrporqmHP3sfwvptWpaq2cWHpu
+mhlwYeWl91v87G67SQjBJR969ATiUUF8gkizu5J+aaw0N+L/mLVtKWB0T4UQoTJtKrgRVzZUDurH
+zRoKyiC1DX0uRlsuteVE9v50MxTuqBd5OuUIPScM8oWaP74AYC5dtkk5xXSzbk2yvF5mQ8OL5KYe
+OWMsgbRLr59pRwHZGBaFel7XmqN3h4R2dCtn9RghCtUgE3WZpDBfIxQI/SaamYy1qhFrvkk6k7pr
+46ht5nqsEJZbmp/i0HfVztQqI4QkvpS4YYfjUq+RrDX+Kuataz3kmNqLHqXfYbo+fs5HCOFCvlX3
+oCgIFRi5MDUkOWqW42xc1gmsMFQwz9ekh7UWWiZiUPQ4KaJ7GsJLLkIuUXLxSdubJeWIRTO0dLx4
+facFZuwks8gjiUsqdn9KHtw/Ooos75ST8rk0HbW9DlZq2tIiZlf3DJIEMMyuTuXdI/juKqZJdP+x
+vCvBPC6KLNOCKy1NYZx/IkWIhI0a1iXylodbrUhKHjXCqfORbAxRl16Ow50FmYx/JBRZ2UGpm7CS
+9n+y9zzRLq1kU2eWtCGpA9ZAy2DGzAjgSBQraSRp3kQxwj0a36Pujn4IxLQeRip2kbTHpTJz9tz0
+Um5w7mU9pQlbJzdlw4y+VSp0GJABLLsMGzXIViyPkdYEo51bVfxnyw92TMF6rSjNRAoujlt1hRxZ
+5uR1I9KHksRua64UIV0tiZBYo13LlAn3zpuolC5ZpgysBIVQJzED5z9J0nRBCLEfccSeSW2+yXqZ
+7lyWBsYe2/dYu1y/23aVPLgC10VSCoSawFNYp7GxL11elPBavC/AJmXpI+iRqJJW5T+SKMuECDs4
+BfjeJNEL/X7GNkoIiHUghO523VR8WlNriDvNylaT2CIEJhUwhFS3Cpb6ZLeO7oupWI1tOcXsUog9
+BCgVjJRvO45QI6pas9cLL+LJQA4nrWox9cj2eu22pr2yot31VcgvyiMjF95BVOB3m1WuKD0giuZq
+6zg6JlECIdq2SesW7ySivRALmig7aC9lr6eb490OfXN39A4am8ae9JcEESWuYu0TblvGupSmmhe1
+eyk78J+Qoz5YyXaZBEbUWVvHjxMpVrvwajO1nNCUVkuzcirhy7vYRXh3H8zdZX46co6M0JC6XokC
+TZrnaSV72Srdks0kY1H72rdtHZJW0dzKaluD2Vqm0V65ThZM28ogqpyhhnS7xLLabGPFNMWnEs9K
+moylWM9z8Z7djDt1PXTaBJzSJKllWb92JIov0xQzl5eYyZbsKjQEaf+PNr1oaV/6wrpNXmEfsNCl
+3XsbtU2ZRvf7aDweIi1t49XWKN12ok0M0hJF1eBkT4Rq0pjf07Vbmg9Ajg50dBC7at/dkC51AnU9
+uG0XVEhEd2lGem50+bX3fkPWoM1J0NhLH2G7xT0OURg7CMPLcrSpV16Kkuo7ErTj596Nl/dplYvp
+sFm4JYlJQ89gkjTsjRPdIdvOG9JIKttthzJzkOHNbKFQaNrS8RIpREDi0Dmo+6NCb6lyhWrPRPcs
+OQ1IcOxQ/YMPaqTshKhnUpqhrp20Cd2E0g/GfRD40UbG2jfXdG22Rg4tEpSajJHeOO0Ki6RWFoUe
+00jD8o4Eh20wPVibrZghosX3obRtlkbKX22/dqVdg8t9pdoHFt4naMgY5kZfqbbN2a7FW48fo8FW
+4fBdxwoddVZ8nlp4pI0VTXOzBXzxRi/1rI6E3Gb4F9qQgsC4wRBZAAAAAElFTkSuQmCC"/>
+  </g>
+  <path class="fil1" d="M0.0480197 0.391859c0.0406591,0.15338 0.19928,0.245126 0.354254,0.204961 0.155006,-0.040162 0.247687,-0.197032 0.207027,-0.350387 -0.0406591,-0.153376 -0.199262,-0.245126 -0.354254,-0.204954 -0.154981,0.0401585 -0.247676,0.197032 -0.207027,0.35038z"/>
+  <path class="fil2" d="M0.0705774 0.386402c0.0374102,0.14113 0.183365,0.225551 0.325962,0.188596 0.142628,-0.0369557 0.227909,-0.181303 0.190495,-0.322411 -0.0374138,-0.141126 -0.183348,-0.225551 -0.325965,-0.188585 -0.1426,0.0369522 -0.227895,0.181295 -0.190492,0.3224z"/>
+  <path class="fil3" d="M0.0838144 0.382535c0.0356491,0.135807 0.174769,0.21703 0.310704,0.181434 0.135978,-0.0356242 0.217275,-0.174588 0.181629,-0.310406 -0.0356491,-0.135807 -0.174748,-0.21704 -0.310722,-0.18142 -0.135939,0.0356029 -0.217264,0.174581 -0.181611,0.310392z"/>
+  <g style="clip-path:url(#id1)">
+   <g id="_273115608">
+    <path id="_2731274161" class="fil4" d="M0.348466 0.0351591c-0.154498,-0.00574504 -0.271121,0.117798 -0.292187,0.274668 -0.0210663,0.15687 0.111936,0.292496 0.266434,0.298241 0.154498,0.00574504 0.272083,-0.120568 0.29315,-0.277438 0.0210663,-0.156867 -0.112898,-0.289727 -0.267396,-0.295472z"/>
+    <g>
+     <line id="_273127320" class="fil5 str0" x1="-0.212314" y1="0.0789322" x2="0.222274" y2= "0.874084" />
+     <line id="_273127224" class="fil5 str0" x1="-0.183863" y1="0.0615834" x2="0.250722" y2= "0.856732" />
+     <line id="_273127128" class="fil5 str0" x1="-0.155414" y1="0.0442311" x2="0.279174" y2= "0.839379" />
+     <line id="_273127032" class="fil5 str0" x1="-0.134078" y1="0.0312178" x2="0.30051" y2= "0.82637" />
+     <line id="_273126936" class="fil5 str0" x1="-0.0487263" y1="-0.0208355" x2="0.385859" y2= "0.774313" />
+     <line id="_273126840" class="fil5 str0" x1="-0.013166" y1="-0.0425232" x2="0.421422" y2= "0.752625" />
+     <line id="_273126744" class="fil5 str0" x1="0.0152822" y1="-0.0598755" x2="0.449871" y2= "0.735273" />
+     <line id="_273126648" class="fil5 str0" x1="0.043734" y1="-0.0772278" x2="0.478319" y2= "0.717924" />
+     <line id="_273126552" class="fil5 str0" x1="-0.112738" y1="0.0182045" x2="0.321847" y2= "0.813353" />
+     <line id="_273126456" class="fil5 str0" x1="-0.0842902" y1="0.000852169" x2="0.350298" y2= "0.796004" />
+     <line id="_273126360" class="fil5 str0" x1="-0.062954" y1="-0.0121612" x2="0.371634" y2= "0.782991" />
+     <line id="_273126264" class="fil5 str0" x1="-0.0273901" y1="-0.0338489" x2="0.407198" y2= "0.761299" />
+     <line id="_273126168" class="fil5 str0" x1="0.0721823" y1="-0.0945766" x2="0.506771" y2= "0.700572" />
+     <line id="_273126072" class="fil5 str0" x1="0.100634" y1="-0.111929" x2="0.535223" y2= "0.683219" />
+     <line id="_273125976" class="fil5 str0" x1="0.12197" y1="-0.124942" x2="0.556559" y2= "0.670206" />
+     <line id="_273125880" class="fil5 str0" x1="0.157534" y1="-0.146633" x2="0.592119" y2= "0.648518" />
+     <line id="_273125784" class="fil5 str0" x1="0.0295099" y1="-0.0685535" x2="0.464098" y2= "0.726598" />
+     <line id="_273125688" class="fil5 str0" x1="0.0579582" y1="-0.0859022" x2="0.492547" y2= "0.709246" />
+     <line id="_273125592" class="fil5 str0" x1="0.0864099" y1="-0.103254" x2="0.520995" y2= "0.691897" />
+     <line id="_273125496" class="fil5 str0" x1="0.114858" y1="-0.120607" x2="0.549447" y2= "0.674545" />
+     <line id="_273125400" class="fil5 str0" x1="0.214431" y1="-0.181334" x2="0.649019" y2= "0.613817" />
+     <line id="_273125304" class="fil5 str0" x1="0.242882" y1="-0.198687" x2="0.677467" y2= "0.596465" />
+     <line id="_273125208" class="fil5 str0" x1="0.271331" y1="-0.216036" x2="0.705919" y2= "0.579113" />
+     <line id="_273125112" class="fil5 str0" x1="0.285555" y1="-0.224713" x2="0.720143" y2= "0.570438" />
+     <line id="_273125016" class="fil5 str0" x1="0.143306" y1="-0.137956" x2="0.577895" y2= "0.657193" />
+     <line id="_273124920" class="fil5 str0" x1="0.17887" y1="-0.159647" x2="0.613459" y2= "0.635505" />
+     <line id="_273124824" class="fil5 str0" x1="0.200206" y1="-0.172657" x2="0.634795" y2= "0.622492" />
+     <line id="_273124728" class="fil5 str0" x1="0.228655" y1="-0.190009" x2="0.663243" y2= "0.605139" />
+     <line id="_273127968" class="fil5 str0" x1="0.314007" y1="-0.242062" x2="0.748591" y2= "0.553086" />
+     <line id="_273127872" class="fil5 str0" x1="0.342455" y1="-0.259414" x2="0.777043" y2= "0.535737" />
+     <line id="_273127776" class="fil5 str0" x1="0.356679" y1="-0.268089" x2="0.791267" y2= "0.527059" />
+     <line id="_273127680" class="fil5 str0" x1="0.378015" y1="-0.281102" x2="0.812604" y2= "0.514046" />
+     <line id="_273124440" class="fil5 str0" x1="0.129082" y1="-0.129281" x2="0.563671" y2= "0.665871" />
+     <line id="_273128640" class="fil5 str0" x1="0.164646" y1="-0.150969" x2="0.599231" y2= "0.644179" />
+     <line id="_273124536" class="fil5 str0" x1="0.193094" y1="-0.168321" x2="0.627683" y2= "0.626831" />
+     <line id="_273124272" class="fil5 str0" x1="0.221543" y1="-0.18567" x2="0.656131" y2= "0.609478" />
+     <line id="_273124368" class="fil5 str0" x1="0.299779" y1="-0.233388" x2="0.734367" y2= "0.561764" />
+     <line id="_273124152" class="fil5 str0" x1="0.328231" y1="-0.250737" x2="0.762816" y2= "0.544412" />
+     <line id="_273124128" class="fil5 str0" x1="0.349567" y1="-0.263753" x2="0.784155" y2= "0.531398" />
+     <line id="_273123984" class="fil5 str0" x1="0.370903" y1="-0.276767" x2="0.805492" y2= "0.518385" />
+     <line id="_273124080" class="fil5 str0" x1="0.249994" y1="-0.203022" x2="0.684579" y2= "0.592126" />
+     <line id="_273123816" class="fil5 str0" x1="0.264219" y1="-0.2117" x2="0.698807" y2= "0.583452" />
+     <line id="_273123792" class="fil5 str0" x1="0.292667" y1="-0.229049" x2="0.727255" y2= "0.566099" />
+     <line id="_273120408" class="fil5 str0" x1="0.321119" y1="-0.246401" x2="0.755704" y2= "0.548751" />
+     <line id="_273120504" class="fil5 str0" x1="0.392243" y1="-0.28978" x2="0.826828" y2= "0.505372" />
+     <line id="_273120600" class="fil5 str0" x1="0.406467" y1="-0.298454" x2="0.841052" y2= "0.496697" />
+     <line id="_273120696" class="fil5 str0" x1="0.420691" y1="-0.307129" x2="0.85528" y2= "0.488019" />
+     <line id="_273120792" class="fil5 str0" x1="0.434915" y1="-0.315803" x2="0.869504" y2= "0.479345" />
+     <line id="_273120888" class="fil5 str0" x1="0.363791" y1="-0.272428" x2="0.798379" y2= "0.522724" />
+     <line id="_273120984" class="fil5 str0" x1="0.385131" y1="-0.285441" x2="0.819719" y2= "0.509711" />
+     <line id="_273121080" class="fil5 str0" x1="0.399355" y1="-0.294116" x2="0.83394" y2= "0.501033" />
+     <line id="_273121176" class="fil5 str0" x1="0.413579" y1="-0.302793" x2="0.848167" y2= "0.492358" />
+     <line id="_273121272" class="fil5 str0" x1="0.456251" y1="-0.328817" x2="0.89084" y2= "0.466332" />
+     <line id="_273121368" class="fil5 str0" x1="0.470479" y1="-0.337494" x2="0.905068" y2= "0.457657" />
+     <line id="_273121464" class="fil5 str0" x1="0.477591" y1="-0.341833" x2="0.912176" y2= "0.453318" />
+     <line id="_273121560" class="fil5 str0" x1="0.484703" y1="-0.346169" x2="0.919288" y2= "0.448979" />
+     <line id="_273121656" class="fil5 str0" x1="0.427803" y1="-0.311468" x2="0.862392" y2= "0.483684" />
+     <line id="_273121752" class="fil5 str0" x1="0.442031" y1="-0.320142" x2="0.876616" y2= "0.475006" />
+     <line id="_273121848" class="fil5 str0" x1="0.449139" y1="-0.324481" x2="0.883728" y2= "0.470671" />
+     <line id="_273121944" class="fil5 str0" x1="0.463367" y1="-0.333156" x2="0.897955" y2= "0.461993" />
+     <line id="_273122040" class="fil5 str0" x1="0.491815" y1="-0.350508" x2="0.926404" y2= "0.444644" />
+     <line id="_273122136" class="fil5 str0" x1="0.498927" y1="-0.354847" x2="0.933516" y2= "0.440305" />
+     <line id="_273122232" class="fil5 str0" x1="0.506039" y1="-0.359182" x2="0.940628" y2= "0.435966" />
+     <line id="_273122328" class="fil5 str0" x1="0.513155" y1="-0.363521" x2="0.94774" y2= "0.431631" />
+     <line id="_273122424" class="fil5 str0" x1="-0.390123" y1="0.187378" x2="0.0444655" y2= "0.982526" />
+     <line id="_273122520" class="fil5 str0" x1="-0.383011" y1="0.183039" x2="0.0515775" y2= "0.978191" />
+     <line id="_273122616" class="fil5 str0" x1="-0.375899" y1="0.178703" x2="0.0586896" y2= "0.973852" />
+     <line id="_273122712" class="fil5 str0" x1="-0.368787" y1="0.174364" x2="0.0658017" y2= "0.969516" />
+     <line id="_273122808" class="fil5 str0" x1="-0.340339" y1="0.157012" x2="0.0942499" y2= "0.952164" />
+     <line id="_273122904" class="fil5 str0" x1="-0.326111" y1="0.148338" x2="0.108478" y2= "0.943486" />
+     <line id="_273123000" class="fil5 str0" x1="-0.318999" y1="0.143999" x2="0.115586" y2= "0.939151" />
+     <line id="_273123096" class="fil5 str0" x1="-0.304775" y1="0.135324" x2="0.129814" y2= "0.930473" />
+     <line id="_273123192" class="fil5 str0" x1="-0.361671" y1="0.170025" x2="0.0729137" y2= "0.965177" />
+     <line id="_273123288" class="fil5 str0" x1="-0.354559" y1="0.16569" x2="0.0800258" y2= "0.960838" />
+     <line id="_273123384" class="fil5 str0" x1="-0.347451" y1="0.161351" x2="0.0871378" y2= "0.956499" />
+     <line id="_273123480" class="fil5 str0" x1="-0.333223" y1="0.152673" x2="0.101366" y2= "0.947825" />
+     <line id="_273123576" class="fil5 str0" x1="-0.290551" y1="0.12665" x2="0.144038" y2= "0.921798" />
+     <line id="_273123672" class="fil5 str0" x1="-0.276323" y1="0.117972" x2="0.158262" y2= "0.913124" />
+     <line id="_273120192" class="fil5 str0" x1="-0.262099" y1="0.109298" x2="0.172486" y2= "0.90445" />
+     <line id="_273120072" class="fil5 str0" x1="-0.240763" y1="0.0962845" x2="0.193826" y2= "0.891436" />
+     <line id="_273120168" class="fil5 str0" x1="-0.311887" y1="0.13966" x2="0.122702" y2= "0.934812" />
+     <line id="_273119904" class="fil5 str0" x1="-0.297663" y1="0.130985" x2="0.136926" y2= "0.926137" />
+     <line id="_273119856" class="fil5 str0" x1="-0.283435" y1="0.122311" x2="0.15115" y2= "0.917459" />
+     <line id="_273119832" class="fil5 str0" x1="-0.269211" y1="0.113637" x2="0.165374" y2= "0.908785" />
+     <line id="_273116280" class="fil5 str0" x1="-0.198087" y1="0.0702578" x2="0.236498" y2= "0.865406" />
+     <line id="_273116376" class="fil5 str0" x1="-0.169638" y1="0.0529055" x2="0.26495" y2= "0.848057" />
+     <line id="_273116472" class="fil5 str0" x1="-0.14119" y1="0.0355568" x2="0.293398" y2= "0.830705" />
+     <line id="_273116568" class="fil5 str0" x1="-0.126963" y1="0.0268788" x2="0.307622" y2= "0.822031" />
+     <line id="_273116664" class="fil5 str0" x1="-0.247875" y1="0.100623" x2="0.186714" y2= "0.895772" />
+     <line id="_273116760" class="fil5 str0" x1="-0.226539" y1="0.0876065" x2="0.20805" y2= "0.882758" />
+     <line id="_273116856" class="fil5 str0" x1="-0.205199" y1="0.0745932" x2="0.229386" y2= "0.869745" />
+     <line id="_273116952" class="fil5 str0" x1="-0.176751" y1="0.0572445" x2="0.257838" y2= "0.852393" />
+     <line id="_273117048" class="fil5 str0" x1="-0.0985143" y1="0.00952654" x2="0.336074" y2= "0.804678" />
+     <line id="_273117144" class="fil5 str0" x1="-0.0700661" y1="-0.0078222" x2="0.364522" y2= "0.787326" />
+     <line id="_273117240" class="fil5 str0" x1="-0.0416143" y1="-0.0251745" x2="0.392971" y2= "0.769977" />
+     <line id="_273117336" class="fil5 str0" x1="-0.00605395" y1="-0.0468622" x2="0.428535" y2= "0.74829" />
+     <line id="_273117432" class="fil5 str0" x1="-0.254987" y1="0.104959" x2="0.179602" y2= "0.900111" />
+     <line id="_273117528" class="fil5 str0" x1="-0.233651" y1="0.0919455" x2="0.200938" y2= "0.887097" />
+     <line id="_273117624" class="fil5 str0" x1="-0.219426" y1="0.0832711" x2="0.215162" y2= "0.878419" />
+     <line id="_273117720" class="fil5 str0" x1="-0.190975" y1="0.0659188" x2="0.24361" y2= "0.861071" />
+     <line id="_273117816" class="fil5 str0" x1="-0.105626" y1="0.0138655" x2="0.328962" y2= "0.809017" />
+     <line id="_273117912" class="fil5 str0" x1="-0.0771781" y1="-0.00348679" x2="0.35741" y2= "0.791665" />
+     <line id="_273118008" class="fil5 str0" x1="-0.0558419" y1="-0.0164966" x2="0.378747" y2= "0.778652" />
+     <line id="_273118104" class="fil5 str0" x1="-0.0202781" y1="-0.0381878" x2="0.41431" y2= "0.756964" />
+     <line id="_273118200" class="fil5 str0" x1="-0.162526" y1="0.0485701" x2="0.272062" y2= "0.843718" />
+     <line id="_273118296" class="fil5 str0" x1="-0.148302" y1="0.0398922" x2="0.286286" y2= "0.835044" />
+     <line id="_273118392" class="fil5 str0" x1="-0.11985" y1="0.0225434" x2="0.314734" y2= "0.817692" />
+     <line id="_273118488" class="fil5 str0" x1="-0.0914022" y1="0.00519113" x2="0.343186" y2= "0.800339" />
+     <line id="_273118584" class="fil5 str0" x1="0.00817017" y1="-0.0555401" x2="0.442759" y2= "0.739612" />
+     <line id="_273118680" class="fil5 str0" x1="0.036622" y1="-0.0728889" x2="0.471207" y2= "0.722259" />
+     <line id="_273118776" class="fil5 str0" x1="0.0650702" y1="-0.0902412" x2="0.499659" y2= "0.704911" />
+     <line id="_273118872" class="fil5 str0" x1="0.093522" y1="-0.10759" x2="0.528107" y2= "0.687558" />
+     <line id="_273118968" class="fil5 str0" x1="-0.0345022" y1="-0.0295099" x2="0.400083" y2= "0.765638" />
+     <line id="_273119064" class="fil5 str0" x1="0.00106166" y1="-0.0512012" x2="0.435647" y2= "0.743951" />
+     <line id="_273119160" class="fil5 str0" x1="0.0223943" y1="-0.0642145" x2="0.456983" y2= "0.730937" />
+     <line id="_273119256" class="fil5 str0" x1="0.0508461" y1="-0.0815668" x2="0.485435" y2= "0.713585" />
+     <line id="_273119352" class="fil5 str0" x1="0.150418" y1="-0.142294" x2="0.585007" y2= "0.652857" />
+     <line id="_273119448" class="fil5 str0" x1="0.185982" y1="-0.163982" x2="0.620571" y2= "0.631166" />
+     <line id="_273119544" class="fil5 str0" x1="0.207319" y1="-0.176996" x2="0.641907" y2= "0.618153" />
+     <line id="_273119640" class="fil5 str0" x1="0.23577" y1="-0.194348" x2="0.670355" y2= "0.600804" />
+     <line id="_273114816" class="fil5 str0" x1="0.0792979" y1="-0.0989155" x2="0.513883" y2= "0.696233" />
+     <line id="_273114912" class="fil5 str0" x1="0.107746" y1="-0.116268" x2="0.542335" y2= "0.678884" />
+     <line id="_273115008" class="fil5 str0" x1="0.136194" y1="-0.13362" x2="0.570783" y2= "0.661532" />
+     <line id="_273115104" class="fil5 str0" x1="0.171758" y1="-0.155308" x2="0.606343" y2= "0.639844" />
+     <line id="_273115200" class="fil5 str0" x1="0.257107" y1="-0.207361" x2="0.691695" y2= "0.587791" />
+     <line id="_273115296" class="fil5 str0" x1="0.278443" y1="-0.220374" x2="0.713031" y2= "0.574777" />
+     <line id="_273115392" class="fil5 str0" x1="0.306894" y1="-0.237727" x2="0.741479" y2= "0.557425" />
+     <line id="_273115488" class="fil5 str0" x1="0.335343" y1="-0.255076" x2="0.769931" y2= "0.540073" />
+    </g>
+   </g>
+  </g>
+  <path class="fil6" d="M0.0838144 0.382535c0.0356491,0.135807 0.174769,0.21703 0.310704,0.181434 0.135978,-0.0356242 0.217275,-0.174588 0.181629,-0.310406 -0.0356491,-0.135807 -0.174748,-0.21704 -0.310722,-0.18142 -0.135939,0.0356029 -0.217264,0.174581 -0.181611,0.310392z"/>
+  <path class="fil7" d="M0.261311 0.100311c-0.094573,0.0286187 -0.157971,0.110551 -0.167721,0.203015 0.00505975,-0.0975592 0.0698885,-0.185666 0.168744,-0.215588 0.126693,-0.0383334 0.261247,0.0335009 0.300532,0.1604 0.00721858,0.0233317 0.0106983,0.0469332 0.0107906,0.0701193 -0.00704815,0.000717242 -0.00100485,-0.00080601 -0.00151615,-0.00119659 -0.00115043,-0.0187193 -0.00449164,-0.0376197 -0.0103006,-0.0563426 -0.0393027,-0.126916 -0.173832,-0.19874 -0.300528,-0.160407z"/>
+  <g id="_261966560">
+   <g style="clip-path:url(#id2)">
+    <image id="_261975432" transform="matrix(1 0 0 1 -9.208 -5.30655)" x="9.386" y="5.48546" width="0.303962" height="0.278276" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAAmCAIAAAGhUxXiAAAACXBIWXMA
+ABKbAAASmwHgklkMAAAKRElEQVR4nH1Y2XIcSRXNraq6qnpVt9RStyyNJXnRYOzZAggY4AM8fwLP
+EEEEXwKPEAQ/QARPPAIBnpjxeGzZlu2RbKkt9apWb7UmJyuru0v2BBUdparMvHlv3uXcUxK/+sP9
+jRphlAzGtDeUOxtEUEpOOvTaqgwCWbDJq1MiCCE5Q+L+9Ltwsy6uN5KhVjteLbPPP1LP376UQgja
+HcZ//9vYrNsY+uXHQvz2z1+UXDmZke6QrJaJ+PIg+MWnRhCRnCm9gCpJTmRnQAaj+NNbTATdGSH5
+3SbG2bNjKaxa7h8PQv9sii0rRSZ+/cf7z4/DH94wVgrKnIcvZbcfkeRarfA7O1R0+vFsFEaR0KN3
+dyhJjD3rU99XMqJWYd2hGupcYI7Ekkw9NWFb5FpdyaSiwwkpOmoCqxyLHLfirQ02nhE3R8R6lbi2
+8fh50Gbk9q6hBXa3OO5Syn9+HYrf/eW+4CQm1DJJHMqxR/Ui/CnYUnz5OHAc/tk+U6YNyNOjQE8H
+o6CxmRNunhsilagWyZ1dMQuoH8iiI0r5uYG4vBCOUp6F3sWgmh6Nov7YqLiye0EfvVUuQoxvXOPt
+vhQXvaC2ZmIOo5Ypa2VlRLcXnbbjm1tUlFaMxVZ5m1yMSHOVbNf5cnMkxoMnkjPSrDPTIO2BmsBr
+Gab1T2fRODQ3HAz1R/FiJ/9knFu3xec/c3ASkrmePA/2bxjkdtm1pPjNn+5D38yXlCEDCePEmh92
+MCKjKR1NYj8kpiCTmXRy6UZ5l04n8gZsR6YdnSC9aLXMsRqOwTMyzMwReUmiSEJYGRMSJOvgMnZs
+NhxGtiXWqnCCVLrg+m7bJ2U+8YhOTyUwI5WC+nkhtZbu1z4RJ22CLFeF0u6pExu2WoKcGU5p0ZYT
+nzqmnHo4F1ItFR2OZbnAxlO5VVf+xaWqanWFHRz61FBWbVQFhNVGpuyPaRCQN2eRHy7jjJpZKaBM
+yA926OEbsreZBKdUEcNRXCzys65cLVPkfb0iEWzkea3IoiQipx3SqKVBo4kTIaxK+OhNaNrM78xI
+2a1X1QyEX5+pwjg5V3emcoVsr6cmaLWQhAn4ie1N0erGZi339sU4CJxvHge1uplkAlncO2e+HtTX
+o5ek4FKUzI/vClF04W6Wt6msuSoWTfP0jd/YTO9aoNFMH06OZs3t3JuX08K+s78rICl+/9f7iBCK
+dK0kjWWckiIPaBioyGfHVfSYPO+RnSYRh6fSYBCjQ0FLeSmS6EpKwhCZRy6GMo5lVnIwjGsVjnoM
+IyIMRlqdKGdSyrhrq3ITVCJ/wym5vISGMAhJFMTcYME01Aly3os44wVnXs9RLMczKFGSSnNIOAfM
+kHKJxxGKjhkGRV6mZnOSs5ARSc7649AoCdu4UljcoEVXQiFVZl+Z6l5IeLpeSQDYdK84JJRKP5YD
+59xcemCdyL1LCtxFUqUmZMUAcE5Oasv5HIx05uuc04i9dLv+400iUhUo/aX+iEAPInY5lYBk+GE6
+JaZJsQZQqrNQaNS3HJ7dEkZaXPYv5cyTYSQHSbZdDqP1NdEKye1tmsJ7tcIRqoWYPhWOh/LMmWQ0
+lkEkJ6PIycPt6FJkrUJxBOOdM/cuokaNL06FeMClwxFFe+kbtFJipMYNTgBSgqs1qp2p4/U8Y81a
+KV2xvDOka2U5LtF6mTSqTA8en5P1qjw8ITc3icJlpWTFyooBdwAdUSiB7Zu1dFBXK0sAH5LfE6rX
+Z/LWNtWgo+8LsTBxC5DoSqhQfTTHp+feJM+rJarxPjXhLEYT6A7inMXyTtoKXh6Ht3bEq9fRR/s8
+1WxWrck0jiLKucoejQG9bsCEyQRtdZWH2qfeasMaDYJWhzfrHIAnNrets04Iq9Ci8dNEAFHuDiJ9
+h5jfmqDdhBd+1xHMNdoDVVUAdlHO09evwuaWdXrsNbYsUstnT5UCC2RrnNQKi3GA0VcHAYSlUxDr
+NbZes7NiBy8CNPzBBc9OPXrq37llPjzwt9eNn94TCQwFaDdwVQyUB2iiTRpcRpLmcypaZF5ni329
+iIImRDENQgmoIhmomQbEnrfky4ksOHMqQVUhb64hwdT+uB+1CFogHU2RyzGwpDMIygUOOEXlIBLY
+hSXxgGLdF/VGMGg0o7MAhQOki5H+WbQ486RlpQPnndBxVeoqViXos6Nos86LLtX0Q5x2YqArFKMD
+AeaIAl7uxkBTMvJoRSz0yQVdCQPlh2BCvAARjsNQSnWwdBqUJ54bQzkd9AJd89ANb/mBWoBzp4R0
+cQFfvWlM8hybgY9ZXBEl3beVakq045XfYlIsUmuGbs2RZpEkPHP2iSed+dGHFivmmZaCOzsDuVqh
+PKlVgaI4bkWGmS61bDadxdhRvyKoC3oGxdrz2IVSKSR1wQ9jWKkjTW1jEXh6MaGlhIE2agyVBTYD
+zyCZaiV62iZbSRNWhyoX2dvzkLBUvcwALeBXg/ByiqpdoB4NEzlozXMQ6J1d6UUYSTdBu291yUY1
+fWVz0nC1kepdbFDkuJRn76tH0uEZ3xER/Bzj0LI7o9Y8sZGzvr3kyN+1ALtKkyLRmfMAo8CzlvEu
+FHmv5YlCuo2bY6Dt7tzwcInyCYsaqcwCroAj9IaxmbH/rBO7c/Xo6+hhqCg7h66lTPlgI10GxaA8
+SzkoDi8Do2K873k0FLA2zbJxobnIGKwVORUPR9HkMiUB+uqeh0bShhHDl0d+vW7EkmE3NICjt0u6
+pTTiq8udI4DK1/lVchX6LpZCsW5sJGm9Jx3FJMBtBOfFPMfnQT6fpueQoQTS55zBwYpXK0wTw3jJ
+3xN6ubHKXhwFTiIpyuZsEBTnuyA5NdXUr0GYiqEFNquk1QN5prAb5dwVqonoWXBc0FTNNJNIM3wc
+gfUIlrp6L9vBosxxc2Wj3w2cRsoFwwwvhhE6XZE+qFSkWGkeBXAX3TQXr7rvKYcVaFYfHg6OJEhD
+qnu9brw59rgj3o80tlvskpxp+Zp9fn9lNj2hDwwBfV6/RvOpVF9lzey8UB/WUAyGf3Lq2zsm9RWw
+VEv4fJTX6qkkPozQAvTzO1NoHoup+gr55oXcbapXRBqUyQ8oHIbfhzv04bP47k32bn3jzJ4v80Xx
+9LnXaJgigUq0BM7T/Edzf/BtsFFPX7NTpnFlyrbofx76zQb4Mjou+9dXwf6eIYQiYB/usgdPYsEY
+BUCiHvDZOFNt2vFifL5JNPq2zTUAoXO8ejK211JWlH39nqlvR/Z6igxez3trQYECQ3zwfP31dO+W
+HbnUQbeIpXh1HGxtCpwPRrT7ojiHM/e62z+ZVZrpLvaWnX2dcWrn2PdPGWw5dd3tHU9Xtpa0giYN
+Cd79BHzpszviv4/C/T0Bt9RX3KeH3o2dNMk3qg7Kb3c79eFkZGzMyeL/nzp8FexdN+av7rND/+ae
+2vODdefRU+9H90z1rYOmgOYNNgYeS5QbSPUT88uD6JPbaYm3zlnynwZ1rZaNh8+iuzf5+6/vTn1s
+ZDc5dtJNENyff2b++5vwJ/fUfzr+B5yi/SQROpQBAAAAAElFTkSuQmCC"/>
+   </g>
+  </g>
+  <path class="fil1" d="M0.242914 0.399685c0,-0.0602839 0,-0.120564 0,-0.180848 -0.000316013,-0.0127044 -0.000365723,-0.0203136 -0.0196922,-0.0217729l-0.0268753 0c0,0.069853 0,0.139706 0,0.209559 -0.00176825,0.0237223 0.00807785,0.0329825 0.0268753,0.0323895l0.106212 0 0 0 0.134384 0 0 -0.0195076c0,-0.0107302 -0.00877734,-0.019504 -0.0195076,-0.019504l-0.114876 0 -0.08652 -0.000316013zm0.203605 -0.202621l-0.117993 0 0 0.0390151 0.130258 0 0 -0.0267546c0,-0.00674279 -0.00551779,-0.0122606 -0.0122641,-0.0122606zm-0.0301277 0.0975343l-0.0878657 0 0 0.0367569 0.100844 0 0 -0.0237791c0,-0.00713692 -0.00584091,-0.0129778 -0.0129778,-0.0129778z"/>
+  <path class="fil8" d="M0.271714 0.0839848c0.125503,-0.0325316 0.25395,0.0416853 0.286854,0.165775 0.0060504,0.0228168 0.00842582,0.0457544 0.00753815,0.0681771 -0.0837185,-0.0756371 -0.201769,-0.0740926 -0.301462,-0.0281287 -0.0558739,0.0247804 -0.100183,0.0671403 -0.130467,0.123025 -0.00236122,0.00361107 -0.00474729,0.00716177 -0.00711916,0.0107409 -0.00988871,-0.0172351 -0.0177216,-0.0359367 -0.0230405,-0.0559875 -0.0329115,-0.124072 0.042154,-0.251063 0.167696,-0.283602z"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons/Mozilla-Firefox.ico b/le-tour/images/icons/Mozilla-Firefox.ico
new file mode 100644
index 0000000000000000000000000000000000000000..1443ae5d6e06d6af1b886bb9281befe0c1a5c7a0
Binary files /dev/null and b/le-tour/images/icons/Mozilla-Firefox.ico differ
diff --git a/le-tour/images/icons/background-icons.png b/le-tour/images/icons/background-icons.png
new file mode 100644
index 0000000000000000000000000000000000000000..79226544564450a8f0df66286c146e5e9c44c8f6
Binary files /dev/null and b/le-tour/images/icons/background-icons.png differ
diff --git a/le-tour/images/icons/file-manager.png b/le-tour/images/icons/file-manager.png
new file mode 100644
index 0000000000000000000000000000000000000000..93384359e446d35f5f523921ec66e04d701f1511
Binary files /dev/null and b/le-tour/images/icons/file-manager.png differ
diff --git a/le-tour/images/icons/libreoffice-calc.png b/le-tour/images/icons/libreoffice-calc.png
new file mode 100644
index 0000000000000000000000000000000000000000..9614ca81d6af07ef50296a491708e7f1bdcea202
Binary files /dev/null and b/le-tour/images/icons/libreoffice-calc.png differ
diff --git a/le-tour/images/icons/libreoffice-writer.png b/le-tour/images/icons/libreoffice-writer.png
new file mode 100644
index 0000000000000000000000000000000000000000..3fa71f4dc140eef6005415d37557c973c8b61503
Binary files /dev/null and b/le-tour/images/icons/libreoffice-writer.png differ
diff --git "a/le-tour/images/icons_bar/LE_\303\255cone_ajuda.png" "b/le-tour/images/icons_bar/LE_\303\255cone_ajuda.png"
new file mode 100644
index 0000000000000000000000000000000000000000..8b08886d57c7dfe99f2061ba955b3e73de598bc1
Binary files /dev/null and "b/le-tour/images/icons_bar/LE_\303\255cone_ajuda.png" differ
diff --git a/le-tour/images/icons_bar/acessibilidade.png b/le-tour/images/icons_bar/acessibilidade.png
new file mode 100644
index 0000000000000000000000000000000000000000..121f6b82b7676363e0865a15fc11658ce6cd17f8
Binary files /dev/null and b/le-tour/images/icons_bar/acessibilidade.png differ
diff --git a/le-tour/images/icons_bar/acessibilidade.svg b/le-tour/images/icons_bar/acessibilidade.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d10b16fe30a57cbb6d2793f993a2e9d45789a749
--- /dev/null
+++ b/le-tour/images/icons_bar/acessibilidade.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <g id="layer11" transform="translate(-41.983 -381)">
+  <path id="path3850" style="fill:#bebebe" d="m49.983 381c-4.4183 0-8 3.5817-8 8s3.5817 8 8 8 8-3.5817 8-8-3.5817-8-8-8zm0 1.9432c1.1213 0 2.0301 0.9088 2.0301 2.0301s-0.9088 2.0301-2.0301 2.0301-2.0301-0.9088-2.0301-2.0301 0.9088-2.0301 2.0301-2.0301zm-4.7974 4.1202c3.2067-0.0458 6.4129-0.0154 9.6195 0.0113 0 0 0.43092-0.008 0.43092 0.42408v0.20861c0 0.23-0.236 0.29-0.236 0.29l-2.9852 0.57817v2.1109l1.3547 3.9064c0.1368 0.22572-0.15839 0.2902-0.15839 0.2902l-0.5265 0.005c-0.25317 0-0.34809-0.21303-0.34809-0.21303l-2.0718-3.5916c-0.22228-0.5041-0.23617-0.43981-0.44654 0.00077l-2.1689 3.5862c-0.07254 0.21764-0.3556 0.22239-0.3556 0.22239l-0.5703-0.009s-0.20848-0.006-0.16065-0.20918l1.3875-3.9888v-2.1109l-2.8919-0.5548c-0.23245-0.0787-0.32884-0.29434-0.32884-0.29434v-0.21764s-0.0097-0.44343 0.45567-0.44343z"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons_bar/find.png b/le-tour/images/icons_bar/find.png
new file mode 100644
index 0000000000000000000000000000000000000000..be2cbd4220860d3fcaac24f4aa70f18c2671572a
Binary files /dev/null and b/le-tour/images/icons_bar/find.png differ
diff --git a/le-tour/images/icons_bar/help.png b/le-tour/images/icons_bar/help.png
new file mode 100644
index 0000000000000000000000000000000000000000..8b08886d57c7dfe99f2061ba955b3e73de598bc1
Binary files /dev/null and b/le-tour/images/icons_bar/help.png differ
diff --git a/le-tour/images/icons_bar/rede.png b/le-tour/images/icons_bar/rede.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc8f1cc6b7e07dc9d3b8109044d4cd59764901b1
Binary files /dev/null and b/le-tour/images/icons_bar/rede.png differ
diff --git a/le-tour/images/icons_bar/rede.svg b/le-tour/images/icons_bar/rede.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ab829bac9ec2313d665e10557c62c5b65dbc8ab1
--- /dev/null
+++ b/le-tour/images/icons_bar/rede.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <g id="layer9" transform="translate(-181 -177)">
+  <path id="rect12675" style="block-progression:tb;text-indent:0;color:#bebebe;text-transform:none;fill:#bebebe" d="m185.75 177c-0.9522 0-1.75 0.7978-1.75 1.75v4.5c0 0.9522 0.7978 1.75 1.75 1.75h6.5c0.9522 0 1.75-0.7978 1.75-1.75v-4.5c0-0.9522-0.7978-1.75-1.75-1.75h-6.5zm0.25 2h6v4h-6v-4z"/>
+  <path id="path12677" style="block-progression:tb;text-indent:0;color:#bebebe;text-transform:none;fill:#bebebe" d="m186.38 184-0.28125 0.5625-1 2-0.71875 1.4375h1.625 6 1.625l-0.71875-1.4375-1-2-0.28-0.56h-0.62-4-0.625z"/>
+  <path id="path12679" style="block-progression:tb;text-indent:0;color:#bebebe;text-transform:none;fill:#bebebe" d="m188 186v4h2v-4h-2z"/>
+  <path id="path12681" style="block-progression:tb;text-indent:0;color:#bebebe;text-transform:none;fill:#bebebe" d="m183 190v2h12v-2h-12z"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons_bar/unselected/audio-volume-high-symbolic.svg b/le-tour/images/icons_bar/unselected/audio-volume-high-symbolic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1a70d4d3c19a3db8dafbdce6aae756ede4e073fa
--- /dev/null
+++ b/le-tour/images/icons_bar/unselected/audio-volume-high-symbolic.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <defs id="defs7386">
+  <clipPath id="clipPath6279-3">
+   <rect id="rect6281-9" style="color:#bebebe;fill:#bebebe" height="6.375" width="3.825" y="220.75" x="26.85"/>
+  </clipPath>
+  <clipPath id="clipPath6265-334">
+   <rect id="rect6267-61" style="color:#bebebe;fill:#bebebe" height="5.2159" width="2.8977" y="221.33" x="26.966"/>
+  </clipPath>
+  <clipPath id="clipPath6259-5">
+   <rect id="rect6261-61" style="color:#bebebe;fill:#bebebe" height="4.8735" width="1.8763" y="221.5" x="26.999"/>
+  </clipPath>
+ </defs>
+ <g id="layer9" transform="translate(-41 -197)">
+  <path id="path3718" style="block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m26.938 220.41a1.2751 1.2751 0 0 0 -0.65625 2.1875c0.75756 0.75756 0.75756 1.9299 0 2.6875a1.2816 1.2816 0 1 0 1.8125 1.8125c1.732-1.732 1.732-4.5805 0-6.3125a1.2751 1.2751 0 0 0 -1.1562 -0.375z" clip-path="url(#clipPath6279-3)" transform="matrix(.78431 0 0 .78431 26.941 28.863)"/>
+  <path id="path3726" style="block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m27.125 221.09a0.5796 0.5796 0 0 0 -0.34375 1c1.0233 1.0233 1.0233 2.6642 0 3.6875a0.5796 0.5796 0 1 0 0.8125 0.8125c1.4663-1.4663 1.4663-3.8462 0-5.3125a0.5796 0.5796 0 0 0 -0.46875 -0.1875z" clip-path="url(#clipPath6265-334)" transform="matrix(1.7255 0 0 1.7255 3.4708 -181.9)"/>
+  <path id="path3728" style="block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m27.062 221.31a0.37504 0.37504 0 0 0 -0.125 0.625c1.1015 1.1015 1.1015 2.8985 0 4a0.37565 0.37565 0 1 0 0.53125 0.53125c1.3881-1.3881 1.3881-3.6744 0-5.0625a0.37504 0.37504 0 0 0 -0.40625 -0.0937z" clip-path="url(#clipPath6259-5)" transform="matrix(2.6667 0 0 2.6667 -20 -392.67)"/>
+  <path id="path5491" style="color:#bebebe;fill:#bebebe" d="m41 202h2.4844l2.9688-3 0.54687 0.0156v11l-0.4753 0.00083-3.04-3.02h-2.4844v-5z"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons_bar/unselected/audio-volume-low-symbolic.svg b/le-tour/images/icons_bar/unselected/audio-volume-low-symbolic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..61bc380bf26478ac7ab38a356d65f716097efe35
--- /dev/null
+++ b/le-tour/images/icons_bar/unselected/audio-volume-low-symbolic.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <defs id="defs7386">
+  <clipPath id="clipPath6279-2-3" clipPathUnits="userSpaceOnUse">
+   <rect id="rect6281-5-3" style="color:#bebebe;fill:#bebebe" height="6.375" width="3.825" y="220.75" x="26.85"/>
+  </clipPath>
+  <clipPath id="clipPath6265-3-5-6" clipPathUnits="userSpaceOnUse">
+   <rect id="rect6267-1-8-1" style="color:#bebebe;fill:#bebebe" height="5.2159" width="2.8977" y="221.33" x="26.966"/>
+  </clipPath>
+  <clipPath id="clipPath6259-8-8-8" clipPathUnits="userSpaceOnUse">
+   <rect id="rect6261-6-0-7" style="color:#bebebe;fill:#bebebe" height="4.8735" width="1.8763" y="221.5" x="26.999"/>
+  </clipPath>
+ </defs>
+ <g id="layer9" transform="translate(-81 -197)">
+  <path id="path5545" style="color:#bebebe;fill:#bebebe" d="m81 202h2.4844l2.9688-3 0.54687 0.0156v11l-0.4753 0.00083-3.04-3.02h-2.4844v-5z"/>
+  <path id="path3718-9" style="block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m26.938 220.41a1.2751 1.2751 0 0 0 -0.65625 2.1875c0.75756 0.75756 0.75756 1.9299 0 2.6875a1.2816 1.2816 0 1 0 1.8125 1.8125c1.732-1.732 1.732-4.5805 0-6.3125a1.2751 1.2751 0 0 0 -1.1562 -0.375z" clip-path="url(#clipPath6279-2-3)" transform="matrix(.78431 0 0 .78431 66.941 28.863)"/>
+  <path id="path3726-1-5" style="opacity:.35;block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m27.125 221.09a0.5796 0.5796 0 0 0 -0.34375 1c1.0233 1.0233 1.0233 2.6642 0 3.6875a0.5796 0.5796 0 1 0 0.8125 0.8125c1.4663-1.4663 1.4663-3.8462 0-5.3125a0.5796 0.5796 0 0 0 -0.46875 -0.1875z" clip-path="url(#clipPath6265-3-5-6)" transform="matrix(1.7255 0 0 1.7255 43.471 -181.9)"/>
+  <path id="path3728-0-1" style="opacity:.35;block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m27.062 221.31a0.37504 0.37504 0 0 0 -0.125 0.625c1.1015 1.1015 1.1015 2.8985 0 4a0.37565 0.37565 0 1 0 0.53125 0.53125c1.3881-1.3881 1.3881-3.6744 0-5.0625a0.37504 0.37504 0 0 0 -0.40625 -0.0937z" clip-path="url(#clipPath6259-8-8-8)" transform="matrix(2.6667 0 0 2.6667 20 -392.67)"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons_bar/unselected/audio-volume-medium-symbolic.svg b/le-tour/images/icons_bar/unselected/audio-volume-medium-symbolic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7ce4ceb392baf9aee06816c2d453acd5378a31c3
--- /dev/null
+++ b/le-tour/images/icons_bar/unselected/audio-volume-medium-symbolic.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <defs id="defs7386">
+  <clipPath id="clipPath6279-7-9" clipPathUnits="userSpaceOnUse">
+   <rect id="rect6281-1-9" style="color:#bebebe;fill:#bebebe" height="6.375" width="3.825" y="220.75" x="26.85"/>
+  </clipPath>
+  <clipPath id="clipPath6265-3-4" clipPathUnits="userSpaceOnUse">
+   <rect id="rect6267-1-9" style="color:#bebebe;fill:#bebebe" height="5.2159" width="2.8977" y="221.33" x="26.966"/>
+  </clipPath>
+  <clipPath id="clipPath6259-8-81" clipPathUnits="userSpaceOnUse">
+   <rect id="rect6261-6-6" style="color:#bebebe;fill:#bebebe" height="4.8735" width="1.8763" y="221.5" x="26.999"/>
+  </clipPath>
+ </defs>
+ <g id="layer9" transform="translate(-61 -197)">
+  <path id="path5533" style="color:#bebebe;fill:#bebebe" d="m61 202h2.4844l2.9688-3 0.54687 0.0156v11l-0.4753 0.00083-3.04-3.02h-2.4844v-5z"/>
+  <path id="path3718-5" style="block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m26.938 220.41a1.2751 1.2751 0 0 0 -0.65625 2.1875c0.75756 0.75756 0.75756 1.9299 0 2.6875a1.2816 1.2816 0 1 0 1.8125 1.8125c1.732-1.732 1.732-4.5805 0-6.3125a1.2751 1.2751 0 0 0 -1.1562 -0.375z" clip-path="url(#clipPath6279-7-9)" transform="matrix(.78431 0 0 .78431 46.941 28.863)"/>
+  <path id="path3726-1" style="block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m27.125 221.09a0.5796 0.5796 0 0 0 -0.34375 1c1.0233 1.0233 1.0233 2.6642 0 3.6875a0.5796 0.5796 0 1 0 0.8125 0.8125c1.4663-1.4663 1.4663-3.8462 0-5.3125a0.5796 0.5796 0 0 0 -0.46875 -0.1875z" clip-path="url(#clipPath6265-3-4)" transform="matrix(1.7255 0 0 1.7255 23.471 -181.9)"/>
+  <path id="path3728-0" style="opacity:.35;block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m27.062 221.31a0.37504 0.37504 0 0 0 -0.125 0.625c1.1015 1.1015 1.1015 2.8985 0 4a0.37565 0.37565 0 1 0 0.53125 0.53125c1.3881-1.3881 1.3881-3.6744 0-5.0625a0.37504 0.37504 0 0 0 -0.40625 -0.0937z" clip-path="url(#clipPath6259-8-81)" transform="matrix(2.6667 0 0 2.6667 .0002 -392.67)"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons_bar/unselected/audio-volume-muted-symbolic.svg b/le-tour/images/icons_bar/unselected/audio-volume-muted-symbolic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..76dd2b28a96c85b2ce941cf2306d28fc5d374def
--- /dev/null
+++ b/le-tour/images/icons_bar/unselected/audio-volume-muted-symbolic.svg
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <defs id="defs7386">
+  <clipPath id="clipPath6279-2-3" clipPathUnits="userSpaceOnUse">
+   <rect id="rect6281-5-3" style="color:#bebebe;fill:#bebebe" height="6.375" width="3.825" y="220.75" x="26.85"/>
+  </clipPath>
+  <clipPath id="clipPath3668" clipPathUnits="userSpaceOnUse">
+   <rect id="rect3670" style="color:#bebebe;fill:#bebebe" height="3.3729" width="1.8763" y="221.5" x="26.999"/>
+  </clipPath>
+  <clipPath id="clipPath3697" clipPathUnits="userSpaceOnUse">
+   <path id="path3699" style="color:#bebebe;fill:#bebebe" d="m26.966 221.33v5.2159h0.57955v-1.1591h2.3182v-4.0568h-2.8977z"/>
+  </clipPath>
+ </defs>
+ <g id="layer9" transform="translate(-101 -197)">
+  <path id="path3268" style="opacity:.35;color:#bebebe;fill:#bebebe" d="m101 202h2.4844l2.9688-3 0.54687 0.0156v11l-0.4753 0.00083-3.0403-3.0164h-2.4844v-5z"/>
+  <path id="path3272" style="opacity:.35;block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m26.938 220.41a1.2751 1.2751 0 0 0 -0.65625 2.1875c0.75756 0.75756 0.75756 1.9299 0 2.6875a1.2816 1.2816 0 1 0 1.8125 1.8125c1.732-1.732 1.732-4.5805 0-6.3125a1.2751 1.2751 0 0 0 -1.1562 -0.375z" clip-path="url(#clipPath6279-2-3)" transform="matrix(.78431 0 0 .78431 86.941 28.863)"/>
+  <path id="path3274" style="opacity:.35;block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m27.125 221.09a0.5796 0.5796 0 0 0 -0.34375 1c1.0233 1.0233 1.0233 2.6642 0 3.6875a0.5796 0.5796 0 1 0 0.8125 0.8125c1.4663-1.4663 1.4663-3.8462 0-5.3125a0.5796 0.5796 0 0 0 -0.46875 -0.1875z" clip-path="url(#clipPath3697)" transform="matrix(1.7255 0 0 1.7255 63.471 -181.9)"/>
+  <path id="path3276" style="opacity:.35;block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m27.062 221.31a0.37504 0.37504 0 0 0 -0.125 0.625c1.1015 1.1015 1.1015 2.8985 0 4a0.37565 0.37565 0 1 0 0.53125 0.53125c1.3881-1.3881 1.3881-3.6744 0-5.0625a0.37504 0.37504 0 0 0 -0.40625 -0.0937z" clip-path="url(#clipPath3668)" transform="matrix(2.6667 0 0 2.6667 40 -392.67)"/>
+  <path id="path3761-2-3-5-4-8-9-8-0-1-7" style="color:#bebebe;fill:#bebebe" d="m112 208h1.375l1.125 1.0938 1.0938-1.0938h1.4062v1.4688l-1.0938 1.0625 1.0938 1.0625v1.4062h-1.4375l-1.0625-1.0625-1.0625 1.0625h-1.4375v-1.4062l1.0625-1.0625-1.0625-1.0625v-1.4688z"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons_bar/unselected/network-wired-symbolic.svg b/le-tour/images/icons_bar/unselected/network-wired-symbolic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ab829bac9ec2313d665e10557c62c5b65dbc8ab1
--- /dev/null
+++ b/le-tour/images/icons_bar/unselected/network-wired-symbolic.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <g id="layer9" transform="translate(-181 -177)">
+  <path id="rect12675" style="block-progression:tb;text-indent:0;color:#bebebe;text-transform:none;fill:#bebebe" d="m185.75 177c-0.9522 0-1.75 0.7978-1.75 1.75v4.5c0 0.9522 0.7978 1.75 1.75 1.75h6.5c0.9522 0 1.75-0.7978 1.75-1.75v-4.5c0-0.9522-0.7978-1.75-1.75-1.75h-6.5zm0.25 2h6v4h-6v-4z"/>
+  <path id="path12677" style="block-progression:tb;text-indent:0;color:#bebebe;text-transform:none;fill:#bebebe" d="m186.38 184-0.28125 0.5625-1 2-0.71875 1.4375h1.625 6 1.625l-0.71875-1.4375-1-2-0.28-0.56h-0.62-4-0.625z"/>
+  <path id="path12679" style="block-progression:tb;text-indent:0;color:#bebebe;text-transform:none;fill:#bebebe" d="m188 186v4h2v-4h-2z"/>
+  <path id="path12681" style="block-progression:tb;text-indent:0;color:#bebebe;text-transform:none;fill:#bebebe" d="m183 190v2h12v-2h-12z"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons_bar/unselected/selected.tar.gz b/le-tour/images/icons_bar/unselected/selected.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..c858ec63ab04dd6012b947dabc179f03dfdd7ef9
Binary files /dev/null and b/le-tour/images/icons_bar/unselected/selected.tar.gz differ
diff --git a/le-tour/images/icons_bar/unselected/user-available-symbolic.svg b/le-tour/images/icons_bar/unselected/user-available-symbolic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..be613454027c46490da28a022a5c618154862740
--- /dev/null
+++ b/le-tour/images/icons_bar/unselected/user-available-symbolic.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <g id="layer9" transform="translate(-41 -357)">
+  <path id="rect11261" style="color:#bebebe;fill:#bebebe" d="m44.688 358.06c-1.5235 0-2.75 1.2265-2.75 2.75v4.4375c0 1.5235 1.2265 2.75 2.75 2.75h6.3052l3.0533 3.985-0.07728-4.0787c1.2045-0.29284 2.0938-1.3591 2.0938-2.6562v-4.4375c0-1.5235-1.2265-2.75-2.75-2.75z"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons_bar/unselected/user-away-symbolic.svg b/le-tour/images/icons_bar/unselected/user-away-symbolic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bc453e2aec22d7daaadbb1121deb944dd6d72475
--- /dev/null
+++ b/le-tour/images/icons_bar/unselected/user-away-symbolic.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <g id="layer9" transform="translate(-141 -357)">
+  <path id="path12179" style="opacity:.35;color:#bebebe;fill:#bebebe" d="m144.69 358.06c-1.5235 0-2.75 1.2265-2.75 2.75v4.4375c0 1.5235 1.2265 2.75 2.75 2.75h6.3125l2.9688 4.0625v-4.1562c1.2045-0.29284 2.0938-1.3591 2.0938-2.6562v-4.4375c0-1.5235-1.2265-2.75-2.75-2.75h-8.625zm4.3125 1.9375h1c0.27614 0 0.53779 0.10029 0.71875 0.28125l2 2 0.6875 0.71875-0.6875 0.71875-2 2c-0.18 0.18-0.44 0.28-0.72 0.28h-1v-1c0-0.27614 0.10029-0.53779 0.28125-0.71875l0.28-0.28h-4.5625v-2h4.5625l-0.28125-0.28125c-0.18-0.18-0.28-0.44-0.28-0.72v-1z"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons_bar/unselected/user-busy-symbolic.svg b/le-tour/images/icons_bar/unselected/user-busy-symbolic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c356482ff1facc14d84e8558873ec5cdb025a01e
--- /dev/null
+++ b/le-tour/images/icons_bar/unselected/user-busy-symbolic.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <g id="layer9" transform="translate(-121 -357)">
+  <path id="path12165" style="color:#bebebe;fill:#bebebe" d="m124.75 358.06c-1.5235 0-2.75 1.2265-2.75 2.75v4.4375c0 1.5235 1.2265 2.75 2.75 2.75h6.25l3 4.0625-0.0312-4.1562c1.2045-0.29284 2.0312-1.3591 2.0312-2.6562v-4.4375c0-1.5235-1.164-2.75-2.6875-2.75h-8.5625zm1.25 3.9375h6v2h-6v-2z"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons_bar/unselected/user-idle-symbolic.svg b/le-tour/images/icons_bar/unselected/user-idle-symbolic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..31476ead73a1dde02ecd977b1f07a96f5f2bd766
--- /dev/null
+++ b/le-tour/images/icons_bar/unselected/user-idle-symbolic.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <g id="layer9" transform="translate(-81 -357)">
+  <path id="path12110" style="opacity:.35;color:#bebebe;fill:#bebebe" d="m84.688 358.06c-1.2395 0-2.2793 0.81431-2.625 1.9375h12.937v4.9835h-12.998l0.06 1.02c0.32679 1.1538 1.3638 2 2.625 2h6.3125l2.9671 4 0.0017-4.0938c1.2045-0.29284 2.0938-1.3591 2.0938-2.6562v-4.4375c0-1.5235-1.2265-2.75-2.75-2.75z"/>
+  <path id="path4955-3-5" style="fill:#bebebe" d="m29 209a1 1 0 1 1 -2 0 1 1 0 1 1 2 0z" transform="matrix(1.5,0,0,1.5,42.5,49)"/>
+  <path id="path4957-3-7" style="fill:#bebebe" d="m29 209a1 1 0 1 1 -2 0 1 1 0 1 1 2 0z" transform="matrix(1.5,0,0,1.5,46.5,49)"/>
+  <path id="path4959-7-4" style="fill:#bebebe" d="m29 209a1 1 0 1 1 -2 0 1 1 0 1 1 2 0z" transform="matrix(1.5 0 0 1.5 50.5 49)"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons_bar/unselected/user-invisible-symbolic.svg b/le-tour/images/icons_bar/unselected/user-invisible-symbolic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..70a0e787c2222cdd9a14406e5f955cb95d59d8dc
--- /dev/null
+++ b/le-tour/images/icons_bar/unselected/user-invisible-symbolic.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <g id="layer9" transform="translate(-101,-357)">
+  <path id="path12148" style="block-progression:tb;text-indent:0;color:#bebebe;text-transform:none;fill:#bebebe" d="m104.75 357.06c-2.0602 0-3.75 1.6898-3.75 3.75v4.4375c0 2.0602 1.6898 3.75 3.75 3.75h4.9375l3.75 2.6562 1.5938 1.125v-1.9688l-0.0313-2.5c1.1106-0.59715 1.9688-1.6526 1.9688-3.0625v-4.4375c0-2.0602-1.6898-3.75-3.75-3.75h-8.4688zm0 2h8.4688c0.9868 0 1.75 0.7632 1.75 1.75v4.4375c0 0.86273-0.63508 1.541-1.125 1.625l-0.84 0.12v0.84375 1.0312l-2.4062-1.6875-0.25-0.1875h-0.3125-5.2812c-0.9868 0-1.75-0.7632-1.75-1.75v-4.4375c0-0.9868 0.7632-1.75 1.75-1.75z"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons_bar/unselected/user-offline-symbolic.svg b/le-tour/images/icons_bar/unselected/user-offline-symbolic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..9503075048d11690e4fc201735a11030ea1a8a2c
--- /dev/null
+++ b/le-tour/images/icons_bar/unselected/user-offline-symbolic.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <g id="layer9" transform="translate(-61 -357)">
+  <path id="rect11261-1" style="opacity:.35;color:#bebebe;fill:#bebebe" d="m64.688 358.06c-1.5235 0-2.75 1.2265-2.75 2.75v4.4375c0 1.5235 1.2265 2.75 2.75 2.75h6.3125l3.0312 4-0.0625-4.0938c1.2045-0.29284 2.0938-1.3591 2.0938-2.6562v-4.4375c0-1.5235-1.2265-2.75-2.75-2.75h-8.625zm1.3125 1.9375h1c0.27614 0 0.53779 0.10029 0.71875 0.28125l1.2812 1.2812 1.2812-1.2812c0.181-0.18 0.443-0.28 0.719-0.28h1v1c0 0.27614-0.10029 0.53779-0.28125 0.71875l-1.281 1.28 1.2812 1.2812c0.18096 0.18096 0.28125 0.44261 0.28125 0.71875v1h-1c-0.27614 0-0.53779-0.10029-0.71875-0.28125l-1.2812-1.2812-1.2812 1.2812c-0.181 0.18-0.443 0.28-0.719 0.28h-1v-1c0-0.27614 0.10029-0.53779 0.28125-0.71875l1.282-1.28-1.282-1.28c-0.181-0.18-0.281-0.44-0.281-0.72v-1z"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons_bar/user-available.png b/le-tour/images/icons_bar/user-available.png
new file mode 100644
index 0000000000000000000000000000000000000000..cf7d797f1f8df3c32a8cd6a6757b1d8ceb78d7bb
Binary files /dev/null and b/le-tour/images/icons_bar/user-available.png differ
diff --git a/le-tour/images/icons_bar/user-available.svg b/le-tour/images/icons_bar/user-available.svg
new file mode 100644
index 0000000000000000000000000000000000000000..be613454027c46490da28a022a5c618154862740
--- /dev/null
+++ b/le-tour/images/icons_bar/user-available.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <g id="layer9" transform="translate(-41 -357)">
+  <path id="rect11261" style="color:#bebebe;fill:#bebebe" d="m44.688 358.06c-1.5235 0-2.75 1.2265-2.75 2.75v4.4375c0 1.5235 1.2265 2.75 2.75 2.75h6.3052l3.0533 3.985-0.07728-4.0787c1.2045-0.29284 2.0938-1.3591 2.0938-2.6562v-4.4375c0-1.5235-1.2265-2.75-2.75-2.75z"/>
+ </g>
+</svg>
diff --git a/le-tour/images/icons_bar/volume.png b/le-tour/images/icons_bar/volume.png
new file mode 100644
index 0000000000000000000000000000000000000000..86c2400037ba79010f9153d36c43e41d94333a99
Binary files /dev/null and b/le-tour/images/icons_bar/volume.png differ
diff --git a/le-tour/images/icons_bar/volume.svg b/le-tour/images/icons_bar/volume.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1a70d4d3c19a3db8dafbdce6aae756ede4e073fa
--- /dev/null
+++ b/le-tour/images/icons_bar/volume.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <defs id="defs7386">
+  <clipPath id="clipPath6279-3">
+   <rect id="rect6281-9" style="color:#bebebe;fill:#bebebe" height="6.375" width="3.825" y="220.75" x="26.85"/>
+  </clipPath>
+  <clipPath id="clipPath6265-334">
+   <rect id="rect6267-61" style="color:#bebebe;fill:#bebebe" height="5.2159" width="2.8977" y="221.33" x="26.966"/>
+  </clipPath>
+  <clipPath id="clipPath6259-5">
+   <rect id="rect6261-61" style="color:#bebebe;fill:#bebebe" height="4.8735" width="1.8763" y="221.5" x="26.999"/>
+  </clipPath>
+ </defs>
+ <g id="layer9" transform="translate(-41 -197)">
+  <path id="path3718" style="block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m26.938 220.41a1.2751 1.2751 0 0 0 -0.65625 2.1875c0.75756 0.75756 0.75756 1.9299 0 2.6875a1.2816 1.2816 0 1 0 1.8125 1.8125c1.732-1.732 1.732-4.5805 0-6.3125a1.2751 1.2751 0 0 0 -1.1562 -0.375z" clip-path="url(#clipPath6279-3)" transform="matrix(.78431 0 0 .78431 26.941 28.863)"/>
+  <path id="path3726" style="block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m27.125 221.09a0.5796 0.5796 0 0 0 -0.34375 1c1.0233 1.0233 1.0233 2.6642 0 3.6875a0.5796 0.5796 0 1 0 0.8125 0.8125c1.4663-1.4663 1.4663-3.8462 0-5.3125a0.5796 0.5796 0 0 0 -0.46875 -0.1875z" clip-path="url(#clipPath6265-334)" transform="matrix(1.7255 0 0 1.7255 3.4708 -181.9)"/>
+  <path id="path3728" style="block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m27.062 221.31a0.37504 0.37504 0 0 0 -0.125 0.625c1.1015 1.1015 1.1015 2.8985 0 4a0.37565 0.37565 0 1 0 0.53125 0.53125c1.3881-1.3881 1.3881-3.6744 0-5.0625a0.37504 0.37504 0 0 0 -0.40625 -0.0937z" clip-path="url(#clipPath6259-5)" transform="matrix(2.6667 0 0 2.6667 -20 -392.67)"/>
+  <path id="path5491" style="color:#bebebe;fill:#bebebe" d="m41 202h2.4844l2.9688-3 0.54687 0.0156v11l-0.4753 0.00083-3.04-3.02h-2.4844v-5z"/>
+ </g>
+</svg>
diff --git a/le-tour/images/le_logo.png b/le-tour/images/le_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..0ef580d28b697a7a94d9dbff9fd4f408eed846ae
Binary files /dev/null and b/le-tour/images/le_logo.png differ
diff --git a/le-tour/images/loading/le-background-w.png b/le-tour/images/loading/le-background-w.png
new file mode 100755
index 0000000000000000000000000000000000000000..4d441d4d705e51e3a1ceeee33e7bc8b1f1997f50
Binary files /dev/null and b/le-tour/images/loading/le-background-w.png differ
diff --git a/le-tour/images/loading/le-background.png b/le-tour/images/loading/le-background.png
new file mode 100755
index 0000000000000000000000000000000000000000..0ac299b971b5160c13e5d7a7a9bfcc98078e2db1
Binary files /dev/null and b/le-tour/images/loading/le-background.png differ
diff --git a/le-tour/images/loading/le-dot-off.png b/le-tour/images/loading/le-dot-off.png
new file mode 100644
index 0000000000000000000000000000000000000000..76d284f7a926e666a0386ffe935cf3db29990515
Binary files /dev/null and b/le-tour/images/loading/le-dot-off.png differ
diff --git a/le-tour/images/loading/le-dot-on.png b/le-tour/images/loading/le-dot-on.png
new file mode 100644
index 0000000000000000000000000000000000000000..ccc8c43fd6dd3c09ea8726062c9f94eb3974b4b4
Binary files /dev/null and b/le-tour/images/loading/le-dot-on.png differ
diff --git a/le-tour/images/loading/le-logo.grub b/le-tour/images/loading/le-logo.grub
new file mode 100644
index 0000000000000000000000000000000000000000..f2b8f2c2ebee375d3fca018be168d9e58b13fbfc
--- /dev/null
+++ b/le-tour/images/loading/le-logo.grub
@@ -0,0 +1,3 @@
+if background_color 0,0,0; then
+  clear
+fi
diff --git a/le-tour/images/loading/le-logo.plymouth b/le-tour/images/loading/le-logo.plymouth
new file mode 100644
index 0000000000000000000000000000000000000000..297f249b5ba2d4620f9e78f5d0ea7d99bde90730
--- /dev/null
+++ b/le-tour/images/loading/le-logo.plymouth
@@ -0,0 +1,8 @@
+[Plymouth Theme]
+Name=LE Logo
+Description=A theme that features a blank background with a logo.
+ModuleName=script
+
+[script]
+ImageDir=/lib/plymouth/themes/le-logo
+ScriptFile=/lib/plymouth/themes/le-logo/le-logo.script
diff --git a/le-tour/images/loading/le-logo.png b/le-tour/images/loading/le-logo.png
new file mode 100755
index 0000000000000000000000000000000000000000..c14b96ecfb720c8c7623d7320a363029bc6f065c
Binary files /dev/null and b/le-tour/images/loading/le-logo.png differ
diff --git a/le-tour/images/loading/le-logo.script b/le-tour/images/loading/le-logo.script
new file mode 100644
index 0000000000000000000000000000000000000000..b1f7202ff2e1ec8e690c7c437074c0ead10faf7c
--- /dev/null
+++ b/le-tour/images/loading/le-logo.script
@@ -0,0 +1,1068 @@
+#  ubuntu-logo.script - boot splash plugin
+# 
+#  Copyright (C) 2009 Canonical Ltd.
+# 
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2, or (at your option)
+#  any later version.
+# 
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+# 
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+#  02111-1307, USA.
+# 
+#  Written by: Alberto Milone <alberto.milone@canonical.com>
+#
+#  Based on the example provided with the "script plugin" written by:
+#              Charlie Brej   <cbrej@cs.man.ac.uk>
+# 
+
+# Set the text colour in (rgb / 256)
+text_colour.red = 1.0;
+text_colour.green = 1.0;
+text_colour.blue = 1.0;
+
+# Tinted text #988592
+tinted_text_colour.red = 0.59;
+tinted_text_colour.green = 0.52;
+tinted_text_colour.blue = 0.57;
+
+# Action Text - #ffffff - RGB 255 255 255
+action_text_colour.red = 1.0;
+action_text_colour.green = 1.0;
+action_text_colour.blue = 1.0;
+
+# Orange - #ff4012 - RGB 255 64 18
+debugsprite = Sprite();
+debugsprite_bottom = Sprite();
+debugsprite_medium = Sprite();
+
+# are we currently prompting for a password?
+prompt_active = 0;
+
+# General purpose function to create text
+fun WriteText (text, colour) {
+    image = Image.Text (text, colour.red, colour.green, colour.blue);
+    return image;
+}
+
+fun ImageToText (text) {
+    image = WriteText (text, text_colour);
+    return image;
+}
+
+fun ImageToTintedText (text) {
+    image = WriteText (text, tinted_text_colour);
+    return image;
+}
+
+fun ImageToActionText (text) {
+    image = WriteText (text, action_text_colour);
+    return image;
+}
+
+fun Debug(text) {
+    debugsprite.SetImage(ImageToText (text));
+}
+
+fun DebugBottom(text) {
+    debugsprite_bottom.SetImage(ImageToText (text));
+    debugsprite_bottom.SetPosition(0, (Window.GetHeight (0) - 20), 1);
+}
+
+fun DebugMedium(text) {
+    debugsprite_medium.SetImage(ImageToText (text));
+    debugsprite_medium.SetPosition(0, (Window.GetHeight (0) - 60), 1);
+}
+
+fun TextYOffset() {
+    local.y;
+    local.text_height;
+    local.min_height;
+
+    # Put the 1st line below the logo + some spacing 
+    y = logo.y + logo.height + (progress_indicator.bullet_height * 7 ); # + logo_spacing;
+
+    text_height = first_line_height * 7.5;
+
+    min_height = Window.GetHeight();
+    if (y + text_height > min_height)
+        y = min_height - text_height;
+
+    if (y < progress_indicator.y + progress_indicator.height)
+        return progress_indicator.y + progress_indicator.height;
+    return y;
+}
+
+#------------------------------String functions-------------------------------
+
+# This is the equivalent for strstr()
+fun StringString(string, substring) {
+    start = 0;
+    while (String(string).CharAt (start)) {
+        walk = 0;
+        while (String(substring).CharAt (walk) == String(string).CharAt (start + walk) ) {
+            walk++;
+            if (!String(substring).CharAt (walk)) return start;
+        }
+        start++;
+    }
+    
+    return NULL;
+}
+
+fun StringLength (string) {
+    index = 0;
+    while (String(string).CharAt(index)) index++;
+    return index;
+}
+
+fun StringCopy (source, beginning, end) {
+    local.destination = "";
+    for (index = beginning; ( ( (end == NULL) || (index <= end) ) && (String(source).CharAt(index)) ); index++) {
+        local.destination += String(source).CharAt(index);
+    }
+    
+    return local.destination;
+}
+
+fun StringReplace (source, pattern, replacement) {
+    local.found = StringString(source, pattern);
+    if (local.found == NULL)
+        return source;
+
+    local.new_string = StringCopy (source, 0, local.found - 1) +
+                       replacement +
+                       StringCopy (source, local.found + StringLength(pattern), NULL);
+
+    return local.new_string;
+}
+
+# it makes sense to use it only for
+# numbers up to 100
+fun StringToInteger (str) {
+    int = -1;
+    for (i=0; i<=100; i++) {
+        if (i+"" == str) {
+            int = i;
+            break;
+        }
+    }
+    return int;
+}
+
+#-----------------------------------------------------------------------------
+# Previous background colour
+# #300a24 --> 0.19, 0.04, 0.14
+# New background colour
+# #2c001e --> 0.17, 0.00, 0.12
+#
+#Window.SetBackgroundTopColor (0.17, 0.00, 0.12);     # Nice colour on top of the screen fading to
+#Window.SetBackgroundBottomColor (0.17, 0.00, 0.12);  # an equally nice colour on the bottom
+
+
+screen_width = Window.GetWidth();
+screen_height = Window.GetHeight();
+if ( ( screen_height / (screen_width * 4) ) == 3 )
+{
+    bg_image = Image("le-background.png");
+}
+else
+{
+    bg_image = Image("le-background-w.png");
+}
+
+bg_sprite = Sprite(bg_image);
+resized_bg_image = bg_image.Scale(screen_width, screen_height);
+# bg_sprite.SetImage(resized_bg_image);
+
+# bits_per_pixel = Window.GetBitsPerPixel ();
+
+logo_filename = "le-logo.png";
+progress_dot_off_filename = "le-dot-off.png";
+progress_dot_on_filename = "le-dot-on.png";
+password_field_filename = "password_field.png";
+
+logo.image = Image (logo_filename);
+logo.sprite = Sprite ();
+logo.sprite.SetImage (logo.image);
+logo.width = logo.image.GetWidth ();
+logo.height = logo.image.GetHeight ();
+logo.x = Window.GetX () + Window.GetWidth () / 2 - logo.width  / 2;
+logo.y = Window.GetY () + Window.GetHeight () / 2 - logo.height;
+logo.z = 1000;
+logo.sprite.SetX (logo.x);
+logo.sprite.SetY (logo.y);
+logo.sprite.SetZ (logo.z);
+logo.sprite.SetOpacity (1);
+
+# Spacing below the logo - in pixels
+logo_spacing = logo.height * 4;
+
+message_notification[0].image = ImageToTintedText ("");
+message_notification[1].image = ImageToTintedText ("");
+fsck_notification.image = ImageToActionText ("");
+
+status = "normal";
+
+progress_indicator.bullet_off = Image (progress_dot_off_filename);
+progress_indicator.bullet_on = Image (progress_dot_on_filename);
+progress_indicator.bullet_width = progress_indicator.bullet_off.GetWidth ();
+progress_indicator.bullet_height = progress_indicator.bullet_off.GetHeight ();
+progress_indicator.bullet_hspacing = progress_indicator.bullet_width * 1.1;
+progress_indicator.width = progress_indicator.bullet_width * 5;
+progress_indicator.height = progress_indicator.bullet_height;
+progress_indicator.y = logo.y + logo.height + (logo.height / 4);
+progress_indicator.x = Window.GetX () + Window.GetWidth () / 2 - progress_indicator.width / 2; # logo.x + 26;
+
+# use a fixed string with ascending and descending stems to calibrate the
+# bounding box for the first message, so the messages below don't move up
+# and down according to *their* height.
+first_line_height = ImageToTintedText ("AfpqtM").GetHeight();
+
+# if the user has a 640x480 or 800x600 display, we can't quite fit everything
+# (including passphrase prompts) with the target spacing, so scoot the text up
+# a bit if needed.
+top_of_the_text = TextYOffset();
+
+#-----------------------------------------Logo functions------------------------------
+
+# Call this when updating the screen
+fun draw_logo () {
+    logo.sprite.SetX (logo.x);
+    logo.sprite.SetY (logo.y);
+    logo.sprite.SetZ (logo.z);
+    logo.sprite.SetOpacity (1);
+}
+
+
+#-----------------------------------------Progress Indicator--------------------------
+fun set_progress_indicator () {
+    
+    
+    # Here we assume that we can store half bullets on each half of the screen
+    # together with some spacing
+    local.x = progress_indicator.x;
+    
+    for (index = 0; index <= 4; index++) {
+        # Set the "off" bullets
+        progress_indicator.bullets_off[index].sprite = Sprite (progress_indicator.bullet_off);
+        progress_indicator.bullets_off[index].sprite.SetPosition (local.x, progress_indicator.y, 1000);
+        progress_indicator.bullets_off[index].x = local.x;
+        progress_indicator.bullets_off[index].y = progress_indicator.y;
+        progress_indicator.bullets_off[index].sprite.SetOpacity (1);
+        
+        #local.debug_medium_string = "Progress indicator " + index + ": x = " + progress_indicator.bullets_off[index].x +
+        #                  ", y = " + progress_indicator.bullets_off[index].y  + ", logo width = " + logo.width +
+        #                  ", logo height = " + logo.height + " " + screen_width + " " + screen_height;
+        #   
+        #(index % 2) && DebugMedium (local.debug_medium_string) || DebugBottom (local.debug_medium_string);
+
+        # Set the "on" bullets on top of the "off" bullets and make them transparent
+        progress_indicator.bullets_on[index].sprite = Sprite (progress_indicator.bullet_on);
+        progress_indicator.bullets_on[index].x = progress_indicator.bullets_off[index].x;
+        progress_indicator.bullets_on[index].y = progress_indicator.bullets_off[index].y;
+        progress_indicator.bullets_on[index].sprite.SetPosition (progress_indicator.bullets_on[index].x, progress_indicator.bullets_on[index].y, 10000);
+
+        progress_indicator.bullets_on[index].sprite.SetOpacity (0);
+        
+        local.x += progress_indicator.bullet_hspacing;
+    }
+    #local.debug_string = "Progress indicator: x1 = " + progress_indicator.x + ", x2 = " + local.x + ", y = " + progress_indicator.y +
+    #                      ", x logo = " + logo.x + ", y logo = " + logo.y + ", indicator width = " + progress_indicator.width;
+    #Debug(progress_indicator.bullets_off[0].x);
+}
+
+
+# We have 2 bullets, one on top of the other:
+# The white one is on top of the red one and the former should
+# slowly fade so as to get a nice transition effect.
+fun switch_on_bullet (bullets_off, bullets_on, bullet_number, opacity) {
+    local.x = bullets_on[bullet_number].x;
+    local.y = bullets_on[bullet_number].y;
+    local.z = bullets_on[bullet_number].z;
+    
+    # Hide the bullets which are off
+    bullets_off[bullet_number].sprite.SetOpacity (0);
+    
+    # Show the bullets which are on
+    bullets_on[bullet_number].sprite.SetPosition (local.x, local.y, local.z);
+    bullets_on[bullet_number].sprite.SetOpacity (opacity);
+    
+    # Bump the number of times we have switched on bullets
+    global.times_bullets_switched++;
+}
+
+fun switch_off_bullets () {
+    # Debug("Switching off progress indicator");
+    
+    set_progress_indicator ();
+    global.times_bullets_switched = 0;
+    global.on_off = 1;
+}
+
+# This is something that we can call when we exit
+fun switch_on_bullets () {
+    # Debug("Switching off progress indicator");
+    if (!global.progress_indicator.bullets_on) set_progress_indicator ();
+    local = global.progress_indicator;
+
+    for (index = 0; bullets_on[index]; index++) {
+        switch_on_bullet (bullets_off, bullets_on, index, 1.0);
+    }
+}
+
+
+# Implement in boot progress callback
+fun animate_progress_indicator (progress, time) {
+    if (global.progress_time == NULL) {
+        global.progress_time = progress;  #time;
+        switch_off_bullets ();
+    }
+
+#    Debug ("progress = " + progress + ", time = " + time + " times switched = " + global.times_bullets_switched + " on_off " + global.on_off);
+
+#    if (global.times_bullets_switched == NULL)
+#        global.times_bullets_switched = 5;
+
+#    if (global.on_off == NULL)
+#        global.on_off = 0;
+
+    if ((progress - global.progress_time) >= 1.0) {
+        global.progress_time = progress;
+        
+        if (global.times_bullets_switched == 5) {
+            # Change which bullets are switched on
+            # and which ones are switched off
+            global.on_off = !global.on_off;
+            global.times_bullets_switched = 0;
+        }
+        
+        if (global.on_off) {
+            switch_on_bullet (progress_indicator.bullets_off, progress_indicator.bullets_on,
+                              global.times_bullets_switched, 1.0);
+        }
+        else {
+            switch_on_bullet (progress_indicator.bullets_on, progress_indicator.bullets_off,
+                              global.times_bullets_switched, 1.0);
+        }
+    }
+    
+    
+    # Start setting bullets to "on" with translucency
+#    for (index = 0; index <= 5; index++) {
+#        opacity = 0.0;
+#        while (opacity <= 1.0) {
+#            switch_on_bullet (progress_indicator.bullets_off, progress_indicator.bullets_on,
+#                              index, opacity);
+#            opacity += 0.1;
+#        }
+#    }
+}
+
+
+#-----------------------------------------Label utility functions---------------------
+
+# label should be either a string or NULL
+# Images for n lines will be created and returned as items of the
+# message_label array
+#
+fun get_message_label (label, is_fake, is_action_line) {
+    # Debug("Get Label position");
+    local.message_label;
+    
+    if (is_fake)
+        # Create a fake label so as to get the y coordinate of
+        # a standard-length label.
+        local.message_image = ImageToTintedText ("This is a fake message");
+    else
+        local.message_image = (is_action_line) && ImageToActionText (label) || ImageToTintedText (label);
+        
+    message_label.width = message_image.GetWidth ();
+    message_label.height = message_image.GetHeight ();
+
+    # Center the line horizontally
+    message_label.x = Window.GetX () + Window.GetWidth () / 2 - message_label.width / 2;
+
+    message_label.y = top_of_the_text;
+
+    # Put the 2nd line below the fsck line
+    if (is_action_line) {
+        local.fsck_label.y = message_label.y + (first_line_height + first_line_height / 2);
+        message_label.y = local.fsck_label.y + (first_line_height * 2);
+    }
+
+    # Debug("action label x = " + message_label.x + " y = " + message_label.y );
+
+#    message_debug = "msg_x = " + message_label.x + " msg_y = " + message_label.y +
+#                    "msg_width = " + message_label.width + " msg_height = " +
+#                    message_label.height + " message = " + label;
+#    Debug(message_debug);
+    
+    return message_label;
+
+}
+
+# Create an fsck label and/or get its position
+fun get_fsck_label (label, is_fake) {
+    # Debug("Get Label position");
+    local.fsck_label = global.progress_label;
+    
+    if (is_fake)
+        fsck_label.image = ImageToTintedText ("This is a fake message");
+    else
+        fsck_label.image = ImageToTintedText (label);
+    
+    fsck_label.width = fsck_label.image.GetWidth ();
+    fsck_label.height = fsck_label.image.GetHeight ();
+    
+    # Centre the label horizontally
+    fsck_label.x = Window.GetX () + Window.GetWidth () / 2 - fsck_label.width / 2;
+    
+    local.first_label = get_message_label (label, 1, 0);
+    
+    # Place the label below the 1st message line
+    fsck_label.y = local.first_label.y + local.first_label.height + (local.first_label.height / 2);
+    
+#    message_debug = "msg_x = " + fsck_label.x + " msg_y = " + fsck_label.y +
+#                    "msg_width = " + fsck_label.width + " msg_height = " +
+#                    fsck_label.height + " message = " + label;
+#    Debug(message_debug);
+    
+    return fsck_label;
+}
+
+#-----------------------------------------Message stuff --------------------------------
+#
+
+# Set up a message label
+#
+# NOTE: this is called when doing something like 'plymouth message "hello world"'
+#
+fun setup_message (message_text, x, y, z, index) {
+    # Debug("Message setup");
+    global.message_notification[index].image = (index) && ImageToActionText (message_text) || ImageToTintedText (message_text);
+
+    # Set up the text message, if any
+    message_notification[index].x = x;
+    message_notification[index].y = y;
+    message_notification[index].z = z;
+    
+    message_notification[index].sprite = Sprite ();
+    message_notification[index].sprite.SetImage (message_notification[index].image);
+    message_notification[index].sprite.SetX (message_notification[index].x);
+    message_notification[index].sprite.SetY (message_notification[index].y);
+    message_notification[index].sprite.SetZ (message_notification[index].z);
+
+}
+
+fun show_message (index) {
+    if (global.message_notification[index].sprite) global.message_notification[index].sprite.SetOpacity(1);
+}
+
+fun hide_message (index) {
+    if (global.message_notification[index].sprite) global.message_notification[index].sprite.SetOpacity(0);
+}
+
+
+
+
+# the callback function is called when new message should be displayed.
+# First arg is message to display.
+fun message_callback (message)
+{
+    # Debug("Message callback");
+    is_fake = 0;
+    if (!message || (message == "")) is_fake = 1;
+    
+    local.substring = "keys:";
+    
+    # Look for the "keys:" prefix
+    local.keys = StringString(message, local.substring);
+    
+    local.is_action_line = (keys != NULL);
+    #Debug("keys " + local.keys + " substring length = " + StringLength(local.substring));
+
+    # Get the message without the "keys:" prefix
+    if (keys != NULL)
+        message = StringCopy (message, keys + StringLength(local.substring), NULL);
+
+    local.label.is_fake = is_fake;
+    label = get_message_label(message, is_fake, is_action_line);
+    label.z = 10000;
+    
+    setup_message (message, label.x, label.y, label.z, is_action_line);
+    if (prompt_active && local.is_action_line)
+        hide_message (is_action_line);
+    else
+        show_message (is_action_line);
+
+}
+
+
+#-----------------------------------------Display Password stuff -----------------------
+#
+
+fun password_dialogue_setup (message_label) {
+    # Debug("Password dialog setup");
+    
+    local.entry;
+    local.bullet_image;
+    
+    bullet_image = Image (progress_dot_off_filename);
+    entry.image = Image (password_field_filename);
+    
+    # Hide the normal labels
+    prompt_active = 1;
+    if (message_notification[1].sprite) hide_message (1);
+    
+    # Set the prompt label
+    label = get_message_label(message_label, 0, 1);
+    label.z = 10000;
+    
+    setup_message (message_label, label.x, label.y, label.z, 2);
+    show_message (2);
+
+    # Set up the text entry which contains the bullets
+    entry.sprite = Sprite ();
+    entry.sprite.SetImage (entry.image);
+    
+    # Centre the box horizontally
+    entry.x = Window.GetX () + Window.GetWidth () / 2 - entry.image.GetWidth () / 2;
+
+    # Put the entry below the second label.
+    entry.y = message_notification[2].y + label.height;
+
+    #Debug ("entry x = " + entry.x + ", y = " + entry.y);
+    entry.z = 10000;
+    entry.sprite.SetX (entry.x);
+    entry.sprite.SetY (entry.y);
+    entry.sprite.SetZ (entry.z);
+
+    global.password_dialogue = local;
+}
+
+fun password_dialogue_opacity (opacity) {
+    # Debug("Password dialog opacity");
+    global.password_dialogue.opacity = opacity;
+    local = global.password_dialogue;
+
+    # You can make the box translucent with a float
+    # entry.sprite.SetOpacity (0.3);
+    entry.sprite.SetOpacity (opacity);
+    label.sprite.SetOpacity (opacity);
+    
+    if (bullets) {
+        for (index = 0; bullets[index]; index++) {
+            bullets[index].sprite.SetOpacity (opacity);
+        }
+    }
+}
+
+
+# The callback function is called when the display should display a password dialogue.
+# First arg is prompt string, the second is the number of bullets.
+fun display_password_callback (prompt, bullets) {
+    # Debug("Password dialog setup");
+    
+    global.status = "password";
+    if (!global.password_dialogue) password_dialogue_setup(prompt);
+    password_dialogue_opacity (1);
+    bullet_width = password_dialogue.bullet_image.GetWidth();
+    bullet_y = password_dialogue.entry.y +
+               password_dialogue.entry.image.GetHeight () / 2 -
+               password_dialogue.bullet_image.GetHeight () / 2;
+    margin = bullet_width;
+    spaces = Math.Int( (password_dialogue.entry.image.GetWidth () - (margin * 2)) / (bullet_width / 2 ) );
+    #Debug ("spaces = " + spaces + ", bullets = " + bullets);
+    bullets_area.width = margin + spaces * (bullet_width / 2);
+    bullets_area.x = Window.GetX () + Window.GetWidth () / 2 - bullets_area.width / 2;
+    #DebugBottom ("pwd_entry x = " + password_dialogue.entry.x + ", bullets_area.x = " + bullets_area.x + ", bullets_area.width = " + bullets_area.width);
+    if (bullets > spaces)
+        bullets = spaces;
+    for (index = 0; password_dialogue.bullets[index] || index < bullets; index++){
+        if (!password_dialogue.bullets[index]) {
+            password_dialogue.bullets[index].sprite = Sprite ();
+            password_dialogue.bullets[index].sprite.SetImage (password_dialogue.bullet_image);
+            password_dialogue.bullets[index].x = bullets_area.x + # password_dialogue.entry.x + margin +
+                                                 index * bullet_width / 2;
+            password_dialogue.bullets[index].sprite.SetX (password_dialogue.bullets[index].x);
+            password_dialogue.bullets[index].y = bullet_y;
+            password_dialogue.bullets[index].sprite.SetY (password_dialogue.bullets[index].y);
+            password_dialogue.bullets[index].z = password_dialogue.entry.z + 1;
+            password_dialogue.bullets[index].sprite.SetZ (password_dialogue.bullets[index].z);
+        }
+
+        password_dialogue.bullets[index].sprite.SetOpacity (0);
+
+        if (index < bullets) {
+            password_dialogue.bullets[index].sprite.SetOpacity (1);
+        }
+    }
+}
+
+Plymouth.SetDisplayPasswordFunction (display_password_callback); 
+
+Plymouth.SetMessageFunction (message_callback);
+
+Plymouth.SetBootProgressFunction (animate_progress_indicator);
+
+# Plymouth.SetBootProgressFunction: the callback function is called with two numbers, the progress (between 0 and 1) and the time spent booting so far
+# Plymouth.SetRootMountedFunction: the callback function is called when a new root is mounted
+# Plymouth.SetKeyboardInputFunction: the callback function is called with a string containing a new character entered on the keyboard
+
+#----------------------------------------- FSCK Counter --------------------------------
+
+# Initialise the counter
+fun init_fsck_count () {
+    # The number of fsck checks in this cycle
+    global.counter.total = 0;
+    # The number of fsck checks already performed + the current one
+    global.counter.current = 1;
+    # The previous fsck
+    global.counter.last = 0;
+}
+
+# Increase the total counter
+fun increase_fsck_count () {
+    global.counter.total++;
+}
+
+fun increase_current_fsck_count () {
+    global.counter.last = global.counter.current++;
+}
+
+# Clear the counter
+fun clear_fsck_count () {
+    global.counter = NULL;
+    init_fsck_count ();
+}
+
+#----------------------------------------- Progress Label ------------------------------
+
+
+# Change the opacity level of a progress label
+#
+# opacity = 1 -> show
+# opacity = 0 -> hide
+# opacity = 0.3 (or any other float) -> translucent
+#
+fun set_progress_label_opacity (opacity) {
+    # the label
+    progress_label.sprite.SetOpacity (opacity);
+    
+    # Make the slot available again when hiding the bar
+    # So that another bar can take its place
+    if (opacity == 0) {
+        progress_label.is_available = 1;
+        progress_label.device = "";
+    }
+}
+
+# Set up a new Progress Bar
+#
+# TODO: Make it possible to reuse (rather than recreate) a bar
+#       if .is_available = 1. Ideally this would just reset the
+#       label, the associated
+#       device and the image size of the sprite.
+
+fun init_progress_label (device, status_string) {
+    # Make the slot unavailable
+    global.progress_label.is_available = 0;
+    progress_label.progress = 0;
+    progress_label.device = device;
+    progress_label.status_string = status_string;
+}
+
+# See if the progress label is keeping track of the fsck
+# of "device"
+#
+fun device_has_progress_label (device) {
+    #DebugBottom ("label device = " + progress_label.device + " checking device " + device);
+    return (progress_label.device == device);
+}
+
+# Update the Progress bar which corresponds to index
+#
+fun update_progress_label (progress) {
+    # If progress is NULL then we just refresh the label.
+    # This happens when only counter.total has changed.
+    if (progress != NULL) {
+        progress_label.progress = progress;
+    
+        #Debug("device " + progress_label.device + " progress " + progress);
+    
+        # If progress >= 100% hide the label and make it available again
+        if (progress >= 100) {
+            set_progress_label_opacity (0);
+        
+            # See if we any other fsck check is complete
+            # and, if so, hide the progress bars and the labels
+            on_fsck_completed ();
+        
+            return 0;
+        }
+    }    
+    # Update progress label here
+    #
+    # FIXME: the queue logic from this theme should really be moved into mountall
+    # instead of using string replacement to deal with localised strings.
+    label = StringReplace (progress_label.status_string[0], "%1$d", global.counter.current);
+    label = StringReplace (label, "%2$d",  global.counter.total);
+    label = StringReplace (label, "%3$d",  progress_label.progress);
+    label = StringReplace (label, "%%",  "%");
+
+    progress_label = get_fsck_label (label, 0);
+    #progress_label.progress = progress;
+
+    progress_label.sprite = Sprite (progress_label.image);
+    
+    # Set up the bar
+    progress_label.sprite.SetPosition(progress_label.x, progress_label.y, 1);
+
+    set_progress_label_opacity (1);
+
+}
+
+# Refresh the label so as to update counters
+fun refresh_progress_label () {
+    update_progress_label (NULL);
+}
+
+#----------------------------------------- FSCK Queue ----------------------------------
+
+# Initialise the fsck queue
+fun init_queue () {
+    global.fsck_queue[0].device;
+    global.fsck_queue[0].progress;
+    global.fsck_queue.counter = 0;
+    global.fsck_queue.biggest_item = 0;    
+}
+
+fun clear_queue () {
+    global.fsck_queue = NULL;
+    init_queue ();
+}
+
+# Return either the device index in the queue or -1
+fun queue_look_up_by_device (device) {
+    for (i=0; i <= fsck_queue.biggest_item; i++) {
+        if ((fsck_queue[i]) && (fsck_queue[i].device == device))
+            return i;
+    }
+    return -1;
+}
+
+# Keep track of an fsck process in the queue
+fun add_fsck_to_queue (device, progress) {
+    # Look for an empty slot in the queue
+    for (i=0; global.fsck_queue[i].device; i++) {
+        continue;
+    }
+    local.index = i;
+    
+    # Set device and progress
+    global.fsck_queue[local.index].device = device;
+    global.fsck_queue[local.index].progress = progress;
+    
+    # Increase the queue counter
+    global.fsck_queue.counter++;
+    
+    # Update the max index of the array for iterations
+    if (local.index > global.fsck_queue.biggest_item)
+        global.fsck_queue.biggest_item = local.index;
+    
+    #DebugMedium ("Adding " + device + " at " + local.index);
+}
+
+fun is_queue_empty () {
+    return (fsck_queue.counter == 0);
+}
+
+fun is_progress_label_available () {
+    return (progress_label.is_available == 1);
+}
+
+
+# This should cover the case in which the fsck checks in
+# the queue are completed before the ones showed in the
+# progress label
+fun on_queued_fsck_completed () {
+    if (!is_queue_empty ())
+        return;
+    
+    # Hide the extra label, if any
+    #if (progress_bar.extra_label.sprite)
+    #    progress_bar.extra_label.sprite.SetOpacity(0);
+}
+
+fun remove_fsck_from_queue (index) {
+    # Free memory which was previously allocated for
+    # device and progress
+    global.fsck_queue[index].device = NULL;
+    global.fsck_queue[index].progress = NULL;
+
+    # Decrease the queue counter
+    global.fsck_queue.counter--;
+    
+    # See if there are other processes in the queue
+    # if not, clear the extra_label
+    on_queued_fsck_completed ();
+}
+
+fun on_fsck_completed () {
+    # We have moved on to tracking the next fsck
+    increase_current_fsck_count ();
+
+    if (!is_progress_label_available ())
+        return;
+    
+    if (!is_queue_empty ())
+        return;
+    
+    # Hide the progress label
+    if (progress_label.sprite)
+        progress_label.sprite.SetOpacity (0);
+    
+    # Clear the queue
+    clear_queue ();
+
+    # Clear the fsck counter
+    clear_fsck_count ();
+}
+
+# Update an fsck process that we keep track of in the queue
+fun update_progress_in_queue (index, device, progress) {
+    # If the fsck is complete, remove it from the queue
+    if (progress >= 100) {
+        remove_fsck_from_queue (index);
+        on_queued_fsck_completed ();
+        return;
+    }
+    
+    global.fsck_queue[index].device = device;
+    global.fsck_queue[index].progress = progress;
+    
+}
+
+# TODO: Move it to some function
+# Create an empty queue
+#init_queue ();
+
+
+#----------------------------------------- FSCK Functions ------------------------------
+
+
+# Either add a new bar for fsck checks or update an existing bar
+#
+# NOTE: no more than "progress_bar.max_number" bars are allowed
+#
+fun fsck_check (device, progress, status_string) {
+
+    # The 1st time this will take place
+    if (!global.progress_label) {
+        # Increase the fsck counter
+        increase_fsck_count ();
+
+        # Set up a new label for the check
+        init_progress_label (device, status_string);
+        update_progress_label (progress);
+
+        return;
+    }
+
+    
+    if (device_has_progress_label (device)) {
+        # Update the progress of the existing label
+        update_progress_label (progress);
+    }
+    else {
+        # See if there's already a slot in the queue for the device
+        local.queue_device_index = queue_look_up_by_device(device);
+
+        # See if the progress_label is available
+        if (progress_label.is_available) {
+            
+#            local.my_string = "available index " + local.available_index + " progress_bar counter is " + progress_bar.counter;
+#            Debug(local.my_string);
+            
+                
+            # If the fsck check for the device was in the queue, then
+            # remove it from the queue
+            if (local.queue_device_index >= 0) {
+                remove_fsck_from_queue (index);
+            }
+            else {
+                # Increase the fsck counter
+                increase_fsck_count ();
+            }
+            
+#            local.my_string += local.message;
+            #Debug("setting new label for device " + device + " progress " + progress);
+
+            # Set up a new label for the check
+            init_progress_label (device, status_string);
+            update_progress_label (progress);
+            
+        }
+        # If the progress_label is not available
+        else {
+            
+            # If the fsck check for the device is already in the queue
+            # just update its progress in the queue
+            if (local.queue_device_index >= 0) {
+                #DebugMedium("Updating queue at " + local.queue_device_index + " for device " + device);
+                update_progress_in_queue (local.queue_device_index, device, progress);
+            }
+            # Otherwise add the check to the queue
+            else {
+                #DebugMedium("Adding device " + device + " to queue at " + local.queue_device_index);
+                add_fsck_to_queue (device, progress);
+
+                # Increase the fsck counter
+                increase_fsck_count ();
+
+                refresh_progress_label ();
+            }
+            
+        }
+    }
+    
+#    if (!is_queue_empty ()) {
+#        DebugBottom("Extra label for "+ device);
+    #}
+#    else {
+#        DebugBottom("No extra label for " + device + ". 1st Device in the queue "+ fsck_queue[0].device + " counter = " + global.fsck_queue.counter);
+#    }
+}
+
+
+#-----------------------------------------Update Status stuff --------------------------
+#
+# The update_status_callback is what we can use to pass plymouth whatever we want so
+# as to make use of features which are available only in this program (as opposed to
+# being available for any theme for the script plugin).
+#
+# Example:
+#
+#   Thanks to the current implementation, some scripts can call "plymouth --update=fsck:sda1:40"
+#   and this program will know that 1) we're performing and fsck check, 2) we're checking sda1,
+#   3) the program should set the label progress to 40%
+#
+# Other features can be easily added by parsing the string that we pass plymouth with "--update"
+#
+fun update_status_callback (status) {
+#    Debug(status);
+    if (!status) return;
+    
+    string_it = 0;
+    update_strings[string_it] = "";
+    
+    for (i=0; (String(status).CharAt(i) != ""); i++) {
+        local.temp_char = String(status).CharAt(i);
+        if (temp_char != ":")
+            update_strings[string_it] += temp_char;
+        else
+            update_strings[++string_it] = "";
+    }
+    
+#    my_string = update_strings[0] + " " + update_strings[1] + " " + update_strings[2];
+#    Debug(my_string);
+    # Let's assume that we're dealing with these strings fsck:sda1:40
+    if ((string_it >= 2) && (update_strings[0] == "fsck")) {
+        
+        device = update_strings[1];
+        progress = update_strings[2];
+        status_string[0] = update_strings[3]; # "Checking disk %1$d of %2$d (%3$d %% complete)"
+        if (!status_string[0])
+            status_string[0] = "Checking disk %1$d of %2$d (%3$d %% complete)";
+        
+        if ((device != "") && (progress != "")) {
+            progress = StringToInteger (progress);
+        
+            # Make sure that the fsck_queue is initialised
+            if (!global.fsck_queue)
+                init_queue ();
+
+            # Make sure that the fsck counter is initialised
+            if (!global.counter)
+                init_fsck_count ();
+
+#            if (!global.progress_bar.extra_label.sprite)
+#                create_extra_fsck_label ();
+            
+            # Keep track of the fsck check
+            fsck_check (device, progress, status_string);
+        }
+        
+    }
+
+}
+Plymouth.SetUpdateStatusFunction (update_status_callback); 
+
+#-----------------------------------------Display Question stuff -----------------------
+#
+# TODO: Implement this if needed
+#
+# The callback function is called when the display should display a question dialogue.
+# First arg is prompt string, the second is the entry contents.
+#fun display_question_callback (prompt_string, entry_contents)
+#{
+# time++;
+#}
+#
+#Plymouth.SetDisplayQuestionFunction (display_question_callback); 
+
+#-----------------------------------------Refresh stuff --------------------------------
+#
+# Calling Plymouth.SetRefreshFunction with a function will set that function to be
+# called up to 50 times every second, e.g.
+#
+# NOTE: if a refresh function is not set, Plymouth doesn't seem to be able to update
+#       the screen correctly
+#
+fun refresh_callback ()
+{
+    draw_logo ();
+}
+Plymouth.SetRefreshFunction (refresh_callback);
+
+
+#-----------------------------------------Display Normal stuff -----------------------
+#
+# The callback function is called when the display should return to normal
+fun display_normal_callback ()
+{
+    global.status = "normal";
+    if (global.password_dialogue) {
+        password_dialogue_opacity (0);
+        global.password_dialogue = NULL;
+        if (message_notification[2].sprite) hide_message(2);
+        prompt_active = 0;
+    }
+    
+    if (message_notification[1].sprite) show_message (1);
+    
+    
+}
+
+Plymouth.SetDisplayNormalFunction (display_normal_callback);
+
+
+#----------------------------------------- Quit --------------------------------
+
+# TODO: Maybe we should also hide any other dialog
+# Show the logo and make the progress indicator look full when on exit
+fun quit_callback ()
+{
+    logo.sprite.SetOpacity (1);
+    switch_on_bullets (); 
+}
+
+Plymouth.SetQuitFunction(quit_callback);
diff --git a/le-tour/images/overview/browserWclose.png b/le-tour/images/overview/browserWclose.png
new file mode 100644
index 0000000000000000000000000000000000000000..0f24da814371b03529341befa69374240b8194be
Binary files /dev/null and b/le-tour/images/overview/browserWclose.png differ
diff --git a/le-tour/images/overview/dash.png b/le-tour/images/overview/dash.png
new file mode 100644
index 0000000000000000000000000000000000000000..f55852769c12426826fa703c357e0518408482ad
Binary files /dev/null and b/le-tour/images/overview/dash.png differ
diff --git a/le-tour/images/overview/libreWclose.png b/le-tour/images/overview/libreWclose.png
new file mode 100644
index 0000000000000000000000000000000000000000..0f24da814371b03529341befa69374240b8194be
Binary files /dev/null and b/le-tour/images/overview/libreWclose.png differ
diff --git a/le-tour/images/overview/nautilusWclose.png b/le-tour/images/overview/nautilusWclose.png
new file mode 100644
index 0000000000000000000000000000000000000000..0f24da814371b03529341befa69374240b8194be
Binary files /dev/null and b/le-tour/images/overview/nautilusWclose.png differ
diff --git a/le-tour/images/overview/termWclose.png b/le-tour/images/overview/termWclose.png
new file mode 100644
index 0000000000000000000000000000000000000000..0f24da814371b03529341befa69374240b8194be
Binary files /dev/null and b/le-tour/images/overview/termWclose.png differ
diff --git a/le-tour/images/spinnerInactive.gif b/le-tour/images/spinnerInactive.gif
new file mode 100644
index 0000000000000000000000000000000000000000..309cca0c3503659fa35a4343ba93da7dff47df6e
Binary files /dev/null and b/le-tour/images/spinnerInactive.gif differ
diff --git a/le-tour/images/sub_bar/acessibilidade.png b/le-tour/images/sub_bar/acessibilidade.png
new file mode 100644
index 0000000000000000000000000000000000000000..7411b860edafe5e423ab8fa39e399cdb7d37f18a
Binary files /dev/null and b/le-tour/images/sub_bar/acessibilidade.png differ
diff --git a/le-tour/images/sub_bar/help.png b/le-tour/images/sub_bar/help.png
new file mode 100644
index 0000000000000000000000000000000000000000..7fa660368c3a36117a59778faa5950dc8974e564
Binary files /dev/null and b/le-tour/images/sub_bar/help.png differ
diff --git a/le-tour/images/sub_bar/rede.png b/le-tour/images/sub_bar/rede.png
new file mode 100644
index 0000000000000000000000000000000000000000..17f643f404a371ce10faab3b0a1a85e71847fbfd
Binary files /dev/null and b/le-tour/images/sub_bar/rede.png differ
diff --git a/le-tour/images/sub_bar/user.png b/le-tour/images/sub_bar/user.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b452d28717ab39596a9c69e118b3a158c4c50e4
Binary files /dev/null and b/le-tour/images/sub_bar/user.png differ
diff --git a/le-tour/images/sub_bar/volume.png b/le-tour/images/sub_bar/volume.png
new file mode 100644
index 0000000000000000000000000000000000000000..b7099b7be50a833dc26184e57768ede35db935ec
Binary files /dev/null and b/le-tour/images/sub_bar/volume.png differ
diff --git a/le-tour/images/tour_guide/Download_LE_tour.png b/le-tour/images/tour_guide/Download_LE_tour.png
new file mode 100644
index 0000000000000000000000000000000000000000..3fd38affb9c60edfd2d3a40bb3f4aa65757c9f9c
Binary files /dev/null and b/le-tour/images/tour_guide/Download_LE_tour.png differ
diff --git a/le-tour/images/tour_guide/Download_LE_tour_2.png b/le-tour/images/tour_guide/Download_LE_tour_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..48b8085142f370f6529028585df9e46600558c5f
Binary files /dev/null and b/le-tour/images/tour_guide/Download_LE_tour_2.png differ
diff --git a/le-tour/images/tour_guide/Fundo_tour_3.png b/le-tour/images/tour_guide/Fundo_tour_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..3371761f48461c2b74175eae3804b0b3070195ae
Binary files /dev/null and b/le-tour/images/tour_guide/Fundo_tour_3.png differ
diff --git a/le-tour/images/tour_guide/actions_window.png b/le-tour/images/tour_guide/actions_window.png
new file mode 100644
index 0000000000000000000000000000000000000000..fdcd7631a163bc70430e23c3edeaecd2654d84a8
Binary files /dev/null and b/le-tour/images/tour_guide/actions_window.png differ
diff --git a/le-tour/images/tour_guide/arrow-next.png b/le-tour/images/tour_guide/arrow-next.png
new file mode 100644
index 0000000000000000000000000000000000000000..f700360dfcfce9406a4cf64e89685d3c2ade0d01
Binary files /dev/null and b/le-tour/images/tour_guide/arrow-next.png differ
diff --git a/le-tour/images/tour_guide/arrow-prev.png b/le-tour/images/tour_guide/arrow-prev.png
new file mode 100644
index 0000000000000000000000000000000000000000..0eaf11345e3d5fe27be86239f2accf964bc5a3d8
Binary files /dev/null and b/le-tour/images/tour_guide/arrow-prev.png differ
diff --git a/le-tour/images/tour_guide/wellcome.png b/le-tour/images/tour_guide/wellcome.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8edd6bd94f29b33a2f588778160fe485f669768
Binary files /dev/null and b/le-tour/images/tour_guide/wellcome.png differ
diff --git a/le-tour/index.html b/le-tour/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..a59ebcd0bf1320911efdb699f030646283618c51
--- /dev/null
+++ b/le-tour/index.html
@@ -0,0 +1,477 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <title>Linux Educacional 5.0</title>
+
+    <link rel="stylesheet" type="text/css" href="css/desktop.css" />
+    <link rel="stylesheet" type="text/css" href="css/windows.css" />
+    <link rel="stylesheet" type="text/css" href="css/overview.css" />
+    <link rel="stylesheet" type="text/css" href="css/browser.css" />
+    <link rel="stylesheet" type="text/css" href="css/iconsApps.css" />
+    <link rel="stylesheet" type="text/css" href="css/jScrollPane.css">
+    <link rel="stylesheet" type="text/css" href="css/tourguide.css">
+
+	<script type="text/javascript" src="js/size.js"></script>
+	<script type="text/javascript" src="js/clock.js"></script>
+	<script type="text/javascript" src="js/windows.js"></script>
+	<script type="text/javascript" src="js/overview.js"></script>
+	<script type="text/javascript" src="js/overviewWindows.js"></script>
+	<script type="text/javascript" src="js/jquery.js"></script>
+	<script type="text/javascript" src="js/desktop.js"></script>
+	<script type="text/javascript" src="js/jquery.jqdock.min.js"></script>
+	<script type="text/javascript" src="js/init.js"></script>
+	<script type="text/javascript" src="js/load.js"></script>
+	<script type="text/javascript" src="js/main.js"></script>
+	<script type="text/javascript" src="./js/search.js"></script>
+	<script type="text/javascript" src="./js/jquery.tinyscrollbar.js"></script>
+	<script type="text/javascript" src="./js/tourguide.js"></script>
+	<script type="text/javascript">
+		$(document).ready(function(){
+	var sizescroll = window.innerHeight - 150 + 'px';
+		$('#scrollbar1').tinyscrollbar();
+		});
+	</script>
+</head>
+
+<body oncontextmenu="return false"> <!--style="cursor: url(images/cursor.png), auto;"-->
+<!--loading SO-->
+<div id="loading">
+	<img src="./images/loading/le-logo.png" id="logo"><br>
+	<img src="./images/loading/le-dot-off.png" id="ball_w_1">
+	<img src="./images/loading/le-dot-off.png" id="ball_w_2">
+	<img src="./images/loading/le-dot-off.png" id="ball_w_3">
+	<img src="./images/loading/le-dot-off.png" id="ball_w_4">
+	<img src="./images/loading/le-dot-off.png" id="ball_w_5">
+	<img src="./images/loading/le-dot-on.png" id="ball_g_1">
+	<img src="./images/loading/le-dot-on.png" id="ball_g_2">
+	<img src="./images/loading/le-dot-on.png" id="ball_g_3">
+	<img src="./images/loading/le-dot-on.png" id="ball_g_4">
+	<img src="./images/loading/le-dot-on.png" id="ball_g_5">
+</div>
+
+<!--overview-->
+<div id="shortcut-overview">
+</div>
+
+<div id="overview">
+</div>
+
+<div id="content-overview">
+	<div id="dash">
+		<img src="./images/icons/Mozilla-Firefox.ico" id="dashIcon1">  <br>
+		<img src="./images/icons/libreoffice-writer.png" id="dashIcon2">  <br>
+		<img src="./images/icons/file-manager.png" id="dashIcon3">  <br>
+		<img src="./images/icons/libreoffice-calc.png" id="dashIcon4">  <br>
+	</div>
+
+	<!--sub menus overview-->
+	<div id="windowOverview">
+		<span>Janelas</span>
+	</div>
+
+	<div id="applications">
+		<span>Aplicativos</span>
+	</div>
+
+	<div id="sub_applications">
+		<span id="subapp1" >Todos</span><br>
+		<span id="subapp2" >Acessibilidade</span><br>
+		<span id="subapp3" >Acessórios</span><br>
+		<span id="subapp4" >Ciência</span><br>
+		<span id="subapp5" >Desenvolvimento</span><br>
+		<span id="subapp6" >Educativo</span><br>
+		<span id="subapp7" >Escritório</span><br>
+		<span id="subapp8" >Ferramentas de sistema</span><br>
+		<span id="subapp9" >Gráficos</span><br>
+		<span id="subapp10" >Internet</span><br>
+		<span id="subapp11" >Jogos</span><br>
+		<span id="subapp12" >Multimídia</span><br>
+		<span id="subapp13" >Outros</span>
+	</div>
+
+	<div id="search-edu">
+		<span>Buscar Conteúdos Educacionais</span>
+	</div>
+
+	<div id="sub_search-edu">
+		<span id="subbus1" >Domínio Público</span><br>
+		<span id="subbus2" >TV Escola</span><br>
+		<span id="subbus3" >Portal do Professor</span><br>
+		<span id="subbus4" >Aula</span><br>
+		<span id="subbus5" >Texto</span><br>
+		<span id="subbus6" >Vídeo</span><br>
+		<span id="subbus7" >Som</span><br>
+		<span id="subbus8" >Imagem</span>
+	</div>
+</div>
+
+<!--search overview-->
+<div id="search-control">
+	<form>
+	<input id="search" oninput="searchApp (event)" type="text" size="35" maxlength="50" autocomplete="off">
+	<input type="image" src="./images/icons_bar/find.png" value="ENVIAR" style="right: -257px; position: absolute; top: 5px;">
+	</form>
+</div>
+
+<div id="desktop-change">
+	 <img src="./images/backgrounds/LE5.jpg" id="change">
+</div>
+
+<div id="content-windows">
+    <div id="miniwindows">
+		<div>
+			<div id="browserW"></div>
+			<img src="./images/overview/browserWclose.png" id="browserWclose">
+		</div>
+		<div>
+			<img src="./images/apps/libre1.png" id="libreW">
+			<img src="./images/overview/libreWclose.png" id="libreWclose">
+		</div>
+		<div>
+			<img src="./images/apps/nautilus1.png" id="nautilusW">
+			<img src="./images/overview/nautilusWclose.png" id="nautilusWclose">
+		</div>
+		<div>
+			<img src="./images/apps/term1.png" id="termW">
+			<img src="./images/overview/termWclose.png" id="termWclose">
+		</div>
+    </div>
+</div>
+
+
+
+<div id="content-apps">
+
+<div id="scrollbar1">
+    <div class="scrollbar">
+        <div class="track">
+	        <div class="thumb">
+	            <div class="end">
+	            </div>
+	        </div>
+	    </div>
+	</div>
+	
+    <div class="viewport">
+        <div class="overview">
+			<div class="icons" id="ajuda"> <span class="category">Ajuda</span></div> 
+			<div class="icons" id="akonadi"> <span class="category">Akonadit.. ray</span></div> 
+			<div class="icons" id="baobab"> <span class="category">Analisador..</span></div> 
+			<div class="icons" id="sessionprops"> <span class="category">Aplicativos de..</span></div>
+			<div class="icons" id="python"> <span class="category">Python.. (v.2.7)</span></div> 
+			<div class="icons" id="geogebra"> <span class="category">Aprender Matemática (GeoGebra)</span></div> 
+			<div class="icons" id="arquivos"> <span class="category">Arquivos</span></div> 
+			<div class="icons" id="audacity"> <span class="category">Audacity</span></div> 
+			<div class="icons" id="batalhanaval"> <span class="category">Batalha.. Naval</span></div>
+			<div class="icons" id="calc"> <span class="category">Calculado.. ra</span></div> 
+			<div class="icons" id="remmina"> <span class="category">Cliente de.. área de trabalho remota Remmina</span></div>
+			<div class="icons" id="transmission"> <span class="category">Cliente BitTorrent Transmission</span></div>
+			<div class="icons" id="systemnetwork"> <span class="category">Conexões de.. rede</span>C</div> 
+			<div class="icons" id="settings"> <span class="category">Configura... ções...</span></div> 
+			<div class="icons" id="onboard"> <span class="category">Configura... ções...</span></div> 
+			<div class="icons" id="contatos"> <span class="category">Contatos</span></div>
+			<div class="icons" id="usbcreator"> <span class="category">Criador de di..</span></div> 
+			<div class="icons" id="libreimpress"> <span class="category">Editor de.. Apresentações (LibreeOffice Impress)</span></div> 
+			<div class="icons" id="gimp"> <span class="category">Editor de.. imagens GIMP</span></div> 
+			<div class="icons" id="gparted"> <span class="category">Editor de.. partições GParted</span></div> 
+			<div class="icons" id="pdfeditor"> <span class="category">Editor de.. PDF</span></div> 
+			<div class="icons" id="librecalc"> <span class="category">Editor de.. Planilhas (LibreOffice Calc)</span></div> 
+			<div class="icons" id="txteditor"> <span class="category">Editor de.. texto</span></div> 
+			<div class="icons" id="aptoncd"> <span class="category">Efetuar.. backup de pacotes (AptonCD)</span></div>
+			<div class="icons" id="powerstats"> <span class="category">Estatístic.. as de energia</span></div> 
+			<div class="icons" id="acidrip"> <span class="category">Extrair.. DVDs (AcidRip)</span></div> 
+			<div class="icons" id="libredraw"> <span class="category">Ferramen.. de Desenhos (LibreOffice Draw)</span></div> 
+			<div class="icons" id="xdiagnose"> <span class="category">Ferrament.. de Reparação do X (xdiagnose)</span></div> 
+			<div class="icons" id="gerenciadorpkgs"> <span class="category">Gerenciad.. de pacotes</span></div> 
+			<div class="icons" id="synaptic"> <span class="category">Gerenciad.. de pacotes Synaptic</span></div> 
+			<div class="icons" id="brasero"> <span class="category">Gravador.. de discos Brasero</span></div> 
+			<div class="icons" id="gravadorsom"> <span class="category">Gravador.. de som</span></div>
+			<div class="icons" id="homibatata"> <span class="category">Homem... Batata</span></div> 
+			<div class="icons" id="ibus"> <span class="category">IBus</span></div> 
+			<div class="icons" id="bomber"> <span class="category">Jogo de.. bombardeio (Bomber)</span></div> 
+			<div class="icons" id="tuxmath"> <span class="category">Jogo de.. Matemática (Tux Math)</span></div> 
+			<div class="icons" id="blinken"> <span class="category">Jogo de.. memória (Blinken)</span></div> 
+			<div class="icons" id="bovo"> <span class="category">Jogo no.. estilo Reversi (Bovo)</span></div>
+			<div class="icons" id="kajongg"> <span class="category">Kajongg</span></div> 
+			<div class="icons" id="kalgebra"> <span class="category">KAlgebra</span></div> 
+			<div class="icons" id="kalzium"> <span class="category">Kalzium</span></div> 
+			<div class="icons" id="kanagram"> <span class="category">Kanagram</span></div> 
+			<div class="icons" id="kapman"> <span class="category">Kapman</span></div> 
+			<div class="icons" id="katomic"> <span class="category">KAtomic</span></div> 
+			<div class="icons" id="kblackbox"> <span class="category">KBlackBox</span></div> 
+			<div class="icons" id="kblocks"> <span class="category">KBlocks</span></div> 
+			<div class="icons" id="kbounce"> <span class="category">KBounce</span></div> 
+			<div class="icons" id="kbreakout"> <span class="category">KBreakOut</span></div> 
+			<div class="icons" id="kbruch"> <span class="category">KBruch</span></div> 
+			<div class="icons" id="kdiamond"> <span class="category">KDiamond</span></div> 
+			<div class="icons" id="fourinline"> <span class="category">KFourInLin.. e</span></div> 
+			<div class="icons" id="kgeography"> <span class="category">KGeograp..</span></div> 
+			<div class="icons" id="kgold"> <span class="category">KGoldrunn..</span></div> 
+			<div class="icons" id="khangman"> <span class="category">KHangMan</span></div> 
+			<div class="icons" id="kig"> <span class="category">Kig</span></div> 
+			<div class="icons" id="kigo"> <span class="category">Kigo</span></div> 
+			<div class="icons" id="killbots"> <span class="category">Killbots</span></div> 
+			<div class="icons" id="kiriki"> <span class="category">Kiriki</span></div> 
+			<div class="icons" id="jumpingcube"> <span class="category">KJumping.. Cube</span></div>
+ 			<div class="icons" id="klettres"> <span class="category">KLettres</span></div> 
+			<div class="icons" id="klickety"> <span class="category">Klickety</span></div> 
+			<div class="icons" id="kmahjongg"> <span class="category">KMahjongg</span></div> 
+			<div class="icons" id="kmines"> <span class="category">KMines</span></div> 
+			<div class="icons" id="kmplot"> <span class="category">KmPlot</span></div> 
+			<div class="icons" id="knetwalk"> <span class="category">KNetWalk</span></div> 
+			<div class="icons" id="kolf"> <span class="category">Kolf</span></div> 
+			<div class="icons" id="kollision"> <span class="category">Kollision</span></div> 
+			<div class="icons" id="klines"> <span class="category">Kolor Lines</span></div> 
+			<div class="icons" id="konquest"> <span class="category">Konquest</span></div> 
+			<div class="icons" id="kpatience"> <span class="category">KPatience</span></div> 
+			<div class="icons" id="kreversi"> <span class="category">KReversi</span></div>
+			<div class="icons" id="ksirk"> <span class="category">KsirK</span></div> 
+			<div class="icons" id="ksnake"> <span class="category">KSnake</span></div>
+			<div class="icons" id="snake-duel"> <span class="category">KSnake D.. uel</span></div>  
+			<div class="icons" id="spaceduel"> <span class="category">KSpaceD.. uel</span></div> 
+			<div class="icons" id="ksquares"> <span class="category">KSquares</span></div> 
+			<div class="icons" id="kstars"> <span class="category">KStars</span></div> 
+			<div class="icons" id="ksudoku"> <span class="category">KSudoku</span></div> 
+			<div class="icons" id="ktouch"> <span class="category">KTouch</span></div> 
+	    	<div class="icons" id="kturtle"> <span class="category">KTurtle</span></div> 
+			<div class="icons" id="kubrick"> <span class="category">Kubric</span></div> 
+			<div class="icons" id="kwordquiz"> <span class="category">KWordQuiz</span></div>
+			<div class="icons" id="orca"> <span class="category">Leitor de.. tela Orca</span></div>
+			<div class="icons" id="libreoffice"> <span class="category">LibreOffice</span></div> 
+			<div class="icons" id="lskat"> <span class="category">Lskat</span></div> 
+			<div class="icons" id="mahjongg"> <span class="category">Mahjongg</span></div> 
+			<div class="icons" id="mapachars"> <span class="category">Mapa de.. caracteres</span></div> 
+			<div class="icons" id="marble"> <span class="category">Mapa Mundi (Marble)</span></div> 
+			<div class="icons" id="pidgin"> <span class="category">Mensagei.. ro da Internet Pidgin</span></div> 
+			<div class="icons" id="alacarte"> <span class="category">Menu prin.. cipal</span></div> 
+			<div class="icons" id="enteclado"> <span class="category">Método d.. entrada do teclado</span></div>
+			<div class="icons" id="mines"> <span class="category">Minas</span></div> 
+			<div class="icons" id="system-monitor"> <span class="category">Monitor de.. Sistema</span></div> 
+			<div class="icons" id="firefox"> <span class="category">Navegad..  or Web Firefox</span></div>
+			<div class="icons" id="openjdk6"> <span class="category">OpenJDK .. Java 7 Policy Tool</span></div>
+			<div class="icons" id="paciencia"> <span class="category">Paciência.. AisleRiot</span></div> 
+			<div class="icons" id="palapeli"> <span class="category">Palapeli</span></div> 
+			<div class="icons" id="tuxpaint"> <span class="category">Program.. de desenho (Tux Paint)</span></div> 
+			<div class="icons" id="reprodutfilmes"> <span class="category">Reproduto..  de Filmes</span></div>
+			<div class="icons" id="vlc"> <span class="category">Reproduto..  de Mídias VLC</span></div>
+			<div class="icons" id="rhythmbox"> <span class="category">Reproduto..  de músicas Rhythmbox</span></div>
+			<div class="icons" id="step"> <span class="category">Simulador.. de Física interativo (Step)</span></div> 
+			<div class="icons" id="sudoku"> <span class="category">Sudoku</span></div>
+			<div class="icons" id="onboard"> <span class="category">Teclado.. Virtual (Onboard)</span></div> 
+			<div class="icons" id="teoriagrafos"> <span class="category">Teoria do...  s grafos de Rocs</span></div>
+			<div class="icons" id="terminal"> <span class="category">Terminal</span></div> 
+			<div class="icons" id="testesistema"> <span class="category">Teste de.. Sistema</span></div>
+			<div class="icons" id="librewriter"> <span class="category">Text editor (LibreOffice Writer)</span></div> 
+			<div class="icons" id="parley"> <span class="category">Treinador.. de vocabulário (Parley)</span></div> 
+			<div class="icons" id="unidades"> <span class="category">Utilitário.. de unidades</span></div> 
+			<div class="icons" id="xterm"> <span class="category">XTerm</span></div>
+			<div class="icons" id="evince"> <span class="category">Visualizad.. de PDF</span></div> 
+			<div class="icons" id="xournal"> <span class="category">Visualizad.. de documentos com suporte a notas(Xournal)</span></div> 
+		    </div>
+		</div>
+	</div>
+</div>
+
+<div id="content-search-edu">
+	<p style=" font-family: loma; color: silver; text-align: center; font-size: 16px;">AQUI VOCÊ PODERÁ FAZER BUSCA DE CONTEÚDOS EDUCACIONAIS INSTALADOS E DISPONÍVEIS PARA INSTALAÇÃO.</p>
+	<p style=" font-family: loma; color: silver; text-align: center; font-size: 16px;">A LISTA À DIREITA DIVIDE POR CATEGORIAS OS CONTEÚDOS EDUCACIONAIS INSTALADOS NO SISTEMA.</p>
+</div>
+
+<!--wallpaper-->
+<div>
+    <img src="./images/backgrounds/LE5.jpg" id="wallpaper">
+</div>
+
+<!--bar principal-->
+<div id="bar">
+    <center><div id="clock"></div></center>
+	<div id="icon_bar0">
+    	<img src="./images/icons_bar/acessibilidade.png">
+		<div id="icon_bar0_sub">
+ 		<img src="./images/sub_bar/acessibilidade.png">
+		</div>
+	</div>
+	
+	<div id="icon_bar1">
+    	<img src="./images/icons_bar/help.png" style=" width: 16px; height: 16px; top: -1px; position: absolute; ">
+		<div id="icon_bar1_sub">
+ 		<img src="./images/sub_bar/help.png">
+		</div>
+	</div>
+
+	<div id="icon_bar2">
+	<img src="./images/icons_bar/volume.png">
+		<div id="icon_bar2_sub">
+ 		<img src="./images/sub_bar/volume.png">
+		</div>
+	</div>
+
+	<div id="icon_bar3">
+	<img src="./images/icons_bar/rede.png">
+		<div id="icon_bar3_sub">
+ 		<img src="./images/sub_bar/rede.png">
+		</div>
+	</div>
+
+	<div id="icon_bar4">
+	<img src="./images/icons_bar/user-available.png">
+	</div>
+
+	<div id="user">
+	<span>Administrador</span>
+		<div id="user_sub">
+ 		<img src="./images/sub_bar/user.png">
+		</div>
+	</div>
+</div>  
+
+<div id="menu-logo">
+    <img src="./images/le_logo.png" id="menu">
+</div>
+
+<!--bars-laterais-->
+<div id="bars-laterais1">
+</div>
+
+<div id="bars-laterais2">
+</div>
+
+<div id="shortcut-edubar">
+</div>
+
+<div id="shortcut-shortcuts">
+</div>
+
+<a href="menu"><img src="./images/le_logo.png" id="menu"></a>
+
+<div id="edubar">
+	<li><img src="./images/icons/LE5-Edubar1.png" id="edubarIcon1"> </li>
+	<li><img src="./images/icons/LE5-Edubar4.png" id="edubarIcon2"> </li>
+	<li><img src="./images/icons/LE5-Edubar3.png" id="edubarIcon3"> </li>
+	<li><img src="./images/icons/LE5-Edubar2.png" id="edubarIcon4"> </li>
+</div>
+
+<img src="./images/icons/background-icons.png" id="shortcut-background">
+
+<div id="shortcuts">
+	<li><img src="./images/icons/LE5-Edubar-Firefox.png" id="shortCutIcon1"></li>
+	<li><img src="./images/icons/LE5-Edubar-Libre.png" id="shortCutIcon2"></li>
+	<li><img src="./images/icons/LE5-Edubar-Dir.png" id="shortCutIcon3"></li>
+	<li><img src="./images/icons/LE5-Edubar-Term.png" id="shortCutIcon4"></li>
+</div> 
+
+
+
+<!--janelas-apps-->        
+<div id="windows">
+	<div id="browser">
+		<p id="browsermove" style="position: absolute; margin: 0px; width: 894px; height: 27px;"></p>
+		<p id="browserclose"></p>
+		<p id="browserminimize"></p>
+
+		<div id="abas">
+			<div id="dompub2" class="browsercontent">
+				<p id="dompub2click" style="position: absolute; width: 175px; height: 25px; margin: 0px;"></p>
+				<img src="./images/browser/gtk-close.png" id="dompubX">
+			</div>
+			<div id="objedu2" class="browsercontent">
+				<p id="objedu2click" style="position: absolute; width: 175px; height: 25px; margin: 0px;"></p>
+				<img src="./images/browser/gtk-close.png" id="objeduX">
+			</div>
+			<div id="porprof2" class="browsercontent">
+				<p id="porprof2click" style="position: absolute; width: 175px; height: 25px; margin: 0px;"></p>
+				<img src="./images/browser/gtk-close.png" id="porprofX">
+			</div>
+			<div id="tvesc2" class="browsercontent">
+				<p id="tvesc2click" style="position: absolute; width: 175px; height: 25px; margin: 0px;"></p>
+				<img src="./images/browser/gtk-close.png" id="tvescX">
+			</div>
+			<div id="firefox2" class="browsercontent">
+				<p id="firefox2click" style="position: absolute; width: 175px; height: 25px; margin: 0px;"></p>
+				<img src="./images/browser/gtk-close.png" id="firefoxX">
+			</div>
+		</div>
+
+		<div id="content-browser">
+			<img src="./images/browser/dompub1.png" id="dompub1">
+			<img src="./images/browser/objedu1.png" id="objedu1">
+			<img src="./images/browser/porprof1.png" id="porprof1">
+			<img src="./images/browser/tvesc1.png" id="tvesc1">
+			<img src="./images/browser/firefox1.png" id="firefox1">
+		</div>
+	</div>
+
+        <div id="libre" style="display: none;"><p id="libremove"></p><p id="libreclose"></p><p id="libremaxmin"></p><p id="libreminimize"></p></div>
+
+        <div id="nautilus" style="display: none;"><p id="nautilusmove"></p><p id="nautilusclose"></p><p id="nautilusmaxmin"></p><p id="nautilusminimize"></p></div>
+
+        <div id="term" style="display: none;"><p id="termmove"></p><p id="termclose"></p><p id="termmaxmin"></p><p id="termminimize"></p></div>
+<!--tour-guide-->
+
+
+	<div id="wellcome">
+	<img src="./images/tour_guide/actions_window.png" id="action-wellcome">
+	    <div id="closeWellcome"></div>
+	    <span class="wellcome"><p>Seja bem-vindo ao tour do Linux Educacional 5.0. Esta nova versão possui
+            novos aplicativos e novos recursos de interface e de interação totalmente
+            desenvolvidos com base na experiência dos usuários. Este tour é uma
+            demonstração e foi elaborado com o objetivo de auxiliar a familiarização
+            com a nova interface.</p>
+        </span>
+	</div>
+	
+	<div id="tour-guide">
+        <img src="./images/tour_guide/arrow-next.png" id="next-button">
+        <img src="./images/tour_guide/arrow-prev.png" id="prev-button">
+        <a href="../instalacao.html" target="_blank"><img src="./images/tour_guide/Download_LE_tour_2.png" id="downloadLE5"></a>
+        
+		<div class="guide-container">
+		    <div id="step0" class="tour-step">
+		        <span class="step-container">Conheça mais o Linux Educacional com o nosso tour guiado! (use as setas à esquerda e à direita para avançar e retroceder)</span>
+		    </div>
+			<div id="step1" class="tour-step">
+		        <span class="step-container">Veja que o ambiente para o usuário do LE5 tem duas barras verticais à esquerda</span>
+		    </div>    
+		    <div id="step2" class="tour-step">
+		        <span class="step-container">A primeira, a Edubar, dá acesso aos conteúdos de responsabilidade do MEC.</span>
+		    </div>
+		    <div id="step3" class="tour-step">
+		        <span class="step-container">A segunda dá acesso às principais ferramentas do sistema.</span>
+		    </div>
+		    <div id="step4" class="tour-step">
+		        <span class="step-container">Veja que a barra de ferramentas proporciona acesso facilitado em relação à versão anterior</span>
+		    </div>
+		    <div id="step5" class="tour-step">
+		        <span class="step-container">Observe agora o botão LE no canto superior esquerdo</span>
+		    </div>
+		    <div id="step6" class="tour-step">
+		        <span class="step-container">O botão LE dá acesso às capacidades diferenciais dessa nova versão.</span>
+		    </div>
+		    <div id="step7" class="tour-step" style="font-size: 18px">
+		        <span style="margin-left: -60px;font-size: 18px;">Clique no botão LE (ou arraste o mouse de maneira que o cursor vá para o canto superior esquerdo da tela) e acesse essas capacidades (Overview)</span>
+		    </div>
+		    <div id="step8" class="tour-step">
+		        <span class="step-container">Ao selecionar Janelas você pode gerenciar suas aplicações abertas.</span>
+		    </div>
+		    <div id="step9" class="tour-step">
+		        <span class="step-container">A partir de Aplicativos você visualizará as aplicações disponíveis para uso.</span>
+		    </div>
+		    <div id="step10" class="tour-step">
+		        <span class="step-container">Agora selecione Buscar Conteúdos Educacionais</span>
+		    </div>
+		    <div id="step11" class="tour-step">
+		        <span class="step-container">Para sair do Overview arraste o mouse de maneira que o cursor vá para o canto superior esquerdo da tela ou pressione ESC</span>
+		    </div>
+		    <div id="step12" class="tour-step">
+		        <span class="step-container">Se você tiver gostado do ambiente, você já pode baixar o LE5 clicando no ícone ao lado direito</span>
+		    </div>
+		    <div id="step13" class="tour-step">
+		        <span class="step-container"></span>
+		    </div>
+		</div>
+	</div>
+	
+</div>
+</body>
+</html>
diff --git a/le-tour/js/clock.js b/le-tour/js/clock.js
new file mode 100644
index 0000000000000000000000000000000000000000..3a4d2ca95362fb9ed1d0b7cbf294965c08a53269
--- /dev/null
+++ b/le-tour/js/clock.js
@@ -0,0 +1,46 @@
+function tick(){
+    var hours, minutes, seconds, ap;
+    var intHours, intMinutes, intSeconds;
+    var today;
+    var myday, mymonth, myyear, myweekday;
+
+    today = new Date();
+
+    intHours = today.getHours();
+    intMinutes = today.getMinutes();
+
+    if (intHours < 10){
+        hours = "0"+intHours+":";
+    }else{
+        hours = intHours+":";
+    }
+
+    if (intMinutes < 10){
+        minutes = "0"+intMinutes;
+    }else{
+        minutes = intMinutes;
+}
+
+myday = today.getDay();
+mymonth = today.getMonth();
+mymonth = mymonth + 1;
+
+if (mymonth < 10){
+    mymonth = "0"+mymonth;
+}
+
+myyear= today.getFullYear();
+myweekday= today.getDate();
+
+if (myweekday < 10){
+    myweekday = "0"+myweekday;
+}
+
+timeString = myweekday+"/"+mymonth+"/"+myyear+" "+hours+minutes;
+document.getElementById("clock").innerHTML = timeString;
+window.setTimeout("tick();", 6000);
+}
+
+function gettheDate(){
+    document.write( day + myweekday + month + year + " - " + timeValue);
+}
diff --git a/le-tour/js/desktop.js b/le-tour/js/desktop.js
new file mode 100644
index 0000000000000000000000000000000000000000..82babe380b60c61187ab8f34160b9bb1f10f52af
--- /dev/null
+++ b/le-tour/js/desktop.js
@@ -0,0 +1,70 @@
+$(function(){
+    var jqDockOpts = {align: 'left', duration: 200, size: 60, sizeMax: 85, distance: 85};
+    var jqDockOpts2 = {align: 'left', duration: 200, size: 52, sizeMax: 80, distance: 85};
+    $('#edubar').jqDock(jqDockOpts);
+    $('#shortcuts').jqDock(jqDockOpts2);
+});
+
+//show menu-icon top bar
+function subMenuShow(id){
+    switch (id) {
+        case "icon_bar3":
+              $('#icon_bar3_sub').show();
+              $("#icon_bar0_sub, #icon_bar2_sub, #icon_bar1_sub, #user_sub").hide();
+            break;
+        case "icon_bar2":
+              $('#icon_bar2_sub').show();
+              $("#icon_bar0_sub, #icon_bar3_sub, #icon_bar1_sub, #user_sub").hide();
+            break;
+        case "icon_bar1":
+              $('#icon_bar1_sub').show();
+              $("#icon_bar0_sub, #icon_bar3_sub, #icon_bar2_sub, #user_sub").hide();
+            break;
+        case "icon_bar0":
+          $('#icon_bar0_sub').show();
+          $("#icon_bar1_sub, #icon_bar3_sub, #icon_bar2_sub, #user_sub").hide();
+        break;
+        case "user":
+              $('#user_sub').show();
+              $("#icon_bar0_sub, #icon_bar3_sub, #icon_bar2_sub, #icon_bar1_sub").hide();
+            break;
+        default:
+            console.log("error sub menu");
+    }
+}
+
+//hide all menu-icon top bar
+function subMenuHide(){
+      $("#icon_bar0_sub, #icon_bar3_sub, #icon_bar2_sub, #icon_bar1_sub, #user_sub").hide();
+}
+
+//overlap edubar/shortcuts
+function barShow(id){
+	if (id == "shortcuts"){
+	    $("#shortcut-background").css("z-index", "9");
+	    $("#shortcuts").css("z-index", "9");
+	    $("#bars-laterais2").css("z-index", "9");
+	}else{
+	    $("#edubar").css("z-index", "9");
+	    $("#bars-laterais1").css("z-index", "9");
+	}
+}
+
+function barHide(id){
+	if (id == "shortcuts"){
+	    $("#shortcut-background").css("z-index", "0");
+     	$("#shortcuts").css("z-index", "0");
+	    $("#bars-laterais2").css("z-index", "0");
+	}else{
+	    $("#edubar").css("z-index", "0");
+	    $("#bars-laterais1").css("z-index", "0");
+	}
+}
+
+function barHide2(){
+    $("#shortcut-background").css("z-index", "0");
+    $("#shortcuts").css("z-index", "0");
+    $("#bars-laterais2").css("z-index", "0");
+    $("#edubar").css("z-index", "0");
+    $("#bars-laterais1").css("z-index", "0");
+}
diff --git a/le-tour/js/init.js b/le-tour/js/init.js
new file mode 100644
index 0000000000000000000000000000000000000000..5aeefde3f257c522966c27a2af6145ba8fc52dc4
--- /dev/null
+++ b/le-tour/js/init.js
@@ -0,0 +1,270 @@
+function init() {
+    wallpaper = document.getElementById("wallpaper");
+
+    //windows and dependent
+    $('#browser').css('z-index', 1);
+    $('#libre').css('z-index', 2);
+    $('#nautilus').css('z-index', 3);
+    $('#term').css('z-index', 4);
+
+    //tour guide
+    $("#step1,#step2,#step3,#step4,#step5,#step6,#step7,#step8,#step9,#step10,#step11,#step12,#step13").hide();
+
+    $('#next-button').click(nextStep);
+
+    $('#prev-button').click(prevStep);
+
+    $('#closeWellcome').click(function(){
+        $('#wellcome').hide();
+    });
+
+    //windows events
+    $('#browser').click(function(){
+        changeZindex('browser');
+    });
+
+    $('#libre').click(function(){
+        changeZindex('libre');
+    });
+
+    $('#term').click(function(){
+        changeZindex('term');
+    });
+
+    $('#nautilus').click(function(){
+        changeZindex('nautilus');
+    });
+
+    $('#libreclose').click(function(){
+        $('#libre').hide();
+    });
+
+    $('#nautilusclose').click(function(){
+        $('#nautilus').hide();
+    });
+
+    $('#termclose').click(function(){
+        $('#term').hide();
+    });
+
+    $('#browser,#libre,#nautilus,#term').mouseover(function(){
+        barHide2();
+    });
+
+    //sub-menu-apps
+    $('#subapp1,#subapp2,#subapp3,#subapp4,#subapp5,#subapp6,#subapp7,#subapp8,#subapp9,#subapp10,#subapp11,#subapp12,#subapp13').click(function(){
+        menuLateral($(this).attr('id'));
+    });
+
+    //overview
+
+    $(document).keyup(function(e) {
+        if ((e.which == '27') && ($('#overview').css('display') == 'block')){ 
+        overView();
+        }
+    });
+    
+    $("#content-overview").click(function() {
+        $('#search').css('opacity', 'o.4');
+    });
+
+    $("#search").click(function() {
+        $('#search').css('opacity', '1');
+    });
+
+    $('#desktop-change').mouseout(function() {
+        $('#desktop-change').css('right', '-160px');
+    }).mouseover(function(){
+        $('#desktop-change').css('right', '0px');
+    });
+
+    $('#shortcut-overview').mouseover(overView);
+
+    $("#menu").click(overView);
+
+    $('#windowOverview, #applications, #search-edu').click(function(){
+        changeSubMenu($(this).attr('id'));
+    });
+
+    $('#icon_bar3, #icon_bar2, #icon_bar1, #icon_bar0, #user').click(function(){
+         subMenuShow($(this).attr('id'));
+     });
+
+    $('#wallpaper').click(function(){
+        subMenuHide();
+    }).mouseover(function(){
+        barHide2();
+    });
+
+    hideBrowser();
+
+    //edubar events
+    $('#edubarIcon1').click(function(){
+        showBrowser('browsermove','dompub');
+    });
+
+    $('#edubarIcon2').click(function(){
+        showBrowser('browsermove','objedu');
+    });
+
+    $('#edubarIcon3').click(function(){
+        showBrowser('browsermove','porprof');
+    });
+
+    $('#edubarIcon4').click(function(){
+        showBrowser('browsermove','tvesc');
+    });
+
+    $('#shortCutIcon1').click(function(){
+        showBrowser('browsermove','firefox');
+    });
+
+    //browser events
+    $('#dompub2click').click(function(){
+        changeTab('dompub');
+    });
+
+    $('#objedu2click').click(function(){
+        changeTab('objedu');
+    });
+
+    $('#porprof2click').click(function(){
+        changeTab('porprof');
+    });
+
+    $('#tvesc2click').click(function(){
+        changeTab('tvesc');
+    });
+
+    $('#firefox2click').click(function(){
+        changeTab('firefox');
+    });
+
+    $('#dompubX').click(function(){
+        hideTab('dompub');
+    });
+
+    $('#objeduX').click(function(){
+        hideTab('objedu');
+    });
+
+    $('#porprofX').click(function(){
+        hideTab('porprof');
+    });
+
+    $('#tvescX').click(function(){
+        hideTab('tvesc');
+    });
+
+    $('#firefoxX').click(function(){
+        hideTab('firefox');
+    });
+
+    $('#browserclose').click(function(){
+        hideBrowser();
+    });
+
+    //shortcut events
+    $('#shortCutIcon2').click(function(){
+        showWindow('libremove','libre');
+    });
+
+    $('#shortCutIcon3').click(function(){
+        showWindow('nautilusmove','nautilus');
+    });
+
+    $('#shortCutIcon4').click(function(){
+        showWindow('termmove','term');
+    });
+
+    //z-index edubar
+    $('#shortcut-edubar').mouseover(function(){
+        setTimeout("barShow('edubar')",1000);
+    });
+
+    $('#shortcut-shortcuts').mouseover(function(){
+        setTimeout("barShow('shortcuts')",1000);
+    });
+
+    $('#bars-laterais1').mouseout(function() {
+        barHide('edubar');
+    });
+
+    $('#bars-laterais2').mouseout(function() {
+        barHide('shortcuts');
+    });
+
+    //windows overview
+    $('#browserW').mouseover(function(){
+        $('#browserWclose').show();
+    }).mouseout(function() {
+        $('#browserWclose').hide();
+    });
+
+    $('#libreW').mouseover(function(){
+        $('#libreWclose').show();
+    }).mouseout(function() {
+        $('#libreWclose').hide();
+    });
+
+    $('#nautilusW').mouseover(function(){
+        $('#nautilusWclose').show();
+    }).mouseout(function() {
+        $('#nautilusWclose').hide();
+    });
+
+    $('#termW').mouseover(function(){
+        $('#termWclose').show();
+    }).mouseout(function() {
+        $('#termWclose').hide();
+    });
+
+    $('#browserWclose').mouseover(function(){
+        $('#browserWclose').show();
+    });
+
+    $('#libreWclose').mouseover(function(){
+        $('#libreWclose').show();
+    });
+
+    $('#nautilusWclose').mouseover(function(){
+        $('#nautilusWclose').show();
+    });
+
+    $('#termWclose').mouseover(function(){
+        $('#termWclose').show();
+    });
+
+    $('#browserWclose').click(function(){
+        closeWindow('browser');
+    });
+
+    $('#libreWclose').click(function(){
+        closeWindow('libre');
+    });
+
+    $('#nautilusWclose').click(function(){
+        closeWindow('nautilus');
+    });
+
+    $('#termWclose').click(function(){
+        closeWindow('term');
+    });
+
+
+    $('#browserW').click(function(){
+        overviewToWindow('browser');
+    });
+
+    $('#libreW').click(function(){
+        overviewToWindow('libre');
+    });
+
+    $('#nautilusW').click(function(){
+        overviewToWindow('nautilus');
+    });
+
+    $('#termW').click(function(){
+        overviewToWindow('term');
+    });
+}
diff --git a/le-tour/js/init.js~ b/le-tour/js/init.js~
new file mode 100644
index 0000000000000000000000000000000000000000..61fc92908f8fd994eb64d1166cb67e01a5b80048
--- /dev/null
+++ b/le-tour/js/init.js~
@@ -0,0 +1,263 @@
+function init() {
+    wallpaper = document.getElementById("wallpaper");
+
+    //windows and dependent
+    $('#browser').css('z-index', 1);
+    $('#libre').css('z-index', 2);
+    $('#nautilus').css('z-index', 3);
+    $('#term').css('z-index', 4);
+
+    //tour guide
+    $("#step1,#step2,#step3,#step4,#step5,#step6,#step7,#step8,#step9").hide();
+
+    $('#next-button').click(nextStep);
+
+    $('#prev-button').click(prevStep);
+
+    $('#closeWellcome').click(function(){
+        $('#wellcome').hide();
+    });
+
+    //windows events
+    $('#browser').click(function(){
+        changeZindex('browser');
+    });
+
+    $('#libre').click(function(){
+        changeZindex('libre');
+    });
+
+    $('#term').click(function(){
+        changeZindex('term');
+    });
+
+    $('#nautilus').click(function(){
+        changeZindex('nautilus');
+    });
+
+    $('#libreclose').click(function(){
+        $('#libre').hide();
+    });
+
+    $('#nautilusclose').click(function(){
+        $('#nautilus').hide();
+    });
+
+    $('#termclose').click(function(){
+        $('#term').hide();
+    });
+
+    $('#browser,#libre,#nautilus,#term').mouseover(function(){
+        barHide2();
+    });
+
+    //sub-menu-apps
+    $('#subapp1,#subapp2,#subapp3,#subapp4,#subapp5,#subapp6,#subapp7,#subapp8,#subapp9,#subapp10,#subapp11,#subapp12,#subapp13').click(function(){
+        menuLateral($(this).attr('id'));
+    });
+
+    //overview
+    $("#content-overview").click(function() {
+        $('#search').css('opacity', 'o.4');
+    });
+
+    $("#search").click(function() {
+        $('#search').css('opacity', '1');
+    });
+
+    $('#desktop-change').mouseout(function() {
+        $('#desktop-change').css('right', '-160px');
+    }).mouseover(function(){
+        $('#desktop-change').css('right', '0px');
+    });
+
+    $('#shortcut-overview').mouseover(overView);
+
+    $("#menu").click(overView);
+
+    $('#windowOverview, #applications, #search-edu').click(function(){
+        changeSubMenu($(this).attr('id'));
+    });
+
+    $('#icon_bar3, #icon_bar2, #icon_bar1, #icon_bar0, #user').click(function(){
+         subMenuShow($(this).attr('id'));
+     });
+
+    $('#wallpaper').click(function(){
+        subMenuHide();
+    }).mouseover(function(){
+        barHide2();
+    });
+
+    hideBrowser();
+
+    //edubar events
+    $('#edubarIcon1').click(function(){
+        showBrowser('browsermove','dompub');
+    });
+
+    $('#edubarIcon2').click(function(){
+        showBrowser('browsermove','objedu');
+    });
+
+    $('#edubarIcon3').click(function(){
+        showBrowser('browsermove','porprof');
+    });
+
+    $('#edubarIcon4').click(function(){
+        showBrowser('browsermove','tvesc');
+    });
+
+    $('#shortCutIcon1').click(function(){
+        showBrowser('browsermove','firefox');
+    });
+
+    //browser events
+    $('#dompub2click').click(function(){
+        changeTab('dompub');
+    });
+
+    $('#objedu2click').click(function(){
+        changeTab('objedu');
+    });
+
+    $('#porprof2click').click(function(){
+        changeTab('porprof');
+    });
+
+    $('#tvesc2click').click(function(){
+        changeTab('tvesc');
+    });
+
+    $('#firefox2click').click(function(){
+        changeTab('firefox');
+    });
+
+    $('#dompubX').click(function(){
+        hideTab('dompub');
+    });
+
+    $('#objeduX').click(function(){
+        hideTab('objedu');
+    });
+
+    $('#porprofX').click(function(){
+        hideTab('porprof');
+    });
+
+    $('#tvescX').click(function(){
+        hideTab('tvesc');
+    });
+
+    $('#firefoxX').click(function(){
+        hideTab('firefox');
+    });
+
+    $('#browserclose').click(function(){
+        hideBrowser();
+    });
+
+    //shortcut events
+    $('#shortCutIcon2').click(function(){
+        showWindow('libremove','libre');
+    });
+
+    $('#shortCutIcon3').click(function(){
+        showWindow('nautilusmove','nautilus');
+    });
+
+    $('#shortCutIcon4').click(function(){
+        showWindow('termmove','term');
+    });
+
+    //z-index edubar
+    $('#shortcut-edubar').mouseover(function(){
+        setTimeout("barShow('edubar')",1000);
+    });
+
+    $('#shortcut-shortcuts').mouseover(function(){
+        setTimeout("barShow('shortcuts')",1000);
+    });
+
+    $('#bars-laterais1').mouseout(function() {
+        barHide('edubar');
+    });
+
+    $('#bars-laterais2').mouseout(function() {
+        barHide('shortcuts');
+    });
+
+    //windows overview
+    $('#browserW').mouseover(function(){
+        $('#browserWclose').show();
+    }).mouseout(function() {
+        $('#browserWclose').hide();
+    });
+
+    $('#libreW').mouseover(function(){
+        $('#libreWclose').show();
+    }).mouseout(function() {
+        $('#libreWclose').hide();
+    });
+
+    $('#nautilusW').mouseover(function(){
+        $('#nautilusWclose').show();
+    }).mouseout(function() {
+        $('#nautilusWclose').hide();
+    });
+
+    $('#termW').mouseover(function(){
+        $('#termWclose').show();
+    }).mouseout(function() {
+        $('#termWclose').hide();
+    });
+
+    $('#browserWclose').mouseover(function(){
+        $('#browserWclose').show();
+    });
+
+    $('#libreWclose').mouseover(function(){
+        $('#libreWclose').show();
+    });
+
+    $('#nautilusWclose').mouseover(function(){
+        $('#nautilusWclose').show();
+    });
+
+    $('#termWclose').mouseover(function(){
+        $('#termWclose').show();
+    });
+
+    $('#browserWclose').click(function(){
+        closeWindow('browser');
+    });
+
+    $('#libreWclose').click(function(){
+        closeWindow('libre');
+    });
+
+    $('#nautilusWclose').click(function(){
+        closeWindow('nautilus');
+    });
+
+    $('#termWclose').click(function(){
+        closeWindow('term');
+    });
+
+
+    $('#browserW').click(function(){
+        overviewToWindow('browser');
+    });
+
+    $('#libreW').click(function(){
+        overviewToWindow('libre');
+    });
+
+    $('#nautilusW').click(function(){
+        overviewToWindow('nautilus');
+    });
+
+    $('#termW').click(function(){
+        overviewToWindow('term');
+    });
+}
diff --git a/le-tour/js/jquery-1.2.3.min.js b/le-tour/js/jquery-1.2.3.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..3747929d8bf80f238139443a5032a606d726e5f0
--- /dev/null
+++ b/le-tour/js/jquery-1.2.3.min.js
@@ -0,0 +1,32 @@
+/*
+ * jQuery 1.2.3 - New Wave Javascript
+ *
+ * Copyright (c) 2008 John Resig (jquery.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date: 2008-02-06 00:21:25 -0500 (Wed, 06 Feb 2008) $
+ * $Rev: 4663 $
+ */
+(function(){if(window.jQuery)var _jQuery=window.jQuery;var jQuery=window.jQuery=function(selector,context){return new jQuery.prototype.init(selector,context);};if(window.$)var _$=window.$;window.$=jQuery;var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;var isSimple=/^.[^:#\[\.]*$/;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}else if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem)if(elem.id!=match[3])return jQuery().find(selector);else{this[0]=elem;this.length=1;return this;}else
+selector=[];}}else
+return new jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return new jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(selector.constructor==Array&&selector||(selector.jquery||selector.length&&selector!=window&&!selector.nodeType&&selector[0]!=undefined&&selector[0].nodeType)&&jQuery.makeArray(selector)||[selector]);},jquery:"1.2.3",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;this.each(function(i){if(this==elem)ret=i;});return ret;},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value==undefined)return this.length&&jQuery[type||"attr"](this[0],name)||undefined;else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
+return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
+selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return!selector?this:this.pushStack(jQuery.merge(this.get(),selector.constructor==String?jQuery(selector).get():selector.length!=undefined&&(!selector.nodeName||jQuery.nodeName(selector,"form"))?selector:[selector]));},is:function(selector){return selector?jQuery.multiFilter(selector,this).length>0:false;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
+return(this[0].value||"").replace(/\r/g,"");}return undefined;}return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=value.constructor==Array?value:[value];jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
+this.value=value;});},html:function(value){return value==undefined?(this.length?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value==null){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data==undefined&&this.length)data=jQuery.data(this[0],key);return data==null&&parts[1]?this.data(parts[0]):data;}else
+return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script")){scripts=scripts.add(elem);}else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.prototype.init.prototype=jQuery.prototype;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
+jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==1){target=this;i=0;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){if(target===options[name])continue;if(deep&&options[name]&&typeof options[name]=="object"&&target[name]&&!options[name].nodeType)target[name]=jQuery.extend(target[name],options[name]);else if(options[name]!=undefined)target[name]=options[name];}return target;};var expando="jQuery"+(new Date()).getTime(),uuid=0,windowData={};var exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i;jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/function/i.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
+script.appendChild(document.createTextNode(data));head.appendChild(script);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!=undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){if(args){if(object.length==undefined){for(var name in object)if(callback.apply(object[name],args)===false)break;}else
+for(var i=0,length=object.length;i<length;i++)if(callback.apply(object[i],args)===false)break;}else{if(object.length==undefined){for(var name in object)if(callback.call(object[name],name,object[name])===false)break;}else
+for(var i=0,length=object.length,value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
+jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret;function color(elem){if(!jQuery.browser.safari)return false;var ret=document.defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(elem.style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=elem.style.outline;elem.style.outline="0 solid black";elem.style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&elem.style&&elem.style[name])ret=elem.style[name];else if(document.defaultView&&document.defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var getComputedStyle=document.defaultView.getComputedStyle(elem,null);if(getComputedStyle&&!color(elem))ret=getComputedStyle.getPropertyValue(name);else{var swap=[],stack=[];for(var a=elem;a&&color(a);a=a.parentNode)stack.unshift(a);for(var i=0;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(getComputedStyle&&getComputedStyle.getPropertyValue(name))||"";for(var i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var style=elem.style.left,runtimeStyle=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;elem.style.left=ret||0;ret=elem.style.pixelLeft+"px";elem.style.left=style;elem.runtimeStyle.left=runtimeStyle;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem=elem.toString();if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
+ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var fix=jQuery.isXMLDoc(elem)?{}:jQuery.props;if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(fix[name]){if(value!=undefined)elem[fix[name]]=value;return elem[fix[name]];}else if(jQuery.browser.msie&&name=="style")return jQuery.attr(elem.style,"cssText",value);else if(value==undefined&&jQuery.browser.msie&&jQuery.nodeName(elem,"form")&&(name=="action"||name=="method"))return elem.getAttributeNode(name).nodeValue;else if(elem.tagName){if(value!=undefined){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem.setAttribute(name,""+value);}if(jQuery.browser.msie&&/href|src/.test(name)&&!jQuery.isXMLDoc(elem))return elem.getAttribute(name,2);return elem.getAttribute(name);}else{if(name=="opacity"&&jQuery.browser.msie){if(value!=undefined){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseFloat(value).toString()=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100).toString():"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(value!=undefined)elem[name]=value;return elem[name];}},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(typeof array!="array")for(var i=0,length=array.length;i<length;i++)ret.push(array[i]);else
+ret=array.slice(0);return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]==elem)return i;return-1;},merge:function(first,second){if(jQuery.browser.msie){for(var i=0;second[i];i++)if(second[i].nodeType!=8)first.push(second[i]);}else
+for(var i=0;second[i];i++)first.push(second[i]);return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv&&callback(elems[i],i)||inv&&!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!==null&&value!=undefined){if(value.constructor!=Array)value=[value];ret=ret.concat(value);}}return ret;}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,innerHTML:"innerHTML",className:"className",value:"value",disabled:"disabled",checked:"checked",readonly:"readOnly",selected:"selected",maxlength:"maxLength",selectedIndex:"selectedIndex",defaultValue:"defaultValue",tagName:"tagName",nodeName:"nodeName"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false;var re=quickChild;var m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[];var cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&(!elem||n!=elem))r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval!=undefined)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=function(){return fn.apply(this,arguments);};handler.data=data;handler.guid=fn.guid;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){var val;if(typeof jQuery=="undefined"||jQuery.event.triggered)return val;val=jQuery.event.handle.apply(arguments.callee.elem,arguments);return val;});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
+for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data||[]);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event)data.unshift(this.fix({type:type,target:elem}));data[0].type=type;if(exclusive)data[0].exclusive=true;if(jQuery.isFunction(jQuery.data(elem,"handle")))val=jQuery.data(elem,"handle").apply(elem,data);if(!fn&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val;event=jQuery.event.fix(event||window.event||{});var parts=event.type.split(".");event.type=parts[0];var handlers=jQuery.data(this,"events")&&jQuery.data(this,"events")[event.type],args=Array.prototype.slice.call(arguments,1);args.unshift(event);for(var j in handlers){var handler=handlers[j];args[0].handler=handler;args[0].data=handler.data;if(!parts[1]&&!event.exclusive||handler.type==parts[1]){var ret=handler.apply(this,args);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}if(jQuery.browser.msie)event.target=event.preventDefault=event.stopPropagation=event.handler=event.data=null;return val;},fix:function(event){var originalEvent=event;event=jQuery.extend({},originalEvent);event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=originalEvent.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;arguments[0].type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;arguments[0].type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){return this.each(function(){jQuery.event.add(this,type,function(event){jQuery(this).unbind(event);return(fn||data).apply(this,arguments);},fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){if(this[0])return jQuery.event.trigger(type,data,this[0],false,fn);return undefined;},toggle:function(){var args=arguments;return this.click(function(event){this.lastToggle=0==this.lastToggle?1:0;event.preventDefault();return args[this.lastToggle].apply(this,arguments)||false;});},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
+jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.apply(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({load:function(url,params,callback){if(jQuery.isFunction(url))return this.bind("load",url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=(new Date).getTime();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){var jsonp,jsre=/=\?(&|$)/g,status,data;s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(s.type.toLowerCase()=="get"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&s.type.toLowerCase()=="get"){var ts=(new Date()).getTime();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&s.type.toLowerCase()=="get"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");if((!s.url.indexOf("http")||!s.url.indexOf("//"))&&s.dataType=="script"&&s.type.toLowerCase()=="get"){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xml=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();xml.open(s.type,s.url,s.async,s.username,s.password);try{if(s.data)xml.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xml.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xml.setRequestHeader("X-Requested-With","XMLHttpRequest");xml.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend)s.beforeSend(xml);if(s.global)jQuery.event.trigger("ajaxSend",[xml,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xml&&(xml.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xml)&&"error"||s.ifModified&&jQuery.httpNotModified(xml,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xml,s.dataType);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xml.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
+jQuery.handleError(s,xml,status);complete();if(s.async)xml=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xml){xml.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xml.send(s.data);}catch(e){jQuery.handleError(s,xml,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xml,s]);}function complete(){if(s.complete)s.complete(xml,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xml,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xml;},handleError:function(s,xml,status,e){if(s.error)s.error(xml,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xml,s,e]);},active:0,httpSuccess:function(r){try{return!r.status&&location.protocol=="file:"||(r.status>=200&&r.status<300)||r.status==304||r.status==1223||jQuery.browser.safari&&r.status==undefined;}catch(e){}return false;},httpNotModified:function(xml,url){try{var xmlRes=xml.getResponseHeader("Last-Modified");return xml.status==304||xmlRes==jQuery.lastModified[url]||jQuery.browser.safari&&xml.status==undefined;}catch(e){}return false;},httpData:function(r,type){var ct=r.getResponseHeader("content-type");var xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0;var data=xml?r.responseXML:r.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
+for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
+s.push(encodeURIComponent(j)+"="+encodeURIComponent(a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle(fn,fn2):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall);var hidden=jQuery(this).is(":hidden"),self=this;for(var p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return jQuery.isFunction(opt.complete)&&opt.complete.apply(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
+e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.apply(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(!elem)return undefined;type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",array?jQuery.makeArray(array):[]);return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].apply(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:{slow:600,fast:200}[opt.duration])||400;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.apply(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.apply(this.elem,[this.now,this]);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=(new Date()).getTime();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=(new Date()).getTime();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done&&jQuery.isFunction(this.options.complete))this.options.complete.apply(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.fx.step={scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}};jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),fixed=jQuery.css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&jQuery.css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(jQuery.css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&jQuery.css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||jQuery.css(offsetChild,"position")=="absolute"))||(mozilla&&jQuery.css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l)||0;top+=parseInt(t)||0;}return results;};})();
\ No newline at end of file
diff --git a/le-tour/js/jquery.jqdock.min.js b/le-tour/js/jquery.jqdock.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..009f18a8cba833de3a42779e2526afd9bfdcb6be
--- /dev/null
+++ b/le-tour/js/jquery.jqdock.min.js
@@ -0,0 +1,28 @@
+/*
+ jquery.jqdock.js v2.0.0, by Wizzud
+*/
+(function(g,Q){if(!g.jqDock){var A=["Top","Right","Bottom","Left"],R=["Major","Minor"],m=[],w=g.map("ed,Item,Mouse,Label,Filter,Expand,Wrap,List,".split(","),function(a,b){m[b]="jqDock"+a;return"."+m[b]}),o=["JQDOCK","JQDOCK_conv","JQDOCK_li","JQDOCK_list"],I=["mouseenter","mousemove","mouseleave"],B=["docknudge","dockidle","dockfreeze"],v=["Idler","Inactive","Indock","Overdock","Offdock"],r={v:{wh:"height",xy:1,tl:"top",lead:0,trail:2,inv:"h"},h:{wh:"width",xy:0,tl:"left",lead:3,trail:1,inv:"v"}},
+J=[0,0],C=Q.setTimeout,x=function(a){return a.data(o[0])},da=function(){return!1},G=function(a){return g(a).parent().children(w[1]).index(a)},K=function(a,b,c,d){var e={},f=r[c.inv].wh,d=!d||a[c.wh]>b;e[c.wh]=d?b:a[c.wh];e[f]=d?Math.round(b*a[f]/a[c.wh]):a[f];return e},y=function(a,b){return g(a).closest(w[b||0])},S=function(a){var b={},c,d;for(c in a)(d=c.match(/^jqdock([A-Z])([a-zA-Z]+)$/))&&(b[d[1].toLowerCase()+d[2]]=a[c]);return b},E=function(a){a=parseInt(a,10);return isNaN(a)?0:a},z=function(a,
+b){for(var c=v[b]?b+1:v.length;b<c&&c--;)a[v[c]]&&(Q.clearTimeout(a[v[c]]),a[v[c]]=null)},T=function(){var a=g(this),b=a.attr("id")||"",c=a.data(o[1]),d=a.children("li").map(function(){var a=g("img",this).eq(0),b=a.parent("a");return b.length?a.siblings().length?null:b[0]:a.get(0)}),e=b?{id:b}:{},f;if(!a.length||!d.length)return this;if(c)return c;if(f=a.attr("style"))e.style=f;f=g("<div/>").addClass(m[7]).data("jqdock",g.extend({},a.data("jqdock"),S(a.data()))).data(o[3],{el:this,attr:e});a.hide().removeAttr("id");
+d.each(function(){g(this).data(o[2],g("<span/>").insertBefore(this)[0]).appendTo(f)});f.attr("id",b).insertBefore(a);a.data(o[1],f[0]);return f[0]},L=function(a){var b=g.now(),a=a?a.Stamp+a.Opts.duration:0;a>b&&(b-=a-b);return b},U=function(a){var b=a.data,a=x(g(b.menu)),c,d;a&&(c=a.Elem[b.idx],d=a.Opts,d.sizeMax?g.extend(c,K(this,d.sizeMax,r[r[d.vh].inv]),d.capSizing):(c.width=this.width,c.height=this.height),--a.Load||C(function(){g.jqdock.init(b.menu)},0))},V=function(a,b,c){b.Item.toggleClass(m[5],
+!c);a.Menu.trigger("dockitem",[b.Img[0],!c])},ea=function(){g(this).prev("img").triggerHandler("click")},D=function(a,b){var c=a.Elem[a.Current];c&&a.Opts.labels&&c.Label.el.toggle(!!b)},W=function(a){var b=r[a.Opts.vh],c=-1,d=J[b.xy]-a.Elem[0].Item.offset()[b.tl],e,f,g,h;if(0<=d)for(e=0;0>c&&e<a.ElCt;e++)f=a.Elem[e],g=f.Pad[b.lead]+f.Pad[b.trail],h=f.Major+g,d<h?(e!==a.Current&&(D(a),a.Current=e),c=f.Offset+d*(f.Initial+g)/h):d-=h;return c},X=function(a){for(var b=a.childNodes.length,c;b;)c=a.childNodes[--b],
+(c.childNodes||[]).length?X(c):3===c.nodeType&&a.removeChild(c)},Y=function(a){a.css({visibility:"visible"}).show()},H=function(a){var b=a.Opts.idle;b&&(z(a,0),a[v[0]]=C(function(){a.Menu.trigger(B[1])},b))},M=function(a,b){for(var c=a.Opts,d=r[c.vh].wh,e=a.ElCt,f,g,h,b=b||0===b?b:W(a);e--;)f=a.Elem[e],h=f.Initial,0<=b&&(g=Math.abs(b-f.Centre),g<c.distance&&(h=f[d]-Math.round((f[d]-f.Initial)*Math.pow(g,c.coefficient)/c.attenuation)),e===a.Current&&c.noAntiFlutter&&(g=[J[r[c.vh].xy],a.Current,h].join(),
+g===a.ToFro[0]&&h!==a.ToFro[2]?h=a.ToFro[2]:a.ToFro=[a.ToFro[1],g,h])),f.Final=h},fa=function(a){return a},$=function(a,b,c,d){var e=a.Elem[b],f=a.Opts,t=a.Yard,h=a.Border,l=r[f.vh],i=r[l.inv],k=f.labels,m=a.Elem[a.Current],s=e.src!==e.altsrc,q,n,u,j,p,Z;if(d||e.Major!==c){q=g.boxModel||"v"===f.vh?0:h[l.lead]+h[l.trail];!d&&e.Major===e.Initial&&(s&&(e.Img[0].src=e.altsrc),V(a,e));a.Spread+=c-e.Major;n=K(e,c,l);u=f.size-n[i.wh];p={middle:1,center:1,top:2,left:2}[f.align]||0;1<p?n["margin"+A[i.trail]]=
+u:p?(j=Math.round(u*(100-f.bias)/100),n["margin"+A[i.lead]]=u-j,n["margin"+A[i.trail]]=j):n["margin"+A[i.lead]]=u;if(c!==e.Major||d&&!b){if(f.flow)t.parent()[l.wh](a.Spread+h[l.lead]+h[l.trail]);t[l.wh](a.Spread+q)}e.Wrap.css(n);f.flow||t.css(l.tl,Math.floor(Math.max(0,(a[l.wh]-a.Spread)/2)));if(a.OnDock){if(m&&k){b=m.Label;f=b.el;if(b.mc)for(p in b.mc=0,r)for(Z in b[p]=f[r[p].wh](),{lead:1,trail:1})b[p]+=E(f.css("padding"+A[r[p][Z]]));"m"===k.charAt(0)&&f.css({top:Math.floor((m[R[i.xy]]-b.v)/2)});
+"c"===k.charAt(1)&&f.css({left:Math.floor((m[R[l.xy]]-b.h)/2)})}a.Stamp||D(a,1)}e.Major=c;e.Minor=n[i.wh];!d&&c===e.Initial&&(s&&(e.Img[0].src=e.src),V(a,e,1))}},N=function(a){var b=a.Opts,c=r[b.vh],d=b.duration+b.step,e,f;a.Stamp&&(d=L()-a.Stamp,d>=b.duration&&(a.Stamp=0));if(d>=b.step){f=(b.duration-d)/b.step;for(b=0;b<a.ElCt;b++)d=a.Elem[b],e=(e=d.Final-d.Major)&&1<f?d.Major+Math[0>e?"floor":"ceil"](e/f):d.Final,$(a,b,e);a.Spread>a[c.wh]&&(a.Yard.parent()[c.wh](a.Spread+a.Border[c.lead]+a.Border[c.trail]),
+a[c.wh]=a.Spread)}},O=function(a,b){var c=a.Elem,d=c.length;z(a,2);if(a.OnDock&&!a.Stamp){for(M(a,b);d&&c[d-1].Major===c[d-1].Final;)--d;d?(N(a),a[v[2]]=C(function(){O(a,b)},a.Opts.step)):D(a,1)}},aa=function(a,b){var c=a.Elem,d=c.length;if(!a.OnDock){for(;d&&c[d-1].Major<=c[d-1].Initial;)--d;W(a);if(d)N(a),a[v[4]]=C(function(){aa(a,b)},a.Opts.step);else{a.Stamp=0;for(d=c.length;d--;)c[d].Major=c[d].Final=c[d].Initial;a.Current=-1;b||H(a)}}},ba=function(a,b){var c=a.Elem,d=c.length;if(a.OnDock){for(M(a,
+b);d&&c[d-1].Major===c[d-1].Final;)--d;!d||!a.Stamp?(a.Stamp=0,O(a,b)):(N(a),a[v[3]]=C(function(){ba(a,b)},a.Opts.step))}},F=function(a,b,c,d){var e=b.Elem,f=e.length;0===a&&(b.OnDock=1,0<=b.Current&&b.Current!==c&&D(b),b.Current=c,b.Stamp=d&&1<d?0:L(b),ba(b,d?e[c].Centre:null));1===a&&(c!==b.Current&&(D(b),b.Current=c),O(b));if(2===a){z(b,1);b.OnDock=0;D(b);for(b.Stamp=L(b);f--;)e[f].Final=e[f].Initial;aa(b,!!d)}},ca=function(a){var b=x(y(this)),c=G(this),d=-1,e;b&&(b.Asleep?b.Opts.noBuffer||(b.Doze=
+{El:this,type:a.type,pageX:a.pageX,pageY:a.pageY}):(e=b.OnDock,z(b,0),J=[a.pageX,a.pageY],a.type===I[2]?e?d=2:H(b):(b.Opts.inactivity&&(z(b,1),b[v[1]]=C(function(){F(2,b,c,1)},b.Opts.inactivity)),a.type===I[1]?0>c?e&&0<=b.Current&&(d=2):d=!e||0>b.Current?0:1:0<=c&&!e&&(d=0)),b.Doze=null,0<=d&&F(d,b,c)))},P=function(a){var b=g(this),c=x(b),d=a.type===B[2],e=d?"freeze":"sleep";if(c)if(a.type===B[0]){if(e=c.Frozen?"thaw":"wake",c.Asleep&&(c.Asleep=!1===c.Opts.onWake.call(this,e),c.Asleep||(c.Frozen=
+!b.trigger("dockwake",[e]))),!c.Asleep)H(c),(b=c.Doze)&&ca.call(b.El,b)}else if(z(c,0),a=!c.Asleep||d&&!c.Frozen,!a||!1!==c.Opts.onSleep.call(this,e))c.Asleep=!z(c,d?-1:1),c.Frozen=c.Frozen||d,a&&b.trigger("docksleep",[e]),d?c.Stamp=c.OnDock=0:F(2,c,0,1)};g.jqdock=g.jqDock=function(){return{version:"2.0.0",defaults:{size:48,sizeMax:0,capSizing:0,distance:72,coefficient:1.5,duration:300,align:"bottom",labels:0,source:0,loader:0,inactivity:0,fadeIn:0,fadeLayer:"",step:50,setLabel:0,flow:0,idle:0,onReady:0,
+onSleep:0,onWake:0,noBuffer:0,active:-1,bias:50,noAntiFlutter:0},nextId:0,useJqLoader:g.browser.opera||g.browser.safari,init:function(a){var b=g(a),c=x(b),d=c.Opts,e=r[d.vh],f=r[e.inv],t=c.Border,h=d.fadeLayer,l=d.labels,i=c.ElCt,k=g("<div/>").css({position:"relative",padding:0}),o=k.clone().css({margin:0,border:"0 none",backgroundColor:"transparent"}),s=0,q=0,n,u,j,p;X(a);for(b.children().each(function(a,b){var e=c.Elem[a].Wrap=g(b).wrap(o.clone().append(o.clone())).parent();"h"===d.vh&&e.parent().css("float",
+"left");g("*",e).css({position:"relative",padding:0,margin:0,borderWidth:0,borderStyle:"none",verticalAlign:"top",display:"block",width:"100%",height:"100%"})});q<i;)j=c.Elem[q++],n=j.Pad,p=K(j,d.size,f,d.capSizing),j.Major=j.Final=j.Initial=p[e.wh],j.Item=j.Wrap.css(p).parent(),j.Img.attr({alt:""}).parent("a").andSelf().removeAttr("title"),c[f.wh]=Math.max(c[f.wh],d.size+n[f.lead]+n[f.trail]),j.Offset=s,j.Centre=s+n[e.lead]+j.Initial/2,s+=j.Initial+n[e.lead]+n[e.trail];for(q=0;q<i;)for(u in j=c.Elem[q++],
+n=j.Pad[e.lead]+j.Pad[e.trail],c.Spread+=j.Initial+n,{Centre:1,Offset:1}){M(c,j[u]);s=0;for(f=i;f--;)s+=c.Elem[f].Final+n;s>c[e.wh]&&(c[e.wh]=s)}for(;q;)j=c.Elem[--q],j.Final=j.Initial;b.wrapInner(k.addClass(m[6]).append(o.attr({id:c.Id,"class":m[8],style:""}).css({position:"absolute",top:0,left:0,padding:0,margin:0,overflow:"visible",height:c.height,width:c.width})));e=c.Yard=g("#"+c.Id);for(f=4;f--;)t[f]=E(e.css("border"+A[f]+"Width"));for(t=e.parent().width(c.width+t[1]+t[3]).height(c.height+t[0]+
+t[2]);q<i;)j=c.Elem[q],n=j.Item.css("padding",j.Pad.join("px ")+"px"),$(c,q,j.Final,!0),n.addClass(m[1]).add(j.Img).addClass(m[2]+q),n=j.Label,n.el=g("<div/>").css({position:"absolute",margin:0}).addClass(m[3]+" "+m[3]+j.Link).insertAfter(j.Img).hide().on("click",ea),l&&(k="b"===l.charAt(0),u="r"===l.charAt(1),n.el.css({top:k?"auto":0,left:u?"auto":0,bottom:k?0:"auto",right:u?0:"auto"})),j=d.setLabel.call(a,j.Title,q,n.el[0]),!1!==j&&g("<div/>").addClass(m[3]+"Text").html(j.toString()).appendTo(n.el),
+++q;j=b.on(B.join(" "),P);e.on(I.join(" "),w[1],ca).find("*").css({filter:"inherit"});c.Elem[d.active]&&F(0,c,d.active,2);c.Asleep=!1===d.onReady.call(a,"ready");c.Asleep||(h?("menu"!==h&&(j="dock"===h?e:t),c.Asleep=!!g(w[8]+","+w[6],j).addClass(m[4]).css({filter:"inherit"}),j.css({opacity:0}),Y(b),j.animate({opacity:1},d.fadeIn,function(){var a=y(this);x(a).Asleep=!g(w[4],this).add(this).css({filter:""}).removeClass(m[4]);a.trigger("dockshow",["ready"]).trigger(B[0])})):(Y(b),b.trigger("dockshow",
+["ready"]),H(c)))},convert:function(a){return T.call(g(a).get(0))}}}();g.fn.jqdock=g.fn.jqDock=function(a){var b=this,c,d;"nudge"===a||"idle"===a||"freeze"===a?b.filter(w[0]).each(function(){P.call(this,{type:"dock"+a})}):"destroy"===a?b=b.map(function(){var a=g(this).filter(w[0]),b=x(a.removeClass(m[0])),c=g.extend({},a.data(o[3])),d,l,i,k;if(a.length&&b){a.removeData(o[0]);z(b,-1);a.off(B.join(" "),P);for(d=0;d<b.ElCt;d++)for(l in i=b.Elem[d],(i.Label.el||g()).remove(),k=i.Img,k.attr(i.Orig.i).removeClass(m[2]+
+d),i.Orig.i.style||k.removeAttr("style"),"Link"===i.Link&&(k=k.parent(),k.attr(i.Orig.a),i.Orig.a.style||k.removeAttr("style")),c.el?g(k.data(o[2])).after(k).remove():a.append(k),i.Label.el=i.Orig.i=i.Orig.a=null,i)i[l]=null;g(w[6],a).empty().remove();l=b.Style;c.el?(a.empty().remove(),i=g(c.el).removeData(o[1]).attr(c.attr),c.attr.style||i.removeAttr("style")):l?a.attr("style",l):a.removeAttr("style");for(d in b)b[d]=null}return c.el||this}):"active"===a||"expand"===a?b.each(function(){var b=y(this,
+1),c=y(b),d=x(c);d&&(z(d,-1),d.Frozen||(d.Frozen=d.Asleep=!!c.trigger("docksleep",["freeze"])),F(0,d,G(b),"active"===a?2:1))}):"get"===a?(b=b.eq(0),c=b.is("img"),b=((d=x(c?y(b):b))&&c?d.Elem[G(y(b,1))]:d)||null):b.length&&!b.not("img").length?b.each(function(b,c){var d=x(y(c)),d=d?d.Elem[G(y(c,1))]:0,h=0,l,i,k;a=a||{};if(d){l=d.Major===d.Initial;for(k in{src:1,altsrc:1})a[k]&&(i=(g.isFunction(a[k])?a[k].call(c,d[k],k):a[k]).toString(),d[k]!==i&&(d[k]=i,h=("src"===k?l:!l)?k:h));h&&g(c).attr("src",
+d[h])}}):b=b.map(T).filter(function(){var a=g(this).children();return!y(this).length&&a.length&&!a.not("img").filter(function(){return 1!==g(this).children("img").parent("a").children().length}).length}).each(function(){var b=g(this).addClass(m[0]),c=g("img",b),d={Menu:b,Id:m[8]+g.jqdock.nextId++,Elem:[],OnDock:0,Stamp:0,width:0,height:0,Spread:0,Border:[],Opts:g.extend({},g.jqdock.defaults,b.data("jqdock"),S(b.data()),a||{}),Current:-1,Load:c.length,ElCt:c.length,ToFro:["","",0],Style:b.attr("style")},
+h=d.Opts,l,i;for(i in{size:1,distance:1,duration:1,inactivity:1,fadeIn:1,step:1,idle:1,active:1,sizeMax:1})h[i]=E(h[i]);i=1*h.coefficient;h.coefficient=isNaN(i)?1.5:i;if(l={middle:1,center:2}[h.align])i=E(h.bias),1>i&&(h.align=2>l?"top":"left"),99<i&&(h.align=2>l?"bottom":"right"),h.bias=i;h.labels&&!/^[tmb][lcr]$/.test(h.labels.toString())&&(h.labels={top:"br",left:"tr"}[h.align]||"tl");h.setLabel||(h.setLabel=fa);h.fadeLayer=h.fadeIn?{dock:1,wrap:1}[h.fadeLayer]?h.fadeLayer:"menu":"";for(i in{onSleep:1,
+onWake:1,onReady:1})h[i]||(h[i]=!1===h[i]?da:g.noop);l=/^m|c$/.test(h.labels);h.attenuation=Math.pow(h.distance,h.coefficient);h.vh={left:1,center:1,right:1}[h.align]?"v":"h";b.data(o[0],d);c.each(function(a,c){var f=g(c),i=f.parent("a"),n=i.attr("title")||"",m={},j,p,o;for(j in{src:1,alt:1,title:1,style:1})m[j]=f.attr(j)||"";o=(h.source?h.source.call(c,a):"")||f.data("jqdockAltsrc")||""||(/\.(gif|jpg|jpeg|png)$/i.test(m.alt||"")?m.alt:"")||m.src;d.Elem[a]={Img:f,src:m.src,altsrc:o,Title:m.title||
+n||"",Orig:{i:g.extend({},m),a:{title:n,style:i.attr("style")||""}},Label:{mc:l},Pad:[],Link:i.length?"Link":"Image"};for(j=4;j--;)d.Elem[a].Pad[j]=E(f.css("padding"+A[j]));if(h.loader?h.loader==="jquery":g.jqdock.useJqLoader)g("<img>").on("load",{idx:a,menu:b[0]},U).attr({src:o});else{p=new Image;p.onload=function(){U.call(this,{data:{idx:a,menu:b[0]}});p.onload="";p=null};p.src=o}})}).end();return b}}g(function(){g(".jqDockAuto").jqdock()})})(jQuery,window);
\ No newline at end of file
diff --git a/le-tour/js/jquery.js b/le-tour/js/jquery.js
new file mode 100644
index 0000000000000000000000000000000000000000..8c24ffc610d6f5de6ffa9c992030800249612b9c
--- /dev/null
+++ b/le-tour/js/jquery.js
@@ -0,0 +1,9472 @@
+/*!
+ * jQuery JavaScript Library v1.8.3
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time)
+ */
+(function( window, undefined ) {
+var
+	// A central reference to the root jQuery(document)
+	rootjQuery,
+
+	// The deferred used on DOM ready
+	readyList,
+
+	// Use the correct document accordingly with window argument (sandbox)
+	document = window.document,
+	location = window.location,
+	navigator = window.navigator,
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$,
+
+	// Save a reference to some core methods
+	core_push = Array.prototype.push,
+	core_slice = Array.prototype.slice,
+	core_indexOf = Array.prototype.indexOf,
+	core_toString = Object.prototype.toString,
+	core_hasOwn = Object.prototype.hasOwnProperty,
+	core_trim = String.prototype.trim,
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		return new jQuery.fn.init( selector, context, rootjQuery );
+	},
+
+	// Used for matching numbers
+	core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,
+
+	// Used for detecting and trimming whitespace
+	core_rnotwhite = /\S/,
+	core_rspace = /\s+/,
+
+	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+	// Match a standalone tag
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+
+	// JSON RegExp
+	rvalidchars = /^[\],:{}\s]*$/,
+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([\da-z])/gi,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return ( letter + "" ).toUpperCase();
+	},
+
+	// The ready event handler and self cleanup method
+	DOMContentLoaded = function() {
+		if ( document.addEventListener ) {
+			document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+			jQuery.ready();
+		} else if ( document.readyState === "complete" ) {
+			// we're here because readyState === "complete" in oldIE
+			// which is good enough for us to call the dom ready!
+			document.detachEvent( "onreadystatechange", DOMContentLoaded );
+			jQuery.ready();
+		}
+	},
+
+	// [[Class]] -> type pairs
+	class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+	constructor: jQuery,
+	init: function( selector, context, rootjQuery ) {
+		var match, elem, ret, doc;
+
+		// Handle $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle $(DOMElement)
+		if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					context = context instanceof jQuery ? context[0] : context;
+					doc = ( context && context.nodeType ? context.ownerDocument || context : document );
+
+					// scripts is true for back-compat
+					selector = jQuery.parseHTML( match[1], doc, true );
+					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+						this.attr.call( selector, context, true );
+					}
+
+					return jQuery.merge( this, selector );
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[2] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || rootjQuery ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return rootjQuery.ready( selector );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	},
+
+	// Start with an empty selector
+	selector: "",
+
+	// The current version of jQuery being used
+	jquery: "1.8.3",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	// The number of elements contained in the matched element set
+	size: function() {
+		return this.length;
+	},
+
+	toArray: function() {
+		return core_slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num == null ?
+
+			// Return a 'clean' array
+			this.toArray() :
+
+			// Return just the object
+			( num < 0 ? this[ this.length + num ] : this[ num ] );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems, name, selector ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		ret.context = this.context;
+
+		if ( name === "find" ) {
+			ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
+		} else if ( name ) {
+			ret.selector = this.selector + "." + name + "(" + selector + ")";
+		}
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+
+	ready: function( fn ) {
+		// Add the callback
+		jQuery.ready.promise().done( fn );
+
+		return this;
+	},
+
+	eq: function( i ) {
+		i = +i;
+		return i === -1 ?
+			this.slice( i ) :
+			this.slice( i, i + 1 );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	slice: function() {
+		return this.pushStack( core_slice.apply( this, arguments ),
+			"slice", core_slice.call(arguments).join(",") );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: core_push,
+	sort: [].sort,
+	splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+		target = arguments[1] || {};
+		// skip the boolean and the target
+		i = 2;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( length === i ) {
+		target = this;
+		--i;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	noConflict: function( deep ) {
+		if ( window.$ === jQuery ) {
+			window.$ = _$;
+		}
+
+		if ( deep && window.jQuery === jQuery ) {
+			window.jQuery = _jQuery;
+		}
+
+		return jQuery;
+	},
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( !document.body ) {
+			return setTimeout( jQuery.ready, 1 );
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+
+		// Trigger any bound ready events
+		if ( jQuery.fn.trigger ) {
+			jQuery( document ).trigger("ready").off("ready");
+		}
+	},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray || function( obj ) {
+		return jQuery.type(obj) === "array";
+	},
+
+	isWindow: function( obj ) {
+		return obj != null && obj == obj.window;
+	},
+
+	isNumeric: function( obj ) {
+		return !isNaN( parseFloat(obj) ) && isFinite( obj );
+	},
+
+	type: function( obj ) {
+		return obj == null ?
+			String( obj ) :
+			class2type[ core_toString.call(obj) ] || "object";
+	},
+
+	isPlainObject: function( obj ) {
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		try {
+			// Not own constructor property must be Object
+			if ( obj.constructor &&
+				!core_hasOwn.call(obj, "constructor") &&
+				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+				return false;
+			}
+		} catch ( e ) {
+			// IE8,9 Will throw exceptions on certain host objects #9897
+			return false;
+		}
+
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+
+		var key;
+		for ( key in obj ) {}
+
+		return key === undefined || core_hasOwn.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	// data: string of html
+	// context (optional): If specified, the fragment will be created in this context, defaults to document
+	// scripts (optional): If true, will include scripts passed in the html string
+	parseHTML: function( data, context, scripts ) {
+		var parsed;
+		if ( !data || typeof data !== "string" ) {
+			return null;
+		}
+		if ( typeof context === "boolean" ) {
+			scripts = context;
+			context = 0;
+		}
+		context = context || document;
+
+		// Single tag
+		if ( (parsed = rsingleTag.exec( data )) ) {
+			return [ context.createElement( parsed[1] ) ];
+		}
+
+		parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] );
+		return jQuery.merge( [],
+			(parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes );
+	},
+
+	parseJSON: function( data ) {
+		if ( !data || typeof data !== "string") {
+			return null;
+		}
+
+		// Make sure leading/trailing whitespace is removed (IE can't handle it)
+		data = jQuery.trim( data );
+
+		// Attempt to parse using the native JSON parser first
+		if ( window.JSON && window.JSON.parse ) {
+			return window.JSON.parse( data );
+		}
+
+		// Make sure the incoming data is actual JSON
+		// Logic borrowed from http://json.org/json2.js
+		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+			.replace( rvalidtokens, "]" )
+			.replace( rvalidbraces, "")) ) {
+
+			return ( new Function( "return " + data ) )();
+
+		}
+		jQuery.error( "Invalid JSON: " + data );
+	},
+
+	// Cross-browser xml parsing
+	parseXML: function( data ) {
+		var xml, tmp;
+		if ( !data || typeof data !== "string" ) {
+			return null;
+		}
+		try {
+			if ( window.DOMParser ) { // Standard
+				tmp = new DOMParser();
+				xml = tmp.parseFromString( data , "text/xml" );
+			} else { // IE
+				xml = new ActiveXObject( "Microsoft.XMLDOM" );
+				xml.async = "false";
+				xml.loadXML( data );
+			}
+		} catch( e ) {
+			xml = undefined;
+		}
+		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+			jQuery.error( "Invalid XML: " + data );
+		}
+		return xml;
+	},
+
+	noop: function() {},
+
+	// Evaluates a script in a global context
+	// Workarounds based on findings by Jim Driscoll
+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+	globalEval: function( data ) {
+		if ( data && core_rnotwhite.test( data ) ) {
+			// We use execScript on Internet Explorer
+			// We use an anonymous function so that context is window
+			// rather than jQuery in Firefox
+			( window.execScript || function( data ) {
+				window[ "eval" ].call( window, data );
+			} )( data );
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	// args is for internal usage only
+	each: function( obj, callback, args ) {
+		var name,
+			i = 0,
+			length = obj.length,
+			isObj = length === undefined || jQuery.isFunction( obj );
+
+		if ( args ) {
+			if ( isObj ) {
+				for ( name in obj ) {
+					if ( callback.apply( obj[ name ], args ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( ; i < length; ) {
+					if ( callback.apply( obj[ i++ ], args ) === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isObj ) {
+				for ( name in obj ) {
+					if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( ; i < length; ) {
+					if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Use native String.trim function wherever possible
+	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+		function( text ) {
+			return text == null ?
+				"" :
+				core_trim.call( text );
+		} :
+
+		// Otherwise use our own trimming functionality
+		function( text ) {
+			return text == null ?
+				"" :
+				( text + "" ).replace( rtrim, "" );
+		},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var type,
+			ret = results || [];
+
+		if ( arr != null ) {
+			// The window, strings (and functions) also have 'length'
+			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+			type = jQuery.type( arr );
+
+			if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) {
+				core_push.call( ret, arr );
+			} else {
+				jQuery.merge( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		var len;
+
+		if ( arr ) {
+			if ( core_indexOf ) {
+				return core_indexOf.call( arr, elem, i );
+			}
+
+			len = arr.length;
+			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+			for ( ; i < len; i++ ) {
+				// Skip accessing in sparse arrays
+				if ( i in arr && arr[ i ] === elem ) {
+					return i;
+				}
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var l = second.length,
+			i = first.length,
+			j = 0;
+
+		if ( typeof l === "number" ) {
+			for ( ; j < l; j++ ) {
+				first[ i++ ] = second[ j ];
+			}
+
+		} else {
+			while ( second[j] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, inv ) {
+		var retVal,
+			ret = [],
+			i = 0,
+			length = elems.length;
+		inv = !!inv;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			retVal = !!callback( elems[ i ], i );
+			if ( inv !== retVal ) {
+				ret.push( elems[ i ] );
+			}
+		}
+
+		return ret;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value, key,
+			ret = [],
+			i = 0,
+			length = elems.length,
+			// jquery objects are treated as arrays
+			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+		// Go through the array, translating each of the items to their
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( key in elems ) {
+				value = callback( elems[ key ], key, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return ret.concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var tmp, args, proxy;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = core_slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context, args.concat( core_slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	// Multifunctional method to get and set values of a collection
+	// The value/s can optionally be executed if it's a function
+	access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
+		var exec,
+			bulk = key == null,
+			i = 0,
+			length = elems.length;
+
+		// Sets many values
+		if ( key && typeof key === "object" ) {
+			for ( i in key ) {
+				jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
+			}
+			chainable = 1;
+
+		// Sets one value
+		} else if ( value !== undefined ) {
+			// Optionally, function values get executed if exec is true
+			exec = pass === undefined && jQuery.isFunction( value );
+
+			if ( bulk ) {
+				// Bulk operations only iterate when executing function values
+				if ( exec ) {
+					exec = fn;
+					fn = function( elem, key, value ) {
+						return exec.call( jQuery( elem ), value );
+					};
+
+				// Otherwise they run against the entire set
+				} else {
+					fn.call( elems, value );
+					fn = null;
+				}
+			}
+
+			if ( fn ) {
+				for (; i < length; i++ ) {
+					fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+				}
+			}
+
+			chainable = 1;
+		}
+
+		return chainable ?
+			elems :
+
+			// Gets
+			bulk ?
+				fn.call( elems ) :
+				length ? fn( elems[0], key ) : emptyGet;
+	},
+
+	now: function() {
+		return ( new Date() ).getTime();
+	}
+});
+
+jQuery.ready.promise = function( obj ) {
+	if ( !readyList ) {
+
+		readyList = jQuery.Deferred();
+
+		// Catch cases where $(document).ready() is called after the browser event has already occurred.
+		// we once tried to use readyState "interactive" here, but it caused issues like the one
+		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			setTimeout( jQuery.ready, 1 );
+
+		// Standards-based browsers support DOMContentLoaded
+		} else if ( document.addEventListener ) {
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", jQuery.ready, false );
+
+		// If IE event model is used
+		} else {
+			// Ensure firing before onload, maybe late but safe also for iframes
+			document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", jQuery.ready );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var top = false;
+
+			try {
+				top = window.frameElement == null && document.documentElement;
+			} catch(e) {}
+
+			if ( top && top.doScroll ) {
+				(function doScrollCheck() {
+					if ( !jQuery.isReady ) {
+
+						try {
+							// Use the trick by Diego Perini
+							// http://javascript.nwbox.com/IEContentLoaded/
+							top.doScroll("left");
+						} catch(e) {
+							return setTimeout( doScrollCheck, 50 );
+						}
+
+						// and execute any waiting functions
+						jQuery.ready();
+					}
+				})();
+			}
+		}
+	}
+	return readyList.promise( obj );
+};
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+	var object = optionsCache[ options ] = {};
+	jQuery.each( options.split( core_rspace ), function( _, flag ) {
+		object[ flag ] = true;
+	});
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		( optionsCache[ options ] || createOptions( options ) ) :
+		jQuery.extend( {}, options );
+
+	var // Last fire value (for non-forgettable lists)
+		memory,
+		// Flag to know if list was already fired
+		fired,
+		// Flag to know if list is currently firing
+		firing,
+		// First callback to fire (used internally by add and fireWith)
+		firingStart,
+		// End of the loop when firing
+		firingLength,
+		// Index of currently firing callback (modified by remove if needed)
+		firingIndex,
+		// Actual callback list
+		list = [],
+		// Stack of fire calls for repeatable lists
+		stack = !options.once && [],
+		// Fire callbacks
+		fire = function( data ) {
+			memory = options.memory && data;
+			fired = true;
+			firingIndex = firingStart || 0;
+			firingStart = 0;
+			firingLength = list.length;
+			firing = true;
+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+					memory = false; // To prevent further calls using add
+					break;
+				}
+			}
+			firing = false;
+			if ( list ) {
+				if ( stack ) {
+					if ( stack.length ) {
+						fire( stack.shift() );
+					}
+				} else if ( memory ) {
+					list = [];
+				} else {
+					self.disable();
+				}
+			}
+		},
+		// Actual Callbacks object
+		self = {
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+					// First, we save the current length
+					var start = list.length;
+					(function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							var type = jQuery.type( arg );
+							if ( type === "function" ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && type !== "string" ) {
+								// Inspect recursively
+								add( arg );
+							}
+						});
+					})( arguments );
+					// Do we need to add the callbacks to the
+					// current firing batch?
+					if ( firing ) {
+						firingLength = list.length;
+					// With memory, if we're not firing then
+					// we should call right away
+					} else if ( memory ) {
+						firingStart = start;
+						fire( memory );
+					}
+				}
+				return this;
+			},
+			// Remove a callback from the list
+			remove: function() {
+				if ( list ) {
+					jQuery.each( arguments, function( _, arg ) {
+						var index;
+						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+							list.splice( index, 1 );
+							// Handle firing indexes
+							if ( firing ) {
+								if ( index <= firingLength ) {
+									firingLength--;
+								}
+								if ( index <= firingIndex ) {
+									firingIndex--;
+								}
+							}
+						}
+					});
+				}
+				return this;
+			},
+			// Control if a given callback is in the list
+			has: function( fn ) {
+				return jQuery.inArray( fn, list ) > -1;
+			},
+			// Remove all callbacks from the list
+			empty: function() {
+				list = [];
+				return this;
+			},
+			// Have the list do nothing anymore
+			disable: function() {
+				list = stack = memory = undefined;
+				return this;
+			},
+			// Is it disabled?
+			disabled: function() {
+				return !list;
+			},
+			// Lock the list in its current state
+			lock: function() {
+				stack = undefined;
+				if ( !memory ) {
+					self.disable();
+				}
+				return this;
+			},
+			// Is it locked?
+			locked: function() {
+				return !stack;
+			},
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				args = args || [];
+				args = [ context, args.slice ? args.slice() : args ];
+				if ( list && ( !fired || stack ) ) {
+					if ( firing ) {
+						stack.push( args );
+					} else {
+						fire( args );
+					}
+				}
+				return this;
+			},
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+jQuery.extend({
+
+	Deferred: function( func ) {
+		var tuples = [
+				// action, add listener, listener list, final state
+				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+				[ "notify", "progress", jQuery.Callbacks("memory") ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				then: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+					return jQuery.Deferred(function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+							var action = tuple[ 0 ],
+								fn = fns[ i ];
+							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+							deferred[ tuple[1] ]( jQuery.isFunction( fn ) ?
+								function() {
+									var returned = fn.apply( this, arguments );
+									if ( returned && jQuery.isFunction( returned.promise ) ) {
+										returned.promise()
+											.done( newDefer.resolve )
+											.fail( newDefer.reject )
+											.progress( newDefer.notify );
+									} else {
+										newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
+									}
+								} :
+								newDefer[ action ]
+							);
+						});
+						fns = null;
+					}).promise();
+				},
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Keep pipe for back-compat
+		promise.pipe = promise.then;
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 3 ];
+
+			// promise[ done | fail | progress ] = list.add
+			promise[ tuple[1] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(function() {
+					// state = [ resolved | rejected ]
+					state = stateString;
+
+				// [ reject_list | resolve_list ].disable; progress_list.lock
+				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+			}
+
+			// deferred[ resolve | reject | notify ] = list.fire
+			deferred[ tuple[0] ] = list.fire;
+			deferred[ tuple[0] + "With" ] = list.fireWith;
+		});
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( subordinate /* , ..., subordinateN */ ) {
+		var i = 0,
+			resolveValues = core_slice.call( arguments ),
+			length = resolveValues.length,
+
+			// the count of uncompleted subordinates
+			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+			// Update function for both resolve and progress values
+			updateFunc = function( i, contexts, values ) {
+				return function( value ) {
+					contexts[ i ] = this;
+					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+					if( values === progressValues ) {
+						deferred.notifyWith( contexts, values );
+					} else if ( !( --remaining ) ) {
+						deferred.resolveWith( contexts, values );
+					}
+				};
+			},
+
+			progressValues, progressContexts, resolveContexts;
+
+		// add listeners to Deferred subordinates; treat others as resolved
+		if ( length > 1 ) {
+			progressValues = new Array( length );
+			progressContexts = new Array( length );
+			resolveContexts = new Array( length );
+			for ( ; i < length; i++ ) {
+				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+					resolveValues[ i ].promise()
+						.done( updateFunc( i, resolveContexts, resolveValues ) )
+						.fail( deferred.reject )
+						.progress( updateFunc( i, progressContexts, progressValues ) );
+				} else {
+					--remaining;
+				}
+			}
+		}
+
+		// if we're not waiting on anything, resolve the master
+		if ( !remaining ) {
+			deferred.resolveWith( resolveContexts, resolveValues );
+		}
+
+		return deferred.promise();
+	}
+});
+jQuery.support = (function() {
+
+	var support,
+		all,
+		a,
+		select,
+		opt,
+		input,
+		fragment,
+		eventName,
+		i,
+		isSupported,
+		clickFn,
+		div = document.createElement("div");
+
+	// Setup
+	div.setAttribute( "className", "t" );
+	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+	// Support tests won't run in some limited or non-browser environments
+	all = div.getElementsByTagName("*");
+	a = div.getElementsByTagName("a")[ 0 ];
+	if ( !all || !a || !all.length ) {
+		return {};
+	}
+
+	// First batch of tests
+	select = document.createElement("select");
+	opt = select.appendChild( document.createElement("option") );
+	input = div.getElementsByTagName("input")[ 0 ];
+
+	a.style.cssText = "top:1px;float:left;opacity:.5";
+	support = {
+		// IE strips leading whitespace when .innerHTML is used
+		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+		// Make sure that tbody elements aren't automatically inserted
+		// IE will insert them into empty tables
+		tbody: !div.getElementsByTagName("tbody").length,
+
+		// Make sure that link elements get serialized correctly by innerHTML
+		// This requires a wrapper element in IE
+		htmlSerialize: !!div.getElementsByTagName("link").length,
+
+		// Get the style information from getAttribute
+		// (IE uses .cssText instead)
+		style: /top/.test( a.getAttribute("style") ),
+
+		// Make sure that URLs aren't manipulated
+		// (IE normalizes it by default)
+		hrefNormalized: ( a.getAttribute("href") === "/a" ),
+
+		// Make sure that element opacity exists
+		// (IE uses filter instead)
+		// Use a regex to work around a WebKit issue. See #5145
+		opacity: /^0.5/.test( a.style.opacity ),
+
+		// Verify style float existence
+		// (IE uses styleFloat instead of cssFloat)
+		cssFloat: !!a.style.cssFloat,
+
+		// Make sure that if no value is specified for a checkbox
+		// that it defaults to "on".
+		// (WebKit defaults to "" instead)
+		checkOn: ( input.value === "on" ),
+
+		// Make sure that a selected-by-default option has a working selected property.
+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+		optSelected: opt.selected,
+
+		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+		getSetAttribute: div.className !== "t",
+
+		// Tests for enctype support on a form (#6743)
+		enctype: !!document.createElement("form").enctype,
+
+		// Makes sure cloning an html5 element does not cause problems
+		// Where outerHTML is undefined, this still works
+		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+
+		// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
+		boxModel: ( document.compatMode === "CSS1Compat" ),
+
+		// Will be defined later
+		submitBubbles: true,
+		changeBubbles: true,
+		focusinBubbles: false,
+		deleteExpando: true,
+		noCloneEvent: true,
+		inlineBlockNeedsLayout: false,
+		shrinkWrapBlocks: false,
+		reliableMarginRight: true,
+		boxSizingReliable: true,
+		pixelPosition: false
+	};
+
+	// Make sure checked status is properly cloned
+	input.checked = true;
+	support.noCloneChecked = input.cloneNode( true ).checked;
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as disabled)
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Test to see if it's possible to delete an expando from an element
+	// Fails in Internet Explorer
+	try {
+		delete div.test;
+	} catch( e ) {
+		support.deleteExpando = false;
+	}
+
+	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+		div.attachEvent( "onclick", clickFn = function() {
+			// Cloning a node shouldn't copy over any
+			// bound event handlers (IE does this)
+			support.noCloneEvent = false;
+		});
+		div.cloneNode( true ).fireEvent("onclick");
+		div.detachEvent( "onclick", clickFn );
+	}
+
+	// Check if a radio maintains its value
+	// after being appended to the DOM
+	input = document.createElement("input");
+	input.value = "t";
+	input.setAttribute( "type", "radio" );
+	support.radioValue = input.value === "t";
+
+	input.setAttribute( "checked", "checked" );
+
+	// #11217 - WebKit loses check when the name is after the checked attribute
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+	fragment = document.createDocumentFragment();
+	fragment.appendChild( div.lastChild );
+
+	// WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Check if a disconnected checkbox will retain its checked
+	// value of true after appended to the DOM (IE6/7)
+	support.appendChecked = input.checked;
+
+	fragment.removeChild( input );
+	fragment.appendChild( div );
+
+	// Technique from Juriy Zaytsev
+	// http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
+	// We only care about the case where non-standard event systems
+	// are used, namely in IE. Short-circuiting here helps us to
+	// avoid an eval call (in setAttribute) which can cause CSP
+	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+	if ( div.attachEvent ) {
+		for ( i in {
+			submit: true,
+			change: true,
+			focusin: true
+		}) {
+			eventName = "on" + i;
+			isSupported = ( eventName in div );
+			if ( !isSupported ) {
+				div.setAttribute( eventName, "return;" );
+				isSupported = ( typeof div[ eventName ] === "function" );
+			}
+			support[ i + "Bubbles" ] = isSupported;
+		}
+	}
+
+	// Run tests that need a body at doc ready
+	jQuery(function() {
+		var container, div, tds, marginDiv,
+			divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;",
+			body = document.getElementsByTagName("body")[0];
+
+		if ( !body ) {
+			// Return for frameset docs that don't have a body
+			return;
+		}
+
+		container = document.createElement("div");
+		container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px";
+		body.insertBefore( container, body.firstChild );
+
+		// Construct the test element
+		div = document.createElement("div");
+		container.appendChild( div );
+
+		// Check if table cells still have offsetWidth/Height when they are set
+		// to display:none and there are still other visible table cells in a
+		// table row; if so, offsetWidth/Height are not reliable for use when
+		// determining if an element has been hidden directly using
+		// display:none (it is still safe to use offsets if a parent element is
+		// hidden; don safety goggles and see bug #4512 for more information).
+		// (only IE 8 fails this test)
+		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+		tds = div.getElementsByTagName("td");
+		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
+		isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+		tds[ 0 ].style.display = "";
+		tds[ 1 ].style.display = "none";
+
+		// Check if empty table cells still have offsetWidth/Height
+		// (IE <= 8 fail this test)
+		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+		// Check box-sizing and margin behavior
+		div.innerHTML = "";
+		div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
+		support.boxSizing = ( div.offsetWidth === 4 );
+		support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
+
+		// NOTE: To any future maintainer, we've window.getComputedStyle
+		// because jsdom on node.js will break without it.
+		if ( window.getComputedStyle ) {
+			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+
+			// Check if div with explicit width and no margin-right incorrectly
+			// gets computed margin-right based on width of container. For more
+			// info see bug #3333
+			// Fails in WebKit before Feb 2011 nightlies
+			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+			marginDiv = document.createElement("div");
+			marginDiv.style.cssText = div.style.cssText = divReset;
+			marginDiv.style.marginRight = marginDiv.style.width = "0";
+			div.style.width = "1px";
+			div.appendChild( marginDiv );
+			support.reliableMarginRight =
+				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+		}
+
+		if ( typeof div.style.zoom !== "undefined" ) {
+			// Check if natively block-level elements act like inline-block
+			// elements when setting their display to 'inline' and giving
+			// them layout
+			// (IE < 8 does this)
+			div.innerHTML = "";
+			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+			// Check if elements with layout shrink-wrap their children
+			// (IE 6 does this)
+			div.style.display = "block";
+			div.style.overflow = "visible";
+			div.innerHTML = "<div></div>";
+			div.firstChild.style.width = "5px";
+			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+
+			container.style.zoom = 1;
+		}
+
+		// Null elements to avoid leaks in IE
+		body.removeChild( container );
+		container = div = tds = marginDiv = null;
+	});
+
+	// Null elements to avoid leaks in IE
+	fragment.removeChild( div );
+	all = a = select = opt = input = fragment = div = null;
+
+	return support;
+})();
+var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+	rmultiDash = /([A-Z])/g;
+
+jQuery.extend({
+	cache: {},
+
+	deletedIds: [],
+
+	// Remove at next major release (1.9/2.0)
+	uuid: 0,
+
+	// Unique for each copy of jQuery on the page
+	// Non-digits removed to match rinlinejQuery
+	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+	// The following elements throw uncatchable exceptions if you
+	// attempt to add expando properties to them.
+	noData: {
+		"embed": true,
+		// Ban all objects except for Flash (which handle expandos)
+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+		"applet": true
+	},
+
+	hasData: function( elem ) {
+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+		return !!elem && !isEmptyDataObject( elem );
+	},
+
+	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+		if ( !jQuery.acceptData( elem ) ) {
+			return;
+		}
+
+		var thisCache, ret,
+			internalKey = jQuery.expando,
+			getByName = typeof name === "string",
+
+			// We have to handle DOM nodes and JS objects differently because IE6-7
+			// can't GC object references properly across the DOM-JS boundary
+			isNode = elem.nodeType,
+
+			// Only DOM nodes need the global jQuery cache; JS object data is
+			// attached directly to the object so GC can occur automatically
+			cache = isNode ? jQuery.cache : elem,
+
+			// Only defining an ID for JS objects if its cache already exists allows
+			// the code to shortcut on the same path as a DOM node with no cache
+			id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+
+		// Avoid doing any more work than we need to when trying to get data on an
+		// object that has no data at all
+		if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+			return;
+		}
+
+		if ( !id ) {
+			// Only DOM nodes need a new unique ID for each element since their data
+			// ends up in the global cache
+			if ( isNode ) {
+				elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++;
+			} else {
+				id = internalKey;
+			}
+		}
+
+		if ( !cache[ id ] ) {
+			cache[ id ] = {};
+
+			// Avoids exposing jQuery metadata on plain JS objects when the object
+			// is serialized using JSON.stringify
+			if ( !isNode ) {
+				cache[ id ].toJSON = jQuery.noop;
+			}
+		}
+
+		// An object can be passed to jQuery.data instead of a key/value pair; this gets
+		// shallow copied over onto the existing cache
+		if ( typeof name === "object" || typeof name === "function" ) {
+			if ( pvt ) {
+				cache[ id ] = jQuery.extend( cache[ id ], name );
+			} else {
+				cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+			}
+		}
+
+		thisCache = cache[ id ];
+
+		// jQuery data() is stored in a separate object inside the object's internal data
+		// cache in order to avoid key collisions between internal data and user-defined
+		// data.
+		if ( !pvt ) {
+			if ( !thisCache.data ) {
+				thisCache.data = {};
+			}
+
+			thisCache = thisCache.data;
+		}
+
+		if ( data !== undefined ) {
+			thisCache[ jQuery.camelCase( name ) ] = data;
+		}
+
+		// Check for both converted-to-camel and non-converted data property names
+		// If a data property was specified
+		if ( getByName ) {
+
+			// First Try to find as-is property data
+			ret = thisCache[ name ];
+
+			// Test for null|undefined property data
+			if ( ret == null ) {
+
+				// Try to find the camelCased property
+				ret = thisCache[ jQuery.camelCase( name ) ];
+			}
+		} else {
+			ret = thisCache;
+		}
+
+		return ret;
+	},
+
+	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+		if ( !jQuery.acceptData( elem ) ) {
+			return;
+		}
+
+		var thisCache, i, l,
+
+			isNode = elem.nodeType,
+
+			// See jQuery.data for more information
+			cache = isNode ? jQuery.cache : elem,
+			id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+		// If there is already no cache entry for this object, there is no
+		// purpose in continuing
+		if ( !cache[ id ] ) {
+			return;
+		}
+
+		if ( name ) {
+
+			thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+			if ( thisCache ) {
+
+				// Support array or space separated string names for data keys
+				if ( !jQuery.isArray( name ) ) {
+
+					// try the string as a key before any manipulation
+					if ( name in thisCache ) {
+						name = [ name ];
+					} else {
+
+						// split the camel cased version by spaces unless a key with the spaces exists
+						name = jQuery.camelCase( name );
+						if ( name in thisCache ) {
+							name = [ name ];
+						} else {
+							name = name.split(" ");
+						}
+					}
+				}
+
+				for ( i = 0, l = name.length; i < l; i++ ) {
+					delete thisCache[ name[i] ];
+				}
+
+				// If there is no data left in the cache, we want to continue
+				// and let the cache object itself get destroyed
+				if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+					return;
+				}
+			}
+		}
+
+		// See jQuery.data for more information
+		if ( !pvt ) {
+			delete cache[ id ].data;
+
+			// Don't destroy the parent cache unless the internal data object
+			// had been the only thing left in it
+			if ( !isEmptyDataObject( cache[ id ] ) ) {
+				return;
+			}
+		}
+
+		// Destroy the cache
+		if ( isNode ) {
+			jQuery.cleanData( [ elem ], true );
+
+		// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+		} else if ( jQuery.support.deleteExpando || cache != cache.window ) {
+			delete cache[ id ];
+
+		// When all else fails, null
+		} else {
+			cache[ id ] = null;
+		}
+	},
+
+	// For internal use only.
+	_data: function( elem, name, data ) {
+		return jQuery.data( elem, name, data, true );
+	},
+
+	// A method for determining if a DOM node can handle the data expando
+	acceptData: function( elem ) {
+		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+		// nodes accept data unless otherwise specified; rejection can be conditional
+		return !noData || noData !== true && elem.getAttribute("classid") === noData;
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		var parts, part, attr, name, l,
+			elem = this[0],
+			i = 0,
+			data = null;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = jQuery.data( elem );
+
+				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+					attr = elem.attributes;
+					for ( l = attr.length; i < l; i++ ) {
+						name = attr[i].name;
+
+						if ( !name.indexOf( "data-" ) ) {
+							name = jQuery.camelCase( name.substring(5) );
+
+							dataAttr( elem, name, data[ name ] );
+						}
+					}
+					jQuery._data( elem, "parsedAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each(function() {
+				jQuery.data( this, key );
+			});
+		}
+
+		parts = key.split( ".", 2 );
+		parts[1] = parts[1] ? "." + parts[1] : "";
+		part = parts[1] + "!";
+
+		return jQuery.access( this, function( value ) {
+
+			if ( value === undefined ) {
+				data = this.triggerHandler( "getData" + part, [ parts[0] ] );
+
+				// Try to fetch any internally stored data first
+				if ( data === undefined && elem ) {
+					data = jQuery.data( elem, key );
+					data = dataAttr( elem, key, data );
+				}
+
+				return data === undefined && parts[1] ?
+					this.data( parts[0] ) :
+					data;
+			}
+
+			parts[1] = value;
+			this.each(function() {
+				var self = jQuery( this );
+
+				self.triggerHandler( "setData" + part, parts );
+				jQuery.data( this, key, value );
+				self.triggerHandler( "changeData" + part, parts );
+			});
+		}, null, value, arguments.length > 1, null, false );
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+
+function dataAttr( elem, key, data ) {
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+
+		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+				data === "false" ? false :
+				data === "null" ? null :
+				// Only convert to a number if it doesn't change the string
+				+data + "" === data ? +data :
+				rbrace.test( data ) ? jQuery.parseJSON( data ) :
+					data;
+			} catch( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			jQuery.data( elem, key, data );
+
+		} else {
+			data = undefined;
+		}
+	}
+
+	return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+	var name;
+	for ( name in obj ) {
+
+		// if the public data object is empty, the private is still empty
+		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+			continue;
+		}
+		if ( name !== "toJSON" ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+jQuery.extend({
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = jQuery._data( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || jQuery.isArray(data) ) {
+					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// not intended for public consumption - generates a queueHooks object, or returns the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+			empty: jQuery.Callbacks("once memory").add(function() {
+				jQuery.removeData( elem, type + "queue", true );
+				jQuery.removeData( elem, key, true );
+			})
+		});
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[0], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each(function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[0] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+	// Based off of the plugin by Clint Helfers, with permission.
+	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+	delay: function( time, type ) {
+		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+		type = type || "fx";
+
+		return this.queue( type, function( next, hooks ) {
+			var timeout = setTimeout( next, time );
+			hooks.stop = function() {
+				clearTimeout( timeout );
+			};
+		});
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while( i-- ) {
+			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+});
+var nodeHook, boolHook, fixSpecified,
+	rclass = /[\t\r\n]/g,
+	rreturn = /\r/g,
+	rtype = /^(?:button|input)$/i,
+	rfocusable = /^(?:button|input|object|select|textarea)$/i,
+	rclickable = /^a(?:rea|)$/i,
+	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+	getSetAttribute = jQuery.support.getSetAttribute;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each(function() {
+			jQuery.removeAttr( this, name );
+		});
+	},
+
+	prop: function( name, value ) {
+		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		name = jQuery.propFix[ name ] || name;
+		return this.each(function() {
+			// try/catch handles cases where IE balks (such as removing a property on window)
+			try {
+				this[ name ] = undefined;
+				delete this[ name ];
+			} catch( e ) {}
+		});
+	},
+
+	addClass: function( value ) {
+		var classNames, i, l, elem,
+			setClass, c, cl;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).addClass( value.call(this, j, this.className) );
+			});
+		}
+
+		if ( value && typeof value === "string" ) {
+			classNames = value.split( core_rspace );
+
+			for ( i = 0, l = this.length; i < l; i++ ) {
+				elem = this[ i ];
+
+				if ( elem.nodeType === 1 ) {
+					if ( !elem.className && classNames.length === 1 ) {
+						elem.className = value;
+
+					} else {
+						setClass = " " + elem.className + " ";
+
+						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+							if ( setClass.indexOf( " " + classNames[ c ] + " " ) < 0 ) {
+								setClass += classNames[ c ] + " ";
+							}
+						}
+						elem.className = jQuery.trim( setClass );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var removes, className, elem, c, cl, i, l;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).removeClass( value.call(this, j, this.className) );
+			});
+		}
+		if ( (value && typeof value === "string") || value === undefined ) {
+			removes = ( value || "" ).split( core_rspace );
+
+			for ( i = 0, l = this.length; i < l; i++ ) {
+				elem = this[ i ];
+				if ( elem.nodeType === 1 && elem.className ) {
+
+					className = (" " + elem.className + " ").replace( rclass, " " );
+
+					// loop over each item in the removal list
+					for ( c = 0, cl = removes.length; c < cl; c++ ) {
+						// Remove until there is nothing to remove,
+						while ( className.indexOf(" " + removes[ c ] + " ") >= 0 ) {
+							className = className.replace( " " + removes[ c ] + " " , " " );
+						}
+					}
+					elem.className = value ? jQuery.trim( className ) : "";
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isBool = typeof stateVal === "boolean";
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className,
+					i = 0,
+					self = jQuery( this ),
+					state = stateVal,
+					classNames = value.split( core_rspace );
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space separated list
+					state = isBool ? state : !self.hasClass( className );
+					self[ state ? "addClass" : "removeClass" ]( className );
+				}
+
+			} else if ( type === "undefined" || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					jQuery._data( this, "__className__", this.className );
+				}
+
+				// toggle whole className
+				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ",
+			i = 0,
+			l = this.length;
+		for ( ; i < l; i++ ) {
+			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+				return true;
+			}
+		}
+
+		return false;
+	},
+
+	val: function( value ) {
+		var hooks, ret, isFunction,
+			elem = this[0];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+					// handle most common string cases
+					ret.replace(rreturn, "") :
+					// handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each(function( i ) {
+			var val,
+				self = jQuery(this);
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, self.val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+			} else if ( typeof val === "number" ) {
+				val += "";
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map(val, function ( value ) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				// attributes.value is undefined in Blackberry 4.7 but
+				// uses .value. See #6932
+				var val = elem.attributes.value;
+				return !val || val.specified ? elem.value : elem.text;
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one" || index < 0,
+					values = one ? null : [],
+					max = one ? index + 1 : options.length,
+					i = index < 0 ?
+						max :
+						one ? index : 0;
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// oldIE doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+							// Don't return options that are disabled or in a disabled optgroup
+							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var values = jQuery.makeArray( value );
+
+				jQuery(elem).find("option").each(function() {
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+				});
+
+				if ( !values.length ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	},
+
+	// Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9
+	attrFn: {},
+
+	attr: function( elem, name, value, pass ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set attributes on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) {
+			return jQuery( elem )[ name ]( value );
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		// All attributes are lowercase
+		// Grab necessary hook if one is defined
+		if ( notxml ) {
+			name = name.toLowerCase();
+			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+		}
+
+		if ( value !== undefined ) {
+
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return;
+
+			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				elem.setAttribute( name, value + "" );
+				return value;
+			}
+
+		} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+			return ret;
+
+		} else {
+
+			ret = elem.getAttribute( name );
+
+			// Non-existent attributes return null, we normalize to undefined
+			return ret === null ?
+				undefined :
+				ret;
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var propName, attrNames, name, isBool,
+			i = 0;
+
+		if ( value && elem.nodeType === 1 ) {
+
+			attrNames = value.split( core_rspace );
+
+			for ( ; i < attrNames.length; i++ ) {
+				name = attrNames[ i ];
+
+				if ( name ) {
+					propName = jQuery.propFix[ name ] || name;
+					isBool = rboolean.test( name );
+
+					// See #9699 for explanation of this approach (setting first, then removal)
+					// Do not do this for boolean attributes (see #10870)
+					if ( !isBool ) {
+						jQuery.attr( elem, name, "" );
+					}
+					elem.removeAttribute( getSetAttribute ? name : propName );
+
+					// Set corresponding property to false for boolean attributes
+					if ( isBool && propName in elem ) {
+						elem[ propName ] = false;
+					}
+				}
+			}
+		}
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				// We can't allow the type property to be changed (since it causes problems in IE)
+				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+					jQuery.error( "type property can't be changed" );
+				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+					// Setting the type on a radio button after the value resets the value in IE6-9
+					// Reset value to it's default in case type is set after value
+					// This is for element creation
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		},
+		// Use the value property for back compat
+		// Use the nodeHook for button elements in IE6/7 (#1954)
+		value: {
+			get: function( elem, name ) {
+				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+					return nodeHook.get( elem, name );
+				}
+				return name in elem ?
+					elem.value :
+					null;
+			},
+			set: function( elem, value, name ) {
+				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+					return nodeHook.set( elem, value, name );
+				}
+				// Does not return so that setAttribute is also used
+				elem.value = value;
+			}
+		}
+	},
+
+	propFix: {
+		tabindex: "tabIndex",
+		readonly: "readOnly",
+		"for": "htmlFor",
+		"class": "className",
+		maxlength: "maxLength",
+		cellspacing: "cellSpacing",
+		cellpadding: "cellPadding",
+		rowspan: "rowSpan",
+		colspan: "colSpan",
+		usemap: "useMap",
+		frameborder: "frameBorder",
+		contenteditable: "contentEditable"
+	},
+
+	prop: function( elem, name, value ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set properties on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		if ( notxml ) {
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				return ( elem[ name ] = value );
+			}
+
+		} else {
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+				return ret;
+
+			} else {
+				return elem[ name ];
+			}
+		}
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				var attributeNode = elem.getAttributeNode("tabindex");
+
+				return attributeNode && attributeNode.specified ?
+					parseInt( attributeNode.value, 10 ) :
+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+						0 :
+						undefined;
+			}
+		}
+	}
+});
+
+// Hook for boolean attributes
+boolHook = {
+	get: function( elem, name ) {
+		// Align boolean attributes with corresponding properties
+		// Fall back to attribute presence where some booleans are not supported
+		var attrNode,
+			property = jQuery.prop( elem, name );
+		return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+			name.toLowerCase() :
+			undefined;
+	},
+	set: function( elem, value, name ) {
+		var propName;
+		if ( value === false ) {
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			// value is true since we know at this point it's type boolean and not false
+			// Set boolean attributes to the same name and set the DOM property
+			propName = jQuery.propFix[ name ] || name;
+			if ( propName in elem ) {
+				// Only set the IDL specifically if it already exists on the element
+				elem[ propName ] = true;
+			}
+
+			elem.setAttribute( name, name.toLowerCase() );
+		}
+		return name;
+	}
+};
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+	fixSpecified = {
+		name: true,
+		id: true,
+		coords: true
+	};
+
+	// Use this for any attribute in IE6/7
+	// This fixes almost every IE6/7 issue
+	nodeHook = jQuery.valHooks.button = {
+		get: function( elem, name ) {
+			var ret;
+			ret = elem.getAttributeNode( name );
+			return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ?
+				ret.value :
+				undefined;
+		},
+		set: function( elem, value, name ) {
+			// Set the existing or create a new attribute node
+			var ret = elem.getAttributeNode( name );
+			if ( !ret ) {
+				ret = document.createAttribute( name );
+				elem.setAttributeNode( ret );
+			}
+			return ( ret.value = value + "" );
+		}
+	};
+
+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+	// This is for removals
+	jQuery.each([ "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			set: function( elem, value ) {
+				if ( value === "" ) {
+					elem.setAttribute( name, "auto" );
+					return value;
+				}
+			}
+		});
+	});
+
+	// Set contenteditable to false on removals(#10429)
+	// Setting to empty string throws an error as an invalid value
+	jQuery.attrHooks.contenteditable = {
+		get: nodeHook.get,
+		set: function( elem, value, name ) {
+			if ( value === "" ) {
+				value = "false";
+			}
+			nodeHook.set( elem, value, name );
+		}
+	};
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			get: function( elem ) {
+				var ret = elem.getAttribute( name, 2 );
+				return ret === null ? undefined : ret;
+			}
+		});
+	});
+}
+
+if ( !jQuery.support.style ) {
+	jQuery.attrHooks.style = {
+		get: function( elem ) {
+			// Return undefined in the case of empty string
+			// Normalize to lowercase since IE uppercases css property names
+			return elem.style.cssText.toLowerCase() || undefined;
+		},
+		set: function( elem, value ) {
+			return ( elem.style.cssText = value + "" );
+		}
+	};
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+
+			if ( parent ) {
+				parent.selectedIndex;
+
+				// Make sure that it also works with optgroups, see #5701
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+			return null;
+		}
+	});
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+	jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+	jQuery.each([ "radio", "checkbox" ], function() {
+		jQuery.valHooks[ this ] = {
+			get: function( elem ) {
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+				return elem.getAttribute("value") === null ? "on" : elem.value;
+			}
+		};
+	});
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+			}
+		}
+	});
+});
+var rformElems = /^(?:textarea|input|select)$/i,
+	rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/,
+	rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|contextmenu)|click/,
+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	hoverHack = function( events ) {
+		return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
+	};
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var elemData, eventHandle, events,
+			t, tns, type, namespaces, handleObj,
+			handleObjIn, handlers, special;
+
+		// Don't attach events to noData or text/comment nodes (allow plain objects tho)
+		if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		events = elemData.events;
+		if ( !events ) {
+			elemData.events = events = {};
+		}
+		eventHandle = elemData.handle;
+		if ( !eventHandle ) {
+			elemData.handle = eventHandle = function( e ) {
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+			eventHandle.elem = elem;
+		}
+
+		// Handle multiple events separated by a space
+		// jQuery(...).bind("mouseover mouseout", fn);
+		types = jQuery.trim( hoverHack(types) ).split( " " );
+		for ( t = 0; t < types.length; t++ ) {
+
+			tns = rtypenamespace.exec( types[t] ) || [];
+			type = tns[1];
+			namespaces = ( tns[2] || "" ).split( "." ).sort();
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend({
+				type: type,
+				origType: tns[1],
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join(".")
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			handlers = events[ type ];
+			if ( !handlers ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener/attachEvent if the special events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	global: {},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var t, tns, type, origType, namespaces, origCount,
+			j, events, special, eventType, handleObj,
+			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+
+		if ( !elemData || !(events = elemData.events) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
+		for ( t = 0; t < types.length; t++ ) {
+			tns = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tns[1];
+			namespaces = tns[2];
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector? special.delegateType : special.bindType ) || type;
+			eventType = events[ type ] || [];
+			origCount = eventType.length;
+			namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
+
+			// Remove matching events
+			for ( j = 0; j < eventType.length; j++ ) {
+				handleObj = eventType[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					 ( !handler || handler.guid === handleObj.guid ) &&
+					 ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
+					 ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+					eventType.splice( j--, 1 );
+
+					if ( handleObj.selector ) {
+						eventType.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( eventType.length === 0 && origCount !== eventType.length ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			delete elemData.handle;
+
+			// removeData also checks for emptiness and clears the expando if empty
+			// so use it instead of delete
+			jQuery.removeData( elem, "events", true );
+		}
+	},
+
+	// Events that are safe to short-circuit if no handlers are attached.
+	// Native DOM events should not be added, they may have inline handlers.
+	customEvent: {
+		"getData": true,
+		"setData": true,
+		"changeData": true
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+		// Don't do events on text and comment nodes
+		if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
+			return;
+		}
+
+		// Event object or event type
+		var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType,
+			type = event.type || event,
+			namespaces = [];
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf( "!" ) >= 0 ) {
+			// Exclusive events trigger only for the exact event (no namespaces)
+			type = type.slice(0, -1);
+			exclusive = true;
+		}
+
+		if ( type.indexOf( "." ) >= 0 ) {
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split(".");
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+
+		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+			// No jQuery handlers for this event type, and it can't have inline handlers
+			return;
+		}
+
+		// Caller can pass in an Event, Object, or just an event type string
+		event = typeof event === "object" ?
+			// jQuery.Event object
+			event[ jQuery.expando ] ? event :
+			// Object literal
+			new jQuery.Event( type, event ) :
+			// Just the event type (string)
+			new jQuery.Event( type );
+
+		event.type = type;
+		event.isTrigger = true;
+		event.exclusive = exclusive;
+		event.namespace = namespaces.join( "." );
+		event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
+		ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
+
+		// Handle a global trigger
+		if ( !elem ) {
+
+			// TODO: Stop taunting the data cache; remove global events and always attach to document
+			cache = jQuery.cache;
+			for ( i in cache ) {
+				if ( cache[ i ].events && cache[ i ].events[ type ] ) {
+					jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
+				}
+			}
+			return;
+		}
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data != null ? jQuery.makeArray( data ) : [];
+		data.unshift( event );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		eventPath = [[ elem, special.bindType || type ]];
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
+			for ( old = elem; cur; cur = cur.parentNode ) {
+				eventPath.push([ cur, bubbleType ]);
+				old = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( old === (elem.ownerDocument || document) ) {
+				eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
+			}
+		}
+
+		// Fire handlers on the event path
+		for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
+
+			cur = eventPath[i][0];
+			event.type = eventPath[i][1];
+
+			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+			// Note that this is a bare JS function and not a jQuery handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
+				event.preventDefault();
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Can't use an .isFunction() check here because IE6/7 fails that test.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				// IE<9 dies on focus/blur to hidden element (#1486)
+				if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					old = elem[ ontype ];
+
+					if ( old ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					elem[ type ]();
+					jQuery.event.triggered = undefined;
+
+					if ( old ) {
+						elem[ ontype ] = old;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	dispatch: function( event ) {
+
+		// Make a writable jQuery.Event from the native event object
+		event = jQuery.event.fix( event || window.event );
+
+		var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related,
+			handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
+			delegateCount = handlers.delegateCount,
+			args = core_slice.call( arguments ),
+			run_all = !event.exclusive && !event.namespace,
+			special = jQuery.event.special[ event.type ] || {},
+			handlerQueue = [];
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[0] = event;
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers that should run if there are delegated events
+		// Avoid non-left-click bubbling in Firefox (#3861)
+		if ( delegateCount && !(event.button && event.type === "click") ) {
+
+			for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
+
+				// Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.disabled !== true || event.type !== "click" ) {
+					selMatch = {};
+					matches = [];
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+						sel = handleObj.selector;
+
+						if ( selMatch[ sel ] === undefined ) {
+							selMatch[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) >= 0 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( selMatch[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push({ elem: cur, matches: matches });
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( handlers.length > delegateCount ) {
+			handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
+		}
+
+		// Run delegates first; they may want to stop propagation beneath us
+		for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
+			matched = handlerQueue[ i ];
+			event.currentTarget = matched.elem;
+
+			for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
+				handleObj = matched.matches[ j ];
+
+				// Triggered event must either 1) be non-exclusive and have no namespace, or
+				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+				if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
+
+					event.data = handleObj.data;
+					event.handleObj = handleObj;
+
+					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+							.apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						event.result = ret;
+						if ( ret === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	// Includes some event props shared by KeyEvent and MouseEvent
+	// *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
+	props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+	fixHooks: {},
+
+	keyHooks: {
+		props: "char charCode key keyCode".split(" "),
+		filter: function( event, original ) {
+
+			// Add which for key events
+			if ( event.which == null ) {
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
+			}
+
+			return event;
+		}
+	},
+
+	mouseHooks: {
+		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+		filter: function( event, original ) {
+			var eventDoc, doc, body,
+				button = original.button,
+				fromElement = original.fromElement;
+
+			// Calculate pageX/Y if missing and clientX/Y available
+			if ( event.pageX == null && original.clientX != null ) {
+				eventDoc = event.target.ownerDocument || document;
+				doc = eventDoc.documentElement;
+				body = eventDoc.body;
+
+				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+			}
+
+			// Add relatedTarget, if necessary
+			if ( !event.relatedTarget && fromElement ) {
+				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+			}
+
+			// Add which for click: 1 === left; 2 === middle; 3 === right
+			// Note: button is not normalized, so don't use it
+			if ( !event.which && button !== undefined ) {
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+			}
+
+			return event;
+		}
+	},
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// Create a writable copy of the event object and normalize some properties
+		var i, prop,
+			originalEvent = event,
+			fixHook = jQuery.event.fixHooks[ event.type ] || {},
+			copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+		event = jQuery.Event( originalEvent );
+
+		for ( i = copy.length; i; ) {
+			prop = copy[ --i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
+		if ( !event.target ) {
+			event.target = originalEvent.srcElement || document;
+		}
+
+		// Target should not be a text node (#504, Safari)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8)
+		event.metaKey = !!event.metaKey;
+
+		return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
+	},
+
+	special: {
+		load: {
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+
+		focus: {
+			delegateType: "focusin"
+		},
+		blur: {
+			delegateType: "focusout"
+		},
+
+		beforeunload: {
+			setup: function( data, namespaces, eventHandle ) {
+				// We only want to do this special case on windows
+				if ( jQuery.isWindow( this ) ) {
+					this.onbeforeunload = eventHandle;
+				}
+			},
+
+			teardown: function( namespaces, eventHandle ) {
+				if ( this.onbeforeunload === eventHandle ) {
+					this.onbeforeunload = null;
+				}
+			}
+		}
+	},
+
+	simulate: function( type, elem, event, bubble ) {
+		// Piggyback on a donor event to simulate a different one.
+		// Fake originalEvent to avoid donor's stopPropagation, but if the
+		// simulated event prevents default then we do the same on the donor.
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{ type: type,
+				isSimulated: true,
+				originalEvent: {}
+			}
+		);
+		if ( bubble ) {
+			jQuery.event.trigger( e, null, elem );
+		} else {
+			jQuery.event.dispatch.call( elem, e );
+		}
+		if ( e.isDefaultPrevented() ) {
+			event.preventDefault();
+		}
+	}
+};
+
+// Some plugins are using, but it's undocumented/deprecated and will be removed.
+// The 1.7 special event interface should provide all the hooks needed now.
+jQuery.event.handle = jQuery.event.dispatch;
+
+jQuery.removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		if ( elem.removeEventListener ) {
+			elem.removeEventListener( type, handle, false );
+		}
+	} :
+	function( elem, type, handle ) {
+		var name = "on" + type;
+
+		if ( elem.detachEvent ) {
+
+			// #8545, #7054, preventing memory leaks for custom events in IE6-8
+			// detachEvent needed property on element, by name of that event, to properly expose it to GC
+			if ( typeof elem[ name ] === "undefined" ) {
+				elem[ name ] = null;
+			}
+
+			elem.detachEvent( name, handle );
+		}
+	};
+
+jQuery.Event = function( src, props ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !(this instanceof jQuery.Event) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+	return false;
+}
+function returnTrue() {
+	return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	preventDefault: function() {
+		this.isDefaultPrevented = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+
+		// if preventDefault exists run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+
+		// otherwise set the returnValue property of the original event to false (IE)
+		} else {
+			e.returnValue = false;
+		}
+	},
+	stopPropagation: function() {
+		this.isPropagationStopped = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+		// if stopPropagation exists run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+		// otherwise set the cancelBubble property of the original event to true (IE)
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		this.isImmediatePropagationStopped = returnTrue;
+		this.stopPropagation();
+	},
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj,
+				selector = handleObj.selector;
+
+			// For mousenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+	jQuery.event.special.submit = {
+		setup: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Lazy-add a submit handler when a descendant form may potentially be submitted
+			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+				// Node name check avoids a VML-related crash in IE (#9807)
+				var elem = e.target,
+					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+				if ( form && !jQuery._data( form, "_submit_attached" ) ) {
+					jQuery.event.add( form, "submit._submit", function( event ) {
+						event._submit_bubble = true;
+					});
+					jQuery._data( form, "_submit_attached", true );
+				}
+			});
+			// return undefined since we don't need an event listener
+		},
+
+		postDispatch: function( event ) {
+			// If form was submitted by the user, bubble the event up the tree
+			if ( event._submit_bubble ) {
+				delete event._submit_bubble;
+				if ( this.parentNode && !event.isTrigger ) {
+					jQuery.event.simulate( "submit", this.parentNode, event, true );
+				}
+			}
+		},
+
+		teardown: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+			jQuery.event.remove( this, "._submit" );
+		}
+	};
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+	jQuery.event.special.change = {
+
+		setup: function() {
+
+			if ( rformElems.test( this.nodeName ) ) {
+				// IE doesn't fire change on a check/radio until blur; trigger it on click
+				// after a propertychange. Eat the blur-change in special.change.handle.
+				// This still fires onchange a second time for check/radio after blur.
+				if ( this.type === "checkbox" || this.type === "radio" ) {
+					jQuery.event.add( this, "propertychange._change", function( event ) {
+						if ( event.originalEvent.propertyName === "checked" ) {
+							this._just_changed = true;
+						}
+					});
+					jQuery.event.add( this, "click._change", function( event ) {
+						if ( this._just_changed && !event.isTrigger ) {
+							this._just_changed = false;
+						}
+						// Allow triggered, simulated change events (#11500)
+						jQuery.event.simulate( "change", this, event, true );
+					});
+				}
+				return false;
+			}
+			// Delegated event; lazy-add a change handler on descendant inputs
+			jQuery.event.add( this, "beforeactivate._change", function( e ) {
+				var elem = e.target;
+
+				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) {
+					jQuery.event.add( elem, "change._change", function( event ) {
+						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+							jQuery.event.simulate( "change", this.parentNode, event, true );
+						}
+					});
+					jQuery._data( elem, "_change_attached", true );
+				}
+			});
+		},
+
+		handle: function( event ) {
+			var elem = event.target;
+
+			// Swallow native change events from checkbox/radio, we already triggered them above
+			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+				return event.handleObj.handler.apply( this, arguments );
+			}
+		},
+
+		teardown: function() {
+			jQuery.event.remove( this, "._change" );
+
+			return !rformElems.test( this.nodeName );
+		}
+	};
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler while someone wants focusin/focusout
+		var attaches = 0,
+			handler = function( event ) {
+				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+			};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				if ( attaches++ === 0 ) {
+					document.addEventListener( orig, handler, true );
+				}
+			},
+			teardown: function() {
+				if ( --attaches === 0 ) {
+					document.removeEventListener( orig, handler, true );
+				}
+			}
+		};
+	});
+}
+
+jQuery.fn.extend({
+
+	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+		var origFn, type;
+
+		// Types can be a map of types/handlers
+		if ( typeof types === "object" ) {
+			// ( types-Object, selector, data )
+			if ( typeof selector !== "string" ) { // && selector != null
+				// ( types-Object, data )
+				data = data || selector;
+				selector = undefined;
+			}
+			for ( type in types ) {
+				this.on( type, selector, data, types[ type ], one );
+			}
+			return this;
+		}
+
+		if ( data == null && fn == null ) {
+			// ( types, fn )
+			fn = selector;
+			data = selector = undefined;
+		} else if ( fn == null ) {
+			if ( typeof selector === "string" ) {
+				// ( types, selector, fn )
+				fn = data;
+				data = undefined;
+			} else {
+				// ( types, data, fn )
+				fn = data;
+				data = selector;
+				selector = undefined;
+			}
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		} else if ( !fn ) {
+			return this;
+		}
+
+		if ( one === 1 ) {
+			origFn = fn;
+			fn = function( event ) {
+				// Can use an empty set, since event contains the info
+				jQuery().off( event );
+				return origFn.apply( this, arguments );
+			};
+			// Use same guid so caller can remove using origFn
+			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+		}
+		return this.each( function() {
+			jQuery.event.add( this, types, fn, data, selector );
+		});
+	},
+	one: function( types, selector, data, fn ) {
+		return this.on( types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each(function() {
+			jQuery.event.remove( this, types, fn, selector );
+		});
+	},
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	live: function( types, data, fn ) {
+		jQuery( this.context ).on( types, this.selector, data, fn );
+		return this;
+	},
+	die: function( types, fn ) {
+		jQuery( this.context ).off( types, this.selector || "**", fn );
+		return this;
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+	},
+
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+	triggerHandler: function( type, data ) {
+		if ( this[0] ) {
+			return jQuery.event.trigger( type, data, this[0], true );
+		}
+	},
+
+	toggle: function( fn ) {
+		// Save reference to arguments for access in closure
+		var args = arguments,
+			guid = fn.guid || jQuery.guid++,
+			i = 0,
+			toggler = function( event ) {
+				// Figure out which function to execute
+				var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+				jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+				// Make sure that clicks stop
+				event.preventDefault();
+
+				// and execute the function
+				return args[ lastToggle ].apply( this, arguments ) || false;
+			};
+
+		// link all the functions, so any of them can unbind this click handler
+		toggler.guid = guid;
+		while ( i < args.length ) {
+			args[ i++ ].guid = guid;
+		}
+
+		return this.click( toggler );
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+});
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		if ( fn == null ) {
+			fn = data;
+			data = null;
+		}
+
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+
+	if ( rkeyEvent.test( name ) ) {
+		jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
+	}
+
+	if ( rmouseEvent.test( name ) ) {
+		jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
+	}
+});
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://sizzlejs.com/
+ */
+(function( window, undefined ) {
+
+var cachedruns,
+	assertGetIdNotName,
+	Expr,
+	getText,
+	isXML,
+	contains,
+	compile,
+	sortOrder,
+	hasDuplicate,
+	outermostContext,
+
+	baseHasDuplicate = true,
+	strundefined = "undefined",
+
+	expando = ( "sizcache" + Math.random() ).replace( ".", "" ),
+
+	Token = String,
+	document = window.document,
+	docElem = document.documentElement,
+	dirruns = 0,
+	done = 0,
+	pop = [].pop,
+	push = [].push,
+	slice = [].slice,
+	// Use a stripped-down indexOf if a native one is unavailable
+	indexOf = [].indexOf || function( elem ) {
+		var i = 0,
+			len = this.length;
+		for ( ; i < len; i++ ) {
+			if ( this[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	// Augment a function for special use by Sizzle
+	markFunction = function( fn, value ) {
+		fn[ expando ] = value == null || value;
+		return fn;
+	},
+
+	createCache = function() {
+		var cache = {},
+			keys = [];
+
+		return markFunction(function( key, value ) {
+			// Only keep the most recent entries
+			if ( keys.push( key ) > Expr.cacheLength ) {
+				delete cache[ keys.shift() ];
+			}
+
+			// Retrieve with (key + " ") to avoid collision with native Object.prototype properties (see Issue #157)
+			return (cache[ key + " " ] = value);
+		}, cache );
+	},
+
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+
+	// Regex
+
+	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+	// http://www.w3.org/TR/css3-syntax/#characters
+	characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",
+
+	// Loosely modeled on CSS identifier characters
+	// An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors)
+	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = characterEncoding.replace( "w", "w#" ),
+
+	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+	operators = "([*^$|!~]?=)",
+	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+		"*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+
+	// Prefer arguments not in parens/brackets,
+	//   then attribute selectors and non-pseudos (denoted by :),
+	//   then anything else
+	// These preferences are here to reduce the number of selectors
+	//   needing tokenize in the PSEUDO preFilter
+	pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)",
+
+	// For matchExpr.POS and matchExpr.needsContext
+	pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
+		"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
+	rpseudo = new RegExp( pseudos ),
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,
+
+	rnot = /^:not/,
+	rsibling = /[\x20\t\r\n\f]*[+~]/,
+	rendsWithNot = /:not\($/,
+
+	rheader = /h\d/i,
+	rinputs = /input|select|textarea|button/i,
+
+	rbackslash = /\\(?!\\)/g,
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
+		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+		"NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
+		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"POS": new RegExp( pos, "i" ),
+		"CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		// For use in libraries implementing .is()
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" )
+	},
+
+	// Support
+
+	// Used for testing something on an element
+	assert = function( fn ) {
+		var div = document.createElement("div");
+
+		try {
+			return fn( div );
+		} catch (e) {
+			return false;
+		} finally {
+			// release memory in IE
+			div = null;
+		}
+	},
+
+	// Check if getElementsByTagName("*") returns only elements
+	assertTagNameNoComments = assert(function( div ) {
+		div.appendChild( document.createComment("") );
+		return !div.getElementsByTagName("*").length;
+	}),
+
+	// Check if getAttribute returns normalized href attributes
+	assertHrefNotNormalized = assert(function( div ) {
+		div.innerHTML = "<a href='#'></a>";
+		return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
+			div.firstChild.getAttribute("href") === "#";
+	}),
+
+	// Check if attributes should be retrieved by attribute nodes
+	assertAttributes = assert(function( div ) {
+		div.innerHTML = "<select></select>";
+		var type = typeof div.lastChild.getAttribute("multiple");
+		// IE8 returns a string for some attributes even when not present
+		return type !== "boolean" && type !== "string";
+	}),
+
+	// Check if getElementsByClassName can be trusted
+	assertUsableClassName = assert(function( div ) {
+		// Opera can't find a second classname (in 9.6)
+		div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
+		if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
+			return false;
+		}
+
+		// Safari 3.2 caches class attributes and doesn't catch changes
+		div.lastChild.className = "e";
+		return div.getElementsByClassName("e").length === 2;
+	}),
+
+	// Check if getElementById returns elements by name
+	// Check if getElementsByName privileges form controls or returns elements by ID
+	assertUsableName = assert(function( div ) {
+		// Inject content
+		div.id = expando + 0;
+		div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
+		docElem.insertBefore( div, docElem.firstChild );
+
+		// Test
+		var pass = document.getElementsByName &&
+			// buggy browsers will return fewer than the correct 2
+			document.getElementsByName( expando ).length === 2 +
+			// buggy browsers will return more than the correct 0
+			document.getElementsByName( expando + 0 ).length;
+		assertGetIdNotName = !document.getElementById( expando );
+
+		// Cleanup
+		docElem.removeChild( div );
+
+		return pass;
+	});
+
+// If slice is not available, provide a backup
+try {
+	slice.call( docElem.childNodes, 0 )[0].nodeType;
+} catch ( e ) {
+	slice = function( i ) {
+		var elem,
+			results = [];
+		for ( ; (elem = this[i]); i++ ) {
+			results.push( elem );
+		}
+		return results;
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	results = results || [];
+	context = context || document;
+	var match, elem, xml, m,
+		nodeType = context.nodeType;
+
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	if ( nodeType !== 1 && nodeType !== 9 ) {
+		return [];
+	}
+
+	xml = isXML( context );
+
+	if ( !xml && !seed ) {
+		if ( (match = rquickExpr.exec( selector )) ) {
+			// Speed-up: Sizzle("#ID")
+			if ( (m = match[1]) ) {
+				if ( nodeType === 9 ) {
+					elem = context.getElementById( m );
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE, Opera, and Webkit return items
+						// by name instead of ID
+						if ( elem.id === m ) {
+							results.push( elem );
+							return results;
+						}
+					} else {
+						return results;
+					}
+				} else {
+					// Context is not a document
+					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+						contains( context, elem ) && elem.id === m ) {
+						results.push( elem );
+						return results;
+					}
+				}
+
+			// Speed-up: Sizzle("TAG")
+			} else if ( match[2] ) {
+				push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
+				return results;
+
+			// Speed-up: Sizzle(".CLASS")
+			} else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) {
+				push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
+				return results;
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed, xml );
+}
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	return Sizzle( expr, null, null, [ elem ] ).length > 0;
+};
+
+// Returns a function to use in pseudos for input types
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+// Returns a function to use in pseudos for buttons
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+// Returns a function to use in pseudos for positionals
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( nodeType ) {
+		if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+			// Use textContent for elements
+			// innerText usage removed for consistency of new lines (see #11153)
+			if ( typeof elem.textContent === "string" ) {
+				return elem.textContent;
+			} else {
+				// Traverse its children
+				for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+					ret += getText( elem );
+				}
+			}
+		} else if ( nodeType === 3 || nodeType === 4 ) {
+			return elem.nodeValue;
+		}
+		// Do not include comment or processing instruction nodes
+	} else {
+
+		// If no nodeType, this is expected to be an array
+		for ( ; (node = elem[i]); i++ ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	}
+	return ret;
+};
+
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+// Element contains another
+contains = Sizzle.contains = docElem.contains ?
+	function( a, b ) {
+		var adown = a.nodeType === 9 ? a.documentElement : a,
+			bup = b && b.parentNode;
+		return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) );
+	} :
+	docElem.compareDocumentPosition ?
+	function( a, b ) {
+		return b && !!( a.compareDocumentPosition( b ) & 16 );
+	} :
+	function( a, b ) {
+		while ( (b = b.parentNode) ) {
+			if ( b === a ) {
+				return true;
+			}
+		}
+		return false;
+	};
+
+Sizzle.attr = function( elem, name ) {
+	var val,
+		xml = isXML( elem );
+
+	if ( !xml ) {
+		name = name.toLowerCase();
+	}
+	if ( (val = Expr.attrHandle[ name ]) ) {
+		return val( elem );
+	}
+	if ( xml || assertAttributes ) {
+		return elem.getAttribute( name );
+	}
+	val = elem.getAttributeNode( name );
+	return val ?
+		typeof elem[ name ] === "boolean" ?
+			elem[ name ] ? name : null :
+			val.specified ? val.value : null :
+		null;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	// IE6/7 return a modified href
+	attrHandle: assertHrefNotNormalized ?
+		{} :
+		{
+			"href": function( elem ) {
+				return elem.getAttribute( "href", 2 );
+			},
+			"type": function( elem ) {
+				return elem.getAttribute("type");
+			}
+		},
+
+	find: {
+		"ID": assertGetIdNotName ?
+			function( id, context, xml ) {
+				if ( typeof context.getElementById !== strundefined && !xml ) {
+					var m = context.getElementById( id );
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					return m && m.parentNode ? [m] : [];
+				}
+			} :
+			function( id, context, xml ) {
+				if ( typeof context.getElementById !== strundefined && !xml ) {
+					var m = context.getElementById( id );
+
+					return m ?
+						m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
+							[m] :
+							undefined :
+						[];
+				}
+			},
+
+		"TAG": assertTagNameNoComments ?
+			function( tag, context ) {
+				if ( typeof context.getElementsByTagName !== strundefined ) {
+					return context.getElementsByTagName( tag );
+				}
+			} :
+			function( tag, context ) {
+				var results = context.getElementsByTagName( tag );
+
+				// Filter out possible comments
+				if ( tag === "*" ) {
+					var elem,
+						tmp = [],
+						i = 0;
+
+					for ( ; (elem = results[i]); i++ ) {
+						if ( elem.nodeType === 1 ) {
+							tmp.push( elem );
+						}
+					}
+
+					return tmp;
+				}
+				return results;
+			},
+
+		"NAME": assertUsableName && function( tag, context ) {
+			if ( typeof context.getElementsByName !== strundefined ) {
+				return context.getElementsByName( name );
+			}
+		},
+
+		"CLASS": assertUsableClassName && function( className, context, xml ) {
+			if ( typeof context.getElementsByClassName !== strundefined && !xml ) {
+				return context.getElementsByClassName( className );
+			}
+		}
+	},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( rbackslash, "" );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				3 xn-component of xn+y argument ([+-]?\d*n|)
+				4 sign of xn-component
+				5 x of xn-component
+				6 sign of y-component
+				7 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1] === "nth" ) {
+				// nth-child requires argument
+				if ( !match[2] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) );
+				match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[2] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var unquoted, excess;
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			if ( match[3] ) {
+				match[2] = match[3];
+			} else if ( (unquoted = match[4]) ) {
+				// Only check arguments that contain a pseudo
+				if ( rpseudo.test(unquoted) &&
+					// Get excess from tokenize (recursively)
+					(excess = tokenize( unquoted, true )) &&
+					// advance to the next closing parenthesis
+					(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+					// excess is a negative index
+					unquoted = unquoted.slice( 0, excess );
+					match[0] = match[0].slice( 0, excess );
+				}
+				match[2] = unquoted;
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+		"ID": assertGetIdNotName ?
+			function( id ) {
+				id = id.replace( rbackslash, "" );
+				return function( elem ) {
+					return elem.getAttribute("id") === id;
+				};
+			} :
+			function( id ) {
+				id = id.replace( rbackslash, "" );
+				return function( elem ) {
+					var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+					return node && node.value === id;
+				};
+			},
+
+		"TAG": function( nodeName ) {
+			if ( nodeName === "*" ) {
+				return function() { return true; };
+			}
+			nodeName = nodeName.replace( rbackslash, "" ).toLowerCase();
+
+			return function( elem ) {
+				return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+			};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ expando ][ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem, context ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.substr( result.length - check.length ) === check :
+					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, argument, first, last ) {
+
+			if ( type === "nth" ) {
+				return function( elem ) {
+					var node, diff,
+						parent = elem.parentNode;
+
+					if ( first === 1 && last === 0 ) {
+						return true;
+					}
+
+					if ( parent ) {
+						diff = 0;
+						for ( node = parent.firstChild; node; node = node.nextSibling ) {
+							if ( node.nodeType === 1 ) {
+								diff++;
+								if ( elem === node ) {
+									break;
+								}
+							}
+						}
+					}
+
+					// Incorporate the offset (or cast to NaN), then check against cycle size
+					diff -= last;
+					return diff === first || ( diff % first === 0 && diff / first >= 0 );
+				};
+			}
+
+			return function( elem ) {
+				var node = elem;
+
+				switch ( type ) {
+					case "only":
+					case "first":
+						while ( (node = node.previousSibling) ) {
+							if ( node.nodeType === 1 ) {
+								return false;
+							}
+						}
+
+						if ( type === "first" ) {
+							return true;
+						}
+
+						node = elem;
+
+						/* falls through */
+					case "last":
+						while ( (node = node.nextSibling) ) {
+							if ( node.nodeType === 1 ) {
+								return false;
+							}
+						}
+
+						return true;
+				}
+			};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf.call( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		"enabled": function( elem ) {
+			return elem.disabled === false;
+		},
+
+		"disabled": function( elem ) {
+			return elem.disabled === true;
+		},
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+			//   not comment, processing instructions, or others
+			// Thanks to Diego Perini for the nodeName shortcut
+			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+			var nodeType;
+			elem = elem.firstChild;
+			while ( elem ) {
+				if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) {
+					return false;
+				}
+				elem = elem.nextSibling;
+			}
+			return true;
+		},
+
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"text": function( elem ) {
+			var type, attr;
+			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+			// use getAttribute instead to test this case
+			return elem.nodeName.toLowerCase() === "input" &&
+				(type = elem.type) === "text" &&
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type );
+		},
+
+		// Input types
+		"radio": createInputPseudo("radio"),
+		"checkbox": createInputPseudo("checkbox"),
+		"file": createInputPseudo("file"),
+		"password": createInputPseudo("password"),
+		"image": createInputPseudo("image"),
+
+		"submit": createButtonPseudo("submit"),
+		"reset": createButtonPseudo("reset"),
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"focus": function( elem ) {
+			var doc = elem.ownerDocument;
+			return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		"active": function( elem ) {
+			return elem === elem.ownerDocument.activeElement;
+		},
+
+		// Positional types
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			for ( var i = 0; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			for ( var i = 1; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+function siblingCheck( a, b, ret ) {
+	if ( a === b ) {
+		return ret;
+	}
+
+	var cur = a.nextSibling;
+
+	while ( cur ) {
+		if ( cur === b ) {
+			return -1;
+		}
+
+		cur = cur.nextSibling;
+	}
+
+	return 1;
+}
+
+sortOrder = docElem.compareDocumentPosition ?
+	function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		return ( !a.compareDocumentPosition || !b.compareDocumentPosition ?
+			a.compareDocumentPosition :
+			a.compareDocumentPosition(b) & 4
+		) ? -1 : 1;
+	} :
+	function( a, b ) {
+		// The nodes are identical, we can exit early
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+
+		// Fallback to using sourceIndex (in IE) if it's available on both nodes
+		} else if ( a.sourceIndex && b.sourceIndex ) {
+			return a.sourceIndex - b.sourceIndex;
+		}
+
+		var al, bl,
+			ap = [],
+			bp = [],
+			aup = a.parentNode,
+			bup = b.parentNode,
+			cur = aup;
+
+		// If the nodes are siblings (or identical) we can do a quick check
+		if ( aup === bup ) {
+			return siblingCheck( a, b );
+
+		// If no parents were found then the nodes are disconnected
+		} else if ( !aup ) {
+			return -1;
+
+		} else if ( !bup ) {
+			return 1;
+		}
+
+		// Otherwise they're somewhere else in the tree so we need
+		// to build up a full list of the parentNodes for comparison
+		while ( cur ) {
+			ap.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		cur = bup;
+
+		while ( cur ) {
+			bp.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		al = ap.length;
+		bl = bp.length;
+
+		// Start walking down the tree looking for a discrepancy
+		for ( var i = 0; i < al && i < bl; i++ ) {
+			if ( ap[i] !== bp[i] ) {
+				return siblingCheck( ap[i], bp[i] );
+			}
+		}
+
+		// We ended someplace up the tree so do a sibling check
+		return i === al ?
+			siblingCheck( a, bp[i], -1 ) :
+			siblingCheck( ap[i], b, 1 );
+	};
+
+// Always assume the presence of duplicates if sort doesn't
+// pass them to our comparison function (as in Google Chrome).
+[0, 0].sort( sortOrder );
+baseHasDuplicate = !hasDuplicate;
+
+// Document sorting and removing duplicates
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		i = 1,
+		j = 0;
+
+	hasDuplicate = baseHasDuplicate;
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		for ( ; (elem = results[i]); i++ ) {
+			if ( elem === results[ i - 1 ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	return results;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+function tokenize( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ expando ][ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( tokens = [] );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			tokens.push( matched = new Token( match.shift() ) );
+			soFar = soFar.slice( matched.length );
+
+			// Cast descendant combinators to space
+			matched.type = match[0].replace( rtrim, " " );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+
+				tokens.push( matched = new Token( match.shift() ) );
+				soFar = soFar.slice( matched.length );
+				matched.type = type;
+				matched.matches = match;
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		checkNonElements = base && combinator.dir === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( checkNonElements || elem.nodeType === 1  ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+			if ( !xml ) {
+				var cache,
+					dirkey = dirruns + " " + doneName + " ",
+					cachedkey = dirkey + cachedruns;
+				while ( (elem = elem[ dir ]) ) {
+					if ( checkNonElements || elem.nodeType === 1 ) {
+						if ( (cache = elem[ expando ]) === cachedkey ) {
+							return elem.sizset;
+						} else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) {
+							if ( elem.sizset ) {
+								return elem;
+							}
+						} else {
+							elem[ expando ] = cachedkey;
+							if ( matcher( elem, context, xml ) ) {
+								elem.sizset = true;
+								return elem;
+							}
+							elem.sizset = false;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( checkNonElements || elem.nodeType === 1 ) {
+						if ( matcher( elem, context, xml ) ) {
+							return elem;
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf.call( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && tokens.join("")
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, expandContext ) {
+			var elem, j, matcher,
+				setMatched = [],
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				outermost = expandContext != null,
+				contextBackup = outermostContext,
+				// We must always have either seed elements or context
+				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+				// Nested matchers should use non-integer dirruns
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E);
+
+			if ( outermost ) {
+				outermostContext = context !== document && context;
+				cachedruns = superMatcher.el;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			for ( ; (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					for ( j = 0; (matcher = elementMatchers[j]); j++ ) {
+						if ( matcher( elem, context, xml ) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+						cachedruns = ++superMatcher.el;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// Apply set filters to unmatched elements
+			matchedCount += i;
+			if ( bySet && i !== matchedCount ) {
+				for ( j = 0; (matcher = setMatchers[j]); j++ ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	superMatcher.el = 0;
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ expando ][ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !group ) {
+			group = tokenize( selector );
+		}
+		i = group.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( group[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+	}
+	return cached;
+};
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function select( selector, context, results, seed, xml ) {
+	var i, tokens, token, type, find,
+		match = tokenize( selector ),
+		j = match.length;
+
+	if ( !seed ) {
+		// Try to minimize operations if there is only one group
+		if ( match.length === 1 ) {
+
+			// Take a shortcut and set the context if the root selector is an ID
+			tokens = match[0] = match[0].slice( 0 );
+			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+					context.nodeType === 9 && !xml &&
+					Expr.relative[ tokens[1].type ] ) {
+
+				context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0];
+				if ( !context ) {
+					return results;
+				}
+
+				selector = selector.slice( tokens.shift().length );
+			}
+
+			// Fetch a seed set for right-to-left matching
+			for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) {
+				token = tokens[i];
+
+				// Abort if we hit a combinator
+				if ( Expr.relative[ (type = token.type) ] ) {
+					break;
+				}
+				if ( (find = Expr.find[ type ]) ) {
+					// Search, expanding context for leading sibling combinators
+					if ( (seed = find(
+						token.matches[0].replace( rbackslash, "" ),
+						rsibling.test( tokens[0].type ) && context.parentNode || context,
+						xml
+					)) ) {
+
+						// If seed is empty or no tokens remain, we can return early
+						tokens.splice( i, 1 );
+						selector = seed.length && tokens.join("");
+						if ( !selector ) {
+							push.apply( results, slice.call( seed, 0 ) );
+							return results;
+						}
+
+						break;
+					}
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function
+	// Provide `match` to avoid retokenization if we modified the selector above
+	compile( selector, match )(
+		seed,
+		context,
+		xml,
+		results,
+		rsibling.test( selector )
+	);
+	return results;
+}
+
+if ( document.querySelectorAll ) {
+	(function() {
+		var disconnectedMatch,
+			oldSelect = select,
+			rescape = /'|\\/g,
+			rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
+
+			// qSa(:focus) reports false when true (Chrome 21), no need to also add to buggyMatches since matches checks buggyQSA
+			// A support test would require too much code (would include document ready)
+			rbuggyQSA = [ ":focus" ],
+
+			// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+			// A support test would require too much code (would include document ready)
+			// just skip matchesSelector for :active
+			rbuggyMatches = [ ":active" ],
+			matches = docElem.matchesSelector ||
+				docElem.mozMatchesSelector ||
+				docElem.webkitMatchesSelector ||
+				docElem.oMatchesSelector ||
+				docElem.msMatchesSelector;
+
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( div ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explictly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// http://bugs.jquery.com/ticket/12359
+			div.innerHTML = "<select><option selected=''></option></select>";
+
+			// IE8 - Some boolean attributes are not treated correctly
+			if ( !div.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here (do not put tests after this one)
+			if ( !div.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+		});
+
+		assert(function( div ) {
+
+			// Opera 10-12/IE9 - ^= $= *= and empty values
+			// Should not select anything
+			div.innerHTML = "<p test=''></p>";
+			if ( div.querySelectorAll("[test^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here (do not put tests after this one)
+			div.innerHTML = "<input type='hidden'/>";
+			if ( !div.querySelectorAll(":enabled").length ) {
+				rbuggyQSA.push(":enabled", ":disabled");
+			}
+		});
+
+		// rbuggyQSA always contains :focus, so no need for a length check
+		rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") );
+
+		select = function( selector, context, results, seed, xml ) {
+			// Only use querySelectorAll when not filtering,
+			// when this is not xml,
+			// and when no QSA bugs apply
+			if ( !seed && !xml && !rbuggyQSA.test( selector ) ) {
+				var groups, i,
+					old = true,
+					nid = expando,
+					newContext = context,
+					newSelector = context.nodeType === 9 && selector;
+
+				// qSA works strangely on Element-rooted queries
+				// We can work around this by specifying an extra ID on the root
+				// and working up from there (Thanks to Andrew Dupont for the technique)
+				// IE 8 doesn't work on object elements
+				if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+					groups = tokenize( selector );
+
+					if ( (old = context.getAttribute("id")) ) {
+						nid = old.replace( rescape, "\\$&" );
+					} else {
+						context.setAttribute( "id", nid );
+					}
+					nid = "[id='" + nid + "'] ";
+
+					i = groups.length;
+					while ( i-- ) {
+						groups[i] = nid + groups[i].join("");
+					}
+					newContext = rsibling.test( selector ) && context.parentNode || context;
+					newSelector = groups.join(",");
+				}
+
+				if ( newSelector ) {
+					try {
+						push.apply( results, slice.call( newContext.querySelectorAll(
+							newSelector
+						), 0 ) );
+						return results;
+					} catch(qsaError) {
+					} finally {
+						if ( !old ) {
+							context.removeAttribute("id");
+						}
+					}
+				}
+			}
+
+			return oldSelect( selector, context, results, seed, xml );
+		};
+
+		if ( matches ) {
+			assert(function( div ) {
+				// Check to see if it's possible to do matchesSelector
+				// on a disconnected node (IE 9)
+				disconnectedMatch = matches.call( div, "div" );
+
+				// This should fail with an exception
+				// Gecko does not error, returns false instead
+				try {
+					matches.call( div, "[test!='']:sizzle" );
+					rbuggyMatches.push( "!=", pseudos );
+				} catch ( e ) {}
+			});
+
+			// rbuggyMatches always contains :active and :focus, so no need for a length check
+			rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") );
+
+			Sizzle.matchesSelector = function( elem, expr ) {
+				// Make sure that attribute selectors are quoted
+				expr = expr.replace( rattributeQuotes, "='$1']" );
+
+				// rbuggyMatches always contains :active, so no need for an existence check
+				if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && !rbuggyQSA.test( expr ) ) {
+					try {
+						var ret = matches.call( elem, expr );
+
+						// IE 9's matchesSelector returns false on disconnected nodes
+						if ( ret || disconnectedMatch ||
+								// As well, disconnected nodes are said to be in a document
+								// fragment in IE 9
+								elem.document && elem.document.nodeType !== 11 ) {
+							return ret;
+						}
+					} catch(e) {}
+				}
+
+				return Sizzle( expr, null, null, [ elem ] ).length > 0;
+			};
+		}
+	})();
+}
+
+// Deprecated
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Back-compat
+function setFilters() {}
+Expr.filters = setFilters.prototype = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})( window );
+var runtil = /Until$/,
+	rparentsprev = /^(?:parents|prev(?:Until|All))/,
+	isSimple = /^.[^:#\[\.,]*$/,
+	rneedsContext = jQuery.expr.match.needsContext,
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var i, l, length, n, r, ret,
+			self = this;
+
+		if ( typeof selector !== "string" ) {
+			return jQuery( selector ).filter(function() {
+				for ( i = 0, l = self.length; i < l; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			});
+		}
+
+		ret = this.pushStack( "", "find", selector );
+
+		for ( i = 0, l = this.length; i < l; i++ ) {
+			length = ret.length;
+			jQuery.find( selector, this[i], ret );
+
+			if ( i > 0 ) {
+				// Make sure that the results are unique
+				for ( n = length; n < ret.length; n++ ) {
+					for ( r = 0; r < length; r++ ) {
+						if ( ret[r] === ret[n] ) {
+							ret.splice(n--, 1);
+							break;
+						}
+					}
+				}
+			}
+		}
+
+		return ret;
+	},
+
+	has: function( target ) {
+		var i,
+			targets = jQuery( target, this ),
+			len = targets.length;
+
+		return this.filter(function() {
+			for ( i = 0; i < len; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector, false), "not", selector);
+	},
+
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector, true), "filter", selector );
+	},
+
+	is: function( selector ) {
+		return !!selector && (
+			typeof selector === "string" ?
+				// If this is a positional/relative selector, check membership in the returned set
+				// so $("p:first").is("p:last") won't return true for a doc with two "p".
+				rneedsContext.test( selector ) ?
+					jQuery( selector, this.context ).index( this[0] ) >= 0 :
+					jQuery.filter( selector, this ).length > 0 :
+				this.filter( selector ).length > 0 );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			ret = [],
+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( ; i < l; i++ ) {
+			cur = this[i];
+
+			while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
+				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+					ret.push( cur );
+					break;
+				}
+				cur = cur.parentNode;
+			}
+		}
+
+		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+		return this.pushStack( ret, "closest", selectors );
+	},
+
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
+		}
+
+		// index in selector
+		if ( typeof elem === "string" ) {
+			return jQuery.inArray( this[0], jQuery( elem ) );
+		}
+
+		// Locate the position of the desired element
+		return jQuery.inArray(
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[0] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		var set = typeof selector === "string" ?
+				jQuery( selector, context ) :
+				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+			all = jQuery.merge( this.get(), set );
+
+		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+			all :
+			jQuery.unique( all ) );
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter(selector)
+		);
+	}
+});
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+	return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+function sibling( cur, dir ) {
+	do {
+		cur = cur[ dir ];
+	} while ( cur && cur.nodeType !== 1 );
+
+	return cur;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until );
+
+		if ( !runtil.test( name ) ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+		if ( this.length > 1 && rparentsprev.test( name ) ) {
+			ret = ret.reverse();
+		}
+
+		return this.pushStack( ret, name, core_slice.call( arguments ).join(",") );
+	};
+});
+
+jQuery.extend({
+	filter: function( expr, elems, not ) {
+		if ( not ) {
+			expr = ":not(" + expr + ")";
+		}
+
+		return elems.length === 1 ?
+			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+			jQuery.find.matches(expr, elems);
+	},
+
+	dir: function( elem, dir, until ) {
+		var matched = [],
+			cur = elem[ dir ];
+
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+			if ( cur.nodeType === 1 ) {
+				matched.push( cur );
+			}
+			cur = cur[dir];
+		}
+		return matched;
+	},
+
+	sibling: function( n, elem ) {
+		var r = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				r.push( n );
+			}
+		}
+
+		return r;
+	}
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+	// Can't pass null or undefined to indexOf in Firefox 4
+	// Set to 0 to skip string check
+	qualifier = qualifier || 0;
+
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			var retVal = !!qualifier.call( elem, i, elem );
+			return retVal === keep;
+		});
+
+	} else if ( qualifier.nodeType ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			return ( elem === qualifier ) === keep;
+		});
+
+	} else if ( typeof qualifier === "string" ) {
+		var filtered = jQuery.grep(elements, function( elem ) {
+			return elem.nodeType === 1;
+		});
+
+		if ( isSimple.test( qualifier ) ) {
+			return jQuery.filter(qualifier, filtered, !keep);
+		} else {
+			qualifier = jQuery.filter( qualifier, filtered );
+		}
+	}
+
+	return jQuery.grep(elements, function( elem, i ) {
+		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+	});
+}
+function createSafeFragment( document ) {
+	var list = nodeNames.split( "|" ),
+	safeFrag = document.createDocumentFragment();
+
+	if ( safeFrag.createElement ) {
+		while ( list.length ) {
+			safeFrag.createElement(
+				list.pop()
+			);
+		}
+	}
+	return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnoInnerhtml = /<(?:script|style|link)/i,
+	rnocache = /<(?:script|object|embed|option|style)/i,
+	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+	rcheckableType = /^(?:checkbox|radio)$/,
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptType = /\/(java|ecma)script/i,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,
+	wrapMap = {
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+		legend: [ 1, "<fieldset>", "</fieldset>" ],
+		thead: [ 1, "<table>", "</table>" ],
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+		area: [ 1, "<map>", "</map>" ],
+		_default: [ 0, "", "" ]
+	},
+	safeFragment = createSafeFragment( document ),
+	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+// unless wrapped in a div with non-breaking characters in front of it.
+if ( !jQuery.support.htmlSerialize ) {
+	wrapMap._default = [ 1, "X<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+	text: function( value ) {
+		return jQuery.access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+		}, null, value, arguments.length );
+	},
+
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[0] ) {
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+			if ( this[0].parentNode ) {
+				wrap.insertBefore( this[0] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			}).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each(function(i) {
+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	},
+
+	append: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 ) {
+				this.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 ) {
+				this.insertBefore( elem, this.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		if ( !isDisconnected( this[0] ) ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this );
+			});
+		}
+
+		if ( arguments.length ) {
+			var set = jQuery.clean( arguments );
+			return this.pushStack( jQuery.merge( set, this ), "before", this.selector );
+		}
+	},
+
+	after: function() {
+		if ( !isDisconnected( this[0] ) ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			});
+		}
+
+		if ( arguments.length ) {
+			var set = jQuery.clean( arguments );
+			return this.pushStack( jQuery.merge( this, set ), "after", this.selector );
+		}
+	},
+
+	// keepData is for internal use only--do not document
+	remove: function( selector, keepData ) {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+				if ( !keepData && elem.nodeType === 1 ) {
+					jQuery.cleanData( elem.getElementsByTagName("*") );
+					jQuery.cleanData( [ elem ] );
+				}
+
+				if ( elem.parentNode ) {
+					elem.parentNode.removeChild( elem );
+				}
+			}
+		}
+
+		return this;
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( elem.getElementsByTagName("*") );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function () {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		});
+	},
+
+	html: function( value ) {
+		return jQuery.access( this, function( value ) {
+			var elem = this[0] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined ) {
+				return elem.nodeType === 1 ?
+					elem.innerHTML.replace( rinlinejQuery, "" ) :
+					undefined;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
+				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+
+				value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+				try {
+					for (; i < l; i++ ) {
+						// Remove element nodes and prevent memory leaks
+						elem = this[i] || {};
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( elem.getElementsByTagName( "*" ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch(e) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function( value ) {
+		if ( !isDisconnected( this[0] ) ) {
+			// Make sure that the elements are removed from the DOM before they are inserted
+			// this can help fix replacing a parent with child elements
+			if ( jQuery.isFunction( value ) ) {
+				return this.each(function(i) {
+					var self = jQuery(this), old = self.html();
+					self.replaceWith( value.call( this, i, old ) );
+				});
+			}
+
+			if ( typeof value !== "string" ) {
+				value = jQuery( value ).detach();
+			}
+
+			return this.each(function() {
+				var next = this.nextSibling,
+					parent = this.parentNode;
+
+				jQuery( this ).remove();
+
+				if ( next ) {
+					jQuery(next).before( value );
+				} else {
+					jQuery(parent).append( value );
+				}
+			});
+		}
+
+		return this.length ?
+			this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+			this;
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, table, callback ) {
+
+		// Flatten any nested arrays
+		args = [].concat.apply( [], args );
+
+		var results, first, fragment, iNoClone,
+			i = 0,
+			value = args[0],
+			scripts = [],
+			l = this.length;
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) {
+			return this.each(function() {
+				jQuery(this).domManip( args, table, callback );
+			});
+		}
+
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				args[0] = value.call( this, i, table ? self.html() : undefined );
+				self.domManip( args, table, callback );
+			});
+		}
+
+		if ( this[0] ) {
+			results = jQuery.buildFragment( args, this, scripts );
+			fragment = results.fragment;
+			first = fragment.firstChild;
+
+			if ( fragment.childNodes.length === 1 ) {
+				fragment = first;
+			}
+
+			if ( first ) {
+				table = table && jQuery.nodeName( first, "tr" );
+
+				// Use the original fragment for the last item instead of the first because it can end up
+				// being emptied incorrectly in certain situations (#8070).
+				// Fragments from the fragment cache must always be cloned and never used in place.
+				for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) {
+					callback.call(
+						table && jQuery.nodeName( this[i], "table" ) ?
+							findOrAppend( this[i], "tbody" ) :
+							this[i],
+						i === iNoClone ?
+							fragment :
+							jQuery.clone( fragment, true, true )
+					);
+				}
+			}
+
+			// Fix #11809: Avoid leaking memory
+			fragment = first = null;
+
+			if ( scripts.length ) {
+				jQuery.each( scripts, function( i, elem ) {
+					if ( elem.src ) {
+						if ( jQuery.ajax ) {
+							jQuery.ajax({
+								url: elem.src,
+								type: "GET",
+								dataType: "script",
+								async: false,
+								global: false,
+								"throws": true
+							});
+						} else {
+							jQuery.error("no ajax");
+						}
+					} else {
+						jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) );
+					}
+
+					if ( elem.parentNode ) {
+						elem.parentNode.removeChild( elem );
+					}
+				});
+			}
+		}
+
+		return this;
+	}
+});
+
+function findOrAppend( elem, tag ) {
+	return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
+}
+
+function cloneCopyEvent( src, dest ) {
+
+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+		return;
+	}
+
+	var type, i, l,
+		oldData = jQuery._data( src ),
+		curData = jQuery._data( dest, oldData ),
+		events = oldData.events;
+
+	if ( events ) {
+		delete curData.handle;
+		curData.events = {};
+
+		for ( type in events ) {
+			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+				jQuery.event.add( dest, type, events[ type ][ i ] );
+			}
+		}
+	}
+
+	// make the cloned public data object a copy from the original
+	if ( curData.data ) {
+		curData.data = jQuery.extend( {}, curData.data );
+	}
+}
+
+function cloneFixAttributes( src, dest ) {
+	var nodeName;
+
+	// We do not need to do anything for non-Elements
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// clearAttributes removes the attributes, which we don't want,
+	// but also removes the attachEvent events, which we *do* want
+	if ( dest.clearAttributes ) {
+		dest.clearAttributes();
+	}
+
+	// mergeAttributes, in contrast, only merges back on the
+	// original attributes, not the events
+	if ( dest.mergeAttributes ) {
+		dest.mergeAttributes( src );
+	}
+
+	nodeName = dest.nodeName.toLowerCase();
+
+	if ( nodeName === "object" ) {
+		// IE6-10 improperly clones children of object elements using classid.
+		// IE10 throws NoModificationAllowedError if parent is null, #12132.
+		if ( dest.parentNode ) {
+			dest.outerHTML = src.outerHTML;
+		}
+
+		// This path appears unavoidable for IE9. When cloning an object
+		// element in IE9, the outerHTML strategy above is not sufficient.
+		// If the src has innerHTML and the destination does not,
+		// copy the src.innerHTML into the dest.innerHTML. #10324
+		if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) {
+			dest.innerHTML = src.innerHTML;
+		}
+
+	} else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+		// IE6-8 fails to persist the checked state of a cloned checkbox
+		// or radio button. Worse, IE6-7 fail to give the cloned element
+		// a checked appearance if the defaultChecked value isn't also set
+
+		dest.defaultChecked = dest.checked = src.checked;
+
+		// IE6-7 get confused and end up setting the value of a cloned
+		// checkbox/radio button to an empty string instead of "on"
+		if ( dest.value !== src.value ) {
+			dest.value = src.value;
+		}
+
+	// IE6-8 fails to return the selected option to the default selected
+	// state when cloning options
+	} else if ( nodeName === "option" ) {
+		dest.selected = src.defaultSelected;
+
+	// IE6-8 fails to set the defaultValue to the correct value when
+	// cloning other types of input fields
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+
+	// IE blanks contents when cloning scripts
+	} else if ( nodeName === "script" && dest.text !== src.text ) {
+		dest.text = src.text;
+	}
+
+	// Event data gets referenced instead of copied if the expando
+	// gets copied too
+	dest.removeAttribute( jQuery.expando );
+}
+
+jQuery.buildFragment = function( args, context, scripts ) {
+	var fragment, cacheable, cachehit,
+		first = args[ 0 ];
+
+	// Set context from what may come in as undefined or a jQuery collection or a node
+	// Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 &
+	// also doubles as fix for #8950 where plain objects caused createDocumentFragment exception
+	context = context || document;
+	context = !context.nodeType && context[0] || context;
+	context = context.ownerDocument || context;
+
+	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+	// Cloning options loses the selected state, so don't cache them
+	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+	// Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
+	if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document &&
+		first.charAt(0) === "<" && !rnocache.test( first ) &&
+		(jQuery.support.checkClone || !rchecked.test( first )) &&
+		(jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
+
+		// Mark cacheable and look for a hit
+		cacheable = true;
+		fragment = jQuery.fragments[ first ];
+		cachehit = fragment !== undefined;
+	}
+
+	if ( !fragment ) {
+		fragment = context.createDocumentFragment();
+		jQuery.clean( args, context, fragment, scripts );
+
+		// Update the cache, but only store false
+		// unless this is a second parsing of the same content
+		if ( cacheable ) {
+			jQuery.fragments[ first ] = cachehit && fragment;
+		}
+	}
+
+	return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			i = 0,
+			ret = [],
+			insert = jQuery( selector ),
+			l = insert.length,
+			parent = this.length === 1 && this[0].parentNode;
+
+		if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) {
+			insert[ original ]( this[0] );
+			return this;
+		} else {
+			for ( ; i < l; i++ ) {
+				elems = ( i > 0 ? this.clone(true) : this ).get();
+				jQuery( insert[i] )[ original ]( elems );
+				ret = ret.concat( elems );
+			}
+
+			return this.pushStack( ret, name, insert.selector );
+		}
+	};
+});
+
+function getAll( elem ) {
+	if ( typeof elem.getElementsByTagName !== "undefined" ) {
+		return elem.getElementsByTagName( "*" );
+
+	} else if ( typeof elem.querySelectorAll !== "undefined" ) {
+		return elem.querySelectorAll( "*" );
+
+	} else {
+		return [];
+	}
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+	if ( rcheckableType.test( elem.type ) ) {
+		elem.defaultChecked = elem.checked;
+	}
+}
+
+jQuery.extend({
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var srcElements,
+			destElements,
+			i,
+			clone;
+
+		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+			clone = elem.cloneNode( true );
+
+		// IE<=8 does not properly clone detached, unknown element nodes
+		} else {
+			fragmentDiv.innerHTML = elem.outerHTML;
+			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+		}
+
+		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+			// IE copies events bound via attachEvent when using cloneNode.
+			// Calling detachEvent on the clone will also remove the events
+			// from the original. In order to get around this, we use some
+			// proprietary methods to clear the events. Thanks to MooTools
+			// guys for this hotness.
+
+			cloneFixAttributes( elem, clone );
+
+			// Using Sizzle here is crazy slow, so we use getElementsByTagName instead
+			srcElements = getAll( elem );
+			destElements = getAll( clone );
+
+			// Weird iteration because IE will replace the length property
+			// with an element if you are cloning the body and one of the
+			// elements on the page has a name or id of "length"
+			for ( i = 0; srcElements[i]; ++i ) {
+				// Ensure that the destination node is not null; Fixes #9587
+				if ( destElements[i] ) {
+					cloneFixAttributes( srcElements[i], destElements[i] );
+				}
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			cloneCopyEvent( elem, clone );
+
+			if ( deepDataAndEvents ) {
+				srcElements = getAll( elem );
+				destElements = getAll( clone );
+
+				for ( i = 0; srcElements[i]; ++i ) {
+					cloneCopyEvent( srcElements[i], destElements[i] );
+				}
+			}
+		}
+
+		srcElements = destElements = null;
+
+		// Return the cloned set
+		return clone;
+	},
+
+	clean: function( elems, context, fragment, scripts ) {
+		var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags,
+			safe = context === document && safeFragment,
+			ret = [];
+
+		// Ensure that context is a document
+		if ( !context || typeof context.createDocumentFragment === "undefined" ) {
+			context = document;
+		}
+
+		// Use the already-created safe fragment if context permits
+		for ( i = 0; (elem = elems[i]) != null; i++ ) {
+			if ( typeof elem === "number" ) {
+				elem += "";
+			}
+
+			if ( !elem ) {
+				continue;
+			}
+
+			// Convert html string into DOM nodes
+			if ( typeof elem === "string" ) {
+				if ( !rhtml.test( elem ) ) {
+					elem = context.createTextNode( elem );
+				} else {
+					// Ensure a safe container in which to render the html
+					safe = safe || createSafeFragment( context );
+					div = context.createElement("div");
+					safe.appendChild( div );
+
+					// Fix "XHTML"-style tags in all browsers
+					elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+					// Go to html and back, then peel off extra wrappers
+					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+					wrap = wrapMap[ tag ] || wrapMap._default;
+					depth = wrap[0];
+					div.innerHTML = wrap[1] + elem + wrap[2];
+
+					// Move to the right depth
+					while ( depth-- ) {
+						div = div.lastChild;
+					}
+
+					// Remove IE's autoinserted <tbody> from table fragments
+					if ( !jQuery.support.tbody ) {
+
+						// String was a <table>, *may* have spurious <tbody>
+						hasBody = rtbody.test(elem);
+							tbody = tag === "table" && !hasBody ?
+								div.firstChild && div.firstChild.childNodes :
+
+								// String was a bare <thead> or <tfoot>
+								wrap[1] === "<table>" && !hasBody ?
+									div.childNodes :
+									[];
+
+						for ( j = tbody.length - 1; j >= 0 ; --j ) {
+							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+								tbody[ j ].parentNode.removeChild( tbody[ j ] );
+							}
+						}
+					}
+
+					// IE completely kills leading whitespace when innerHTML is used
+					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+					}
+
+					elem = div.childNodes;
+
+					// Take out of fragment container (we need a fresh div each time)
+					div.parentNode.removeChild( div );
+				}
+			}
+
+			if ( elem.nodeType ) {
+				ret.push( elem );
+			} else {
+				jQuery.merge( ret, elem );
+			}
+		}
+
+		// Fix #11356: Clear elements from safeFragment
+		if ( div ) {
+			elem = div = safe = null;
+		}
+
+		// Reset defaultChecked for any radios and checkboxes
+		// about to be appended to the DOM in IE 6/7 (#8060)
+		if ( !jQuery.support.appendChecked ) {
+			for ( i = 0; (elem = ret[i]) != null; i++ ) {
+				if ( jQuery.nodeName( elem, "input" ) ) {
+					fixDefaultChecked( elem );
+				} else if ( typeof elem.getElementsByTagName !== "undefined" ) {
+					jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+				}
+			}
+		}
+
+		// Append elements to a provided document fragment
+		if ( fragment ) {
+			// Special handling of each script element
+			handleScript = function( elem ) {
+				// Check if we consider it executable
+				if ( !elem.type || rscriptType.test( elem.type ) ) {
+					// Detach the script and store it in the scripts array (if provided) or the fragment
+					// Return truthy to indicate that it has been handled
+					return scripts ?
+						scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :
+						fragment.appendChild( elem );
+				}
+			};
+
+			for ( i = 0; (elem = ret[i]) != null; i++ ) {
+				// Check if we're done after handling an executable script
+				if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {
+					// Append to fragment and handle embedded scripts
+					fragment.appendChild( elem );
+					if ( typeof elem.getElementsByTagName !== "undefined" ) {
+						// handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
+						jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
+
+						// Splice the scripts into ret after their former ancestor and advance our index beyond them
+						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+						i += jsTags.length;
+					}
+				}
+			}
+		}
+
+		return ret;
+	},
+
+	cleanData: function( elems, /* internal */ acceptData ) {
+		var data, id, elem, type,
+			i = 0,
+			internalKey = jQuery.expando,
+			cache = jQuery.cache,
+			deleteExpando = jQuery.support.deleteExpando,
+			special = jQuery.event.special;
+
+		for ( ; (elem = elems[i]) != null; i++ ) {
+
+			if ( acceptData || jQuery.acceptData( elem ) ) {
+
+				id = elem[ internalKey ];
+				data = id && cache[ id ];
+
+				if ( data ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Remove cache only if it was not already removed by jQuery.event.remove
+					if ( cache[ id ] ) {
+
+						delete cache[ id ];
+
+						// IE does not allow us to delete expando properties from nodes,
+						// nor does it have a removeAttribute function on Document nodes;
+						// we must handle all of these cases
+						if ( deleteExpando ) {
+							delete elem[ internalKey ];
+
+						} else if ( elem.removeAttribute ) {
+							elem.removeAttribute( internalKey );
+
+						} else {
+							elem[ internalKey ] = null;
+						}
+
+						jQuery.deletedIds.push( id );
+					}
+				}
+			}
+		}
+	}
+});
+// Limit scope pollution from any deprecated API
+(function() {
+
+var matched, browser;
+
+// Use of jQuery.browser is frowned upon.
+// More details: http://api.jquery.com/jQuery.browser
+// jQuery.uaMatch maintained for back-compat
+jQuery.uaMatch = function( ua ) {
+	ua = ua.toLowerCase();
+
+	var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
+		/(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+		/(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
+		/(msie) ([\w.]+)/.exec( ua ) ||
+		ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
+		[];
+
+	return {
+		browser: match[ 1 ] || "",
+		version: match[ 2 ] || "0"
+	};
+};
+
+matched = jQuery.uaMatch( navigator.userAgent );
+browser = {};
+
+if ( matched.browser ) {
+	browser[ matched.browser ] = true;
+	browser.version = matched.version;
+}
+
+// Chrome is Webkit, but Webkit is also Safari.
+if ( browser.chrome ) {
+	browser.webkit = true;
+} else if ( browser.webkit ) {
+	browser.safari = true;
+}
+
+jQuery.browser = browser;
+
+jQuery.sub = function() {
+	function jQuerySub( selector, context ) {
+		return new jQuerySub.fn.init( selector, context );
+	}
+	jQuery.extend( true, jQuerySub, this );
+	jQuerySub.superclass = this;
+	jQuerySub.fn = jQuerySub.prototype = this();
+	jQuerySub.fn.constructor = jQuerySub;
+	jQuerySub.sub = this.sub;
+	jQuerySub.fn.init = function init( selector, context ) {
+		if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+			context = jQuerySub( context );
+		}
+
+		return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+	};
+	jQuerySub.fn.init.prototype = jQuerySub.fn;
+	var rootjQuerySub = jQuerySub(document);
+	return jQuerySub;
+};
+
+})();
+var curCSS, iframe, iframeDoc,
+	ralpha = /alpha\([^)]*\)/i,
+	ropacity = /opacity=([^)]*)/,
+	rposition = /^(top|right|bottom|left)$/,
+	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rmargin = /^margin/,
+	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+	rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ),
+	elemdisplay = { BODY: "block" },
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: 0,
+		fontWeight: 400
+	},
+
+	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
+
+	eventsToggle = jQuery.fn.toggle;
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+	// shortcut for names that are not vendor prefixed
+	if ( name in style ) {
+		return name;
+	}
+
+	// check for vendor prefixed names
+	var capName = name.charAt(0).toUpperCase() + name.slice(1),
+		origName = name,
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in style ) {
+			return name;
+		}
+	}
+
+	return origName;
+}
+
+function isHidden( elem, el ) {
+	elem = el || elem;
+	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+}
+
+function showHide( elements, show ) {
+	var elem, display,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		values[ index ] = jQuery._data( elem, "olddisplay" );
+		if ( show ) {
+			// Reset the inline display of this element to learn if it is
+			// being hidden by cascaded rules or not
+			if ( !values[ index ] && elem.style.display === "none" ) {
+				elem.style.display = "";
+			}
+
+			// Set elements which have been overridden with display: none
+			// in a stylesheet to whatever the default browser style is
+			// for such an element
+			if ( elem.style.display === "" && isHidden( elem ) ) {
+				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+			}
+		} else {
+			display = curCSS( elem, "display" );
+
+			if ( !values[ index ] && display !== "none" ) {
+				jQuery._data( elem, "olddisplay", display );
+			}
+		}
+	}
+
+	// Set the display of most of the elements in a second loop
+	// to avoid the constant reflow
+	for ( index = 0; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+			elem.style.display = show ? values[ index ] || "" : "none";
+		}
+	}
+
+	return elements;
+}
+
+jQuery.fn.extend({
+	css: function( name, value ) {
+		return jQuery.access( this, function( elem, name, value ) {
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	},
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state, fn2 ) {
+		var bool = typeof state === "boolean";
+
+		if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) {
+			return eventsToggle.apply( this, arguments );
+		}
+
+		return this.each(function() {
+			if ( bool ? state : isHidden( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+
+				}
+			}
+		}
+	},
+
+	// Exclude the following css properties to add px
+	cssNumber: {
+		"fillOpacity": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		// normalize float css property
+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			style = elem.style;
+
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// convert relative number strings (+= or -=) to relative numbers. #7345
+			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that NaN and null values aren't set. See: #7116
+			if ( value == null || type === "number" && isNaN( value ) ) {
+				return;
+			}
+
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+				// Fixes bug #5509
+				try {
+					style[ name ] = value;
+				} catch(e) {}
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, numeric, extra ) {
+		var val, num, hooks,
+			origName = jQuery.camelCase( name );
+
+		// Make sure that we're working with the right name
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name );
+		}
+
+		//convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Return, converting to number if forced or a qualifier was provided and val looks numeric
+		if ( numeric || extra !== undefined ) {
+			num = parseFloat( val );
+			return numeric || jQuery.isNumeric( num ) ? num || 0 : val;
+		}
+		return val;
+	},
+
+	// A method for quickly swapping in/out CSS properties to get correct calculations
+	swap: function( elem, options, callback ) {
+		var ret, name,
+			old = {};
+
+		// Remember the old values, and insert the new ones
+		for ( name in options ) {
+			old[ name ] = elem.style[ name ];
+			elem.style[ name ] = options[ name ];
+		}
+
+		ret = callback.call( elem );
+
+		// Revert the old values
+		for ( name in options ) {
+			elem.style[ name ] = old[ name ];
+		}
+
+		return ret;
+	}
+});
+
+// NOTE: To any future maintainer, we've window.getComputedStyle
+// because jsdom on node.js will break without it.
+if ( window.getComputedStyle ) {
+	curCSS = function( elem, name ) {
+		var ret, width, minWidth, maxWidth,
+			computed = window.getComputedStyle( elem, null ),
+			style = elem.style;
+
+		if ( computed ) {
+
+			// getPropertyValue is only needed for .css('filter') in IE9, see #12537
+			ret = computed.getPropertyValue( name ) || computed[ name ];
+
+			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+				ret = jQuery.style( elem, name );
+			}
+
+			// A tribute to the "awesome hack by Dean Edwards"
+			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+				width = style.width;
+				minWidth = style.minWidth;
+				maxWidth = style.maxWidth;
+
+				style.minWidth = style.maxWidth = style.width = ret;
+				ret = computed.width;
+
+				style.width = width;
+				style.minWidth = minWidth;
+				style.maxWidth = maxWidth;
+			}
+		}
+
+		return ret;
+	};
+} else if ( document.documentElement.currentStyle ) {
+	curCSS = function( elem, name ) {
+		var left, rsLeft,
+			ret = elem.currentStyle && elem.currentStyle[ name ],
+			style = elem.style;
+
+		// Avoid setting ret to empty string here
+		// so we don't default to auto
+		if ( ret == null && style && style[ name ] ) {
+			ret = style[ name ];
+		}
+
+		// From the awesome hack by Dean Edwards
+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+		// If we're not dealing with a regular pixel number
+		// but a number that has a weird ending, we need to convert it to pixels
+		// but not position css attributes, as those are proportional to the parent element instead
+		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+
+			// Remember the original values
+			left = style.left;
+			rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
+
+			// Put in the new values to get a computed value out
+			if ( rsLeft ) {
+				elem.runtimeStyle.left = elem.currentStyle.left;
+			}
+			style.left = name === "fontSize" ? "1em" : ret;
+			ret = style.pixelLeft + "px";
+
+			// Revert the changed values
+			style.left = left;
+			if ( rsLeft ) {
+				elem.runtimeStyle.left = rsLeft;
+			}
+		}
+
+		return ret === "" ? "auto" : ret;
+	};
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+	var matches = rnumsplit.exec( value );
+	return matches ?
+			Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+			value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox ) {
+	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+		// If we already have the right measurement, avoid augmentation
+		4 :
+		// Otherwise initialize for horizontal or vertical properties
+		name === "width" ? 1 : 0,
+
+		val = 0;
+
+	for ( ; i < 4; i += 2 ) {
+		// both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			// we use jQuery.css instead of curCSS here
+			// because of the reliableMarginRight CSS hook!
+			val += jQuery.css( elem, extra + cssExpand[ i ], true );
+		}
+
+		// From this point on we use curCSS for maximum performance (relevant in animations)
+		if ( isBorderBox ) {
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0;
+			}
+
+			// at this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+			}
+		} else {
+			// at this point, extra isn't content, so add padding
+			val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0;
+
+			// at this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property, which is equivalent to the border-box value
+	var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+		valueIsBorderBox = true,
+		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box";
+
+	// some non-html elements return undefined for offsetWidth, so check for null/undefined
+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+	if ( val <= 0 || val == null ) {
+		// Fall back to computed then uncomputed css if necessary
+		val = curCSS( elem, name );
+		if ( val < 0 || val == null ) {
+			val = elem.style[ name ];
+		}
+
+		// Computed unit is not pixels. Stop here and return.
+		if ( rnumnonpx.test(val) ) {
+			return val;
+		}
+
+		// we need the check for style in case a browser which returns unreliable values
+		// for getComputedStyle silently falls back to the reliable elem.style
+		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+
+		// Normalize "", auto, and prepare for extra
+		val = parseFloat( val ) || 0;
+	}
+
+	// use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox
+		)
+	) + "px";
+}
+
+
+// Try to determine the default display value of an element
+function css_defaultDisplay( nodeName ) {
+	if ( elemdisplay[ nodeName ] ) {
+		return elemdisplay[ nodeName ];
+	}
+
+	var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ),
+		display = elem.css("display");
+	elem.remove();
+
+	// If the simple way fails,
+	// get element's real default display by attaching it to a temp iframe
+	if ( display === "none" || display === "" ) {
+		// Use the already-created iframe if possible
+		iframe = document.body.appendChild(
+			iframe || jQuery.extend( document.createElement("iframe"), {
+				frameBorder: 0,
+				width: 0,
+				height: 0
+			})
+		);
+
+		// Create a cacheable copy of the iframe document on first call.
+		// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+		// document to it; WebKit & Firefox won't allow reusing the iframe document.
+		if ( !iframeDoc || !iframe.createElement ) {
+			iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+			iframeDoc.write("<!doctype html><html><body>");
+			iframeDoc.close();
+		}
+
+		elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) );
+
+		display = curCSS( elem, "display" );
+		document.body.removeChild( iframe );
+	}
+
+	// Store the correct default display
+	elemdisplay[ nodeName ] = display;
+
+	return display;
+}
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+				// certain elements can have dimension info if we invisibly show them
+				// however, it must have a current display style that would benefit from this
+				if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) {
+					return jQuery.swap( elem, cssShow, function() {
+						return getWidthOrHeight( elem, name, extra );
+					});
+				} else {
+					return getWidthOrHeight( elem, name, extra );
+				}
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			return setPositiveNumber( elem, value, extra ?
+				augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"
+				) : 0
+			);
+		}
+	};
+});
+
+if ( !jQuery.support.opacity ) {
+	jQuery.cssHooks.opacity = {
+		get: function( elem, computed ) {
+			// IE uses filters for opacity
+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+				computed ? "1" : "";
+		},
+
+		set: function( elem, value ) {
+			var style = elem.style,
+				currentStyle = elem.currentStyle,
+				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+				filter = currentStyle && currentStyle.filter || style.filter || "";
+
+			// IE has trouble with opacity if it does not have layout
+			// Force it by setting the zoom level
+			style.zoom = 1;
+
+			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+			if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+				style.removeAttribute ) {
+
+				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+				// if "filter:" is present at all, clearType is disabled, we want to avoid this
+				// style.removeAttribute is IE Only, but so apparently is this code path...
+				style.removeAttribute( "filter" );
+
+				// if there there is no filter style applied in a css rule, we are done
+				if ( currentStyle && !currentStyle.filter ) {
+					return;
+				}
+			}
+
+			// otherwise, set new filter values
+			style.filter = ralpha.test( filter ) ?
+				filter.replace( ralpha, opacity ) :
+				filter + " " + opacity;
+		}
+	};
+}
+
+// These hooks cannot be added until DOM ready because the support test
+// for it is not run until after DOM ready
+jQuery(function() {
+	if ( !jQuery.support.reliableMarginRight ) {
+		jQuery.cssHooks.marginRight = {
+			get: function( elem, computed ) {
+				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+				// Work around by temporarily setting element display to inline-block
+				return jQuery.swap( elem, { "display": "inline-block" }, function() {
+					if ( computed ) {
+						return curCSS( elem, "marginRight" );
+					}
+				});
+			}
+		};
+	}
+
+	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+	// getComputedStyle returns percent when specified for top/left/bottom/right
+	// rather than make the css module depend on the offset module, we just check for it here
+	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+		jQuery.each( [ "top", "left" ], function( i, prop ) {
+			jQuery.cssHooks[ prop ] = {
+				get: function( elem, computed ) {
+					if ( computed ) {
+						var ret = curCSS( elem, prop );
+						// if curCSS returns percentage, fallback to offset
+						return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret;
+					}
+				}
+			};
+		});
+	}
+
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.hidden = function( elem ) {
+		return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none");
+	};
+
+	jQuery.expr.filters.visible = function( elem ) {
+		return !jQuery.expr.filters.hidden( elem );
+	};
+}
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i,
+
+				// assumes a single number if not a string
+				parts = typeof value === "string" ? value.split(" ") : [ value ],
+				expanded = {};
+
+			for ( i = 0; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+});
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+	rselectTextarea = /^(?:select|textarea)/i;
+
+jQuery.fn.extend({
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map(function(){
+			return this.elements ? jQuery.makeArray( this.elements ) : this;
+		})
+		.filter(function(){
+			return this.name && !this.disabled &&
+				( this.checked || rselectTextarea.test( this.nodeName ) ||
+					rinput.test( this.type ) );
+		})
+		.map(function( i, elem ){
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val, i ){
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					}) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		}).get();
+	}
+});
+
+//Serialize an array of form elements or a set of
+//key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, value ) {
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+		};
+
+	// Set traditional to true for jQuery <= 1.3.2 behavior.
+	if ( traditional === undefined ) {
+		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		});
+
+	} else {
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" ).replace( r20, "+" );
+};
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( jQuery.isArray( obj ) ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+				// If array item is non-scalar (array or object), encode its
+				// numeric index to resolve deserialization ambiguity issues.
+				// Note that rack (as of 1.0.0) can't currently deserialize
+				// nested arrays properly, and attempting to do so may cause
+				// a server error. Possible fixes are to modify rack's
+				// deserialization algorithm or to provide an option or flag
+				// to force array serialization to be shallow.
+				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+			}
+		});
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+var
+	// Document location
+	ajaxLocParts,
+	ajaxLocation,
+
+	rhash = /#.*$/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rquery = /\?/,
+	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+	rts = /([?&])_=[^&]*/,
+	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
+
+	// Keep a copy of the old load method
+	_load = jQuery.fn.load,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = ["*/"] + ["*"];
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+	ajaxLocation = location.href;
+} catch( e ) {
+	// Use the href attribute of an A element
+	// since IE will modify it given document.location
+	ajaxLocation = document.createElement( "a" );
+	ajaxLocation.href = "";
+	ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType, list, placeBefore,
+			dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ),
+			i = 0,
+			length = dataTypes.length;
+
+		if ( jQuery.isFunction( func ) ) {
+			// For each dataType in the dataTypeExpression
+			for ( ; i < length; i++ ) {
+				dataType = dataTypes[ i ];
+				// We control if we're asked to add before
+				// any existing element
+				placeBefore = /^\+/.test( dataType );
+				if ( placeBefore ) {
+					dataType = dataType.substr( 1 ) || "*";
+				}
+				list = structure[ dataType ] = structure[ dataType ] || [];
+				// then we add to the structure accordingly
+				list[ placeBefore ? "unshift" : "push" ]( func );
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+		dataType /* internal */, inspected /* internal */ ) {
+
+	dataType = dataType || options.dataTypes[ 0 ];
+	inspected = inspected || {};
+
+	inspected[ dataType ] = true;
+
+	var selection,
+		list = structure[ dataType ],
+		i = 0,
+		length = list ? list.length : 0,
+		executeOnly = ( structure === prefilters );
+
+	for ( ; i < length && ( executeOnly || !selection ); i++ ) {
+		selection = list[ i ]( options, originalOptions, jqXHR );
+		// If we got redirected to another dataType
+		// we try there if executing only and not done already
+		if ( typeof selection === "string" ) {
+			if ( !executeOnly || inspected[ selection ] ) {
+				selection = undefined;
+			} else {
+				options.dataTypes.unshift( selection );
+				selection = inspectPrefiltersOrTransports(
+						structure, options, originalOptions, jqXHR, selection, inspected );
+			}
+		}
+	}
+	// If we're only executing or nothing was selected
+	// we try the catchall dataType if not done already
+	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+		selection = inspectPrefiltersOrTransports(
+				structure, options, originalOptions, jqXHR, "*", inspected );
+	}
+	// unnecessary when only executing (prefilters)
+	// but it'll be ignored by the caller in that case
+	return selection;
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+}
+
+jQuery.fn.load = function( url, params, callback ) {
+	if ( typeof url !== "string" && _load ) {
+		return _load.apply( this, arguments );
+	}
+
+	// Don't do a request if no elements are being requested
+	if ( !this.length ) {
+		return this;
+	}
+
+	var selector, type, response,
+		self = this,
+		off = url.indexOf(" ");
+
+	if ( off >= 0 ) {
+		selector = url.slice( off, url.length );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// Request the remote document
+	jQuery.ajax({
+		url: url,
+
+		// if "type" variable is undefined, then "GET" method will be used
+		type: type,
+		dataType: "html",
+		data: params,
+		complete: function( jqXHR, status ) {
+			if ( callback ) {
+				self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+			}
+		}
+	}).done(function( responseText ) {
+
+		// Save response for use in complete callback
+		response = arguments;
+
+		// See if a selector was specified
+		self.html( selector ?
+
+			// Create a dummy div to hold the results
+			jQuery("<div>")
+
+				// inject the contents of the document in, removing the scripts
+				// to avoid any 'Permission Denied' errors in IE
+				.append( responseText.replace( rscript, "" ) )
+
+				// Locate the specified elements
+				.find( selector ) :
+
+			// If not, just inject the full result
+			responseText );
+
+	});
+
+	return this;
+};
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+	jQuery.fn[ o ] = function( f ){
+		return this.on( o, f );
+	};
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+		// shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		return jQuery.ajax({
+			type: method,
+			url: url,
+			data: data,
+			success: callback,
+			dataType: type
+		});
+	};
+});
+
+jQuery.extend({
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		if ( settings ) {
+			// Building a settings object
+			ajaxExtend( target, jQuery.ajaxSettings );
+		} else {
+			// Extending ajaxSettings
+			settings = target;
+			target = jQuery.ajaxSettings;
+		}
+		ajaxExtend( target, settings );
+		return target;
+	},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		type: "GET",
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+		processData: true,
+		async: true,
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			xml: "application/xml, text/xml",
+			html: "text/html",
+			text: "text/plain",
+			json: "application/json, text/javascript",
+			"*": allTypes
+		},
+
+		contents: {
+			xml: /xml/,
+			html: /html/,
+			json: /json/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText"
+		},
+
+		// List of data converters
+		// 1) key format is "source_type destination_type" (a single space in-between)
+		// 2) the catchall symbol "*" can be used for source_type
+		converters: {
+
+			// Convert anything to text
+			"* text": window.String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			context: true,
+			url: true
+		}
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var // ifModified key
+			ifModifiedKey,
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+			// transport
+			transport,
+			// timeout handle
+			timeoutTimer,
+			// Cross-domain detection vars
+			parts,
+			// To know if global events are to be dispatched
+			fireGlobals,
+			// Loop variable
+			i,
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+			// Callbacks context
+			callbackContext = s.context || s,
+			// Context for global events
+			// It's the callbackContext if one was provided in the options
+			// and if it's a DOM node or a jQuery collection
+			globalEventContext = callbackContext !== s &&
+				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+						jQuery( callbackContext ) : jQuery.event,
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+			// The jqXHR state
+			state = 0,
+			// Default abort message
+			strAbort = "canceled",
+			// Fake xhr
+			jqXHR = {
+
+				readyState: 0,
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					if ( !state ) {
+						var lname = name.toLowerCase();
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match === undefined ? null : match;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					statusText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( statusText );
+					}
+					done( 0, statusText );
+					return this;
+				}
+			};
+
+		// Callback for when everything is done
+		// It is defined here because jslint complains if it is declared
+		// at the end of the function (which would be more logical and readable)
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// If successful, handle type chaining
+			if ( status >= 200 && status < 300 || status === 304 ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+
+					modified = jqXHR.getResponseHeader("Last-Modified");
+					if ( modified ) {
+						jQuery.lastModified[ ifModifiedKey ] = modified;
+					}
+					modified = jqXHR.getResponseHeader("Etag");
+					if ( modified ) {
+						jQuery.etag[ ifModifiedKey ] = modified;
+					}
+				}
+
+				// If not modified
+				if ( status === 304 ) {
+
+					statusText = "notmodified";
+					isSuccess = true;
+
+				// If we have data
+				} else {
+
+					isSuccess = ajaxConvert( s, response );
+					statusText = isSuccess.state;
+					success = isSuccess.data;
+					error = isSuccess.error;
+					isSuccess = !error;
+				}
+			} else {
+				// We extract error from statusText
+				// then normalize statusText and status for non-aborts
+				error = statusText;
+				if ( !statusText || status ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+						[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		// Attach deferreds
+		deferred.promise( jqXHR );
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+		jqXHR.complete = completeDeferred.add;
+
+		// Status-dependent callbacks
+		jqXHR.statusCode = function( map ) {
+			if ( map ) {
+				var tmp;
+				if ( state < 2 ) {
+					for ( tmp in map ) {
+						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+					}
+				} else {
+					tmp = map[ jqXHR.status ];
+					jqXHR.always( tmp );
+				}
+			}
+			return this;
+		};
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace );
+
+		// A cross-domain request is in order when we have a protocol:host:port mismatch
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( state === 2 ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		fireGlobals = s.global;
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Get ifModifiedKey before adding the anti-cache parameter
+			ifModifiedKey = s.url;
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+
+				var ts = jQuery.now(),
+					// try replacing _= if it is there
+					ret = s.url.replace( rts, "$1_=" + ts );
+
+				// if nothing was replaced, add timestamp to the end
+				s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			ifModifiedKey = ifModifiedKey || s.url;
+			if ( jQuery.lastModified[ ifModifiedKey ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+			}
+			if ( jQuery.etag[ ifModifiedKey ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+			}
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+				// Abort if not done already and return
+				return jqXHR.abort();
+
+		}
+
+		// aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = setTimeout( function(){
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch (e) {
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {}
+
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes,
+		responseFields = s.responseFields;
+
+	// Fill responseXXX fields
+	for ( type in responseFields ) {
+		if ( type in responses ) {
+			jqXHR[ responseFields[type] ] = responses[ type ];
+		}
+	}
+
+	// Remove auto dataType and get content-type in the process
+	while( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+	var conv, conv2, current, tmp,
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice(),
+		prev = dataTypes[ 0 ],
+		converters = {},
+		i = 0;
+
+	// Apply the dataFilter if provided
+	if ( s.dataFilter ) {
+		response = s.dataFilter( response, s.dataType );
+	}
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	// Convert to each sequential dataType, tolerating list modification
+	for ( ; (current = dataTypes[++i]); ) {
+
+		// There's only work to do if current dataType is non-auto
+		if ( current !== "*" ) {
+
+			// Convert response if prev dataType is non-auto and differs from current
+			if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split(" ");
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.splice( i--, 0, current );
+								}
+
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s["throws"] ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+						}
+					}
+				}
+			}
+
+			// Update prev for next iteration
+			prev = current;
+		}
+	}
+
+	return { state: "success", data: response };
+}
+var oldCallbacks = [],
+	rquestion = /\?/,
+	rjsonp = /(=)\?(?=&|$)|\?\?/,
+	nonce = jQuery.now();
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		data = s.data,
+		url = s.url,
+		hasCallback = s.jsonp !== false,
+		replaceInUrl = hasCallback && rjsonp.test( url ),
+		replaceInData = hasCallback && !replaceInUrl && typeof data === "string" &&
+			!( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") &&
+			rjsonp.test( data );
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+		overwritten = window[ callbackName ];
+
+		// Insert callback into url or form data
+		if ( replaceInUrl ) {
+			s.url = url.replace( rjsonp, "$1" + callbackName );
+		} else if ( replaceInData ) {
+			s.data = data.replace( rjsonp, "$1" + callbackName );
+		} else if ( hasCallback ) {
+			s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters["script json"] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always(function() {
+			// Restore preexisting value
+			window[ callbackName ] = overwritten;
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+				// make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		});
+
+		// Delegate to script
+		return "script";
+	}
+});
+// Install script dataType
+jQuery.ajaxSetup({
+	accepts: {
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /javascript|ecmascript/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+		s.global = false;
+	}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+
+		var script,
+			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+
+		return {
+
+			send: function( _, callback ) {
+
+				script = document.createElement( "script" );
+
+				script.async = "async";
+
+				if ( s.scriptCharset ) {
+					script.charset = s.scriptCharset;
+				}
+
+				script.src = s.url;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+
+						// Remove the script
+						if ( head && script.parentNode ) {
+							head.removeChild( script );
+						}
+
+						// Dereference the script
+						script = undefined;
+
+						// Callback if not abort
+						if ( !isAbort ) {
+							callback( 200, "success" );
+						}
+					}
+				};
+				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+				// This arises when a base node is used (#2709 and #4378).
+				head.insertBefore( script, head.firstChild );
+			},
+
+			abort: function() {
+				if ( script ) {
+					script.onload( 0, 1 );
+				}
+			}
+		};
+	}
+});
+var xhrCallbacks,
+	// #5280: Internet Explorer will keep connections alive if we don't abort on unload
+	xhrOnUnloadAbort = window.ActiveXObject ? function() {
+		// Abort all pending requests
+		for ( var key in xhrCallbacks ) {
+			xhrCallbacks[ key ]( 0, 1 );
+		}
+	} : false,
+	xhrId = 0;
+
+// Functions to create xhrs
+function createStandardXHR() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch( e ) {}
+}
+
+function createActiveXHR() {
+	try {
+		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+	} catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+	/* Microsoft failed to properly
+	 * implement the XMLHttpRequest in IE7 (can't request local files),
+	 * so we use the ActiveXObject when it is available
+	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+	 * we need a fallback.
+	 */
+	function() {
+		return !this.isLocal && createStandardXHR() || createActiveXHR();
+	} :
+	// For all other browsers, use the standard XMLHttpRequest object
+	createStandardXHR;
+
+// Determine support properties
+(function( xhr ) {
+	jQuery.extend( jQuery.support, {
+		ajax: !!xhr,
+		cors: !!xhr && ( "withCredentials" in xhr )
+	});
+})( jQuery.ajaxSettings.xhr() );
+
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
+
+	jQuery.ajaxTransport(function( s ) {
+		// Cross domain only allowed if supported through XMLHttpRequest
+		if ( !s.crossDomain || jQuery.support.cors ) {
+
+			var callback;
+
+			return {
+				send: function( headers, complete ) {
+
+					// Get a new xhr
+					var handle, i,
+						xhr = s.xhr();
+
+					// Open the socket
+					// Passing null username, generates a login popup on Opera (#2865)
+					if ( s.username ) {
+						xhr.open( s.type, s.url, s.async, s.username, s.password );
+					} else {
+						xhr.open( s.type, s.url, s.async );
+					}
+
+					// Apply custom fields if provided
+					if ( s.xhrFields ) {
+						for ( i in s.xhrFields ) {
+							xhr[ i ] = s.xhrFields[ i ];
+						}
+					}
+
+					// Override mime type if needed
+					if ( s.mimeType && xhr.overrideMimeType ) {
+						xhr.overrideMimeType( s.mimeType );
+					}
+
+					// X-Requested-With header
+					// For cross-domain requests, seeing as conditions for a preflight are
+					// akin to a jigsaw puzzle, we simply never set it to be sure.
+					// (it can always be set on a per-request basis or even using ajaxSetup)
+					// For same-domain requests, won't change header if already provided.
+					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+						headers[ "X-Requested-With" ] = "XMLHttpRequest";
+					}
+
+					// Need an extra try/catch for cross domain requests in Firefox 3
+					try {
+						for ( i in headers ) {
+							xhr.setRequestHeader( i, headers[ i ] );
+						}
+					} catch( _ ) {}
+
+					// Do send the request
+					// This may raise an exception which is actually
+					// handled in jQuery.ajax (so no try/catch here)
+					xhr.send( ( s.hasContent && s.data ) || null );
+
+					// Listener
+					callback = function( _, isAbort ) {
+
+						var status,
+							statusText,
+							responseHeaders,
+							responses,
+							xml;
+
+						// Firefox throws exceptions when accessing properties
+						// of an xhr when a network error occurred
+						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+						try {
+
+							// Was never called and is aborted or complete
+							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+								// Only called once
+								callback = undefined;
+
+								// Do not keep as active anymore
+								if ( handle ) {
+									xhr.onreadystatechange = jQuery.noop;
+									if ( xhrOnUnloadAbort ) {
+										delete xhrCallbacks[ handle ];
+									}
+								}
+
+								// If it's an abort
+								if ( isAbort ) {
+									// Abort it manually if needed
+									if ( xhr.readyState !== 4 ) {
+										xhr.abort();
+									}
+								} else {
+									status = xhr.status;
+									responseHeaders = xhr.getAllResponseHeaders();
+									responses = {};
+									xml = xhr.responseXML;
+
+									// Construct response list
+									if ( xml && xml.documentElement /* #4958 */ ) {
+										responses.xml = xml;
+									}
+
+									// When requesting binary data, IE6-9 will throw an exception
+									// on any attempt to access responseText (#11426)
+									try {
+										responses.text = xhr.responseText;
+									} catch( e ) {
+									}
+
+									// Firefox throws an exception when accessing
+									// statusText for faulty cross-domain requests
+									try {
+										statusText = xhr.statusText;
+									} catch( e ) {
+										// We normalize with Webkit giving an empty statusText
+										statusText = "";
+									}
+
+									// Filter status for non standard behaviors
+
+									// If the request is local and we have data: assume a success
+									// (success with no data won't get notified, that's the best we
+									// can do given current implementations)
+									if ( !status && s.isLocal && !s.crossDomain ) {
+										status = responses.text ? 200 : 404;
+									// IE - #1450: sometimes returns 1223 when it should be 204
+									} else if ( status === 1223 ) {
+										status = 204;
+									}
+								}
+							}
+						} catch( firefoxAccessException ) {
+							if ( !isAbort ) {
+								complete( -1, firefoxAccessException );
+							}
+						}
+
+						// Call complete if needed
+						if ( responses ) {
+							complete( status, statusText, responses, responseHeaders );
+						}
+					};
+
+					if ( !s.async ) {
+						// if we're in sync mode we fire the callback
+						callback();
+					} else if ( xhr.readyState === 4 ) {
+						// (IE6 & IE7) if it's in cache and has been
+						// retrieved directly we need to fire the callback
+						setTimeout( callback, 0 );
+					} else {
+						handle = ++xhrId;
+						if ( xhrOnUnloadAbort ) {
+							// Create the active xhrs callbacks list if needed
+							// and attach the unload handler
+							if ( !xhrCallbacks ) {
+								xhrCallbacks = {};
+								jQuery( window ).unload( xhrOnUnloadAbort );
+							}
+							// Add to list of active xhrs callbacks
+							xhrCallbacks[ handle ] = callback;
+						}
+						xhr.onreadystatechange = callback;
+					}
+				},
+
+				abort: function() {
+					if ( callback ) {
+						callback(0,1);
+					}
+				}
+			};
+		}
+	});
+}
+var fxNow, timerId,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+	rrun = /queueHooks$/,
+	animationPrefilters = [ defaultPrefilter ],
+	tweeners = {
+		"*": [function( prop, value ) {
+			var end, unit,
+				tween = this.createTween( prop, value ),
+				parts = rfxnum.exec( value ),
+				target = tween.cur(),
+				start = +target || 0,
+				scale = 1,
+				maxIterations = 20;
+
+			if ( parts ) {
+				end = +parts[2];
+				unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+
+				// We need to compute starting value
+				if ( unit !== "px" && start ) {
+					// Iteratively approximate from a nonzero starting point
+					// Prefer the current property, because this process will be trivial if it uses the same units
+					// Fallback to end or a simple constant
+					start = jQuery.css( tween.elem, prop, true ) || end || 1;
+
+					do {
+						// If previous iteration zeroed out, double until we get *something*
+						// Use a string for doubling factor so we don't accidentally see scale as unchanged below
+						scale = scale || ".5";
+
+						// Adjust and apply
+						start = start / scale;
+						jQuery.style( tween.elem, prop, start + unit );
+
+					// Update scale, tolerating zero or NaN from tween.cur()
+					// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+					} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+				}
+
+				tween.unit = unit;
+				tween.start = start;
+				// If a +=/-= token was provided, we're doing a relative animation
+				tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
+			}
+			return tween;
+		}]
+	};
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	setTimeout(function() {
+		fxNow = undefined;
+	}, 0 );
+	return ( fxNow = jQuery.now() );
+}
+
+function createTweens( animation, props ) {
+	jQuery.each( props, function( prop, value ) {
+		var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+			index = 0,
+			length = collection.length;
+		for ( ; index < length; index++ ) {
+			if ( collection[ index ].call( animation, prop, value ) ) {
+
+				// we're done with this property
+				return;
+			}
+		}
+	});
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		index = 0,
+		tweenerIndex = 0,
+		length = animationPrefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+			// don't match elem in the :animated selector
+			delete tick.elem;
+		}),
+		tick = function() {
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length ; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+			if ( percent < 1 && length ) {
+				return remaining;
+			} else {
+				deferred.resolveWith( elem, [ animation ] );
+				return false;
+			}
+		},
+		animation = deferred.promise({
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, { specialEasing: {} }, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end, easing ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+					// if we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+
+				for ( ; index < length ; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// resolve when we played the last frame
+				// otherwise, reject
+				if ( gotoEnd ) {
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		}),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length ; index++ ) {
+		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			return result;
+		}
+	}
+
+	createTweens( animation, props );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			anim: animation,
+			queue: animation.opts.queue,
+			elem: elem
+		})
+	);
+
+	// attach callbacks from options
+	return animation.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( jQuery.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// not quite $.extend, this wont overwrite keys already present.
+			// also - reusing 'index' from above because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.split(" ");
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length ; index++ ) {
+			prop = props[ index ];
+			tweeners[ prop ] = tweeners[ prop ] || [];
+			tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			animationPrefilters.unshift( callback );
+		} else {
+			animationPrefilters.push( callback );
+		}
+	}
+});
+
+function defaultPrefilter( elem, props, opts ) {
+	var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire,
+		anim = this,
+		style = elem.style,
+		orig = {},
+		handled = [],
+		hidden = elem.nodeType && isHidden( elem );
+
+	// handle queue: false promises
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always(function() {
+			// doing this makes sure that the complete handler will be called
+			// before this completes
+			anim.always(function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			});
+		});
+	}
+
+	// height/width overflow pass
+	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+		// Make sure that nothing sneaks out
+		// Record all 3 overflow attributes because IE does not
+		// change the overflow attribute when overflowX and
+		// overflowY are set to the same value
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Set display property to inline-block for height/width
+		// animations on inline elements that are having width/height animated
+		if ( jQuery.css( elem, "display" ) === "inline" &&
+				jQuery.css( elem, "float" ) === "none" ) {
+
+			// inline-level elements accept inline-block;
+			// block-level elements need to be inline with layout
+			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
+				style.display = "inline-block";
+
+			} else {
+				style.zoom = 1;
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		if ( !jQuery.support.shrinkWrapBlocks ) {
+			anim.done(function() {
+				style.overflow = opts.overflow[ 0 ];
+				style.overflowX = opts.overflow[ 1 ];
+				style.overflowY = opts.overflow[ 2 ];
+			});
+		}
+	}
+
+
+	// show/hide pass
+	for ( index in props ) {
+		value = props[ index ];
+		if ( rfxtypes.exec( value ) ) {
+			delete props[ index ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+				continue;
+			}
+			handled.push( index );
+		}
+	}
+
+	length = handled.length;
+	if ( length ) {
+		dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
+		if ( "hidden" in dataShow ) {
+			hidden = dataShow.hidden;
+		}
+
+		// store state if its toggle - enables .stop().toggle() to "reverse"
+		if ( toggle ) {
+			dataShow.hidden = !hidden;
+		}
+		if ( hidden ) {
+			jQuery( elem ).show();
+		} else {
+			anim.done(function() {
+				jQuery( elem ).hide();
+			});
+		}
+		anim.done(function() {
+			var prop;
+			jQuery.removeData( elem, "fxshow", true );
+			for ( prop in orig ) {
+				jQuery.style( elem, prop, orig[ prop ] );
+			}
+		});
+		for ( index = 0 ; index < length ; index++ ) {
+			prop = handled[ index ];
+			tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
+			orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
+
+			if ( !( prop in dataShow ) ) {
+				dataShow[ prop ] = tween.start;
+				if ( hidden ) {
+					tween.end = tween.start;
+					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+				}
+			}
+		}
+	}
+}
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || "swing";
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			if ( tween.elem[ tween.prop ] != null &&
+				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// passing any value as a 4th parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails
+			// so, simple values such as "10px" are parsed to Float.
+			// complex values such as "rotate(1rad)" are returned as is.
+			result = jQuery.css( tween.elem, tween.prop, false, "" );
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+			// use step hook for back compat - use cssHook if its there - use .style if its
+			// available and use plain properties where available
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Remove in 2.0 - this supports IE8's panic based approach
+// to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ||
+			// special check for .toggle( handler, handler, ... )
+			( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+});
+
+jQuery.fn.extend({
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// show any hidden elements after setting opacity to 0
+		return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+			// animate to the value specified
+			.end().animate({ opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations resolve immediately
+				if ( empty ) {
+					anim.stop( true );
+				}
+			};
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each(function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = jQuery._data( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// start the next in the queue if the last step wasn't forced
+			// timers currently will call their complete callbacks, which will dequeue
+			// but only if they were gotoEnd
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	}
+});
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		attrs = { height: type },
+		i = 0;
+
+	// if we include width, step value is 1 to do all cssExpand values,
+	// if we don't include width, step value is 2 to skip over Left and Right
+	includeWidth = includeWidth? 1 : 0;
+	for( ; i < 4 ; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx("show"),
+	slideUp: genFx("hide"),
+	slideToggle: genFx("toggle"),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+	// normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p*Math.PI ) / 2;
+	}
+};
+
+jQuery.timers = [];
+jQuery.fx = Tween.prototype.init;
+jQuery.fx.tick = function() {
+	var timer,
+		timers = jQuery.timers,
+		i = 0;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+		// Checks the timer has not already been removed
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	if ( timer() && jQuery.timers.push( timer ) && !timerId ) {
+		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+	}
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.stop = function() {
+	clearInterval( timerId );
+	timerId = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+	// Default speed
+	_default: 400
+};
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.animated = function( elem ) {
+		return jQuery.grep(jQuery.timers, function( fn ) {
+			return elem === fn.elem;
+		}).length;
+	};
+}
+var rroot = /^(?:body|html)$/i;
+
+jQuery.fn.offset = function( options ) {
+	if ( arguments.length ) {
+		return options === undefined ?
+			this :
+			this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+	}
+
+	var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft,
+		box = { top: 0, left: 0 },
+		elem = this[ 0 ],
+		doc = elem && elem.ownerDocument;
+
+	if ( !doc ) {
+		return;
+	}
+
+	if ( (body = doc.body) === elem ) {
+		return jQuery.offset.bodyOffset( elem );
+	}
+
+	docElem = doc.documentElement;
+
+	// Make sure it's not a disconnected DOM node
+	if ( !jQuery.contains( docElem, elem ) ) {
+		return box;
+	}
+
+	// If we don't have gBCR, just use 0,0 rather than error
+	// BlackBerry 5, iOS 3 (original iPhone)
+	if ( typeof elem.getBoundingClientRect !== "undefined" ) {
+		box = elem.getBoundingClientRect();
+	}
+	win = getWindow( doc );
+	clientTop  = docElem.clientTop  || body.clientTop  || 0;
+	clientLeft = docElem.clientLeft || body.clientLeft || 0;
+	scrollTop  = win.pageYOffset || docElem.scrollTop;
+	scrollLeft = win.pageXOffset || docElem.scrollLeft;
+	return {
+		top: box.top  + scrollTop  - clientTop,
+		left: box.left + scrollLeft - clientLeft
+	};
+};
+
+jQuery.offset = {
+
+	bodyOffset: function( body ) {
+		var top = body.offsetTop,
+			left = body.offsetLeft;
+
+		if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
+			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+		}
+
+		return { top: top, left: left };
+	},
+
+	setOffset: function( elem, options, i ) {
+		var position = jQuery.css( elem, "position" );
+
+		// set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		var curElem = jQuery( elem ),
+			curOffset = curElem.offset(),
+			curCSSTop = jQuery.css( elem, "top" ),
+			curCSSLeft = jQuery.css( elem, "left" ),
+			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+			props = {}, curPosition = {}, curTop, curLeft;
+
+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+
+jQuery.fn.extend({
+
+	position: function() {
+		if ( !this[0] ) {
+			return;
+		}
+
+		var elem = this[0],
+
+		// Get *real* offsetParent
+		offsetParent = this.offsetParent(),
+
+		// Get correct offsets
+		offset       = this.offset(),
+		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+		// Subtract element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+		// Add offsetParent borders
+		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+		// Subtract the two offsets
+		return {
+			top:  offset.top  - parentOffset.top,
+			left: offset.left - parentOffset.left
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || document.body;
+			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent || document.body;
+		});
+	}
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+	var top = /Y/.test( prop );
+
+	jQuery.fn[ method ] = function( val ) {
+		return jQuery.access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? (prop in win) ? win[ prop ] :
+					win.document.documentElement[ method ] :
+					elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : jQuery( win ).scrollLeft(),
+					 top ? val : jQuery( win ).scrollTop()
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length, null );
+	};
+});
+
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+		// margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return jQuery.access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+					// isn't a whole lot we can do. See pull request at this URL for discussion:
+					// https://github.com/jquery/jquery/pull/764
+					return elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, value, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable, null );
+		};
+	});
+});
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+// Expose jQuery as an AMD module, but only for AMD loaders that
+// understand the issues with loading multiple versions of jQuery
+// in a page that all might call define(). The loader will indicate
+// they have special allowances for multiple jQuery versions by
+// specifying define.amd.jQuery = true. Register as a named module,
+// since jQuery can be concatenated with other files that may use define,
+// but not use a proper concatenation script that understands anonymous
+// AMD modules. A named AMD is safest and most robust way to register.
+// Lowercase jquery is used because AMD module names are derived from
+// file names, and jQuery is normally delivered in a lowercase file name.
+// Do this after creating the global so that if an AMD module wants to call
+// noConflict to hide this version of jQuery, it will work.
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+	define( "jquery", [], function () { return jQuery; } );
+}
+
+})( window );
diff --git a/le-tour/js/jquery.tinyscrollbar.js b/le-tour/js/jquery.tinyscrollbar.js
new file mode 100644
index 0000000000000000000000000000000000000000..e513f861a43cb461a0a4af013821c8d2a36fab42
--- /dev/null
+++ b/le-tour/js/jquery.tinyscrollbar.js
@@ -0,0 +1,216 @@
+/*
+ * Tiny Scrollbar
+ * http://www.baijs.nl/tinyscrollbar/
+ *
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.opensource.org/licenses/gpl-2.0.php
+ *
+ * Date: 13 / 08 / 2012
+ * @version 1.81
+ * @author Maarten Baijs
+ *
+ */
+;( function( $ ) 
+{
+    $.tiny = $.tiny || { };
+
+    $.tiny.scrollbar = {
+        options: {
+                axis         : 'y'    // vertical or horizontal scrollbar? ( x || y ).
+            ,   wheel        : 40     // how many pixels must the mouswheel scroll at a time.
+            ,   scroll       : true   // enable or disable the mousewheel.
+            ,   lockscroll   : true   // return scrollwheel to browser if there is no more content.
+            ,   size         : 'auto' // set the size of the scrollbar to auto or a fixed number.
+            ,   sizethumb    : 'auto' // set the size of the thumb to auto or a fixed number.
+            ,   invertscroll : false  // Enable mobile invert style scrolling
+        }
+    };
+
+    $.fn.tinyscrollbar = function( params )
+    {
+        var options = $.extend( {}, $.tiny.scrollbar.options, params );
+        
+        this.each( function()
+        { 
+            $( this ).data('tsb', new Scrollbar( $( this ), options ) ); 
+        });
+
+        return this;
+    };
+
+    $.fn.tinyscrollbar_update = function(sScroll)
+    {
+        return $( this ).data( 'tsb' ).update( sScroll ); 
+    };
+
+    function Scrollbar( root, options )
+    {
+        var oSelf       = this
+        ,   oWrapper    = root
+        ,   oViewport   = { obj: $( '.viewport', root ) }
+        ,   oContent    = { obj: $( '.overview', root ) }
+        ,   oScrollbar  = { obj: $( '.scrollbar', root ) }
+        ,   oTrack      = { obj: $( '.track', oScrollbar.obj ) }
+        ,   oThumb      = { obj: $( '.thumb', oScrollbar.obj ) }
+        ,   sAxis       = options.axis === 'x'
+        ,   sDirection  = sAxis ? 'left' : 'top'
+        ,   sSize       = sAxis ? 'Width' : 'Height'
+        ,   iScroll     = 0
+        ,   iPosition   = { start: 0, now: 0 }
+        ,   iMouse      = {}
+        ,   touchEvents = 'ontouchstart' in document.documentElement
+        ;
+
+        function initialize()
+        {
+            oSelf.update();
+            setEvents();
+
+            return oSelf;
+        }
+
+        this.update = function( sScroll )
+        {
+            oViewport[ options.axis ] = oViewport.obj[0][ 'offset'+ sSize ];
+            oContent[ options.axis ]  = oContent.obj[0][ 'scroll'+ sSize ];
+            oContent.ratio            = oViewport[ options.axis ] / oContent[ options.axis ];
+
+            oScrollbar.obj.toggleClass( 'disable', oContent.ratio >= 1 );
+
+            oTrack[ options.axis ] = options.size === 'auto' ? oViewport[ options.axis ] : options.size;
+            oThumb[ options.axis ] = Math.min( oTrack[ options.axis ], Math.max( 0, ( options.sizethumb === 'auto' ? ( oTrack[ options.axis ] * oContent.ratio ) : options.sizethumb ) ) );
+        
+            oScrollbar.ratio = options.sizethumb === 'auto' ? ( oContent[ options.axis ] / oTrack[ options.axis ] ) : ( oContent[ options.axis ] - oViewport[ options.axis ] ) / ( oTrack[ options.axis ] - oThumb[ options.axis ] );
+            
+            iScroll = ( sScroll === 'relative' && oContent.ratio <= 1 ) ? Math.min( ( oContent[ options.axis ] - oViewport[ options.axis ] ), Math.max( 0, iScroll )) : 0;
+            iScroll = ( sScroll === 'bottom' && oContent.ratio <= 1 ) ? ( oContent[ options.axis ] - oViewport[ options.axis ] ) : isNaN( parseInt( sScroll, 10 ) ) ? iScroll : parseInt( sScroll, 10 );
+            
+            setSize();
+        };
+
+        function setSize()
+        {
+            var sCssSize = sSize.toLowerCase();
+
+            oThumb.obj.css( sDirection, iScroll / oScrollbar.ratio );
+            oContent.obj.css( sDirection, -iScroll );
+            iMouse.start = oThumb.obj.offset()[ sDirection ];
+
+            oScrollbar.obj.css( sCssSize, oTrack[ options.axis ] );
+            oTrack.obj.css( sCssSize, oTrack[ options.axis ] );
+            oThumb.obj.css( sCssSize, oThumb[ options.axis ] );
+        }
+
+        function setEvents()
+        {
+            if( ! touchEvents )
+            {
+                oThumb.obj.bind( 'mousedown', start );
+                oTrack.obj.bind( 'mouseup', drag );
+            }
+            else
+            {
+                oViewport.obj[0].ontouchstart = function( event )
+                {   
+                    if( 1 === event.touches.length )
+                    {
+                        start( event.touches[ 0 ] );
+                        event.stopPropagation();
+                    }
+                };
+            }
+
+            if( options.scroll && window.addEventListener )
+            {
+                oWrapper[0].addEventListener( 'DOMMouseScroll', wheel, false );
+                oWrapper[0].addEventListener( 'mousewheel', wheel, false );
+                oWrapper[0].addEventListener( 'MozMousePixelScroll', function( event ){
+                    event.preventDefault();
+                }, false);
+            }
+            else if( options.scroll )
+            {
+                oWrapper[0].onmousewheel = wheel;
+            }
+        }
+
+        function start( event )
+        {
+            $( "body" ).addClass( "noSelect" );
+
+            var oThumbDir   = parseInt( oThumb.obj.css( sDirection ), 10 );
+            iMouse.start    = sAxis ? event.pageX : event.pageY;
+            iPosition.start = oThumbDir == 'auto' ? 0 : oThumbDir;
+            
+            if( ! touchEvents )
+            {
+                $( document ).bind( 'mousemove', drag );
+                $( document ).bind( 'mouseup', end );
+                oThumb.obj.bind( 'mouseup', end );
+            }
+            else
+            {
+                document.ontouchmove = function( event )
+                {
+                    event.preventDefault();
+                    drag( event.touches[ 0 ] );
+                };
+                document.ontouchend = end;        
+            }
+        }
+
+        function wheel( event )
+        {
+            if( oContent.ratio < 1 )
+            {
+                var oEvent = event || window.event
+                ,   iDelta = oEvent.wheelDelta ? oEvent.wheelDelta / 120 : -oEvent.detail / 3
+                ;
+
+                iScroll -= iDelta * options.wheel;
+                iScroll = Math.min( ( oContent[ options.axis ] - oViewport[ options.axis ] ), Math.max( 0, iScroll ));
+
+                oThumb.obj.css( sDirection, iScroll / oScrollbar.ratio );
+                oContent.obj.css( sDirection, -iScroll );
+
+                if( options.lockscroll || ( iScroll !== ( oContent[ options.axis ] - oViewport[ options.axis ] ) && iScroll !== 0 ) )
+                {
+                    oEvent = $.event.fix( oEvent );
+                    oEvent.preventDefault();
+                }
+            }
+        }
+
+        function drag( event )
+        {
+            if( oContent.ratio < 1 )
+            {
+                if( options.invertscroll && touchEvents )
+                {
+                    iPosition.now = Math.min( ( oTrack[ options.axis ] - oThumb[ options.axis ] ), Math.max( 0, ( iPosition.start + ( iMouse.start - ( sAxis ? event.pageX : event.pageY ) ))));
+                }
+                else
+                {
+                     iPosition.now = Math.min( ( oTrack[ options.axis ] - oThumb[ options.axis ] ), Math.max( 0, ( iPosition.start + ( ( sAxis ? event.pageX : event.pageY ) - iMouse.start))));
+                }
+
+                iScroll = iPosition.now * oScrollbar.ratio;
+                oContent.obj.css( sDirection, -iScroll );
+                oThumb.obj.css( sDirection, iPosition.now );
+            }
+        }
+        
+        function end()
+        {
+            $( "body" ).removeClass( "noSelect" );
+            $( document ).unbind( 'mousemove', drag );
+            $( document ).unbind( 'mouseup', end );
+            oThumb.obj.unbind( 'mouseup', end );
+            document.ontouchmove = document.ontouchend = null;
+        }
+
+        return initialize();
+    }
+
+}(jQuery));
diff --git a/le-tour/js/load.js b/le-tour/js/load.js
new file mode 100644
index 0000000000000000000000000000000000000000..c303451bd00077d199ea7252a99ee13ccf05c01d
--- /dev/null
+++ b/le-tour/js/load.js
@@ -0,0 +1,24 @@
+//increment loading bar
+function load() {
+    setTimeout("$('#ball_g_1').show()", 500);
+    setTimeout("$('#ball_g_2').show();", 1000);
+    setTimeout("$('#ball_g_3').show();", 1500);
+    setTimeout("$('#ball_g_4').show();", 2000);
+    setTimeout("$('#ball_g_5').show();", 2500);
+    setTimeout("loadZero()", 3000);
+    setTimeout("$('#ball_g_1').show();", 3001);
+    setTimeout("$('#ball_g_2').show();", 3500);
+    setTimeout("$('#ball_g_3').show();", 4000);
+    setTimeout("$('#ball_g_4').show();", 4500);
+    setTimeout("$('#ball_g_5').show();", 5000);
+    setTimeout("loadDone()", 5100);
+    setTimeout("initTourGuide()", 5200);
+}
+
+function loadDone() {
+	$('#loading').hide();
+}
+
+function loadZero() {
+    $('#ball_g_1,#ball_g_2,#ball_g_3,#ball_g_4,#ball_g_5').hide();
+}
diff --git a/le-tour/js/main.js b/le-tour/js/main.js
new file mode 100644
index 0000000000000000000000000000000000000000..40dffbbf63e872f02cb5e0a2c64007ba9c255032
--- /dev/null
+++ b/le-tour/js/main.js
@@ -0,0 +1,2 @@
+$(document).ready(function(){ load(); size(); hideAllIcons(); init(); tick(); });
+$(window).resize(function(){ size(); $('#scrollbar1').tinyscrollbar_update();});
diff --git a/le-tour/js/overview.js b/le-tour/js/overview.js
new file mode 100644
index 0000000000000000000000000000000000000000..ee97eb510ceb8c047f9a3da9063d498a757305fa
--- /dev/null
+++ b/le-tour/js/overview.js
@@ -0,0 +1,270 @@
+//opens or closes the overview
+function overView(){
+    subMenuHide();
+    ajuste();
+    var disp = document.getElementById("overview");
+
+    if ( disp.style.display == "block" ){
+        wallpaper.style.zIndex = 0;
+        $('#overview').hide();
+        $('#content-overview').hide();
+        $('#edubar').show();
+        $('#shortcuts').show();
+        $('#shortcut').show();
+        $('#search-control').hide();
+        $('#desktop-change').hide();
+        $('#content-apps').hide();
+        $('#content-search-edu').hide();
+        $('#content-windows').hide();
+    }else{
+        wallpaper.style.zIndex = 8;
+        changeSubMenu("windowOverview");
+        sizeWindows();
+        $('#overview').show();
+        $('#content-overview').show();
+        $('#edubar').hide();
+        $('#shortcuts').hide();
+        $('#shortcut').hide();
+        $('#search-control').show();
+        $('#desktop-change').show();
+        document.getElementById("desktop-change").style.height = window.innerHeight - 200 + 'px';
+    }
+}
+
+//go to window clicked
+function overviewToWindow(id){
+    changeZindex(id);
+    overView();
+}
+
+//change overview menu
+function changeSubMenu(id){
+	ajuste();
+    switch (id) {
+        case "windowOverview":
+        $('#windowOverview').css("background","silver");
+        $('#windowOverview').css("color","black");
+        $('#applications').css("background","transparent");
+        $('#search-edu').css("background","transparent");
+        $('#applications').css("color","silver");
+        $('#search-edu').css("color","silver");
+        $('#sub_applications').hide();
+        $('#sub_search-edu').hide();
+        $('#desktop-change').show();
+        $('#content-apps').hide();
+        $('#content-search-edu').hide();
+        $('#content-windows').show();
+        document.getElementById("search").value="";
+        break;
+    case "applications":
+        $('#applications').css("background","silver");
+        $('#applications').css("color","black");
+        $('#windowOverview').css("background","transparent");
+        $('#search-edu').css("background","transparent");
+        $('#windowOverview').css("color","silver"); 
+        $('#search-edu').css("color","silver");
+        document.getElementById("sub_applications").style.display = 'block';
+        document.getElementById("sub_search-edu").style.display = 'none';
+        $('#desktop-change').hide();
+        $('#content-apps').show();
+        $('#content-search-edu').hide();
+        $('#content-windows').hide();
+        menuLateral("subapp1");
+        break;
+    case "search-edu":
+        $('#search-edu').css("background","silver");
+        $('#search-edu').css("color","black");
+        $('#windowOverview').css("background","transparent"); 
+        $('#applications').css("background","transparent");
+        $('#applications').css("color","silver");
+        $('#windowOverview').css("color","silver");
+        $('#sub_search-edu').show();
+        $('#sub_applications').hide();
+        $('#desktop-change').hide();
+        $('#content-apps').hide();
+        $('#content-search-edu').show();
+        $('#content-windows').hide();
+        document.getElementById("search").value="";
+        break;
+    default:
+         console.log("erro");
+    }
+}
+
+//set color sub-menu applications
+function ajuste(){
+$("span.fontwhite").toggleClass( "fontwhite", 1000, "fontsilver" );
+}
+
+//shows icons by category
+function menuLateral(id){
+    ajuste();
+    hideAllIcons();
+
+    switch (id){
+    case 'subapp1':
+        showAllIcons();
+        $('#subapp1').attr("class", "fontwhite");
+        $('#scrollbar1').tinyscrollbar_update();
+        break;
+    case 'subapp2':
+        $('#subapp2').attr("class", "fontwhite");
+        $('#orca').show();
+        $('#onboard').show();
+        $('#scrollbar1').tinyscrollbar_update();
+        break;
+    case 'subapp3':
+        $('#subapp3').attr("class", "fontwhite");
+        $('#ajuda').show();
+        $('#akonadi').show();
+        $('#arquivos').show();
+        $('#calc').show();
+        $('#printsc').show();
+        $('#contatos').show();
+        $('#txteditor').show();
+        $('#xdiagnose').show();
+        $('#gerenciadorpkgs').show();
+        $('#mapachars').show();
+        $('#terminal').show();
+        $('#unidades').show();
+        $('#xournal').show();
+        $('#scrollbar1').tinyscrollbar_update();
+        break;
+    case 'subapp4':
+        $('#subapp4').attr("class", "fontwhite");
+        $('#kalzium').show();
+        $('#kstars').show();
+        $('#teoriagrafos').show();
+        $('#scrollbar1').tinyscrollbar_update();
+        break;
+    case 'subapp5':
+        $('#subapp5').attr("class", "fontwhite");
+        $('#python').show();
+        $('#scrollbar1').tinyscrollbar_update();
+        break;
+    case 'subapp6':
+        $('#subapp6').attr("class", "fontwhite");
+        $('#geogebra').show();
+        $('#tuxmath').show();
+        $('#blinken').show();
+        $('#kalgebra').show();
+        $('#kanagram').show();
+        $('#kbruch').show();
+        $('#kgeography').show();
+        $('#khangman').show();
+        $('#kig').show();
+        $('#klettres').show();
+        $('#kmplot').show();
+        $('#ktouch').show();
+        $('#kturtle').show();
+        $('#kwordquiz').show();
+        $('#marble').show();
+        $('#tuxpaint').show();
+        $('#step').show();
+        $('#parley').show();
+        $('#scrollbar1').tinyscrollbar_update();
+        break;
+    case 'subapp7':
+        $('#subapp7').attr("class", "fontwhite");
+        $('#alacarte').show();
+        $('#libreimpress').show();
+        $('#librecalc').show();
+        $('#libredraw').show();
+        $('#libreoffice').show();
+        $('#librewriter').show();
+        $('#scrollbar1').tinyscrollbar_update();
+        break;
+    case 'subapp8':
+        $('#subapp8').attr("class", "fontwhite");
+        $('#gnomedesktop').show();
+        $('#transmission').show();
+        $('#nepomuk').show();
+        $('#usbcreator').show();
+        $('#gparted').show();
+        $('#aptoncd').show();
+        $('#synaptic').show();
+        $('#ibus').show();
+        $('#alacarte').show();
+        $('#enteclado').show();
+        $('#openjdk6').show();
+        $('#gwibber').show();
+        $('#testesistema').show();
+        $('#unidades').show();
+        $('#xterm').show();
+        $('#scrollbar1').tinyscrollbar_update();
+        break;
+    case 'subapp9':
+        $('#subapp9').attr("class", "fontwhite");
+        $('#gimp').show();
+        $('#pdfeditor').show();
+        $('#libredraw').show();
+        $('#shotwelle').show();
+        $('#scrollbar1').tinyscrollbar_update();
+        break;
+    case 'subapp10':
+        $('#subapp10').attr("class", "fontwhite");
+        $('#transmission').show();
+        $('#remmina').show();
+        $('#gwibber').show();
+        $('#pidgin').show();
+        $('#firefox').show();
+        $('#scrollbar1').tinyscrollbar_update();
+        break;
+    case 'subapp11':
+        $('#subapp11').attr("class", "fontwhite");
+        $('#batalhanaval').show();
+        $('#ksirk').show();
+        $('#freecell').show();
+        $('#homibatata').show();
+        $('#bomber').show();
+        $('#bovo').show();
+        $('#kajongg').show();
+        $('#kanagram').show();
+        $('#kapman').show();
+        $('#katomic').show();
+        $('#kblackbox').show();
+        $('#kblocks').show();
+        $('#kbounce').show();
+        $('#kbreakout').show();
+        $('#kdiamond').show();
+        $('#fourinline').show();
+        $('#kgold').show();
+        $('#khangman').show();
+        $('#kigo').show();
+        $('#killbots').show();
+        $('#kiriki').show();
+        $('#jumpingcube').show();
+        $('#klickety').show();
+        $('#kmahjongg').show();
+        $('#kmines').show();
+        $('#knetwalk').show();
+        $('#kolf').show();
+        $('#kollision').show();
+        $('#konquest').show();
+        $('#kpatience').show();
+        $('#kreversi').show();
+        $('#visuaisksirk').show();
+        $('#ksnake').show();
+        $('#spaceduel').show();
+        $('#scrollbar1').tinyscrollbar_update();
+        break;
+    case 'subapp12':
+        $('#subapp12').attr("class", "fontwhite");
+        $('#audacity').show();
+        $('#avidemux').show();
+        $('#acidrip').show();
+        $('#brasero').show();
+        $('#gravadorsom').show();
+        $('#vlc').show();
+        $('#rhythmbox').show();
+        $('#scrollbar1').tinyscrollbar_update();
+        break;
+    case 'subapp13':
+        hideAllIcons();
+        $('#subapp13').attr("class", "fontwhite");
+        $('#scrollbar1').tinyscrollbar_update();
+        break;
+    default:
+        console.log("erro");
+    }
+}
diff --git a/le-tour/js/overviewWindows.js b/le-tour/js/overviewWindows.js
new file mode 100644
index 0000000000000000000000000000000000000000..57f24e332c5b21e3eb4d36302e698764c5cea443
--- /dev/null
+++ b/le-tour/js/overviewWindows.js
@@ -0,0 +1,244 @@
+function sizeWindows(){
+    x=0;
+    y=0;
+    $("#nautilusW").css("left","0px");
+    $("#nautilusW").css("margin-left","0px");
+    $("#termW").css("left","0px");
+    $("#termW").css("margin-left","0px");
+    $("#browserW").css("left","0px");
+    $("#browserW").css("margin-left","0px");
+    $("#libreW").css("left","0px");
+    $("#libreW").css("margin-left","0px");
+    
+    if (document.getElementById('browser').style.display == 'block'){
+        x=x+1;
+        y=y+1;
+        $("#browserW").show();
+        selectClassBrowserW();
+    }else{
+        $("#browserW").hide();
+    }
+
+    if (document.getElementById('libre').style.display == 'block'){
+        x=x+1;
+        y=y+2;
+        $("#libreW").show();
+    }else{
+        $("#libreW").hide();
+    }
+
+    if (document.getElementById('nautilus').style.display == 'block'){
+        x=x+1;
+        y=y+4;
+        $("#nautilusW").show();
+    }else{
+        $("#nautilusW").hide();
+    }
+
+    if (document.getElementById('term').style.display == 'block'){
+        x=x+1;
+        y=y+8;
+        $("#termW").show();
+    }else{$("#termW").hide();}
+
+    switch (x) {
+        case 1:
+            auxWidth = window.innerWidth - 450;
+            auxHeight = window.innerHeight - 150;
+            temp = auxWidth - 220 + 'px';
+
+            $("#browserWclose").css("left", temp );
+            $("#libreWclose").css("left", temp );
+            $("#nautilusWclose").css("left", temp );
+            $("#termWclose").css("left", temp );
+
+            $("#browserW").css("left", "0px");
+            $("#libreW").css("left", "0px");
+            $("#nautilusW").css("left", "0px");
+            $("#termW").css("left", "0px");
+
+            auxWidth = auxWidth - 200 + 'px';
+            auxHeight = auxHeight - 100 + 'px';
+
+            $("#browserW").css("width",auxWidth);
+            $("#libreW").css("width",auxWidth);
+            $("#nautilusW").css("width",auxWidth);
+            $("#termW").css("width",auxWidth);
+
+            $("#browserW").css("height",auxHeight);
+            $("#libreW").css("height",auxHeight);
+            $("#nautilusW").css("height",auxHeight);
+            $("#termW").css("height",auxHeight);
+            break;
+
+        case 2:
+            auxWidth = ((window.innerWidth - 450)/2) - 50;
+            auxHeight = ((window.innerHeight - 150)/2) - 50;
+            temp = auxWidth*2 + 'px';
+            $("#browserWclose").css("left", temp);
+            $("#libreWclose").css("left", temp);
+            $("#nautilusWclose").css("left", temp);
+            $("#termWclose").css("left", temp);
+
+            $("#browserWclose").css("margin-left","0px");
+            $("#libreWclose").css("margin-left","0px");
+            $("#nautilusWclose").css("margin-left","0px");
+            $("#termWclose").css("margin-left","0px");
+            temp = auxWidth - 20 + 'px';
+            switch (y) {
+                case 3:
+                    $("#browserWclose").css("left", temp );
+                    break;
+                case 5:
+                    $("#browserWclose").css("left", temp );
+                    break;
+                case 6:
+                    $("#libreWclose").css("left", temp );
+                    break;
+                case 9:
+                    $("#browserWclose").css("left", temp );
+                    break;
+                case 10:
+                    $("#libreWclose").css("left", temp );
+                    break;
+                case 12:
+                    $("#nautilusWclose").css("left", temp );
+                    break;
+            }
+
+            auxWidth = auxWidth + 'px';
+            auxHeight = auxHeight + 'px';
+            $("#browserW").css("width",auxWidth);
+            $("#libreW").css("width",auxWidth);
+            $("#nautilusW").css("width",auxWidth);
+            $("#termW").css("width",auxWidth);
+
+            $("#browserW").css("height",auxHeight);
+            $("#libreW").css("height",auxHeight);
+            $("#nautilusW").css("height",auxHeight);
+            $("#termW").css("height",auxHeight);
+
+            $("#browserWclose").css("top","0px");
+            $("#libreWclose").css("top","0px");
+            $("#nautilusWclose").css("top","0px");
+            $("#termWclose").css("top","0px");
+            break;
+
+        case 3:
+            auxWidth = ((window.innerWidth - 450)/2) - 50;
+            auxHeight = ((window.innerHeight - 150)/2) - 50;
+
+            temp = auxWidth - 20 + 'px';
+            temp2 = auxHeight + 20 + 'px';
+            temp3 = auxWidth*2 + 'px';
+            temp4 = window.innerWidth/2 + 'px';
+            switch (y) {
+                case 7:
+                    $("#libreWclose").css("top","0px");
+                    $("#browserWclose").css("left",temp);
+                    $("#libreWclose").css("left",temp3);
+                    $("#libreW").css("left","5px");
+                    $("#nautilusWclose").css("left","45px");
+                    $("#nautilusWclose").css("margin-left",temp4);
+                    $("#nautilusWclose").css("top",temp2);
+                    break;
+                case 13:
+                    $("#browserWclose").css("left", temp );
+                    $("#nautilusWclose").css("left", temp3 );
+                    $("#nautilusW").css("left", "5px");
+                    $("#termWclose").css("left", "45px");
+                    $("#termWclose").css("margin-left", temp4 );
+                    $("#termWclose").css("top", temp2 );
+                    break;
+                case 14:
+                    $("#nautilusWclose").css("top","0px");
+                    $("#libreWclose").css("left", temp);
+                    $("#nautilusWclose").css("left", temp3);
+                    $("#termWclose").css("left", "45px");
+                    $("#termWclose").css("margin-left", temp4);
+                    $("#termWclose").css("top",temp2);
+                    break;
+            }
+
+            auxWidth = auxWidth + 'px';
+            auxHeight =  auxHeight + 'px';
+            $("#browserW").css("width",auxWidth);
+            $("#libreW").css("width",auxWidth);
+            $("#nautilusW").css("width",auxWidth);
+            $("#termW").css("width",auxWidth);
+
+            $("#browserW").css("height",auxHeight);
+            $("#libreW").css("height",auxHeight);
+            $("#nautilusW").css("height",auxHeight);
+            $("#termW").css("height",auxHeight);
+
+            if (y == 7){
+                temp = '-' + (((window.innerWidth - 450)/2) + 500)/2+ 'px';
+                $("#nautilusW").css("left", temp);
+                $("#nautilusW").css("margin-left",temp4);
+            }else{
+                if (y > 7){
+                    temp = '-' + (((window.innerWidth - 450)/2) + 500)/2+ 'px';
+                    $("#termW").css("left", temp);
+                    $("#termW").css("margin-left",temp4);
+                }
+            }
+            break;
+
+        case 4:
+            auxWidth = ((window.innerWidth - 450)/2) - 70;
+            auxHeight = ((window.innerHeight - 150)/2) - 50;
+            tempWidth = ((window.innerWidth - 450)/2) - 70 + 'px';
+
+            temp = auxWidth*2 + 40 + 'px';
+            temp2 = auxHeight + 20 + 'px';
+
+            $("#browserWclose").css("left", tempWidth);
+            $("#libreWclose").css("left", temp);
+            $("#nautilusWclose").css("left", tempWidth);
+            $("#nautilusWclose").css("margin-left", "0px");
+            $("#termWclose").css("left", temp);
+            $("#nautilusWclose").css("top", temp2);
+            $("#termWclose").css("top", temp2);
+
+            auxWidth = auxWidth + 20 + 'px';
+            auxHeight = auxHeight + 'px';
+            $("#browserW").css("width",auxWidth);
+            $("#libreW").css("width",auxWidth);
+            $("#browserW").css("left","10px");
+            $("#libreW").css("left","10px");
+            $("#nautilusW").css("width",auxWidth);
+            $("#termW").css("width",auxWidth);
+
+            $("#browserW").css("height",auxHeight);
+            $("#libreW").css("height",auxHeight);
+            $("#nautilusW").css("height",auxHeight);
+            $("#termW").css("height",auxHeight);
+            break;
+    }
+}
+
+//close window when close button clicked
+function closeWindow(id) {
+
+    $('#' + id + "Wclose").hide();
+    $('#' + id).hide();
+
+    subMenuHide();
+    sizeWindows();
+}
+
+//select which tab show in the browser window on overview
+function selectClassBrowserW() {
+
+    var tabs = ['dompub', 'objedu', 'porprof', 'tvesc', 'firefox'];
+    // TODO: give a better name to this elements, removing the '+1' from the
+    // id construction
+    for (var i=0; i < tabs.length; i++) {
+        var tab = tabs[i];
+        if ($('#' + tab + '1').css('z-index') == 2) {
+            $("#browserW").attr("class", tab);
+            break;
+        }
+    }
+}
diff --git a/le-tour/js/overviewWindows.js~ b/le-tour/js/overviewWindows.js~
new file mode 100644
index 0000000000000000000000000000000000000000..14c2c1fa43e339fae51a4b51659072a3a5e28e29
--- /dev/null
+++ b/le-tour/js/overviewWindows.js~
@@ -0,0 +1,248 @@
+function sizeWindows(){
+    x=0;
+    y=0;
+    $("#nautilusW").css("left","0px");
+    $("#nautilusW").css("margin-left","0px");
+    $("#termW").css("left","0px");
+    $("#termW").css("margin-left","0px");
+    $("#browserW").css("left","0px");
+    $("#browserW").css("margin-left","0px");
+    $("#libreW").css("left","0px");
+    $("#libreW").css("margin-left","0px");
+    
+        if (document.getElementById('browser').style.display == 'block'){
+         x=x+1;
+         y=y+1;
+        }
+    if (document.getElementById('browser').style.display == 'block'){
+        x=x+1;
+        y=y+1;
+        $("#browserW").show();
+        selectClassBrowserW();
+    }else{
+        $("#browserW").hide();
+    }
+
+    if (document.getElementById('libre').style.display == 'block'){
+        x=x+1;
+        y=y+2;
+        $("#libreW").show();
+    }else{
+        $("#libreW").hide();
+    }
+
+    if (document.getElementById('nautilus').style.display == 'block'){
+        x=x+1;
+        y=y+4;
+        $("#nautilusW").show();
+    }else{
+        $("#nautilusW").hide();
+    }
+
+    if (document.getElementById('term').style.display == 'block'){
+        x=x+1;
+        y=y+8;
+        $("#termW").show();
+    }else{$("#termW").hide();}
+
+    switch (x) {
+        case 1:
+            auxWidth = window.innerWidth - 450;
+            auxHeight = window.innerHeight - 150;
+            temp = auxWidth - 220 + 'px';
+
+            $("#browserWclose").css("left", temp );
+            $("#libreWclose").css("left", temp );
+            $("#nautilusWclose").css("left", temp );
+            $("#termWclose").css("left", temp );
+
+            $("#browserW").css("left", "0px");
+            $("#libreW").css("left", "0px");
+            $("#nautilusW").css("left", "0px");
+            $("#termW").css("left", "0px");
+
+            auxWidth = auxWidth - 200 + 'px';
+            auxHeight = auxHeight - 100 + 'px';
+
+            $("#browserW").css("width",auxWidth);
+            $("#libreW").css("width",auxWidth);
+            $("#nautilusW").css("width",auxWidth);
+            $("#termW").css("width",auxWidth);
+
+            $("#browserW").css("height",auxHeight);
+            $("#libreW").css("height",auxHeight);
+            $("#nautilusW").css("height",auxHeight);
+            $("#termW").css("height",auxHeight);
+            break;
+
+        case 2:
+            auxWidth = ((window.innerWidth - 450)/2) - 50;
+            auxHeight = ((window.innerHeight - 150)/2) - 50;
+            temp = auxWidth*2 + 'px';
+            $("#browserWclose").css("left", temp);
+            $("#libreWclose").css("left", temp);
+            $("#nautilusWclose").css("left", temp);
+            $("#termWclose").css("left", temp);
+
+            $("#browserWclose").css("margin-left","0px");
+            $("#libreWclose").css("margin-left","0px");
+            $("#nautilusWclose").css("margin-left","0px");
+            $("#termWclose").css("margin-left","0px");
+            temp = auxWidth - 20 + 'px';
+            switch (y) {
+                case 3:
+                    $("#browserWclose").css("left", temp );
+                    break;
+                case 5:
+                    $("#browserWclose").css("left", temp );
+                    break;
+                case 6:
+                    $("#libreWclose").css("left", temp );
+                    break;
+                case 9:
+                    $("#browserWclose").css("left", temp );
+                    break;
+                case 10:
+                    $("#libreWclose").css("left", temp );
+                    break;
+                case 12:
+                    $("#nautilusWclose").css("left", temp );
+                    break;
+            }
+
+            auxWidth = auxWidth + 'px';
+            auxHeight = auxHeight + 'px';
+            $("#browserW").css("width",auxWidth);
+            $("#libreW").css("width",auxWidth);
+            $("#nautilusW").css("width",auxWidth);
+            $("#termW").css("width",auxWidth);
+
+            $("#browserW").css("height",auxHeight);
+            $("#libreW").css("height",auxHeight);
+            $("#nautilusW").css("height",auxHeight);
+            $("#termW").css("height",auxHeight);
+
+            $("#browserWclose").css("top","0px");
+            $("#libreWclose").css("top","0px");
+            $("#nautilusWclose").css("top","0px");
+            $("#termWclose").css("top","0px");
+            break;
+
+        case 3:
+            auxWidth = ((window.innerWidth - 450)/2) - 50;
+            auxHeight = ((window.innerHeight - 150)/2) - 50;
+
+            temp = auxWidth - 20 + 'px';
+            temp2 = auxHeight + 20 + 'px';
+            temp3 = auxWidth*2 + 'px';
+            temp4 = window.innerWidth/2 + 'px';
+            switch (y) {
+                case 7:
+                    $("#libreWclose").css("top","0px");
+                    $("#browserWclose").css("left",temp);
+                    $("#libreWclose").css("left",temp3);
+                    $("#libreW").css("left","5px");
+                    $("#nautilusWclose").css("left","45px");
+                    $("#nautilusWclose").css("margin-left",temp4);
+                    $("#nautilusWclose").css("top",temp2);
+                    break;
+                case 13:
+                    $("#browserWclose").css("left", temp );
+                    $("#nautilusWclose").css("left", temp3 );
+                    $("#nautilusW").css("left", "5px");
+                    $("#termWclose").css("left", "45px");
+                    $("#termWclose").css("margin-left", temp4 );
+                    $("#termWclose").css("top", temp2 );
+                    break;
+                case 14:
+                    $("#nautilusWclose").css("top","0px");
+                    $("#libreWclose").css("left", temp);
+                    $("#nautilusWclose").css("left", temp3);
+                    $("#termWclose").css("left", "45px");
+                    $("#termWclose").css("margin-left", temp4);
+                    $("#termWclose").css("top",temp2);
+                    break;
+            }
+
+            auxWidth = auxWidth + 'px';
+            auxHeight =  auxHeight + 'px';
+            $("#browserW").css("width",auxWidth);
+            $("#libreW").css("width",auxWidth);
+            $("#nautilusW").css("width",auxWidth);
+            $("#termW").css("width",auxWidth);
+
+            $("#browserW").css("height",auxHeight);
+            $("#libreW").css("height",auxHeight);
+            $("#nautilusW").css("height",auxHeight);
+            $("#termW").css("height",auxHeight);
+
+            if (y == 7){
+                temp = '-' + (((window.innerWidth - 450)/2) + 500)/2+ 'px';
+                $("#nautilusW").css("left", temp);
+                $("#nautilusW").css("margin-left",temp4);
+            }else{
+                if (y > 7){
+                    temp = '-' + (((window.innerWidth - 450)/2) + 500)/2+ 'px';
+                    $("#termW").css("left", temp);
+                    $("#termW").css("margin-left",temp4);
+                }
+            }
+            break;
+
+        case 4:
+            auxWidth = ((window.innerWidth - 450)/2) - 70;
+            auxHeight = ((window.innerHeight - 150)/2) - 50;
+            tempWidth = ((window.innerWidth - 450)/2) - 70 + 'px';
+
+            temp = auxWidth*2 + 40 + 'px';
+            temp2 = auxHeight + 20 + 'px';
+
+            $("#browserWclose").css("left", tempWidth);
+            $("#libreWclose").css("left", temp);
+            $("#nautilusWclose").css("left", tempWidth);
+            $("#nautilusWclose").css("margin-left", "0px");
+            $("#termWclose").css("left", temp);
+            $("#nautilusWclose").css("top", temp2);
+            $("#termWclose").css("top", temp2);
+
+            auxWidth = auxWidth + 20 + 'px';
+            auxHeight = auxHeight + 'px';
+            $("#browserW").css("width",auxWidth);
+            $("#libreW").css("width",auxWidth);
+            $("#browserW").css("left","10px");
+            $("#libreW").css("left","10px");
+            $("#nautilusW").css("width",auxWidth);
+            $("#termW").css("width",auxWidth);
+
+            $("#browserW").css("height",auxHeight);
+            $("#libreW").css("height",auxHeight);
+            $("#nautilusW").css("height",auxHeight);
+            $("#termW").css("height",auxHeight);
+            break;
+    }
+}
+
+//close window when close button clicked
+function closeWindow(id) {
+
+    $('#' + id + "Wclose").hide();
+    $('#' + id).hide();
+
+    subMenuHide();
+    sizeWindows();
+}
+
+//select which tab show in the browser window on overview
+function selectClassBrowserW() {
+
+    var tabs = ['dompub', 'objedu', 'porprof', 'tvesc', 'firefox'];
+    // TODO: give a better name to this elements, removing the '+1' from the
+    // id construction
+    for (var i=0; i < tabs.length; i++) {
+        var tab = tabs[i];
+        if ($('#' + tab + '1').css('z-index') == 2) {
+            $("#browserW").attr("class", tab);
+            break;
+        }
+    }
+}
diff --git a/le-tour/js/search.js b/le-tour/js/search.js
new file mode 100755
index 0000000000000000000000000000000000000000..94c67531d293caa1a3407f4b033130db53f4edc7
--- /dev/null
+++ b/le-tour/js/search.js
@@ -0,0 +1,469 @@
+function hideAllIcons() {
+    $('.icons').hide();
+}
+
+function showAllIcons() {
+    $('.icons').show();
+}
+
+function searchApp (event){
+    changeSubMenu('applications');
+    re = event.target.value; //entrada do usuario
+    hideAllIcons();
+
+    Leitordetelaorca = String("leitor de tela orca");
+    Onboard = String("onboard");
+    Ajuda = String("ajuda");
+    Akonaditray = String("Akonaditray");
+    Arquivos = String("arquivos documentos");
+    Calculadora = String("calculadora");
+    Capturadetela = String("captura de tela");
+    Contatos = String("contatos");
+    Copiadeseguranca = String("cópia de segurança");
+    Editordetexto = String("editor de texto (Gedit)");
+    Gerenciadordepacotes = String("gerenciador de pacotes");
+    Mapadecaracteres = String("mapa de caracteres");
+    Terminal = String("terminal");
+    Utilitariodeunidades = String("utilitario de unidades");
+    Xdiagnose = String("xdiagnose");
+    Xournal = String("Xournal");
+    Kalzium = String("Kalzium");
+    Kstars = String("kstars");
+    TeoriadosgrafosdeRocs = String("Teoria dos grafos de Rocs");
+    Squeak = String("Squeak");
+    Python = String("python");
+    Blinken = String("Blinken");
+    GeoGebra = String("GeoGebra");
+    Squeak = String("Squeak");
+    TuxMath = String("TuxMath");
+    TuxPaint = String("Tux Paint");
+    KAlgebra = String("KAlgebra");
+    Kanagram = String("Kanagram");
+    KBruch = String("KBruch");
+    KGeography = String("KGeography");
+    KHangMan = String("KHangMan");
+    Kig = String("Kig");
+    KLettres = String("KLettres");
+    KmPlot = String("KmPlot");
+    KTouch = String("KTouch");
+    KTurtle = String("KTurtle");
+    KWordQuiz = String("KWordQuiz");
+    MapaMundi = String("Mapa Mundi (Marble)");
+    SimuladordeFisicainterativo = String("Simulador de Fisica interativo (Step)");
+    Treinadordevocabulario = String("Treinador de vocabulario (Parley)");
+    LibreOffice = String("LibreOffice");
+    LibreOfficeCalc = String("LibreOffice Calc");
+    LibreOfficeDraw = String("LibreOffice Draw");
+    LibreOfficeImpress = String("LibreOffice Impress");
+    LibreOfficeMath = String("LibreOffice Math");
+    LibreOfficeWriter = String("LibreOffice Writer");
+    Visualizadordedocumentos = String("visualizador de documentos");
+    GerenciadordeProjetosPlanner = String("Gerenciador de Projetos - Planner");
+    Criadordediscodeinicializacao = String("criador de disco de inicialização");
+    Ferramentasderede = String("ferramentas de rede");
+    Gerenciadordeatualizacoes = String("gerenciador de atualizações");
+    Testedosistema = String("teste do sistema");
+    AptonCD = String("AptonCD");
+    EditordeparticoesGparted = String("Editor de partições Gparted");
+    GerenciadordepacotesSynaptic = String("Gerenciador de pacotes Synaptic");
+    InstalaroRELEASE = String("Instalar o RELEASE");
+    Aplicativosdesessao = String("aplicativos de sessão");
+    Canaisdesoftware = String("canais de software");
+    Compartilhamentodeareadetrabalho = String("compartilhamento de área de trabalho");
+    Compartilhamentodearquivospessoais = String("compartilhamento de arquivos pessoais");
+    Conexoesderede = String("conexões de rede");
+    Contasdemensagemevoip = String("contas de mensagem e voip");
+    Contasdepublicacao = String("contas de publicação");
+    IcedTeaWebControlPanel = String("IcedTea Web Control Panel");
+    Menuprincipal = String("menu principal");
+    Metododeentradadeteclado = String("método de entrada de teclado");
+    Opcoesdoonboard = String("opções do onboard");
+    OpenJDKJava6policyTool = String("OpenJDK Java 6 policy Tool");
+    Preferenciasdepublicacao = String("preferências de publicação");
+    Seletordesistemasmultimidia = String("seletor de sistemas multimídia");
+    Senhasechaves = String("senhas e chaves");
+    Utilitariosdeunidade = String("utilitários de unidade");
+    Analisadordousodedisco = String("analisador do uso de disco");
+    AptURL = String("aptURL");
+    Canaisdesoftware = String("Canais de software");
+    Configuracoesdosistema = String("configurações do sistema");
+    ControladordeindexacaodearquivosdoNepomuk = String("Controlador de indexação de arquivos do Nepomuk");
+    CopiadesegurancadoNepomuk = String("Cópia de segurança do Nepomuk");
+    Criadordecdedvd = String("criador de cd e dvd");
+    Editordeconfiguracoes = String("Editor de configurações");
+    Estatisticasdeenergia = String("estatísticas de energia");
+    GLXDock = String("GLX-Dock (Cairo-dock com OpenGL)");
+    IBus = String("IBus");
+    LEedubar = String("LE-edubar");
+    LEedubar= String("LE-edubar (Sem OpenGL)");
+    Monitordosistema = String("monitor do sistema");
+    Painel = String("painel");
+    Reactivehplaserjet = String("reactive hp laser jet");
+    Seletordesistemasmultimidia = String("Seletor de sistemas multimídia");
+    UXTerm = String("UXTerm");
+    Visualizadordearquivosdelog = String("visualizador de arquivos de log");
+    XTerm = String("XTerm");
+    Digitalizadorsimples = String("digitalizador simples");
+    EditordeImagens = String("editor de imagens gimp");
+    LibreOfficeDraw = String("LibreOffice Draw");
+    Organizadordefotosshotwell = String("organizador de fotos shotwell");
+    PDFEditor = String("PDF Editor pdf");
+    Visualizadordefotosshotwell = String("visualizador de fotos shotwell");
+    Visuallizadordeimagens = String("visuallizador de imagens");
+    Visualizadordedocumentos = String("Visualizador de documentos - evince");
+    XSaneimagescanningprogram = String("XSane image scanning program - xsane");
+    ClienteBitTorrenttransmission = String("cliente bittorrent transmission");
+    Clientedeareadetrabalhoremotaremmina = String("cliente de area de trabalho remota remmina");
+    Clientedeemailthunderbird = String("cliente de e-mail thunderbird");
+    Clientederedessociaisgwibber = String("cliente de redes sociais gwibber");
+    Compartilhamentodaareadetrabalho = String("compartilhamento da area de trabalho");
+    IcedTeaJavaWebStart = String("icedtea java web start");
+    Navegadorwebfirefox = String("firefox internet");
+    MensageirodaInternetPidgin = String("mensageiro da internet pidgin");
+    Acao = String("ação");
+    Arcade = String("arcade");
+    Jogodebombardeiro = String("jogo de bombardeiro (bomber)");
+    Kapman = String("Kapman");
+    KBlocks = String("KBlocks");
+    KBounce = String("KBounce");
+    KBreakOut = String("KBreakOut");
+    KGoldrunner = String("KGoldrunner");
+    Kolf = String("Kolf");
+    Kollision = String("Kollision");
+    KSnake = String("KSnake");
+    KSnakeDuel = String("KSnakeDuel");
+    KSpaceDuel = String("KSpaceDuel");
+    Aventura = String("aventura");
+    Blocoscaindo = String("blocos caindo");
+    Criancas = String("crianças");
+    Esportes = String("esportes");
+    Estrategia = String("estratégia");
+    BatalhaNaval = String("Batalha Naval");
+    EditordevisuaisdoKsirK = String("Editor de visuais do KsirK");
+    KAtomic = String("KAtomic");
+    Killbots = String("Killbots");
+    KJumpingCube = String("KJumpingCube");
+    Klickety = String("Klickety");
+    KMines = String("KMines");
+    KNetWalk = String("KNetWalk");
+    KolorLines = String("Kolor Lines");
+    Konquest = String("Konquest");
+    KsirK = String("KsirK");
+    SameGame = String("SameGame");
+    JogonoestiloReversi = String("Jogo no estilo Reversi (Bovo)");
+    Kajongg = String("Kajongg");
+    KBlackBox = String("KBlackBox");
+    KFourInLine = String("KFourInLine");
+    Kigo = String("Kigo");
+    Kiriki = String("Kiriki");
+    KMahjongg = String("KMahjongg");
+    KReversi = String("KReversi");
+    KSquares = String("KSquares");
+    Mahjongg = String("Mahjongg");
+    ShisenSho = String("Shisen-Sho");
+    Blinken = String("Blinken");
+    Freecell = String("Freecell");
+    Mahjongg = String("Mahjongg");
+    Minas = String("Minas");
+    Paciencia = String("Paciência");
+    Sudoku = String("Sudoku");
+    HomemBatata = String("homem batata");
+    KDiamond = String("KDiamond");
+    Kanagram = String("Kanagram");
+    KHangMan = String("KHangMan");
+    KPatience = String("KPatience");
+    KSudoku = String("KSudoku");
+    Kubrick = String("Kubrick");
+    LSkat = String("LSkat");
+    Palapeli = String("Palapeli");
+    AcidRipDVDRipper = String("acidrip dvd ripper");
+    Audacity = String("audacity");
+    Avidemux = String("avidemux");
+    Gravadordediscobrasero = String("gravador de disco brasero");
+    Gravadordesom = String("gravador de som");
+    Reprodutordefilmes = String("reprodutor de filmes");
+    Reprodutordemusicasrhythmbox = String("reprodutor de musicas rhythmbox");
+    Ubuntuonemusicstore = String("ubuntu one music store");
+    Brasero = String("brasero");
+    Gravadordesom = String("gravador de som");
+    ReprodutordeFilmes = String("reprodutor de Filmes");
+    Reprodutordemidias = String("reprodutor de mídias - VLC");
+    ReprodutordemusicasRythmbox = String("reprodutor de musicas - rythmbox");
+    Acessoaochaveiro = String("acesso ao chaveiro");
+    Assistentedecontas = String("assistente de contas");
+    Compiz = String("compiz");
+    Configuracaobluetooth = String("configuração do dispositivo bluetooth");
+    Fontviewer = String("font viewer");
+    Informarumproblema = String("informar um problema");
+    KMailService = String("KMailService");
+    KTelnetService = String("KTelnetService");
+    Metacity = String("metacity");
+    Montadordearquivo = String("montador de arquivo");
+    OpenJDKJava6Runtime = String("OpenJDK Java 6 Runtime");
+    Perguntadeexecucaoautomatica = String("pergunta de execução automatica");
+    Preferenciasdasextensoesdognomeshell = String("preferências preferencias das extensões extensoes do gnome shell");
+    Rede = String("rede");
+    Transferenciabluetooth = String("transferência transferencia bluetooth");
+    Viewfile = String("view file");
+    Windowmanager = String("window manager");
+
+    if(event.target.value == ""){
+        showAllIcons();
+    }else{
+        if(Clientederedessociaisgwibber.lastIndexOf(re) != -1)
+             $('#gwibber').show();
+        if(Compartilhamentodaareadetrabalho.lastIndexOf(re) != -1)
+             $('#gnomedesktop').show();
+        if(Navegadorwebfirefox.lastIndexOf(re) != -1)
+             $('#firefox').show();
+        if(MensageirodaInternetPidgin.lastIndexOf(re) != -1)
+             $('#pidgin').show();
+        if(Jogodebombardeiro.lastIndexOf(re) != -1)
+             $('#bomber').show();
+        if(Kapman.lastIndexOf(re) != -1)
+             $('#kapman').show();
+        if(KBlocks.lastIndexOf(re) != -1)
+             $('#kblocks').show();
+        if(KBounce.lastIndexOf(re) != -1)
+             $('#kbounce').show();
+        if(KBreakOut.lastIndexOf(re) != -1)
+             $('#kbreakout').show();
+        if(KGoldrunner.lastIndexOf(re) != -1)
+             $('#kgold').show();
+        if(Kolf.lastIndexOf(re) != -1)
+             $('#kolf').show();
+        if(Kollision.lastIndexOf(re) != -1)
+             $('#kollision').show();
+        if(KSnake.lastIndexOf(re) != -1)
+             $('#ksnake').show();
+        if(KSpaceDuel.lastIndexOf(re) != -1)
+             $('#spaceduel').show();
+        if(BatalhaNaval.lastIndexOf(re) != -1)
+             $('#batalhanaval').show();
+        if(EditordevisuaisdoKsirK.lastIndexOf(re) != -1)
+             $('#ksirk').show();
+        if(SameGame.lastIndexOf(re) != -1)
+             $('#samegame').show();
+        if(KAtomic.lastIndexOf(re) != -1)
+             $('#katomic').show();
+        if(Killbots.lastIndexOf(re) != -1)
+             $('#killbots').show();
+        if(KJumpingCube.lastIndexOf(re) != -1)
+             $('#jumpingcube').show();
+        if(Klickety.lastIndexOf(re) != -1)
+             $('#klickety').show();
+        if(KMines.lastIndexOf(re) != -1)
+             $('#kmines').show();
+        if(KNetWalk.lastIndexOf(re) != -1)
+             $('#knetwalk').show();
+        if(Konquest.lastIndexOf(re) != -1)
+             $('#konquest').show();
+        if(SameGame.lastIndexOf(re) != -1)
+             $('#samegame').show();
+        if(Kajongg.lastIndexOf(re) != -1)
+             $('#kajongg').show();
+        if(KBlackBox.lastIndexOf(re) != -1)
+             $('#kblackbox').show();
+        if(KFourInLine.lastIndexOf(re) != -1)
+             $('#fourinline').show();
+        if(Kigo.lastIndexOf(re) != -1)
+             $('#kigo').show();
+        if(Kiriki.lastIndexOf(re) != -1)
+             $('#kiriki').show();
+        if(KMahjongg.lastIndexOf(re) != -1)
+             $('#kmahjongg').show();
+        if(KReversi.lastIndexOf(re) != -1)
+             $('#kreversi').show();
+        if(KSquares.lastIndexOf(re) != -1)
+             $('#ksquares').show();
+        if(Mahjongg.lastIndexOf(re) != -1)
+             $('#mahjongg').show();
+        if(ShisenSho.lastIndexOf(re) != -1)
+             $('#shisensho').show();
+        if(Blinken.lastIndexOf(re) != -1)
+             $('#blinken').show();
+        if(Freecell.lastIndexOf(re) != -1)
+             $('#freecell').show();
+        if(Paciencia.lastIndexOf(re) != -1)
+             $('#paciencia').show();
+        if(Sudoku.lastIndexOf(re) != -1)
+             $('#sudoku').show();
+        if(HomemBatata.lastIndexOf(re) != -1)
+             $('#homibatata').show();
+        if(KDiamond.lastIndexOf(re) != -1)
+             $('#kdiamond').show();
+        if(Kanagram.lastIndexOf(re) != -1)
+             $('#kanagram').show();
+        if(KHangMan.lastIndexOf(re) != -1)
+             $('#khangman').show();
+        if(KPatience.lastIndexOf(re) != -1)
+             $('#kpatience').show();
+        if(KSudoku.lastIndexOf(re) != -1)
+             $('#ksudoku').show();
+        if(Kubrick.lastIndexOf(re) != -1)
+             $('#kubrick').show();
+        if(LSkat.lastIndexOf(re) != -1)
+             $('#lskat').show();
+        if(Palapeli.lastIndexOf(re) != -1)
+             $('#palapeli').show();
+        if(AcidRipDVDRipper.lastIndexOf(re) != -1)
+             $('#acidrip').show();
+        if(Audacity.lastIndexOf(re) != -1)
+             $('#audacity').show();
+        if(Avidemux.lastIndexOf(re) != -1)
+             $('#avidemux').show();
+        if(Gravadordediscobrasero.lastIndexOf(re) != -1)
+             $('#brasero').show();
+        if(Gravadordesom.lastIndexOf(re) != -1)
+             $('#gravadorsom').show();
+        if(Reprodutordefilmes.lastIndexOf(re) != -1)
+             $('#reprodutfilmes').show();
+        if(Reprodutordemusicasrhythmbox.lastIndexOf(re) != -1)
+             $('#rhythmbox').show();
+        if(Ubuntuonemusicstore.lastIndexOf(re) != -1)
+             $('#ubuntuone').show();
+        if(Brasero.lastIndexOf(re) != -1)
+             $('#brasero').show();
+        if(Configuracaobluetooth.lastIndexOf(re) != -1)
+             $('#bluetooth').show();
+        if(KMailService.lastIndexOf(re) != -1)
+             $('#kmail').show();
+        if(OpenJDKJava6Runtime.lastIndexOf(re) != -1)
+             $('#openjdk6').show();
+        if(Leitordetelaorca.lastIndexOf(re) != -1)
+             $('#orca').show();
+        if(Onboard.lastIndexOf(re) != -1)
+             $('#onboard').show();
+        if(Ajuda.lastIndexOf(re) != -1)
+             $('#ajuda').show();
+        if(Akonaditray.lastIndexOf(re) != -1)
+             $('#akonadi').show();
+        if(Arquivos.lastIndexOf(re) != -1)
+             $('#arquivos').show();
+        if(Calculadora.lastIndexOf(re) != -1)
+             $('#calc').show();
+        if(Capturadetela.lastIndexOf(re) != -1)
+             $('#printsc').show();
+        if(Contatos.lastIndexOf(re) != -1)
+             $('#contatos').show();
+        if(Copiadeseguranca.lastIndexOf(re) != -1)
+             $('#nepomuk').show();
+        if(Editordetexto.lastIndexOf(re) != -1)
+             $('#txteditor').show();
+        if(Gerenciadordepacotes.lastIndexOf(re) != -1)
+             $('#gerenciadorpkgs').show();
+        if(Mapadecaracteres.lastIndexOf(re) != -1)
+             $('#mapachars').show();
+        if(Terminal.lastIndexOf(re) != -1)
+             $('#terminal').show();
+        if(Utilitariodeunidades.lastIndexOf(re) != -1)
+             $('#unidades').show();
+        if(Xdiagnose.lastIndexOf(re) != -1)
+             $('#xdiagnose').show();
+        if(Xournal.lastIndexOf(re) != -1)
+             $('#xournal').show();
+        if(Kalzium.lastIndexOf(re) != -1)
+             $('#kalzium').show();
+        if(Kstars.lastIndexOf(re) != -1)
+             $('#kstars').show();
+        if(TeoriadosgrafosdeRocs.lastIndexOf(re) != -1)
+             $('#teoriagrafos').show();
+        if(Python.lastIndexOf(re) != -1)
+             $('#python').show();
+        if(Blinken.lastIndexOf(re) != -1)
+             $('#blinken').show();
+        if(GeoGebra.lastIndexOf(re) != -1)
+             $('#geogebra').show();
+        if(TuxMath.lastIndexOf(re) != -1)
+             $('#tuxmath').show();
+        if(TuxPaint.lastIndexOf(re) != -1)
+             $('#tuxpaint').show();
+        if(KAlgebra.lastIndexOf(re) != -1)
+             $('#kalgebra').show();
+        if(Kanagram.lastIndexOf(re) != -1)
+             $('#kanagram').show();
+        if(KBruch.lastIndexOf(re) != -1)
+             $('#kbruch').show();
+        if(KGeography.lastIndexOf(re) != -1)
+             $('#kgeography').show();
+        if(KHangMan.lastIndexOf(re) != -1)
+             $('#khangman').show();
+        if(Kig.lastIndexOf(re) != -1)
+             $('#kig').show();
+        if(KLettres.lastIndexOf(re) != -1)
+             $('#klettres').show();
+        if(KmPlot.lastIndexOf(re) != -1)
+             $('#kmplot').show();
+        if(KTouch.lastIndexOf(re) != -1)
+             $('#ktouch').show();
+        if(KTurtle.lastIndexOf(re) != -1)
+             $('#kturtle').show();
+        if(KWordQuiz.lastIndexOf(re) != -1)
+             $('#kwordquiz').show();
+        if(MapaMundi.lastIndexOf(re) != -1)
+             $('#marble').show();
+        if(LibreOffice.lastIndexOf(re) != -1)
+             $('#libreoffice').show();
+        if(LibreOfficeCalc.lastIndexOf(re) != -1)
+             $('#librecalc').show();
+        if(LibreOfficeDraw.lastIndexOf(re) != -1)
+             $('#libredraw').show();
+        if(LibreOfficeImpress.lastIndexOf(re) != -1)
+             $('#libreimpress').show();
+        if(LibreOfficeMath.lastIndexOf(re) != -1)
+             $('#libremath').show();
+        if(LibreOfficeWriter.lastIndexOf(re) != -1)
+             $('#librewriter').show();
+        if(GerenciadordeProjetosPlanner.lastIndexOf(re) != -1)
+             $('#planner').show();
+        if(Ferramentasderede.lastIndexOf(re) != -1)
+             $('#systemnetwork').show();
+        if(Testedosistema.lastIndexOf(re) != -1)
+             $('#testesistema').show();
+        if(AptonCD.lastIndexOf(re) != -1)
+             $('#aptoncd').show();
+        if(EditordeparticoesGparted.lastIndexOf(re) != -1)
+             $('#gparted').show();
+        if(GerenciadordepacotesSynaptic.lastIndexOf(re) != -1)
+             $('#synaptic').show();
+        if(OpenJDKJava6policyTool.lastIndexOf(re) != -1)
+             $('#openjdk6').show();
+        if(Utilitariosdeunidade.lastIndexOf(re) != -1)
+             $('#unidades').show();
+        if(Analisadordousodedisco.lastIndexOf(re) != -1)
+             $('#baobab').show();
+        if(Configuracoesdosistema.lastIndexOf(re) != -1)
+             $('#settings').show();
+        if(ControladordeindexacaodearquivosdoNepomuk.lastIndexOf(re) != -1)
+             $('#nepomuk').show();
+        if(CopiadesegurancadoNepomuk.lastIndexOf(re) != -1)
+             $('#nepomuk').show();
+        if(Criadordecdedvd.lastIndexOf(re) != -1)
+             $('#usbcreator').show();
+        if(Estatisticasdeenergia.lastIndexOf(re) != -1)
+             $('#powerstats').show();
+        if(IBus.lastIndexOf(re) != -1)
+             $('#ibus').show();
+        if(Monitordosistema.lastIndexOf(re) != -1)
+             $('#systemmonitor').show();
+        if(XTerm.lastIndexOf(re) != -1)
+             $('#xterm').show();
+        if(EditordeImagens.lastIndexOf(re) != -1)
+             $('#gimp').show();
+        if(LibreOfficeDraw.lastIndexOf(re) != -1)
+             $('#libredraw').show();
+        if(Organizadordefotosshotwell.lastIndexOf(re) != -1)
+             $('#shotwelle').show();
+        if(PDFEditor.lastIndexOf(re) != -1)
+             $('#pdfeditor').show();
+        if(Visualizadordefotosshotwell.lastIndexOf(re) != -1)
+             $('#shotwelle').show();
+        if(Visualizadordedocumentos.lastIndexOf(re) != -1)
+             $('#xournal').show();
+        if(ClienteBitTorrenttransmission.lastIndexOf(re) != -1)
+             $('#transmission').show();
+        if(Clientedeareadetrabalhoremotaremmina.lastIndexOf(re) != -1)
+             $('#remmina').show();
+        $('#scrollbar1').tinyscrollbar_update();
+    }
+}
diff --git a/le-tour/js/size.js b/le-tour/js/size.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e4f13c10e03e2949fb12f4c114c88dfb989387a
--- /dev/null
+++ b/le-tour/js/size.js
@@ -0,0 +1,46 @@
+//set position of eduabar and shorcuts, size of contents on overview
+function size(){
+
+    var aux = 368;
+    var tam = window.innerHeight;
+    aux = tam - aux;
+
+    if ( aux < 370) {
+        $("#shortcut-background").css("top", "312px");
+        $("#shortcuts").css("top", "328px");
+        $("#edubar").css("top", "50px");
+    }else{
+        tam=tam-350;
+        console.log("else = " + tam);
+        $("#shortcuts").css("top", tam);
+        tam=tam-16;
+        $("#shortcut-background").css("top", tam);
+    }
+
+    temp = window.innerWidth - 450 + 'px';
+    temp2 = window.innerHeight - 180 + 'px';
+    temp4 = window.innerHeight/2 - 96 + 'px';
+    temp5 = window.innerHeight/2 + 97 + 'px';
+    temp6 = window.innerHeight/2 + 'px';
+    tourGuideContainer = window.innerWidth - 140 + 'px';
+    $("#tour-guide .guide-container").css("width", tourGuideContainer);
+    $("#content-apps").css("width", temp);
+    $("#content-apps").css("height", temp2);
+    $("#content-apps").css("top", "120px");
+    $("#content-apps").css("left", "100px");
+    $("#content-apps").css("position", "fixed");
+    $("#content-search-edu").css("width", temp);
+    $("#content-search-edu").css("height", temp2);
+    $("#content-search-edu").css("top", "40%");
+    $("#content-search-edu").css("left", "100px");
+    $("#content-search-edu").css("position", "fixed");
+    $("#content-windows").css("width", temp);
+    $("#content-windows").css("height", temp2);
+    $("#content-windows").css("top", "120px");
+    $("#content-windows").css("left", "100px");
+    $("#content-windows").css("position", "fixed");
+    $("#shortcut-edubar").css("height", temp4);
+    $("#shortcut-shortcuts").css("top", temp5);
+    $("#shortcut-shortcuts").css("height", window.innerHeight/2);
+    sizeContentStep();
+}
diff --git a/le-tour/js/tourguide.js b/le-tour/js/tourguide.js
new file mode 100644
index 0000000000000000000000000000000000000000..f38bf29b965e121fb68f95af0e57636c443365e8
--- /dev/null
+++ b/le-tour/js/tourguide.js
@@ -0,0 +1,51 @@
+steps = new Array ("#step0", "#step1", "#step2", "#step3", "#step4", "#step5", "#step6", "#step7", "#step8", "#step9", "#step10", "#step11", "#step12", "#step13");
+var currentStep = 0;
+function initTourGuide(){
+    $("#tour-guide").show();
+    $("#step0").show();
+    $('#wellcome').show();
+}
+
+function sizeContentStep(){
+    aux = window.innerWidth - 206 + 'px';
+    $("#tour-guide .tour-step").css("width", aux);
+    $(".step-container").css("font-size", "22px" );
+    
+    if ( window.innerWidth < 1202){
+          if ( window.innerWidth >= 1033){
+            $(".step-container").css("font-size", "17px" );
+            $(".step-container").css("line-height", "40px" );
+          }else{
+            $(".step-container").css("font-size", "14px" );
+            $(".step-container").css("line-height", "21px" );
+          }
+    }
+}
+
+function nextStep(){
+        $('#prev-button').show();
+    if (currentStep == 12){
+        $('#next-button').hide();
+        $(steps[currentStep]).hide();
+        currentStep = 13;
+        $(steps[currentStep]).show();
+    }else{
+        $(steps[currentStep]).hide();
+        currentStep = currentStep + 1;
+        $(steps[currentStep]).show();
+    }
+}
+
+function prevStep(){
+        $('#next-button').show();
+    if (currentStep == 1){
+        $('#prev-button').hide();
+        $(steps[currentStep]).hide();
+        currentStep = 0;
+        $(steps[currentStep]).show();
+    }else{
+        $(steps[currentStep]).hide();
+        currentStep = currentStep - 1;
+        $(steps[currentStep]).show();
+    }
+}
diff --git a/le-tour/js/tourguide.js~ b/le-tour/js/tourguide.js~
new file mode 100644
index 0000000000000000000000000000000000000000..0201261ddb8cb9cd60ff1064008542025f52dbae
--- /dev/null
+++ b/le-tour/js/tourguide.js~
@@ -0,0 +1,45 @@
+steps = new Array ("#step0", "#step1", "#step2", "#step3", "#step4", "#step5", "#step6", "#step7", "#step8", "#step9");
+var currentStep = 0;
+function initTourGuide(){
+    $("#tour-guide").show();
+    $("#step0").show();
+    $('#wellcome').show();
+}
+
+function sizeContentStep(){
+    aux = window.innerWidth - 206 + 'px';
+    $("#tour-guide .tour-step").css("width", aux);
+    $(".step-container").css("font-size", "22px" );
+    
+    if ( window.innerWidth < 1202){
+          if ( window.innerWidth >= 1033){
+            $(".step-container").css("font-size", "17px" );
+          }else{
+            $(".step-container").css("font-size", "14px" );
+          }
+    }
+}
+
+function nextStep(){
+    if (currentStep == 9){
+        $(steps[currentStep]).hide();
+        currentStep = 0;
+        $(steps[currentStep]).show();
+    }else{
+        $(steps[currentStep]).hide();
+        currentStep = currentStep + 1;
+        $(steps[currentStep]).show();
+    }
+}
+
+function prevStep(){
+    if (currentStep == 0){
+        $(steps[currentStep]).hide();
+        currentStep = 9;
+        $(steps[currentStep]).show();
+    }else{
+        $(steps[currentStep]).hide();
+        currentStep = currentStep - 1;
+        $(steps[currentStep]).show();
+    }
+}
diff --git a/le-tour/js/windows.js b/le-tour/js/windows.js
new file mode 100644
index 0000000000000000000000000000000000000000..5e3ceb2b93fc46a32348a59d1ae026ed52d1e656
--- /dev/null
+++ b/le-tour/js/windows.js
@@ -0,0 +1,368 @@
+//organizing windows in the desktop
+function changeZindex(id){
+    subMenuHide()
+    layer1 = document.getElementById(id);
+    var zchange;
+
+    if (layer1.style.zIndex == "1"){
+        zchange = "1";
+        if ("2" == document.getElementById("browser").style.zIndex){
+            $("#browser").css("z-index", "1");
+        }
+        if ("2" == document.getElementById("libre").style.zIndex){
+            $("#libre").css("z-index", "1");
+        }
+        if ("2" == document.getElementById("nautilus").style.zIndex){
+            $("#nautilus").css("z-index", "1");
+        }
+        if ("2" == document.getElementById("term").style.zIndex){
+            $("#term").css("z-index", "1");
+        }
+        layer1.style.zIndex = 2;
+    }
+    
+    if (layer1.style.zIndex == "2"){
+        zchange = "2";
+        if ("3" == document.getElementById("browser").style.zIndex){
+            $("#browser").css("z-index", "2");
+        }
+        if ("3" == document.getElementById("libre").style.zIndex){
+            $("#libre").css("z-index", "2");
+        }
+        if ("3" == document.getElementById("nautilus").style.zIndex){
+            $("#nautilus").css("z-index", "2");
+        }
+        if ("3" == document.getElementById("term").style.zIndex){
+            $("#term").css("z-index", "2");
+        }
+        layer1.style.zIndex = 3;
+    }
+    
+    if (layer1.style.zIndex == "3"){
+        zchange = "3";
+        if ("4" == document.getElementById("browser").style.zIndex){
+            $("#browser").css("z-index", "3");
+        }
+        if ("4" == document.getElementById("libre").style.zIndex){
+            $("#libre").css("z-index", "3");
+        }
+        if ("4" == document.getElementById("nautilus").style.zIndex){
+            $("#nautilus").css("z-index", "3");
+        }
+        if ("4" == document.getElementById("term").style.zIndex){
+            $("#term").css("z-index", "3");
+        }
+        layer1.style.zIndex = 4;
+    }
+}
+
+//open window
+function showWindow(id_movedor,id){
+    document.getElementById(id).style.display = 'block';
+    dragdrop(id_movedor,id);
+    changeZindex(id);
+}
+
+//open browser
+function showBrowser(id_movedor,id){
+    switch (id){
+        case 'dompub':
+            $("#dompub1").css("z-index","2");
+            $("#dompub1").show();
+            $("#dompub2").show();
+            $("#dompubX").show();
+            $("#tvesc2").css("top","-1px");
+            $("#dompub2").css("top","0px");
+            $("#objedu2").css("top","-1px");
+            $("#porprof2").css("top","-1px");
+            $("#firefox2").css("top","-1px");
+            $("#objedu1").css("z-index","1");
+            $("#porprof1").css("z-index","1");
+            $("#tvesc1").css("z-index","1");
+            $("#firefox1").css("z-index","1");
+            break;
+        case 'objedu':
+            $("#objedu1").css("z-index","2");
+            $("#objedu1").show();
+            $("#objedu2").show();
+            $("#objeduX").show();
+            $("#tvesc2").css("top","-1px");
+            $("#dompub2").css("top","-1px");
+            $("#objedu2").css("top","0px");
+            $("#porprof2").css("top","-1px");
+            $("#firefox2").css("top","-1px");
+            $("#dompub1").css("z-index","1");
+            $("#porprof1").css("z-index","1");
+            $("#tvesc1").css("z-index","1");
+            $("#firefox1").css("z-index","1");
+            break;
+        case 'porprof':
+            $("#porprof1").css("z-index","2");
+            $("#porprof1").show();
+            $("#porprof2").show();
+            $("#porprofX").show();
+            $("#tvesc2").css("top","-1pxpx");
+            $("#dompub2").css("top","-1px");
+            $("#objedu2").css("top","-1px");
+            $("#porprof2").css("top","0px");
+            $("#firefox2").css("top","-1px");
+            $("#dompub1").css("z-index","1");
+            $("#objedu1").css("z-index","1");
+            $("#tvesc1").css("z-index","1");
+            $("#firefox1").css("z-index","1");
+            break;
+        case 'tvesc':
+            $("#tvesc1").css("z-index","2");
+            $("#tvesc1").show();
+            $("#tvesc2").show();
+            $("#tvescX").show();
+            $("#tvesc2").css("top","0px");
+            $("#dompub2").css("top","-1px");
+            $("#objedu2").css("top","-1px");
+            $("#porprof2").css("top","-1px");
+            $("#firefox2").css("top","-1px");
+            $("#dompub1").css("z-index","1");
+            $("#objedu1").css("z-index","1");
+            $("#porprof1").css("z-index","1");
+            $("#firefox1").css("z-index","1");
+            break;
+        case 'firefox':
+            $("#firefox1").css("z-index","2");
+            $("#firefox1").show();
+            $("#firefox2").show();
+            $("#firefoxX").show();
+            $("#tvesc2").css("top","-1px");
+            $("#dompub2").css("top","-1px");
+            $("#objedu2").css("top","-1px");
+            $("#porprof2").css("top","-1px");
+            $("#firefox2").css("top","0px");
+            $("#dompub1").css("z-index","1");
+            $("#objedu1").css("z-index","1");
+            $("#porprof1").css("z-index","1");
+            $("#tvesc1").css("z-index","1");
+            break;
+    }
+
+    $("#browser").show();
+    dragdrop(id_movedor,"browser");
+    changeZindex("browser");
+}
+
+//exchange tabs according click
+function changeTab(id){
+    switch (id){
+        case 'dompub':
+            $("#dompub1").css("z-index","2");
+            $("#tvesc2").css("top","-1px");
+            $("#dompub2").css("top","0px");
+            $("#objedu2").css("top","-1px");
+            $("#porprof2").css("top","-1px");
+            $("#firefox2").css("top","-1px");
+            $("#objedu1").css("z-index","1");
+            $("#porprof1").css("z-index","1");
+            $("#tvesc1").css("z-index","1");
+            $("#firefox1").css("z-index","1");
+            break;
+        case 'objedu':
+            $("#objedu1").css("z-index","2");
+            $("#tvesc2").css("top","-1px");
+            $("#dompub2").css("top","-1px");
+            $("#objedu2").css("top","0px");
+            $("#porprof2").css("top","-1px");
+            $("#firefox2").css("top","-1px");
+            $("#dompub1").css("z-index","1");
+            $("#porprof1").css("z-index","1");
+            $("#tvesc1").css("z-index","1");
+            $("#firefox1").css("z-index","1");
+            break;
+        case 'porprof':
+            $("#porprof1").css("z-index","2");
+            $("#tvesc2").css("top","-1px");
+            $("#dompub2").css("top","-1px");
+            $("#objedu2").css("top","-1px");
+            $("#porprof2").css("top","0px");
+            $("#firefox2").css("top","-1px");
+            $("#dompub1").css("z-index","1");
+            $("#objedu1").css("z-index","1");
+            $("#tvesc1").css("z-index","1");
+            $("#firefox1").css("z-index","1");
+            break;
+        case 'tvesc':
+            $("#tvesc1").css("z-index","2");
+            $("#tvesc2").css("top","0px");
+            $("#dompub2").css("top","-1px");
+            $("#objedu2").css("top","-1px");
+            $("#porprof2").css("top","-1px");
+            $("#firefox2").css("top","-1px");
+            $("#dompub1").css("z-index","1");
+            $("#objedu1").css("z-index","1");
+            $("#porprof1").css("z-index","1");
+            $("#firefox1").css("z-index","1");
+            break;
+        case 'firefox':
+            $("#firefox1").css("z-index","2");
+            $("#tvesc2").css("top","-1px");
+            $("#dompub2").css("top","-1px");
+            $("#objedu2").css("top","-1px");
+            $("#porprof2").css("top","-1px");
+            $("#firefox2").css("top","0px");
+            $("#dompub1").css("z-index","1");
+            $("#objedu1").css("z-index","1");
+            $("#porprof1").css("z-index","1");
+            $("#tvesc1").css("z-index","1");
+            break;
+    }
+    changeZindex("browser");
+}
+
+//close browser and dependent
+function hideBrowser(){
+    $("#browser").hide();
+    $("#tvesc2").hide();
+    $("#dompub2").hide();
+    $("#objedu2").hide();
+    $("#porprof2").hide();
+    $("#firefox2").hide();
+    $("#tvescX").hide();
+    $("#dompubX").hide();
+    $("#objeduX").hide();
+    $("#porprofX").hide();
+    $("#firefoxX").hide();
+}
+
+//close tap in browser
+function hideTab(id){
+    switch (id){
+        case 'tvesc':
+            $("#tvesc1").hide();
+            $("#tvesc2").hide();
+            $("#tvescX").hide();
+            break;
+        case 'dompub':
+            $("#dompub1").hide();
+            $("#dompub2").hide();
+            $("#dompubX").hide();
+            break;
+        case 'objedu':
+            $("#objedu1").hide();
+            $("#objedu2").hide();
+            $("#objeduX").hide();
+            break;
+        case 'porprof':
+            $("#porprof1").hide();
+            $("#porprof2").hide();
+            $("#porprofX").hide();
+            break;
+        case 'firefox':
+            $("#firefox1").hide();
+            $("#firefox2").hide();
+            $("#firefoxX").hide();
+            break;
+    }
+    nextTab();
+    closeBrowser();
+}
+
+//close tap if all tab close
+function closeBrowser(){
+    var testTabs = ["#tvesc2", "#dompub2", "#objedu2", "#porprof2", "#firefox2"];
+    var close = true;
+
+    for (var i=0; i<testTabs.length; i++){
+        if ($(testTabs[i]).is(":visible")){
+            close = false;
+        }
+    }
+
+    if (close){
+        hideBrowser();
+    }
+}
+
+//select tab show after tab close
+function nextTab(){	
+    if (document.getElementById('dompub2').style.display == 'block'){
+    changeTab('dompub');
+    }else{
+        if (document.getElementById('objedu2').style.display == 'block'){
+        changeTab('objedu');
+        }else{
+            if (document.getElementById('porprof2').style.display == 'block'){
+            changeTab('porprof');
+            }else{
+                if (document.getElementById('tvesc2').style.display == 'block'){
+                changeTab('tvesc');
+                }else{
+                    if (document.getElementById('firefox2').style.display == 'block'){
+                    changeTab('firefox');
+                    }
+                }
+            }
+        }
+    }
+}
+
+//DRAGDROP-2
+//by tmferreira - http://www.webly.com.br/tutorial/javascript-e-ajax/7045/drag-and-drop.htm
+
+var objSelecionado = null;
+var mouseOffset = null;
+function addEvent(obj, evType, fn){ //Função adaptada da original de Christian Heilmann, em http://www.onlinetools.org/articles/unobtrusivejavascript/chapter4.html
+if (typeof obj == "string"){
+if (null == (obj = document.getElementById(obj))){
+throw new Error("Elemento HTML não encontrado. Não foi possível adicionar o evento.");
+}
+}
+if (obj.attachEvent){
+return obj.attachEvent(("on" + evType), fn);
+} else if (obj.addEventListener){
+return obj.addEventListener(evType, fn, true);
+} else {
+throw new Error("Seu browser não suporta adição de eventos.");
+}
+}
+document.onmousemove = function(ev){
+var ev = ev || window.event;
+var mousePos = mouseCoords(ev);
+if (objSelecionado){
+document.getElementById(objSelecionado).style.left = mousePos.x - mouseOffset.x + 'px';
+document.getElementById(objSelecionado).style.top = mousePos.y - mouseOffset.y + 'px';
+document.getElementById(objSelecionado).style.margin = '0px';
+return false;
+}
+}
+function mouseCoords(ev){
+if(ev.pageX || ev.pageY){
+return {x:ev.pageX, y:ev.pageY};
+}
+return {
+x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
+y:ev.clientY + document.body.scrollTop  - document.body.clientTop
+};
+}
+function getPosition(e, ev){
+e = document.getElementById(e);
+var left = 0;
+var top  = 0;
+var coords = mouseCoords(ev);
+while (e.offsetParent){
+left += e.offsetLeft;
+top  += e.offsetTop;
+e     = e.offsetParent;
+}
+left += e.offsetLeft;
+top  += e.offsetTop;
+return {x: coords.x - left, y: coords.y - top};
+}
+document.onmouseup = function(){
+objSelecionado = null;
+}
+function dragdrop(local_click, caixa_movida){
+subMenuHide();
+barHide("edubar");
+barHide("shortcuts");
+addEvent(local_click, 'mousedown', function(ev){
+objSelecionado = caixa_movida;
+mouseOffset = getPosition(objSelecionado, ev);
+});
+}