Add VERSION file and clean tree for release 0.1

Change-Id: I69e46b5a7361319d0ad547a92d7811215dd0013c
diff --git a/.hackfests/2010-12-01.txt b/.hackfests/2010-12-01.txt
deleted file mode 100644
index 8f8b6b6..0000000
--- a/.hackfests/2010-12-01.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-Brett and I eating Burritos from Little Chihuahua at my house.
-
-Plan is for Brett to work on Clip-it-Good (the Chrome Extension)'s
-camli support (currently non-existent), and get it to:
-
-   -- select an image
-   -- upload the image blob
-   -- create the permanode blob
-   -- create (and sign, with the signing server) the "become" claim,
-      pointing the permanode at the image
-   -- create (a signed) "tag" blob, tagging an image e.g. "funny"
-
-I will work on docs & signing server tests & signing verification
-endpoint.
-
-
---------------
-
-Done:
-
-  * Brad: docs re-organized
-  * Brad: camlistore.{com,org,net,info,us} domains purchased
-
diff --git a/.hackfests/2012-11-03.txt b/.hackfests/2012-11-03.txt
deleted file mode 100644
index 41b65d9..0000000
--- a/.hackfests/2012-11-03.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Saturday & Sunday in Paris with Mathieu, meeting for the first time,
-hacking on EXIF rotation, thumbnail indexing, Postgres support, and
-then Monday at Google Paris, working on different parts of the UI
-permanode thumbnail page, and genfileembed problems.
diff --git a/.hackfests/2012-12-23.txt b/.hackfests/2012-12-23.txt
deleted file mode 100644
index 0abf580..0000000
--- a/.hackfests/2012-12-23.txt
+++ /dev/null
@@ -1 +0,0 @@
-Closure newui hacking with bslatkin.
diff --git a/.hackfests/2013-01-20.txt b/.hackfests/2013-01-20.txt
deleted file mode 100644
index 3af57be..0000000
--- a/.hackfests/2013-01-20.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-At Brett's place, with Brett Slatkin, Lindsey Simon, Ryan Barrett.
-
-Goal: More closure UI stuff.
-
-Ryan getting up-to-speed and maybe working on Activity Streams import.
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..49d5957
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.1
diff --git a/clients/chrome/clip-it-good/Crypto.js b/clients/chrome/clip-it-good/Crypto.js
deleted file mode 100644
index 278bbfd..0000000
--- a/clients/chrome/clip-it-good/Crypto.js
+++ /dev/null
@@ -1,183 +0,0 @@
-// From http://code.google.com/p/crypto-js/

-// License: http://www.opensource.org/licenses/bsd-license.php

-//

-// Copyright (c) 2009, Jeff Mott. All rights reserved.

-// 

-// Redistribution and use in source and binary forms, with or without

-// modification, are permitted provided that the following conditions are met:

-// 

-// Redistributions of source code must retain the above copyright notice, this

-// list of conditions and the following disclaimer. Redistributions in binary

-// form must reproduce the above copyright notice, this list of conditions and

-// the following disclaimer in the documentation and/or other materials provided

-// with the distribution. Neither the name Crypto-JS nor the names of its

-// contributors may be used to endorse or promote products derived from this

-// software without specific prior written permission. THIS SOFTWARE IS PROVIDED

-// BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED

-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF

-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO

-// EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,

-// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

-// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;

-// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND

-// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS

-// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-

-if (typeof Crypto == "undefined" || ! Crypto.util)

-{

-(function(){

-

-var base64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

-

-// Global Crypto object

-var Crypto = window.Crypto = {};

-

-// Crypto utilities

-var util = Crypto.util = {

-

-	// Bit-wise rotate left

-	rotl: function (n, b) {

-		return (n << b) | (n >>> (32 - b));

-	},

-

-	// Bit-wise rotate right

-	rotr: function (n, b) {

-		return (n << (32 - b)) | (n >>> b);

-	},

-

-	// Swap big-endian to little-endian and vice versa

-	endian: function (n) {

-

-		// If number given, swap endian

-		if (n.constructor == Number) {

-			return util.rotl(n,  8) & 0x00FF00FF |

-			       util.rotl(n, 24) & 0xFF00FF00;

-		}

-

-		// Else, assume array and swap all items

-		for (var i = 0; i < n.length; i++)

-			n[i] = util.endian(n[i]);

-		return n;

-

-	},

-

-	// Generate an array of any length of random bytes

-	randomBytes: function (n) {

-		for (var bytes = []; n > 0; n--)

-			bytes.push(Math.floor(Math.random() * 256));

-		return bytes;

-	},

-

-	// Convert a byte array to big-endian 32-bit words

-	bytesToWords: function (bytes) {

-		for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)

-			words[b >>> 5] |= bytes[i] << (24 - b % 32);

-		return words;

-	},

-

-	// Convert big-endian 32-bit words to a byte array

-	wordsToBytes: function (words) {

-		for (var bytes = [], b = 0; b < words.length * 32; b += 8)

-			bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);

-		return bytes;

-	},

-

-	// Convert a byte array to a hex string

-	bytesToHex: function (bytes) {

-		for (var hex = [], i = 0; i < bytes.length; i++) {

-			hex.push((bytes[i] >>> 4).toString(16));

-			hex.push((bytes[i] & 0xF).toString(16));

-		}

-		return hex.join("");

-	},

-

-	// Convert a hex string to a byte array

-	hexToBytes: function (hex) {

-		for (var bytes = [], c = 0; c < hex.length; c += 2)

-			bytes.push(parseInt(hex.substr(c, 2), 16));

-		return bytes;

-	},

-

-	// Convert a byte array to a base-64 string

-	bytesToBase64: function (bytes) {

-

-		// Use browser-native function if it exists

-		if (typeof btoa == "function") return btoa(Binary.bytesToString(bytes));

-

-		for(var base64 = [], i = 0; i < bytes.length; i += 3) {

-			var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];

-			for (var j = 0; j < 4; j++) {

-				if (i * 8 + j * 6 <= bytes.length * 8)

-					base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));

-				else base64.push("=");

-			}

-		}

-

-		return base64.join("");

-

-	},

-

-	// Convert a base-64 string to a byte array

-	base64ToBytes: function (base64) {

-

-		// Use browser-native function if it exists

-		if (typeof atob == "function") return Binary.stringToBytes(atob(base64));

-

-		// Remove non-base-64 characters

-		base64 = base64.replace(/[^A-Z0-9+\/]/ig, "");

-

-		for (var bytes = [], i = 0, imod4 = 0; i < base64.length; imod4 = ++i % 4) {

-			if (imod4 == 0) continue;

-			bytes.push(((base64map.indexOf(base64.charAt(i - 1)) & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2)) |

-			           (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));

-		}

-

-		return bytes;

-

-	}

-

-};

-

-// Crypto mode namespace

-Crypto.mode = {};

-

-// Crypto character encodings

-var charenc = Crypto.charenc = {};

-

-// UTF-8 encoding

-var UTF8 = charenc.UTF8 = {

-

-	// Convert a string to a byte array

-	stringToBytes: function (str) {

-		return Binary.stringToBytes(unescape(encodeURIComponent(str)));

-	},

-

-	// Convert a byte array to a string

-	bytesToString: function (bytes) {

-		return decodeURIComponent(escape(Binary.bytesToString(bytes)));

-	}

-

-};

-

-// Binary encoding

-var Binary = charenc.Binary = {

-

-	// Convert a string to a byte array

-	stringToBytes: function (str) {

-		for (var bytes = [], i = 0; i < str.length; i++)

-			bytes.push(str.charCodeAt(i));

-		return bytes;

-	},

-

-	// Convert a byte array to a string

-	bytesToString: function (bytes) {

-		for (var str = [], i = 0; i < bytes.length; i++)

-			str.push(String.fromCharCode(bytes[i]));

-		return str.join("");

-	}

-

-};

-

-})();

-}

diff --git a/clients/chrome/clip-it-good/LICENSE b/clients/chrome/clip-it-good/LICENSE
deleted file mode 100644
index 055361b..0000000
--- a/clients/chrome/clip-it-good/LICENSE
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright 2010 Brett Slatkin
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/clients/chrome/clip-it-good/SHA1.js b/clients/chrome/clip-it-good/SHA1.js
deleted file mode 100644
index e9631da..0000000
--- a/clients/chrome/clip-it-good/SHA1.js
+++ /dev/null
@@ -1,109 +0,0 @@
-// From http://code.google.com/p/crypto-js/

-// License: http://www.opensource.org/licenses/bsd-license.php

-//

-// Copyright (c) 2009, Jeff Mott. All rights reserved.

-// 

-// Redistribution and use in source and binary forms, with or without

-// modification, are permitted provided that the following conditions are met:

-// 

-// Redistributions of source code must retain the above copyright notice, this

-// list of conditions and the following disclaimer. Redistributions in binary

-// form must reproduce the above copyright notice, this list of conditions and

-// the following disclaimer in the documentation and/or other materials provided

-// with the distribution. Neither the name Crypto-JS nor the names of its

-// contributors may be used to endorse or promote products derived from this

-// software without specific prior written permission. THIS SOFTWARE IS PROVIDED

-// BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED

-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF

-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO

-// EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,

-// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

-// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;

-// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND

-// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS

-// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-

-(function(){

-

-// Shortcuts

-var C = Crypto,

-    util = C.util,

-    charenc = C.charenc,

-    UTF8 = charenc.UTF8,

-    Binary = charenc.Binary;

-

-// Public API

-var SHA1 = C.SHA1 = function (message, options) {

-	var digestbytes = util.wordsToBytes(SHA1._sha1(message));

-	return options && options.asBytes ? digestbytes :

-	       options && options.asString ? Binary.bytesToString(digestbytes) :

-	       util.bytesToHex(digestbytes);

-};

-

-// The core

-SHA1._sha1 = function (message) {

-

-	// Convert to byte array

-	if (message.constructor == String) message = UTF8.stringToBytes(message);

-	/* else, assume byte array already */

-

-	var m  = util.bytesToWords(message),

-	    l  = message.length * 8,

-	    w  =  [],

-	    H0 =  1732584193,

-	    H1 = -271733879,

-	    H2 = -1732584194,

-	    H3 =  271733878,

-	    H4 = -1009589776;

-

-	// Padding

-	m[l >> 5] |= 0x80 << (24 - l % 32);

-	m[((l + 64 >>> 9) << 4) + 15] = l;

-

-	for (var i = 0; i < m.length; i += 16) {

-

-		var a = H0,

-		    b = H1,

-		    c = H2,

-		    d = H3,

-		    e = H4;

-

-		for (var j = 0; j < 80; j++) {

-

-			if (j < 16) w[j] = m[i + j];

-			else {

-				var n = w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16];

-				w[j] = (n << 1) | (n >>> 31);

-			}

-

-			var t = ((H0 << 5) | (H0 >>> 27)) + H4 + (w[j] >>> 0) + (

-			         j < 20 ? (H1 & H2 | ~H1 & H3) + 1518500249 :

-			         j < 40 ? (H1 ^ H2 ^ H3) + 1859775393 :

-			         j < 60 ? (H1 & H2 | H1 & H3 | H2 & H3) - 1894007588 :

-			                  (H1 ^ H2 ^ H3) - 899497514);

-

-			H4 =  H3;

-			H3 =  H2;

-			H2 = (H1 << 30) | (H1 >>> 2);

-			H1 =  H0;

-			H0 =  t;

-

-		}

-

-		H0 += a;

-		H1 += b;

-		H2 += c;

-		H3 += d;

-		H4 += e;

-

-	}

-

-	return [H0, H1, H2, H3, H4];

-

-};

-

-// Package private blocksize

-SHA1._blocksize = 16;

-

-})();

diff --git a/clients/chrome/clip-it-good/background.html b/clients/chrome/clip-it-good/background.html
deleted file mode 100644
index 411cb21..0000000
--- a/clients/chrome/clip-it-good/background.html
+++ /dev/null
@@ -1,256 +0,0 @@
-<html>
-<head>
-<script type="text/javascript" src="base64.js"></script>
-<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
-<script type="text/javascript" src="chrome_ex_oauthsimple.js"></script>
-<script type="text/javascript" src="chrome_ex_oauth.js"></script>
-<script type="text/javascript" src="Crypto.js"></script>
-<script type="text/javascript" src="SHA1.js"></script>
-
-<script type="text/javascript" charset="utf-8">
-
-  var OAUTH = ChromeExOAuth.initBackgroundPage({
-    'request_url' : 'https://www.google.com/accounts/OAuthGetRequestToken',
-    'authorize_url' : 'https://www.google.com/accounts/OAuthAuthorizeToken',
-    'access_url' : 'https://www.google.com/accounts/OAuthGetAccessToken',
-    'consumer_key' : 'anonymous',
-    'consumer_secret' : 'anonymous',
-    'scope' : 'http://picasaweb.google.com/data/',
-    'app_name' : 'Clip It Good: Chrome Extension'
-  });
-
-  // Constants for various album types.
-  var PICASA = 'picasa';
-  var CAMLISTORE = 'camlistore';
-  var ALBUM_TYPE_STRING = {
-    picasa: 'Picasa Web Albums',
-    camlistore: 'Camlistore'
-  };
-
-  // Preferences
-  var ALBUM_CONFIG = {};  // 'type' -> ('id' -> 'name')
-  var ALBUM_OPTIONS = {};  // 'type' -> ('id' -> optionsDict)
-
-  function loadAlbumConfig() {
-    var newAlbumConfig = localStorage.getItem('config:albums');
-    if (newAlbumConfig) {
-      ALBUM_CONFIG = $.parseJSON(newAlbumConfig);
-    }
-
-    var newAlbumOptions = localStorage.getItem('config:albumOptions');
-    if (newAlbumOptions) {
-      ALBUM_OPTIONS = $.parseJSON(newAlbumOptions);
-    }
-  }
-
-  function saveAlbumConfig() {
-    localStorage.setItem('config:albums', JSON.stringify(ALBUM_CONFIG));
-    localStorage.setItem('config:albumOptions', JSON.stringify(ALBUM_OPTIONS));
-  }
-
-  // Sort albums by name.
-  function getSortedAlbums(albumIdNameDict) {
-    var albumIdNameArray = [];
-    $.each(albumIdNameDict, function(id, name) {
-      albumIdNameArray.push({'id': id, 'name': name});
-    });
-    albumIdNameArray.sort(function(a, b) {
-      if (a['name'] < b['name']) {
-        return -1;
-      } else if (a['name'] > b['name']) {
-        return 1;
-      } else {
-        return 0;
-      }
-    });
-    return albumIdNameArray;
-  }
-
-  function setupMenus() {
-    loadAlbumConfig();
-
-    chrome.contextMenus.removeAll(function() {
-      $.each(ALBUM_CONFIG, function(albumType, albumIdNameDict) {
-        chrome.contextMenus.create({
-          title: ALBUM_TYPE_STRING[albumType],
-          contexts: ['image']
-        });
-        chrome.contextMenus.create({
-          type: 'separator',
-          contexts: ['image']
-        });
-
-        $.each(getSortedAlbums(albumIdNameDict), function(index, albumDict) {
-          chrome.contextMenus.create({
-            title: albumDict.name,
-            contexts: ['image'],
-            onclick: function(data, tab) {
-              return handleMenuClick(
-                  albumType, albumDict.name, albumDict.id, data, tab);
-            }
-          });
-        });
-      });
-    });
-  }
-
-  // Upload actions
-  var ALBUM_TYPE_UPLOAD_FUNC = {
-
-    picasa: function(albumId, albumName, dataSrcUrl, dataBuffer, uploadDone) {
-      var builder = new BlobBuilder();
-      builder.append(dataBuffer);
-
-      function complete(resp, xhr) {
-        if (!(xhr.status >= 200 && xhr.status <= 299)) {
-          alert('Error: Response status = ' + xhr.status +
-                ', response body = "' + xhr.responseText + '"');
-        } else {
-          uploadDone();
-        }
-      }
-
-      OAUTH.authorize(function() {
-        OAUTH.sendSignedRequest(
-          'http://picasaweb.google.com/data/feed/api/' +
-          'user/default/albumid/' + albumId,
-          complete,
-          {
-            method: 'POST',
-            headers: {
-              'Content-Type': 'image/png',
-              'Slug': dataSrcUrl
-            },
-            parameters: {
-              alt: 'json'
-            },
-            body: builder.getBlob('image/png')
-          }
-        );
-      });
-    },
-
-    camlistore: function(albumId, albumName, dataSrcUrl,
-                         dataBuffer, uploadDone) {
-      var hash = Crypto.SHA1(new Uint8Array(dataBuffer, 0));
-      var blobRef = 'sha1-' + hash;
-      var options = ALBUM_OPTIONS[CAMLISTORE][albumId];
-
-      function doUpload(uploadUrl) {
-        // XXX Use real random boundary.
-        var boundary = 'randomboundaryXYZ';
-        var contentType = 'multipart/form-data; boundary=' + boundary;
-
-        var header =
-          '--' + boundary + '\r\n' +
-          'Content-Type: application/octet-stream\r\n' +
-          'Content-Disposition: form-data; name="' + blobRef +
-              '"; filename="1"\r\n\r\n'
-        var footer = '\r\n--' + boundary + '--\r\n';
-
-        var builder = new BlobBuilder();
-        builder.append(header);
-        builder.append(dataBuffer);
-        builder.append(footer);
-        var payload = builder.getBlob(contentType);
-
-        var uploadXhr = new XMLHttpRequest();
-        uploadXhr.open('POST', uploadUrl, true,
-                       options.username, options.password);
-        uploadXhr.onreadystatechange = function() {
-          if (uploadXhr.readyState == XMLHttpRequest.DONE &&
-              uploadXhr.status == 200) {
-            // XXX Check for bad response format (not JSON).
-            var responseJson = $.parseJSON(uploadXhr.responseText)
-
-            if (responseJson.received &&
-                responseJson.received.length == 1 &&
-                responseJson.received[0].blobRef == blobRef) {
-              console.log('Successful upload: ' + blobRef);
-              uploadDone();
-              return;
-            }
-
-            alert('Camlistore upload response did not verify blob "' +
-                  blobRef + '": ' + uploadXhr.responseText);
-          }
-          // XXX: Handle request errors
-        }
-        uploadXhr.setRequestHeader('Content-Type', contentType);
-        uploadXhr.send(payload);
-      }
-
-      var statXhr = new XMLHttpRequest();
-      statXhr.open('POST', albumId + '/camli/stat', true,
-                        options.username, options.password);
-      statXhr.onreadystatechange = function() {
-        if (statXhr.readyState == XMLHttpRequest.DONE &&
-            statXhr.status == 200) {
-          // XXX Check for bad response format (not JSON).
-          var responseJson = $.parseJSON(statXhr.responseText);
-
-          if (responseJson.stat &&
-              responseJson.stat.length == 1 &&
-              responseJson.stat[0].blobRef == blobRef) {
-            console.log('Blob already present: ' + blobRef);
-            uploadDone();
-            return;
-          }
-
-          var uploadUrl = responseJson.uploadUrl;
-          if (!uploadUrl) {
-            alert('Camlistore stat response missing "uploadUrl": ' +
-                  statXhr.responseText);
-            return;
-          }
-
-          doUpload(uploadUrl);
-        }
-        // XXX: Handle request errors
-      }
-      statXhr.setRequestHeader(
-          'Content-Type', 'application/x-www-form-urlencoded');
-      statXhr.send('camliversion=1&blob1=' + blobRef);
-    }
-
-  };
-
-  function handleMenuClick(albumType, albumName, albumId, data, tab) {
-    chrome.pageAction.setTitle({
-      tabId: tab.id,
-      title: 'Clip It Good: Uploading (' + data.srcUrl.substr(0, 100) + ')'
-    });
-    chrome.pageAction.show(tab.id);
-
-    var img = document.createElement('img');
-    img.onload = function() {
-      var canvas = document.createElement('canvas');
-      canvas.width = img.width;
-      canvas.height = img.height;
-      canvas.getContext('2d').drawImage(img, 0, 0);
-
-      var dataUrl = canvas.toDataURL();
-      var dataUrlAdjusted = dataUrl.replace('data:image/png;base64,', '');
-
-      var arrayBuffer = Base64.decode(dataUrlAdjusted).buffer;
-
-      function uploadDone() {
-        chrome.pageAction.hide(tab.id);
-      }
-
-      var uploadFunc = ALBUM_TYPE_UPLOAD_FUNC[albumType];
-      uploadFunc(albumId, albumName, data.srcUrl, arrayBuffer, uploadDone);
-    }  // end onload
-
-    img.src = data.srcUrl;
-  }
-
-  $(document).ready( function() {
-    setupMenus();
-  });
-</script>
-
-</head>
-<body>
-</body>
-</html>
diff --git a/clients/chrome/clip-it-good/base64.js b/clients/chrome/clip-it-good/base64.js
deleted file mode 100644
index 9d9a1f3..0000000
--- a/clients/chrome/clip-it-good/base64.js
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
-Copyright (c) 2008 Fred Palmer fred.palmer_at_gmail.com
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-*/
-function StringBuffer()
-{ 
-    this.buffer = []; 
-} 
-
-StringBuffer.prototype.append = function append(string)
-{ 
-    this.buffer.push(string); 
-    return this; 
-}; 
-
-StringBuffer.prototype.toString = function toString()
-{ 
-    return this.buffer.join(""); 
-}; 
-
-var Base64 =
-{
-    codex : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
-
-    encode : function (input)
-    {
-        var output = new StringBuffer();
-
-        var enumerator = new Utf8EncodeEnumerator(input);
-        while (enumerator.moveNext())
-        {
-            var chr1 = enumerator.current;
-
-            enumerator.moveNext();
-            var chr2 = enumerator.current;
-
-            enumerator.moveNext();
-            var chr3 = enumerator.current;
-
-            var enc1 = chr1 >> 2;
-            var enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
-            var enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
-            var enc4 = chr3 & 63;
-
-            if (isNaN(chr2))
-            {
-                enc3 = enc4 = 64;
-            }
-            else if (isNaN(chr3))
-            {
-                enc4 = 64;
-            }
-
-            output.append(this.codex.charAt(enc1) + this.codex.charAt(enc2) + this.codex.charAt(enc3) + this.codex.charAt(enc4));
-        }
-
-        return output.toString();
-    },
-
-    decode : function (input)
-    {
-        // TypedArray usage added by brett@haxor.com 11/27/2010
-        var size = 0;
-        var buffer = new ArrayBuffer(input.length);
-        var output = new Uint8Array(buffer, 0);
-
-        var enumerator = new Base64DecodeEnumerator(input);
-        while (enumerator.moveNext()) {
-            output[size++] = enumerator.current;
-        }
-
-        // There is nothing in the TypedArray spec to copy/subset a buffer,
-        // so we have to do a copy to ensure that typedarray.buffer is the
-        // correct length when passed to XmlHttpRequest methods, etc.
-        var outputBuffer = new ArrayBuffer(size);
-        var outputArray = new Uint8Array(outputBuffer, 0);
-        for (var i = 0; i < size; i++) {
-          outputArray[i] = output[i];
-        }
-        return outputArray;
-    }
-}
-
-
-function Utf8EncodeEnumerator(input)
-{
-    this._input = input;
-    this._index = -1;
-    this._buffer = [];
-}
-
-Utf8EncodeEnumerator.prototype =
-{
-    current: Number.NaN,
-
-    moveNext: function()
-    {
-        if (this._buffer.length > 0)
-        {
-            this.current = this._buffer.shift();
-            return true;
-        }
-        else if (this._index >= (this._input.length - 1))
-        {
-            this.current = Number.NaN;
-            return false;
-        }
-        else
-        {
-            var charCode = this._input.charCodeAt(++this._index);
-
-            // "\r\n" -> "\n"
-            //
-            if ((charCode == 13) && (this._input.charCodeAt(this._index + 1) == 10))
-            {
-                charCode = 10;
-                this._index += 2;
-            }
-
-            if (charCode < 128)
-            {
-                this.current = charCode;
-            }
-            else if ((charCode > 127) && (charCode < 2048))
-            {
-                this.current = (charCode >> 6) | 192;
-                this._buffer.push((charCode & 63) | 128);
-            }
-            else
-            {
-                this.current = (charCode >> 12) | 224;
-                this._buffer.push(((charCode >> 6) & 63) | 128);
-                this._buffer.push((charCode & 63) | 128);
-            }
-
-            return true;
-        }
-    }
-}
-
-function Base64DecodeEnumerator(input)
-{
-    this._input = input;
-    this._index = -1;
-    this._buffer = [];
-}
-
-Base64DecodeEnumerator.prototype =
-{
-    current: 64,
-
-    moveNext: function()
-    {
-        if (this._buffer.length > 0)
-        {
-            this.current = this._buffer.shift();
-            return true;
-        }
-        else if (this._index >= (this._input.length - 1))
-        {
-            this.current = 64;
-            return false;
-        }
-        else
-        {
-            var enc1 = Base64.codex.indexOf(this._input.charAt(++this._index));
-            var enc2 = Base64.codex.indexOf(this._input.charAt(++this._index));
-            var enc3 = Base64.codex.indexOf(this._input.charAt(++this._index));
-            var enc4 = Base64.codex.indexOf(this._input.charAt(++this._index));
-
-            var chr1 = (enc1 << 2) | (enc2 >> 4);
-            var chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
-            var chr3 = ((enc3 & 3) << 6) | enc4;
-
-            this.current = chr1;
-
-            if (enc3 != 64)
-                this._buffer.push(chr2);
-
-            if (enc4 != 64)
-                this._buffer.push(chr3);
-
-            return true;
-        }
-    }
-};
diff --git a/clients/chrome/clip-it-good/chrome_ex_oauth.html b/clients/chrome/clip-it-good/chrome_ex_oauth.html
deleted file mode 100644
index 912f891..0000000
--- a/clients/chrome/clip-it-good/chrome_ex_oauth.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE html>
-<!--
- * Copyright (c) 2009 The Chromium Authors. All rights reserved.  Use of this
- * source code is governed by a BSD-style license that can be found in the
- * LICENSE file.
--->
-<html>
-  <head>
-    <title>OAuth Redirect Page</title>
-    <style type="text/css">
-      body {
-        font: 16px Arial;
-        color: #333;
-      }
-    </style>
-    <script type="text/javascript" src="chrome_ex_oauthsimple.js"></script>
-    <script type="text/javascript" src="chrome_ex_oauth.js"></script>
-    <script type="text/javascript">
-      function onLoad() {
-        ChromeExOAuth.initCallbackPage();
-      };
-    </script>
-  </head>
-  <body onload="onLoad();">
-    Redirecting...
-  </body>
-</html>
diff --git a/clients/chrome/clip-it-good/chrome_ex_oauth.js b/clients/chrome/clip-it-good/chrome_ex_oauth.js
deleted file mode 100644
index 7e13710..0000000
--- a/clients/chrome/clip-it-good/chrome_ex_oauth.js
+++ /dev/null
@@ -1,593 +0,0 @@
-/**
- * Copyright (c) 2010 The Chromium Authors. All rights reserved.  Use of this
- * source code is governed by a BSD-style license that can be found in the
- * LICENSE file.
- */
-
-/**
- * Constructor - no need to invoke directly, call initBackgroundPage instead.
- * @constructor
- * @param {String} url_request_token The OAuth request token URL.
- * @param {String} url_auth_token The OAuth authorize token URL.
- * @param {String} url_access_token The OAuth access token URL.
- * @param {String} consumer_key The OAuth consumer key.
- * @param {String} consumer_secret The OAuth consumer secret.
- * @param {String} oauth_scope The OAuth scope parameter.
- * @param {Object} opt_args Optional arguments.  Recognized parameters:
- *     "app_name" {String} Name of the current application
- *     "callback_page" {String} If you renamed chrome_ex_oauth.html, the name
- *          this file was renamed to.
- */
-function ChromeExOAuth(url_request_token, url_auth_token, url_access_token,
-                       consumer_key, consumer_secret, oauth_scope, opt_args) {
-  this.url_request_token = url_request_token;
-  this.url_auth_token = url_auth_token;
-  this.url_access_token = url_access_token;
-  this.consumer_key = consumer_key;
-  this.consumer_secret = consumer_secret;
-  this.oauth_scope = oauth_scope;
-  this.app_name = opt_args && opt_args['app_name'] ||
-      "ChromeExOAuth Library";
-  this.key_token = "oauth_token";
-  this.key_token_secret = "oauth_token_secret";
-  this.callback_page = opt_args && opt_args['callback_page'] ||
-      "chrome_ex_oauth.html";
-  this.auth_params = {};
-  if (opt_args && opt_args['auth_params']) {
-    for (key in opt_args['auth_params']) {
-      if (opt_args['auth_params'].hasOwnProperty(key)) {
-        this.auth_params[key] = opt_args['auth_params'][key];
-      }
-    }
-  }
-};
-
-/*******************************************************************************
- * PUBLIC API METHODS
- * Call these from your background page.
- ******************************************************************************/
-
-/**
- * Initializes the OAuth helper from the background page.  You must call this
- * before attempting to make any OAuth calls.
- * @param {Object} oauth_config Configuration parameters in a JavaScript object.
- *     The following parameters are recognized:
- *         "request_url" {String} OAuth request token URL.
- *         "authorize_url" {String} OAuth authorize token URL.
- *         "access_url" {String} OAuth access token URL.
- *         "consumer_key" {String} OAuth consumer key.
- *         "consumer_secret" {String} OAuth consumer secret.
- *         "scope" {String} OAuth access scope.
- *         "app_name" {String} Application name.
- *         "auth_params" {Object} Additional parameters to pass to the
- *             Authorization token URL.  For an example, 'hd', 'hl', 'btmpl':
- *             http://code.google.com/apis/accounts/docs/OAuth_ref.html#GetAuth
- * @return {ChromeExOAuth} An initialized ChromeExOAuth object.
- */
-ChromeExOAuth.initBackgroundPage = function(oauth_config) {
-  window.chromeExOAuthConfig = oauth_config;
-  window.chromeExOAuth = ChromeExOAuth.fromConfig(oauth_config);
-  window.chromeExOAuthRedirectStarted = false;
-  window.chromeExOAuthRequestingAccess = false;
-
-  var url_match = chrome.extension.getURL(window.chromeExOAuth.callback_page);
-  var tabs = {};
-  chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
-    if (changeInfo.url &&
-        changeInfo.url.substr(0, url_match.length) === url_match &&
-        changeInfo.url != tabs[tabId] &&
-        window.chromeExOAuthRequestingAccess == false) {
-      chrome.tabs.create({ 'url' : changeInfo.url }, function(tab) {
-        tabs[tab.id] = tab.url;
-        chrome.tabs.remove(tabId);
-      });
-    }
-  });
-
-  return window.chromeExOAuth;
-};
-
-/**
- * Authorizes the current user with the configued API.  You must call this
- * before calling sendSignedRequest.
- * @param {Function} callback A function to call once an access token has
- *     been obtained.  This callback will be passed the following arguments:
- *         token {String} The OAuth access token.
- *         secret {String} The OAuth access token secret.
- */
-ChromeExOAuth.prototype.authorize = function(callback) {
-  if (this.hasToken()) {
-    callback(this.getToken(), this.getTokenSecret());
-  } else {
-    window.chromeExOAuthOnAuthorize = function(token, secret) {
-      callback(token, secret);
-    };
-    chrome.tabs.create({ 'url' :chrome.extension.getURL(this.callback_page) });
-  }
-};
-
-/**
- * Clears any OAuth tokens stored for this configuration.  Effectively a
- * "logout" of the configured OAuth API.
- */
-ChromeExOAuth.prototype.clearTokens = function() {
-  delete localStorage[this.key_token + encodeURI(this.oauth_scope)];
-  delete localStorage[this.key_token_secret + encodeURI(this.oauth_scope)];
-};
-
-/**
- * Returns whether a token is currently stored for this configuration.
- * Effectively a check to see whether the current user is "logged in" to
- * the configured OAuth API.
- * @return {Boolean} True if an access token exists.
- */
-ChromeExOAuth.prototype.hasToken = function() {
-  return !!this.getToken();
-};
-
-/**
- * Makes an OAuth-signed HTTP request with the currently authorized tokens.
- * @param {String} url The URL to send the request to.  Querystring parameters
- *     should be omitted.
- * @param {Function} callback A function to be called once the request is
- *     completed.  This callback will be passed the following arguments:
- *         responseText {String} The text response.
- *         xhr {XMLHttpRequest} The XMLHttpRequest object which was used to
- *             send the request.  Useful if you need to check response status
- *             code, etc.
- * @param {Object} opt_params Additional parameters to configure the request.
- *     The following parameters are accepted:
- *         "method" {String} The HTTP method to use.  Defaults to "GET".
- *         "body" {String} A request body to send.  Defaults to null.
- *         "parameters" {Object} Query parameters to include in the request.
- *         "headers" {Object} Additional headers to include in the request.
- */
-ChromeExOAuth.prototype.sendSignedRequest = function(url, callback,
-                                                     opt_params) {
-  var method = opt_params && opt_params['method'] || 'GET';
-  var body = opt_params && opt_params['body'] || null;
-  var params = opt_params && opt_params['parameters'] || {};
-  var headers = opt_params && opt_params['headers'] || {};
-
-  var signedUrl = this.signURL(url, method, params);
-
-  ChromeExOAuth.sendRequest(method, signedUrl, headers, body, function (xhr) {
-    if (xhr.readyState == 4) {
-      callback(xhr.responseText, xhr);
-    }
-  });
-};
-
-/**
- * Adds the required OAuth parameters to the given url and returns the
- * result.  Useful if you need a signed url but don't want to make an XHR
- * request.
- * @param {String} method The http method to use.
- * @param {String} url The base url of the resource you are querying.
- * @param {Object} opt_params Query parameters to include in the request.
- * @return {String} The base url plus any query params plus any OAuth params.
- */
-ChromeExOAuth.prototype.signURL = function(url, method, opt_params) {
-  var token = this.getToken();
-  var secret = this.getTokenSecret();
-  if (!token || !secret) {
-    throw new Error("No oauth token or token secret");
-  }
-
-  var params = opt_params || {};
-
-  var result = OAuthSimple().sign({
-    action : method,
-    path : url,
-    parameters : params,
-    signatures: {
-      consumer_key : this.consumer_key,
-      shared_secret : this.consumer_secret,
-      oauth_secret : secret,
-      oauth_token: token
-    }
-  });
-
-  return result.signed_url;
-};
-
-/**
- * Generates the Authorization header based on the oauth parameters.
- * @param {String} url The base url of the resource you are querying.
- * @param {Object} opt_params Query parameters to include in the request.
- * @return {String} An Authorization header containing the oauth_* params.
- */
-ChromeExOAuth.prototype.getAuthorizationHeader = function(url, method,
-                                                          opt_params) {
-  var token = this.getToken();
-  var secret = this.getTokenSecret();
-  if (!token || !secret) {
-    throw new Error("No oauth token or token secret");
-  }
-
-  var params = opt_params || {};
-
-  return OAuthSimple().getHeaderString({
-    action: method,
-    path : url,
-    parameters : params,
-    signatures: {
-      consumer_key : this.consumer_key,
-      shared_secret : this.consumer_secret,
-      oauth_secret : secret,
-      oauth_token: token
-    }
-  });
-};
-
-/*******************************************************************************
- * PRIVATE API METHODS
- * Used by the library.  There should be no need to call these methods directly.
- ******************************************************************************/
-
-/**
- * Creates a new ChromeExOAuth object from the supplied configuration object.
- * @param {Object} oauth_config Configuration parameters in a JavaScript object.
- *     The following parameters are recognized:
- *         "request_url" {String} OAuth request token URL.
- *         "authorize_url" {String} OAuth authorize token URL.
- *         "access_url" {String} OAuth access token URL.
- *         "consumer_key" {String} OAuth consumer key.
- *         "consumer_secret" {String} OAuth consumer secret.
- *         "scope" {String} OAuth access scope.
- *         "app_name" {String} Application name.
- *         "auth_params" {Object} Additional parameters to pass to the
- *             Authorization token URL.  For an example, 'hd', 'hl', 'btmpl':
- *             http://code.google.com/apis/accounts/docs/OAuth_ref.html#GetAuth
- * @return {ChromeExOAuth} An initialized ChromeExOAuth object.
- */
-ChromeExOAuth.fromConfig = function(oauth_config) {
-  return new ChromeExOAuth(
-    oauth_config['request_url'],
-    oauth_config['authorize_url'],
-    oauth_config['access_url'],
-    oauth_config['consumer_key'],
-    oauth_config['consumer_secret'],
-    oauth_config['scope'],
-    {
-      'app_name' : oauth_config['app_name'],
-      'auth_params' : oauth_config['auth_params']
-    }
-  );
-};
-
-/**
- * Initializes chrome_ex_oauth.html and redirects the page if needed to start
- * the OAuth flow.  Once an access token is obtained, this function closes
- * chrome_ex_oauth.html.
- */
-ChromeExOAuth.initCallbackPage = function() {
-  var background_page = chrome.extension.getBackgroundPage();
-  var oauth_config = background_page.chromeExOAuthConfig;
-  var oauth = ChromeExOAuth.fromConfig(oauth_config);
-  background_page.chromeExOAuthRedirectStarted = true;
-  oauth.initOAuthFlow(function (token, secret) {
-    background_page.chromeExOAuthOnAuthorize(token, secret);
-    background_page.chromeExOAuthRedirectStarted = false;
-    chrome.tabs.getSelected(null, function (tab) {
-      chrome.tabs.remove(tab.id);
-    });
-  });
-};
-
-/**
- * Sends an HTTP request.  Convenience wrapper for XMLHttpRequest calls.
- * @param {String} method The HTTP method to use.
- * @param {String} url The URL to send the request to.
- * @param {Object} headers Optional request headers in key/value format.
- * @param {String} body Optional body content.
- * @param {Function} callback Function to call when the XMLHttpRequest's
- *     ready state changes.  See documentation for XMLHttpRequest's
- *     onreadystatechange handler for more information.
- */
-ChromeExOAuth.sendRequest = function(method, url, headers, body, callback) {
-  var xhr = new XMLHttpRequest();
-  xhr.onreadystatechange = function(data) {
-    callback(xhr, data);
-  }
-  xhr.open(method, url, true);
-  if (headers) {
-    for (var header in headers) {
-      if (headers.hasOwnProperty(header)) {
-        xhr.setRequestHeader(header, headers[header]);
-      }
-    }
-  }
-  xhr.send(body);
-};
-
-/**
- * Decodes a URL-encoded string into key/value pairs.
- * @param {String} encoded An URL-encoded string.
- * @return {Object} An object representing the decoded key/value pairs found
- *     in the encoded string.
- */
-ChromeExOAuth.formDecode = function(encoded) {
-  var params = encoded.split("&");
-  var decoded = {};
-  for (var i = 0, param; param = params[i]; i++) {
-    var keyval = param.split("=");
-    if (keyval.length == 2) {
-      var key = ChromeExOAuth.fromRfc3986(keyval[0]);
-      var val = ChromeExOAuth.fromRfc3986(keyval[1]);
-      decoded[key] = val;
-    }
-  }
-  return decoded;
-};
-
-/**
- * Returns the current window's querystring decoded into key/value pairs.
- * @return {Object} A object representing any key/value pairs found in the
- *     current window's querystring.
- */
-ChromeExOAuth.getQueryStringParams = function() {
-  var urlparts = window.location.href.split("?");
-  if (urlparts.length >= 2) {
-    var querystring = urlparts.slice(1).join("?");
-    return ChromeExOAuth.formDecode(querystring);
-  }
-  return {};
-};
-
-/**
- * Binds a function call to a specific object.  This function will also take
- * a variable number of additional arguments which will be prepended to the
- * arguments passed to the bound function when it is called.
- * @param {Function} func The function to bind.
- * @param {Object} obj The object to bind to the function's "this".
- * @return {Function} A closure that will call the bound function.
- */
-ChromeExOAuth.bind = function(func, obj) {
-  var newargs = Array.prototype.slice.call(arguments).slice(2);
-  return function() {
-    var combinedargs = newargs.concat(Array.prototype.slice.call(arguments));
-    func.apply(obj, combinedargs);
-  };
-};
-
-/**
- * Encodes a value according to the RFC3986 specification.
- * @param {String} val The string to encode.
- */
-ChromeExOAuth.toRfc3986 = function(val){
-   return encodeURIComponent(val)
-       .replace(/\!/g, "%21")
-       .replace(/\*/g, "%2A")
-       .replace(/'/g, "%27")
-       .replace(/\(/g, "%28")
-       .replace(/\)/g, "%29");
-};
-
-/**
- * Decodes a string that has been encoded according to RFC3986.
- * @param {String} val The string to decode.
- */
-ChromeExOAuth.fromRfc3986 = function(val){
-  var tmp = val
-      .replace(/%21/g, "!")
-      .replace(/%2A/g, "*")
-      .replace(/%27/g, "'")
-      .replace(/%28/g, "(")
-      .replace(/%29/g, ")");
-   return decodeURIComponent(tmp);
-};
-
-/**
- * Adds a key/value parameter to the supplied URL.
- * @param {String} url An URL which may or may not contain querystring values.
- * @param {String} key A key
- * @param {String} value A value
- * @return {String} The URL with URL-encoded versions of the key and value
- *     appended, prefixing them with "&" or "?" as needed.
- */
-ChromeExOAuth.addURLParam = function(url, key, value) {
-  var sep = (url.indexOf('?') >= 0) ? "&" : "?";
-  return url + sep +
-         ChromeExOAuth.toRfc3986(key) + "=" + ChromeExOAuth.toRfc3986(value);
-};
-
-/**
- * Stores an OAuth token for the configured scope.
- * @param {String} token The token to store.
- */
-ChromeExOAuth.prototype.setToken = function(token) {
-  localStorage[this.key_token + encodeURI(this.oauth_scope)] = token;
-};
-
-/**
- * Retrieves any stored token for the configured scope.
- * @return {String} The stored token.
- */
-ChromeExOAuth.prototype.getToken = function() {
-  return localStorage[this.key_token + encodeURI(this.oauth_scope)];
-};
-
-/**
- * Stores an OAuth token secret for the configured scope.
- * @param {String} secret The secret to store.
- */
-ChromeExOAuth.prototype.setTokenSecret = function(secret) {
-  localStorage[this.key_token_secret + encodeURI(this.oauth_scope)] = secret;
-};
-
-/**
- * Retrieves any stored secret for the configured scope.
- * @return {String} The stored secret.
- */
-ChromeExOAuth.prototype.getTokenSecret = function() {
-  return localStorage[this.key_token_secret + encodeURI(this.oauth_scope)];
-};
-
-/**
- * Starts an OAuth authorization flow for the current page.  If a token exists,
- * no redirect is needed and the supplied callback is called immediately.
- * If this method detects that a redirect has finished, it grabs the
- * appropriate OAuth parameters from the URL and attempts to retrieve an
- * access token.  If no token exists and no redirect has happened, then
- * an access token is requested and the page is ultimately redirected.
- * @param {Function} callback The function to call once the flow has finished.
- *     This callback will be passed the following arguments:
- *         token {String} The OAuth access token.
- *         secret {String} The OAuth access token secret.
- */
-ChromeExOAuth.prototype.initOAuthFlow = function(callback) {
-  if (!this.hasToken()) {
-    var params = ChromeExOAuth.getQueryStringParams();
-    if (params['chromeexoauthcallback'] == 'true') {
-      var oauth_token = params['oauth_token'];
-      var oauth_verifier = params['oauth_verifier']
-      this.getAccessToken(oauth_token, oauth_verifier, callback);
-    } else {
-      var request_params = {
-        'url_callback_param' : 'chromeexoauthcallback'
-      }
-      this.getRequestToken(function(url) {
-        window.location.href = url;
-      }, request_params);
-    }
-  } else {
-    callback(this.getToken(), this.getTokenSecret());
-  }
-};
-
-/**
- * Requests an OAuth request token.
- * @param {Function} callback Function to call once the authorize URL is
- *     calculated.  This callback will be passed the following arguments:
- *         url {String} The URL the user must be redirected to in order to
- *             approve the token.
- * @param {Object} opt_args Optional arguments.  The following parameters
- *     are accepted:
- *         "url_callback" {String} The URL the OAuth provider will redirect to.
- *         "url_callback_param" {String} A parameter to include in the callback
- *             URL in order to indicate to this library that a redirect has
- *             taken place.
- */
-ChromeExOAuth.prototype.getRequestToken = function(callback, opt_args) {
-  if (typeof callback !== "function") {
-    throw new Error("Specified callback must be a function.");
-  }
-  var url = opt_args && opt_args['url_callback'] ||
-            window && window.top && window.top.location &&
-            window.top.location.href;
-
-  var url_param = opt_args && opt_args['url_callback_param'] ||
-                  "chromeexoauthcallback";
-  var url_callback = ChromeExOAuth.addURLParam(url, url_param, "true");
-
-  var result = OAuthSimple().sign({
-    path : this.url_request_token,
-    parameters: {
-      "xoauth_displayname" : this.app_name,
-      "scope" : this.oauth_scope,
-      "oauth_callback" : url_callback
-    },
-    signatures: {
-      consumer_key : this.consumer_key,
-      shared_secret : this.consumer_secret
-    }
-  });
-  var onToken = ChromeExOAuth.bind(this.onRequestToken, this, callback);
-  ChromeExOAuth.sendRequest("GET", result.signed_url, null, null, onToken);
-};
-
-/**
- * Called when a request token has been returned.  Stores the request token
- * secret for later use and sends the authorization url to the supplied
- * callback (for redirecting the user).
- * @param {Function} callback Function to call once the authorize URL is
- *     calculated.  This callback will be passed the following arguments:
- *         url {String} The URL the user must be redirected to in order to
- *             approve the token.
- * @param {XMLHttpRequest} xhr The XMLHttpRequest object used to fetch the
- *     request token.
- */
-ChromeExOAuth.prototype.onRequestToken = function(callback, xhr) {
-  if (xhr.readyState == 4) {
-    if (xhr.status == 200) {
-      var params = ChromeExOAuth.formDecode(xhr.responseText);
-      var token = params['oauth_token'];
-      this.setTokenSecret(params['oauth_token_secret']);
-      var url = ChromeExOAuth.addURLParam(this.url_auth_token,
-                                          "oauth_token", token);
-      for (var key in this.auth_params) {
-        if (this.auth_params.hasOwnProperty(key)) {
-          url = ChromeExOAuth.addURLParam(url, key, this.auth_params[key]);
-        }
-      }
-      callback(url);
-    } else {
-      throw new Error("Fetching request token failed. Status " + xhr.status);
-    }
-  }
-};
-
-/**
- * Requests an OAuth access token.
- * @param {String} oauth_token The OAuth request token.
- * @param {String} oauth_verifier The OAuth token verifier.
- * @param {Function} callback The function to call once the token is obtained.
- *     This callback will be passed the following arguments:
- *         token {String} The OAuth access token.
- *         secret {String} The OAuth access token secret.
- */
-ChromeExOAuth.prototype.getAccessToken = function(oauth_token, oauth_verifier,
-                                                  callback) {
-  if (typeof callback !== "function") {
-    throw new Error("Specified callback must be a function.");
-  }
-  var bg = chrome.extension.getBackgroundPage();
-  if (bg.chromeExOAuthRequestingAccess == false) {
-    bg.chromeExOAuthRequestingAccess = true;
-
-    var result = OAuthSimple().sign({
-      path : this.url_access_token,
-      parameters: {
-        "oauth_token" : oauth_token,
-        "oauth_verifier" : oauth_verifier
-      },
-      signatures: {
-        consumer_key : this.consumer_key,
-        shared_secret : this.consumer_secret,
-        oauth_secret : this.getTokenSecret(this.oauth_scope)
-      }
-    });
-
-    var onToken = ChromeExOAuth.bind(this.onAccessToken, this, callback);
-    ChromeExOAuth.sendRequest("GET", result.signed_url, null, null, onToken);
-  }
-};
-
-/**
- * Called when an access token has been returned.  Stores the access token and
- * access token secret for later use and sends them to the supplied callback.
- * @param {Function} callback The function to call once the token is obtained.
- *     This callback will be passed the following arguments:
- *         token {String} The OAuth access token.
- *         secret {String} The OAuth access token secret.
- * @param {XMLHttpRequest} xhr The XMLHttpRequest object used to fetch the
- *     access token.
- */
-ChromeExOAuth.prototype.onAccessToken = function(callback, xhr) {
-  if (xhr.readyState == 4) {
-    var bg = chrome.extension.getBackgroundPage();
-    if (xhr.status == 200) {
-      var params = ChromeExOAuth.formDecode(xhr.responseText);
-      var token = params["oauth_token"];
-      var secret = params["oauth_token_secret"];
-      this.setToken(token);
-      this.setTokenSecret(secret);
-      bg.chromeExOAuthRequestingAccess = false;
-      callback(token, secret);
-    } else {
-      bg.chromeExOAuthRequestingAccess = false;
-      throw new Error("Fetching access token failed with status " + xhr.status);
-    }
-  }
-};
\ No newline at end of file
diff --git a/clients/chrome/clip-it-good/chrome_ex_oauthsimple.js b/clients/chrome/clip-it-good/chrome_ex_oauthsimple.js
deleted file mode 100644
index af0fe8a..0000000
--- a/clients/chrome/clip-it-good/chrome_ex_oauthsimple.js
+++ /dev/null
@@ -1,458 +0,0 @@
-/* OAuthSimple
-  * A simpler version of OAuth
-  *
-  * author:     jr conlin
-  * mail:       src@anticipatr.com
-  * copyright:  unitedHeroes.net
-  * version:    1.0
-  * url:        http://unitedHeroes.net/OAuthSimple
-  *
-  * Copyright (c) 2009, unitedHeroes.net
-  * All rights reserved.
-  *
-  * Redistribution and use in source and binary forms, with or without
-  * modification, are permitted provided that the following conditions are met:
-  *     * Redistributions of source code must retain the above copyright
-  *       notice, this list of conditions and the following disclaimer.
-  *     * Redistributions in binary form must reproduce the above copyright
-  *       notice, this list of conditions and the following disclaimer in the
-  *       documentation and/or other materials provided with the distribution.
-  *     * Neither the name of the unitedHeroes.net nor the
-  *       names of its contributors may be used to endorse or promote products
-  *       derived from this software without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY UNITEDHEROES.NET ''AS IS'' AND ANY
-  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL UNITEDHEROES.NET BE LIABLE FOR ANY
-  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-var OAuthSimple;
-
-if (OAuthSimple === undefined)
-{
-    /* Simple OAuth
-     *
-     * This class only builds the OAuth elements, it does not do the actual
-     * transmission or reception of the tokens. It does not validate elements
-     * of the token. It is for client use only.
-     *
-     * api_key is the API key, also known as the OAuth consumer key
-     * shared_secret is the shared secret (duh).
-     *
-     * Both the api_key and shared_secret are generally provided by the site
-     * offering OAuth services. You need to specify them at object creation
-     * because nobody <explative>ing uses OAuth without that minimal set of
-     * signatures.
-     *
-     * If you want to use the higher order security that comes from the
-     * OAuth token (sorry, I don't provide the functions to fetch that because
-     * sites aren't horribly consistent about how they offer that), you need to
-     * pass those in either with .setTokensAndSecrets() or as an argument to the
-     * .sign() or .getHeaderString() functions.
-     *
-     * Example:
-       <code>
-        var oauthObject = OAuthSimple().sign({path:'http://example.com/rest/',
-                                              parameters: 'foo=bar&gorp=banana',
-                                              signatures:{
-                                                api_key:'12345abcd',
-                                                shared_secret:'xyz-5309'
-                                             }});
-        document.getElementById('someLink').href=oauthObject.signed_url;
-       </code>
-     *
-     * that will sign as a "GET" using "SHA1-MAC" the url. If you need more than
-     * that, read on, McDuff.
-     */
-
-    /** OAuthSimple creator
-     *
-     * Create an instance of OAuthSimple
-     *
-     * @param api_key {string}       The API Key (sometimes referred to as the consumer key) This value is usually supplied by the site you wish to use.
-     * @param shared_secret (string) The shared secret. This value is also usually provided by the site you wish to use.
-     */
-    OAuthSimple = function (consumer_key,shared_secret)
-    {
-/*        if (api_key == undefined)
-            throw("Missing argument: api_key (oauth_consumer_key) for OAuthSimple. This is usually provided by the hosting site.");
-        if (shared_secret == undefined)
-            throw("Missing argument: shared_secret (shared secret) for OAuthSimple. This is usually provided by the hosting site.");
-*/      this._secrets={};
-        this._parameters={};
-
-        // General configuration options.
-        if (consumer_key !== undefined) {
-            this._secrets['consumer_key'] = consumer_key;
-            }
-        if (shared_secret !== undefined) {
-            this._secrets['shared_secret'] = shared_secret;
-            }
-        this._default_signature_method= "HMAC-SHA1";
-        this._action = "GET";
-        this._nonce_chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
-
-        this.reset = function() {
-            this._parameters={};
-            this._path=undefined;
-            return this;
-        };
-
-        /** set the parameters either from a hash or a string
-         *
-         * @param {string,object} List of parameters for the call, this can either be a URI string (e.g. "foo=bar&gorp=banana" or an object/hash)
-         */
-        this.setParameters = function (parameters) {
-            if (parameters === undefined) {
-                parameters = {};
-                }
-            if (typeof(parameters) == 'string') {
-                parameters=this._parseParameterString(parameters);
-                }
-            this._parameters = parameters;
-            if (this._parameters['oauth_nonce'] === undefined) {
-                this._getNonce();
-                }
-            if (this._parameters['oauth_timestamp'] === undefined) {
-                this._getTimestamp();
-                }
-            if (this._parameters['oauth_method'] === undefined) {
-                this.setSignatureMethod();
-                }
-            if (this._parameters['oauth_consumer_key'] === undefined) {
-                this._getApiKey();
-                }
-            if(this._parameters['oauth_token'] === undefined) {
-                this._getAccessToken();
-                }
-
-            return this;
-        };
-
-        /** convienence method for setParameters
-         *
-         * @param parameters {string,object} See .setParameters
-         */
-        this.setQueryString = function (parameters) {
-            return this.setParameters(parameters);
-        };
-
-        /** Set the target URL (does not include the parameters)
-         *
-         * @param path {string} the fully qualified URI (excluding query arguments) (e.g "http://example.org/foo")
-         */
-        this.setURL = function (path) {
-            if (path == '') {
-                throw ('No path specified for OAuthSimple.setURL');
-                }
-            this._path = path;
-            return this;
-        };
-
-        /** convienence method for setURL
-         *
-         * @param path {string} see .setURL
-         */
-        this.setPath = function(path){
-            return this.setURL(path);
-        };
-
-        /** set the "action" for the url, (e.g. GET,POST, DELETE, etc.)
-         *
-         * @param action {string} HTTP Action word.
-         */
-        this.setAction = function(action) {
-            if (action === undefined) {
-                action="GET";
-                }
-            action = action.toUpperCase();
-            if (action.match('[^A-Z]')) {
-                throw ('Invalid action specified for OAuthSimple.setAction');
-                }
-            this._action = action;
-            return this;
-        };
-
-        /** set the signatures (as well as validate the ones you have)
-         *
-         * @param signatures {object} object/hash of the token/signature pairs {api_key:, shared_secret:, oauth_token: oauth_secret:}
-         */
-        this.setTokensAndSecrets = function(signatures) {
-            if (signatures)
-            {
-                for (var i in signatures) {
-                    this._secrets[i] = signatures[i];
-                    }
-            }
-            // Aliases
-            if (this._secrets['api_key']) {
-                this._secrets.consumer_key = this._secrets.api_key;
-                }
-            if (this._secrets['access_token']) {
-                this._secrets.oauth_token = this._secrets.access_token;
-                }
-            if (this._secrets['access_secret']) {
-                this._secrets.oauth_secret = this._secrets.access_secret;
-                }
-            // Gauntlet
-            if (this._secrets.consumer_key === undefined) {
-                throw('Missing required consumer_key in OAuthSimple.setTokensAndSecrets');
-                }
-            if (this._secrets.shared_secret === undefined) {
-                throw('Missing required shared_secret in OAuthSimple.setTokensAndSecrets');
-                }
-            if ((this._secrets.oauth_token !== undefined) && (this._secrets.oauth_secret === undefined)) {
-                throw('Missing oauth_secret for supplied oauth_token in OAuthSimple.setTokensAndSecrets');
-                }
-            return this;
-        };
-
-        /** set the signature method (currently only Plaintext or SHA-MAC1)
-         *
-         * @param method {string} Method of signing the transaction (only PLAINTEXT and SHA-MAC1 allowed for now)
-         */
-        this.setSignatureMethod = function(method) {
-            if (method === undefined) {
-                method = this._default_signature_method;
-                }
-            //TODO: accept things other than PlainText or SHA-MAC1
-            if (method.toUpperCase().match(/(PLAINTEXT|HMAC-SHA1)/) === undefined) {
-                throw ('Unknown signing method specified for OAuthSimple.setSignatureMethod');
-                }
-            this._parameters['oauth_signature_method']= method.toUpperCase();
-            return this;
-        };
-
-        /** sign the request
-         *
-         * note: all arguments are optional, provided you've set them using the
-         * other helper functions.
-         *
-         * @param args {object} hash of arguments for the call
-         *                   {action:, path:, parameters:, method:, signatures:}
-         *                   all arguments are optional.
-         */
-        this.sign = function (args) {
-            if (args === undefined) {
-                args = {};
-                }
-            // Set any given parameters
-            if(args['action'] !== undefined) {
-                this.setAction(args['action']);
-                }
-            if (args['path'] !== undefined) {
-                this.setPath(args['path']);
-                }
-            if (args['method'] !== undefined) {
-                this.setSignatureMethod(args['method']);
-                }
-            this.setTokensAndSecrets(args['signatures']);
-            if (args['parameters'] !== undefined){
-            this.setParameters(args['parameters']);
-            }
-            // check the parameters
-            var normParams = this._normalizedParameters();
-            this._parameters['oauth_signature']=this._generateSignature(normParams);
-            return {
-                parameters: this._parameters,
-                signature: this._oauthEscape(this._parameters['oauth_signature']),
-                signed_url: this._path + '?' + this._normalizedParameters(),
-                header: this.getHeaderString()
-            };
-        };
-
-        /** Return a formatted "header" string
-         *
-         * NOTE: This doesn't set the "Authorization: " prefix, which is required.
-         * I don't set it because various set header functions prefer different
-         * ways to do that.
-         *
-         * @param args {object} see .sign
-         */
-        this.getHeaderString = function(args) {
-            if (this._parameters['oauth_signature'] === undefined) {
-                this.sign(args);
-                }
-
-            var result = 'OAuth ';
-            for (var pName in this._parameters)
-            {
-                if (!pName.match(/^oauth/)) {
-                    continue;
-                    }
-                if ((this._parameters[pName]) instanceof Array)
-                {
-                    var pLength = this._parameters[pName].length;
-                    for (var j=0;j<pLength;j++)
-                    {
-                        result += pName +'="'+this._oauthEscape(this._parameters[pName][j])+'" ';
-                    }
-                }
-                else
-                {
-                    result += pName + '="'+this._oauthEscape(this._parameters[pName])+'" ';
-                }
-            }
-            return result;
-        };
-
-        // Start Private Methods.
-
-        /** convert the parameter string into a hash of objects.
-         *
-         */
-        this._parseParameterString = function(paramString){
-            var elements = paramString.split('&');
-            var result={};
-            for(var element=elements.shift();element;element=elements.shift())
-            {
-                var keyToken=element.split('=');
-                var value='';
-                if (keyToken[1]) {
-                    value=decodeURIComponent(keyToken[1]);
-                    }
-                if(result[keyToken[0]]){
-                    if (!(result[keyToken[0]] instanceof Array))
-                    {
-                        result[keyToken[0]] = Array(result[keyToken[0]],value);
-                    }
-                    else
-                    {
-                        result[keyToken[0]].push(value);
-                    }
-                }
-                else
-                {
-                    result[keyToken[0]]=value;
-                }
-            }
-            return result;
-        };
-
-        this._oauthEscape = function(string) {
-            if (string === undefined) {
-                return "";
-                }
-            if (string instanceof Array)
-            {
-                throw('Array passed to _oauthEscape');
-            }
-            return encodeURIComponent(string).replace(/\!/g, "%21").
-            replace(/\*/g, "%2A").
-            replace(/'/g, "%27").
-            replace(/\(/g, "%28").
-            replace(/\)/g, "%29");
-        };
-
-        this._getNonce = function (length) {
-            if (length === undefined) {
-                length=5;
-                }
-            var result = "";
-            var cLength = this._nonce_chars.length;
-            for (var i = 0; i < length;i++) {
-                var rnum = Math.floor(Math.random() *cLength);
-                result += this._nonce_chars.substring(rnum,rnum+1);
-            }
-            this._parameters['oauth_nonce']=result;
-            return result;
-        };
-
-        this._getApiKey = function() {
-            if (this._secrets.consumer_key === undefined) {
-                throw('No consumer_key set for OAuthSimple.');
-                }
-            this._parameters['oauth_consumer_key']=this._secrets.consumer_key;
-            return this._parameters.oauth_consumer_key;
-        };
-
-        this._getAccessToken = function() {
-            if (this._secrets['oauth_secret'] === undefined) {
-                return '';
-                }
-            if (this._secrets['oauth_token'] === undefined) {
-                throw('No oauth_token (access_token) set for OAuthSimple.');
-                }
-            this._parameters['oauth_token'] = this._secrets.oauth_token;
-            return this._parameters.oauth_token;
-        };
-
-        this._getTimestamp = function() {
-            var d = new Date();
-            var ts = Math.floor(d.getTime()/1000);
-            this._parameters['oauth_timestamp'] = ts;
-            return ts;
-        };
-
-        this.b64_hmac_sha1 = function(k,d,_p,_z){
-        // heavily optimized and compressed version of http://pajhome.org.uk/crypt/md5/sha1.js
-        // _p = b64pad, _z = character size; not used here but I left them available just in case
-        if(!_p){_p='=';}if(!_z){_z=8;}function _f(t,b,c,d){if(t<20){return(b&c)|((~b)&d);}if(t<40){return b^c^d;}if(t<60){return(b&c)|(b&d)|(c&d);}return b^c^d;}function _k(t){return(t<20)?1518500249:(t<40)?1859775393:(t<60)?-1894007588:-899497514;}function _s(x,y){var l=(x&0xFFFF)+(y&0xFFFF),m=(x>>16)+(y>>16)+(l>>16);return(m<<16)|(l&0xFFFF);}function _r(n,c){return(n<<c)|(n>>>(32-c));}function _c(x,l){x[l>>5]|=0x80<<(24-l%32);x[((l+64>>9)<<4)+15]=l;var w=[80],a=1732584193,b=-271733879,c=-1732584194,d=271733878,e=-1009589776;for(var i=0;i<x.length;i+=16){var o=a,p=b,q=c,r=d,s=e;for(var j=0;j<80;j++){if(j<16){w[j]=x[i+j];}else{w[j]=_r(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);}var t=_s(_s(_r(a,5),_f(j,b,c,d)),_s(_s(e,w[j]),_k(j)));e=d;d=c;c=_r(b,30);b=a;a=t;}a=_s(a,o);b=_s(b,p);c=_s(c,q);d=_s(d,r);e=_s(e,s);}return[a,b,c,d,e];}function _b(s){var b=[],m=(1<<_z)-1;for(var i=0;i<s.length*_z;i+=_z){b[i>>5]|=(s.charCodeAt(i/8)&m)<<(32-_z-i%32);}return b;}function _h(k,d){var b=_b(k);if(b.length>16){b=_c(b,k.length*_z);}var p=[16],o=[16];for(var i=0;i<16;i++){p[i]=b[i]^0x36363636;o[i]=b[i]^0x5C5C5C5C;}var h=_c(p.concat(_b(d)),512+d.length*_z);return _c(o.concat(h),512+160);}function _n(b){var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s='';for(var i=0;i<b.length*4;i+=3){var r=(((b[i>>2]>>8*(3-i%4))&0xFF)<<16)|(((b[i+1>>2]>>8*(3-(i+1)%4))&0xFF)<<8)|((b[i+2>>2]>>8*(3-(i+2)%4))&0xFF);for(var j=0;j<4;j++){if(i*8+j*6>b.length*32){s+=_p;}else{s+=t.charAt((r>>6*(3-j))&0x3F);}}}return s;}function _x(k,d){return _n(_h(k,d));}return _x(k,d);
-        }
-
-
-        this._normalizedParameters = function() {
-            var elements = new Array();
-            var paramNames = [];
-            var ra =0;
-            for (var paramName in this._parameters)
-            {
-                if (ra++ > 1000) {
-                    throw('runaway 1');
-                    }
-                paramNames.unshift(paramName);
-            }
-            paramNames = paramNames.sort();
-            pLen = paramNames.length;
-            for (var i=0;i<pLen; i++)
-            {
-                paramName=paramNames[i];
-                //skip secrets.
-                if (paramName.match(/\w+_secret/)) {
-                    continue;
-                    }
-                if (this._parameters[paramName] instanceof Array)
-                {
-                    var sorted = this._parameters[paramName].sort();
-                    var spLen = sorted.length;
-                    for (var j = 0;j<spLen;j++){
-                        if (ra++ > 1000) {
-                            throw('runaway 1');
-                            }
-                        elements.push(this._oauthEscape(paramName) + '=' +
-                                  this._oauthEscape(sorted[j]));
-                    }
-                    continue;
-                }
-                elements.push(this._oauthEscape(paramName) + '=' +
-                              this._oauthEscape(this._parameters[paramName]));
-            }
-            return elements.join('&');
-        };
-
-        this._generateSignature = function() {
-
-            var secretKey = this._oauthEscape(this._secrets.shared_secret)+'&'+
-                this._oauthEscape(this._secrets.oauth_secret);
-            if (this._parameters['oauth_signature_method'] == 'PLAINTEXT')
-            {
-                return secretKey;
-            }
-            if (this._parameters['oauth_signature_method'] == 'HMAC-SHA1')
-            {
-                var sigString = this._oauthEscape(this._action)+'&'+this._oauthEscape(this._path)+'&'+this._oauthEscape(this._normalizedParameters());
-                return this.b64_hmac_sha1(secretKey,sigString);
-            }
-            return null;
-        };
-
-    return this;
-    };
-}
diff --git a/clients/chrome/clip-it-good/icon128.png b/clients/chrome/clip-it-good/icon128.png
deleted file mode 100644
index 532f35b..0000000
--- a/clients/chrome/clip-it-good/icon128.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/icon19.png b/clients/chrome/clip-it-good/icon19.png
deleted file mode 100644
index 62ee274..0000000
--- a/clients/chrome/clip-it-good/icon19.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/icon48.png b/clients/chrome/clip-it-good/icon48.png
deleted file mode 100644
index 5b330be..0000000
--- a/clients/chrome/clip-it-good/icon48.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/clients/chrome/clip-it-good/images/ui-bg_diagonals-thick_18_b81900_40x40.png
deleted file mode 100755
index 29460f0..0000000
--- a/clients/chrome/clip-it-good/images/ui-bg_diagonals-thick_18_b81900_40x40.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/images/ui-bg_diagonals-thick_20_666666_40x40.png b/clients/chrome/clip-it-good/images/ui-bg_diagonals-thick_20_666666_40x40.png
deleted file mode 100755
index 64ece57..0000000
--- a/clients/chrome/clip-it-good/images/ui-bg_diagonals-thick_20_666666_40x40.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/images/ui-bg_flat_10_000000_40x100.png b/clients/chrome/clip-it-good/images/ui-bg_flat_10_000000_40x100.png
deleted file mode 100755
index abdc010..0000000
--- a/clients/chrome/clip-it-good/images/ui-bg_flat_10_000000_40x100.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/images/ui-bg_glass_100_f6f6f6_1x400.png b/clients/chrome/clip-it-good/images/ui-bg_glass_100_f6f6f6_1x400.png
deleted file mode 100755
index 9b383f4..0000000
--- a/clients/chrome/clip-it-good/images/ui-bg_glass_100_f6f6f6_1x400.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/images/ui-bg_glass_100_fdf5ce_1x400.png b/clients/chrome/clip-it-good/images/ui-bg_glass_100_fdf5ce_1x400.png
deleted file mode 100755
index a23baad..0000000
--- a/clients/chrome/clip-it-good/images/ui-bg_glass_100_fdf5ce_1x400.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/images/ui-bg_glass_65_ffffff_1x400.png b/clients/chrome/clip-it-good/images/ui-bg_glass_65_ffffff_1x400.png
deleted file mode 100755
index 42ccba2..0000000
--- a/clients/chrome/clip-it-good/images/ui-bg_glass_65_ffffff_1x400.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/clients/chrome/clip-it-good/images/ui-bg_gloss-wave_35_f6a828_500x100.png
deleted file mode 100755
index 39d5824..0000000
--- a/clients/chrome/clip-it-good/images/ui-bg_gloss-wave_35_f6a828_500x100.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/clients/chrome/clip-it-good/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
deleted file mode 100755
index f127367..0000000
--- a/clients/chrome/clip-it-good/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/clients/chrome/clip-it-good/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
deleted file mode 100755
index 359397a..0000000
--- a/clients/chrome/clip-it-good/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/images/ui-icons_222222_256x240.png b/clients/chrome/clip-it-good/images/ui-icons_222222_256x240.png
deleted file mode 100755
index b273ff1..0000000
--- a/clients/chrome/clip-it-good/images/ui-icons_222222_256x240.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/images/ui-icons_228ef1_256x240.png b/clients/chrome/clip-it-good/images/ui-icons_228ef1_256x240.png
deleted file mode 100755
index a641a37..0000000
--- a/clients/chrome/clip-it-good/images/ui-icons_228ef1_256x240.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/images/ui-icons_ef8c08_256x240.png b/clients/chrome/clip-it-good/images/ui-icons_ef8c08_256x240.png
deleted file mode 100755
index 85e63e9..0000000
--- a/clients/chrome/clip-it-good/images/ui-icons_ef8c08_256x240.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/images/ui-icons_ffd27a_256x240.png b/clients/chrome/clip-it-good/images/ui-icons_ffd27a_256x240.png
deleted file mode 100755
index d9dc509..0000000
--- a/clients/chrome/clip-it-good/images/ui-icons_ffd27a_256x240.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/images/ui-icons_ffffff_256x240.png b/clients/chrome/clip-it-good/images/ui-icons_ffffff_256x240.png
deleted file mode 100755
index 42f8f99..0000000
--- a/clients/chrome/clip-it-good/images/ui-icons_ffffff_256x240.png
+++ /dev/null
Binary files differ
diff --git a/clients/chrome/clip-it-good/jquery-1.4.2.min.js b/clients/chrome/clip-it-good/jquery-1.4.2.min.js
deleted file mode 100644
index 7c24308..0000000
--- a/clients/chrome/clip-it-good/jquery-1.4.2.min.js
+++ /dev/null
@@ -1,154 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.4.2
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Sat Feb 13 22:33:48 2010 -0500
- */
-(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
-e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
-j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
-"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
-true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
-Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
-(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
-a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
-"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
-function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
-c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
-L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
-"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
-a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
-d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
-a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
-!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
-true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
-parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
-false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
-s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
-applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
-else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
-a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
-w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
-cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
-i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
-" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
-this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
-e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
-c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
-a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
-function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
-k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
-C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
-null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
-e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
-f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
-if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
-"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
-a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
-isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
-{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
-if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
-e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
-"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
-d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
-!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
-toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
-u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.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".split(" "),
-function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
-if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
-t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
-g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
-for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
-1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
-CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
-relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
-l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
-h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
-CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
-g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
-text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
-setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
-h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
-m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
-"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
-h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
-!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
-h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
-q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
-if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
-(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
-function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
-gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
-c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
-{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
-"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
-d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
-a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
-1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
-a:b+"></"+d+">"},F={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,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
-""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
-this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
-u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
-1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
-return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
-""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
-c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
-c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
-function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
-Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
-"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
-a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
-a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
-"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
-serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
-function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
-global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
-e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
-"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
-false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
-false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
-c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
-d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
-g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
-1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
-"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
-if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
-this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
-"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
-animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
-j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
-this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
-"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
-c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
-this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
-this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
-e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
-c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
-function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
-this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
-k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
-f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
-c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
-d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
-"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
-e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
diff --git a/clients/chrome/clip-it-good/jquery-ui-1.8.5.custom.css b/clients/chrome/clip-it-good/jquery-ui-1.8.5.custom.css
deleted file mode 100755
index 11ede67..0000000
--- a/clients/chrome/clip-it-good/jquery-ui-1.8.5.custom.css
+++ /dev/null
@@ -1,572 +0,0 @@
-/*
- * jQuery UI CSS Framework @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-/*
- * jQuery UI CSS Framework @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
-.ui-widget-content a { color: #333333; }
-.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
-.ui-widget-header a { color: #ffffff; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-right {  -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
-
-/* Overlays */
-.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
-.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
- * jQuery UI Resizable @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
- * jQuery UI Selectable @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectable#theming
- */
-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
-/*
- * jQuery UI Accordion @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion#theming
- */
-/* IE/Win - Fix animation bug - #4615 */
-.ui-accordion { width: 100%; }
-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
-.ui-accordion .ui-accordion-li-fix { display: inline; }
-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
-.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
-.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
-.ui-accordion .ui-accordion-content-active { display: block; }/*
- * jQuery UI Autocomplete @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete#theming
- */
-.ui-autocomplete { position: absolute; cursor: default; }	
-
-/* workarounds */
-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
-
-/*
- * jQuery UI Menu @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-.ui-menu {
-	list-style:none;
-	padding: 2px;
-	margin: 0;
-	display:block;
-	float: left;
-}
-.ui-menu .ui-menu {
-	margin-top: -3px;
-}
-.ui-menu .ui-menu-item {
-	margin:0;
-	padding: 0;
-	zoom: 1;
-	float: left;
-	clear: left;
-	width: 100%;
-}
-.ui-menu .ui-menu-item a {
-	text-decoration:none;
-	display:block;
-	padding:.2em .4em;
-	line-height:1.5;
-	zoom:1;
-}
-.ui-menu .ui-menu-item a.ui-state-hover,
-.ui-menu .ui-menu-item a.ui-state-active {
-	font-weight: normal;
-	margin: -1px;
-}
-/*
- * jQuery UI Button @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button#theming
- */
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; } 
-button.ui-button-icons-only { width: 3.7em; } 
-
-/*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4;  }
-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
-/* no icon support for input elements, provide padding by default */
-input.ui-button { padding: .4em 1em; }
-
-/*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-
-/*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
-
-/* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
-/*
- * jQuery UI Dialog @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog#theming
- */
-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
-.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative;  }
-.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } 
-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
-.ui-draggable .ui-dialog-titlebar { cursor: move; }
-/*
- * jQuery UI Slider @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider#theming
- */
-.ui-slider { position: relative; text-align: left; }
-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
- * jQuery UI Tabs @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs#theming
- */
-.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
-.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
-.ui-tabs .ui-tabs-hide { display: none !important; }
-/*
- * jQuery UI Datepicker @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker#theming
- */
-.ui-datepicker { width: 17em; padding: .2em .2em 0; }
-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
-.ui-datepicker .ui-datepicker-prev { left:2px; }
-.ui-datepicker .ui-datepicker-next { right:2px; }
-.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
-.ui-datepicker .ui-datepicker-next-hover { right:1px; }
-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
-.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
-.ui-datepicker select.ui-datepicker-month, 
-.ui-datepicker select.ui-datepicker-year { width: 49%;}
-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
-.ui-datepicker td { border: 0; padding: 1px; }
-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi { width:auto; }
-.ui-datepicker-multi .ui-datepicker-group { float:left; }
-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
-.ui-datepicker-row-break { clear:both; width:100%; }
-
-/* RTL support */
-.ui-datepicker-rtl { direction: rtl; }
-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
-    display: none; /*sorry for IE5*/
-    display/**/: block; /*sorry for IE5*/
-    position: absolute; /*must have*/
-    z-index: -1; /*must have*/
-    filter: mask(); /*must have*/
-    top: -4px; /*must have*/
-    left: -4px; /*must have*/
-    width: 200px; /*must have*/
-    height: 200px; /*must have*/
-}/*
- * jQuery UI Progressbar @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar#theming
- */
-.ui-progressbar { height:2em; text-align: left; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
diff --git a/clients/chrome/clip-it-good/jquery-ui-1.8.5.custom.min.js b/clients/chrome/clip-it-good/jquery-ui-1.8.5.custom.min.js
deleted file mode 100755
index 827b5f0..0000000
--- a/clients/chrome/clip-it-good/jquery-ui-1.8.5.custom.min.js
+++ /dev/null
@@ -1,778 +0,0 @@
-/*!
- * jQuery UI 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.5",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,
-NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,
-"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");
-if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"));if(!isNaN(b)&&b!=0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind("mousedown.ui-disableSelection selectstart.ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,
-"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c.style(this,h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c.style(this,
-h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}});
-c(function(){var a=document.createElement("div"),b=document.body;c.extend(a.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.appendChild(a).offsetHeight===100;b.removeChild(a).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,
-d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
-;/*!
- * jQuery UI Widget 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
-a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)===
-"_")return h;e?this.each(function(){var g=b.data(this,a);if(!g)throw"cannot call methods on "+a+" prior to initialization; attempted to call method '"+d+"'";if(!b.isFunction(g[d]))throw"no such method '"+d+"' for "+a+" widget instance";var i=g[d].apply(g,f);if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",
-widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
-"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}b.each(d,function(f,h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",
-false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
-;/*!
- * jQuery UI Mouse 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- *	jquery.ui.widget.js
- */
-(function(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(a._preventClickEvent){a._preventClickEvent=false;b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&&
-this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();
-return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.browser.safari||a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&
-this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=a.target==this._mouseDownEvent.target;this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-
-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
-;/*
- * jQuery UI Position 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */
-(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.scrollTo&&d.document){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j=
-{top:b.of.pageY,left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/
-2;if(b.at[1]==="bottom")j.top+=k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+parseInt(c.curCSS(this,"marginRight",true))||0,w=m+q+parseInt(c.curCSS(this,"marginBottom",true))||0,i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]===
-"center")i.top-=m/2;i.left=parseInt(i.left);i.top=parseInt(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();
-b.left=d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];
-b.left+=a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=
-c(b),g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
-;/*
- * jQuery UI Draggable 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Draggables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
-"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
-this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-
-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();
-d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||
-this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if(!this.element[0]||!this.element[0].parentNode)return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,
-b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==
-a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||
-0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
-this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-
-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment==
-"parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&
-a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),
-10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
-this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():
-f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])e=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+
-this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;e=this.originalPageX+
-Math.round((e-this.originalPageX)/b.grid[0])*b.grid[0];e=this.containment?!(e-this.offset.click.left<this.containment[0]||e-this.offset.click.left>this.containment[2])?e:!(e-this.offset.click.left<this.containment[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-
-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=
-this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.5"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var g=d.data(this,"sortable");
-if(g&&!g.options.disabled){c.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;
-c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=
-1;this.instance.currentItem=d(f).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;
-this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=
-this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","iframeFix",{start:function(){var a=
-d(this).data("draggable").options;d(a.iframeFix===true?"iframe":a.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})},stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;
-if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!=
-"HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-
-b.overflowOffset.left<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-
-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,
-width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,g=b.offset.left,n=g+c.helperProportions.width,m=b.offset.top,o=m+c.helperProportions.height,h=c.snapElements.length-1;h>=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e<g&&g<k+e&&j-e<m&&m<l+e||i-e<g&&g<k+e&&j-e<o&&o<l+e||i-e<n&&n<k+e&&j-e<m&&m<l+e||i-e<n&&n<k+e&&j-e<o&&
-o<l+e){if(f.snapMode!="inner"){var p=Math.abs(j-o)<=e,q=Math.abs(l-m)<=e,r=Math.abs(i-n)<=e,s=Math.abs(k-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k}).left-c.margins.left}var t=
-p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(j-m)<=e;q=Math.abs(l-o)<=e;r=Math.abs(i-g)<=e;s=Math.abs(k-n)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[h].snapping&&
-(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=p||q||r||s||t}else{c.snapElements[h].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),
-10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
-;/*
- * jQuery UI Droppable 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Droppables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- *	jquery.ui.mouse.js
- *	jquery.ui.draggable.js
- */
-(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
-a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
-this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
-this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
-d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
-a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.5"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
-switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
-i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
-"none";if(c[f].visible){c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight};e=="mousedown"&&c[f]._activate.call(c[f],b)}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
-a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=
-d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})}}})(jQuery);
-;/*
- * jQuery UI Resizable 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
-_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
-top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
-this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
-nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
-String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
-this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){e(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};
-if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),
-d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=
-this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:
-this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",
-b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;
-f={width:c.size.width-(f?0:c.sizeDiff.width),height:c.size.height-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",
-b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=
-a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=l(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=l(b.width)&&a.minWidth&&a.minWidth>b.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,
-k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),
-c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=
-this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+
-a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,
-arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,
-{version:"1.8.5"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,
-function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=
-(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=
-false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-
-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",
-b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top",
-"Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,
-f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=
-a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+
-a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&
-e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",
-height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=
-d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
-;/*
- * jQuery UI Selectable 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
-selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
-c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
-c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
-this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
-a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
-!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
-e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.5"})})(jQuery);
-;/*
- * jQuery UI Sortable 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Sortables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){this.containerCache={};this.element.addClass("ui-sortable");
-this.refresh();this.floating=this.items.length?/left|right/.test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a==="disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,
-arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=
-c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,
-{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();
-if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",
-a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");
-if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+
-this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+
-b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+
-"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,
-c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==
-document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp();this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",
-null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):
-d(this.domPosition.parent).prepend(this.currentItem);return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||
-"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+
-this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?
-2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},
-_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=
-this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=
-this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");
-if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=
-0;b--){var c=this.items[b],e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=
-this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},
-update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=
-null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));
-this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,
-null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||
-d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a==
-"string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition==
-"absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition==
-"relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},
-_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-
-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),
-10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?
-this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=
-this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+
-this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?
-g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():
-e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==
-f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem[0].parentNode&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",
-f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",
-g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=
-0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
-this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});
-d.extend(d.ui.sortable,{version:"1.8.5"})})(jQuery);
-;/*
- * jQuery UI Accordion 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- */
-(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");
-a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
-if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var f=d.closest(".ui-accordion-header");a.active=f.length?f:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",function(g){return a._keydown(g)}).next().attr("role",
-"tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(g){a._clickHandler.call(a,g,this);g.preventDefault()})},_createIcons:function(){var a=this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+a.icons.header).prependTo(this.headers);
-this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabIndex");
-this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();
-b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,f=this.headers.index(a.target),g=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:g=this.headers[(f+1)%d];break;case b.LEFT:case b.UP:g=this.headers[(f-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);
-a.preventDefault()}if(g){c(a.target).attr("tabIndex",-1);c(g).attr("tabIndex",0);g.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+
-c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;
-if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);
-a.next().addClass("ui-accordion-content-active")}h=a.next();f=this.active.next();g={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):h,oldContent:f};d=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(h,f,g,b,d)}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
-this.active.next().addClass("ui-accordion-content-active");var f=this.active.next(),g={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:f},h=this.active=c([]);this._toggle(h,f,g)}},_toggle:function(a,b,d,f,g){var h=this,e=h.options;h.toShow=a;h.toHide=b;h.data=d;var j=function(){if(h)return h._completed.apply(h,arguments)};h._trigger("changestart",null,h.data);h.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&f?{toShow:c([]),toHide:b,complete:j,
-down:g,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:g,autoHeight:e.autoHeight||e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;f=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!f[k]&&!c.easing[k])k="slide";f[k]||(f[k]=function(l){this.slide(l,{easing:k,duration:i||700})});
-f[k](d)}else{if(e.collapsible&&f)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.5",animations:{slide:function(a,
-b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),f=0,g={},h={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){h[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);g[i]={value:j[1],
-unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(h,{step:function(j,i){if(i.prop=="height")f=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=f*g[i.prop].value+g[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",paddingTop:"hide",
-paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
-;/*
- * jQuery UI Autocomplete 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- *	jquery.ui.position.js
- */
-(function(e){e.widget("ui.autocomplete",{options:{appendTo:"body",delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},_create:function(){var a=this,b=this.element[0].ownerDocument;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!a.options.disabled){var d=e.ui.keyCode;switch(c.keyCode){case d.PAGE_UP:a._move("previousPage",
-c);break;case d.PAGE_DOWN:a._move("nextPage",c);break;case d.UP:a._move("previous",c);c.preventDefault();break;case d.DOWN:a._move("next",c);c.preventDefault();break;case d.ENTER:case d.NUMPAD_ENTER:a.menu.element.is(":visible")&&c.preventDefault();case d.TAB:if(!a.menu.active)return;a.menu.select(c);break;case d.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);
-break}}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};this.menu=e("<ul></ul>").addClass("ui-autocomplete").appendTo(e(this.options.appendTo||"body",b)[0]).mousedown(function(c){var d=a.menu.element[0];
-c.target===d&&setTimeout(function(){e(document).one("mousedown",function(f){f.target!==a.element[0]&&f.target!==d&&!e.ui.contains(d,f.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,d){d=d.item.data("item.autocomplete");false!==a._trigger("focus",null,{item:d})&&/^key/.test(c.originalEvent.type)&&a.element.val(d.value)},selected:function(c,d){d=d.item.data("item.autocomplete");var f=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();
-a.previous=f}if(false!==a._trigger("select",c,{item:d})){a.term=d.value;a.element.val(d.value)}a.close(c);a.selectedItem=d},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");e.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");
-this.menu.element.remove();e.Widget.prototype.destroy.call(this)},_setOption:function(a,b){e.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(e(b||"body",this.element[0].ownerDocument)[0])},_initSource:function(){var a=this,b,c;if(e.isArray(this.options.source)){b=this.options.source;this.source=function(d,f){f(e.ui.autocomplete.filter(b,d.term))}}else if(typeof this.options.source==="string"){c=this.options.source;this.source=
-function(d,f){a.xhr&&a.xhr.abort();a.xhr=e.getJSON(c,d,function(g,i,h){h===a.xhr&&f(g);a.xhr=null})}}else this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search")!==false)return this._search(a)},_search:function(a){this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(a.length){a=
-this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this._trigger("close",a);this.menu.element.hide();this.menu.deactivate()}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return e.map(a,function(b){if(typeof b===
-"string")return{label:b,value:b};return e.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1),c;this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();this.menu.element.show().position(e.extend({of:this.element},this.options.position));a=b.width("").outerWidth();c=this.element.outerWidth();b.outerWidth(Math.max(a,c))},_renderMenu:function(a,b){var c=this;e.each(b,function(d,f){c._renderItem(a,f)})},
-_renderItem:function(a,b){return e("<li></li>").data("item.autocomplete",b).append(e("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});e.extend(e.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},
-filter:function(a,b){var c=new RegExp(e.ui.autocomplete.escapeRegex(b),"i");return e.grep(a,function(d){return c.test(d.label||d.value||d)})}})})(jQuery);
-(function(e){e.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(b){if(e(b.target).closest(".ui-menu-item a").length){b.preventDefault();a.select(b)}});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
--1).mouseenter(function(b){a.activate(b,e(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.attr("scrollTop"),f=this.element.height();if(c<0)this.element.attr("scrollTop",d+c);else c>=f&&this.element.attr("scrollTop",d+c-f+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",a,{item:b})},
-deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");this._trigger("blur");this.active=null}},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(this.active){a=this.active[a+"All"](".ui-menu-item").eq(0);
-a.length?this.activate(c,a):this.activate(c,this.element.children(b))}else this.activate(c,this.element.children(b))},nextPage:function(a){if(this.hasScroll())if(!this.active||this.last())this.activate(a,this.element.children(":first"));else{var b=this.active.offset().top,c=this.element.height(),d=this.element.children("li").filter(function(){var f=e(this).offset().top-b-c+e(this).height();return f<10&&f>-10});d.length||(d=this.element.children(":last"));this.activate(a,d)}else this.activate(a,this.element.children(!this.active||
-this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(":last"));else{var b=this.active.offset().top,c=this.element.height();result=this.element.children("li").filter(function(){var d=e(this).offset().top-b+c-e(this).height();return d<10&&d>-10});result.length||(result=this.element.children(":first"));this.activate(a,result)}else this.activate(a,this.element.children(!this.active||this.first()?":last":":first"))},
-hasScroll:function(){return this.element.height()<this.element.attr("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})})(jQuery);
-;/*
- * jQuery UI Button 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- */
-(function(a){var g,i=function(b){a(":ui-button",b.target.form).each(function(){var c=a(this).data("button");setTimeout(function(){c.refresh()},1)})},h=function(b){var c=b.name,d=b.form,e=a([]);if(c)e=d?a(d).find("[name='"+c+"']"):a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form});return e};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",
-i);if(typeof this.options.disabled!=="boolean")this.options.disabled=this.element.attr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,c=this.options,d=this.type==="checkbox"||this.type==="radio",e="ui-state-hover"+(!d?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",
-function(){if(!c.disabled){a(this).addClass("ui-state-hover");this===g&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||a(this).removeClass(e)}).bind("focus.button",function(){a(this).addClass("ui-state-focus")}).bind("blur.button",function(){a(this).removeClass("ui-state-focus")});d&&this.element.bind("change.button",function(){b.refresh()});if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).toggleClass("ui-state-active");
-b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed",true);var f=b.element[0];h(f).not(f).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");
-g=this;a(document).one("mouseup",function(){g=null})}).bind("mouseup.button",function(){if(c.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(f){if(c.disabled)return false;if(f.keyCode==a.ui.keyCode.SPACE||f.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(f){f.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",
-c.disabled)},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type==="radio"){this.buttonElement=this.element.parents().last().find("label[for="+this.element.attr("id")+"]");this.element.addClass("ui-helper-hidden-accessible");var b=this.element.is(":checked");b&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=
-this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active  ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||
-this.buttonElement.removeAttr("title");a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")c?this.element.attr("disabled",true):this.element.removeAttr("disabled");this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")h(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
-true):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
-c=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary;if(d.primary||d.secondary){b.addClass("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>");d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>");if(!this.options.text){b.addClass(e?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary");
-this.hasTitle||b.attr("title",c)}}else b.addClass("ui-button-text-only")}}});a.widget("ui.buttonset",{_create:function(){this.element.addClass("ui-buttonset");this._init()},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(":button, :submit, :reset, :checkbox, :radio, a, :data(button)").filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":visible").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end().end()},
-destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery);
-;/*
- * jQuery UI Dialog 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- *  jquery.ui.button.js
- *	jquery.ui.draggable.js
- *	jquery.ui.mouse.js
- *	jquery.ui.position.js
- *	jquery.ui.resizable.js
- */
-(function(c,j){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");
-if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||"&#160;",f=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog",
-"aria-labelledby":f}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var e=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);
-return false}).appendTo(e);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",f).html(d).prependTo(e);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;e.find("*").add(e).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&
-g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");
-b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,f=d.options;if(f.modal&&!a||!f.stack&&!f.modal)return d._trigger("focus",b);if(f.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=
-f.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show);
-a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(f){if(f.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),e=g.filter(":first");g=g.filter(":last");if(f.target===g[0]&&!f.shiftKey){e.focus(1);return false}else if(f.target===e[0]&&f.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,
-f=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(f);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(e,h){h=c.isFunction(h)?{click:h,text:e}:h;e=c("<button></button>",h).unbind("click").click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&e.button()});f.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(e){return{position:e.position,
-offset:e.offset}}var b=this,d=b.options,f=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(e,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",e,a(h))},drag:function(e,h){b._trigger("drag",e,a(h))},stop:function(e,h){d.position=[h.position.left-f.scrollLeft(),h.position.top-f.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);
-b._trigger("dragStop",e,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}a=a===j?this.options.resizable:a;var d=this,f=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:d._minHeight(),
-handles:a,start:function(e,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",e,b(h))},resize:function(e,h){d._trigger("resize",e,b(h))},stop:function(e,h){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();d._trigger("resizeStop",e,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,
-a.height)},_position:function(a){var b=[],d=[0,0],f;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,e){if(+b[g]===b[g]){d[g]=b[g];b[g]=e}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a);
-f||this.uiDialog.hide()},_setOption:function(a,b){var d=this,f=d.uiDialog,g=f.is(":data(resizable)"),e=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);e=true;break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":f.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case "draggable":b?
-d._makeDraggable():f.draggable("destroy");break;case "height":e=true;break;case "maxHeight":g&&f.resizable("option","maxHeight",b);e=true;break;case "maxWidth":g&&f.resizable("option","maxWidth",b);e=true;break;case "minHeight":g&&f.resizable("option","minHeight",b);e=true;break;case "minWidth":g&&f.resizable("option","minWidth",b);e=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&f.resizable("destroy");g&&typeof b==="string"&&f.resizable("option","handles",b);!g&&b!==false&&
-d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||"&#160;"));break;case "width":e=true;break}c.Widget.prototype._setOption.apply(d,arguments);e&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:c.support.minHeight?"auto":Math.max(a.minHeight-
-b,0)}:{minHeight:0,height:Math.max(a.height-b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.5",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),
-function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=
-(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,
-b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<
-b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
-;/*
- * jQuery UI Slider 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var a=this,b=this.options;this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");b.disabled&&this.element.addClass("ui-slider-disabled ui-disabled");
-this.range=d([]);if(b.range){if(b.range===true){this.range=d("<div></div>");if(!b.values)b.values=[this._valueMin(),this._valueMin()];if(b.values.length&&b.values.length!==2)b.values=[b.values[0],b.values[0]]}else this.range=d("<div></div>");this.range.appendTo(this.element).addClass("ui-slider-range");if(b.range==="min"||b.range==="max")this.range.addClass("ui-slider-range-"+b.range);this.range.addClass("ui-widget-header")}d(".ui-slider-handle",this.element).length===0&&d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");
-if(b.values&&b.values.length)for(;d(".ui-slider-handle",this.element).length<b.values.length;)d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");this.handles=d(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(c){c.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur();
-else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(c){d(this).data("index.ui-slider-handle",c)});this.handles.keydown(function(c){var e=true,f=d(this).data("index.ui-slider-handle"),h,g,i;if(!a.options.disabled){switch(c.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:e=
-false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");h=a._start(c,f);if(h===false)return}break}i=a.options.step;h=a.options.values&&a.options.values.length?(g=a.values(f)):(g=a.value());switch(c.keyCode){case d.ui.keyCode.HOME:g=a._valueMin();break;case d.ui.keyCode.END:g=a._valueMax();break;case d.ui.keyCode.PAGE_UP:g=a._trimAlignValue(h+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:g=a._trimAlignValue(h-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(h===
-a._valueMax())return;g=a._trimAlignValue(h+i);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(h===a._valueMin())return;g=a._trimAlignValue(h-i);break}a._slide(c,f,g);return e}}).keyup(function(c){var e=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(c,e);a._change(c,e);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");
-this._mouseDestroy();return this},_mouseCapture:function(a){var b=this.options,c,e,f,h,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});e=this._valueMax()-this._valueMin()+1;h=this;this.handles.each(function(i){var j=Math.abs(c-h.values(i));if(e>j){e=j;f=d(this);g=i}});if(b.range===true&&this.values(1)===b.min){g+=1;f=d(this.handles[g])}if(this._start(a,
-g)===false)return false;this._mouseSliding=true;h._handleIndex=g;f.addClass("ui-state-active").focus();b=f.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-f.width()/2,top:a.pageY-b.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b=
-this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b=
-this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);
-c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var e;if(this.options.values&&this.options.values.length){e=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>e||b===1&&c<e))c=e;if(c!==this.values(b)){e=this.values();e[b]=c;a=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e});this.values(b?0:1);a!==false&&this.values(b,c,true)}}else if(c!==this.value()){a=this._trigger("slide",a,{handle:this.handles[b],value:c});
-a!==false&&this.value(c)}},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=
-this._trimAlignValue(a);this._refreshValue();this._change(null,0)}return this._value()},values:function(a,b){var c,e,f;if(arguments.length>1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;f<c.length;f+=1){c[f]=this._trimAlignValue(e[f]);this._change(null,f)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(a):this.value();
-else return this._values()},_setOption:function(a,b){var c,e=0;if(d.isArray(this.options.values))e=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(a){case "disabled":if(b){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
-this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<e;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a)},_values:function(a){var b,c;if(arguments.length){b=this.options.values[a];
-return b=this._trimAlignValue(b)}else{b=this.options.values.slice();for(c=0;c<b.length;c+=1)b[c]=this._trimAlignValue(b[c]);return b}},_trimAlignValue:function(a){if(a<this._valueMin())return this._valueMin();if(a>this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=a%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a=
-this.options.range,b=this.options,c=this,e=!this._animateOff?b.animate:false,f,h={},g,i,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(k){f=(c.values(k)-c._valueMin())/(c._valueMax()-c._valueMin())*100;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";d(this).stop(1,1)[e?"animate":"css"](h,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(k===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},b.animate);if(k===1)c.range[e?"animate":"css"]({width:f-
-g+"%"},{queue:false,duration:b.animate})}else{if(k===0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},b.animate);if(k===1)c.range[e?"animate":"css"]({height:f-g+"%"},{queue:false,duration:b.animate})}g=f});else{i=this.value();j=this._valueMin();l=this._valueMax();f=l!==j?(i-j)/(l-j)*100:0;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](h,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},
-b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[e?"animate":"css"]({width:100-f+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.5"})})(jQuery);
-;/*
- * jQuery UI Tabs 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- */
-(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(a,e){if(a=="selected")this.options.collapsible&&
-e==this.options.selected||this.select(e);else{this.options[a]=e;this._tabify()}},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var a=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[a].concat(d.makeArray(arguments)))},_ui:function(a,e){return{tab:a,panel:e,index:this.anchors.index(a)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var a=
-d(this);a.html(a.data("label.tabs")).removeData("label.tabs")})},_tabify:function(a){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var b=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
-(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))b.panels=b.panels.add(b._sanitizeSelector(i));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=b._tabId(f);f.href="#"+i;f=d("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(b.panels[g-1]||b.list);f.data("destroy.tabs",true)}b.panels=b.panels.add(f)}else c.disabled.push(g)});if(a){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
-this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(b._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
-this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return b.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
-if(c.selected>=0&&this.anchors.length){this.panels.eq(c.selected).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");b.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[c.selected],b.panels[c.selected]))});this.load(c.selected)}d(window).bind("unload",function(){b.lis.add(b.anchors).unbind(".tabs");b.lis=b.anchors=b.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[c.collapsible?"addClass":
-"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);a=0;for(var j;j=this.lis[a];a++)d(j)[d.inArray(a,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs",
-function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);b._trigger("show",
-null,b._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");b._trigger("show",null,b._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){b.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);b.element.dequeue("tabs")})}:function(g,f){b.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");b.element.dequeue("tabs")};this.anchors.bind(c.event+".tabs",
-function(){var g=this,f=d(g).closest("li"),i=b.panels.filter(":not(.ui-tabs-hide)"),l=d(b._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||b.panels.filter(":animated").length||b._trigger("select",null,b._ui(this,l[0]))===false){this.blur();return false}c.selected=b.anchors.index(this);b.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=-1;c.cookie&&b._cookie(c.selected,c.cookie);b.element.queue("tabs",
-function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&b._cookie(c.selected,c.cookie);b.element.queue("tabs",function(){r(g,l)});b.load(b.anchors.index(this));this.blur();return false}c.cookie&&b._cookie(c.selected,c.cookie);if(l.length){i.length&&b.element.queue("tabs",function(){s(g,i)});b.element.queue("tabs",function(){r(g,l)});b.load(b.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",
-function(){return false})},_getIndex:function(a){if(typeof a=="string")a=this.anchors.index(this.anchors.filter("[href$="+a+"]"));return a},destroy:function(){var a=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=d.data(this,"href.tabs");if(e)this.href=
-e;var b=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){b.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});a.cookie&&this._cookie(null,a.cookie);return this},add:function(a,e,b){if(b===p)b=this.anchors.length;
-var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,a).replace(/#\{label\}/g,e));a=!a.indexOf("#")?a.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=d("#"+a);j.length||(j=d(h.panelTemplate).attr("id",a).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(b>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[b]);
-j.insertBefore(this.panels[b])}h.disabled=d.map(h.disabled,function(k){return k>=b?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[b],this.panels[b]));return this},remove:function(a){a=this._getIndex(a);var e=this.options,b=this.lis.eq(a).remove(),c=this.panels.eq(a).remove();
-if(b.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(a+(a+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=a}),function(h){return h>=a?--h:h});this._tabify();this._trigger("remove",null,this._ui(b.find("a")[0],c[0]));return this},enable:function(a){a=this._getIndex(a);var e=this.options;if(d.inArray(a,e.disabled)!=-1){this.lis.eq(a).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(b){return b!=a});this._trigger("enable",null,
-this._ui(this.anchors[a],this.panels[a]));return this}},disable:function(a){a=this._getIndex(a);var e=this.options;if(a!=e.selected){this.lis.eq(a).addClass("ui-state-disabled");e.disabled.push(a);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a]))}return this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;this.anchors.eq(a).trigger(this.options.event+".tabs");return this},
-load:function(a){a=this._getIndex(a);var e=this,b=this.options,c=this.anchors.eq(a)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(a).addClass("ui-state-processing");if(b.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(b.spinner)}this.xhr=d.ajax(d.extend({},b.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(c.hash)).html(k);e._cleanup();b.cache&&d.data(c,"cache.tabs",
-true);e._trigger("load",null,e._ui(e.anchors[a],e.panels[a]));try{b.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[a],e.panels[a]));try{b.ajaxOptions.error(k,n,a,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(a,
-e){this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.5"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(a,e){var b=this,c=this.options,h=b._rotate||(b._rotate=function(j){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var k=c.selected;b.select(++k<b.anchors.length?k:0)},a);j&&j.stopPropagation()});e=b._unrotate||(b._unrotate=!e?function(j){j.clientX&&b.rotate(null)}:
-function(){t=c.selected;h()});if(a){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(b.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
-;/*
- * jQuery UI Datepicker 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker
- *
- * Depends:
- *	jquery.ui.core.js
- */
-(function(d,G){function L(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
-"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
-"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
-minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>')}function E(a,b){d.extend(a,
-b);for(var c in b)if(b[c]==null||b[c]==G)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.5"}});var y=(new Date).getTime();d.extend(L.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){E(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=
-f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')}},
-_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&
-b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==
-""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,
-c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),
-true);this._updateDatepicker(b);this._updateAlternate(b)}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}E(a.settings,e||{});b=b&&b.constructor==
-Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);
-d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},
-_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=
-d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;
-for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&
-this._hideDatepicker();var h=this._getDateDatepicker(a,true);E(e.settings,f);this._attachments(d(a),e);this._autoSize(e);this._setDateDatepicker(a,h);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&
-!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass,b.dpDiv).add(d("td."+d.datepicker._currentClass,b.dpDiv));c[0]?d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();
-return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||
-a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,
-a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));
-var c=String.fromCharCode(a.charCode==G?a.keyCode:a.charCode);return a.ctrlKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||
-a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");E(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);
-d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&
-d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){d.datepicker._datepickerShowing=true;var i=d.datepicker._getBorders(b.dpDiv);b.dpDiv.find("iframe.ui-datepicker-cover").css({left:-i[0],top:-i[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})};b.dpDiv.zIndex(d(a).zIndex()+1);d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,
-h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this,c=d.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a)).find("iframe.ui-datepicker-cover").css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){d(this).removeClass("ui-state-hover");
-this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!b._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");
-this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();c=this._getNumberOfMonths(a);var e=c[1];e>1?a.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",17*e+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(c[0]!=1||c[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");
-a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input.focus()},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),
-k=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>k&&k>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1);)a=a[b?"previousSibling":"nextSibling"];
-a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():
-"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&
-!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;
-b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=
-this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=
-d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,
-"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b==
-"object"?b.toString():b+"";if(b=="")return null;for(var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff,f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,k=c=-1,l=-1,u=-1,j=false,o=function(p){(p=z+1<a.length&&a.charAt(z+1)==p)&&z++;return p},m=function(p){o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"?4:p=="o"?
-3:2)+"}");p=b.substring(s).match(p);if(!p)throw"Missing number at position "+s;s+=p[0].length;return parseInt(p[0],10)},n=function(p,w,H){p=o(p)?H:w;for(w=0;w<p.length;w++)if(b.substr(s,p[w].length).toLowerCase()==p[w].toLowerCase()){s+=p[w].length;return w+1}throw"Unknown name at position "+s;},r=function(){if(b.charAt(s)!=a.charAt(z))throw"Unexpected literal at position "+s;s++},s=0,z=0;z<a.length;z++)if(j)if(a.charAt(z)=="'"&&!o("'"))j=false;else r();else switch(a.charAt(z)){case "d":l=m("d");
-break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":k=m("m");break;case "M":k=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=new Date(m("@"));c=v.getFullYear();k=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();k=v.getMonth()+1;l=v.getDate();break;case "'":if(o("'"))r();else j=true;break;default:r()}if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>
--1){k=1;l=u;do{e=this._getDaysInMonth(c,k-1);if(l<=e)break;k++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,k-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=k||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*
-60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=j+1<a.length&&a.charAt(j+1)==o)&&j++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},k=function(o,m,n,r){return i(o)?r[m]:n[m]},l="",u=false;if(b)for(var j=0;j<a.length;j++)if(u)if(a.charAt(j)==
-"'"&&!i("'"))u=false;else l+=a.charAt(j);else switch(a.charAt(j)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=k("D",b.getDay(),e,f);break;case "o":l+=g("o",(b.getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5,3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=k("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+=
-"'";else u=true;break;default:l+=a.charAt(j)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==G?a.settings[b]:this._defaults[b]},
-_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,
-this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,k=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,j=u.exec(h);j;){switch(j[2]||"d"){case "d":case "D":g+=
-parseInt(j[1],10);break;case "w":case "W":g+=parseInt(j[1],10)*7;break;case "m":case "M":l+=parseInt(j[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(k,l));break;case "y":case "Y":k+=parseInt(j[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(k,l));break}j=u.exec(h)}return new Date(k,l,g)};if(b=(b=b==null?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):b)&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},
-_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?
-"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),k=
-this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),j=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=j&&n<j?j:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,
-"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-k,1)),this._getFormatConfig(a));n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._adjustDate('#"+a.id+"', -"+k+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+
-n+"</span></a>";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,g+k,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._adjustDate('#"+a.id+"', +"+k+", 'M');\" title=\""+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+r+'"><span class="ui-icon ui-icon-circle-triangle-'+
-(c?"w":"e")+'">'+r+"</span></a>";k=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&a.currentDay?u:b;k=!h?k:this.formatDate(k,r,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+y+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,r)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
-y+".datepicker._gotoToday('#"+a.id+"');\">"+k+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;k=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),z=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),w=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var M=this._getDefaultDate(a),I="",C=0;C<i[0];C++){for(var N=
-"",D=0;D<i[1];D++){var J=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",x="";if(l){x+='<div class="ui-datepicker-group';if(i[1]>1)switch(D){case 0:x+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:x+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:x+=" ui-datepicker-group-middle";t="";break}x+='">'}x+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&C==0?c?
-f:n:"")+(/all|right/.test(t)&&C==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,j,o,C>0||D>0,z,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var A=k?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var q=(t+h)%7;A+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+r[q]+'">'+s[q]+"</span></th>"}x+=A+"</tr></thead><tbody>";A=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,
-A);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;A=l?6:Math.ceil((t+A)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var O=0;O<A;O++){x+="<tr>";var P=!k?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(q)+"</td>";for(t=0;t<7;t++){var F=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],B=q.getMonth()!=g,K=B&&!H||!F[0]||j&&q<j||o&&q>o;P+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(B?" ui-datepicker-other-month":"")+(q.getTime()==J.getTime()&&g==a.selectedMonth&&
-a._keyEvent||M.getTime()==q.getTime()&&M.getTime()==J.getTime()?" "+this._dayOverClass:"")+(K?" "+this._unselectableClass+" ui-state-disabled":"")+(B&&!w?"":" "+F[1]+(q.getTime()==u.getTime()?" "+this._currentClass:"")+(q.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!B||w)&&F[2]?' title="'+F[2]+'"':"")+(K?"":' onclick="DP_jQuery_'+y+".datepicker._selectDay('#"+a.id+"',"+q.getMonth()+","+q.getFullYear()+', this);return false;"')+">"+(B&&!w?"&#xa0;":K?'<span class="ui-state-default">'+q.getDate()+
-"</span>":'<a class="ui-state-default'+(q.getTime()==b.getTime()?" ui-state-highlight":"")+(q.getTime()==J.getTime()?" ui-state-active":"")+(B?" ui-priority-secondary":"")+'" href="#">'+q.getDate()+"</a>")+"</td>";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}x+=P+"</tr>"}g++;if(g>11){g=0;m++}x+="</tbody></table>"+(l?"</div>"+(i[0]>0&&D==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");N+=x}I+=N}I+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
-"");a._keyEvent=false;return I},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var k=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),j='<div class="ui-datepicker-title">',o="";if(h||!k)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+
-a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(j+=o+(h||!(k&&l)?"&#xa0;":""));if(h||!l)j+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b,
-i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(j+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)j+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";j+="</select>"}j+=this._get(a,"yearSuffix");if(u)j+=(h||!(k&&l)?"&#xa0;":"")+o;j+="</div>";return j},_adjustInstDate:function(a,b,c){var e=
-a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,
-"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);
-c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,
-"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=
-function(a){if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));
-return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new L;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.5";window["DP_jQuery_"+y]=d})(jQuery);
-;/*
- * jQuery UI Progressbar 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar
- *
- * Depends:
- *   jquery.ui.core.js
- *   jquery.ui.widget.js
- */
-(function(b,c){b.widget("ui.progressbar",{options:{value:0},min:0,max:100,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
-this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===c)return this._value();this._setOption("value",a);return this},_setOption:function(a,d){if(a==="value"){this.options.value=d;this._refreshValue();this._trigger("change")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.max,Math.max(this.min,a))},_refreshValue:function(){var a=this.value();this.valueDiv.toggleClass("ui-corner-right",
-a===this.max).width(a+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.5"})})(jQuery);
-;/*
- * jQuery UI Effects 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/
- */
-jQuery.effects||function(f,j){function l(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
-16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return m.transparent;return m[f.trim(c).toLowerCase()]}function r(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return l(b)}function n(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
-a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function o(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in s||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function t(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
-a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:f.fx.speeds[b]||f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=r(b.elem,a);b.end=l(b.end);b.colorInit=
-true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var m={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,
-183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,
-165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},p=["add","remove","toggle"],s={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,d){if(f.isFunction(b)){d=b;b=null}return this.each(function(){var e=f(this),g=e.attr("style")||" ",h=o(n.call(this)),q,u=e.attr("className");f.each(p,function(v,
-i){c[i]&&e[i+"Class"](c[i])});q=o(n.call(this));e.attr("className",u);e.animate(t(h,q),a,b,function(){f.each(p,function(v,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments)})})};f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?
-f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.5",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==
-null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();
-var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});
-c.css({position:"relative",top:0,left:0})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments);a={options:a[1],duration:a[2],callback:a[3]};var b=f.effects[c];return b&&!f.fx.off?b.call(this,a):this},_show:f.fn.show,show:function(c){if(!c||
-typeof c=="number"||f.fx.speeds[c]||!f.effects[c])return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(!c||typeof c=="number"||f.fx.speeds[c]||!f.effects[c])return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(!c||typeof c=="number"||f.fx.speeds[c]||!f.effects[c]||typeof c==
-"boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,
-a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=
-e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+
-b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/
-2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*
-a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;
-return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,
-a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
-;/*
- * jQuery UI Effects Blind 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Blind
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","left"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,g);b.effects.removeWrapper(a);
-c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Bounce 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Bounce
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","left"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
-3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
-b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Clip 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Clip
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","left","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,c/2)}var h={};h[g.size]=
-f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Drop 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Drop
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","left","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e=="show"?1:
-0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Explode 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Explode
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
-0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
-e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
-;/*
- * jQuery UI Effects Fade 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fade
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Fold 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fold
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","left"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],10)/100*
-f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Highlight 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Highlight
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
-this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Pulsate 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Pulsate
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
-a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Scale 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Scale
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
-b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
-1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","left","width","height","overflow","opacity"],g=["position","top","left","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=c.effects.setMode(a,
-b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};if(m=="box"||m=="both"){if(d.from.y!=
-d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);a.css("overflow","hidden").css(a.from);
-if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);child.to=c.effects.setTransition(child,
-f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,n?e:g);c.effects.removeWrapper(a);b.callback&&
-b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Shake 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Shake
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","left"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=(h=="pos"?"-=":"+=")+
-e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Slide 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Slide
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","left"],e=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(e=="show")a.css(f,b=="pos"?-g:g);var i={};i[f]=(e=="show"?b=="pos"?
-"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Transfer 1.8.5
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Transfer
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
-b.dequeue()})})}})(jQuery);
-;
\ No newline at end of file
diff --git a/clients/chrome/clip-it-good/json2.js b/clients/chrome/clip-it-good/json2.js
deleted file mode 100644
index 39d8f37..0000000
--- a/clients/chrome/clip-it-good/json2.js
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
-    http://www.JSON.org/json2.js
-    2009-09-29
-
-    Public Domain.
-
-    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
-
-    See http://www.JSON.org/js.html
-
-
-    This code should be minified before deployment.
-    See http://javascript.crockford.com/jsmin.html
-
-    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
-    NOT CONTROL.
-
-
-    This file creates a global JSON object containing two methods: stringify
-    and parse.
-
-        JSON.stringify(value, replacer, space)
-            value       any JavaScript value, usually an object or array.
-
-            replacer    an optional parameter that determines how object
-                        values are stringified for objects. It can be a
-                        function or an array of strings.
-
-            space       an optional parameter that specifies the indentation
-                        of nested structures. If it is omitted, the text will
-                        be packed without extra whitespace. If it is a number,
-                        it will specify the number of spaces to indent at each
-                        level. If it is a string (such as '\t' or '&nbsp;'),
-                        it contains the characters used to indent at each level.
-
-            This method produces a JSON text from a JavaScript value.
-
-            When an object value is found, if the object contains a toJSON
-            method, its toJSON method will be called and the result will be
-            stringified. A toJSON method does not serialize: it returns the
-            value represented by the name/value pair that should be serialized,
-            or undefined if nothing should be serialized. The toJSON method
-            will be passed the key associated with the value, and this will be
-            bound to the value
-
-            For example, this would serialize Dates as ISO strings.
-
-                Date.prototype.toJSON = function (key) {
-                    function f(n) {
-                        // Format integers to have at least two digits.
-                        return n < 10 ? '0' + n : n;
-                    }
-
-                    return this.getUTCFullYear()   + '-' +
-                         f(this.getUTCMonth() + 1) + '-' +
-                         f(this.getUTCDate())      + 'T' +
-                         f(this.getUTCHours())     + ':' +
-                         f(this.getUTCMinutes())   + ':' +
-                         f(this.getUTCSeconds())   + 'Z';
-                };
-
-            You can provide an optional replacer method. It will be passed the
-            key and value of each member, with this bound to the containing
-            object. The value that is returned from your method will be
-            serialized. If your method returns undefined, then the member will
-            be excluded from the serialization.
-
-            If the replacer parameter is an array of strings, then it will be
-            used to select the members to be serialized. It filters the results
-            such that only members with keys listed in the replacer array are
-            stringified.
-
-            Values that do not have JSON representations, such as undefined or
-            functions, will not be serialized. Such values in objects will be
-            dropped; in arrays they will be replaced with null. You can use
-            a replacer function to replace those with JSON values.
-            JSON.stringify(undefined) returns undefined.
-
-            The optional space parameter produces a stringification of the
-            value that is filled with line breaks and indentation to make it
-            easier to read.
-
-            If the space parameter is a non-empty string, then that string will
-            be used for indentation. If the space parameter is a number, then
-            the indentation will be that many spaces.
-
-            Example:
-
-            text = JSON.stringify(['e', {pluribus: 'unum'}]);
-            // text is '["e",{"pluribus":"unum"}]'
-
-
-            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
-            // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
-
-            text = JSON.stringify([new Date()], function (key, value) {
-                return this[key] instanceof Date ?
-                    'Date(' + this[key] + ')' : value;
-            });
-            // text is '["Date(---current time---)"]'
-
-
-        JSON.parse(text, reviver)
-            This method parses a JSON text to produce an object or array.
-            It can throw a SyntaxError exception.
-
-            The optional reviver parameter is a function that can filter and
-            transform the results. It receives each of the keys and values,
-            and its return value is used instead of the original value.
-            If it returns what it received, then the structure is not modified.
-            If it returns undefined then the member is deleted.
-
-            Example:
-
-            // Parse the text. Values that look like ISO date strings will
-            // be converted to Date objects.
-
-            myData = JSON.parse(text, function (key, value) {
-                var a;
-                if (typeof value === 'string') {
-                    a =
-/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
-                    if (a) {
-                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
-                            +a[5], +a[6]));
-                    }
-                }
-                return value;
-            });
-
-            myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
-                var d;
-                if (typeof value === 'string' &&
-                        value.slice(0, 5) === 'Date(' &&
-                        value.slice(-1) === ')') {
-                    d = new Date(value.slice(5, -1));
-                    if (d) {
-                        return d;
-                    }
-                }
-                return value;
-            });
-
-
-    This is a reference implementation. You are free to copy, modify, or
-    redistribute.
-*/
-
-/*jslint evil: true, strict: false */
-
-/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
-    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
-    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
-    lastIndex, length, parse, prototype, push, replace, slice, stringify,
-    test, toJSON, toString, valueOf
-*/
-
-
-// Create a JSON object only if one does not already exist. We create the
-// methods in a closure to avoid creating global variables.
-
-if (!this.JSON) {
-    this.JSON = {};
-}
-
-(function () {
-
-    function f(n) {
-        // Format integers to have at least two digits.
-        return n < 10 ? '0' + n : n;
-    }
-
-    if (typeof Date.prototype.toJSON !== 'function') {
-
-        Date.prototype.toJSON = function (key) {
-
-            return isFinite(this.valueOf()) ?
-                   this.getUTCFullYear()   + '-' +
-                 f(this.getUTCMonth() + 1) + '-' +
-                 f(this.getUTCDate())      + 'T' +
-                 f(this.getUTCHours())     + ':' +
-                 f(this.getUTCMinutes())   + ':' +
-                 f(this.getUTCSeconds())   + 'Z' : null;
-        };
-
-        String.prototype.toJSON =
-        Number.prototype.toJSON =
-        Boolean.prototype.toJSON = function (key) {
-            return this.valueOf();
-        };
-    }
-
-    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
-        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
-        gap,
-        indent,
-        meta = {    // table of character substitutions
-            '\b': '\\b',
-            '\t': '\\t',
-            '\n': '\\n',
-            '\f': '\\f',
-            '\r': '\\r',
-            '"' : '\\"',
-            '\\': '\\\\'
-        },
-        rep;
-
-
-    function quote(string) {
-
-// If the string contains no control characters, no quote characters, and no
-// backslash characters, then we can safely slap some quotes around it.
-// Otherwise we must also replace the offending characters with safe escape
-// sequences.
-
-        escapable.lastIndex = 0;
-        return escapable.test(string) ?
-            '"' + string.replace(escapable, function (a) {
-                var c = meta[a];
-                return typeof c === 'string' ? c :
-                    '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
-            }) + '"' :
-            '"' + string + '"';
-    }
-
-
-    function str(key, holder) {
-
-// Produce a string from holder[key].
-
-        var i,          // The loop counter.
-            k,          // The member key.
-            v,          // The member value.
-            length,
-            mind = gap,
-            partial,
-            value = holder[key];
-
-// If the value has a toJSON method, call it to obtain a replacement value.
-
-        if (value && typeof value === 'object' &&
-                typeof value.toJSON === 'function') {
-            value = value.toJSON(key);
-        }
-
-// If we were called with a replacer function, then call the replacer to
-// obtain a replacement value.
-
-        if (typeof rep === 'function') {
-            value = rep.call(holder, key, value);
-        }
-
-// What happens next depends on the value's type.
-
-        switch (typeof value) {
-        case 'string':
-            return quote(value);
-
-        case 'number':
-
-// JSON numbers must be finite. Encode non-finite numbers as null.
-
-            return isFinite(value) ? String(value) : 'null';
-
-        case 'boolean':
-        case 'null':
-
-// If the value is a boolean or null, convert it to a string. Note:
-// typeof null does not produce 'null'. The case is included here in
-// the remote chance that this gets fixed someday.
-
-            return String(value);
-
-// If the type is 'object', we might be dealing with an object or an array or
-// null.
-
-        case 'object':
-
-// Due to a specification blunder in ECMAScript, typeof null is 'object',
-// so watch out for that case.
-
-            if (!value) {
-                return 'null';
-            }
-
-// Make an array to hold the partial results of stringifying this object value.
-
-            gap += indent;
-            partial = [];
-
-// Is the value an array?
-
-            if (Object.prototype.toString.apply(value) === '[object Array]') {
-
-// The value is an array. Stringify every element. Use null as a placeholder
-// for non-JSON values.
-
-                length = value.length;
-                for (i = 0; i < length; i += 1) {
-                    partial[i] = str(i, value) || 'null';
-                }
-
-// Join all of the elements together, separated with commas, and wrap them in
-// brackets.
-
-                v = partial.length === 0 ? '[]' :
-                    gap ? '[\n' + gap +
-                            partial.join(',\n' + gap) + '\n' +
-                                mind + ']' :
-                          '[' + partial.join(',') + ']';
-                gap = mind;
-                return v;
-            }
-
-// If the replacer is an array, use it to select the members to be stringified.
-
-            if (rep && typeof rep === 'object') {
-                length = rep.length;
-                for (i = 0; i < length; i += 1) {
-                    k = rep[i];
-                    if (typeof k === 'string') {
-                        v = str(k, value);
-                        if (v) {
-                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
-                        }
-                    }
-                }
-            } else {
-
-// Otherwise, iterate through all of the keys in the object.
-
-                for (k in value) {
-                    if (Object.hasOwnProperty.call(value, k)) {
-                        v = str(k, value);
-                        if (v) {
-                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
-                        }
-                    }
-                }
-            }
-
-// Join all of the member texts together, separated with commas,
-// and wrap them in braces.
-
-            v = partial.length === 0 ? '{}' :
-                gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
-                        mind + '}' : '{' + partial.join(',') + '}';
-            gap = mind;
-            return v;
-        }
-    }
-
-// If the JSON object does not yet have a stringify method, give it one.
-
-    if (typeof JSON.stringify !== 'function') {
-        JSON.stringify = function (value, replacer, space) {
-
-// The stringify method takes a value and an optional replacer, and an optional
-// space parameter, and returns a JSON text. The replacer can be a function
-// that can replace values, or an array of strings that will select the keys.
-// A default replacer method can be provided. Use of the space parameter can
-// produce text that is more easily readable.
-
-            var i;
-            gap = '';
-            indent = '';
-
-// If the space parameter is a number, make an indent string containing that
-// many spaces.
-
-            if (typeof space === 'number') {
-                for (i = 0; i < space; i += 1) {
-                    indent += ' ';
-                }
-
-// If the space parameter is a string, it will be used as the indent string.
-
-            } else if (typeof space === 'string') {
-                indent = space;
-            }
-
-// If there is a replacer, it must be a function or an array.
-// Otherwise, throw an error.
-
-            rep = replacer;
-            if (replacer && typeof replacer !== 'function' &&
-                    (typeof replacer !== 'object' ||
-                     typeof replacer.length !== 'number')) {
-                throw new Error('JSON.stringify');
-            }
-
-// Make a fake root object containing our value under the key of ''.
-// Return the result of stringifying the value.
-
-            return str('', {'': value});
-        };
-    }
-
-
-// If the JSON object does not yet have a parse method, give it one.
-
-    if (typeof JSON.parse !== 'function') {
-        JSON.parse = function (text, reviver) {
-
-// The parse method takes a text and an optional reviver function, and returns
-// a JavaScript value if the text is a valid JSON text.
-
-            var j;
-
-            function walk(holder, key) {
-
-// The walk method is used to recursively walk the resulting structure so
-// that modifications can be made.
-
-                var k, v, value = holder[key];
-                if (value && typeof value === 'object') {
-                    for (k in value) {
-                        if (Object.hasOwnProperty.call(value, k)) {
-                            v = walk(value, k);
-                            if (v !== undefined) {
-                                value[k] = v;
-                            } else {
-                                delete value[k];
-                            }
-                        }
-                    }
-                }
-                return reviver.call(holder, key, value);
-            }
-
-
-// Parsing happens in four stages. In the first stage, we replace certain
-// Unicode characters with escape sequences. JavaScript handles many characters
-// incorrectly, either silently deleting them, or treating them as line endings.
-
-            cx.lastIndex = 0;
-            if (cx.test(text)) {
-                text = text.replace(cx, function (a) {
-                    return '\\u' +
-                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
-                });
-            }
-
-// In the second stage, we run the text against regular expressions that look
-// for non-JSON patterns. We are especially concerned with '()' and 'new'
-// because they can cause invocation, and '=' because it can cause mutation.
-// But just to be safe, we want to reject all unexpected forms.
-
-// We split the second stage into 4 regexp operations in order to work around
-// crippling inefficiencies in IE's and Safari's regexp engines. First we
-// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
-// replace all simple value tokens with ']' characters. Third, we delete all
-// open brackets that follow a colon or comma or that begin the text. Finally,
-// we look to see that the remaining characters are only whitespace or ']' or
-// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
-
-            if (/^[\],:{}\s]*$/.
-test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
-replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
-replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
-
-// In the third stage we use the eval function to compile the text into a
-// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
-// in JavaScript: it can begin a block or an object literal. We wrap the text
-// in parens to eliminate the ambiguity.
-
-                j = eval('(' + text + ')');
-
-// In the optional fourth stage, we recursively walk the new structure, passing
-// each name/value pair to a reviver function for possible transformation.
-
-                return typeof reviver === 'function' ?
-                    walk({'': j}, '') : j;
-            }
-
-// If the text is not JSON parseable, then a SyntaxError is thrown.
-
-            throw new SyntaxError('JSON.parse');
-        };
-    }
-}());
diff --git a/clients/chrome/clip-it-good/manifest.json b/clients/chrome/clip-it-good/manifest.json
deleted file mode 100644
index 4e2830c..0000000
--- a/clients/chrome/clip-it-good/manifest.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "name": "Clip It Good",
-  "version": "0.1",
-  "description": "Save webpage clippings and images to your Picasa Web Albums.",
-  "background_page": "background.html",
-  "options_page": "options.html",
-  "permissions": [
-      "tabs",
-      "http://*/*",
-      "https://*/*",
-      "https://www.google.com/accounts/OAuthGetRequestToken",
-      "https://www.google.com/accounts/OAuthAuthorizeToken",
-      "https://www.google.com/accounts/OAuthGetAccessToken",
-      "https://picasaweb.google.com/data/*",
-      "contextMenus"
-      ],
-  "page_action": {
-    "default_icon": "icon19.png"
-    },
-  "minimum_chrome_version": "9.0",
-  "icons": {
-      "48": "icon48.png",
-      "128": "icon128.png"
-    }
-}
diff --git a/clients/chrome/clip-it-good/options.html b/clients/chrome/clip-it-good/options.html
deleted file mode 100644
index ce4e00e..0000000
--- a/clients/chrome/clip-it-good/options.html
+++ /dev/null
@@ -1,314 +0,0 @@
-<!doctype html>
-<html>
-<head>
-  <title>Clip It Good: Configure options</title>
-  <link rel="stylesheet" href="jquery-ui-1.8.5.custom.css" type="text/css" charset="utf-8">
-  <script type="text/javascript" src="jquery-1.4.2.min.js"></script>
-  <script type="text/javascript" src="json2.js"></script>
-  <script type="text/javascript" src="jquery-ui-1.8.5.custom.min.js"></script>
-  <script type="text/javascript" src="chrome_ex_oauthsimple.js"></script>
-  <script type="text/javascript" src="chrome_ex_oauth.js"></script>
-
-  <style type="text/css">
-    body {
-      font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
-    }
-
-    #about {
-      max-width: 400px;
-    }
-
-    /* Pop-up album selection */
-    .album-type {
-      margin-bottom: 1em;
-    }
-
-    .album-list {
-      height: 250px;
-      overflow-y: auto;
-      overflow-x: hidden;
-      list-style-type: none;
-      margin: 0;
-      padding: 0;
-      border: 1px solid #555;
-    }
-    .album-list .ui-selecting {
-      background: #FECA40;
-    }
-    .album-list .ui-selected {
-      background: #F39814;
-      color: #FFFFFF;
-    }
-    .album-list li {
-      margin: 0;
-      padding: 5px;
-      border-top: 1px solid #DDD;
-      border-bottom: 1px solid #BBB;
-      background-color: #EEE;
-      font-size: 0.8em;
-      cursor: pointer;
-    }
-
-    .album-controls {
-      margin-top: 1em;
-    }
-
-    /* Connected albums view */
-    .album-type-picasa {
-      
-    }
-    .album-section-title {
-      
-    }
-    .add-album-control {
-      margin-top: 2em;
-    }
-
-    /* other */
-    .security-detail {
-      max-width: 400px;
-    }
-
-  </style>
-
-  <script type="text/javascript" charset="utf-8">
-
-  var BG = chrome.extension.getBackgroundPage();
-
-  // Generic album listing
-  function removeAlbum(albumType, albumId) {
-    delete BG.ALBUM_CONFIG[albumType][albumId];
-    if ($.isEmptyObject(BG.ALBUM_CONFIG[albumType])) {
-      delete BG.ALBUM_CONFIG[albumType];
-    }
-  }
-
-  function populateAlbumList() {
-    var connectedAlbums = $('#connected-list');
-    connectedAlbums.contents().remove();
-
-    BG.loadAlbumConfig();
-    if ($.isEmptyObject(BG.ALBUM_CONFIG)) {
-      connectedAlbums.text('No albums connected.');
-      return;
-    }
-
-    $.each(BG.ALBUM_CONFIG, function(albumType, albumIdNameDict) {
-      var albumSectionTitle = $('<h3 class="album-section-title">');
-      albumSectionTitle.text(BG.ALBUM_TYPE_STRING[albumType]);
-      connectedAlbums.append(albumSectionTitle);
-
-      var albumSection = $('<ul class="album-section">');
-      albumSection.addClass('album-type-' + albumType);
-
-      $.each(BG.getSortedAlbums(albumIdNameDict), function(index, albumDict) {
-        var album = $('<li class="connected-album">');
-        album.attr('album-id', albumDict['id']);
-        album.text(albumDict['name'] + ' ');
-        var removeLink = $('<a href="">').text('(Remove)');
-        removeLink.click(function(event) {
-          removeAlbum(albumType, albumDict['id']);
-          BG.saveAlbumConfig();
-          populateAlbumList();
-          BG.setupMenus();
-
-          event.preventDefault();
-          return false;
-        });
-        album.append(removeLink);
-        albumSection.append(album);
-      });
-
-      connectedAlbums.append(albumSection);
-    });
-  }
-
-  // Generic album selection
-  function renderAlbumSelector(albumIdToName, albumType) {
-    var selectAlbumDiv = $('#select-album');
-    selectAlbumDiv.children('.album-type')
-        .text(BG.ALBUM_TYPE_STRING[albumType]);
-
-    var albumList = selectAlbumDiv.children('.album-list');
-    albumList.contents().remove();
-    $.each(albumIdToName, function(albumId, albumName) {
-      var albumEntry = $('<li>');
-      albumEntry.attr('album-id', albumId);
-      albumEntry.text(albumName);
-      albumList.append(albumEntry);
-    });
-    albumList.selectable();
-
-    selectAlbumDiv.dialog({
-      modal: true,
-      resizable: false,
-      width: 550,
-      title: 'Connect an album',
-      buttons: {
-        'Add': function() {
-          var selectedAlbums = $('#select-album>.album-list>.ui-selected');
-          $.each(selectedAlbums, function(index, item) {
-            if (!BG.ALBUM_CONFIG[albumType]) {
-              BG.ALBUM_CONFIG[albumType] = {};
-            }
-            BG.ALBUM_CONFIG[albumType][$(item).attr('album-id')] =
-                $(item).text();
-          });
-          BG.saveAlbumConfig();
-          populateAlbumList();
-          BG.setupMenus();
-          $(this).dialog('close');
-        },
-        'Cancel': function() {
-          $(this).dialog('close');
-        }
-      }
-    });
-  }
-
-  // Picasa-specific album selection
-  function picasaListAlbumsDone(jsonData) {
-    var albumIdToName = {};
-    $.each(jsonData.feed.entry, function(index, entryData) {
-      albumIdToName[entryData['gphoto$id']['$t']] = entryData.title['$t'];
-    });
-    renderAlbumSelector(albumIdToName, BG.PICASA);
-  }
-
-  function addPicasaAlbum() {
-    BG.OAUTH.authorize(function() {
-      BG.OAUTH.sendSignedRequest(
-        'http://picasaweb.google.com/data/feed/api/user/default',
-        function(resp, xhr) {
-          if (!(xhr.status >= 200 && xhr.status <= 299)) {
-            alert('Error: Response status = ' + xhr.status +
-                  ', response body = "' + xhr.responseText + '"');
-            return;
-          }
-          var jsonResponse = $.parseJSON(resp);
-          picasaListAlbumsDone(jsonResponse);
-        },
-        {method: 'GET', parameters: {'alt': 'json'}})
-    });
-  }
-
-  function addCamlistoreServer() {
-    var camliServerDiv = $('#camliserver-config');
-
-    function clearInputs() {
-      camliServerDiv.find('input').val('');
-    }
-
-    camliServerDiv.dialog({
-      modal: true,
-      resizable: false,
-      width: 550,
-      title: 'Connect a Camlistore Server',
-      buttons: {
-        'Add': function() {
-          var urlInput = $('#camliserver-url');
-          var nameInput = $('#camliserver-name');
-          var usernameInput = $('#camliserver-username');
-          var passwordInput = $('#camliserver-password');
-
-          if (!BG.ALBUM_CONFIG[BG.CAMLISTORE]) {
-            BG.ALBUM_CONFIG[BG.CAMLISTORE] = {};
-          }
-          if (!BG.ALBUM_OPTIONS[BG.CAMLISTORE]) {
-            BG.ALBUM_OPTIONS[BG.CAMLISTORE] = {};
-          }
-          var albumId = urlInput.val();
-          BG.ALBUM_CONFIG[BG.CAMLISTORE][albumId] = nameInput.val();
-          BG.ALBUM_OPTIONS[BG.CAMLISTORE][albumId] = {
-            'username': usernameInput.val(),
-            'password': passwordInput.val()
-          };
-
-          BG.saveAlbumConfig();
-          populateAlbumList();
-          BG.setupMenus();
-          clearInputs();
-          $(this).dialog('close');
-        },
-        'Cancel': function() {
-          clearInputs();
-          $(this).dialog('close');
-        }
-      }
-    });
-  }
-
-  $(document).ready(function() {
-    $('#add-picasa').click(addPicasaAlbum);
-    $('#add-camlistore').click(addCamlistoreServer);
-    populateAlbumList();
-  });
-  </script>
-</head>
-<body>
-
-<h1>Clip It Good: Configure options</h1>
-
-<div id="connected-list">
-  Loading...
-</div>
-
-<div class="add-album-control">
-  <button id="add-picasa" type="button">Add Picasa Web Album</button>
-  <button id="add-camlistore" type="button">Add Camlistore Server</button>
-</div>
-
-<h2>Security information</h2>
-<div class="security-detail">
-Connecting an album to <em>Clip It Good</em> will require giving this extension permission to access your albums even when you are <strong>not logged into your account</strong>. At any time you may revoke access to this extension by using the authorized access control panel for each photo hosting provider: <a href="https://www.google.com/accounts/IssuedAuthSubTokens">Google Accounts</a>
-</div>
-
-<h2>About</h2>
-<div id="about">
-  <img src="icon128.png"/>
-  <p>
-     Brett Slatkin, &copy;2010
-     <br>
-    <a href="http://www.google.com/profiles/bslatkin/contactme">Email</a>
-  </p>
-  <p>
-    Extension and source licensed under the
-    <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License,
-    Version 2.0</a>. Uses <a href="http://jqueryui.com/">jQuery UI</a> (MIT/GPL), 
-    <a href="http://www.json.org/js.html">json2 parser</a> (public domain),
-    <a href="http://code.google.com/p/javascriptbase64/">Fred Palmer's Base64</a>
-    (BSD compat), and <a href="http://code.google.com/p/crypto-js/">Jeff
-    Mott's SHA1</a> (BSD compat).
-  </p>
-</div>
-
-<!-- hidden divs used by interactive stuff -->
-<div id="select-album" style="display: none;">
-  <div class="album-type"></div>
-  <ol class="album-list"></ol>
-  <div class="album-controls">Drag to select multiple or click while holding Control/&#x2318; for specific items.</div>
-</div>
-
-<div id="camliserver-config" style="display: none;">
-  <table width="100%" border="0">
-    <tr>
-      <td><label for="camliserver-url">Blobserver&nbsp;URL:</label></td>
-      <td><input type="text" id="camliserver-url" size="30"></td>
-    </tr>
-    <tr>
-      <td><label for="camliserver-name">Pretty&nbsp;name:</label></td>
-      <td><input type="text" id="camliserver-name" size="30"></td>
-    </tr>
-    <tr>
-      <td><label for="camliserver-username">Username:</label></td>
-      <td><input type="text" id="camliserver-username" size="30"></td>
-    </tr>
-    <tr>
-      <td><label for="camliserver-password">Password:</label></td>
-      <td><input type="text" id="camliserver-password" size="30"></td>
-    </tr>
-  </table>
-</div>
-
-</body>
-</html>
diff --git a/dev-appengine b/dev-appengine
deleted file mode 100755
index 18f0c6f..0000000
--- a/dev-appengine
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use FindBin qw($Bin);
-use Getopt::Long;
-
-sub usage {
-    die "Usage: dev-appengine [--wipe] [-a] [-p port] -- [other_dev_appserver_opts]";
-}
-
-my $opt_wipe;
-my $opt_port;
-my $opt_all;  # listen on all interfaces
-GetOptions("wipe" => \$opt_wipe,
-           "all" => \$opt_all,
-           "p=i" => \$opt_port,
-           ) or usage();
-
-my $sdk = readlink("$Bin/appengine-sdk")
-    or die "No App Engine SDK symlink; please:\n  \$ ln -s /path/to/appengine-go-sdk $Bin/appengine-sdk\n\n";
-
-my @args = (
-    "$sdk/dev_appserver.py",
-    "--skip_sdk_update_check",
-    );
-
-if ($opt_all) {
-    push @args, "-a", "0.0.0.0";
-}
-if ($opt_wipe) {
-    push @args, "--clear_datastore";
-}
-if ($opt_port) {
-    push @args, "--port", "$opt_port";
-} else {
-    push @args, "--port", "3179";
-}
-push @args, @ARGV;
-
-chdir "$Bin/server/appengine" or die "$!";
-push @args, ".";
-
-print "\$ @args\n";
-
-exec(@args);
diff --git a/dev-camget b/dev-camget
deleted file mode 100755
index e9bb5e0..0000000
--- a/dev-camget
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use FindBin qw($Bin);
-use Getopt::Long;
-require "$Bin/misc/devlib.pl";
-
-unless ($ENV{GOPATH}) {
-    $ENV{GOPATH} = "$Bin/gopath"
-}
-
-system("go", "install", "camlistore.org/cmd/camget") and die "failed to build camget";
-
-sub usage {
-    die "Usage: dev-camget [--tls] -- camget_args";
-}
-
-my $opt_tls;
-Getopt::Long::Configure("pass_through");
-GetOptions("tls" => \$opt_tls)
-    or usage();
-
-my $camget = build_bin("./cmd/camget");
-
-# Respected by camli/osutil:
-$ENV{"CAMLI_CONFIG_DIR"} = "$Bin/config/dev-client-dir";
-
-# Respected by env expansions in config/dev-client-dir/config
-$ENV{"CAMLI_SECRET_RING"} = "$Bin/pkg/jsonsign/testdata/test-secring.gpg";
-$ENV{"CAMLI_KEYID"} = "26F5ABDA";
-$ENV{"CAMLI_DEV_KEYBLOBS"} = "$Bin/config/dev-client-dir/keyblobs";
-$ENV{"CAMLI_AUTH"} = "userpass:camlistore:pass3179";
-my $blobserver = "http://localhost:3179/bs";
-if ($opt_tls) {
-	$blobserver =~ s/^http/https/;
-}
-
-my @args;
-unless (grep { /^--?shared\b/ } @ARGV) {
-    push @args, "--server=$blobserver";
-}
-push @args, @ARGV;
-
-exec("$camget",
-     "--verbose",
-     @args);
-die "Failure running camget: $!";
diff --git a/dev-cammount b/dev-cammount
deleted file mode 100755
index b4bb23e..0000000
--- a/dev-cammount
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use FindBin qw($Bin);
-use Getopt::Long;
-require "$Bin/misc/devlib.pl";
-
-my @blobref_arg;
-
-if (@ARGV) {
-    my $blobref = shift;
-    unless ($blobref && $blobref =~ /^\w+-[0-9a-f]{10,}$/) {
-        die "Usage: dev-cammount [<blobref>]\n";
-    }
-    push @blobref_arg, $blobref;
-}
-
-my $cammount = build_bin("./cmd/cammount");
-
-my $dir = "/tmp/cammount-dir";
-mkdir $dir, 0700 unless -d $dir;
-
-try_unmount();
-print "Mounting on $dir ...\n";
-$ENV{"CAMLI_AUTH"} = "userpass:camlistore:pass3179";
-system("$cammount", "--server=http://localhost:3179/bs", $dir, @blobref_arg)
-    and warn "cammount failure: $!\n";
-warn "Failed to unmount\n" unless try_unmount();
-
-sub try_unmount {
-    if ($^O eq "linux" && system("fusermount", "-u", $dir) == 0) {
-        return 1;
-    }
-    return 1 if system("umount", $dir) == 0;
-    return 1 if system("umount", "-f", $dir) == 0;
-    return 0;
-}
diff --git a/dev-camput b/dev-camput
deleted file mode 100755
index 2fab9cd..0000000
--- a/dev-camput
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use FindBin qw($Bin);
-use Getopt::Long;
-require "$Bin/misc/devlib.pl";
-
-unless ($ENV{GOPATH}) {
-    $ENV{GOPATH} = "$Bin/gopath"
-}
-
-system("go", "install", "camlistore.org/cmd/camput") and die "failed to build camput";
-
-sub usage {
-    die "Usage: dev-camput [--tls] -- camput_args";
-}
-
-my $opt_tls;
-Getopt::Long::Configure("pass_through");
-GetOptions("tls" => \$opt_tls)
-    or usage();
-
-my $camput = build_bin("./cmd/camput");
-
-# Respected by camli/osutil:
-$ENV{"CAMLI_CONFIG_DIR"} = "$Bin/config/dev-client-dir";
-
-# Respected by env expansions in config/dev-client-dir/config
-$ENV{"CAMLI_SECRET_RING"} = "$Bin/pkg/jsonsign/testdata/test-secring.gpg";
-$ENV{"CAMLI_KEYID"} = "26F5ABDA";
-$ENV{"CAMLI_DEV_KEYBLOBS"} = "$Bin/config/dev-client-dir/keyblobs";
-$ENV{"CAMLI_AUTH"} = "userpass:camlistore:pass3179";
-my $blobserver = "http://localhost:3179/";
-if ($opt_tls) {
-	$blobserver =~ s/^http/https/;
-}
-if ($ENV{"CAMLI_WANT_CAMPUT_PASSWORD"}) {  # Set by dev-pass-camput
-    $ENV{"CAMLI_SECRET_RING"} = "$Bin/pkg/jsonsign/testdata/password-foo-secring.gpg";
-    $ENV{"CAMLI_KEYID"} = "C7C3E176";
-    $ENV{"CAMLI_DEV_KEYBLOBS"} = "$Bin/config/dev-client-dir/keyblobs";
-    print "**\n** Note: password is \"foo\"\n**\n";
-}
-
-exec("$camput",
-     "--verbose",
-     "--server=$blobserver",
-     @ARGV);
-die "Failure running camput: $!";
diff --git a/dev-camtool b/dev-camtool
deleted file mode 100755
index cad17e4..0000000
--- a/dev-camtool
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use FindBin qw($Bin);
-use Getopt::Long;
-require "$Bin/misc/devlib.pl";
-
-my $tool = build_bin("./cmd/camtool");
-
-# Copy of dev-camget's settings. See comments there.
-$ENV{"CAMLI_CONFIG_DIR"} = "$Bin/config/dev-client-dir";
-$ENV{"CAMLI_SECRET_RING"} = "$Bin/pkg/jsonsign/testdata/test-secring.gpg";
-$ENV{"CAMLI_KEYID"} = "26F5ABDA";
-$ENV{"CAMLI_DEV_KEYBLOBS"} = "$Bin/config/dev-client-dir/keyblobs";
-$ENV{"CAMLI_AUTH"} = "userpass:camlistore:pass3179";
-
-exec($tool, @ARGV);
-die "Failed to exec camtool.";
-
diff --git a/dev-db b/dev-db
deleted file mode 100755
index 5598ffe..0000000
--- a/dev-db
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-exec mysql -uroot -proot devcamli$USER
diff --git a/dev-pass-camput b/dev-pass-camput
deleted file mode 100755
index 422ae3c..0000000
--- a/dev-pass-camput
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use FindBin qw($Bin);
-
-$ENV{"CAMLI_WANT_CAMPUT_PASSWORD"} = 1;
-exec("$Bin/dev-camput", @ARGV);
-die "failed to find/run $Bin/dev-camput";
diff --git a/dev-server b/dev-server
deleted file mode 100755
index 5dec143..0000000
--- a/dev-server
+++ /dev/null
@@ -1,206 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use FindBin qw($Bin);
-use Getopt::Long;
-require "$Bin/misc/devlib.pl";
-require "$Bin/misc/get_closure.pl";
-
-sub usage {
-    die "Usage: dev-server [--wipe] [--mongo|--mysql|--postgres] [--tls] <portnumber>" .
-    "[--all] [--nobuild] [--staticres] [--offline] [--KBps] <number>" .
-    "[--latency_ms] <number> [--fast] [--verbose] [--hostname] <name> [--compile-js]" .
-    " -- [other_blobserver_opts]";
-}
-
-chdir $Bin or die;
-
-my $opt_KBps = 150; # if non-zero, kBps to throttle connections
-my $opt_latency_ms = 90; # added latency in millisecond
-my $opt_fast; # shortcut to disable throttling
-
-my $opt_all;  # listen on all interfaces
-my $opt_hostname;  # hostname to advertise, else `hostname` is used
-my $opt_nobuild;
-my $opt_offline;   # don't use the network ("airplane mode")
-my $opt_staticres; # use static resources, not those on disk
-my $opt_tls;
-my $opt_wipe;
-my $opt_closure; # run the Closure compiler
-my $opt_verbose;
-
-# keep indexes in memory only. often used with --wipe, but not
-# necessarily. if --wipe isn't used, all blobs are re-indexed
-# on start-up.
-my $opt_memory;
-my $opt_mongo;
-my $opt_postgres;
-my $opt_mysql;
-GetOptions("wipe" => \$opt_wipe,
-           "tls" => \$opt_tls,
-           "all" => \$opt_all,
-           "nobuild" => \$opt_nobuild,
-           "memory" => \$opt_memory,
-           "mongo" => \$opt_mongo,
-           "postgres" => \$opt_postgres,
-           "mysql" => \$opt_mysql,
-           "staticres" => \$opt_staticres,
-           "offline" => \$opt_offline,
-           "KBps=i" => \$opt_KBps,
-           "latency_ms=i" => \$opt_latency_ms,
-           "fast" => \$opt_fast,
-           "verbose" => \$opt_verbose,
-           "hostname=s" => \$opt_hostname,
-           "compile-js" => \$opt_closure,
-    )
-    or usage();
-
-$opt_memory = 1 unless $opt_memory || $opt_mongo || $opt_postgres || $opt_mysql;
-
-my $port = shift;
-$port = "3179" unless defined($port);
-usage() unless $port =~ /^\d+$/;
-
-unless ($ENV{GOPATH}) {
-    warn "WARNING: Your GOPATH isn't set; attempting workaround, but you should really set a GOPATH. See https://plus.google.com/106356964679457436995/posts/ftJaqe9sbS2 and make your working directory be \$GOPATH/src/camlistore.org for best results.\n";
-    $ENV{GOPATH} = "$Bin/gopath"
-}
-
-unless ($opt_fast) {
-    $ENV{DEV_THROTTLE_KBPS} = $opt_KBps;
-    $ENV{DEV_THROTTLE_LATENCY_MS} = $opt_latency_ms;
-}
-
-$ENV{CAMLI_HTTP_DEBUG} = 1 if $opt_verbose;
-
-my $camlistored;
-my $camtool; # closure to return path
-if ($opt_nobuild) {
-    $camlistored = find_bin("./server/camlistored");
-    $camtool = sub { scalar find_bin("./cmd/camtool") };
-} else {
-    $camlistored = build_bin("./server/camlistored");
-    $camtool = sub { scalar  build_bin("./cmd/camtool") };
-}
-
-my $root = "/tmp/camliroot-$ENV{USER}/port$port/";
-if ($opt_wipe && -d $root) {
-    print "Wiping $root\n";
-    system("rm", "-rf", $root) and die "Failed to wipe $root.\n";
-}
-
-my $suffixdir = sub {
-    my $suffix = shift;
-    my $root = "$root/$suffix";
-    unless (-d $root) {
-        system("mkdir", "-p", $root) and die "Failed to create $root.\n";
-    }
-    return $root;
-};
-
-my $DBNAME = "devcamli$ENV{USER}";
-my @opts;
-if ($opt_wipe) {
-    push @opts, "-wipe";
-} else {
-    push @opts, "-ignoreexists";
-}
-
-$ENV{"CAMLI_MYSQL_ENABLED"} = "false";
-$ENV{"CAMLI_MONGO_ENABLED"} = "false";
-$ENV{"CAMLI_POSTGRES_ENABLED"} = "false";
-if ($opt_memory) {
-    $ENV{"CAMLI_INDEXER_PATH"} = "/index-mem/";
-} elsif ($opt_mongo) {
-    $ENV{"CAMLI_MONGO_ENABLED"} = "true";
-    $ENV{"CAMLI_INDEXER_PATH"} = "/index-mongo/";
-    if ($opt_wipe) {
-        $ENV{"CAMLI_MONGO_WIPE"} = "true";
-    } else {
-        $ENV{"CAMLI_MONGO_WIPE"} = "false";
-    }
-} elsif ($opt_postgres) {
-    $ENV{"CAMLI_POSTGRES_ENABLED"} = "true";
-    $ENV{"CAMLI_INDEXER_PATH"} = "/index-postgres/";
-    system($camtool->(),
-           "dbinit",
-           "-postgres",
-           "-user=postgres",
-           "-password=postgres",
-           "-host=localhost",
-           "-dbname=$DBNAME",
-           @opts) and die "Failed to run camtool dbinit.\n";
-} else {
-    $ENV{"CAMLI_MYSQL_ENABLED"} = "true";
-    $ENV{"CAMLI_INDEXER_PATH"} = "/index-mysql/";
-    system($camtool->(),
-           "dbinit",
-           "-user=root",
-           "-password=root",
-           "-host=localhost",
-           "-dbname=$DBNAME",
-           @opts) and die "Failed to run camtool dbinit.\n";
-}
-
-my $base = "http://localhost:$port";
-my $listen = "127.0.0.1:$port";
-if ($opt_all) {
-    $listen = "0.0.0.0:$port";
-    my $host = $opt_hostname || `hostname`;
-    chomp $host;
-    $base = "http://$host:$port";
-}
-if ($opt_tls) {
-    $base =~ s/^http/https/;
-}
-
-$ENV{CAMLI_TLS} = "false";
-if ($opt_tls) {
-    $ENV{CAMLI_TLS} = "true";
-}
-$ENV{CAMLI_BASEURL} = $base;
-$ENV{CAMLI_AUTH} = "userpass:camlistore:pass$port:+localhost";
-$ENV{CAMLI_ADVERTISED_PASSWORD} = "pass$port"; # public password
-$ENV{CAMLI_ROOT} = $suffixdir->("bs");
-$ENV{CAMLI_ROOT_SHARD1} = $suffixdir->("s1");
-$ENV{CAMLI_ROOT_SHARD2} = $suffixdir->("s2");
-$ENV{CAMLI_ROOT_REPLICA1} = $suffixdir->("r1");
-$ENV{CAMLI_ROOT_REPLICA2} = $suffixdir->("r2");
-$ENV{CAMLI_ROOT_REPLICA3} = $suffixdir->("r3");
-$ENV{CAMLI_ROOT_CACHE} = $suffixdir->("cache");
-$ENV{CAMLI_PORT} = $port;
-$ENV{CAMLI_SECRET_RING} = "$Bin/pkg/jsonsign/testdata/test-secring.gpg";
-$ENV{CAMLI_DBNAME} = $DBNAME;
-
-my $templatedir = "$Bin/dev-server-template";
-if ($opt_wipe && -d $templatedir) {
-    my $blobs = "$ENV{CAMLI_ROOT}/sha1";
-    system("cp", "-a", $templatedir, $blobs) and die "Failed to cp template blobs.\n";
-}
-
-# To use resources from disk, instead of the copies linked into the
-# binary:
-unless ($opt_staticres) {
-    $ENV{CAMLI_DEV_UI_FILES} = "$FindBin::Bin/server/camlistored/ui"; # set in server/camlistored/ui/fileembed.go
-    $ENV{CAMLI_DEV_NEWUI_FILES} = "$FindBin::Bin/server/camlistored/newui"; # set in server/camlistored/newui/fileembed.go
-    unless ($opt_offline) {
-        if (-e "$Bin/tmp/closure-lib/.svn") {
-            system("rm", "-rf", "$Bin/tmp/closure-lib") and die "Failed to remove the svn checkout of the closure-lib.\n";
-        }
-        get_closure_lib();
-        get_closure_compiler();
-        chdir $Bin or die;
-    }
-    if ($opt_closure) {
-        $ENV{CAMLI_USE_COMPILED_JS} = 1;
-        system("make", "minijs") and die "Failed to compress javascript with closure compiler.\n";
-    }
-}
-
-print "Starting dev server on $base/ui/ with password \"pass$port\"\n";
-
-exec("$camlistored",
-     "-configfile=$Bin/config/dev-server-config.json",
-     "-listen=$listen",
-     @ARGV);
-die "exec failure: $!\n";
diff --git a/lib/python/camli/__init__.py b/lib/python/camli/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/lib/python/camli/__init__.py
+++ /dev/null
diff --git a/lib/python/camli/op.py b/lib/python/camli/op.py
deleted file mode 100755
index bd11856..0000000
--- a/lib/python/camli/op.py
+++ /dev/null
@@ -1,388 +0,0 @@
-#!/usr/bin/env python
-#
-# Camlistore uploader client for Python.
-#
-# Copyright 2010 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-"""Client library for Camlistore."""
-
-__author__ = 'Brett Slatkin (bslatkin@gmail.com)'
-
-import base64
-import cStringIO
-import hashlib
-import httplib
-import logging
-import mimetools
-import urllib
-import urlparse
-
-import simplejson
-
-__all__ = ['Error', 'ServerError', 'PayloadError', 'BUFFER_SIZE', 'CamliOp']
-
-
-BUFFER_SIZE = 512 * 1024
-
-
-class Error(Exception):
-  """Base class for exceptions in this module."""
-
-
-class ServerError(Error):
-  """An unexpected error was returned by the server."""
-
-
-class PayloadError(ServerError):
-  """Something about a data payload was bad."""
-
-
-def buffered_sha1(data, buffer_size=BUFFER_SIZE):
-  """Calculates the sha1 hash of some data.
-
-  Args:
-    data: A string of data to write or an open file-like object. File-like
-      objects will be seeked back to their original position before this
-      function returns.
-    buffer_size: How much data to munge at a time.
-
-  Returns:
-    Hex sha1 string.
-  """
-  compute = hashlib.sha1()
-  if isinstance(data, basestring):
-    compute.update(data)
-  else:
-    start = data.tell()
-    while True:
-      line = data.read(buffer_size)
-      if line == '':
-        break
-      compute.update(line)
-    data.seek(start)
-  return compute.hexdigest()
-
-
-class CamliOp(object):
-  """Camlistore client class that is single threaded, using one socket."""
-
-  def __init__(self,
-               server_address,
-               buffer_size=BUFFER_SIZE,
-               create_connection=httplib.HTTPConnection,
-               auth=None,
-               basepath=""):
-    """Initializer.
-
-    Args:
-      server_address: hostname:port for the server.
-      buffer_size: Byte size to use for in-memory buffering for various
-        client-related operations.
-      create_connection: Use for testing.
-      auth: Optional. 'username:password' to use for HTTP basic auth.
-      basepath: Optional path suffix. e.g. if the server is at
-            "localhost:3179/bs", the basepath should be "/bs".
-    """
-    self.server_address = server_address
-    self.buffer_size = buffer_size
-    self._create_connection = create_connection
-    self._connection = None
-    self._authorization = ''
-    self.basepath = ""
-    if auth:
-      if len(auth.split(':')) != 2:
-          # Default to dummy username; current server doesn't care 
-          # TODO(jrabbit): care when necessary
-          auth = "username:" + auth #If username not given use the implicit default, 'username'
-      self._authorization = ('Basic ' + base64.encodestring(auth).strip())
-    if basepath:
-      if '/' not in basepath:
-        raise NameError("basepath must be in form '/bs'")
-      if basepath[-1] == '/':
-        basepath = basepath[:-1]
-      self.basepath = basepath
-
-  def _setup_connection(self):
-    """Sets up the HTTP connection."""
-    self.connection = self._create_connection(self.server_address)
-
-  def put_blobs(self, blobs):
-    """Puts a set of blobs.
-
-    Args:
-      blobs: List of (data, blobref) tuples; list of open files; or list of
-        blob data strings.
-
-    Returns:
-      The set of blobs that were actually uploaded. If all blobs are already
-      present this set will be empty.
-
-    Raises:
-      ServerError if the server response is bad.
-      PayloadError if the server response is not in the right format.
-      OSError or IOError if reading any blobs breaks.
-    """
-    if isinstance(blobs, dict):
-      raise TypeError('Must pass iterable of tuples, open files, or strings.')
-
-    blobref_dict = {}
-    for item in blobs:
-      if isinstance(item, tuple):
-        blob, blobref = item
-      else:
-        blob, blobref = item, None
-      if blobref is None:
-        blobref = 'sha1-' + buffered_sha1(blob, buffer_size=self.buffer_size)
-      blobref_dict[blobref] = blob
-
-    preupload = {'camliversion': '1'}
-    for index, blobref in enumerate(blobref_dict.keys()):
-      preupload['blob%d' % (index+1)] = blobref
-
-    # TODO: What is the max number of blobs that can be specified in a
-    # preupload request? The server probably has some reasonable limit and
-    # after that we need to do batching in smaller groups.
-
-    self._setup_connection()
-    if self.basepath:
-      fullpath = self.basepath + '/camli/stat'
-    else:
-      fullpath = '/camli/stat'
-    self.connection.request(
-        'POST', fullpath, urllib.urlencode(preupload),
-        {'Content-Type': 'application/x-www-form-urlencoded',
-         'Authorization': self._authorization})
-    response = self.connection.getresponse()
-    logging.debug('Preupload HTTP response: %d %s',
-                  response.status, response.reason)
-    if response.status != 200:
-      raise ServerError('Bad preupload response status: %d %s' %
-                        (response.status, response.reason))
-
-    data = response.read()
-    try:
-      response_dict = simplejson.loads(data)
-    except simplejson.decoder.JSONDecodeError:
-      raise PayloadError('Server returned bad preupload response: %r' % data)
-
-    logging.debug('Parsed preupload response: %r', response_dict)
-    if 'stat' not in response_dict:
-      raise PayloadError(
-          'Could not find "stat" in preupload response: %r' %
-          response_dict)
-    if 'uploadUrl' not in response_dict:
-      raise PayloadError(
-          'Could not find "uploadUrl" in preupload response: %r' %
-          response_dict)
-
-    already_have_blobrefs = set()
-    for blobref_json in response_dict['stat']:
-      if 'blobRef' not in blobref_json:
-        raise PayloadError(
-            'Cannot find "blobRef" in preupload response: %r',
-            response_dict)
-      already_have_blobrefs.add(blobref_json['blobRef'])
-    logging.debug('Already have blobs: %r', already_have_blobrefs)
-
-    missing_blobrefs = set(blobref_dict.iterkeys())
-    missing_blobrefs.difference_update(already_have_blobrefs)
-    if not missing_blobrefs:
-      logging.debug('All blobs already present.')
-      return
-
-    # TODO(bslatkin): Figure out the 'Content-Length' header value by looking
-    # at the size of the files by seeking; required for multipart POST.
-    out = cStringIO.StringIO()
-    boundary = mimetools.choose_boundary()
-    boundary_start = '--' + boundary
-
-    blob_number = 0
-    for blobref in blobref_dict.iterkeys():
-      if blobref in already_have_blobrefs:
-        logging.debug('Already have blobref=%s', blobref)
-        continue
-      blob = blobref_dict[blobref]
-      blob_number += 1
-
-      out.write(boundary_start)
-      out.write('\r\nContent-Type: application/octet-stream\r\n')
-      out.write('Content-Disposition: form-data; name="%s"; '
-                'filename="%d"\r\n\r\n' % (blobref, blob_number))
-      if isinstance(blob, basestring):
-        out.write(blob)
-      else:
-        while True:
-          buf = blob.read(self.buffer_size)
-          if buf == '':
-            break
-          out.write(buf)
-      out.write('\r\n')
-    out.write(boundary_start)
-    out.write('--\r\n')
-    request_body = out.getvalue()
-
-    pieces = list(urlparse.urlparse(response_dict['uploadUrl']))
-    # TODO: Support upload servers on another base URL.
-    pieces[0], pieces[1] = '', ''
-    relative_url = urlparse.urlunparse(pieces)
-    self.connection.request(
-        'POST', relative_url, request_body,
-        {'Content-Type': 'multipart/form-data; boundary="%s"' % boundary,
-         'Content-Length': str(len(request_body)),
-         'Authorization': self._authorization})
-
-    response = self.connection.getresponse()
-    logging.debug('Upload response: %d %s', response.status, response.reason)
-    if response.status not in (200, 301, 302, 303):
-      raise ServerError('Bad upload response status: %d %s' %
-                        (response.status, response.reason))
-
-    while response.status in (301, 302, 303):
-      # TODO(bslatkin): Support connections to servers on different addresses
-      # after redirects. For now just send another request to the same server.
-      location = response.getheader('Location')
-      pieces = list(urlparse.urlparse(location))
-      pieces[0], pieces[1] = '', ''
-      new_relative_url = urlparse.urlunparse(pieces)
-      logging.debug('Redirect %s -> %s', relative_url, new_relative_url)
-      relative_url = new_relative_url
-      self.connection.request('GET', relative_url)
-      response = self.connection.getresponse()
-
-    if response.status != 200:
-      raise ServerError('Bad upload response status: %d %s' %
-                        (response.status, response.reason))
-
-    data = response.read()
-    try:
-      response_dict = simplejson.loads(data)
-    except simplejson.decoder.JSONDecodeError:
-      raise PayloadError('Server returned bad upload response: %r' % data)
-
-    if 'received' not in response_dict:
-      raise PayloadError('Could not find "received" in upload response: %r' %
-                         response_dict)
-
-    received_blobrefs = set()
-    for blobref_json in response_dict['received']:
-      if 'blobRef' not in blobref_json:
-        raise PayloadError(
-            'Cannot find "blobRef" in upload response: %r',
-            response_dict)
-      received_blobrefs.add(blobref_json['blobRef'])
-    logging.debug('Received blobs: %r', received_blobrefs)
-
-    missing_blobrefs.difference_update(received_blobrefs)
-    if missing_blobrefs:
-      # TODO: Try to upload the missing ones.
-      raise ServerError('Some blobs not uploaded: %r', missing_blobrefs)
-
-    logging.debug('Upload of %d blobs successful.', len(blobref_dict))
-    return received_blobrefs
-
-  def get_blobs(self,
-                blobref_list,
-                start_out=None,
-                end_out=None,
-                check_sha1=True):
-    """Gets a set of blobs.
-
-    Args:
-      blobref_list: A single blobref as a string or an iterable of strings that
-        are blobrefs.
-      start_out: Optional. A function taking the blobref's key, returns a
-        file-like object to which the blob should be written. Called before
-        the blob has started any writing.
-      end_out: Optional along with start_out. A function that takes the
-        blobref and open file-like object that does proper cleanup and closing
-        of the file. Called when all of the file's contents have been written.
-      check_sha1: Double-check that the file's contents match the blobref.
-
-    Returns:
-      If start_out is not supplied, then all blobs will be kept in memory. If
-      blobref_list is a single blobref, then the return value will be a string
-      with the blob data or None if the blob was not present. If blobref_list
-      was iterable, the return value will be a dictionary mapping blobref to
-      blob data for each blob that was found.
-
-      If start_out is supplied, the return value will be None. Callers can
-      check for missing blobs by comparing their own input of the blobref_list
-      argument to the blobrefs that are passed to start_out.
-
-    Raises:
-      ServerError if the server response is invalid for whatever reason.
-      OSError or IOError if writing to any files breaks.
-    """
-    multiple = not isinstance(blobref_list, basestring)
-    result = {}
-    if start_out is None:
-      def start_out(blobref):
-        buffer = cStringIO.StringIO()
-        return buffer
-
-      def end_out(blobref, file_like):
-        result[blobref] = file_like.getvalue()
-    else:
-      result = None  # Rely on user-supplied start_out for reporting blobrefs.
-      if end_out is None:
-        def end_out(blobref, file_like):
-          file_like.close()
-
-    self._setup_connection()
-
-    # Note, we could use a 'preupload' here as a quick, bulk existence check,
-    # but that may not always work depending on the access the user has.
-    # It's possible the user has read-only access, and thus can only do
-    # GET or HEAD on objects.
-
-    for blobref in blobref_list:
-      logging.debug('Getting blobref=%s', blobref)
-      if self.basepath:
-          fullpath = self.basepath + '/camli/'
-      else:
-          fullpath = '/camli/'
-      self.connection.request('GET', fullpath + blobref)
-      response = self.connection.getresponse()
-      if response.status == 404:
-        logging.debug('Server does not have blobref=%s', blobref)
-        continue
-      elif response.status != 200:
-        raise ServerError('Bad response status: %d %s' %
-                          (response.status, response.reason))
-
-      if check_sha1:
-        compute_hash = hashlib.sha1()
-
-      out_file = start_out(blobref)
-      while True:
-        buf = response.read(self.buffer_size)
-        if buf == '':
-          end_out(blobref, out_file)
-          break
-
-        if check_sha1:
-          compute_hash.update(buf)
-
-        out_file.write(buf)
-
-      if check_sha1:
-        found = 'sha1-' + compute_hash.hexdigest()
-        if found != blobref:
-          raise ValueError('sha1 hash of blobref does not match; '
-                           'found %s, expected %s' % (found, blobref))
-
-    if result and not multiple:
-      return result.values()[0]
-    return result
diff --git a/lib/python/camli/schema.py b/lib/python/camli/schema.py
deleted file mode 100644
index 8ee204d..0000000
--- a/lib/python/camli/schema.py
+++ /dev/null
@@ -1,337 +0,0 @@
-#!/usr/bin/env python
-#
-# Camlistore uploader client for Python.
-#
-# Copyright 2011 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-"""Schema blob library for Camlistore."""
-
-__author__ = 'Brett Slatkin (bslatkin@gmail.com)'
-
-import datetime
-import re
-import simplejson
-
-__all__ = [
-    'Error', 'DecodeError', 'SchemaBlob', 'FileCommon', 'File',
-    'Directory', 'Symlink', 'decode']
-
-
-class Error(Exception):
-  """Base class for exceptions in this module."""
-
-class DecodeError(Error):
-  """Could not decode the supplied schema blob."""
-
-
-# Maps 'camliType' to SchemaBlob sub-classes.
-_TYPE_TO_CLASS = {}
-
-
-def _camel_to_python(name):
-  """Converts camelcase to Python case."""
-  return re.sub(r'([a-z]+)([A-Z])', r'\1_\2', name).lower()
-
-
-class _SchemaMeta(type):
-  """Meta-class for schema blobs."""
-
-  def __init__(cls, name, bases, dict):
-    required_fields = set()
-    optional_fields = set()
-    json_to_python = {}
-    python_to_json = {}
-    serializers = {}
-
-    def map_name(field):
-      if field.islower():
-        return field
-      python_name = _camel_to_python(field)
-      json_to_python[field] = python_name
-      python_to_json[python_name] =  field
-      return python_name
-
-    for klz in bases + (cls,):
-      if hasattr(klz, '_json_to_python'):
-        json_to_python.update(klz._json_to_python)
-      if hasattr(klz, '_python_to_json'):
-        python_to_json.update(klz._python_to_json)
-
-      if hasattr(klz, 'required_fields'):
-        for field in klz.required_fields:
-          field = map_name(field)
-          assert field not in required_fields, (klz, field)
-          assert field not in optional_fields, (klz, field)
-          required_fields.add(field)
-
-      if hasattr(klz, 'optional_fields'):
-        for field in klz.optional_fields:
-          field = map_name(field)
-          assert field not in required_fields, (klz, field)
-          assert field not in optional_fields, (klz, field)
-          optional_fields.add(field)
-
-      if hasattr(klz, '_serializers'):
-        for field, value in klz._serializers.iteritems():
-          field = map_name(field)
-          assert (field in required_fields or
-                  field in optional_fields), (klz, field)
-          if not isinstance(value, _FieldSerializer):
-            serializers[field] = value(field)
-          else:
-            serializers[field] = value
-
-    setattr(cls, 'required_fields', frozenset(required_fields))
-    setattr(cls, 'optional_fields', frozenset(optional_fields))
-    setattr(cls, '_serializers', serializers)
-    setattr(cls, '_json_to_python', json_to_python)
-    setattr(cls, '_python_to_json', python_to_json)
-    if hasattr(cls, 'type'):
-      _TYPE_TO_CLASS[cls.type] = cls
-
-
-class SchemaBlob(object):
-  """Base-class for schema blobs.
-
-  Each sub-class should have these fields:
-    type: Required value of 'camliType'.
-    required_fields: Set of required field names.
-    optional_fields: Set of optional field names.
-    _serializers: Dictionary mapping field names to the _FieldSerializer
-      sub-class to use for serializing/deserializing the field's value.
-  """
-
-  __metaclass__ = _SchemaMeta
-
-  required_fields = frozenset([
-    'camliVersion',
-    'camliType',
-  ])
-  optional_fields = frozenset([
-    'camliSigner',
-    'camliSig',
-  ])
-  _serializers = {}
-
-  def __init__(self, blobref):
-    """Initializer.
-
-    Args:
-      blobref: The blobref of the schema blob.
-    """
-    self.blobref = blobref
-    self.unexpected_fields = {}
-
-  @property
-  def all_fields(self):
-    """Returns the set of all potential fields for this blob."""
-    all_fields = set()
-    all_fields.update(self.required_fields)
-    all_fields.update(self.optional_fields)
-    all_fields.update(self.unexpected_fields)
-    return all_fields
-
-  def decode(self, blob_bytes, parsed=None):
-    """Decodes a schema blob's bytes and unmarshals its fields.
-
-    Args:
-      blob_bytes: String with the bytes of the blob.
-      parsed: If not None, an already parsed version of the blob bytes. When
-        set, the blob_bytes argument is ignored.
-
-    Raises:
-      DecodeError if the blob_bytes are bad or the parsed blob is missing
-      required fields.
-    """
-    for field in self.all_fields:
-      if hasattr(self, field):
-        delattr(self, field)
-
-    if parsed is None:
-      try:
-        parsed = simplejson.loads(blob_bytes)
-      except simplejson.JSONDecodeError, e:
-        raise DecodeError('Could not parse JSON. %s: %s' % (e.__class__, e))
-
-    for json_name, value in parsed.iteritems():
-      name = self._json_to_python.get(json_name, json_name)
-      if not (name in self.required_fields or name in self.optional_fields):
-        self.unexpected_fields[name] = value
-        continue
-      serializer = self._serializers.get(name)
-      if serializer:
-        value = serializer.from_json(value)
-      setattr(self, name, value)
-
-    for name in self.required_fields:
-      if not hasattr(self, name):
-        raise DecodeError('Missing required field: %s' % name)
-
-  def encode(self):
-    """Encodes a schema blob's bytes and marshals its fields.
-
-    Returns:
-      A UTF-8-encoding plain string containing the encoded blob bytes.
-    """
-    out = {}
-    for python_name in self.all_fields:
-      if not hasattr(self, python_name):
-        continue
-      value = getattr(self, python_name)
-      serializer = self._serializers.get(python_name)
-      if serializer:
-        value = serializer.to_json(value)
-      json_name = self._python_to_json.get(python_name, python_name)
-      out[json_name] = value
-    return simplejson.dumps(out)
-
-################################################################################
-# Serializers for converting JSON fields to/from Python values
-
-class _FieldSerializer(object):
-  """Serializes a named field's value to and from JSON."""
-
-  def __init__(self, name):
-    """Initializer.
-
-    Args:
-      name: The name of the field.
-    """
-    self.name = name
-
-  def from_json(self, value):
-    """Converts the JSON format of the field to the Python type.
-
-    Args:
-      value: The JSON value.
-
-    Returns:
-      The Python value.
-    """
-    raise NotImplemented('Must implement from_json')
-
-  def to_json(self, value):
-    """Converts the Python field value to the JSON format of the field.
-
-    Args:
-      value: The Python value.
-
-    Returns:
-      The JSON formatted-value.
-    """
-    raise NotImplemented('Must implement to_json')
-
-
-class _DateTimeSerializer(_FieldSerializer):
-  """Formats ISO 8601 strings to/from datetime.datetime instances."""
-
-  def from_json(self, value):
-    if '.' in value:
-      iso, micros = value.split('.')
-      micros = int((micros[:-1] + ('0' * 6))[:6])
-    else:
-      iso, micros = value[:-1], 0
-
-    when = datetime.datetime.strptime(iso, '%Y-%m-%dT%H:%M:%S')
-    return when + datetime.timedelta(microseconds=micros)
-
-  def to_json(self, value):
-    return value.isoformat() + 'Z'
-
-################################################################################
-# Concrete Schema Blobs
-
-class FileCommon(SchemaBlob):
-  """Common base-class for all unix-y files."""
-
-  required_fields = frozenset([])
-  optional_fields = frozenset([
-    'fileName',
-    'fileNameBytes',
-    'unixPermission',
-    'unixOwnerId',
-    'unixGroupId',
-    'unixGroup',
-    'unixXattrs',
-    'unixMtime',
-    'unixCtime',
-    'unixAtime',
-  ])
-  _serializers = {
-    'unixMtime': _DateTimeSerializer,
-    'unixCtime': _DateTimeSerializer,
-    'unixAtime': _DateTimeSerializer,
-  }
-
-
-class File(FileCommon):
-  """A file."""
-
-  type = 'file'
-  required_fields = frozenset([
-    'size',
-    'contentParts',
-  ])
-  optional_fields = frozenset([
-    'inodeRef',
-  ])
-  _serializers = {}
-
-
-class Directory(FileCommon):
-  """A directory."""
-
-  type = 'directory'
-  required_fields = frozenset([
-    'entries',
-  ])
-  optional_fields = frozenset([])
-  _serializers = {}
-
-
-class Symlink(FileCommon):
-  """A symlink."""
-
-  type = 'symlink'
-  required_fields = frozenset([])
-  optional_fields = frozenset([
-    'symlinkTarget',
-    'symlinkTargetBytes',
-  ])
-  _serializers = {}
-
-
-################################################################################
-# Helper methods
-
-def decode(blobref, blob_bytes):
-  """Decode any schema blob, validating all required fields for its time."""
-  try:
-    parsed = simplejson.loads(blob_bytes)
-  except simplejson.JSONDecodeError, e:
-    raise DecodeError('Could not parse JSON. %s: %s' % (e.__class__, e))
-
-  if 'camliType' not in parsed:
-    raise DecodeError('Could not find "camliType" field.')
-
-  camli_type = parsed['camliType']
-  blob_class = _TYPE_TO_CLASS.get(camli_type)
-  if blob_class is None:
-    raise DecodeError(
-        'Could not find SchemaBlob sub-class for camliType=%r' % camli_type)
-
-  schema_blob = blob_class(blobref)
-  schema_blob.decode(None, parsed=parsed)
-  return schema_blob
diff --git a/lib/python/camli/schema_test.py b/lib/python/camli/schema_test.py
deleted file mode 100755
index d38e4ea..0000000
--- a/lib/python/camli/schema_test.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/env python
-#
-# Camlistore uploader client for Python.
-#
-# Copyright 2011 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-"""Schema blob library for Camlistore."""
-
-__author__ = 'Brett Slatkin (bslatkin@gmail.com)'
-
-import datetime
-import os
-import sys
-import unittest
-
-sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
-
-import camli.schema
-import simplejson
-
-
-class SchemaTest(unittest.TestCase):
-  """End-to-end tests for Schema blobs."""
-
-  def testFile(self):
-    schema_blob = camli.schema.decode('asdf-myblobref', """{
-      "camliVersion": 1,
-      "camliType": "file",
-      "size": 0,
-      "contentParts": [],
-      "unixMtime": "2010-07-10T17:14:51.5678Z",
-      "unixCtime": "2010-07-10T17:20:03Z"
-    }""")
-    self.assertTrue(isinstance(schema_blob, camli.schema.File))
-    self.assertTrue(isinstance(schema_blob, camli.schema.FileCommon))
-    self.assertTrue(isinstance(schema_blob, camli.schema.SchemaBlob))
-    expected = {
-      'unexpected_fields': {},
-      'unix_mtime': datetime.datetime(2010, 7, 10, 17, 14, 51, 567800),
-      'content_parts': [],
-      'blobref': 'asdf-myblobref',
-      'unix_ctime': datetime.datetime(2010, 7, 10, 17, 20, 3),
-      'camli_version': 1,
-      'camli_type': u'file',
-      'size': 0
-    }
-    self.assertEquals(expected, schema_blob.__dict__)
-    result = schema_blob.encode()
-    result_parsed = simplejson.loads(result)
-    expected = {
-      'camliType': 'file',
-      'camliVersion': 1,
-      'unixMtime': '2010-07-10T17:14:51.567800Z',
-      'unixCtime': '2010-07-10T17:20:03Z',
-      'contentParts': [],
-      'size': 0,
-    }
-    self.assertEquals(expected, result_parsed)
-
-
-if __name__ == '__main__':
-  unittest.main()
\ No newline at end of file
diff --git a/lib/python/fusepy/__init__.py b/lib/python/fusepy/__init__.py
deleted file mode 100644
index 4f327c1..0000000
--- a/lib/python/fusepy/__init__.py
+++ /dev/null
@@ -1,8 +0,0 @@
-import sys
-pyver = sys.version_info[0:2]
-if pyver <= (2, 4):
-    from fuse24 import *
-elif pyver >= (3, 0):
-    from fuse3 import *
-else:
-    from fuse import *
diff --git a/lib/python/fusepy/context.py b/lib/python/fusepy/context.py
deleted file mode 100755
index 2609aa0..0000000
--- a/lib/python/fusepy/context.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/env python
-
-from errno import ENOENT
-from stat import S_IFDIR, S_IFREG
-from sys import argv, exit
-from time import time
-
-from fuse import FUSE, FuseOSError, Operations, LoggingMixIn, fuse_get_context
-
-
-class Context(LoggingMixIn, Operations):
-    """Example filesystem to demonstrate fuse_get_context()"""
-        
-    def getattr(self, path, fh=None):
-        uid, gid, pid = fuse_get_context()
-        if path == '/':
-            st = dict(st_mode=(S_IFDIR | 0755), st_nlink=2)
-        elif path == '/uid':
-            size = len('%s\n' % uid)
-            st = dict(st_mode=(S_IFREG | 0444), st_size=size)
-        elif path == '/gid':
-            size = len('%s\n' % gid)
-            st = dict(st_mode=(S_IFREG | 0444), st_size=size)
-        elif path == '/pid':
-            size = len('%s\n' % pid)
-            st = dict(st_mode=(S_IFREG | 0444), st_size=size)
-        else:
-            raise FuseOSError(ENOENT)
-        st['st_ctime'] = st['st_mtime'] = st['st_atime'] = time()
-        return st
-        
-    def read(self, path, size, offset, fh):
-        uid, gid, pid = fuse_get_context()
-        if path == '/uid':
-            return '%s\n' % uid
-        elif path == '/gid':
-            return '%s\n' % gid
-        elif path == '/pid':
-            return '%s\n' % pid
-        return ''
-            
-    def readdir(self, path, fh):
-        return ['.', '..', 'uid', 'gid', 'pid']
-
-    # Disable unused operations:
-    access = None
-    flush = None
-    getxattr = None
-    listxattr = None
-    open = None
-    opendir = None
-    release = None
-    releasedir = None
-    statfs = None
-
-
-if __name__ == "__main__":
-    if len(argv) != 2:
-        print 'usage: %s <mountpoint>' % argv[0]
-        exit(1)
-    fuse = FUSE(Context(), argv[1], foreground=True)
\ No newline at end of file
diff --git a/lib/python/fusepy/fuse.py b/lib/python/fusepy/fuse.py
deleted file mode 100644
index b68e737..0000000
--- a/lib/python/fusepy/fuse.py
+++ /dev/null
@@ -1,650 +0,0 @@
-# Copyright (c) 2008 Giorgos Verigakis <verigak@gmail.com>
-# 
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-from __future__ import division
-
-from ctypes import *
-from ctypes.util import find_library
-from errno import *
-from functools import partial
-from os import strerror
-from platform import machine, system
-from stat import S_IFDIR
-from traceback import print_exc
-
-
-class c_timespec(Structure):
-    _fields_ = [('tv_sec', c_long), ('tv_nsec', c_long)]
-
-class c_utimbuf(Structure):
-    _fields_ = [('actime', c_timespec), ('modtime', c_timespec)]
-
-class c_stat(Structure):
-    pass    # Platform dependent
-
-_system = system()
-if _system in ('Darwin', 'FreeBSD'):
-    _libiconv = CDLL(find_library("iconv"), RTLD_GLOBAL)     # libfuse dependency
-    ENOTSUP = 45
-    c_dev_t = c_int32
-    c_fsblkcnt_t = c_ulong
-    c_fsfilcnt_t = c_ulong
-    c_gid_t = c_uint32
-    c_mode_t = c_uint16
-    c_off_t = c_int64
-    c_pid_t = c_int32
-    c_uid_t = c_uint32
-    setxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte),
-        c_size_t, c_int, c_uint32)
-    getxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte),
-        c_size_t, c_uint32)
-    c_stat._fields_ = [
-        ('st_dev', c_dev_t),
-        ('st_ino', c_uint32),
-        ('st_mode', c_mode_t),
-        ('st_nlink', c_uint16),
-        ('st_uid', c_uid_t),
-        ('st_gid', c_gid_t),
-        ('st_rdev', c_dev_t),
-        ('st_atimespec', c_timespec),
-        ('st_mtimespec', c_timespec),
-        ('st_ctimespec', c_timespec),
-        ('st_size', c_off_t),
-        ('st_blocks', c_int64),
-        ('st_blksize', c_int32)]
-elif _system == 'Linux':
-    ENOTSUP = 95
-    c_dev_t = c_ulonglong
-    c_fsblkcnt_t = c_ulonglong
-    c_fsfilcnt_t = c_ulonglong
-    c_gid_t = c_uint
-    c_mode_t = c_uint
-    c_off_t = c_longlong
-    c_pid_t = c_int
-    c_uid_t = c_uint
-    setxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte), c_size_t, c_int)
-    getxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte), c_size_t)
-    
-    _machine = machine()
-    if _machine == 'x86_64':
-        c_stat._fields_ = [
-            ('st_dev', c_dev_t),
-            ('st_ino', c_ulong),
-            ('st_nlink', c_ulong),
-            ('st_mode', c_mode_t),
-            ('st_uid', c_uid_t),
-            ('st_gid', c_gid_t),
-            ('__pad0', c_int),
-            ('st_rdev', c_dev_t),
-            ('st_size', c_off_t),
-            ('st_blksize', c_long),
-            ('st_blocks', c_long),
-            ('st_atimespec', c_timespec),
-            ('st_mtimespec', c_timespec),
-            ('st_ctimespec', c_timespec)]
-    elif _machine == 'ppc':
-        c_stat._fields_ = [
-            ('st_dev', c_dev_t),
-            ('st_ino', c_ulonglong),
-            ('st_mode', c_mode_t),
-            ('st_nlink', c_uint),
-            ('st_uid', c_uid_t),
-            ('st_gid', c_gid_t),
-            ('st_rdev', c_dev_t),
-            ('__pad2', c_ushort),
-            ('st_size', c_off_t),
-            ('st_blksize', c_long),
-            ('st_blocks', c_longlong),
-            ('st_atimespec', c_timespec),
-            ('st_mtimespec', c_timespec),
-            ('st_ctimespec', c_timespec)]
-    else:
-        # i686, use as fallback for everything else
-        c_stat._fields_ = [
-            ('st_dev', c_dev_t),
-            ('__pad1', c_ushort),
-            ('__st_ino', c_ulong),
-            ('st_mode', c_mode_t),
-            ('st_nlink', c_uint),
-            ('st_uid', c_uid_t),
-            ('st_gid', c_gid_t),
-            ('st_rdev', c_dev_t),
-            ('__pad2', c_ushort),
-            ('st_size', c_off_t),
-            ('st_blksize', c_long),
-            ('st_blocks', c_longlong),
-            ('st_atimespec', c_timespec),
-            ('st_mtimespec', c_timespec),
-            ('st_ctimespec', c_timespec),
-            ('st_ino', c_ulonglong)]
-else:
-    raise NotImplementedError('%s is not supported.' % _system)
-
-
-class c_statvfs(Structure):
-    _fields_ = [
-        ('f_bsize', c_ulong),
-        ('f_frsize', c_ulong),
-        ('f_blocks', c_fsblkcnt_t),
-        ('f_bfree', c_fsblkcnt_t),
-        ('f_bavail', c_fsblkcnt_t),
-        ('f_files', c_fsfilcnt_t),
-        ('f_ffree', c_fsfilcnt_t),
-        ('f_favail', c_fsfilcnt_t)]
-
-if _system == 'FreeBSD':
-    c_fsblkcnt_t = c_uint64
-    c_fsfilcnt_t = c_uint64
-    setxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte), c_size_t, c_int)
-    getxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte), c_size_t)
-    class c_statvfs(Structure):
-        _fields_ = [
-            ('f_bavail', c_fsblkcnt_t),
-            ('f_bfree', c_fsblkcnt_t),
-            ('f_blocks', c_fsblkcnt_t),
-            ('f_favail', c_fsfilcnt_t),
-            ('f_ffree', c_fsfilcnt_t),
-            ('f_files', c_fsfilcnt_t),
-            ('f_bsize', c_ulong),
-            ('f_flag', c_ulong),
-            ('f_frsize', c_ulong)]
-
-class fuse_file_info(Structure):
-    _fields_ = [
-        ('flags', c_int),
-        ('fh_old', c_ulong),
-        ('writepage', c_int),
-        ('direct_io', c_uint, 1),
-        ('keep_cache', c_uint, 1),
-        ('flush', c_uint, 1),
-        ('padding', c_uint, 29),
-        ('fh', c_uint64),
-        ('lock_owner', c_uint64)]
-
-class fuse_context(Structure):
-    _fields_ = [
-        ('fuse', c_voidp),
-        ('uid', c_uid_t),
-        ('gid', c_gid_t),
-        ('pid', c_pid_t),
-        ('private_data', c_voidp)]
-
-class fuse_operations(Structure):
-    _fields_ = [
-        ('getattr', CFUNCTYPE(c_int, c_char_p, POINTER(c_stat))),
-        ('readlink', CFUNCTYPE(c_int, c_char_p, POINTER(c_byte), c_size_t)),
-        ('getdir', c_voidp),    # Deprecated, use readdir
-        ('mknod', CFUNCTYPE(c_int, c_char_p, c_mode_t, c_dev_t)),
-        ('mkdir', CFUNCTYPE(c_int, c_char_p, c_mode_t)),
-        ('unlink', CFUNCTYPE(c_int, c_char_p)),
-        ('rmdir', CFUNCTYPE(c_int, c_char_p)),
-        ('symlink', CFUNCTYPE(c_int, c_char_p, c_char_p)),
-        ('rename', CFUNCTYPE(c_int, c_char_p, c_char_p)),
-        ('link', CFUNCTYPE(c_int, c_char_p, c_char_p)),
-        ('chmod', CFUNCTYPE(c_int, c_char_p, c_mode_t)),
-        ('chown', CFUNCTYPE(c_int, c_char_p, c_uid_t, c_gid_t)),
-        ('truncate', CFUNCTYPE(c_int, c_char_p, c_off_t)),
-        ('utime', c_voidp),     # Deprecated, use utimens
-        ('open', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('read', CFUNCTYPE(c_int, c_char_p, POINTER(c_byte), c_size_t, c_off_t,
-            POINTER(fuse_file_info))),
-        ('write', CFUNCTYPE(c_int, c_char_p, POINTER(c_byte), c_size_t, c_off_t,
-            POINTER(fuse_file_info))),
-        ('statfs', CFUNCTYPE(c_int, c_char_p, POINTER(c_statvfs))),
-        ('flush', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('release', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('fsync', CFUNCTYPE(c_int, c_char_p, c_int, POINTER(fuse_file_info))),
-        ('setxattr', setxattr_t),
-        ('getxattr', getxattr_t),
-        ('listxattr', CFUNCTYPE(c_int, c_char_p, POINTER(c_byte), c_size_t)),
-        ('removexattr', CFUNCTYPE(c_int, c_char_p, c_char_p)),
-        ('opendir', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('readdir', CFUNCTYPE(c_int, c_char_p, c_voidp, CFUNCTYPE(c_int, c_voidp,
-            c_char_p, POINTER(c_stat), c_off_t), c_off_t, POINTER(fuse_file_info))),
-        ('releasedir', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('fsyncdir', CFUNCTYPE(c_int, c_char_p, c_int, POINTER(fuse_file_info))),
-        ('init', CFUNCTYPE(c_voidp, c_voidp)),
-        ('destroy', CFUNCTYPE(c_voidp, c_voidp)),
-        ('access', CFUNCTYPE(c_int, c_char_p, c_int)),
-        ('create', CFUNCTYPE(c_int, c_char_p, c_mode_t, POINTER(fuse_file_info))),
-        ('ftruncate', CFUNCTYPE(c_int, c_char_p, c_off_t, POINTER(fuse_file_info))),
-        ('fgetattr', CFUNCTYPE(c_int, c_char_p, POINTER(c_stat),
-            POINTER(fuse_file_info))),
-        ('lock', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info), c_int, c_voidp)),
-        ('utimens', CFUNCTYPE(c_int, c_char_p, POINTER(c_utimbuf))),
-        ('bmap', CFUNCTYPE(c_int, c_char_p, c_size_t, POINTER(c_ulonglong)))]
-
-
-def time_of_timespec(ts):
-    return ts.tv_sec + ts.tv_nsec / 10 ** 9
-
-def set_st_attrs(st, attrs):
-    for key, val in attrs.items():
-        if key in ('st_atime', 'st_mtime', 'st_ctime'):
-            timespec = getattr(st, key + 'spec')
-            timespec.tv_sec = int(val)
-            timespec.tv_nsec = int((val - timespec.tv_sec) * 10 ** 9)
-        elif hasattr(st, key):
-            setattr(st, key, val)
-
-
-_libfuse_path = find_library('fuse')
-if not _libfuse_path:
-    raise EnvironmentError('Unable to find libfuse')
-_libfuse = CDLL(_libfuse_path)
-_libfuse.fuse_get_context.restype = POINTER(fuse_context)
-
-
-def fuse_get_context():
-    """Returns a (uid, gid, pid) tuple"""
-    ctxp = _libfuse.fuse_get_context()
-    ctx = ctxp.contents
-    return ctx.uid, ctx.gid, ctx.pid
-
-
-class FuseOSError(OSError):
-    def __init__(self, errno):
-        super(FuseOSError, self).__init__(errno, strerror(errno))
-
-
-class FUSE(object):
-    """This class is the lower level interface and should not be subclassed
-       under normal use. Its methods are called by fuse.
-       Assumes API version 2.6 or later."""
-    
-    def __init__(self, operations, mountpoint, raw_fi=False, **kwargs):
-        """Setting raw_fi to True will cause FUSE to pass the fuse_file_info
-           class as is to Operations, instead of just the fh field.
-           This gives you access to direct_io, keep_cache, etc."""
-        
-        self.operations = operations
-        self.raw_fi = raw_fi
-        args = ['fuse']
-        if kwargs.pop('foreground', False):
-            args.append('-f')
-        if kwargs.pop('debug', False):
-            args.append('-d')
-        if kwargs.pop('nothreads', False):
-            args.append('-s')
-        kwargs.setdefault('fsname', operations.__class__.__name__)
-        args.append('-o')
-        args.append(','.join(key if val == True else '%s=%s' % (key, val)
-            for key, val in kwargs.items()))
-        args.append(mountpoint)
-        argv = (c_char_p * len(args))(*args)
-        
-        fuse_ops = fuse_operations()
-        for name, prototype in fuse_operations._fields_:
-            if prototype != c_voidp and getattr(operations, name, None):
-                op = partial(self._wrapper_, getattr(self, name))
-                setattr(fuse_ops, name, prototype(op))
-        err = _libfuse.fuse_main_real(len(args), argv, pointer(fuse_ops),
-            sizeof(fuse_ops), None)            
-        del self.operations     # Invoke the destructor
-        if err:
-            raise RuntimeError(err)
-    
-    def _wrapper_(self, func, *args, **kwargs):
-        """Decorator for the methods that follow"""
-        try:
-            return func(*args, **kwargs) or 0
-        except OSError, e:
-            return -(e.errno or EFAULT)
-        except:
-            print_exc()
-            return -EFAULT
-    
-    def getattr(self, path, buf):
-        return self.fgetattr(path, buf, None)
-    
-    def readlink(self, path, buf, bufsize):
-        ret = self.operations('readlink', path)
-        data = create_string_buffer(ret[:bufsize - 1])
-        memmove(buf, data, len(data))
-        return 0
-    
-    def mknod(self, path, mode, dev):
-        return self.operations('mknod', path, mode, dev)
-    
-    def mkdir(self, path, mode):
-        return self.operations('mkdir', path, mode)
-    
-    def unlink(self, path):
-        return self.operations('unlink', path)
-    
-    def rmdir(self, path):
-        return self.operations('rmdir', path)
-    
-    def symlink(self, source, target):
-        return self.operations('symlink', target, source)
-    
-    def rename(self, old, new):
-        return self.operations('rename', old, new)
-    
-    def link(self, source, target):
-        return self.operations('link', target, source)
-    
-    def chmod(self, path, mode):
-        return self.operations('chmod', path, mode)
-    
-    def chown(self, path, uid, gid):
-        # Check if any of the arguments is a -1 that has overflowed
-        if c_uid_t(uid + 1).value == 0:
-            uid = -1
-        if c_gid_t(gid + 1).value == 0:
-            gid = -1
-        return self.operations('chown', path, uid, gid)
-    
-    def truncate(self, path, length):
-        return self.operations('truncate', path, length)
-    
-    def open(self, path, fip):
-        fi = fip.contents
-        if self.raw_fi:
-            return self.operations('open', path, fi)
-        else:
-            fi.fh = self.operations('open', path, fi.flags)
-            return 0
-    
-    def read(self, path, buf, size, offset, fip):
-        fh = fip.contents if self.raw_fi else fip.contents.fh
-        ret = self.operations('read', path, size, offset, fh)
-        if not ret:
-            return 0
-        data = create_string_buffer(ret[:size], size)
-        memmove(buf, data, size)
-        return size
-    
-    def write(self, path, buf, size, offset, fip):
-        data = string_at(buf, size)
-        fh = fip.contents if self.raw_fi else fip.contents.fh
-        return self.operations('write', path, data, offset, fh)
-    
-    def statfs(self, path, buf):
-        stv = buf.contents
-        attrs = self.operations('statfs', path)
-        for key, val in attrs.items():
-            if hasattr(stv, key):
-                setattr(stv, key, val)
-        return 0
-    
-    def flush(self, path, fip):
-        fh = fip.contents if self.raw_fi else fip.contents.fh
-        return self.operations('flush', path, fh)
-    
-    def release(self, path, fip):
-        fh = fip.contents if self.raw_fi else fip.contents.fh
-        return self.operations('release', path, fh)
-    
-    def fsync(self, path, datasync, fip):
-        fh = fip.contents if self.raw_fi else fip.contents.fh
-        return self.operations('fsync', path, datasync, fh)
-    
-    def setxattr(self, path, name, value, size, options, *args):
-        data = string_at(value, size)
-        return self.operations('setxattr', path, name, data, options, *args)
-    
-    def getxattr(self, path, name, value, size, *args):
-        ret = self.operations('getxattr', path, name, *args)
-        retsize = len(ret)
-        buf = create_string_buffer(ret, retsize)    # Does not add trailing 0
-        if bool(value):
-            if retsize > size:
-                return -ERANGE
-            memmove(value, buf, retsize)
-        return retsize
-    
-    def listxattr(self, path, namebuf, size):
-        ret = self.operations('listxattr', path)
-        buf = create_string_buffer('\x00'.join(ret)) if ret else ''
-        bufsize = len(buf)
-        if bool(namebuf):
-            if bufsize > size:
-                return -ERANGE
-            memmove(namebuf, buf, bufsize)
-        return bufsize
-    
-    def removexattr(self, path, name):
-        return self.operations('removexattr', path, name)
-    
-    def opendir(self, path, fip):
-        # Ignore raw_fi
-        fip.contents.fh = self.operations('opendir', path)
-        return 0
-    
-    def readdir(self, path, buf, filler, offset, fip):
-        # Ignore raw_fi
-        for item in self.operations('readdir', path, fip.contents.fh):
-            if isinstance(item, str):
-                name, st, offset = item, None, 0
-            else:
-                name, attrs, offset = item
-                if attrs:
-                    st = c_stat()
-                    set_st_attrs(st, attrs)
-                else:
-                    st = None
-            if filler(buf, name, st, offset) != 0:
-                break
-        return 0
-    
-    def releasedir(self, path, fip):
-        # Ignore raw_fi
-        return self.operations('releasedir', path, fip.contents.fh)
-    
-    def fsyncdir(self, path, datasync, fip):
-        # Ignore raw_fi
-        return self.operations('fsyncdir', path, datasync, fip.contents.fh)
-    
-    def init(self, conn):
-        return self.operations('init', '/')
-    
-    def destroy(self, private_data):
-        return self.operations('destroy', '/')
-    
-    def access(self, path, amode):
-        return self.operations('access', path, amode)
-    
-    def create(self, path, mode, fip):
-        fi = fip.contents
-        if self.raw_fi:
-            return self.operations('create', path, mode, fi)
-        else:
-            fi.fh = self.operations('create', path, mode)
-            return 0
-    
-    def ftruncate(self, path, length, fip):
-        fh = fip.contents if self.raw_fi else fip.contents.fh
-        return self.operations('truncate', path, length, fh)
-    
-    def fgetattr(self, path, buf, fip):
-        memset(buf, 0, sizeof(c_stat))
-        st = buf.contents
-        fh = fip and (fip.contents if self.raw_fi else fip.contents.fh)
-        attrs = self.operations('getattr', path, fh)
-        set_st_attrs(st, attrs)
-        return 0
-    
-    def lock(self, path, fip, cmd, lock):
-        fh = fip.contents if self.raw_fi else fip.contents.fh
-        return self.operations('lock', path, fh, cmd, lock)
-    
-    def utimens(self, path, buf):
-        if buf:
-            atime = time_of_timespec(buf.contents.actime)
-            mtime = time_of_timespec(buf.contents.modtime)
-            times = (atime, mtime)
-        else:
-            times = None
-        return self.operations('utimens', path, times)
-    
-    def bmap(self, path, blocksize, idx):
-        return self.operations('bmap', path, blocksize, idx)
-
-
-class Operations(object):
-    """This class should be subclassed and passed as an argument to FUSE on
-       initialization. All operations should raise a FuseOSError exception
-       on error.
-       
-       When in doubt of what an operation should do, check the FUSE header
-       file or the corresponding system call man page."""
-    
-    def __call__(self, op, *args):
-        if not hasattr(self, op):
-            raise FuseOSError(EFAULT)
-        return getattr(self, op)(*args)
-        
-    def access(self, path, amode):
-        return 0
-    
-    bmap = None
-    
-    def chmod(self, path, mode):
-        raise FuseOSError(EROFS)
-    
-    def chown(self, path, uid, gid):
-        raise FuseOSError(EROFS)
-    
-    def create(self, path, mode, fi=None):
-        """When raw_fi is False (default case), fi is None and create should
-           return a numerical file handle.
-           When raw_fi is True the file handle should be set directly by create
-           and return 0."""
-        raise FuseOSError(EROFS)
-    
-    def destroy(self, path):
-        """Called on filesystem destruction. Path is always /"""
-        pass
-    
-    def flush(self, path, fh):
-        return 0
-    
-    def fsync(self, path, datasync, fh):
-        return 0
-    
-    def fsyncdir(self, path, datasync, fh):
-        return 0
-    
-    def getattr(self, path, fh=None):
-        """Returns a dictionary with keys identical to the stat C structure
-           of stat(2).
-           st_atime, st_mtime and st_ctime should be floats.
-           NOTE: There is an incombatibility between Linux and Mac OS X concerning
-           st_nlink of directories. Mac OS X counts all files inside the directory,
-           while Linux counts only the subdirectories."""
-        
-        if path != '/':
-            raise FuseOSError(ENOENT)
-        return dict(st_mode=(S_IFDIR | 0755), st_nlink=2)
-    
-    def getxattr(self, path, name, position=0):
-        raise FuseOSError(ENOTSUP)
-    
-    def init(self, path):
-        """Called on filesystem initialization. Path is always /
-           Use it instead of __init__ if you start threads on initialization."""
-        pass
-    
-    def link(self, target, source):
-        raise FuseOSError(EROFS)
-    
-    def listxattr(self, path):
-        return []
-        
-    lock = None
-    
-    def mkdir(self, path, mode):
-        raise FuseOSError(EROFS)
-    
-    def mknod(self, path, mode, dev):
-        raise FuseOSError(EROFS)
-    
-    def open(self, path, flags):
-        """When raw_fi is False (default case), open should return a numerical
-           file handle.
-           When raw_fi is True the signature of open becomes:
-               open(self, path, fi)
-           and the file handle should be set directly."""
-        return 0
-    
-    def opendir(self, path):
-        """Returns a numerical file handle."""
-        return 0
-    
-    def read(self, path, size, offset, fh):
-        """Returns a string containing the data requested."""
-        raise FuseOSError(EIO)
-    
-    def readdir(self, path, fh):
-        """Can return either a list of names, or a list of (name, attrs, offset)
-           tuples. attrs is a dict as in getattr."""
-        return ['.', '..']
-    
-    def readlink(self, path):
-        raise FuseOSError(ENOENT)
-    
-    def release(self, path, fh):
-        return 0
-    
-    def releasedir(self, path, fh):
-        return 0
-    
-    def removexattr(self, path, name):
-        raise FuseOSError(ENOTSUP)
-    
-    def rename(self, old, new):
-        raise FuseOSError(EROFS)
-    
-    def rmdir(self, path):
-        raise FuseOSError(EROFS)
-    
-    def setxattr(self, path, name, value, options, position=0):
-        raise FuseOSError(ENOTSUP)
-    
-    def statfs(self, path):
-        """Returns a dictionary with keys identical to the statvfs C structure
-           of statvfs(3).
-           On Mac OS X f_bsize and f_frsize must be a power of 2 (minimum 512)."""
-        return {}
-    
-    def symlink(self, target, source):
-        raise FuseOSError(EROFS)
-    
-    def truncate(self, path, length, fh=None):
-        raise FuseOSError(EROFS)
-    
-    def unlink(self, path):
-        raise FuseOSError(EROFS)
-    
-    def utimens(self, path, times=None):
-        """Times is a (atime, mtime) tuple. If None use current time."""
-        return 0
-    
-    def write(self, path, data, offset, fh):
-        raise FuseOSError(EROFS)
-
-
-class LoggingMixIn:
-    def __call__(self, op, path, *args):
-        print '->', op, path, repr(args)
-        ret = '[Unhandled Exception]'
-        try:
-            ret = getattr(self, op)(path, *args)
-            return ret
-        except OSError, e:
-            ret = str(e)
-            raise
-        finally:
-            print '<-', op, repr(ret)
diff --git a/lib/python/fusepy/fuse24.py b/lib/python/fusepy/fuse24.py
deleted file mode 100644
index 8c20679..0000000
--- a/lib/python/fusepy/fuse24.py
+++ /dev/null
@@ -1,669 +0,0 @@
-# Copyright (c) 2008 Giorgos Verigakis <verigak@gmail.com>
-# 
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-from __future__ import division
-
-from ctypes import *
-from ctypes.util import find_library
-from errno import *
-from platform import machine, system
-from stat import S_IFDIR
-from traceback import print_exc
-
-
-class c_timespec(Structure):
-    _fields_ = [('tv_sec', c_long), ('tv_nsec', c_long)]
-
-class c_utimbuf(Structure):
-    _fields_ = [('actime', c_timespec), ('modtime', c_timespec)]
-
-class c_stat(Structure):
-    pass    # Platform dependent
-
-_system = system()
-if _system in ('Darwin', 'FreeBSD'):
-    _libiconv = CDLL(find_library("iconv"), RTLD_GLOBAL)     # libfuse dependency
-    ENOTSUP = 45
-    c_dev_t = c_int32
-    c_fsblkcnt_t = c_ulong
-    c_fsfilcnt_t = c_ulong
-    c_gid_t = c_uint32
-    c_mode_t = c_uint16
-    c_off_t = c_int64
-    c_pid_t = c_int32
-    c_uid_t = c_uint32
-    setxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte),
-        c_size_t, c_int, c_uint32)
-    getxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte),
-        c_size_t, c_uint32)
-    c_stat._fields_ = [
-        ('st_dev', c_dev_t),
-        ('st_ino', c_uint32),
-        ('st_mode', c_mode_t),
-        ('st_nlink', c_uint16),
-        ('st_uid', c_uid_t),
-        ('st_gid', c_gid_t),
-        ('st_rdev', c_dev_t),
-        ('st_atimespec', c_timespec),
-        ('st_mtimespec', c_timespec),
-        ('st_ctimespec', c_timespec),
-        ('st_size', c_off_t),
-        ('st_blocks', c_int64),
-        ('st_blksize', c_int32)]
-elif _system == 'Linux':
-    ENOTSUP = 95
-    c_dev_t = c_ulonglong
-    c_fsblkcnt_t = c_ulonglong
-    c_fsfilcnt_t = c_ulonglong
-    c_gid_t = c_uint
-    c_mode_t = c_uint
-    c_off_t = c_longlong
-    c_pid_t = c_int
-    c_uid_t = c_uint
-    setxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte), c_size_t, c_int)
-    getxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte), c_size_t)
-    
-    _machine = machine()
-    if _machine == 'x86_64':
-        c_stat._fields_ = [
-            ('st_dev', c_dev_t),
-            ('st_ino', c_ulong),
-            ('st_nlink', c_ulong),
-            ('st_mode', c_mode_t),
-            ('st_uid', c_uid_t),
-            ('st_gid', c_gid_t),
-            ('__pad0', c_int),
-            ('st_rdev', c_dev_t),
-            ('st_size', c_off_t),
-            ('st_blksize', c_long),
-            ('st_blocks', c_long),
-            ('st_atimespec', c_timespec),
-            ('st_mtimespec', c_timespec),
-            ('st_ctimespec', c_timespec)]
-    elif _machine == 'ppc':
-        c_stat._fields_ = [
-            ('st_dev', c_dev_t),
-            ('st_ino', c_ulonglong),
-            ('st_mode', c_mode_t),
-            ('st_nlink', c_uint),
-            ('st_uid', c_uid_t),
-            ('st_gid', c_gid_t),
-            ('st_rdev', c_dev_t),
-            ('__pad2', c_ushort),
-            ('st_size', c_off_t),
-            ('st_blksize', c_long),
-            ('st_blocks', c_longlong),
-            ('st_atimespec', c_timespec),
-            ('st_mtimespec', c_timespec),
-            ('st_ctimespec', c_timespec)]
-    else:
-        # i686, use as fallback for everything else
-        c_stat._fields_ = [
-            ('st_dev', c_dev_t),
-            ('__pad1', c_ushort),
-            ('__st_ino', c_ulong),
-            ('st_mode', c_mode_t),
-            ('st_nlink', c_uint),
-            ('st_uid', c_uid_t),
-            ('st_gid', c_gid_t),
-            ('st_rdev', c_dev_t),
-            ('__pad2', c_ushort),
-            ('st_size', c_off_t),
-            ('st_blksize', c_long),
-            ('st_blocks', c_longlong),
-            ('st_atimespec', c_timespec),
-            ('st_mtimespec', c_timespec),
-            ('st_ctimespec', c_timespec),
-            ('st_ino', c_ulonglong)]
-else:
-    raise NotImplementedError('%s is not supported.' % _system)
-
-
-class c_statvfs(Structure):
-    _fields_ = [
-        ('f_bsize', c_ulong),
-        ('f_frsize', c_ulong),
-        ('f_blocks', c_fsblkcnt_t),
-        ('f_bfree', c_fsblkcnt_t),
-        ('f_bavail', c_fsblkcnt_t),
-        ('f_files', c_fsfilcnt_t),
-        ('f_ffree', c_fsfilcnt_t),
-        ('f_favail', c_fsfilcnt_t)]
-
-if _system == 'FreeBSD':
-    c_fsblkcnt_t = c_uint64
-    c_fsfilcnt_t = c_uint64
-    setxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte), c_size_t, c_int)
-    getxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte), c_size_t)
-    class c_statvfs(Structure):
-        _fields_ = [
-            ('f_bavail', c_fsblkcnt_t),
-            ('f_bfree', c_fsblkcnt_t),
-            ('f_blocks', c_fsblkcnt_t),
-            ('f_favail', c_fsfilcnt_t),
-            ('f_ffree', c_fsfilcnt_t),
-            ('f_files', c_fsfilcnt_t),
-            ('f_bsize', c_ulong),
-            ('f_flag', c_ulong),
-            ('f_frsize', c_ulong)]
-
-class fuse_file_info(Structure):
-    _fields_ = [
-        ('flags', c_int),
-        ('fh_old', c_ulong),
-        ('writepage', c_int),
-        ('direct_io', c_uint, 1),
-        ('keep_cache', c_uint, 1),
-        ('flush', c_uint, 1),
-        ('padding', c_uint, 29),
-        ('fh', c_uint64),
-        ('lock_owner', c_uint64)]
-
-class fuse_context(Structure):
-    _fields_ = [
-        ('fuse', c_voidp),
-        ('uid', c_uid_t),
-        ('gid', c_gid_t),
-        ('pid', c_pid_t),
-        ('private_data', c_voidp)]
-
-class fuse_operations(Structure):
-    _fields_ = [
-        ('getattr', CFUNCTYPE(c_int, c_char_p, POINTER(c_stat))),
-        ('readlink', CFUNCTYPE(c_int, c_char_p, POINTER(c_byte), c_size_t)),
-        ('getdir', c_voidp),    # Deprecated, use readdir
-        ('mknod', CFUNCTYPE(c_int, c_char_p, c_mode_t, c_dev_t)),
-        ('mkdir', CFUNCTYPE(c_int, c_char_p, c_mode_t)),
-        ('unlink', CFUNCTYPE(c_int, c_char_p)),
-        ('rmdir', CFUNCTYPE(c_int, c_char_p)),
-        ('symlink', CFUNCTYPE(c_int, c_char_p, c_char_p)),
-        ('rename', CFUNCTYPE(c_int, c_char_p, c_char_p)),
-        ('link', CFUNCTYPE(c_int, c_char_p, c_char_p)),
-        ('chmod', CFUNCTYPE(c_int, c_char_p, c_mode_t)),
-        ('chown', CFUNCTYPE(c_int, c_char_p, c_uid_t, c_gid_t)),
-        ('truncate', CFUNCTYPE(c_int, c_char_p, c_off_t)),
-        ('utime', c_voidp),     # Deprecated, use utimens
-        ('open', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('read', CFUNCTYPE(c_int, c_char_p, POINTER(c_byte), c_size_t, c_off_t,
-            POINTER(fuse_file_info))),
-        ('write', CFUNCTYPE(c_int, c_char_p, POINTER(c_byte), c_size_t, c_off_t,
-            POINTER(fuse_file_info))),
-        ('statfs', CFUNCTYPE(c_int, c_char_p, POINTER(c_statvfs))),
-        ('flush', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('release', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('fsync', CFUNCTYPE(c_int, c_char_p, c_int, POINTER(fuse_file_info))),
-        ('setxattr', setxattr_t),
-        ('getxattr', getxattr_t),
-        ('listxattr', CFUNCTYPE(c_int, c_char_p, POINTER(c_byte), c_size_t)),
-        ('removexattr', CFUNCTYPE(c_int, c_char_p, c_char_p)),
-        ('opendir', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('readdir', CFUNCTYPE(c_int, c_char_p, c_voidp, CFUNCTYPE(c_int, c_voidp,
-            c_char_p, POINTER(c_stat), c_off_t), c_off_t, POINTER(fuse_file_info))),
-        ('releasedir', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('fsyncdir', CFUNCTYPE(c_int, c_char_p, c_int, POINTER(fuse_file_info))),
-        ('init', CFUNCTYPE(c_voidp, c_voidp)),
-        ('destroy', CFUNCTYPE(c_voidp, c_voidp)),
-        ('access', CFUNCTYPE(c_int, c_char_p, c_int)),
-        ('create', CFUNCTYPE(c_int, c_char_p, c_mode_t, POINTER(fuse_file_info))),
-        ('ftruncate', CFUNCTYPE(c_int, c_char_p, c_off_t, POINTER(fuse_file_info))),
-        ('fgetattr', CFUNCTYPE(c_int, c_char_p, POINTER(c_stat),
-            POINTER(fuse_file_info))),
-        ('lock', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info), c_int, c_voidp)),
-        ('utimens', CFUNCTYPE(c_int, c_char_p, POINTER(c_utimbuf))),
-        ('bmap', CFUNCTYPE(c_int, c_char_p, c_size_t, POINTER(c_ulonglong)))]
-
-
-def time_of_timespec(ts):
-    return ts.tv_sec + ts.tv_nsec / 10 ** 9
-
-def set_st_attrs(st, attrs):
-    for key, val in attrs.items():
-        if key in ('st_atime', 'st_mtime', 'st_ctime'):
-            timespec = getattr(st, key + 'spec')
-            timespec.tv_sec = int(val)
-            timespec.tv_nsec = int((val - timespec.tv_sec) * 10 ** 9)
-        elif hasattr(st, key):
-            setattr(st, key, val)
-
-
-_libfuse_path = find_library('fuse')
-if not _libfuse_path:
-    raise EnvironmentError('Unable to find libfuse')
-_libfuse = CDLL(_libfuse_path)
-_libfuse.fuse_get_context.restype = POINTER(fuse_context)
-
-
-def fuse_get_context():
-    """Returns a (uid, gid, pid) tuple"""
-    ctxp = _libfuse.fuse_get_context()
-    ctx = ctxp.contents
-    return ctx.uid, ctx.gid, ctx.pid
-
-
-class FUSE(object):
-    """This class is the lower level interface and should not be subclassed
-       under normal use. Its methods are called by fuse.
-       Assumes API version 2.6 or later."""
-    
-    def __init__(self, operations, mountpoint, raw_fi=False, **kwargs):
-        """Setting raw_fi to True will cause FUSE to pass the fuse_file_info
-           class as is to Operations, instead of just the fh field.
-           This gives you access to direct_io, keep_cache, etc."""
-        
-        self.operations = operations
-        self.raw_fi = raw_fi
-        args = ['fuse']
-        if kwargs.pop('foreground', False):
-            args.append('-f')
-        if kwargs.pop('debug', False):
-            args.append('-d')
-        if kwargs.pop('nothreads', False):
-            args.append('-s')
-        kwargs.setdefault('fsname', operations.__class__.__name__)
-        args.append('-o')
-        args.append(','.join(val is True and key or '%s=%s' % (key, val)
-            for key, val in kwargs.items()))
-        args.append(mountpoint)
-        argv = (c_char_p * len(args))(*args)
-        
-        fuse_ops = fuse_operations()
-        for name, prototype in fuse_operations._fields_:
-            if prototype != c_voidp and getattr(operations, name, None):
-                op = self._create_wrapper_(getattr(self, name))
-                setattr(fuse_ops, name, prototype(op))
-        _libfuse.fuse_main_real(len(args), argv, pointer(fuse_ops),
-            sizeof(fuse_ops), None)
-        del self.operations     # Invoke the destructor
-
-    @staticmethod
-    def _create_wrapper_(func):
-        def _wrapper_(*args, **kwargs):
-            """Decorator for the methods that follow"""
-            try:
-                return func(*args, **kwargs) or 0
-            except OSError, e:
-                return -(e.errno or EFAULT)
-            except:
-                print_exc()
-                return -EFAULT
-        return _wrapper_
-
-    def getattr(self, path, buf):
-        return self.fgetattr(path, buf, None)
-    
-    def readlink(self, path, buf, bufsize):
-        ret = self.operations('readlink', path)
-        data = create_string_buffer(ret[:bufsize - 1])
-        memmove(buf, data, len(data))
-        return 0
-    
-    def mknod(self, path, mode, dev):
-        return self.operations('mknod', path, mode, dev)
-    
-    def mkdir(self, path, mode):
-        return self.operations('mkdir', path, mode)
-    
-    def unlink(self, path):
-        return self.operations('unlink', path)
-    
-    def rmdir(self, path):
-        return self.operations('rmdir', path)
-    
-    def symlink(self, source, target):
-        return self.operations('symlink', target, source)
-    
-    def rename(self, old, new):
-        return self.operations('rename', old, new)
-    
-    def link(self, source, target):
-        return self.operations('link', target, source)
-    
-    def chmod(self, path, mode):
-        return self.operations('chmod', path, mode)
-    
-    def chown(self, path, uid, gid):
-        return self.operations('chown', path, uid, gid)
-    
-    def truncate(self, path, length):
-        return self.operations('truncate', path, length)
-    
-    def open(self, path, fip):
-        fi = fip.contents
-        if self.raw_fi:
-            return self.operations('open', path, fi)
-        else:
-            fi.fh = self.operations('open', path, fi.flags)
-            return 0
-    
-    def read(self, path, buf, size, offset, fip):
-        if self.raw_fi:
-          fh = fip.contents
-        else:
-          fh = fip.contents.fh
-        ret = self.operations('read', path, size, offset, fh)
-        if not ret:
-            return 0
-        data = create_string_buffer(ret[:size], size)
-        memmove(buf, data, size)
-        return size
-    
-    def write(self, path, buf, size, offset, fip):
-        data = string_at(buf, size)
-        if self.raw_fi:
-            fh = fip.contents
-        else:
-            fh = fip.contents.fh
-        return self.operations('write', path, data, offset, fh)
-    
-    def statfs(self, path, buf):
-        stv = buf.contents
-        attrs = self.operations('statfs', path)
-        for key, val in attrs.items():
-            if hasattr(stv, key):
-                setattr(stv, key, val)
-        return 0
-    
-    def flush(self, path, fip):
-        if self.raw_fi:
-            fh = fip.contents
-        else:
-            fh = fip.contents.fh
-        return self.operations('flush', path, fh)
-    
-    def release(self, path, fip):
-        if self.raw_fi:
-          fh = fip.contents
-        else:
-          fh = fip.contents.fh
-        return self.operations('release', path, fh)
-    
-    def fsync(self, path, datasync, fip):
-        if self.raw_fi:
-            fh = fip.contents
-        else:
-            fh = fip.contents.fh
-        return self.operations('fsync', path, datasync, fh)
-    
-    def setxattr(self, path, name, value, size, options, *args):
-        data = string_at(value, size)
-        return self.operations('setxattr', path, name, data, options, *args)
-    
-    def getxattr(self, path, name, value, size, *args):
-        ret = self.operations('getxattr', path, name, *args)
-        retsize = len(ret)
-        buf = create_string_buffer(ret, retsize)    # Does not add trailing 0
-        if bool(value):
-            if retsize > size:
-                return -ERANGE
-            memmove(value, buf, retsize)
-        return retsize
-    
-    def listxattr(self, path, namebuf, size):
-        ret = self.operations('listxattr', path)
-        if ret:
-          buf = create_string_buffer('\x00'.join(ret))
-        else:
-          buf = ''
-        bufsize = len(buf)
-        if bool(namebuf):
-            if bufsize > size:
-                return -ERANGE
-            memmove(namebuf, buf, bufsize)
-        return bufsize
-    
-    def removexattr(self, path, name):
-        return self.operations('removexattr', path, name)
-    
-    def opendir(self, path, fip):
-        # Ignore raw_fi
-        fip.contents.fh = self.operations('opendir', path)
-        return 0
-    
-    def readdir(self, path, buf, filler, offset, fip):
-        # Ignore raw_fi
-        for item in self.operations('readdir', path, fip.contents.fh):
-            if isinstance(item, str):
-                name, st, offset = item, None, 0
-            else:
-                name, attrs, offset = item
-                if attrs:
-                    st = c_stat()
-                    set_st_attrs(st, attrs)
-                else:
-                    st = None
-            if filler(buf, name, st, offset) != 0:
-                break
-        return 0
-    
-    def releasedir(self, path, fip):
-        # Ignore raw_fi
-        return self.operations('releasedir', path, fip.contents.fh)
-    
-    def fsyncdir(self, path, datasync, fip):
-        # Ignore raw_fi
-        return self.operations('fsyncdir', path, datasync, fip.contents.fh)
-    
-    def init(self, conn):
-        return self.operations('init', '/')
-    
-    def destroy(self, private_data):
-        return self.operations('destroy', '/')
-    
-    def access(self, path, amode):
-        return self.operations('access', path, amode)
-    
-    def create(self, path, mode, fip):
-        fi = fip.contents
-        if self.raw_fi:
-            return self.operations('create', path, mode, fi)
-        else:
-            fi.fh = self.operations('create', path, mode)
-            return 0
-    
-    def ftruncate(self, path, length, fip):
-        if self.raw_fi:
-            fh = fip.contents
-        else:
-            fh = fip.contents.fh
-        return self.operations('truncate', path, length, fh)
-    
-    def fgetattr(self, path, buf, fip):
-        memset(buf, 0, sizeof(c_stat))
-        st = buf.contents
-        if not fip:
-            fh = fip
-        elif self.raw_fi:
-            fh = fip.contents
-        else:
-            fh = fip.contents.fh
-        attrs = self.operations('getattr', path, fh)
-        set_st_attrs(st, attrs)
-        return 0
-    
-    def lock(self, path, fip, cmd, lock):
-        if self.raw_fi:
-            fh = fip.contents
-        else:
-            fh = fip.contents.fh
-        return self.operations('lock', path, fh, cmd, lock)
-    
-    def utimens(self, path, buf):
-        if buf:
-            atime = time_of_timespec(buf.contents.actime)
-            mtime = time_of_timespec(buf.contents.modtime)
-            times = (atime, mtime)
-        else:
-            times = None
-        return self.operations('utimens', path, times)
-    
-    def bmap(self, path, blocksize, idx):
-        return self.operations('bmap', path, blocksize, idx)
-
-
-class Operations(object):
-    """This class should be subclassed and passed as an argument to FUSE on
-       initialization. All operations should raise an OSError exception on
-       error.
-       
-       When in doubt of what an operation should do, check the FUSE header
-       file or the corresponding system call man page."""
-    
-    def __call__(self, op, *args):
-        if not hasattr(self, op):
-            raise OSError(EFAULT, '')
-        return getattr(self, op)(*args)
-        
-    def access(self, path, amode):
-        return 0
-    
-    bmap = None
-    
-    def chmod(self, path, mode):
-        raise OSError(EROFS, '')
-    
-    def chown(self, path, uid, gid):
-        raise OSError(EROFS, '')
-    
-    def create(self, path, mode, fi=None):
-        """When raw_fi is False (default case), fi is None and create should
-           return a numerical file handle.
-           When raw_fi is True the file handle should be set directly by create
-           and return 0."""
-        raise OSError(EROFS, '')
-    
-    def destroy(self, path):
-        """Called on filesystem destruction. Path is always /"""
-        pass
-    
-    def flush(self, path, fh):
-        return 0
-    
-    def fsync(self, path, datasync, fh):
-        return 0
-    
-    def fsyncdir(self, path, datasync, fh):
-        return 0
-    
-    def getattr(self, path, fh=None):
-        """Returns a dictionary with keys identical to the stat C structure
-           of stat(2).
-           st_atime, st_mtime and st_ctime should be floats.
-           NOTE: There is an incombatibility between Linux and Mac OS X concerning
-           st_nlink of directories. Mac OS X counts all files inside the directory,
-           while Linux counts only the subdirectories."""
-        
-        if path != '/':
-            raise OSError(ENOENT, '')
-        return dict(st_mode=(S_IFDIR | 0755), st_nlink=2)
-    
-    def getxattr(self, path, name, position=0):
-        raise OSError(ENOTSUP, '')
-    
-    def init(self, path):
-        """Called on filesystem initialization. Path is always /
-           Use it instead of __init__ if you start threads on initialization."""
-        pass
-    
-    def link(self, target, source):
-        raise OSError(EROFS, '')
-    
-    def listxattr(self, path):
-        return []
-        
-    lock = None
-    
-    def mkdir(self, path, mode):
-        raise OSError(EROFS, '')
-    
-    def mknod(self, path, mode, dev):
-        raise OSError(EROFS, '')
-    
-    def open(self, path, flags):
-        """When raw_fi is False (default case), open should return a numerical
-           file handle.
-           When raw_fi is True the signature of open becomes:
-               open(self, path, fi)
-           and the file handle should be set directly."""
-        return 0
-    
-    def opendir(self, path):
-        """Returns a numerical file handle."""
-        return 0
-    
-    def read(self, path, size, offset, fh):
-        """Returns a string containing the data requested."""
-        raise OSError(ENOENT, '')
-    
-    def readdir(self, path, fh):
-        """Can return either a list of names, or a list of (name, attrs, offset)
-           tuples. attrs is a dict as in getattr."""
-        return ['.', '..']
-    
-    def readlink(self, path):
-        raise OSError(ENOENT, '')
-    
-    def release(self, path, fh):
-        return 0
-    
-    def releasedir(self, path, fh):
-        return 0
-    
-    def removexattr(self, path, name):
-        raise OSError(ENOTSUP, '')
-    
-    def rename(self, old, new):
-        raise OSError(EROFS, '')
-    
-    def rmdir(self, path):
-        raise OSError(EROFS, '')
-    
-    def setxattr(self, path, name, value, options, position=0):
-        raise OSError(ENOTSUP, '')
-    
-    def statfs(self, path):
-        """Returns a dictionary with keys identical to the statvfs C structure
-           of statvfs(3).
-           On Mac OS X f_bsize and f_frsize must be a power of 2 (minimum 512)."""
-        return {}
-    
-    def symlink(self, target, source):
-        raise OSError(EROFS, '')
-    
-    def truncate(self, path, length, fh=None):
-        raise OSError(EROFS, '')
-    
-    def unlink(self, path):
-        raise OSError(EROFS, '')
-    
-    def utimens(self, path, times=None):
-        """Times is a (atime, mtime) tuple. If None use current time."""
-        return 0
-    
-    def write(self, path, data, offset, fh):
-        raise OSError(EROFS, '')
-
-
-class LoggingMixIn:
-    def __call__(self, op, path, *args):
-        print '->', op, path, repr(args)
-        ret = '[Unknown Error]'
-        try:
-            try:
-                ret = getattr(self, op)(path, *args)
-                return ret
-            except OSError, e:
-                ret = str(e)
-                raise
-        finally:
-            print '<-', op, repr(ret)
diff --git a/lib/python/fusepy/fuse3.py b/lib/python/fusepy/fuse3.py
deleted file mode 100644
index 8717b47..0000000
--- a/lib/python/fusepy/fuse3.py
+++ /dev/null
@@ -1,637 +0,0 @@
-# Copyright (c) 2008 Giorgos Verigakis <verigak@gmail.com>
-# 
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-from ctypes import *
-from ctypes.util import find_library
-from errno import *
-from functools import partial
-from platform import machine, system
-from stat import S_IFDIR
-from traceback import print_exc
-
-import logging
-
-
-class c_timespec(Structure):
-    _fields_ = [('tv_sec', c_long), ('tv_nsec', c_long)]
-
-class c_utimbuf(Structure):
-    _fields_ = [('actime', c_timespec), ('modtime', c_timespec)]
-
-class c_stat(Structure):
-    pass    # Platform dependent
-
-_system = system()
-if _system in ('Darwin', 'FreeBSD'):
-    _libiconv = CDLL(find_library("iconv"), RTLD_GLOBAL)     # libfuse dependency
-    ENOTSUP = 45
-    c_dev_t = c_int32
-    c_fsblkcnt_t = c_ulong
-    c_fsfilcnt_t = c_ulong
-    c_gid_t = c_uint32
-    c_mode_t = c_uint16
-    c_off_t = c_int64
-    c_pid_t = c_int32
-    c_uid_t = c_uint32
-    setxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte),
-        c_size_t, c_int, c_uint32)
-    getxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte),
-        c_size_t, c_uint32)
-    c_stat._fields_ = [
-        ('st_dev', c_dev_t),
-        ('st_ino', c_uint32),
-        ('st_mode', c_mode_t),
-        ('st_nlink', c_uint16),
-        ('st_uid', c_uid_t),
-        ('st_gid', c_gid_t),
-        ('st_rdev', c_dev_t),
-        ('st_atimespec', c_timespec),
-        ('st_mtimespec', c_timespec),
-        ('st_ctimespec', c_timespec),
-        ('st_size', c_off_t),
-        ('st_blocks', c_int64),
-        ('st_blksize', c_int32)]
-elif _system == 'Linux':
-    ENOTSUP = 95
-    c_dev_t = c_ulonglong
-    c_fsblkcnt_t = c_ulonglong
-    c_fsfilcnt_t = c_ulonglong
-    c_gid_t = c_uint
-    c_mode_t = c_uint
-    c_off_t = c_longlong
-    c_pid_t = c_int
-    c_uid_t = c_uint
-    setxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte), c_size_t, c_int)
-    getxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte), c_size_t)
-    
-    _machine = machine()
-    if _machine == 'x86_64':
-        c_stat._fields_ = [
-            ('st_dev', c_dev_t),
-            ('st_ino', c_ulong),
-            ('st_nlink', c_ulong),
-            ('st_mode', c_mode_t),
-            ('st_uid', c_uid_t),
-            ('st_gid', c_gid_t),
-            ('__pad0', c_int),
-            ('st_rdev', c_dev_t),
-            ('st_size', c_off_t),
-            ('st_blksize', c_long),
-            ('st_blocks', c_long),
-            ('st_atimespec', c_timespec),
-            ('st_mtimespec', c_timespec),
-            ('st_ctimespec', c_timespec)]
-    elif _machine == 'ppc':
-        c_stat._fields_ = [
-            ('st_dev', c_dev_t),
-            ('st_ino', c_ulonglong),
-            ('st_mode', c_mode_t),
-            ('st_nlink', c_uint),
-            ('st_uid', c_uid_t),
-            ('st_gid', c_gid_t),
-            ('st_rdev', c_dev_t),
-            ('__pad2', c_ushort),
-            ('st_size', c_off_t),
-            ('st_blksize', c_long),
-            ('st_blocks', c_longlong),
-            ('st_atimespec', c_timespec),
-            ('st_mtimespec', c_timespec),
-            ('st_ctimespec', c_timespec)]
-    else:
-        # i686, use as fallback for everything else
-        c_stat._fields_ = [
-            ('st_dev', c_dev_t),
-            ('__pad1', c_ushort),
-            ('__st_ino', c_ulong),
-            ('st_mode', c_mode_t),
-            ('st_nlink', c_uint),
-            ('st_uid', c_uid_t),
-            ('st_gid', c_gid_t),
-            ('st_rdev', c_dev_t),
-            ('__pad2', c_ushort),
-            ('st_size', c_off_t),
-            ('st_blksize', c_long),
-            ('st_blocks', c_longlong),
-            ('st_atimespec', c_timespec),
-            ('st_mtimespec', c_timespec),
-            ('st_ctimespec', c_timespec),
-            ('st_ino', c_ulonglong)]
-else:
-    raise NotImplementedError('%s is not supported.' % _system)
-
-
-class c_statvfs(Structure):
-    _fields_ = [
-        ('f_bsize', c_ulong),
-        ('f_frsize', c_ulong),
-        ('f_blocks', c_fsblkcnt_t),
-        ('f_bfree', c_fsblkcnt_t),
-        ('f_bavail', c_fsblkcnt_t),
-        ('f_files', c_fsfilcnt_t),
-        ('f_ffree', c_fsfilcnt_t),
-        ('f_favail', c_fsfilcnt_t)]
-
-if _system == 'FreeBSD':
-    c_fsblkcnt_t = c_uint64
-    c_fsfilcnt_t = c_uint64
-    setxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte), c_size_t, c_int)
-    getxattr_t = CFUNCTYPE(c_int, c_char_p, c_char_p, POINTER(c_byte), c_size_t)
-    class c_statvfs(Structure):
-        _fields_ = [
-            ('f_bavail', c_fsblkcnt_t),
-            ('f_bfree', c_fsblkcnt_t),
-            ('f_blocks', c_fsblkcnt_t),
-            ('f_favail', c_fsfilcnt_t),
-            ('f_ffree', c_fsfilcnt_t),
-            ('f_files', c_fsfilcnt_t),
-            ('f_bsize', c_ulong),
-            ('f_flag', c_ulong),
-            ('f_frsize', c_ulong)]
-
-class fuse_file_info(Structure):
-    _fields_ = [
-        ('flags', c_int),
-        ('fh_old', c_ulong),
-        ('writepage', c_int),
-        ('direct_io', c_uint, 1),
-        ('keep_cache', c_uint, 1),
-        ('flush', c_uint, 1),
-        ('padding', c_uint, 29),
-        ('fh', c_uint64),
-        ('lock_owner', c_uint64)]
-
-class fuse_context(Structure):
-    _fields_ = [
-        ('fuse', c_voidp),
-        ('uid', c_uid_t),
-        ('gid', c_gid_t),
-        ('pid', c_pid_t),
-        ('private_data', c_voidp)]
-
-class fuse_operations(Structure):
-    _fields_ = [
-        ('getattr', CFUNCTYPE(c_int, c_char_p, POINTER(c_stat))),
-        ('readlink', CFUNCTYPE(c_int, c_char_p, POINTER(c_byte), c_size_t)),
-        ('getdir', c_voidp),    # Deprecated, use readdir
-        ('mknod', CFUNCTYPE(c_int, c_char_p, c_mode_t, c_dev_t)),
-        ('mkdir', CFUNCTYPE(c_int, c_char_p, c_mode_t)),
-        ('unlink', CFUNCTYPE(c_int, c_char_p)),
-        ('rmdir', CFUNCTYPE(c_int, c_char_p)),
-        ('symlink', CFUNCTYPE(c_int, c_char_p, c_char_p)),
-        ('rename', CFUNCTYPE(c_int, c_char_p, c_char_p)),
-        ('link', CFUNCTYPE(c_int, c_char_p, c_char_p)),
-        ('chmod', CFUNCTYPE(c_int, c_char_p, c_mode_t)),
-        ('chown', CFUNCTYPE(c_int, c_char_p, c_uid_t, c_gid_t)),
-        ('truncate', CFUNCTYPE(c_int, c_char_p, c_off_t)),
-        ('utime', c_voidp),     # Deprecated, use utimens
-        ('open', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('read', CFUNCTYPE(c_int, c_char_p, POINTER(c_byte), c_size_t, c_off_t,
-            POINTER(fuse_file_info))),
-        ('write', CFUNCTYPE(c_int, c_char_p, POINTER(c_byte), c_size_t, c_off_t,
-            POINTER(fuse_file_info))),
-        ('statfs', CFUNCTYPE(c_int, c_char_p, POINTER(c_statvfs))),
-        ('flush', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('release', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('fsync', CFUNCTYPE(c_int, c_char_p, c_int, POINTER(fuse_file_info))),
-        ('setxattr', setxattr_t),
-        ('getxattr', getxattr_t),
-        ('listxattr', CFUNCTYPE(c_int, c_char_p, POINTER(c_byte), c_size_t)),
-        ('removexattr', CFUNCTYPE(c_int, c_char_p, c_char_p)),
-        ('opendir', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('readdir', CFUNCTYPE(c_int, c_char_p, c_voidp, CFUNCTYPE(c_int, c_voidp,
-            c_char_p, POINTER(c_stat), c_off_t), c_off_t, POINTER(fuse_file_info))),
-        ('releasedir', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info))),
-        ('fsyncdir', CFUNCTYPE(c_int, c_char_p, c_int, POINTER(fuse_file_info))),
-        ('init', CFUNCTYPE(c_voidp, c_voidp)),
-        ('destroy', CFUNCTYPE(c_voidp, c_voidp)),
-        ('access', CFUNCTYPE(c_int, c_char_p, c_int)),
-        ('create', CFUNCTYPE(c_int, c_char_p, c_mode_t, POINTER(fuse_file_info))),
-        ('ftruncate', CFUNCTYPE(c_int, c_char_p, c_off_t, POINTER(fuse_file_info))),
-        ('fgetattr', CFUNCTYPE(c_int, c_char_p, POINTER(c_stat),
-            POINTER(fuse_file_info))),
-        ('lock', CFUNCTYPE(c_int, c_char_p, POINTER(fuse_file_info), c_int, c_voidp)),
-        ('utimens', CFUNCTYPE(c_int, c_char_p, POINTER(c_utimbuf))),
-        ('bmap', CFUNCTYPE(c_int, c_char_p, c_size_t, POINTER(c_ulonglong)))]
-
-
-def time_of_timespec(ts):
-    return ts.tv_sec + ts.tv_nsec / 10 ** 9
-
-def set_st_attrs(st, attrs):
-    for key, val in attrs.items():
-        if key in ('st_atime', 'st_mtime', 'st_ctime'):
-            timespec = getattr(st, key + 'spec')
-            timespec.tv_sec = int(val)
-            timespec.tv_nsec = int((val - timespec.tv_sec) * 10 ** 9)
-        elif hasattr(st, key):
-            setattr(st, key, val)
-
-
-_libfuse_path = find_library('fuse')
-if not _libfuse_path:
-    raise EnvironmentError('Unable to find libfuse')
-_libfuse = CDLL(_libfuse_path)
-_libfuse.fuse_get_context.restype = POINTER(fuse_context)
-
-
-def fuse_get_context():
-    """Returns a (uid, gid, pid) tuple"""
-    ctxp = _libfuse.fuse_get_context()
-    ctx = ctxp.contents
-    return ctx.uid, ctx.gid, ctx.pid
-
-
-class FUSE(object):
-    """This class is the lower level interface and should not be subclassed
-       under normal use. Its methods are called by fuse.
-       Assumes API version 2.6 or later."""
-    
-    def __init__(self, operations, mountpoint, raw_fi=False, **kwargs):
-        """Setting raw_fi to True will cause FUSE to pass the fuse_file_info
-           class as is to Operations, instead of just the fh field.
-           This gives you access to direct_io, keep_cache, etc."""
-        
-        self.operations = operations
-        self.raw_fi = raw_fi
-        args = ['fuse']
-        if kwargs.pop('foreground', False):
-            args.append('-f')
-        if kwargs.pop('debug', False):
-            args.append('-d')
-        if kwargs.pop('nothreads', False):
-            args.append('-s')
-        kwargs.setdefault('fsname', operations.__class__.__name__)
-        args.append('-o')
-        args.append(','.join(key if val == True else '%s=%s' % (key, val)
-            for key, val in kwargs.items()))
-        args.append(mountpoint)
-        argv = (c_char_p * len(args))(*args)
-        
-        fuse_ops = fuse_operations()
-        for name, prototype in fuse_operations._fields_:
-            if prototype != c_voidp and getattr(operations, name, None):
-                op = partial(self._wrapper_, getattr(self, name))
-                setattr(fuse_ops, name, prototype(op))
-        _libfuse.fuse_main_real(len(args), argv, pointer(fuse_ops),
-            sizeof(fuse_ops), None)
-        del self.operations     # Invoke the destructor
-    
-    def _wrapper_(self, func, *args, **kwargs):
-        """Decorator for the methods that follow"""
-        try:
-            return func(*args, **kwargs) or 0
-        except OSError as e:
-            return -(e.errno or EFAULT)
-        except:
-            print_exc()
-            return -EFAULT
-    
-    def getattr(self, path, buf):
-        return self.fgetattr(path, buf, None)
-    
-    def readlink(self, path, buf, bufsize):
-        ret = self.operations('readlink', path).encode('utf-8')
-        data = create_string_buffer(ret[:bufsize - 1])
-        memmove(buf, data, len(data))
-        return 0
-    
-    def mknod(self, path, mode, dev):
-        return self.operations('mknod', path, mode, dev)
-    
-    def mkdir(self, path, mode):
-        return self.operations('mkdir', path, mode)
-    
-    def unlink(self, path):
-        return self.operations('unlink', path)
-    
-    def rmdir(self, path):
-        return self.operations('rmdir', path)
-    
-    def symlink(self, source, target):
-        return self.operations('symlink', target, source)
-    
-    def rename(self, old, new):
-        return self.operations('rename', old, new)
-    
-    def link(self, source, target):
-        return self.operations('link', target, source)
-    
-    def chmod(self, path, mode):
-        return self.operations('chmod', path, mode)
-    
-    def chown(self, path, uid, gid):
-        return self.operations('chown', path, uid, gid)
-    
-    def truncate(self, path, length):
-        return self.operations('truncate', path, length)
-    
-    def open(self, path, fip):
-        fi = fip.contents
-        if self.raw_fi:
-            return self.operations('open', path, fi)
-        else:
-            fi.fh = self.operations('open', path, fi.flags)
-            return 0
-    
-    def read(self, path, buf, size, offset, fip):
-        fh = fip.contents if self.raw_fi else fip.contents.fh
-        ret = self.operations('read', path, size, offset, fh)
-        if not ret:
-            return 0
-        data = create_string_buffer(ret[:size], size)
-        memmove(buf, data, size)
-        return size
-    
-    def write(self, path, buf, size, offset, fip):
-        data = string_at(buf, size)
-        fh = fip.contents if self.raw_fi else fip.contents.fh
-        return self.operations('write', path, data, offset, fh)
-    
-    def statfs(self, path, buf):
-        stv = buf.contents
-        attrs = self.operations('statfs', path)
-        for key, val in attrs.items():
-            if hasattr(stv, key):
-                setattr(stv, key, val)
-        return 0
-    
-    def flush(self, path, fip):
-        fh = fip.contents if self.raw_fi else fip.contents.fh
-        return self.operations('flush', path, fh)
-    
-    def release(self, path, fip):
-        fh = fip.contents if self.raw_fi else fip.contents.fh
-        return self.operations('release', path, fh)
-    
-    def fsync(self, path, datasync, fip):
-        fh = fip.contents if self.raw_fi else fip.contents.fh
-        return self.operations('fsync', path, datasync, fh)
-    
-    def setxattr(self, path, name, value, size, options, *args):
-        data = string_at(value, size)
-        return self.operations('setxattr', path, name, data, options, *args)
-    
-    def getxattr(self, path, name, value, size, *args):
-        ret = self.operations('getxattr', path, name, *args)
-        retsize = len(ret)
-        buf = create_string_buffer(ret, retsize)    # Does not add trailing 0
-        if bool(value):
-            if retsize > size:
-                return -ERANGE
-            memmove(value, buf, retsize)
-        return retsize
-    
-    def listxattr(self, path, namebuf, size):
-        ret = self.operations('listxattr', path)
-        buf = create_string_buffer('\x00'.join(ret)) if ret else ''
-        bufsize = len(buf)
-        if bool(namebuf):
-            if bufsize > size:
-                return -ERANGE
-            memmove(namebuf, buf, bufsize)
-        return bufsize
-    
-    def removexattr(self, path, name):
-        return self.operations('removexattr', path, name)
-    
-    def opendir(self, path, fip):
-        # Ignore raw_fi
-        fip.contents.fh = self.operations('opendir', path)
-        return 0
-    
-    def readdir(self, path, buf, filler, offset, fip):
-        # Ignore raw_fi
-        for item in self.operations('readdir', path, fip.contents.fh):
-            if isinstance(item, str):
-                name, st, offset = item, None, 0
-            else:
-                name, attrs, offset = item
-                if attrs:
-                    st = c_stat()
-                    set_st_attrs(st, attrs)
-                else:
-                    st = None
-            if filler(buf, name.encode('utf-8'), st, offset) != 0:
-                break
-        return 0
-    
-    def releasedir(self, path, fip):
-        # Ignore raw_fi
-        return self.operations('releasedir', path, fip.contents.fh)
-    
-    def fsyncdir(self, path, datasync, fip):
-        # Ignore raw_fi
-        return self.operations('fsyncdir', path, datasync, fip.contents.fh)
-    
-    def init(self, conn):
-        return self.operations('init', '/')
-    
-    def destroy(self, private_data):
-        return self.operations('destroy', '/')
-    
-    def access(self, path, amode):
-        return self.operations('access', path, amode)
-    
-    def create(self, path, mode, fip):
-        fi = fip.contents
-        if self.raw_fi:
-            return self.operations('create', path, mode, fi)
-        else:
-            fi.fh = self.operations('create', path, mode)
-            return 0
-    
-    def ftruncate(self, path, length, fip):
-        fh = fip.contents if self.raw_fi else fip.contents.fh
-        return self.operations('truncate', path, length, fh)
-    
-    def fgetattr(self, path, buf, fip):
-        memset(buf, 0, sizeof(c_stat))
-        st = buf.contents
-        fh = fip and (fip.contents if self.raw_fi else fip.contents.fh)
-        attrs = self.operations('getattr', path, fh)
-        set_st_attrs(st, attrs)
-        return 0
-    
-    def lock(self, path, fip, cmd, lock):
-        fh = fip.contents if self.raw_fi else fip.contents.fh
-        return self.operations('lock', path, fh, cmd, lock)
-    
-    def utimens(self, path, buf):
-        if buf:
-            atime = time_of_timespec(buf.contents.actime)
-            mtime = time_of_timespec(buf.contents.modtime)
-            times = (atime, mtime)
-        else:
-            times = None
-        return self.operations('utimens', path, times)
-    
-    def bmap(self, path, blocksize, idx):
-        return self.operations('bmap', path, blocksize, idx)
-
-
-class Operations(object):
-    """This class should be subclassed and passed as an argument to FUSE on
-       initialization. All operations should raise an OSError exception on
-       error.
-       
-       When in doubt of what an operation should do, check the FUSE header
-       file or the corresponding system call man page."""
-    
-    def __call__(self, op, *args):
-        if not hasattr(self, op):
-            raise OSError(EFAULT, '')
-        return getattr(self, op)(*args)
-        
-    def access(self, path, amode):
-        return 0
-    
-    bmap = None
-    
-    def chmod(self, path, mode):
-        raise OSError(EROFS, '')
-    
-    def chown(self, path, uid, gid):
-        raise OSError(EROFS, '')
-    
-    def create(self, path, mode, fi=None):
-        """When raw_fi is False (default case), fi is None and create should
-           return a numerical file handle.
-           When raw_fi is True the file handle should be set directly by create
-           and return 0."""
-        raise OSError(EROFS, '')
-    
-    def destroy(self, path):
-        """Called on filesystem destruction. Path is always /"""
-        pass
-    
-    def flush(self, path, fh):
-        return 0
-    
-    def fsync(self, path, datasync, fh):
-        return 0
-    
-    def fsyncdir(self, path, datasync, fh):
-        return 0
-    
-    def getattr(self, path, fh=None):
-        """Returns a dictionary with keys identical to the stat C structure
-           of stat(2).
-           st_atime, st_mtime and st_ctime should be floats.
-           NOTE: There is an incombatibility between Linux and Mac OS X concerning
-           st_nlink of directories. Mac OS X counts all files inside the directory,
-           while Linux counts only the subdirectories."""
-        
-        if path != '/':
-            raise OSError(ENOENT, '')
-        return dict(st_mode=(S_IFDIR | 0o755), st_nlink=2)
-    
-    def getxattr(self, path, name, position=0):
-        raise OSError(ENOTSUP, '')
-    
-    def init(self, path):
-        """Called on filesystem initialization. Path is always /
-           Use it instead of __init__ if you start threads on initialization."""
-        pass
-    
-    def link(self, target, source):
-        raise OSError(EROFS, '')
-    
-    def listxattr(self, path):
-        return []
-        
-    lock = None
-    
-    def mkdir(self, path, mode):
-        raise OSError(EROFS, '')
-    
-    def mknod(self, path, mode, dev):
-        raise OSError(EROFS, '')
-    
-    def open(self, path, flags):
-        """When raw_fi is False (default case), open should return a numerical
-           file handle.
-           When raw_fi is True the signature of open becomes:
-               open(self, path, fi)
-           and the file handle should be set directly."""
-        return 0
-    
-    def opendir(self, path):
-        """Returns a numerical file handle."""
-        return 0
-    
-    def read(self, path, size, offset, fh):
-        """Returns a string containing the data requested."""
-        raise OSError(ENOENT, '')
-    
-    def readdir(self, path, fh):
-        """Can return either a list of names, or a list of (name, attrs, offset)
-           tuples. attrs is a dict as in getattr."""
-        return ['.', '..']
-    
-    def readlink(self, path):
-        raise OSError(ENOENT, '')
-    
-    def release(self, path, fh):
-        return 0
-    
-    def releasedir(self, path, fh):
-        return 0
-    
-    def removexattr(self, path, name):
-        raise OSError(ENOTSUP, '')
-    
-    def rename(self, old, new):
-        raise OSError(EROFS, '')
-    
-    def rmdir(self, path):
-        raise OSError(EROFS, '')
-    
-    def setxattr(self, path, name, value, options, position=0):
-        raise OSError(ENOTSUP, '')
-    
-    def statfs(self, path):
-        """Returns a dictionary with keys identical to the statvfs C structure
-           of statvfs(3).
-           On Mac OS X f_bsize and f_frsize must be a power of 2 (minimum 512)."""
-        return {}
-    
-    def symlink(self, target, source):
-        raise OSError(EROFS, '')
-    
-    def truncate(self, path, length, fh=None):
-        raise OSError(EROFS, '')
-    
-    def unlink(self, path):
-        raise OSError(EROFS, '')
-    
-    def utimens(self, path, times=None):
-        """Times is a (atime, mtime) tuple. If None use current time."""
-        return 0
-    
-    def write(self, path, data, offset, fh):
-        raise OSError(EROFS, '')
-
-
-class LoggingMixIn:
-    def __call__(self, op, path, *args):
-        logging.debug('-> %s %s %s', op, path, repr(args))
-        ret = '[Unknown Error]'
-        try:
-            ret = getattr(self, op)(path, *args)
-            return ret
-        except OSError as e:
-            ret = str(e)
-            raise
-        finally:
-            logging.debug('<- %s %s', op, repr(ret))
diff --git a/lib/python/fusepy/fusell.py b/lib/python/fusepy/fusell.py
deleted file mode 100644
index d0bc25e..0000000
--- a/lib/python/fusepy/fusell.py
+++ /dev/null
@@ -1,619 +0,0 @@
-# Copyright (c) 2010 Giorgos Verigakis <verigak@gmail.com>
-# 
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-from __future__ import division
-
-from ctypes import *
-from ctypes.util import find_library
-from errno import *
-from functools import partial, wraps
-from inspect import getmembers, ismethod
-from platform import machine, system
-from stat import S_IFDIR, S_IFREG
-
-
-_system = system()
-_machine = machine()
-
-class LibFUSE(CDLL):
-    def __init__(self):
-        if _system == 'Darwin':
-            self.libiconv = CDLL(find_library('iconv'), RTLD_GLOBAL)
-        super(LibFUSE, self).__init__(find_library('fuse'))
-        
-        self.fuse_mount.argtypes = (c_char_p, POINTER(fuse_args))
-        self.fuse_mount.restype = c_void_p
-        self.fuse_lowlevel_new.argtypes = (POINTER(fuse_args), POINTER(fuse_lowlevel_ops),
-                                            c_size_t, c_void_p)
-        self.fuse_lowlevel_new.restype = c_void_p
-        self.fuse_set_signal_handlers.argtypes = (c_void_p,)
-        self.fuse_session_add_chan.argtypes = (c_void_p, c_void_p)
-        self.fuse_session_loop.argtypes = (c_void_p,)
-        self.fuse_remove_signal_handlers.argtypes = (c_void_p,)
-        self.fuse_session_remove_chan.argtypes = (c_void_p,)
-        self.fuse_session_destroy.argtypes = (c_void_p,)
-        self.fuse_unmount.argtypes = (c_char_p, c_void_p)
-        
-        self.fuse_req_ctx.restype = POINTER(fuse_ctx)
-        self.fuse_req_ctx.argtypes = (fuse_req_t,)
-        
-        self.fuse_reply_err.argtypes = (fuse_req_t, c_int)
-        self.fuse_reply_attr.argtypes = (fuse_req_t, c_void_p, c_double)
-        self.fuse_reply_entry.argtypes = (fuse_req_t, c_void_p)
-        self.fuse_reply_open.argtypes = (fuse_req_t, c_void_p)
-        self.fuse_reply_buf.argtypes = (fuse_req_t, c_char_p, c_size_t)
-        self.fuse_reply_write.argtypes = (fuse_req_t, c_size_t)
-        
-        self.fuse_add_direntry.argtypes = (c_void_p, c_char_p, c_size_t, c_char_p,
-                                            c_stat_p, c_off_t)
-
-class fuse_args(Structure):
-    _fields_ = [('argc', c_int), ('argv', POINTER(c_char_p)), ('allocated', c_int)]
-
-class c_timespec(Structure):
-    _fields_ = [('tv_sec', c_long), ('tv_nsec', c_long)]
-
-class c_stat(Structure):
-    pass    # Platform dependent
-
-if _system == 'Darwin':
-    ENOTSUP = 45
-    c_dev_t = c_int32
-    c_fsblkcnt_t = c_ulong
-    c_fsfilcnt_t = c_ulong
-    c_gid_t = c_uint32
-    c_mode_t = c_uint16
-    c_off_t = c_int64
-    c_pid_t = c_int32
-    c_uid_t = c_uint32
-    c_stat._fields_ = [
-        ('st_dev', c_dev_t),
-        ('st_ino', c_uint32),
-        ('st_mode', c_mode_t),
-        ('st_nlink', c_uint16),
-        ('st_uid', c_uid_t),
-        ('st_gid', c_gid_t),
-        ('st_rdev', c_dev_t),
-        ('st_atimespec', c_timespec),
-        ('st_mtimespec', c_timespec),
-        ('st_ctimespec', c_timespec),
-        ('st_size', c_off_t),
-        ('st_blocks', c_int64),
-        ('st_blksize', c_int32)]
-elif _system == 'Linux':
-    ENOTSUP = 95
-    c_dev_t = c_ulonglong
-    c_fsblkcnt_t = c_ulonglong
-    c_fsfilcnt_t = c_ulonglong
-    c_gid_t = c_uint
-    c_mode_t = c_uint
-    c_off_t = c_longlong
-    c_pid_t = c_int
-    c_uid_t = c_uint
-    
-    if _machine == 'x86_64':
-        c_stat._fields_ = [
-            ('st_dev', c_dev_t),
-            ('st_ino', c_ulong),
-            ('st_nlink', c_ulong),
-            ('st_mode', c_mode_t),
-            ('st_uid', c_uid_t),
-            ('st_gid', c_gid_t),
-            ('__pad0', c_int),
-            ('st_rdev', c_dev_t),
-            ('st_size', c_off_t),
-            ('st_blksize', c_long),
-            ('st_blocks', c_long),
-            ('st_atimespec', c_timespec),
-            ('st_mtimespec', c_timespec),
-            ('st_ctimespec', c_timespec)]
-    elif _machine == 'ppc':
-        c_stat._fields_ = [
-            ('st_dev', c_dev_t),
-            ('st_ino', c_ulonglong),
-            ('st_mode', c_mode_t),
-            ('st_nlink', c_uint),
-            ('st_uid', c_uid_t),
-            ('st_gid', c_gid_t),
-            ('st_rdev', c_dev_t),
-            ('__pad2', c_ushort),
-            ('st_size', c_off_t),
-            ('st_blksize', c_long),
-            ('st_blocks', c_longlong),
-            ('st_atimespec', c_timespec),
-            ('st_mtimespec', c_timespec),
-            ('st_ctimespec', c_timespec)]
-    else:
-        # i686, use as fallback for everything else
-        c_stat._fields_ = [
-            ('st_dev', c_dev_t),
-            ('__pad1', c_ushort),
-            ('__st_ino', c_ulong),
-            ('st_mode', c_mode_t),
-            ('st_nlink', c_uint),
-            ('st_uid', c_uid_t),
-            ('st_gid', c_gid_t),
-            ('st_rdev', c_dev_t),
-            ('__pad2', c_ushort),
-            ('st_size', c_off_t),
-            ('st_blksize', c_long),
-            ('st_blocks', c_longlong),
-            ('st_atimespec', c_timespec),
-            ('st_mtimespec', c_timespec),
-            ('st_ctimespec', c_timespec),
-            ('st_ino', c_ulonglong)]
-else:
-    raise NotImplementedError('%s is not supported.' % _system)
-
-class c_statvfs(Structure):
-    _fields_ = [
-        ('f_bsize', c_ulong),
-        ('f_frsize', c_ulong),
-        ('f_blocks', c_fsblkcnt_t),
-        ('f_bfree', c_fsblkcnt_t),
-        ('f_bavail', c_fsblkcnt_t),
-        ('f_files', c_fsfilcnt_t),
-        ('f_ffree', c_fsfilcnt_t),
-        ('f_favail', c_fsfilcnt_t)]
-
-class fuse_file_info(Structure):
-    _fields_ = [
-        ('flags', c_int),
-        ('fh_old', c_ulong),
-        ('writepage', c_int),
-        ('direct_io', c_uint, 1),
-        ('keep_cache', c_uint, 1),
-        ('flush', c_uint, 1),
-        ('padding', c_uint, 29),
-        ('fh', c_uint64),
-        ('lock_owner', c_uint64)]
-
-class fuse_ctx(Structure):
-    _fields_ = [('uid', c_uid_t), ('gid', c_gid_t), ('pid', c_pid_t)]
-
-fuse_ino_t = c_ulong
-fuse_req_t = c_void_p
-c_stat_p = POINTER(c_stat)
-fuse_file_info_p = POINTER(fuse_file_info)
-
-FUSE_SET_ATTR = ('st_mode', 'st_uid', 'st_gid', 'st_size', 'st_atime', 'st_mtime')
-
-class fuse_entry_param(Structure):
-    _fields_ = [
-        ('ino', fuse_ino_t),
-        ('generation', c_ulong),
-        ('attr', c_stat),
-        ('attr_timeout', c_double),
-        ('entry_timeout', c_double)]
-
-class fuse_lowlevel_ops(Structure):
-    _fields_ = [
-        ('init', CFUNCTYPE(None, c_void_p, c_void_p)),
-        ('destroy', CFUNCTYPE(None, c_void_p)),
-        ('lookup', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, c_char_p)),
-        ('forget', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, c_ulong)),
-        ('getattr', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, fuse_file_info_p)),
-        ('setattr', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, c_stat_p, c_int, fuse_file_info_p)),
-        ('readlink', CFUNCTYPE(None, fuse_req_t, fuse_ino_t)),
-        ('mknod', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, c_char_p, c_mode_t, c_dev_t)),
-        ('mkdir', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, c_char_p, c_mode_t)),
-        ('unlink', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, c_char_p)),
-        ('rmdir', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, c_char_p)),
-        ('symlink', CFUNCTYPE(None, fuse_req_t, c_char_p, fuse_ino_t, c_char_p)),
-        ('rename', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, c_char_p, fuse_ino_t, c_char_p)),
-        ('link', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, fuse_ino_t, c_char_p)),
-        ('open', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, fuse_file_info_p)),
-        ('read', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, c_size_t, c_off_t, fuse_file_info_p)),
-        ('write', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, c_char_p, c_size_t, c_off_t,
-                                fuse_file_info_p)),
-        ('flush', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, fuse_file_info_p)),
-        ('release', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, fuse_file_info_p)),
-        ('fsync', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, c_int, fuse_file_info_p)),
-        ('opendir', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, fuse_file_info_p)),
-        ('readdir', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, c_size_t, c_off_t, fuse_file_info_p)),
-        ('releasedir', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, fuse_file_info_p)),
-        ('fsyncdir', CFUNCTYPE(None, fuse_req_t, fuse_ino_t, c_int, fuse_file_info_p))]
-
-
-def struct_to_dict(p):
-    try:
-        x = p.contents
-        return dict((key, getattr(x, key)) for key, type in x._fields_)
-    except ValueError:
-        return {}
-
-def stat_to_dict(p):
-    try:
-        d = {}
-        x = p.contents
-        for key, type in x._fields_:
-            if key in ('st_atimespec', 'st_mtimespec', 'st_ctimespec'):
-                ts = getattr(x, key)
-                key = key[:-4]      # Lose the "spec"
-                d[key] = ts.tv_sec + ts.tv_nsec / 10 ** 9
-            else:
-                d[key] = getattr(x, key)
-        return d
-    except ValueError:
-        return {}
-
-def dict_to_stat(d):
-    for key in ('st_atime', 'st_mtime', 'st_ctime'):
-        if key in d:
-            val = d[key]
-            sec = int(val)
-            nsec = int((val - sec) * 10 ** 9)
-            d[key + 'spec'] = c_timespec(sec, nsec)
-    return c_stat(**d)
-
-def setattr_mask_to_list(mask):
-    return [FUSE_SET_ATTR[i] for i in range(len(FUSE_SET_ATTR)) if mask & (1 << i)]
-
-class FUSELL(object):
-    def __init__(self, mountpoint):
-        self.libfuse = LibFUSE()       
-        
-        fuse_ops = fuse_lowlevel_ops()
-        
-        for name, prototype in fuse_lowlevel_ops._fields_:
-            method = getattr(self, 'fuse_' + name, None) or getattr(self, name, None)
-            if method:
-                setattr(fuse_ops, name, prototype(method))
-        
-        args = ['fuse']
-        argv = fuse_args(len(args), (c_char_p * len(args))(*args), 0)
-        
-        # TODO: handle initialization errors
-        
-        chan = self.libfuse.fuse_mount(mountpoint, argv)
-        assert chan
-        
-        session = self.libfuse.fuse_lowlevel_new(argv, byref(fuse_ops), sizeof(fuse_ops), None)
-        assert session
-        
-        err = self.libfuse.fuse_set_signal_handlers(session)
-        assert err == 0
-        
-        self.libfuse.fuse_session_add_chan(session, chan)
-        
-        err = self.libfuse.fuse_session_loop(session)
-        assert err == 0
-        
-        err = self.libfuse.fuse_remove_signal_handlers(session)
-        assert err == 0
-        
-        self.libfuse.fuse_session_remove_chan(chan)
-        self.libfuse.fuse_session_destroy(session)
-        self.libfuse.fuse_unmount(mountpoint, chan)
-    
-    def reply_err(self, req, err):
-        return self.libfuse.fuse_reply_err(req, err)
-    
-    def reply_none(self, req):
-        self.libfuse.fuse_reply_none(req)
-    
-    def reply_entry(self, req, entry):
-        entry['attr'] = c_stat(**entry['attr'])
-        e = fuse_entry_param(**entry)
-        self.libfuse.fuse_reply_entry(req, byref(e))
-    
-    def reply_create(self, req, *args):
-        pass    # XXX
-    
-    def reply_attr(self, req, attr, attr_timeout):
-        st = dict_to_stat(attr)
-        return self.libfuse.fuse_reply_attr(req, byref(st), c_double(attr_timeout))
-    
-    def reply_readlink(self, req, *args):
-        pass    # XXX
-    
-    def reply_open(self, req, d):
-        fi = fuse_file_info(**d)
-        return self.libfuse.fuse_reply_open(req, byref(fi))
-    
-    def reply_write(self, req, count):
-        return self.libfuse.fuse_reply_write(req, count)
-    
-    def reply_buf(self, req, buf):
-        return self.libfuse.fuse_reply_buf(req, buf, len(buf))
-    
-    def reply_readdir(self, req, size, off, entries):
-        bufsize = 0
-        sized_entries = []
-        for name, attr in entries:
-            entsize = self.libfuse.fuse_add_direntry(req, None, 0, name, None, 0)
-            sized_entries.append((name, attr, entsize))
-            bufsize += entsize
-
-        next = 0
-        buf = create_string_buffer(bufsize)
-        for name, attr, entsize in sized_entries:
-            entbuf = cast(addressof(buf) + next, c_char_p)
-            st = c_stat(**attr)
-            next += entsize
-            self.libfuse.fuse_add_direntry(req, entbuf, entsize, name, byref(st), next)
-
-        if off < bufsize:
-            buf = cast(addressof(buf) + off, c_char_p) if off else buf
-            return self.libfuse.fuse_reply_buf(req, buf, min(bufsize - off, size))
-        else:
-            return self.libfuse.fuse_reply_buf(req, None, 0)
-    
-    
-    # If you override the following methods you should reply directly
-    # with the self.libfuse.fuse_reply_* methods.
-    
-    def fuse_getattr(self, req, ino, fi):
-        self.getattr(req, ino, struct_to_dict(fi))
-    
-    def fuse_setattr(self, req, ino, attr, to_set, fi):
-        attr_dict = stat_to_dict(attr)
-        to_set_list = setattr_mask_to_list(to_set)
-        fi_dict = struct_to_dict(fi)
-        self.setattr(req, ino, attr_dict, to_set_list, fi_dict)
-        
-    def fuse_open(self, req, ino, fi):
-        self.open(req, ino, struct_to_dict(fi))
-    
-    def fuse_read(self, req, ino, size, off, fi):
-        self.read(req, ino, size, off, fi)
-    
-    def fuse_write(self, req, ino, buf, size, off, fi):
-        buf_str = string_at(buf, size)
-        fi_dict = struct_to_dict(fi)
-        self.write(req, ino, buf_str, off, fi_dict)
-
-    def fuse_flush(self, req, ino, fi):
-        self.flush(req, ino, struct_to_dict(fi))
-    
-    def fuse_release(self, req, ino, fi):
-        self.release(req, ino, struct_to_dict(fi))
-    
-    def fuse_fsync(self, req, ino, datasync, fi):
-        self.fsyncdir(req, ino, datasync, struct_to_dict(fi))
-    
-    def fuse_opendir(self, req, ino, fi):
-        self.opendir(req, ino, struct_to_dict(fi))
-    
-    def fuse_readdir(self, req, ino, size, off, fi):
-        self.readdir(req, ino, size, off, struct_to_dict(fi))
-    
-    def fuse_releasedir(self, req, ino, fi):
-        self.releasedir(req, ino, struct_to_dict(fi))
-    
-    def fuse_fsyncdir(self, req, ino, datasync, fi):
-        self.fsyncdir(req, ino, datasync, struct_to_dict(fi))
-    
-    
-    # Utility methods
-    
-    def req_ctx(self, req):
-        ctx = self.libfuse.fuse_req_ctx(req)
-        return struct_to_dict(ctx)
-    
-    
-    # Methods to be overridden in subclasses.
-    # Reply with the self.reply_* methods.
-    
-    def init(self, userdata, conn):
-        """Initialize filesystem
-        
-        There's no reply to this method
-        """
-        pass
-
-    def destroy(self, userdata):
-        """Clean up filesystem
-        
-        There's no reply to this method
-        """
-        pass
-
-    def lookup(self, req, parent, name):
-        """Look up a directory entry by name and get its attributes.
-        
-        Valid replies:
-            reply_entry
-            reply_err
-        """
-        self.reply_err(req, ENOENT)
-    
-    def forget(self, req, ino, nlookup):
-        """Forget about an inode
-        
-        Valid replies:
-            reply_none
-        """
-        self.reply_none(req)
-
-    def getattr(self, req, ino, fi):
-        """Get file attributes
-        
-        Valid replies:
-            reply_attr
-            reply_err
-        """
-        if ino == 1:
-            attr = {'st_ino': 1, 'st_mode': S_IFDIR | 0755, 'st_nlink': 2}
-            self.reply_attr(req, attr, 1.0)
-        else:
-            self.reply_err(req, ENOENT)        
-    
-    def setattr(self, req, ino, attr, to_set, fi):
-        """Set file attributes
-        
-        Valid replies:
-            reply_attr
-            reply_err
-        """
-        self.reply_err(req, EROFS)
-        
-    def readlink(self, req, ino):
-        """Read symbolic link
-        
-        Valid replies:
-            reply_readlink
-            reply_err
-        """
-        self.reply_err(req, ENOENT)
-    
-    def mknod(self, req, parent, name, mode, rdev):
-        """Create file node
-        
-        Valid replies:
-            reply_entry
-            reply_err
-        """
-        self.reply_err(req, EROFS)
-    
-    def mkdir(self, req, parent, name, mode):
-        """Create a directory
-        
-        Valid replies:
-            reply_entry
-            reply_err
-        """
-        self.reply_err(req, EROFS)
-
-    def unlink(self, req, parent, name):
-        """Remove a file
-        
-        Valid replies:
-            reply_err
-        """
-        self.reply_err(req, EROFS)
-    
-    def rmdir(self, req, parent, name):
-        """Remove a directory
-        
-        Valid replies:
-            reply_err
-        """
-        self.reply_err(req, EROFS)
-    
-    def symlink(self, req, link, parent, name):
-        """Create a symbolic link
-        
-        Valid replies:
-            reply_entry
-            reply_err
-        """
-        self.reply_err(req, EROFS)
-    
-    def rename(self, req, parent, name, newparent, newname):
-        """Rename a file
-        
-        Valid replies:
-            reply_err
-        """
-        self.reply_err(req, EROFS)
-    
-    def link(self, req, ino, newparent, newname):
-        """Create a hard link
-        
-        Valid replies:
-            reply_entry
-            reply_err
-        """
-        self.reply_err(req, EROFS)
-    
-    def open(self, req, ino, fi):
-        """Open a file
-        
-        Valid replies:
-            reply_open
-            reply_err
-        """
-        self.reply_open(req, fi)
-    
-    def read(self, req, ino, size, off, fi):
-        """Read data
-        
-        Valid replies:
-            reply_buf
-            reply_err
-        """
-        self.reply_err(req, EIO)
-        
-    def write(self, req, ino, buf, off, fi):
-        """Write data
-        
-        Valid replies:
-            reply_write
-            reply_err
-        """
-        self.reply_err(req, EROFS)
-    
-    def flush(self, req, ino, fi):
-        """Flush method
-        
-        Valid replies:
-            reply_err
-        """
-        self.reply_err(req, 0)
-    
-    def release(self, req, ino, fi):
-        """Release an open file
-        
-        Valid replies:
-            reply_err
-        """
-        self.reply_err(req, 0)
-    
-    def fsync(self, req, ino, datasync, fi):
-        """Synchronize file contents
-        
-        Valid replies:
-            reply_err
-        """
-        self.reply_err(req, 0)
-
-    def opendir(self, req, ino, fi):
-        """Open a directory
-        
-        Valid replies:
-            reply_open
-            reply_err
-        """
-        self.reply_open(req, fi)
-    
-    def readdir(self, req, ino, size, off, fi):
-        """Read directory
-        
-        Valid replies:
-            reply_readdir
-            reply_err
-        """
-        if ino == 1:
-            attr = {'st_ino': 1, 'st_mode': S_IFDIR}
-            entries = [('.', attr), ('..', attr)]
-            self.reply_readdir(req, size, off, entries)
-        else:
-            self.reply_err(req, ENOENT)
-    
-    def releasedir(self, req, ino, fi):
-        """Release an open directory
-        
-        Valid replies:
-            reply_err
-        """
-        self.reply_err(req, 0)
-
-    def fsyncdir(self, req, ino, datasync, fi):
-        """Synchronize directory contents
-        
-        Valid replies:
-            reply_err
-        """
-        self.reply_err(req, 0)
\ No newline at end of file
diff --git a/lib/python/fusepy/loopback.py b/lib/python/fusepy/loopback.py
deleted file mode 100755
index 5ce16ed..0000000
--- a/lib/python/fusepy/loopback.py
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env python
-
-from __future__ import with_statement
-
-from errno import EACCES
-from os.path import realpath
-from sys import argv, exit
-from threading import Lock
-
-import os
-
-from fuse import FUSE, FuseOSError, Operations, LoggingMixIn
-
-
-class Loopback(LoggingMixIn, Operations):    
-    def __init__(self, root):
-        self.root = realpath(root)
-        self.rwlock = Lock()
-    
-    def __call__(self, op, path, *args):
-        return super(Loopback, self).__call__(op, self.root + path, *args)
-    
-    def access(self, path, mode):
-        if not os.access(path, mode):
-            raise FuseOSError(EACCES)
-    
-    chmod = os.chmod
-    chown = os.chown
-    
-    def create(self, path, mode):
-        return os.open(path, os.O_WRONLY | os.O_CREAT, mode)
-    
-    def flush(self, path, fh):
-        return os.fsync(fh)
-
-    def fsync(self, path, datasync, fh):
-        return os.fsync(fh)
-                
-    def getattr(self, path, fh=None):
-        st = os.lstat(path)
-        return dict((key, getattr(st, key)) for key in ('st_atime', 'st_ctime',
-            'st_gid', 'st_mode', 'st_mtime', 'st_nlink', 'st_size', 'st_uid'))
-    
-    getxattr = None
-    
-    def link(self, target, source):
-        return os.link(source, target)
-    
-    listxattr = None
-    mkdir = os.mkdir
-    mknod = os.mknod
-    open = os.open
-        
-    def read(self, path, size, offset, fh):
-        with self.rwlock:
-            os.lseek(fh, offset, 0)
-            return os.read(fh, size)
-    
-    def readdir(self, path, fh):
-        return ['.', '..'] + os.listdir(path)
-
-    readlink = os.readlink
-    
-    def release(self, path, fh):
-        return os.close(fh)
-        
-    def rename(self, old, new):
-        return os.rename(old, self.root + new)
-    
-    rmdir = os.rmdir
-    
-    def statfs(self, path):
-        stv = os.statvfs(path)
-        return dict((key, getattr(stv, key)) for key in ('f_bavail', 'f_bfree',
-            'f_blocks', 'f_bsize', 'f_favail', 'f_ffree', 'f_files', 'f_flag',
-            'f_frsize', 'f_namemax'))
-    
-    def symlink(self, target, source):
-        return os.symlink(source, target)
-    
-    def truncate(self, path, length, fh=None):
-        with open(path, 'r+') as f:
-            f.truncate(length)
-    
-    unlink = os.unlink
-    utimens = os.utime
-    
-    def write(self, path, data, offset, fh):
-        with self.rwlock:
-            os.lseek(fh, offset, 0)
-            return os.write(fh, data)
-    
-
-if __name__ == "__main__":
-    if len(argv) != 3:
-        print 'usage: %s <root> <mountpoint>' % argv[0]
-        exit(1)
-    fuse = FUSE(Loopback(argv[1]), argv[2], foreground=True)
\ No newline at end of file
diff --git a/lib/python/fusepy/low-level/.project b/lib/python/fusepy/low-level/.project
deleted file mode 100644
index 929b408..0000000
--- a/lib/python/fusepy/low-level/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>llfuse</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.python.pydev.PyDevBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.python.pydev.pythonNature</nature>
-	</natures>
-</projectDescription>
diff --git a/lib/python/fusepy/low-level/.pydevproject b/lib/python/fusepy/low-level/.pydevproject
deleted file mode 100644
index e7f99ef..0000000
--- a/lib/python/fusepy/low-level/.pydevproject
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?eclipse-pydev version="1.0"?>
-
-<pydev_project>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.6</pydev_property>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
-<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
-<path>/llfuse</path>
-</pydev_pathproperty>
-</pydev_project>
diff --git a/lib/python/fusepy/low-level/README.txt b/lib/python/fusepy/low-level/README.txt
deleted file mode 100644
index 03f4df0..0000000
--- a/lib/python/fusepy/low-level/README.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-Note that the low-level API needs to generate the Python interface
-to the local FUSE library before it can be used. For that,
-you have to have both the FUSE headers and the GCC-XML
-(http://www.gccxml.org) compiler installed.
-
-The interface is generated by running 
-
-# python setup.py build_ctypes
-
-this will create the file llfuse/ctypes_api.py
-
-Please keep in mind that it's probably not wise to ship this file
-with your application, because it has been generated for your
-system only.
-
-
-Note that the fuse_daemonize() function is deliberately not exported
-by this module. If you want to daemonize a Python process, you have to
-do so from within Python or you will get into trouble. See
- - http://bugs.python.org/issue7931 
- - http://www.python.org/dev/peps/pep-3143/
- 
\ No newline at end of file
diff --git a/lib/python/fusepy/low-level/ctypeslib.zip b/lib/python/fusepy/low-level/ctypeslib.zip
deleted file mode 100644
index f125d98..0000000
--- a/lib/python/fusepy/low-level/ctypeslib.zip
+++ /dev/null
Binary files differ
diff --git a/lib/python/fusepy/low-level/fuse_ctypes.h b/lib/python/fusepy/low-level/fuse_ctypes.h
deleted file mode 100644
index 2793bdf..0000000
--- a/lib/python/fusepy/low-level/fuse_ctypes.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Necessary to prevent gccxml from complaining about
- * an undefined type */
-#define __builtin_va_arg_pack_len int
-
-
-#define FUSE_USE_VERSION 28
-#include <fuse_lowlevel.h>
-#include <attr/xattr.h>
-#include <errno.h>
-
diff --git a/lib/python/fusepy/low-level/llfuse/__init__.py b/lib/python/fusepy/low-level/llfuse/__init__.py
deleted file mode 100644
index 589e246..0000000
--- a/lib/python/fusepy/low-level/llfuse/__init__.py
+++ /dev/null
@@ -1,24 +0,0 @@
-'''
-$Id: __init__.py 47 2010-01-29 17:11:23Z nikratio $
-
-Copyright (c) 2010, Nikolaus Rath <Nikolaus@rath.org>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-    * Neither the name of the main author nor the names of other contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-''' 
-
-from __future__ import division, print_function, absolute_import
-
-__all__ = [ 'ctypes_api', 'interface', 'operations' ]
-
-# Wildcard imports desired
-#pylint: disable-msg=W0401
-from llfuse.operations import *
-from llfuse.interface import *
-
diff --git a/lib/python/fusepy/low-level/llfuse/interface.py b/lib/python/fusepy/low-level/llfuse/interface.py
deleted file mode 100644
index 07dc84a..0000000
--- a/lib/python/fusepy/low-level/llfuse/interface.py
+++ /dev/null
@@ -1,897 +0,0 @@
-'''
-$Id: interface.py 54 2010-02-22 02:33:10Z nikratio $
-
-Copyright (c) 2010, Nikolaus Rath <Nikolaus@rath.org>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-    * Neither the name of the main author nor the names of other contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-This module defines the interface between the FUSE C and Python API. The actual file system
-is implemented as an `Operations` instance whose methods will
-be called by the fuse library.
-
-Note that all "string-like" quantities (e.g. file names, extended attribute names & values) are
-represented as bytes, since POSIX doesn't require any of them to be valid unicode strings.
-
-
-Exception Handling
-------------------
-
-Since Python exceptions cannot be forwarded to the FUSE kernel module,
-the FUSE Python API catches all exceptions that are generated during
-request processing.
-
-If the exception is of type `FUSEError`, the appropriate errno is returned
-to the kernel module and the exception is discarded.
-
-For any other exceptions, a warning is logged and a generic error signaled
-to the kernel module. Then the `handle_exc` method of the `Operations` 
-instance is called, so that the file system itself has a chance to react
-to the problem (e.g. by marking the file system as needing a check).
-
-The return value and any raised exceptions of `handle_exc` are ignored.
-
-'''
-
-# Since we are using ctype Structures, we often have to
-# access attributes that are not defined in __init__
-# (since they are defined in _fields_ instead)
-#pylint: disable-msg=W0212
-
-# We need globals
-#pylint: disable-msg=W0603
-
-from __future__ import division, print_function, absolute_import
-
-# Using .. as libfuse makes PyDev really unhappy.
-from . import ctypes_api
-libfuse = ctypes_api
-
-from ctypes import c_char_p, sizeof, create_string_buffer, addressof, string_at, POINTER, c_char, cast
-from functools import partial
-import errno
-import logging
-import sys
-
-
-__all__ = [ 'FUSEError', 'ENOATTR', 'ENOTSUP', 'init', 'main', 'close',
-            'fuse_version' ]
-
-
-# These should really be defined in the errno module, but
-# unfortunately they are missing
-ENOATTR = libfuse.ENOATTR
-ENOTSUP = libfuse.ENOTSUP
-
-log = logging.getLogger("fuse")
-
-# Init globals
-operations = None
-fuse_ops = None
-mountpoint = None
-session = None
-channel = None
-
-class DiscardedRequest(Exception):
-    '''Request was interrupted and reply discarded.
-    
-    '''
-
-    pass
-
-class ReplyError(Exception):
-    '''Unable to send reply to fuse kernel module.
-
-    '''
-
-    pass
-
-class FUSEError(Exception):
-    '''Wrapped errno value to be returned to the fuse kernel module
-
-    This exception can store only an errno. Request handlers should raise
-    to return a specific errno to the fuse kernel module.
-    '''
-
-    __slots__ = [ 'errno' ]
-
-    def __init__(self, errno_):
-        super(FUSEError, self).__init__()
-        self.errno = errno_
-
-    def __str__(self):
-        # errno may not have strings for all error codes
-        return errno.errorcode.get(self.errno, str(self.errno))
-
-
-
-def check_reply_result(result, func, *args):
-    '''Check result of a call to a fuse_reply_* foreign function
-    
-    If `result` is 0, it is assumed that the call succeeded and the function does nothing.
-    
-    If result is `-errno.ENOENT`, this means that the request has been discarded and `DiscardedRequest`
-    is raised.
-    
-    In all other cases,  `ReplyError` is raised.
-    
-    (We do not try to call `fuse_reply_err` or any other reply method as well, because the first reply
-    function may have already invalidated the `req` object and it seems better to (possibly) let the
-    request pend than to crash the server application.)
-    '''
-
-    if result == 0:
-        return None
-
-    elif result == -errno.ENOENT:
-        raise DiscardedRequest()
-
-    elif result > 0:
-        raise ReplyError('Foreign function %s returned unexpected value %d'
-                         % (func.name, result))
-    elif result < 0:
-        raise ReplyError('Foreign function %s returned error %s'
-                         % (func.name, errno.errorcode.get(-result, str(-result))))
-
-
-#
-# Set return checker for common ctypes calls
-#  
-reply_functions = [ 'fuse_reply_err', 'fuse_reply_entry',
-                   'fuse_reply_create', 'fuse_reply_readlink', 'fuse_reply_open',
-                   'fuse_reply_write', 'fuse_reply_attr', 'fuse_reply_buf',
-                   'fuse_reply_iov', 'fuse_reply_statfs', 'fuse_reply_xattr',
-                   'fuse_reply_lock' ]
-for fname in reply_functions:
-    getattr(libfuse, fname).errcheck = check_reply_result
-
-    # Name isn't stored by ctypes
-    getattr(libfuse, fname).name = fname
-
-
-def dict_to_entry(attr):
-    '''Convert dict to fuse_entry_param'''
-
-    entry = libfuse.fuse_entry_param()
-
-    entry.ino = attr['st_ino']
-    entry.generation = attr.pop('generation')
-    entry.entry_timeout = attr.pop('entry_timeout')
-    entry.attr_timeout = attr.pop('attr_timeout')
-
-    entry.attr = dict_to_stat(attr)
-
-    return entry
-
-def dict_to_stat(attr):
-    '''Convert dict to struct stat'''
-
-    stat = libfuse.stat()
-
-    # Determine correct way to store times
-    if hasattr(stat, 'st_atim'): # Linux
-        get_timespec_key = lambda key: key[:-1]
-    elif hasattr(stat, 'st_atimespec'): # FreeBSD
-        get_timespec_key = lambda key: key + 'spec'
-    else:
-        get_timespec_key = False
-
-    # Raises exception if there are any unknown keys
-    for (key, val) in attr.iteritems():
-        if val is None: # do not set undefined items
-            continue
-        if get_timespec_key and key in  ('st_atime', 'st_mtime', 'st_ctime'):
-            key = get_timespec_key(key)
-            spec = libfuse.timespec()
-            spec.tv_sec = int(val)
-            spec.tv_nsec = int((val - int(val)) * 10 ** 9)
-            val = spec
-        setattr(stat, key, val)
-
-    return stat
-
-
-def stat_to_dict(stat):
-    '''Convert ``struct stat`` to dict'''
-
-    attr = dict()
-    for (name, dummy) in libfuse.stat._fields_:
-        if name.startswith('__'):
-            continue
-
-        if name in ('st_atim', 'st_mtim', 'st_ctim'):
-            key = name + 'e'
-            attr[key] = getattr(stat, name).tv_sec + getattr(stat, name).tv_nsec / 10 ** 9
-        elif name in ('st_atimespec', 'st_mtimespec', 'st_ctimespec'):
-            key = name[:-4]
-            attr[key] = getattr(stat, name).tv_sec + getattr(stat, name).tv_nsec / 10 ** 9
-        else:
-            attr[name] = getattr(stat, name)
-
-    return attr
-
-
-def op_wrapper(func, req, *args):
-    '''Catch all exceptions and call fuse_reply_err instead'''
-
-    try:
-        func(req, *args)
-    except FUSEError as e:
-        log.debug('op_wrapper caught FUSEError, calling fuse_reply_err(%s)',
-                  errno.errorcode.get(e.errno, str(e.errno)))
-        try:
-            libfuse.fuse_reply_err(req, e.errno)
-        except DiscardedRequest:
-            pass
-    except Exception as exc:
-        log.exception('FUSE handler raised exception.')
-
-        # Report error to filesystem
-        if hasattr(operations, 'handle_exc'):
-            try:
-                operations.handle_exc(exc)
-            except:
-                pass
-
-        # Send error reply, unless the error occured when replying
-        if not isinstance(exc, ReplyError):
-            log.debug('Calling fuse_reply_err(EIO)')
-            libfuse.fuse_reply_err(req, errno.EIO)
-
-def fuse_version():
-    '''Return version of loaded fuse library'''
-
-    return libfuse.fuse_version()
-
-
-def init(operations_, mountpoint_, args):
-    '''Initialize and mount FUSE file system
-            
-    `operations_` has to be an instance of the `Operations` class (or another
-    class defining the same methods).
-    
-    `args` has to be a list of strings. Valid options are listed in struct fuse_opt fuse_mount_opts[]
-    (mount.c:68) and struct fuse_opt fuse_ll_opts[] (fuse_lowlevel_c:1526).
-    '''
-
-    log.debug('Initializing llfuse')
-
-    global operations
-    global fuse_ops
-    global mountpoint
-    global session
-    global channel
-
-    # Give operations instance a chance to check and change
-    # the FUSE options
-    operations_.check_args(args)
-
-    mountpoint = mountpoint_
-    operations = operations_
-    fuse_ops = libfuse.fuse_lowlevel_ops()
-    fuse_args = make_fuse_args(args)
-
-    # Init fuse_ops
-    module = globals()
-    for (name, prototype) in libfuse.fuse_lowlevel_ops._fields_:
-        if hasattr(operations, name):
-            method = partial(op_wrapper, module['fuse_' + name])
-            setattr(fuse_ops, name, prototype(method))
-
-    log.debug('Calling fuse_mount')
-    channel = libfuse.fuse_mount(mountpoint, fuse_args)
-    if not channel:
-        raise RuntimeError('fuse_mount failed')
-    try:
-        log.debug('Calling fuse_lowlevel_new')
-        session = libfuse.fuse_lowlevel_new(fuse_args, fuse_ops, sizeof(fuse_ops), None)
-        if not session:
-            raise RuntimeError("fuse_lowlevel_new() failed")
-        try:
-            log.debug('Calling fuse_set_signal_handlers')
-            if libfuse.fuse_set_signal_handlers(session) == -1:
-                raise RuntimeError("fuse_set_signal_handlers() failed")
-            try:
-                log.debug('Calling fuse_session_add_chan')
-                libfuse.fuse_session_add_chan(session, channel)
-                session = session
-                channel = channel
-                return
-
-            except:
-                log.debug('Calling fuse_remove_signal_handlers')
-                libfuse.fuse_remove_signal_handlers(session)
-                raise
-
-        except:
-            log.debug('Calling fuse_session_destroy')
-            libfuse.fuse_session_destroy(session)
-            raise
-    except:
-        log.debug('Calling fuse_unmount')
-        libfuse.fuse_unmount(mountpoint, channel)
-        raise
-
-def make_fuse_args(args):
-    '''Create fuse_args Structure for given mount options'''
-
-    args1 = [ sys.argv[0] ]
-    for opt in args:
-        args1.append(b'-o')
-        args1.append(opt)
-
-    # Init fuse_args struct
-    fuse_args = libfuse.fuse_args()
-    fuse_args.allocated = 0
-    fuse_args.argc = len(args1)
-    fuse_args.argv = (POINTER(c_char) * len(args1))(*[cast(c_char_p(x), POINTER(c_char))
-                                                      for x in args1])
-    return fuse_args
-
-def main(single=False):
-    '''Run FUSE main loop'''
-
-    if not session:
-        raise RuntimeError('Need to call init() before main()')
-
-    if single:
-        log.debug('Calling fuse_session_loop')
-        if libfuse.fuse_session_loop(session) != 0:
-            raise RuntimeError("fuse_session_loop() failed")
-    else:
-        log.debug('Calling fuse_session_loop_mt')
-        if libfuse.fuse_session_loop_mt(session) != 0:
-            raise RuntimeError("fuse_session_loop_mt() failed")
-
-def close():
-    '''Unmount file system and clean up'''
-
-    global operations
-    global fuse_ops
-    global mountpoint
-    global session
-    global channel
-
-    log.debug('Calling fuse_session_remove_chan')
-    libfuse.fuse_session_remove_chan(channel)
-    log.debug('Calling fuse_remove_signal_handlers')
-    libfuse.fuse_remove_signal_handlers(session)
-    log.debug('Calling fuse_session_destroy')
-    libfuse.fuse_session_destroy(session)
-    log.debug('Calling fuse_unmount')
-    libfuse.fuse_unmount(mountpoint, channel)
-
-    operations = None
-    fuse_ops = None
-    mountpoint = None
-    session = None
-    channel = None
-
-
-def fuse_lookup(req, parent_inode, name):
-    '''Look up a directory entry by name and get its attributes'''
-
-    log.debug('Handling lookup(%d, %s)', parent_inode, string_at(name))
-
-    attr = operations.lookup(parent_inode, string_at(name))
-    entry = dict_to_entry(attr)
-
-    log.debug('Calling fuse_reply_entry')
-    try:
-        libfuse.fuse_reply_entry(req, entry)
-    except DiscardedRequest:
-        pass
-
-def fuse_init(userdata_p, conn_info_p):
-    '''Initialize Operations'''
-    operations.init()
-
-def fuse_destroy(userdata_p):
-    '''Cleanup Operations'''
-    operations.destroy()
-
-def fuse_getattr(req, ino, _unused):
-    '''Get attributes for `ino`'''
-
-    log.debug('Handling getattr(%d)', ino)
-
-    attr = operations.getattr(ino)
-
-    attr_timeout = attr.pop('attr_timeout')
-    stat = dict_to_stat(attr)
-
-    log.debug('Calling fuse_reply_attr')
-    try:
-        libfuse.fuse_reply_attr(req, stat, attr_timeout)
-    except DiscardedRequest:
-        pass
-
-def fuse_access(req, ino, mask):
-    '''Check if calling user has `mask` rights for `ino`'''
-
-    log.debug('Handling access(%d, %o)', ino, mask)
-
-    # Get UID
-    ctx = libfuse.fuse_req_ctx(req).contents
-
-    # Define a function that returns a list of the GIDs
-    def get_gids():
-        # Get GID list if FUSE supports it
-        # Weird syntax to prevent PyDev from complaining
-        getgroups = getattr(libfuse, "fuse_req_getgroups")
-        gid_t = getattr(libfuse, 'gid_t')
-        no = 10
-        buf = (gid_t * no)(range(no))
-        ret = getgroups(req, no, buf)
-        if ret > no:
-            no = ret
-            buf = (gid_t * no)(range(no))
-            ret = getgroups(req, no, buf)
-
-        return [ buf[i].value for i in range(ret) ]
-
-    ret = operations.access(ino, mask, ctx, get_gids)
-
-    log.debug('Calling fuse_reply_err')
-    try:
-        if ret:
-            libfuse.fuse_reply_err(req, 0)
-        else:
-            libfuse.fuse_reply_err(req, errno.EPERM)
-    except DiscardedRequest:
-        pass
-
-
-def fuse_create(req, ino_parent, name, mode, fi):
-    '''Create and open a file'''
-
-    log.debug('Handling create(%d, %s, %o)', ino_parent, string_at(name), mode)
-    (fh, attr) = operations.create(ino_parent, string_at(name), mode,
-                                   libfuse.fuse_req_ctx(req).contents)
-    fi.contents.fh = fh
-    fi.contents.keep_cache = 1
-    entry = dict_to_entry(attr)
-
-    log.debug('Calling fuse_reply_create')
-    try:
-        libfuse.fuse_reply_create(req, entry, fi)
-    except DiscardedRequest:
-        operations.release(fh)
-
-
-def fuse_flush(req, ino, fi):
-    '''Handle close() system call
-    
-    May be called multiple times for the same open file.
-    '''
-
-    log.debug('Handling flush(%d)', fi.contents.fh)
-    operations.flush(fi.contents.fh)
-    log.debug('Calling fuse_reply_err(0)')
-    try:
-        libfuse.fuse_reply_err(req, 0)
-    except DiscardedRequest:
-        pass
-
-
-def fuse_fsync(req, ino, datasync, fi):
-    '''Flush buffers for `ino`
-    
-    If the datasync parameter is non-zero, then only the user data
-    is flushed (and not the meta data).
-    '''
-
-    log.debug('Handling fsync(%d, %s)', fi.contents.fh, datasync != 0)
-    operations.fsync(fi.contents.fh, datasync != 0)
-    log.debug('Calling fuse_reply_err(0)')
-    try:
-        libfuse.fuse_reply_err(req, 0)
-    except DiscardedRequest:
-        pass
-
-
-def fuse_fsyncdir(req, ino, datasync, fi):
-    '''Synchronize directory contents
-    
-    If the datasync parameter is non-zero, then only the directory contents
-    are flushed (and not the meta data about the directory itself).
-    '''
-
-    log.debug('Handling fsyncdir(%d, %s)', fi.contents.fh, datasync != 0)
-    operations.fsyncdir(fi.contents.fh, datasync != 0)
-    log.debug('Calling fuse_reply_err(0)')
-    try:
-        libfuse.fuse_reply_err(req, 0)
-    except DiscardedRequest:
-        pass
-
-
-def fuse_getxattr(req, ino, name, size):
-    '''Get an extended attribute.
-    '''
-
-    log.debug('Handling getxattr(%d, %r, %d)', ino, string_at(name), size)
-    val = operations.getxattr(ino, string_at(name))
-    if not isinstance(val, bytes):
-        raise TypeError("getxattr return value must be of type bytes")
-
-    try:
-        if size == 0:
-            log.debug('Calling fuse_reply_xattr')
-            libfuse.fuse_reply_xattr(req, len(val))
-        elif size >= len(val):
-            log.debug('Calling fuse_reply_buf')
-            libfuse.fuse_reply_buf(req, val, len(val))
-        else:
-            raise FUSEError(errno.ERANGE)
-    except DiscardedRequest:
-        pass
-
-
-def fuse_link(req, ino, new_parent_ino, new_name):
-    '''Create a hard link'''
-
-    log.debug('Handling fuse_link(%d, %d, %s)', ino, new_parent_ino, string_at(new_name))
-    attr = operations.link(ino, new_parent_ino, string_at(new_name))
-    entry = dict_to_entry(attr)
-
-    log.debug('Calling fuse_reply_entry')
-    try:
-        libfuse.fuse_reply_entry(req, entry)
-    except DiscardedRequest:
-        pass
-
-def fuse_listxattr(req, inode, size):
-    '''List extended attributes for `inode`'''
-
-    log.debug('Handling listxattr(%d)', inode)
-    names = operations.listxattr(inode)
-
-    if not all([ isinstance(name, bytes) for name in names]):
-        raise TypeError("listxattr return value must be list of bytes")
-
-    # Size of the \0 separated buffer 
-    act_size = (len(names) - 1) + sum([ len(name) for name in names ])
-
-    if size == 0:
-        try:
-            log.debug('Calling fuse_reply_xattr')
-            libfuse.fuse_reply_xattr(req, len(names))
-        except DiscardedRequest:
-            pass
-
-    elif act_size > size:
-        raise FUSEError(errno.ERANGE)
-
-    else:
-        try:
-            log.debug('Calling fuse_reply_buf')
-            libfuse.fuse_reply_buf(req, b'\0'.join(names), act_size)
-        except DiscardedRequest:
-            pass
-
-
-def fuse_mkdir(req, inode_parent, name, mode):
-    '''Create directory'''
-
-    log.debug('Handling mkdir(%d, %s, %o)', inode_parent, string_at(name), mode)
-    attr = operations.mkdir(inode_parent, string_at(name), mode,
-                            libfuse.fuse_req_ctx(req).contents)
-    entry = dict_to_entry(attr)
-
-    log.debug('Calling fuse_reply_entry')
-    try:
-        libfuse.fuse_reply_entry(req, entry)
-    except DiscardedRequest:
-        pass
-
-def fuse_mknod(req, inode_parent, name, mode, rdev):
-    '''Create (possibly special) file'''
-
-    log.debug('Handling mknod(%d, %s, %o, %d)', inode_parent, string_at(name),
-              mode, rdev)
-    attr = operations.mknod(inode_parent, string_at(name), mode, rdev,
-                            libfuse.fuse_req_ctx(req).contents)
-    entry = dict_to_entry(attr)
-
-    log.debug('Calling fuse_reply_entry')
-    try:
-        libfuse.fuse_reply_entry(req, entry)
-    except DiscardedRequest:
-        pass
-
-def fuse_open(req, inode, fi):
-    '''Open a file'''
-    log.debug('Handling open(%d, %d)', inode, fi.contents.flags)
-    fi.contents.fh = operations.open(inode, fi.contents.flags)
-    fi.contents.keep_cache = 1
-
-    log.debug('Calling fuse_reply_open')
-    try:
-        libfuse.fuse_reply_open(req, fi)
-    except DiscardedRequest:
-        operations.release(inode, fi.contents.fh)
-
-def fuse_opendir(req, inode, fi):
-    '''Open a directory'''
-
-    log.debug('Handling opendir(%d)', inode)
-    fi.contents.fh = operations.opendir(inode)
-
-    log.debug('Calling fuse_reply_open')
-    try:
-        libfuse.fuse_reply_open(req, fi)
-    except DiscardedRequest:
-        operations.releasedir(fi.contents.fh)
-
-
-def fuse_read(req, ino, size, off, fi):
-    '''Read data from file'''
-
-    log.debug('Handling read(ino=%d, off=%d, size=%d)', fi.contents.fh, off, size)
-    data = operations.read(fi.contents.fh, off, size)
-
-    if not isinstance(data, bytes):
-        raise TypeError("read() must return bytes")
-
-    if len(data) > size:
-        raise ValueError('read() must not return more than `size` bytes')
-
-    log.debug('Calling fuse_reply_buf')
-    try:
-        libfuse.fuse_reply_buf(req, data, len(data))
-    except DiscardedRequest:
-        pass
-
-
-def fuse_readlink(req, inode):
-    '''Read target of symbolic link'''
-
-    log.debug('Handling readlink(%d)', inode)
-    target = operations.readlink(inode)
-    log.debug('Calling fuse_reply_readlink')
-    try:
-        libfuse.fuse_reply_readlink(req, target)
-    except DiscardedRequest:
-        pass
-
-
-def fuse_readdir(req, ino, bufsize, off, fi):
-    '''Read directory entries'''
-
-    log.debug('Handling readdir(%d, %d, %d, %d)', ino, bufsize, off, fi.contents.fh)
-
-    # Collect as much entries as we can return
-    entries = list()
-    size = 0
-    for (name, attr) in operations.readdir(fi.contents.fh, off):
-        if not isinstance(name, bytes):
-            raise TypeError("readdir() must return entry names as bytes")
-
-        stat = dict_to_stat(attr)
-
-        entry_size = libfuse.fuse_add_direntry(req, None, 0, name, stat, 0)
-        if size + entry_size > bufsize:
-            break
-
-        entries.append((name, stat))
-        size += entry_size
-
-    log.debug('Gathered %d entries, total size %d', len(entries), size)
-
-    # If there are no entries left, return empty buffer
-    if not entries:
-        try:
-            log.debug('Calling fuse_reply_buf')
-            libfuse.fuse_reply_buf(req, None, 0)
-        except DiscardedRequest:
-            pass
-        return
-
-    # Create and fill buffer
-    log.debug('Adding entries to buffer')
-    buf = create_string_buffer(size)
-    next_ = off
-    addr_off = 0
-    for (name, stat) in entries:
-        next_ += 1
-        addr_off += libfuse.fuse_add_direntry(req, cast(addressof(buf) + addr_off, POINTER(c_char)),
-                                              bufsize, name, stat, next_)
-
-    # Return buffer
-    log.debug('Calling fuse_reply_buf')
-    try:
-        libfuse.fuse_reply_buf(req, buf, size)
-    except DiscardedRequest:
-        pass
-
-
-def fuse_release(req, inode, fi):
-    '''Release open file'''
-
-    log.debug('Handling release(%d)', fi.contents.fh)
-    operations.release(fi.contents.fh)
-    log.debug('Calling fuse_reply_err(0)')
-    try:
-        libfuse.fuse_reply_err(req, 0)
-    except DiscardedRequest:
-        pass
-
-def fuse_releasedir(req, inode, fi):
-    '''Release open directory'''
-
-    log.debug('Handling releasedir(%d)', fi.contents.fh)
-    operations.releasedir(fi.contents.fh)
-    log.debug('Calling fuse_reply_err(0)')
-    try:
-        libfuse.fuse_reply_err(req, 0)
-    except DiscardedRequest:
-        pass
-
-def fuse_removexattr(req, inode, name):
-    '''Remove extended attribute'''
-
-    log.debug('Handling removexattr(%d, %s)', inode, string_at(name))
-    operations.removexattr(inode, string_at(name))
-    log.debug('Calling fuse_reply_err(0)')
-    try:
-        libfuse.fuse_reply_err(req, 0)
-    except DiscardedRequest:
-        pass
-
-def fuse_rename(req, parent_inode_old, name_old, parent_inode_new, name_new):
-    '''Rename a directory entry'''
-
-    log.debug('Handling rename(%d, %r, %d, %r)', parent_inode_old, string_at(name_old),
-              parent_inode_new, string_at(name_new))
-    operations.rename(parent_inode_old, string_at(name_old), parent_inode_new,
-                      string_at(name_new))
-    log.debug('Calling fuse_reply_err(0)')
-    try:
-        libfuse.fuse_reply_err(req, 0)
-    except DiscardedRequest:
-        pass
-
-def fuse_rmdir(req, inode_parent, name):
-    '''Remove a directory'''
-
-    log.debug('Handling rmdir(%d, %r)', inode_parent, string_at(name))
-    operations.rmdir(inode_parent, string_at(name))
-    log.debug('Calling fuse_reply_err(0)')
-    try:
-        libfuse.fuse_reply_err(req, 0)
-    except DiscardedRequest:
-        pass
-
-def fuse_setattr(req, inode, stat, to_set, fi):
-    '''Change directory entry attributes'''
-
-    log.debug('Handling fuse_setattr(%d)', inode)
-
-    # Note: We can't check if we know all possible flags,
-    # because the part of to_set that is not "covered"
-    # by flags seems to be undefined rather than zero.
-
-    attr_all = stat_to_dict(stat.contents)
-    attr = dict()
-
-    if (to_set & libfuse.FUSE_SET_ATTR_MTIME) != 0:
-        attr['st_mtime'] = attr_all['st_mtime']
-
-    if (to_set & libfuse.FUSE_SET_ATTR_ATIME) != 0:
-        attr['st_atime'] = attr_all['st_atime']
-
-    if (to_set & libfuse.FUSE_SET_ATTR_MODE) != 0:
-        attr['st_mode'] = attr_all['st_mode']
-
-    if (to_set & libfuse.FUSE_SET_ATTR_UID) != 0:
-        attr['st_uid'] = attr_all['st_uid']
-
-    if (to_set & libfuse.FUSE_SET_ATTR_GID) != 0:
-        attr['st_gid'] = attr_all['st_gid']
-
-    if (to_set & libfuse.FUSE_SET_ATTR_SIZE) != 0:
-        attr['st_size'] = attr_all['st_size']
-
-    attr = operations.setattr(inode, attr)
-
-    attr_timeout = attr.pop('attr_timeout')
-    stat = dict_to_stat(attr)
-
-    log.debug('Calling fuse_reply_attr')
-    try:
-        libfuse.fuse_reply_attr(req, stat, attr_timeout)
-    except DiscardedRequest:
-        pass
-
-def fuse_setxattr(req, inode, name, val, size, flags):
-    '''Set an extended attribute'''
-
-    log.debug('Handling setxattr(%d, %r, %r, %d)', inode, string_at(name),
-              string_at(val, size), flags)
-
-    # Make sure we know all the flags
-    if (flags & ~(libfuse.XATTR_CREATE | libfuse.XATTR_REPLACE)) != 0:
-        raise ValueError('unknown flag')
-
-    if (flags & libfuse.XATTR_CREATE) != 0:
-        try:
-            operations.getxattr(inode, string_at(name))
-        except FUSEError as e:
-            if e.errno == ENOATTR:
-                pass
-            raise
-        else:
-            raise FUSEError(errno.EEXIST)
-    elif (flags & libfuse.XATTR_REPLACE) != 0:
-        # Exception can be passed on if the attribute does not exist
-        operations.getxattr(inode, string_at(name))
-
-    operations.setxattr(inode, string_at(name), string_at(val, size))
-
-    log.debug('Calling fuse_reply_err(0)')
-    try:
-        libfuse.fuse_reply_err(req, 0)
-    except DiscardedRequest:
-        pass
-
-def fuse_statfs(req, inode):
-    '''Return filesystem statistics'''
-
-    log.debug('Handling statfs(%d)', inode)
-    attr = operations.statfs()
-    statfs = libfuse.statvfs()
-
-    for (key, val) in attr.iteritems():
-        setattr(statfs, key, val)
-
-    log.debug('Calling fuse_reply_statfs')
-    try:
-        libfuse.fuse_reply_statfs(req, statfs)
-    except DiscardedRequest:
-        pass
-
-def fuse_symlink(req, target, parent_inode, name):
-    '''Create a symbolic link'''
-
-    log.debug('Handling symlink(%d, %r, %r)', parent_inode, string_at(name), string_at(target))
-    attr = operations.symlink(parent_inode, string_at(name), string_at(target),
-                              libfuse.fuse_req_ctx(req).contents)
-    entry = dict_to_entry(attr)
-
-    log.debug('Calling fuse_reply_entry')
-    try:
-        libfuse.fuse_reply_entry(req, entry)
-    except DiscardedRequest:
-        pass
-
-
-def fuse_unlink(req, parent_inode, name):
-    '''Delete a file'''
-
-    log.debug('Handling unlink(%d, %r)', parent_inode, string_at(name))
-    operations.unlink(parent_inode, string_at(name))
-    log.debug('Calling fuse_reply_err(0)')
-    try:
-        libfuse.fuse_reply_err(req, 0)
-    except DiscardedRequest:
-        pass
-
-def fuse_write(req, inode, buf, size, off, fi):
-    '''Write into an open file handle'''
-
-    log.debug('Handling write(fh=%d, off=%d, size=%d)', fi.contents.fh, off, size)
-    written = operations.write(fi.contents.fh, off, string_at(buf, size))
-
-    log.debug('Calling fuse_reply_write')
-    try:
-        libfuse.fuse_reply_write(req, written)
-    except DiscardedRequest:
-        pass
diff --git a/lib/python/fusepy/low-level/llfuse/operations.py b/lib/python/fusepy/low-level/llfuse/operations.py
deleted file mode 100644
index 4510016..0000000
--- a/lib/python/fusepy/low-level/llfuse/operations.py
+++ /dev/null
@@ -1,348 +0,0 @@
-'''
-$Id: operations.py 47 2010-01-29 17:11:23Z nikratio $
-
-Copyright (c) 2010, Nikolaus Rath <Nikolaus@rath.org>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-    * Neither the name of the main author nor the names of other contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-''' 
-
-from __future__ import division, print_function, absolute_import
-
-from .interface import FUSEError
-import errno
-  
-class Operations(object):
-    '''
-    This is a dummy class that just documents the possible methods that
-    a file system may declare.
-    '''
-    
-    # This is a dummy class, so all the methods could of course
-    # be functions
-    #pylint: disable-msg=R0201
-    
-    def handle_exc(self, exc):
-        '''Handle exceptions that occured during request processing. 
-        
-        This method returns nothing and does not raise any exceptions itself.
-        '''
-        
-        pass
-    
-    def init(self):
-        '''Initialize operations
-        
-        This function has to be called before any request has been received,
-        but after the mountpoint has been set up and the process has
-        daemonized.
-        '''
-        
-        pass
-    
-    def destroy(self):
-        '''Clean up operations.
-        
-        This method has to be called after the last request has been
-        received, when the file system is about to be unmounted.
-        '''
-        
-        pass
-    
-    def check_args(self, fuse_args):
-        '''Review FUSE arguments
-        
-        This method checks if the FUSE options `fuse_args` are compatible
-        with the way that the file system operations are implemented.
-        It raises an exception if incompatible options are encountered and
-        silently adds required options if they are missing.
-        '''
-        
-        pass
-    
-    def readdir(self, fh, off):
-        '''Read directory entries
-        
-        This method returns an iterator over the contents of directory `fh`,
-        starting at entry `off`. The iterator yields tuples of the form
-        ``(name, attr)``, where ``attr` is a dict with keys corresponding to
-        the elements of ``struct stat``.
-         
-        Iteration may be stopped as soon as enough elements have been
-        retrieved and does not have to be continued until `StopIteration`
-        is raised.
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-        
-    def read(self, fh, off, size):
-        '''Read `size` bytes from `fh` at position `off`
-        
-        Unless the file has been opened in direct_io mode or EOF is reached,
-        this function  returns exactly `size` bytes. 
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def link(self, inode, new_parent_inode, new_name):
-        '''Create a hard link.
-    
-        Returns a dict with the attributes of the newly created directory
-        entry. The keys are the same as for `lookup`.
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def open(self, inode, flags):
-        '''Open a file.
-        
-        Returns an (integer) file handle. `flags` is a bitwise or of the open flags
-        described in open(2) and defined in the `os` module (with the exception of 
-        ``O_CREAT``, ``O_EXCL``, ``O_NOCTTY`` and ``O_TRUNC``)
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def opendir(self, inode):
-        '''Open a directory.
-        
-        Returns an (integer) file handle. 
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-
-    
-    def mkdir(self, parent_inode, name, mode, ctx):
-        '''Create a directory
-    
-        `ctx` must be a context object that contains pid, uid and 
-        primary gid of the requesting process.
-        
-        Returns a dict with the attributes of the newly created directory
-        entry. The keys are the same as for `lookup`.
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-
-    def mknod(self, parent_inode, name, mode, rdev, ctx):
-        '''Create (possibly special) file
-    
-        `ctx` must be a context object that contains pid, uid and 
-        primary gid of the requesting process.
-        
-        Returns a dict with the attributes of the newly created directory
-        entry. The keys are the same as for `lookup`.
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-
-    
-    def lookup(self, parent_inode, name):
-        '''Look up a directory entry by name and get its attributes.
-    
-        Returns a dict with keys corresponding to the elements in 
-        ``struct stat`` and the following additional keys:
-        
-        :generation: The inode generation number
-        :attr_timeout: Validity timeout (in seconds) for the attributes
-        :entry_timeout: Validity timeout (in seconds) for the name 
-        
-        Note also that the ``st_Xtime`` entries support floating point numbers 
-        to allow for nano second resolution.
-        
-        The returned dict can be modified at will by the caller without
-        influencing the internal state of the file system.
-        
-        If the entry does not exist, raises `FUSEError(errno.ENOENT)`.
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-
-    def listxattr(self, inode):
-        '''Get list of extended attribute names'''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def getattr(self, inode):
-        '''Get attributes for `inode`
-    
-        Returns a dict with keys corresponding to the elements in 
-        ``struct stat`` and the following additional keys:
-        
-        :attr_timeout: Validity timeout (in seconds) for the attributes
-        
-        The returned dict can be modified at will by the caller without
-        influencing the internal state of the file system.
-        
-        Note that the ``st_Xtime`` entries support floating point numbers 
-        to allow for nano second resolution.
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def getxattr(self, inode, name):
-        '''Return extended attribute value
-        
-        If the attribute does not exist, raises `FUSEError(ENOATTR)`
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
- 
-    def access(self, inode, mode, ctx, get_sup_gids):
-        '''Check if requesting process has `mode` rights on `inode`. 
-        
-        Returns a boolean value. `get_sup_gids` must be a function that
-        returns a list of the supplementary group ids of the requester. 
-        
-        `ctx` must be a context object that contains pid, uid and 
-        primary gid of the requesting process.
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def create(self, inode_parent, name, mode, ctx):
-        '''Create a file and open it
-                
-        `ctx` must be a context object that contains pid, uid and 
-        primary gid of the requesting process.
-        
-        Returns a tuple of the form ``(fh, attr)``. `fh` is
-        integer file handle that is used to identify the open file and
-        `attr` is a dict similar to the one returned by `lookup`.
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-
-    def flush(self, fh):
-        '''Handle close() syscall.
-        
-        May be called multiple times for the same open file (e.g. if the file handle
-        has been duplicated).
-                                                             
-        If the filesystem supports file locking operations, all locks belonging
-        to the file handle's owner are cleared. 
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def fsync(self, fh, datasync):
-        '''Flush buffers for file `fh`
-        
-        If `datasync` is true, only the user data is flushed (and no meta data). 
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    
-    def fsyncdir(self, fh, datasync):  
-        '''Flush buffers for directory `fh`
-        
-        If the `datasync` is true, then only the directory contents
-        are flushed (and not the meta data about the directory itself).
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-        
-    def readlink(self, inode):
-        '''Return target of symbolic link'''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def release(self, fh):
-        '''Release open file
-        
-        This method must be called exactly once for each `open` call.
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def releasedir(self, fh):
-        '''Release open directory
-        
-        This method must be called exactly once for each `opendir` call.
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def removexattr(self, inode, name):
-        '''Remove extended attribute
-        
-        If the attribute does not exist, raises FUSEError(ENOATTR)
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def rename(self, inode_parent_old, name_old, inode_parent_new, name_new):
-        '''Rename a directory entry'''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def rmdir(self, inode_parent, name):
-        '''Remove a directory'''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def setattr(self, inode, attr):
-        '''Change directory entry attributes
-        
-        `attr` must be a dict with keys corresponding to the attributes of 
-        ``struct stat``. `attr` may also include a new value for ``st_size`` which
-        means that the file should be truncated or extended.
-        
-        Returns a dict with the new attributs of the directory entry,
-        similar to the one returned by `getattr()`
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def setxattr(self, inode, name, value):
-        '''Set an extended attribute.
-        
-        The attribute may or may not exist already.
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def statfs(self):
-        '''Get file system statistics
-        
-        Returns a `dict` with keys corresponding to the attributes of 
-        ``struct statfs``.
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def symlink(self, inode_parent, name, target, ctx):
-        '''Create a symbolic link
-        
-        `ctx` must be a context object that contains pid, uid and 
-        primary gid of the requesting process.
-        
-        Returns a dict with the attributes of the newly created directory
-        entry. The keys are the same as for `lookup`.
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def unlink(self, parent_inode, name):
-        '''Remove a (possibly special) file'''
-        
-        raise FUSEError(errno.ENOSYS)
-    
-    def write(self, fh, off, data):
-        '''Write data into an open file
-        
-        Returns the number of bytes written.
-        Unless the file was opened in ``direct_io`` mode, this is always equal to
-        `len(data)`. 
-        '''
-        
-        raise FUSEError(errno.ENOSYS)
-    
diff --git a/lib/python/fusepy/low-level/llfuse_example.py b/lib/python/fusepy/low-level/llfuse_example.py
deleted file mode 100755
index 8b4d704..0000000
--- a/lib/python/fusepy/low-level/llfuse_example.py
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/usr/bin/env python
-'''
-$Id: llfuse_example.py 46 2010-01-29 17:10:10Z nikratio $
-
-Copyright (c) 2010, Nikolaus Rath <Nikolaus@rath.org>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-    * Neither the name of the main author nor the names of other contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-''' 
-
-from __future__ import division, print_function, absolute_import
-
-import llfuse
-import errno
-import stat
-import sys
-
-class Operations(llfuse.Operations):
-    '''A very simple example filesystem'''
-    
-    def __init__(self):      
-        super(Operations, self).__init__()
-        self.entries = [
-                   # name, attr
-                   (b'.', { 'st_ino': 1,
-                           'st_mode': stat.S_IFDIR | 0755,
-                           'st_nlink': 2}),
-                  (b'..', { 'st_ino': 1,
-                           'st_mode': stat.S_IFDIR | 0755,
-                           'st_nlink': 2}),
-                  (b'file1', { 'st_ino': 2, 'st_nlink': 1,
-                              'st_mode': stat.S_IFREG | 0644 }),
-                  (b'file2', { 'st_ino': 3, 'st_nlink': 1,
-                              'st_mode': stat.S_IFREG | 0644 }) ]
-        
-        self.contents = { # Inode: Contents
-                         2: b'Hello, World\n',
-                         3: b'Some more file contents\n'
-        }
-        
-        self.by_inode = dict()
-        self.by_name = dict()
-        
-        for entry in self.entries:
-            (name, attr) = entry        
-            if attr['st_ino'] in self.contents: 
-                attr['st_size'] = len(self.contents[attr['st_ino']])
- 
-                
-            self.by_inode[attr['st_ino']] = attr
-            self.by_name[name] = attr
-
-                           
-        
-    def lookup(self, parent_inode, name):
-        try:
-            attr = self.by_name[name].copy()
-        except KeyError:
-            raise llfuse.FUSEError(errno.ENOENT)
-        
-        attr['attr_timeout'] = 1
-        attr['entry_timeout'] = 1
-        attr['generation'] = 1
-        
-        return attr
- 
-    
-    def getattr(self, inode):
-        attr = self.by_inode[inode].copy()
-        attr['attr_timeout'] = 1
-        return attr
-    
-    def readdir(self, fh, off):    
-        for entry in self.entries:
-            if off > 0:
-                off -= 1
-                continue
-            
-            yield entry
-    
-        
-    def read(self, fh, off, size):
-        return self.contents[fh][off:off+size]  
-    
-    def open(self, inode, flags):
-        if inode in self.contents:
-            return inode
-        else:
-            raise RuntimeError('Attempted to open() a directory')
-    
-    def opendir(self, inode):
-        return inode
- 
-    def access(self, inode, mode, ctx, get_sup_gids):
-        return True
-
-
-
-if __name__ == '__main__':
-    
-    if len(sys.argv) != 2:
-        raise SystemExit('Usage: %s <mountpoint>' % sys.argv[0])
-    
-    mountpoint = sys.argv[1]
-    operations = Operations()
-    
-    llfuse.init(operations, mountpoint, [ b"nonempty", b'fsname=llfuses_xmp' ])
-    llfuse.main()
-    
\ No newline at end of file
diff --git a/lib/python/fusepy/low-level/setup.py b/lib/python/fusepy/low-level/setup.py
deleted file mode 100755
index 88a5018..0000000
--- a/lib/python/fusepy/low-level/setup.py
+++ /dev/null
@@ -1,127 +0,0 @@
-#!/usr/bin/env python
-'''
-$Id: setup.py 53 2010-02-22 01:48:45Z nikratio $
-
-Copyright (c) 2010, Nikolaus Rath <Nikolaus@rath.org>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-    * Neither the name of the main author nor the names of other contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-'''
-
-from __future__ import division, print_function
-
-from distutils.core import setup, Command
-import distutils.command.build
-import sys
-import os
-import tempfile
-import subprocess
-import re
-import logging
-import ctypes.util
-
-# These are the definitions that we need 
-fuse_export_regex = ['^FUSE_SET_.*', '^XATTR_.*', 'fuse_reply_.*' ]
-fuse_export_symbols = ['fuse_mount', 'fuse_lowlevel_new', 'fuse_add_direntry',
-                       'fuse_set_signal_handlers', 'fuse_session_add_chan',
-                       'fuse_session_loop_mt', 'fuse_session_remove_chan',
-                       'fuse_remove_signal_handlers', 'fuse_session_destroy',
-                       'fuse_unmount', 'fuse_req_ctx', 'fuse_lowlevel_ops',
-                       'fuse_session_loop', 'ENOATTR', 'ENOTSUP',
-                       'fuse_version' ]
-
-class build_ctypes(Command):
-
-    description = "Build ctypes interfaces"
-    user_options = []
-    boolean_options = []
-
-    def initialize_options(self):
-         pass
-
-    def finalize_options(self):
-        pass
-
-    def run(self):
-        '''Create ctypes API to local FUSE headers'''
-
-         # Import ctypeslib
-        basedir = os.path.abspath(os.path.dirname(sys.argv[0]))
-        sys.path.insert(0, os.path.join(basedir, 'ctypeslib.zip'))
-        from ctypeslib import h2xml, xml2py
-        from ctypeslib.codegen import codegenerator as ctypeslib
-
-        print('Creating ctypes API from local fuse headers...')
-
-        cflags = self.get_cflags()
-        print('Using cflags: %s' % ' '.join(cflags))
-
-        fuse_path = 'fuse'
-        if not ctypes.util.find_library(fuse_path):
-            print('Could not find fuse library', file=sys.stderr)
-            sys.exit(1)
-
-
-        # Create temporary XML file
-        tmp_fh = tempfile.NamedTemporaryFile()
-        tmp_name = tmp_fh.name
-
-        print('Calling h2xml...')
-        argv = [ 'h2xml.py', '-o', tmp_name, '-c', '-q', '-I', basedir, 'fuse_ctypes.h' ]
-        argv += cflags
-        ctypeslib.ASSUME_STRINGS = False
-        ctypeslib.CDLL_SET_ERRNO = False
-        ctypeslib.PREFIX = ('# Code autogenerated by ctypeslib. Any changes will be lost!\n\n'
-                            '#pylint: disable-all\n'
-                            '#@PydevCodeAnalysisIgnore\n\n')
-        h2xml.main(argv)
-
-        print('Calling xml2py...')
-        api_file = os.path.join(basedir, 'llfuse', 'ctypes_api.py')
-        argv = [ 'xml2py.py', tmp_name, '-o', api_file, '-l', fuse_path ]
-        for el in fuse_export_regex:
-            argv.append('-r')
-            argv.append(el)
-        for el in fuse_export_symbols:
-            argv.append('-s')
-            argv.append(el)
-        xml2py.main(argv)
-
-        # Delete temporary XML file
-        tmp_fh.close()
-
-        print('Code generation complete.')
-
-    def get_cflags(self):
-        '''Get cflags required to compile with fuse library'''
-
-        proc = subprocess.Popen(['pkg-config', 'fuse', '--cflags'], stdout=subprocess.PIPE)
-        cflags = proc.stdout.readline().rstrip()
-        proc.stdout.close()
-        if proc.wait() != 0:
-            sys.stderr.write('Failed to execute pkg-config. Exit code: %d.\n'
-                             % proc.returncode)
-            sys.stderr.write('Check that the FUSE development package been installed properly.\n')
-            sys.exit(1)
-        return cflags.split()
-
-
-# Add as subcommand of build
-distutils.command.build.build.sub_commands.insert(0, ('build_ctypes', None))
-
-
-setup(name='llfuse_example',
-      version='1.0',
-      author='Nikolaus Rath',
-      author_email='Nikolaus@rath.org',
-      url='http://code.google.com/p/fusepy/',
-      packages=[ 'llfuse' ],
-      provides=['llfuse'],
-      cmdclass={ 'build_ctypes': build_ctypes}
-     )
diff --git a/lib/python/fusepy/memory.py b/lib/python/fusepy/memory.py
deleted file mode 100755
index 246b305..0000000
--- a/lib/python/fusepy/memory.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/usr/bin/env python
-
-from collections import defaultdict
-from errno import ENOENT
-from stat import S_IFDIR, S_IFLNK, S_IFREG
-from sys import argv, exit
-from time import time
-
-from fuse import FUSE, FuseOSError, Operations, LoggingMixIn
-
-
-class Memory(LoggingMixIn, Operations):
-    """Example memory filesystem. Supports only one level of files."""
-    
-    def __init__(self):
-        self.files = {}
-        self.data = defaultdict(str)
-        self.fd = 0
-        now = time()
-        self.files['/'] = dict(st_mode=(S_IFDIR | 0755), st_ctime=now,
-            st_mtime=now, st_atime=now, st_nlink=2)
-        
-    def chmod(self, path, mode):
-        self.files[path]['st_mode'] &= 0770000
-        self.files[path]['st_mode'] |= mode
-        return 0
-
-    def chown(self, path, uid, gid):
-        self.files[path]['st_uid'] = uid
-        self.files[path]['st_gid'] = gid
-    
-    def create(self, path, mode):
-        self.files[path] = dict(st_mode=(S_IFREG | mode), st_nlink=1,
-            st_size=0, st_ctime=time(), st_mtime=time(), st_atime=time())
-        self.fd += 1
-        return self.fd
-    
-    def getattr(self, path, fh=None):
-        if path not in self.files:
-            raise FuseOSError(ENOENT)
-        st = self.files[path]
-        return st
-    
-    def getxattr(self, path, name, position=0):
-        attrs = self.files[path].get('attrs', {})
-        try:
-            return attrs[name]
-        except KeyError:
-            return ''       # Should return ENOATTR
-    
-    def listxattr(self, path):
-        attrs = self.files[path].get('attrs', {})
-        return attrs.keys()
-    
-    def mkdir(self, path, mode):
-        self.files[path] = dict(st_mode=(S_IFDIR | mode), st_nlink=2,
-                st_size=0, st_ctime=time(), st_mtime=time(), st_atime=time())
-        self.files['/']['st_nlink'] += 1
-    
-    def open(self, path, flags):
-        self.fd += 1
-        return self.fd
-    
-    def read(self, path, size, offset, fh):
-        return self.data[path][offset:offset + size]
-    
-    def readdir(self, path, fh):
-        return ['.', '..'] + [x[1:] for x in self.files if x != '/']
-    
-    def readlink(self, path):
-        return self.data[path]
-    
-    def removexattr(self, path, name):
-        attrs = self.files[path].get('attrs', {})
-        try:
-            del attrs[name]
-        except KeyError:
-            pass        # Should return ENOATTR
-    
-    def rename(self, old, new):
-        self.files[new] = self.files.pop(old)
-    
-    def rmdir(self, path):
-        self.files.pop(path)
-        self.files['/']['st_nlink'] -= 1
-    
-    def setxattr(self, path, name, value, options, position=0):
-        # Ignore options
-        attrs = self.files[path].setdefault('attrs', {})
-        attrs[name] = value
-    
-    def statfs(self, path):
-        return dict(f_bsize=512, f_blocks=4096, f_bavail=2048)
-    
-    def symlink(self, target, source):
-        self.files[target] = dict(st_mode=(S_IFLNK | 0777), st_nlink=1,
-            st_size=len(source))
-        self.data[target] = source
-    
-    def truncate(self, path, length, fh=None):
-        self.data[path] = self.data[path][:length]
-        self.files[path]['st_size'] = length
-    
-    def unlink(self, path):
-        self.files.pop(path)
-    
-    def utimens(self, path, times=None):
-        now = time()
-        atime, mtime = times if times else (now, now)
-        self.files[path]['st_atime'] = atime
-        self.files[path]['st_mtime'] = mtime
-    
-    def write(self, path, data, offset, fh):
-        self.data[path] = self.data[path][:offset] + data
-        self.files[path]['st_size'] = len(self.data[path])
-        return len(data)
-
-
-if __name__ == "__main__":
-    if len(argv) != 2:
-        print 'usage: %s <mountpoint>' % argv[0]
-        exit(1)
-    fuse = FUSE(Memory(), argv[1], foreground=True)
\ No newline at end of file
diff --git a/lib/python/fusepy/memory3.py b/lib/python/fusepy/memory3.py
deleted file mode 100755
index e5cbad7..0000000
--- a/lib/python/fusepy/memory3.py
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/usr/bin/env python
-
-from fuse3 import FUSE, Operations, LoggingMixIn
-
-from collections import defaultdict
-from errno import ENOENT
-from stat import S_IFDIR, S_IFLNK, S_IFREG
-from sys import argv, exit
-from time import time
-
-import logging
-
-
-class Memory(LoggingMixIn, Operations):
-    """Example memory filesystem. Supports only one level of files."""
-    
-    def __init__(self):
-        self.files = {}
-        self.data = defaultdict(bytearray)
-        self.fd = 0
-        now = time()
-        self.files['/'] = dict(st_mode=(S_IFDIR | 0o755), st_ctime=now,
-            st_mtime=now, st_atime=now, st_nlink=2)
-        
-    def chmod(self, path, mode):
-        self.files[path]['st_mode'] &= 0o770000
-        self.files[path]['st_mode'] |= mode
-        return 0
-
-    def chown(self, path, uid, gid):
-        self.files[path]['st_uid'] = uid
-        self.files[path]['st_gid'] = gid
-    
-    def create(self, path, mode):
-        self.files[path] = dict(st_mode=(S_IFREG | mode), st_nlink=1,
-            st_size=0, st_ctime=time(), st_mtime=time(), st_atime=time())
-        self.fd += 1
-        return self.fd
-    
-    def getattr(self, path, fh=None):
-        if path not in self.files:
-            raise OSError(ENOENT, '')
-        st = self.files[path]
-        return st
-    
-    def getxattr(self, path, name, position=0):
-        attrs = self.files[path].get('attrs', {})
-        try:
-            return attrs[name]
-        except KeyError:
-            return ''       # Should return ENOATTR
-    
-    def listxattr(self, path):
-        attrs = self.files[path].get('attrs', {})
-        return attrs.keys()
-    
-    def mkdir(self, path, mode):
-        self.files[path] = dict(st_mode=(S_IFDIR | mode), st_nlink=2,
-                st_size=0, st_ctime=time(), st_mtime=time(), st_atime=time())
-        self.files['/']['st_nlink'] += 1
-    
-    def open(self, path, flags):
-        self.fd += 1
-        return self.fd
-    
-    def read(self, path, size, offset, fh):
-        return bytes(self.data[path][offset:offset + size])
-    
-    def readdir(self, path, fh):
-        return ['.', '..'] + [x[1:] for x in self.files if x != '/']
-    
-    def readlink(self, path):
-        return self.data[path].decode('utf-8')
-    
-    def removexattr(self, path, name):
-        attrs = self.files[path].get('attrs', {})
-        try:
-            del attrs[name]
-        except KeyError:
-            pass        # Should return ENOATTR
-    
-    def rename(self, old, new):
-        self.files[new] = self.files.pop(old)
-    
-    def rmdir(self, path):
-        self.files.pop(path)
-        self.files['/']['st_nlink'] -= 1
-    
-    def setxattr(self, path, name, value, options, position=0):
-        # Ignore options
-        attrs = self.files[path].setdefault('attrs', {})
-        attrs[name] = value
-    
-    def statfs(self, path):
-        return dict(f_bsize=512, f_blocks=4096, f_bavail=2048)
-    
-    def symlink(self, target, source):
-        source = source.encode('utf-8')
-        self.files[target] = dict(st_mode=(S_IFLNK | 0o777), st_nlink=1,
-            st_size=len(source))
-        self.data[target] = bytearray(source)
-    
-    def truncate(self, path, length, fh=None):
-        del self.data[path][length:]
-        self.files[path]['st_size'] = length
-    
-    def unlink(self, path):
-        self.files.pop(path)
-    
-    def utimens(self, path, times=None):
-        now = time()
-        atime, mtime = times if times else (now, now)
-        self.files[path]['st_atime'] = atime
-        self.files[path]['st_mtime'] = mtime
-    
-    def write(self, path, data, offset, fh):
-        del self.data[path][offset:]
-        self.data[path].extend(data)
-        self.files[path]['st_size'] = len(self.data[path])
-        return len(data)
-
-
-if __name__ == "__main__":
-    if len(argv) != 2:
-        print('usage: %s <mountpoint>' % argv[0])
-        exit(1)
-    logging.getLogger().setLevel(logging.DEBUG)
-    fuse = FUSE(Memory(), argv[1], foreground=True)
\ No newline at end of file
diff --git a/lib/python/fusepy/memoryll.py b/lib/python/fusepy/memoryll.py
deleted file mode 100755
index 307a1af..0000000
--- a/lib/python/fusepy/memoryll.py
+++ /dev/null
@@ -1,142 +0,0 @@
-#!/usr/bin/env python
-
-from collections import defaultdict
-from errno import ENOENT, EROFS
-from stat import S_IFMT, S_IMODE, S_IFDIR, S_IFREG
-from sys import argv, exit
-from time import time
-
-from fusell import FUSELL
-
-
-class Memory(FUSELL):
-    def create_ino(self):
-        self.ino += 1
-        return self.ino
-    
-    def init(self, userdata, conn):
-        self.ino = 1
-        self.attr = defaultdict(dict)
-        self.data = defaultdict(str)
-        self.parent = {}
-        self.children = defaultdict(dict)
-        
-        self.attr[1] = {'st_ino': 1, 'st_mode': S_IFDIR | 0777, 'st_nlink': 2}
-        self.parent[1] = 1
-    
-    forget = None
-    
-    def getattr(self, req, ino, fi):
-        print 'getattr:', ino
-        attr = self.attr[ino]
-        if attr:
-            self.reply_attr(req, attr, 1.0)
-        else:
-            self.reply_err(req, ENOENT)
-    
-    def lookup(self, req, parent, name):
-        print 'lookup:', parent, name
-        children = self.children[parent]
-        ino = children.get(name, 0)
-        attr = self.attr[ino]
-        
-        if attr:
-            entry = {'ino': ino, 'attr': attr, 'atttr_timeout': 1.0, 'entry_timeout': 1.0}
-            self.reply_entry(req, entry)
-        else:
-            self.reply_err(req, ENOENT)
-    
-    def mkdir(self, req, parent, name, mode):
-        print 'mkdir:', parent, name
-        ino = self.create_ino()
-        ctx = self.req_ctx(req)
-        now = time()
-        attr = {
-            'st_ino': ino,
-            'st_mode': S_IFDIR | mode,
-            'st_nlink': 2,
-            'st_uid': ctx['uid'],
-            'st_gid': ctx['gid'],
-            'st_atime': now,
-            'st_mtime': now,
-            'st_ctime': now}
-        
-        self.attr[ino] = attr
-        self.attr[parent]['st_nlink'] += 1
-        self.parent[ino] = parent
-        self.children[parent][name] = ino
-        
-        entry = {'ino': ino, 'attr': attr, 'atttr_timeout': 1.0, 'entry_timeout': 1.0}
-        self.reply_entry(req, entry)
-    
-    def mknod(self, req, parent, name, mode, rdev):
-        print 'mknod:', parent, name
-        ino = self.create_ino()
-        ctx = self.req_ctx(req)
-        now = time()
-        attr = {
-            'st_ino': ino,
-            'st_mode': mode,
-            'st_nlink': 1,
-            'st_uid': ctx['uid'],
-            'st_gid': ctx['gid'],
-            'st_rdev': rdev,
-            'st_atime': now,
-            'st_mtime': now,
-            'st_ctime': now}
-        
-        self.attr[ino] = attr
-        self.attr[parent]['st_nlink'] += 1
-        self.children[parent][name] = ino
-        
-        entry = {'ino': ino, 'attr': attr, 'atttr_timeout': 1.0, 'entry_timeout': 1.0}
-        self.reply_entry(req, entry)
-    
-    def open(self, req, ino, fi):
-        print 'open:', ino
-        self.reply_open(req, fi)
-
-    def read(self, req, ino, size, off, fi):
-        print 'read:', ino, size, off
-        buf = self.data[ino][off:(off + size)]
-        self.reply_buf(req, buf)
-    
-    def readdir(self, req, ino, size, off, fi):
-        print 'readdir:', ino
-        parent = self.parent[ino]
-        entries = [('.', {'st_ino': ino, 'st_mode': S_IFDIR}),
-            ('..', {'st_ino': parent, 'st_mode': S_IFDIR})]
-        for name, child in self.children[ino].items():
-            entries.append((name, self.attr[child]))
-        self.reply_readdir(req, size, off, entries)        
-    
-    def rename(self, req, parent, name, newparent, newname):
-        print 'rename:', parent, name, newparent, newname
-        ino = self.children[parent].pop(name)
-        self.children[newparent][newname] = ino
-        self.parent[ino] = newparent
-        self.reply_err(req, 0)
-    
-    def setattr(self, req, ino, attr, to_set, fi):
-        print 'setattr:', ino, to_set
-        a = self.attr[ino]
-        for key in to_set:
-            if key == 'st_mode':
-                # Keep the old file type bit fields
-                a['st_mode'] = S_IFMT(a['st_mode']) | S_IMODE(attr['st_mode'])
-            else:
-                a[key] = attr[key]
-        self.attr[ino] = a
-        self.reply_attr(req, a, 1.0)
-    
-    def write(self, req, ino, buf, off, fi):
-        print 'write:', ino, off, len(buf)
-        self.data[ino] = self.data[ino][:off] + buf
-        self.attr[ino]['st_size'] = len(self.data[ino])
-        self.reply_write(req, len(buf))
-
-if __name__ == '__main__':
-    if len(argv) != 2:
-        print 'usage: %s <mountpoint>' % argv[0]
-        exit(1)   
-    fuse = Memory(argv[1])
diff --git a/lib/python/fusepy/sftp.py b/lib/python/fusepy/sftp.py
deleted file mode 100755
index 019fb29..0000000
--- a/lib/python/fusepy/sftp.py
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/bin/env python
-
-from sys import argv, exit
-from time import time
-
-from paramiko import SSHClient
-
-from fuse import FUSE, Operations
-
-
-class SFTP(Operations):
-    """A simple SFTP filesystem. Requires paramiko:
-            http://www.lag.net/paramiko/
-            
-       You need to be able to login to remote host without entering a password.
-    """
-    def __init__(self, host, path='.'):
-        self.client = SSHClient()
-        self.client.load_system_host_keys()
-        self.client.connect(host)
-        self.sftp = self.client.open_sftp()
-        self.root = path
-    
-    def __del__(self):
-        self.sftp.close()
-        self.client.close()
-    
-    def __call__(self, op, path, *args):
-        print '->', op, path, args[0] if args else ''
-        ret = '[Unhandled Exception]'
-        try:
-            ret = getattr(self, op)(self.root + path, *args)
-            return ret
-        except OSError, e:
-            ret = str(e)
-            raise
-        except IOError, e:
-            ret = str(e)
-            raise OSError(*e.args)
-        finally:
-            print '<-', op
-    
-    def chmod(self, path, mode):
-        return self.sftp.chmod(path, mode)
-    
-    def chown(self, path, uid, gid):
-        return self.sftp.chown(path, uid, gid)
-
-    def create(self, path, mode):
-        f = self.sftp.open(path, 'w')
-        f.chmod(mode)
-        f.close()
-        return 0
-
-    def getattr(self, path, fh=None):
-        st = self.sftp.lstat(path)
-        return dict((key, getattr(st, key)) for key in ('st_atime', 'st_gid',
-            'st_mode', 'st_mtime', 'st_size', 'st_uid'))
-
-    def mkdir(self, path, mode):
-        return self.sftp.mkdir(path, mode)
-
-    def read(self, path, size, offset, fh):
-        f = self.sftp.open(path)
-        f.seek(offset, 0)
-        buf = f.read(size)
-        f.close()
-        return buf
-
-    def readdir(self, path, fh):
-        return ['.', '..'] + [name.encode('utf-8') for name in self.sftp.listdir(path)]
-
-    def readlink(self, path):
-        return self.sftp.readlink(path)
-
-    def rename(self, old, new):
-        return self.sftp.rename(old, self.root + new)
-
-    def rmdir(self, path):
-        return self.sftp.rmdir(path)
-
-    def symlink(self, target, source):
-        return self.sftp.symlink(source, target)
-
-    def truncate(self, path, length, fh=None):
-        return self.sftp.truncate(path, length)
-
-    def unlink(self, path):
-        return self.sftp.unlink(path)
-
-    def utimens(self, path, times=None):
-        return self.sftp.utime(path, times)
-
-    def write(self, path, data, offset, fh):
-        f = self.sftp.open(path, 'r+')
-        f.seek(offset, 0)
-        f.write(data)
-        f.close()
-        return len(data)
-    
-
-if __name__ == "__main__":
-    if len(argv) != 3:
-        print 'usage: %s <host> <mountpoint>' % argv[0]
-        exit(1)
-    fuse = FUSE(SFTP(argv[1]), argv[2], foreground=True, nothreads=True)
\ No newline at end of file
diff --git a/lib/python/setup.py b/lib/python/setup.py
deleted file mode 100644
index cefac2d..0000000
--- a/lib/python/setup.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from setuptools import setup
-setup(
-    name='camlistore-client',
-    version='1.0.3dev',
-    author='Brett Slatkin',
-    author_email='bslatkin@gmail.com',
-    maintainer='Jack Laxson',
-    maintainer_email='jackjrabbit+camli@gmail.com',
-    description="Client library for Camlistore.",
-    url='http://camlistore.org',
-    license='Apache v2',
-    long_description='A convience library for python developers wishing to explore camlistore.',
-    packages=['camli'],
-    install_requires=['simplejson'],
-    classifiers=['Environment :: Console', 'Topic :: Internet :: WWW/HTTP']
-)
\ No newline at end of file
diff --git a/lib/python/simplejson/__init__.py b/lib/python/simplejson/__init__.py
deleted file mode 100644
index dcfd541..0000000
--- a/lib/python/simplejson/__init__.py
+++ /dev/null
@@ -1,437 +0,0 @@
-r"""JSON (JavaScript Object Notation) <http://json.org> is a subset of
-JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
-interchange format.
-
-:mod:`simplejson` exposes an API familiar to users of the standard library
-:mod:`marshal` and :mod:`pickle` modules. It is the externally maintained
-version of the :mod:`json` library contained in Python 2.6, but maintains
-compatibility with Python 2.4 and Python 2.5 and (currently) has
-significant performance advantages, even without using the optional C
-extension for speedups.
-
-Encoding basic Python object hierarchies::
-
-    >>> import simplejson as json
-    >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
-    '["foo", {"bar": ["baz", null, 1.0, 2]}]'
-    >>> print json.dumps("\"foo\bar")
-    "\"foo\bar"
-    >>> print json.dumps(u'\u1234')
-    "\u1234"
-    >>> print json.dumps('\\')
-    "\\"
-    >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
-    {"a": 0, "b": 0, "c": 0}
-    >>> from StringIO import StringIO
-    >>> io = StringIO()
-    >>> json.dump(['streaming API'], io)
-    >>> io.getvalue()
-    '["streaming API"]'
-
-Compact encoding::
-
-    >>> import simplejson as json
-    >>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
-    '[1,2,3,{"4":5,"6":7}]'
-
-Pretty printing::
-
-    >>> import simplejson as json
-    >>> s = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent='    ')
-    >>> print '\n'.join([l.rstrip() for l in  s.splitlines()])
-    {
-        "4": 5,
-        "6": 7
-    }
-
-Decoding JSON::
-
-    >>> import simplejson as json
-    >>> obj = [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
-    >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') == obj
-    True
-    >>> json.loads('"\\"foo\\bar"') == u'"foo\x08ar'
-    True
-    >>> from StringIO import StringIO
-    >>> io = StringIO('["streaming API"]')
-    >>> json.load(io)[0] == 'streaming API'
-    True
-
-Specializing JSON object decoding::