Merge branch 'refs/heads/master' into textsearch
Conflicts: web/viewer.css web/viewer.html web/viewer.js
							
								
								
									
										342
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						@ -1,342 +0,0 @@
 | 
				
			|||||||
REPO = git@github.com:mozilla/pdf.js.git
 | 
					 | 
				
			||||||
BUILD_DIR := build
 | 
					 | 
				
			||||||
BUILD_TARGET := $(BUILD_DIR)/pdf.js
 | 
					 | 
				
			||||||
DEFAULT_BROWSERS := resources/browser_manifests/browser_manifest.json
 | 
					 | 
				
			||||||
DEFAULT_TESTS := test_manifest.json
 | 
					 | 
				
			||||||
DEFAULT_PYTHON := python2.7
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EXTENSION_SRC := ./extensions/
 | 
					 | 
				
			||||||
EXTENSION_BASE_VERSION := f0f0418a9c6637981fe1182b9212c2d592774c7d
 | 
					 | 
				
			||||||
FIREFOX_EXTENSION_NAME := pdf.js.xpi
 | 
					 | 
				
			||||||
FIREFOX_AMO_EXTENSION_NAME := pdf.js.amo.xpi
 | 
					 | 
				
			||||||
CHROME_EXTENSION_NAME := pdf.js.crx
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
all: bundle
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Let folks define custom rules for their clones.
 | 
					 | 
				
			||||||
-include local.mk
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# JS files needed for pdf.js.
 | 
					 | 
				
			||||||
PDF_JS_FILES = \
 | 
					 | 
				
			||||||
  core.js \
 | 
					 | 
				
			||||||
  util.js \
 | 
					 | 
				
			||||||
  api.js \
 | 
					 | 
				
			||||||
  canvas.js \
 | 
					 | 
				
			||||||
  obj.js \
 | 
					 | 
				
			||||||
  function.js \
 | 
					 | 
				
			||||||
  charsets.js \
 | 
					 | 
				
			||||||
  cidmaps.js \
 | 
					 | 
				
			||||||
  colorspace.js \
 | 
					 | 
				
			||||||
  crypto.js \
 | 
					 | 
				
			||||||
  evaluator.js \
 | 
					 | 
				
			||||||
  fonts.js \
 | 
					 | 
				
			||||||
  glyphlist.js \
 | 
					 | 
				
			||||||
  image.js \
 | 
					 | 
				
			||||||
  metrics.js \
 | 
					 | 
				
			||||||
  parser.js \
 | 
					 | 
				
			||||||
  pattern.js \
 | 
					 | 
				
			||||||
  stream.js \
 | 
					 | 
				
			||||||
  worker.js \
 | 
					 | 
				
			||||||
  ../external/jpgjs/jpg.js \
 | 
					 | 
				
			||||||
  jpx.js \
 | 
					 | 
				
			||||||
  bidi.js \
 | 
					 | 
				
			||||||
  metadata.js \
 | 
					 | 
				
			||||||
	$(NULL)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# make server
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This target starts a local web server at localhost:8888. This can be
 | 
					 | 
				
			||||||
# used for testing all browsers.
 | 
					 | 
				
			||||||
server:
 | 
					 | 
				
			||||||
	@cd test; $(DEFAULT_PYTHON) test.py --port=8888;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# make test
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This target runs all the tests excluding the unit-test. This can be used for
 | 
					 | 
				
			||||||
# testing all browsers.
 | 
					 | 
				
			||||||
test: shell-test browser-test
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Create production output (pdf.js, and corresponding changes to web files)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
production: | bundle
 | 
					 | 
				
			||||||
	@echo "Preparing web/viewer-production.html"; \
 | 
					 | 
				
			||||||
	cd web; \
 | 
					 | 
				
			||||||
	sed '/PDFJSSCRIPT_REMOVE_CORE/d' viewer.html > viewer-1.tmp; \
 | 
					 | 
				
			||||||
	sed '/PDFJSSCRIPT_INCLUDE_BUILD/ r viewer-snippet.html' viewer-1.tmp > viewer-production.html; \
 | 
					 | 
				
			||||||
	rm -f *.tmp; \
 | 
					 | 
				
			||||||
	cd ..
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Bundle pdf.js
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
bundle: | $(BUILD_DIR)
 | 
					 | 
				
			||||||
	@echo "Bundling source files into $(BUILD_TARGET)"
 | 
					 | 
				
			||||||
	@cd src; \
 | 
					 | 
				
			||||||
	cat $(PDF_JS_FILES) > all_files.tmp; \
 | 
					 | 
				
			||||||
	sed '/PDFJSSCRIPT_INCLUDE_ALL/ r all_files.tmp' pdf.js > ../$(BUILD_TARGET); \
 | 
					 | 
				
			||||||
	cp ../$(BUILD_TARGET) ../$(BUILD_TARGET).bak; \
 | 
					 | 
				
			||||||
	sed "s/PDFJSSCRIPT_BUNDLE_VER/`git log --format="%h" -n 1`/" ../$(BUILD_TARGET).bak > ../$(BUILD_TARGET); \
 | 
					 | 
				
			||||||
	rm -f ../$(BUILD_TARGET).bak; \
 | 
					 | 
				
			||||||
	rm -f *.tmp; \
 | 
					 | 
				
			||||||
	cd ..
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# make unit-test
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This target runs in-browser unit tests with js-test-driver and jasmine unit
 | 
					 | 
				
			||||||
# test framework.
 | 
					 | 
				
			||||||
unit-test:
 | 
					 | 
				
			||||||
	@cd test/unit/ ; make ;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# make browser-test
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This target runs in-browser tests using two primary arguments: a
 | 
					 | 
				
			||||||
# test manifest file, and a browser manifest file. Both are simple
 | 
					 | 
				
			||||||
# JSON formats, and examples can be found in the test/ directory. The
 | 
					 | 
				
			||||||
# target will inspect the environment for the PDF_TESTS and
 | 
					 | 
				
			||||||
# PDF_BROWSERS variables, and use those if found. Otherwise, the
 | 
					 | 
				
			||||||
# defaults at the top of this file are used.
 | 
					 | 
				
			||||||
ifeq ($(PDF_TESTS),)
 | 
					 | 
				
			||||||
PDF_TESTS := $(DEFAULT_TESTS)
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
ifeq ($(PDF_BROWSERS),)
 | 
					 | 
				
			||||||
PDF_BROWSERS := $(DEFAULT_BROWSERS)
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
browser-test:
 | 
					 | 
				
			||||||
	@if [ ! -f "test/$(PDF_BROWSERS)" ]; then \
 | 
					 | 
				
			||||||
	echo "Browser manifest file $(PDF_BROWSERS) does not exist."; \
 | 
					 | 
				
			||||||
	echo "Try copying one of the examples" \
 | 
					 | 
				
			||||||
              "in test/resources/browser_manifests/"; \
 | 
					 | 
				
			||||||
	exit 1; \
 | 
					 | 
				
			||||||
	fi;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	cd test; \
 | 
					 | 
				
			||||||
	$(DEFAULT_PYTHON) test.py --reftest \
 | 
					 | 
				
			||||||
	--browserManifestFile=$(PDF_BROWSERS) \
 | 
					 | 
				
			||||||
	--manifestFile=$(PDF_TESTS)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# # make shell-test
 | 
					 | 
				
			||||||
# #
 | 
					 | 
				
			||||||
# # This target runs all of the tests that can be run in a JS shell.
 | 
					 | 
				
			||||||
# # The shell used is taken from the JS_SHELL environment variable. If
 | 
					 | 
				
			||||||
# # that variable is not defined, the script will attempt to use the copy
 | 
					 | 
				
			||||||
# # of Rhino that comes with the Closure compiler used for producing the
 | 
					 | 
				
			||||||
# # website.
 | 
					 | 
				
			||||||
# SHELL_TARGET = $(NULL)
 | 
					 | 
				
			||||||
# ifeq ($(JS_SHELL),)
 | 
					 | 
				
			||||||
# JS_SHELL := "java -cp $(BUILD_DIR)/compiler.jar"
 | 
					 | 
				
			||||||
# JS_SHELL += "com.google.javascript.jscomp.mozilla.rhino.tools.shell.Main"
 | 
					 | 
				
			||||||
# SHELL_TARGET = compiler
 | 
					 | 
				
			||||||
# endif
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# shell-test: shell-msg $(SHELL_TARGET) font-test
 | 
					 | 
				
			||||||
# shell-msg:
 | 
					 | 
				
			||||||
# ifeq ($(SHELL_TARGET), compiler)
 | 
					 | 
				
			||||||
#   @echo "No JS_SHELL env variable present."
 | 
					 | 
				
			||||||
#   @echo "The default is to find a copy of Rhino and try that."
 | 
					 | 
				
			||||||
# endif
 | 
					 | 
				
			||||||
#   @echo "JS shell command is: $(JS_SHELL)"
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# font-test:
 | 
					 | 
				
			||||||
#   @echo "font test stub."
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# make lint
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This target runs the Closure Linter on most of our JS files.
 | 
					 | 
				
			||||||
# To install gjslint, see:
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# <http://code.google.com/closure/utilities/docs/linter_howto.html>
 | 
					 | 
				
			||||||
SRC_DIRS := src utils web test examples/helloworld extensions/firefox \
 | 
					 | 
				
			||||||
            extensions/firefox/components extensions/chrome test/unit
 | 
					 | 
				
			||||||
GJSLINT_FILES = $(foreach DIR, $(SRC_DIRS), $(wildcard $(DIR)/*.js))
 | 
					 | 
				
			||||||
lint:
 | 
					 | 
				
			||||||
	gjslint --nojsdoc $(GJSLINT_FILES)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# make web
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This target produces the website for the project, by checking out
 | 
					 | 
				
			||||||
# the gh-pages branch underneath the build directory, and then move
 | 
					 | 
				
			||||||
# the various viewer files into place.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# TODO: Use the Closure compiler to optimize the pdf.js files.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
GH_PAGES = $(BUILD_DIR)/gh-pages
 | 
					 | 
				
			||||||
web: | production extension compiler pages-repo
 | 
					 | 
				
			||||||
	@cp $(BUILD_TARGET) $(GH_PAGES)/$(BUILD_TARGET)
 | 
					 | 
				
			||||||
	@cp -R web/* $(GH_PAGES)/web
 | 
					 | 
				
			||||||
	@cp web/images/* $(GH_PAGES)/web/images
 | 
					 | 
				
			||||||
	@cp $(FIREFOX_BUILD_DIR)/$(FIREFOX_EXTENSION_NAME) \
 | 
					 | 
				
			||||||
		$(FIREFOX_BUILD_DIR)/$(FIREFOX_AMO_EXTENSION_NAME) \
 | 
					 | 
				
			||||||
		$(FIREFOX_BUILD_DIR)/update.rdf \
 | 
					 | 
				
			||||||
		$(GH_PAGES)/$(EXTENSION_SRC)/firefox/
 | 
					 | 
				
			||||||
	@cp $(GH_PAGES)/web/index.html.template $(GH_PAGES)/index.html;
 | 
					 | 
				
			||||||
	@mv -f $(GH_PAGES)/web/viewer-production.html $(GH_PAGES)/web/viewer.html;
 | 
					 | 
				
			||||||
	@cd $(GH_PAGES); git add -A;
 | 
					 | 
				
			||||||
	@echo
 | 
					 | 
				
			||||||
	@echo "Website built in $(GH_PAGES)."
 | 
					 | 
				
			||||||
	@echo "Don't forget to cd into $(GH_PAGES)/ and issue 'git commit' to push changes."
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# make pages-repo
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This target clones the gh-pages repo into the build directory. It
 | 
					 | 
				
			||||||
# deletes the current contents of the repo, since we overwrite
 | 
					 | 
				
			||||||
# everything with data from the master repo. The 'make web' target
 | 
					 | 
				
			||||||
# then uses 'git add -A' to track additions, modifications, moves,
 | 
					 | 
				
			||||||
# and deletions.
 | 
					 | 
				
			||||||
pages-repo: | $(BUILD_DIR)
 | 
					 | 
				
			||||||
	@if [ ! -d "$(GH_PAGES)" ]; then \
 | 
					 | 
				
			||||||
	git clone --depth 1 -b gh-pages $(REPO) $(GH_PAGES); \
 | 
					 | 
				
			||||||
	rm -rf $(GH_PAGES)/*; \
 | 
					 | 
				
			||||||
	fi;
 | 
					 | 
				
			||||||
	@mkdir -p $(GH_PAGES)/web;
 | 
					 | 
				
			||||||
	@mkdir -p $(GH_PAGES)/web/images;
 | 
					 | 
				
			||||||
	@mkdir -p $(GH_PAGES)/build;
 | 
					 | 
				
			||||||
	@mkdir -p $(GH_PAGES)/$(EXTENSION_SRC)/firefox;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# # make compiler
 | 
					 | 
				
			||||||
# #
 | 
					 | 
				
			||||||
# # This target downloads the Closure compiler, and places it in the
 | 
					 | 
				
			||||||
# # build directory. This target is also useful when the user doesn't
 | 
					 | 
				
			||||||
# # have a JS shell available--we can have them use the Rhino shell that
 | 
					 | 
				
			||||||
# # comes with Closure.
 | 
					 | 
				
			||||||
# COMPILER_URL = http://closure-compiler.googlecode.com/files/compiler-latest.zip
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# compiler: $(BUILD_DIR)/compiler.zip
 | 
					 | 
				
			||||||
# $(BUILD_DIR)/compiler.zip: | $(BUILD_DIR)
 | 
					 | 
				
			||||||
#   curl $(COMPILER_URL) > $(BUILD_DIR)/compiler.zip;
 | 
					 | 
				
			||||||
#   cd $(BUILD_DIR); unzip compiler.zip compiler.jar;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# make extension
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This target produce a restartless firefox extension containing a
 | 
					 | 
				
			||||||
# copy of the pdf.js source.
 | 
					 | 
				
			||||||
CONTENT_DIR := content
 | 
					 | 
				
			||||||
BUILD_NUMBER := `git log --format=oneline $(EXTENSION_BASE_VERSION).. | wc -l | awk '{print $$1}'`
 | 
					 | 
				
			||||||
PDFJSSCRIPT_VERSION := 0.3.$(BUILD_NUMBER)
 | 
					 | 
				
			||||||
EXTENSION_WEB_FILES = \
 | 
					 | 
				
			||||||
	web/images \
 | 
					 | 
				
			||||||
	web/viewer.css \
 | 
					 | 
				
			||||||
	web/viewer.js \
 | 
					 | 
				
			||||||
	web/viewer.html \
 | 
					 | 
				
			||||||
	web/viewer-production.html \
 | 
					 | 
				
			||||||
	web/debugger.js \
 | 
					 | 
				
			||||||
	$(NULL)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
FIREFOX_BUILD_DIR := $(BUILD_DIR)/firefox
 | 
					 | 
				
			||||||
FIREFOX_BUILD_CONTENT := $(FIREFOX_BUILD_DIR)/$(CONTENT_DIR)/
 | 
					 | 
				
			||||||
FIREFOX_CONTENT_DIR := $(EXTENSION_SRC)/firefox/$(CONTENT_DIR)/
 | 
					 | 
				
			||||||
FIREFOX_EXTENSION_FILES_TO_COPY = \
 | 
					 | 
				
			||||||
	*.js \
 | 
					 | 
				
			||||||
	*.rdf \
 | 
					 | 
				
			||||||
	*.png \
 | 
					 | 
				
			||||||
	install.rdf.in \
 | 
					 | 
				
			||||||
	README.mozilla \
 | 
					 | 
				
			||||||
	components \
 | 
					 | 
				
			||||||
	../../LICENSE \
 | 
					 | 
				
			||||||
	$(NULL)
 | 
					 | 
				
			||||||
FIREFOX_EXTENSION_FILES = \
 | 
					 | 
				
			||||||
	bootstrap.js \
 | 
					 | 
				
			||||||
	install.rdf \
 | 
					 | 
				
			||||||
	icon.png \
 | 
					 | 
				
			||||||
	icon64.png \
 | 
					 | 
				
			||||||
	components \
 | 
					 | 
				
			||||||
	content \
 | 
					 | 
				
			||||||
	LICENSE \
 | 
					 | 
				
			||||||
	$(NULL)
 | 
					 | 
				
			||||||
FIREFOX_MC_EXTENSION_FILES = \
 | 
					 | 
				
			||||||
	bootstrap.js \
 | 
					 | 
				
			||||||
	icon.png \
 | 
					 | 
				
			||||||
	icon64.png \
 | 
					 | 
				
			||||||
	components \
 | 
					 | 
				
			||||||
	content \
 | 
					 | 
				
			||||||
	LICENSE \
 | 
					 | 
				
			||||||
	$(NULL)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CHROME_BUILD_DIR := $(BUILD_DIR)/chrome
 | 
					 | 
				
			||||||
CHROME_CONTENT_DIR := $(EXTENSION_SRC)/chrome/$(CONTENT_DIR)/
 | 
					 | 
				
			||||||
CHROME_BUILD_CONTENT := $(CHROME_BUILD_DIR)/$(CONTENT_DIR)/
 | 
					 | 
				
			||||||
CHROME_EXTENSION_FILES = \
 | 
					 | 
				
			||||||
	extensions/chrome/*.json \
 | 
					 | 
				
			||||||
	extensions/chrome/*.html \
 | 
					 | 
				
			||||||
	$(NULL)
 | 
					 | 
				
			||||||
extension: | production
 | 
					 | 
				
			||||||
	# Clear out everything in the firefox extension build directory
 | 
					 | 
				
			||||||
	@rm -Rf $(FIREFOX_BUILD_DIR)
 | 
					 | 
				
			||||||
	@mkdir -p $(FIREFOX_BUILD_CONTENT)
 | 
					 | 
				
			||||||
	@mkdir -p $(FIREFOX_BUILD_CONTENT)/$(BUILD_DIR)
 | 
					 | 
				
			||||||
	@mkdir -p $(FIREFOX_BUILD_CONTENT)/web
 | 
					 | 
				
			||||||
	@cd extensions/firefox; cp -r $(FIREFOX_EXTENSION_FILES_TO_COPY) ../../$(FIREFOX_BUILD_DIR)/
 | 
					 | 
				
			||||||
	# Copy a standalone version of pdf.js inside the content directory
 | 
					 | 
				
			||||||
	@cp $(BUILD_TARGET) $(FIREFOX_BUILD_CONTENT)/$(BUILD_DIR)/
 | 
					 | 
				
			||||||
	@cp -r $(EXTENSION_WEB_FILES) $(FIREFOX_BUILD_CONTENT)/web/
 | 
					 | 
				
			||||||
	@rm $(FIREFOX_BUILD_CONTENT)/web/viewer-production.html
 | 
					 | 
				
			||||||
	# Copy over the firefox extension snippet so we can inline pdf.js in it
 | 
					 | 
				
			||||||
	@cp web/viewer-snippet-firefox-extension.html $(FIREFOX_BUILD_CONTENT)/web/
 | 
					 | 
				
			||||||
	# Modify the viewer so it does all the extension only stuff.
 | 
					 | 
				
			||||||
	@cd $(FIREFOX_BUILD_CONTENT)/web; \
 | 
					 | 
				
			||||||
	cp viewer-snippet-firefox-extension.html viewer-snippet-firefox-extension.html.bak; \
 | 
					 | 
				
			||||||
	sed '/PDFJSSCRIPT_INCLUDE_BUNDLE/ r ../build/pdf.js' viewer-snippet-firefox-extension.html.bak > viewer-snippet-firefox-extension.html; \
 | 
					 | 
				
			||||||
	cp viewer.html viewer.html.bak; \
 | 
					 | 
				
			||||||
	sed '/PDFJSSCRIPT_REMOVE_CORE/d' viewer.html.bak > viewer.html; \
 | 
					 | 
				
			||||||
	cp viewer.html viewer.html.bak; \
 | 
					 | 
				
			||||||
	sed '/PDFJSSCRIPT_REMOVE_FIREFOX_EXTENSION/d' viewer.html.bak > viewer.html; \
 | 
					 | 
				
			||||||
	cp viewer.html viewer.html.bak; \
 | 
					 | 
				
			||||||
	sed '/PDFJSSCRIPT_INCLUDE_FIREFOX_EXTENSION/ r viewer-snippet-firefox-extension.html' viewer.html.bak > viewer.html; \
 | 
					 | 
				
			||||||
	rm -f *.bak;
 | 
					 | 
				
			||||||
	# We don't need pdf.js anymore since its inlined
 | 
					 | 
				
			||||||
	@rm -Rf $(FIREFOX_BUILD_CONTENT)/$(BUILD_DIR)/;
 | 
					 | 
				
			||||||
	# Update the build version number
 | 
					 | 
				
			||||||
	cp $(FIREFOX_BUILD_DIR)/install.rdf $(FIREFOX_BUILD_DIR)/install.rdf.bak
 | 
					 | 
				
			||||||
	@sed "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/install.rdf.bak > $(FIREFOX_BUILD_DIR)/install.rdf
 | 
					 | 
				
			||||||
	cp $(FIREFOX_BUILD_DIR)/install.rdf.in $(FIREFOX_BUILD_DIR)/install.rdf.in.bak
 | 
					 | 
				
			||||||
	@sed "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/install.rdf.in.bak > $(FIREFOX_BUILD_DIR)/install.rdf.in
 | 
					 | 
				
			||||||
	cp $(FIREFOX_BUILD_DIR)/update.rdf $(FIREFOX_BUILD_DIR)/update.rdf.bak
 | 
					 | 
				
			||||||
	@sed "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/update.rdf.bak > $(FIREFOX_BUILD_DIR)/update.rdf
 | 
					 | 
				
			||||||
	cp $(FIREFOX_BUILD_DIR)/README.mozilla $(FIREFOX_BUILD_DIR)/README.mozilla.bak
 | 
					 | 
				
			||||||
	@sed "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/README.mozilla.bak > $(FIREFOX_BUILD_DIR)/README.mozilla
 | 
					 | 
				
			||||||
	@rm -f $(FIREFOX_BUILD_DIR)/*.bak
 | 
					 | 
				
			||||||
	@find $(FIREFOX_BUILD_DIR) -name ".*" -delete
 | 
					 | 
				
			||||||
	# Create the xpi
 | 
					 | 
				
			||||||
	@cd $(FIREFOX_BUILD_DIR); zip -r $(FIREFOX_EXTENSION_NAME) $(FIREFOX_EXTENSION_FILES)
 | 
					 | 
				
			||||||
	@echo "extension created: " $(FIREFOX_EXTENSION_NAME)
 | 
					 | 
				
			||||||
	# Build the amo extension too (remove the updateUrl)
 | 
					 | 
				
			||||||
	cp $(FIREFOX_BUILD_DIR)/install.rdf $(FIREFOX_BUILD_DIR)/install.rdf.bak
 | 
					 | 
				
			||||||
	@sed "/updateURL/d" $(FIREFOX_BUILD_DIR)/install.rdf.bak > $(FIREFOX_BUILD_DIR)/install.rdf
 | 
					 | 
				
			||||||
	@rm -f $(FIREFOX_BUILD_DIR)/*.bak
 | 
					 | 
				
			||||||
	@cd $(FIREFOX_BUILD_DIR); zip -r $(FIREFOX_AMO_EXTENSION_NAME) $(FIREFOX_EXTENSION_FILES)
 | 
					 | 
				
			||||||
	@echo "AMO extension created: " $(FIREFOX_AMO_EXTENSION_NAME)
 | 
					 | 
				
			||||||
	# List all files for mozilla-central
 | 
					 | 
				
			||||||
	@cd $(FIREFOX_BUILD_DIR); find $(FIREFOX_MC_EXTENSION_FILES) -type f > extension-files
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	# Clear out everything in the chrome extension build directory
 | 
					 | 
				
			||||||
	@rm -Rf $(CHROME_BUILD_DIR)
 | 
					 | 
				
			||||||
	@mkdir -p $(CHROME_BUILD_CONTENT)
 | 
					 | 
				
			||||||
	@mkdir -p $(CHROME_BUILD_CONTENT)/$(BUILD_DIR)
 | 
					 | 
				
			||||||
	@mkdir -p $(CHROME_BUILD_CONTENT)/web
 | 
					 | 
				
			||||||
	@cp -R $(CHROME_EXTENSION_FILES) $(CHROME_BUILD_DIR)/
 | 
					 | 
				
			||||||
	# Copy a standalone version of pdf.js inside the content directory
 | 
					 | 
				
			||||||
	@cp $(BUILD_TARGET) $(CHROME_BUILD_CONTENT)/$(BUILD_DIR)/
 | 
					 | 
				
			||||||
	@cp -r $(EXTENSION_WEB_FILES) $(CHROME_BUILD_CONTENT)/web/
 | 
					 | 
				
			||||||
	@mv -f $(CHROME_BUILD_CONTENT)/web/viewer-production.html $(CHROME_BUILD_CONTENT)/web/viewer.html
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Create the crx
 | 
					 | 
				
			||||||
  #TODO
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Make sure there's a build directory.
 | 
					 | 
				
			||||||
$(BUILD_DIR):
 | 
					 | 
				
			||||||
	mkdir -p $(BUILD_DIR)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
clean:
 | 
					 | 
				
			||||||
	rm -rf $(BUILD_DIR)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# make help
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This target just prints out a message to read these comments. :)
 | 
					 | 
				
			||||||
help:
 | 
					 | 
				
			||||||
	@echo "Read the comments in the Makefile for guidance.";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.PHONY:: production test browser-test font-test shell-test \
 | 
					 | 
				
			||||||
	shell-msg lint clean web compiler help server
 | 
					 | 
				
			||||||
							
								
								
									
										13
									
								
								README.md
									
									
									
									
									
								
							
							
						
						@ -36,7 +36,7 @@ Also, note that the development extension is updated on every merge and by defau
 | 
				
			|||||||
auto-update extensions on a daily basis (you can change this through the 
 | 
					auto-update extensions on a daily basis (you can change this through the 
 | 
				
			||||||
`extensions.update.interval` option in `about:config`).
 | 
					`extensions.update.interval` option in `about:config`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
For an experimental Chrome extension, get the code as explained below and issue `make extension`. 
 | 
					For an experimental Chrome extension, get the code as explained below and issue `node make extension`. 
 | 
				
			||||||
Then open Chrome, go to `Tools > Extension` and load the (unpackaged) extension
 | 
					Then open Chrome, go to `Tools > Extension` and load the (unpackaged) extension
 | 
				
			||||||
from the directory `build/chrome`.
 | 
					from the directory `build/chrome`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -50,9 +50,10 @@ To get a local copy of the current code, clone it using git:
 | 
				
			|||||||
Next, you need to start a local web server as some browsers don't allow opening
 | 
					Next, you need to start a local web server as some browsers don't allow opening
 | 
				
			||||||
PDF files for a file:// url:
 | 
					PDF files for a file:// url:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $ make server
 | 
					    $ node make server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If everything worked out, you can now serve 
 | 
					You can install Node via [nvm](https://github.com/creationix/nvm) or the 
 | 
				
			||||||
 | 
					[official package](http://nodejs.org). If everything worked out, you can now serve 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
+ http://localhost:8888/web/viewer.html
 | 
					+ http://localhost:8888/web/viewer.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -64,7 +65,7 @@ You can also view all the test pdf files on the right side serving
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
In order to bundle all `src/` files into a final `pdf.js`, issue:
 | 
					In order to bundle all `src/` files into a final `pdf.js`, issue:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $ make
 | 
					    $ node make bundle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This will generate the file `build/pdf.js` that can be included in your final project. (WARNING: That's a large file! Consider minifying it).
 | 
					This will generate the file `build/pdf.js` that can be included in your final project. (WARNING: That's a large file! Consider minifying it).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -73,8 +74,8 @@ This will generate the file `build/pdf.js` that can be included in your final pr
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
You can play with the PDF.js API directly from your browser through the live demos below:
 | 
					You can play with the PDF.js API directly from your browser through the live demos below:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
+ Hello world: http://jsbin.com/pdfjs-helloworld/edit#html,live
 | 
					+ Hello world: http://jsbin.com/pdfjs-helloworld-v2/edit#html,live
 | 
				
			||||||
+ Simple reader with prev/next page controls: http://jsbin.com/pdfjs-prevnext/edit#html,live
 | 
					+ Simple reader with prev/next page controls: http://jsbin.com/pdfjs-prevnext-v2/edit#html,live
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The repo contains a hello world example that you can run locally:
 | 
					The repo contains a hello world example that you can run locally:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								extensions/firefox/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@ -1 +1,2 @@
 | 
				
			|||||||
content/
 | 
					content/
 | 
				
			||||||
 | 
					metadata.inc
 | 
				
			||||||
 | 
				
			|||||||
@ -58,6 +58,9 @@ ChromeActions.prototype = {
 | 
				
			|||||||
      return '{}';
 | 
					      return '{}';
 | 
				
			||||||
    return application.prefs.getValue(EXT_PREFIX + '.database', '{}');
 | 
					    return application.prefs.getValue(EXT_PREFIX + '.database', '{}');
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					  getLocale: function() {
 | 
				
			||||||
 | 
					    return application.prefs.getValue('general.useragent.locale', 'en-US');
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  pdfBugEnabled: function() {
 | 
					  pdfBugEnabled: function() {
 | 
				
			||||||
    return application.prefs.getValue(EXT_PREFIX + '.pdfBugEnabled', false);
 | 
					    return application.prefs.getValue(EXT_PREFIX + '.pdfBugEnabled', false);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  <Description about="urn:mozilla:install-manifest">
 | 
					  <Description about="urn:mozilla:install-manifest">
 | 
				
			||||||
    <em:id>uriloader@pdf.js</em:id>
 | 
					    <em:id>uriloader@pdf.js</em:id>
 | 
				
			||||||
 | 
					    <!-- PDFJS_LOCALIZED_METADATA -->
 | 
				
			||||||
    <em:name>PDF Viewer</em:name>
 | 
					    <em:name>PDF Viewer</em:name>
 | 
				
			||||||
    <em:version>PDFJSSCRIPT_VERSION</em:version>
 | 
					    <em:version>PDFJSSCRIPT_VERSION</em:version>
 | 
				
			||||||
    <em:targetApplication>
 | 
					    <em:targetApplication>
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  <Description about="urn:mozilla:install-manifest">
 | 
					  <Description about="urn:mozilla:install-manifest">
 | 
				
			||||||
    <em:id>uriloader@pdf.js</em:id>
 | 
					    <em:id>uriloader@pdf.js</em:id>
 | 
				
			||||||
 | 
					    <!-- PDFJS_LOCALIZED_METADATA -->
 | 
				
			||||||
    <em:name>PDF Viewer</em:name>
 | 
					    <em:name>PDF Viewer</em:name>
 | 
				
			||||||
    <em:version>PDFJSSCRIPT_VERSION</em:version>
 | 
					    <em:version>PDFJSSCRIPT_VERSION</em:version>
 | 
				
			||||||
    <em:targetApplication>
 | 
					    <em:targetApplication>
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										676
									
								
								external/jasmine/jasmine-html.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,676 @@
 | 
				
			|||||||
 | 
					jasmine.HtmlReporterHelpers = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporterHelpers.createDom = function(type, attrs, childrenVarArgs) {
 | 
				
			||||||
 | 
					  var el = document.createElement(type);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (var i = 2; i < arguments.length; i++) {
 | 
				
			||||||
 | 
					    var child = arguments[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (typeof child === 'string') {
 | 
				
			||||||
 | 
					      el.appendChild(document.createTextNode(child));
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      if (child) {
 | 
				
			||||||
 | 
					        el.appendChild(child);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (var attr in attrs) {
 | 
				
			||||||
 | 
					    if (attr == "className") {
 | 
				
			||||||
 | 
					      el[attr] = attrs[attr];
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      el.setAttribute(attr, attrs[attr]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return el;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporterHelpers.getSpecStatus = function(child) {
 | 
				
			||||||
 | 
					  var results = child.results();
 | 
				
			||||||
 | 
					  var status = results.passed() ? 'passed' : 'failed';
 | 
				
			||||||
 | 
					  if (results.skipped) {
 | 
				
			||||||
 | 
					    status = 'skipped';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return status;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporterHelpers.appendToSummary = function(child, childElement) {
 | 
				
			||||||
 | 
					  var parentDiv = this.dom.summary;
 | 
				
			||||||
 | 
					  var parentSuite = (typeof child.parentSuite == 'undefined') ? 'suite' : 'parentSuite';
 | 
				
			||||||
 | 
					  var parent = child[parentSuite];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (parent) {
 | 
				
			||||||
 | 
					    if (typeof this.views.suites[parent.id] == 'undefined') {
 | 
				
			||||||
 | 
					      this.views.suites[parent.id] = new jasmine.HtmlReporter.SuiteView(parent, this.dom, this.views);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    parentDiv = this.views.suites[parent.id].element;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  parentDiv.appendChild(childElement);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporterHelpers.addHelpers = function(ctor) {
 | 
				
			||||||
 | 
					  for(var fn in jasmine.HtmlReporterHelpers) {
 | 
				
			||||||
 | 
					    ctor.prototype[fn] = jasmine.HtmlReporterHelpers[fn];
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporter = function(_doc) {
 | 
				
			||||||
 | 
					  var self = this;
 | 
				
			||||||
 | 
					  var doc = _doc || window.document;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var reporterView;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var dom = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Jasmine Reporter Public Interface
 | 
				
			||||||
 | 
					  self.logRunningSpecs = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  self.reportRunnerStarting = function(runner) {
 | 
				
			||||||
 | 
					    var specs = runner.specs() || [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (specs.length == 0) {
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    createReporterDom(runner.env.versionString());
 | 
				
			||||||
 | 
					    doc.body.appendChild(dom.reporter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    reporterView = new jasmine.HtmlReporter.ReporterView(dom);
 | 
				
			||||||
 | 
					    reporterView.addSpecs(specs, self.specFilter);
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  self.reportRunnerResults = function(runner) {
 | 
				
			||||||
 | 
					    reporterView.complete();
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  self.reportSuiteResults = function(suite) {
 | 
				
			||||||
 | 
					    reporterView.suiteComplete(suite);
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  self.reportSpecStarting = function(spec) {
 | 
				
			||||||
 | 
					    if (self.logRunningSpecs) {
 | 
				
			||||||
 | 
					      self.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  self.reportSpecResults = function(spec) {
 | 
				
			||||||
 | 
					    reporterView.specComplete(spec);
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  self.log = function() {
 | 
				
			||||||
 | 
					    var console = jasmine.getGlobal().console;
 | 
				
			||||||
 | 
					    if (console && console.log) {
 | 
				
			||||||
 | 
					      if (console.log.apply) {
 | 
				
			||||||
 | 
					        console.log.apply(console, arguments);
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  self.specFilter = function(spec) {
 | 
				
			||||||
 | 
					    if (!focusedSpecName()) {
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return spec.getFullName().indexOf(focusedSpecName()) === 0;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return self;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function focusedSpecName() {
 | 
				
			||||||
 | 
					    var specName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    (function memoizeFocusedSpec() {
 | 
				
			||||||
 | 
					      if (specName) {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var paramMap = [];
 | 
				
			||||||
 | 
					      var params = doc.location.search.substring(1).split('&');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      for (var i = 0; i < params.length; i++) {
 | 
				
			||||||
 | 
					        var p = params[i].split('=');
 | 
				
			||||||
 | 
					        paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      specName = paramMap.spec;
 | 
				
			||||||
 | 
					    })();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return specName;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function createReporterDom(version) {
 | 
				
			||||||
 | 
					    dom.reporter = self.createDom('div', { id: 'HTMLReporter', className: 'jasmine_reporter' },
 | 
				
			||||||
 | 
					      dom.banner = self.createDom('div', { className: 'banner' },
 | 
				
			||||||
 | 
					        self.createDom('span', { className: 'title' }, "Jasmine "),
 | 
				
			||||||
 | 
					        self.createDom('span', { className: 'version' }, version)),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      dom.symbolSummary = self.createDom('ul', {className: 'symbolSummary'}),
 | 
				
			||||||
 | 
					      dom.alert = self.createDom('div', {className: 'alert'}),
 | 
				
			||||||
 | 
					      dom.results = self.createDom('div', {className: 'results'},
 | 
				
			||||||
 | 
					        dom.summary = self.createDom('div', { className: 'summary' }),
 | 
				
			||||||
 | 
					        dom.details = self.createDom('div', { id: 'details' }))
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter);jasmine.HtmlReporterHelpers = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporterHelpers.createDom = function(type, attrs, childrenVarArgs) {
 | 
				
			||||||
 | 
					  var el = document.createElement(type);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (var i = 2; i < arguments.length; i++) {
 | 
				
			||||||
 | 
					    var child = arguments[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (typeof child === 'string') {
 | 
				
			||||||
 | 
					      el.appendChild(document.createTextNode(child));
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      if (child) {
 | 
				
			||||||
 | 
					        el.appendChild(child);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (var attr in attrs) {
 | 
				
			||||||
 | 
					    if (attr == "className") {
 | 
				
			||||||
 | 
					      el[attr] = attrs[attr];
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      el.setAttribute(attr, attrs[attr]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return el;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporterHelpers.getSpecStatus = function(child) {
 | 
				
			||||||
 | 
					  var results = child.results();
 | 
				
			||||||
 | 
					  var status = results.passed() ? 'passed' : 'failed';
 | 
				
			||||||
 | 
					  if (results.skipped) {
 | 
				
			||||||
 | 
					    status = 'skipped';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return status;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporterHelpers.appendToSummary = function(child, childElement) {
 | 
				
			||||||
 | 
					  var parentDiv = this.dom.summary;
 | 
				
			||||||
 | 
					  var parentSuite = (typeof child.parentSuite == 'undefined') ? 'suite' : 'parentSuite';
 | 
				
			||||||
 | 
					  var parent = child[parentSuite];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (parent) {
 | 
				
			||||||
 | 
					    if (typeof this.views.suites[parent.id] == 'undefined') {
 | 
				
			||||||
 | 
					      this.views.suites[parent.id] = new jasmine.HtmlReporter.SuiteView(parent, this.dom, this.views);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    parentDiv = this.views.suites[parent.id].element;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  parentDiv.appendChild(childElement);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporterHelpers.addHelpers = function(ctor) {
 | 
				
			||||||
 | 
					  for(var fn in jasmine.HtmlReporterHelpers) {
 | 
				
			||||||
 | 
					    ctor.prototype[fn] = jasmine.HtmlReporterHelpers[fn];
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporter.ReporterView = function(dom) {
 | 
				
			||||||
 | 
					  this.startedAt = new Date();
 | 
				
			||||||
 | 
					  this.runningSpecCount = 0;
 | 
				
			||||||
 | 
					  this.completeSpecCount = 0;
 | 
				
			||||||
 | 
					  this.passedCount = 0;
 | 
				
			||||||
 | 
					  this.failedCount = 0;
 | 
				
			||||||
 | 
					  this.skippedCount = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.createResultsMenu = function() {
 | 
				
			||||||
 | 
					    this.resultsMenu = this.createDom('span', {className: 'resultsMenu bar'},
 | 
				
			||||||
 | 
					      this.summaryMenuItem = this.createDom('a', {className: 'summaryMenuItem', href: "#"}, '0 specs'),
 | 
				
			||||||
 | 
					      ' | ',
 | 
				
			||||||
 | 
					      this.detailsMenuItem = this.createDom('a', {className: 'detailsMenuItem', href: "#"}, '0 failing'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.summaryMenuItem.onclick = function() {
 | 
				
			||||||
 | 
					      dom.reporter.className = dom.reporter.className.replace(/ showDetails/g, '');
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.detailsMenuItem.onclick = function() {
 | 
				
			||||||
 | 
					      showDetails();
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.addSpecs = function(specs, specFilter) {
 | 
				
			||||||
 | 
					    this.totalSpecCount = specs.length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.views = {
 | 
				
			||||||
 | 
					      specs: {},
 | 
				
			||||||
 | 
					      suites: {}
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (var i = 0; i < specs.length; i++) {
 | 
				
			||||||
 | 
					      var spec = specs[i];
 | 
				
			||||||
 | 
					      this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom, this.views);
 | 
				
			||||||
 | 
					      if (specFilter(spec)) {
 | 
				
			||||||
 | 
					        this.runningSpecCount++;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.specComplete = function(spec) {
 | 
				
			||||||
 | 
					    this.completeSpecCount++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (isUndefined(this.views.specs[spec.id])) {
 | 
				
			||||||
 | 
					      this.views.specs[spec.id] = new jasmine.HtmlReporter.SpecView(spec, dom);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var specView = this.views.specs[spec.id];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    switch (specView.status()) {
 | 
				
			||||||
 | 
					      case 'passed':
 | 
				
			||||||
 | 
					        this.passedCount++;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      case 'failed':
 | 
				
			||||||
 | 
					        this.failedCount++;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      case 'skipped':
 | 
				
			||||||
 | 
					        this.skippedCount++;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    specView.refresh();
 | 
				
			||||||
 | 
					    this.refresh();
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.suiteComplete = function(suite) {
 | 
				
			||||||
 | 
					    var suiteView = this.views.suites[suite.id];
 | 
				
			||||||
 | 
					    if (isUndefined(suiteView)) {
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    suiteView.refresh();
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.refresh = function() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (isUndefined(this.resultsMenu)) {
 | 
				
			||||||
 | 
					      this.createResultsMenu();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // currently running UI
 | 
				
			||||||
 | 
					    if (isUndefined(this.runningAlert)) {
 | 
				
			||||||
 | 
					      this.runningAlert = this.createDom('a', {href: "?", className: "runningAlert bar"});
 | 
				
			||||||
 | 
					      dom.alert.appendChild(this.runningAlert);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    this.runningAlert.innerHTML = "Running " + this.completeSpecCount + " of " + specPluralizedFor(this.totalSpecCount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // skipped specs UI
 | 
				
			||||||
 | 
					    if (isUndefined(this.skippedAlert)) {
 | 
				
			||||||
 | 
					      this.skippedAlert = this.createDom('a', {href: "?", className: "skippedAlert bar"});
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.skippedAlert.innerHTML = "Skipping " + this.skippedCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (this.skippedCount === 1 && isDefined(dom.alert)) {
 | 
				
			||||||
 | 
					      dom.alert.appendChild(this.skippedAlert);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // passing specs UI
 | 
				
			||||||
 | 
					    if (isUndefined(this.passedAlert)) {
 | 
				
			||||||
 | 
					      this.passedAlert = this.createDom('span', {href: "?", className: "passingAlert bar"});
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    this.passedAlert.innerHTML = "Passing " + specPluralizedFor(this.passedCount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // failing specs UI
 | 
				
			||||||
 | 
					    if (isUndefined(this.failedAlert)) {
 | 
				
			||||||
 | 
					      this.failedAlert = this.createDom('span', {href: "?", className: "failingAlert bar"});
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    this.failedAlert.innerHTML = "Failing " + specPluralizedFor(this.failedCount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (this.failedCount === 1 && isDefined(dom.alert)) {
 | 
				
			||||||
 | 
					      dom.alert.appendChild(this.failedAlert);
 | 
				
			||||||
 | 
					      dom.alert.appendChild(this.resultsMenu);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // summary info
 | 
				
			||||||
 | 
					    this.summaryMenuItem.innerHTML = "" + specPluralizedFor(this.runningSpecCount);
 | 
				
			||||||
 | 
					    this.detailsMenuItem.innerHTML = "" + this.failedCount + " failing";
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.complete = function() {
 | 
				
			||||||
 | 
					    dom.alert.removeChild(this.runningAlert);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.skippedAlert.innerHTML = "Ran " + this.runningSpecCount + " of " + specPluralizedFor(this.totalSpecCount) + " - run all";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (this.failedCount === 0) {
 | 
				
			||||||
 | 
					      dom.alert.appendChild(this.createDom('span', {className: 'passingAlert bar'}, "Passing " + specPluralizedFor(this.passedCount)));
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      showDetails();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dom.banner.appendChild(this.createDom('span', {className: 'duration'}, "finished in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s"));
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return this;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function showDetails() {
 | 
				
			||||||
 | 
					    if (dom.reporter.className.search(/showDetails/) === -1) {
 | 
				
			||||||
 | 
					      dom.reporter.className += " showDetails";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function isUndefined(obj) {
 | 
				
			||||||
 | 
					    return typeof obj === 'undefined';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function isDefined(obj) {
 | 
				
			||||||
 | 
					    return !isUndefined(obj);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function specPluralizedFor(count) {
 | 
				
			||||||
 | 
					    var str = count + " spec";
 | 
				
			||||||
 | 
					    if (count > 1) {
 | 
				
			||||||
 | 
					      str += "s"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return str;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.ReporterView);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporter.SpecView = function(spec, dom, views) {
 | 
				
			||||||
 | 
					  this.spec = spec;
 | 
				
			||||||
 | 
					  this.dom = dom;
 | 
				
			||||||
 | 
					  this.views = views;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.symbol = this.createDom('li', { className: 'pending' });
 | 
				
			||||||
 | 
					  this.dom.symbolSummary.appendChild(this.symbol);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.summary = this.createDom('div', { className: 'specSummary' },
 | 
				
			||||||
 | 
					      this.createDom('a', {
 | 
				
			||||||
 | 
					        className: 'description',
 | 
				
			||||||
 | 
					        href: '?spec=' + encodeURIComponent(this.spec.getFullName()),
 | 
				
			||||||
 | 
					        title: this.spec.getFullName()
 | 
				
			||||||
 | 
					      }, this.spec.description)
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.detail = this.createDom('div', { className: 'specDetail' },
 | 
				
			||||||
 | 
					      this.createDom('a', {
 | 
				
			||||||
 | 
					        className: 'description',
 | 
				
			||||||
 | 
					        href: '?spec=' + encodeURIComponent(this.spec.getFullName()),
 | 
				
			||||||
 | 
					        title: this.spec.getFullName()
 | 
				
			||||||
 | 
					      }, this.spec.getFullName())
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporter.SpecView.prototype.status = function() {
 | 
				
			||||||
 | 
					  return this.getSpecStatus(this.spec);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporter.SpecView.prototype.refresh = function() {
 | 
				
			||||||
 | 
					  this.symbol.className = this.status();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  switch (this.status()) {
 | 
				
			||||||
 | 
					    case 'skipped':
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    case 'passed':
 | 
				
			||||||
 | 
					      this.appendSummaryToSuiteDiv();
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    case 'failed':
 | 
				
			||||||
 | 
					      this.appendSummaryToSuiteDiv();
 | 
				
			||||||
 | 
					      this.appendFailureDetail();
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporter.SpecView.prototype.appendSummaryToSuiteDiv = function() {
 | 
				
			||||||
 | 
					  this.summary.className += ' ' + this.status();
 | 
				
			||||||
 | 
					  this.appendToSummary(this.spec, this.summary);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail = function() {
 | 
				
			||||||
 | 
					  this.detail.className += ' ' + this.status();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var resultItems = this.spec.results().getItems();
 | 
				
			||||||
 | 
					  var messagesDiv = this.createDom('div', { className: 'messages' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (var i = 0; i < resultItems.length; i++) {
 | 
				
			||||||
 | 
					    var result = resultItems[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (result.type == 'log') {
 | 
				
			||||||
 | 
					      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
 | 
				
			||||||
 | 
					    } else if (result.type == 'expect' && result.passed && !result.passed()) {
 | 
				
			||||||
 | 
					      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (result.trace.stack) {
 | 
				
			||||||
 | 
					        messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (messagesDiv.childNodes.length > 0) {
 | 
				
			||||||
 | 
					    this.detail.appendChild(messagesDiv);
 | 
				
			||||||
 | 
					    this.dom.details.appendChild(this.detail);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SpecView);jasmine.HtmlReporter.SuiteView = function(suite, dom, views) {
 | 
				
			||||||
 | 
					  this.suite = suite;
 | 
				
			||||||
 | 
					  this.dom = dom;
 | 
				
			||||||
 | 
					  this.views = views;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.element = this.createDom('div', { className: 'suite' },
 | 
				
			||||||
 | 
					      this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(this.suite.getFullName()) }, this.suite.description)
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.appendToSummary(this.suite, this.element);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporter.SuiteView.prototype.status = function() {
 | 
				
			||||||
 | 
					  return this.getSpecStatus(this.suite);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporter.SuiteView.prototype.refresh = function() {
 | 
				
			||||||
 | 
					  this.element.className += " " + this.status();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SuiteView);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* @deprecated Use jasmine.HtmlReporter instead
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					jasmine.TrivialReporter = function(doc) {
 | 
				
			||||||
 | 
					  this.document = doc || document;
 | 
				
			||||||
 | 
					  this.suiteDivs = {};
 | 
				
			||||||
 | 
					  this.logRunningSpecs = false;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) {
 | 
				
			||||||
 | 
					  var el = document.createElement(type);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (var i = 2; i < arguments.length; i++) {
 | 
				
			||||||
 | 
					    var child = arguments[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (typeof child === 'string') {
 | 
				
			||||||
 | 
					      el.appendChild(document.createTextNode(child));
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      if (child) { el.appendChild(child); }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (var attr in attrs) {
 | 
				
			||||||
 | 
					    if (attr == "className") {
 | 
				
			||||||
 | 
					      el[attr] = attrs[attr];
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      el.setAttribute(attr, attrs[attr]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return el;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) {
 | 
				
			||||||
 | 
					  var showPassed, showSkipped;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.outerDiv = this.createDom('div', { id: 'TrivialReporter', className: 'jasmine_reporter' },
 | 
				
			||||||
 | 
					      this.createDom('div', { className: 'banner' },
 | 
				
			||||||
 | 
					        this.createDom('div', { className: 'logo' },
 | 
				
			||||||
 | 
					            this.createDom('span', { className: 'title' }, "Jasmine"),
 | 
				
			||||||
 | 
					            this.createDom('span', { className: 'version' }, runner.env.versionString())),
 | 
				
			||||||
 | 
					        this.createDom('div', { className: 'options' },
 | 
				
			||||||
 | 
					            "Show ",
 | 
				
			||||||
 | 
					            showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }),
 | 
				
			||||||
 | 
					            this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "),
 | 
				
			||||||
 | 
					            showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }),
 | 
				
			||||||
 | 
					            this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped")
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      this.runnerDiv = this.createDom('div', { className: 'runner running' },
 | 
				
			||||||
 | 
					          this.createDom('a', { className: 'run_spec', href: '?' }, "run all"),
 | 
				
			||||||
 | 
					          this.runnerMessageSpan = this.createDom('span', {}, "Running..."),
 | 
				
			||||||
 | 
					          this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, ""))
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.document.body.appendChild(this.outerDiv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var suites = runner.suites();
 | 
				
			||||||
 | 
					  for (var i = 0; i < suites.length; i++) {
 | 
				
			||||||
 | 
					    var suite = suites[i];
 | 
				
			||||||
 | 
					    var suiteDiv = this.createDom('div', { className: 'suite' },
 | 
				
			||||||
 | 
					        this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"),
 | 
				
			||||||
 | 
					        this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description));
 | 
				
			||||||
 | 
					    this.suiteDivs[suite.id] = suiteDiv;
 | 
				
			||||||
 | 
					    var parentDiv = this.outerDiv;
 | 
				
			||||||
 | 
					    if (suite.parentSuite) {
 | 
				
			||||||
 | 
					      parentDiv = this.suiteDivs[suite.parentSuite.id];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    parentDiv.appendChild(suiteDiv);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.startedAt = new Date();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var self = this;
 | 
				
			||||||
 | 
					  showPassed.onclick = function(evt) {
 | 
				
			||||||
 | 
					    if (showPassed.checked) {
 | 
				
			||||||
 | 
					      self.outerDiv.className += ' show-passed';
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, '');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  showSkipped.onclick = function(evt) {
 | 
				
			||||||
 | 
					    if (showSkipped.checked) {
 | 
				
			||||||
 | 
					      self.outerDiv.className += ' show-skipped';
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, '');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) {
 | 
				
			||||||
 | 
					  var results = runner.results();
 | 
				
			||||||
 | 
					  var className = (results.failedCount > 0) ? "runner failed" : "runner passed";
 | 
				
			||||||
 | 
					  this.runnerDiv.setAttribute("class", className);
 | 
				
			||||||
 | 
					  //do it twice for IE
 | 
				
			||||||
 | 
					  this.runnerDiv.setAttribute("className", className);
 | 
				
			||||||
 | 
					  var specs = runner.specs();
 | 
				
			||||||
 | 
					  var specCount = 0;
 | 
				
			||||||
 | 
					  for (var i = 0; i < specs.length; i++) {
 | 
				
			||||||
 | 
					    if (this.specFilter(specs[i])) {
 | 
				
			||||||
 | 
					      specCount++;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");
 | 
				
			||||||
 | 
					  message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";
 | 
				
			||||||
 | 
					  this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString()));
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) {
 | 
				
			||||||
 | 
					  var results = suite.results();
 | 
				
			||||||
 | 
					  var status = results.passed() ? 'passed' : 'failed';
 | 
				
			||||||
 | 
					  if (results.totalCount === 0) { // todo: change this to check results.skipped
 | 
				
			||||||
 | 
					    status = 'skipped';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  this.suiteDivs[suite.id].className += " " + status;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) {
 | 
				
			||||||
 | 
					  if (this.logRunningSpecs) {
 | 
				
			||||||
 | 
					    this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
 | 
				
			||||||
 | 
					  var results = spec.results();
 | 
				
			||||||
 | 
					  var status = results.passed() ? 'passed' : 'failed';
 | 
				
			||||||
 | 
					  if (results.skipped) {
 | 
				
			||||||
 | 
					    status = 'skipped';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  var specDiv = this.createDom('div', { className: 'spec '  + status },
 | 
				
			||||||
 | 
					      this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"),
 | 
				
			||||||
 | 
					      this.createDom('a', {
 | 
				
			||||||
 | 
					        className: 'description',
 | 
				
			||||||
 | 
					        href: '?spec=' + encodeURIComponent(spec.getFullName()),
 | 
				
			||||||
 | 
					        title: spec.getFullName()
 | 
				
			||||||
 | 
					      }, spec.description));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var resultItems = results.getItems();
 | 
				
			||||||
 | 
					  var messagesDiv = this.createDom('div', { className: 'messages' });
 | 
				
			||||||
 | 
					  for (var i = 0; i < resultItems.length; i++) {
 | 
				
			||||||
 | 
					    var result = resultItems[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (result.type == 'log') {
 | 
				
			||||||
 | 
					      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
 | 
				
			||||||
 | 
					    } else if (result.type == 'expect' && result.passed && !result.passed()) {
 | 
				
			||||||
 | 
					      messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (result.trace.stack) {
 | 
				
			||||||
 | 
					        messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (messagesDiv.childNodes.length > 0) {
 | 
				
			||||||
 | 
					    specDiv.appendChild(messagesDiv);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.suiteDivs[spec.suite.id].appendChild(specDiv);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.TrivialReporter.prototype.log = function() {
 | 
				
			||||||
 | 
					  var console = jasmine.getGlobal().console;
 | 
				
			||||||
 | 
					  if (console && console.log) {
 | 
				
			||||||
 | 
					    if (console.log.apply) {
 | 
				
			||||||
 | 
					      console.log.apply(console, arguments);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.TrivialReporter.prototype.getLocation = function() {
 | 
				
			||||||
 | 
					  return this.document.location;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jasmine.TrivialReporter.prototype.specFilter = function(spec) {
 | 
				
			||||||
 | 
					  var paramMap = {};
 | 
				
			||||||
 | 
					  var params = this.getLocation().search.substring(1).split('&');
 | 
				
			||||||
 | 
					  for (var i = 0; i < params.length; i++) {
 | 
				
			||||||
 | 
					    var p = params[i].split('=');
 | 
				
			||||||
 | 
					    paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (!paramMap.spec) {
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return spec.getFullName().indexOf(paramMap.spec) === 0;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										81
									
								
								external/jasmine/jasmine.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,81 @@
 | 
				
			|||||||
 | 
					body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#HTMLReporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; }
 | 
				
			||||||
 | 
					#HTMLReporter a { text-decoration: none; }
 | 
				
			||||||
 | 
					#HTMLReporter a:hover { text-decoration: underline; }
 | 
				
			||||||
 | 
					#HTMLReporter p, #HTMLReporter h1, #HTMLReporter h2, #HTMLReporter h3, #HTMLReporter h4, #HTMLReporter h5, #HTMLReporter h6 { margin: 0; line-height: 14px; }
 | 
				
			||||||
 | 
					#HTMLReporter .banner, #HTMLReporter .symbolSummary, #HTMLReporter .summary, #HTMLReporter .resultMessage, #HTMLReporter .specDetail .description, #HTMLReporter .alert .bar, #HTMLReporter .stackTrace { padding-left: 9px; padding-right: 9px; }
 | 
				
			||||||
 | 
					#HTMLReporter #jasmine_content { position: fixed; right: 100%; }
 | 
				
			||||||
 | 
					#HTMLReporter .version { color: #aaaaaa; }
 | 
				
			||||||
 | 
					#HTMLReporter .banner { margin-top: 14px; }
 | 
				
			||||||
 | 
					#HTMLReporter .duration { color: #aaaaaa; float: right; }
 | 
				
			||||||
 | 
					#HTMLReporter .symbolSummary { overflow: hidden; *zoom: 1; margin: 14px 0; }
 | 
				
			||||||
 | 
					#HTMLReporter .symbolSummary li { display: block; float: left; height: 7px; width: 14px; margin-bottom: 7px; font-size: 16px; }
 | 
				
			||||||
 | 
					#HTMLReporter .symbolSummary li.passed { font-size: 14px; }
 | 
				
			||||||
 | 
					#HTMLReporter .symbolSummary li.passed:before { color: #5e7d00; content: "\02022"; }
 | 
				
			||||||
 | 
					#HTMLReporter .symbolSummary li.failed { line-height: 9px; }
 | 
				
			||||||
 | 
					#HTMLReporter .symbolSummary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; }
 | 
				
			||||||
 | 
					#HTMLReporter .symbolSummary li.skipped { font-size: 14px; }
 | 
				
			||||||
 | 
					#HTMLReporter .symbolSummary li.skipped:before { color: #bababa; content: "\02022"; }
 | 
				
			||||||
 | 
					#HTMLReporter .symbolSummary li.pending { line-height: 11px; }
 | 
				
			||||||
 | 
					#HTMLReporter .symbolSummary li.pending:before { color: #aaaaaa; content: "-"; }
 | 
				
			||||||
 | 
					#HTMLReporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; }
 | 
				
			||||||
 | 
					#HTMLReporter .runningAlert { background-color: #666666; }
 | 
				
			||||||
 | 
					#HTMLReporter .skippedAlert { background-color: #aaaaaa; }
 | 
				
			||||||
 | 
					#HTMLReporter .skippedAlert:first-child { background-color: #333333; }
 | 
				
			||||||
 | 
					#HTMLReporter .skippedAlert:hover { text-decoration: none; color: white; text-decoration: underline; }
 | 
				
			||||||
 | 
					#HTMLReporter .passingAlert { background-color: #a6b779; }
 | 
				
			||||||
 | 
					#HTMLReporter .passingAlert:first-child { background-color: #5e7d00; }
 | 
				
			||||||
 | 
					#HTMLReporter .failingAlert { background-color: #cf867e; }
 | 
				
			||||||
 | 
					#HTMLReporter .failingAlert:first-child { background-color: #b03911; }
 | 
				
			||||||
 | 
					#HTMLReporter .results { margin-top: 14px; }
 | 
				
			||||||
 | 
					#HTMLReporter #details { display: none; }
 | 
				
			||||||
 | 
					#HTMLReporter .resultsMenu, #HTMLReporter .resultsMenu a { background-color: #fff; color: #333333; }
 | 
				
			||||||
 | 
					#HTMLReporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; }
 | 
				
			||||||
 | 
					#HTMLReporter.showDetails .summaryMenuItem:hover { text-decoration: underline; }
 | 
				
			||||||
 | 
					#HTMLReporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; }
 | 
				
			||||||
 | 
					#HTMLReporter.showDetails .summary { display: none; }
 | 
				
			||||||
 | 
					#HTMLReporter.showDetails #details { display: block; }
 | 
				
			||||||
 | 
					#HTMLReporter .summaryMenuItem { font-weight: bold; text-decoration: underline; }
 | 
				
			||||||
 | 
					#HTMLReporter .summary { margin-top: 14px; }
 | 
				
			||||||
 | 
					#HTMLReporter .summary .suite .suite, #HTMLReporter .summary .specSummary { margin-left: 14px; }
 | 
				
			||||||
 | 
					#HTMLReporter .summary .specSummary.passed a { color: #5e7d00; }
 | 
				
			||||||
 | 
					#HTMLReporter .summary .specSummary.failed a { color: #b03911; }
 | 
				
			||||||
 | 
					#HTMLReporter .description + .suite { margin-top: 0; }
 | 
				
			||||||
 | 
					#HTMLReporter .suite { margin-top: 14px; }
 | 
				
			||||||
 | 
					#HTMLReporter .suite a { color: #333333; }
 | 
				
			||||||
 | 
					#HTMLReporter #details .specDetail { margin-bottom: 28px; }
 | 
				
			||||||
 | 
					#HTMLReporter #details .specDetail .description { display: block; color: white; background-color: #b03911; }
 | 
				
			||||||
 | 
					#HTMLReporter .resultMessage { padding-top: 14px; color: #333333; }
 | 
				
			||||||
 | 
					#HTMLReporter .resultMessage span.result { display: block; }
 | 
				
			||||||
 | 
					#HTMLReporter .stackTrace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#TrivialReporter { padding: 8px 13px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; overflow-y: scroll; background-color: white; font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif; /*.resultMessage {*/ /*white-space: pre;*/ /*}*/ }
 | 
				
			||||||
 | 
					#TrivialReporter a:visited, #TrivialReporter a { color: #303; }
 | 
				
			||||||
 | 
					#TrivialReporter a:hover, #TrivialReporter a:active { color: blue; }
 | 
				
			||||||
 | 
					#TrivialReporter .run_spec { float: right; padding-right: 5px; font-size: .8em; text-decoration: none; }
 | 
				
			||||||
 | 
					#TrivialReporter .banner { color: #303; background-color: #fef; padding: 5px; }
 | 
				
			||||||
 | 
					#TrivialReporter .logo { float: left; font-size: 1.1em; padding-left: 5px; }
 | 
				
			||||||
 | 
					#TrivialReporter .logo .version { font-size: .6em; padding-left: 1em; }
 | 
				
			||||||
 | 
					#TrivialReporter .runner.running { background-color: yellow; }
 | 
				
			||||||
 | 
					#TrivialReporter .options { text-align: right; font-size: .8em; }
 | 
				
			||||||
 | 
					#TrivialReporter .suite { border: 1px outset gray; margin: 5px 0; padding-left: 1em; }
 | 
				
			||||||
 | 
					#TrivialReporter .suite .suite { margin: 5px; }
 | 
				
			||||||
 | 
					#TrivialReporter .suite.passed { background-color: #dfd; }
 | 
				
			||||||
 | 
					#TrivialReporter .suite.failed { background-color: #fdd; }
 | 
				
			||||||
 | 
					#TrivialReporter .spec { margin: 5px; padding-left: 1em; clear: both; }
 | 
				
			||||||
 | 
					#TrivialReporter .spec.failed, #TrivialReporter .spec.passed, #TrivialReporter .spec.skipped { padding-bottom: 5px; border: 1px solid gray; }
 | 
				
			||||||
 | 
					#TrivialReporter .spec.failed { background-color: #fbb; border-color: red; }
 | 
				
			||||||
 | 
					#TrivialReporter .spec.passed { background-color: #bfb; border-color: green; }
 | 
				
			||||||
 | 
					#TrivialReporter .spec.skipped { background-color: #bbb; }
 | 
				
			||||||
 | 
					#TrivialReporter .messages { border-left: 1px dashed gray; padding-left: 1em; padding-right: 1em; }
 | 
				
			||||||
 | 
					#TrivialReporter .passed { background-color: #cfc; display: none; }
 | 
				
			||||||
 | 
					#TrivialReporter .failed { background-color: #fbb; }
 | 
				
			||||||
 | 
					#TrivialReporter .skipped { color: #777; background-color: #eee; display: none; }
 | 
				
			||||||
 | 
					#TrivialReporter .resultMessage span.result { display: block; line-height: 2em; color: black; }
 | 
				
			||||||
 | 
					#TrivialReporter .resultMessage .mismatch { color: black; }
 | 
				
			||||||
 | 
					#TrivialReporter .stackTrace { white-space: pre; font-size: .8em; margin-left: 10px; max-height: 5em; overflow: auto; border: 1px inset red; padding: 1em; background: #eef; }
 | 
				
			||||||
 | 
					#TrivialReporter .finished-at { padding-left: 1em; font-size: .6em; }
 | 
				
			||||||
 | 
					#TrivialReporter.show-passed .passed, #TrivialReporter.show-skipped .skipped { display: block; }
 | 
				
			||||||
 | 
					#TrivialReporter #jasmine_content { position: fixed; right: 100%; }
 | 
				
			||||||
 | 
					#TrivialReporter .runner { border: 1px solid gray; display: block; margin: 5px 0; padding: 2px 0 2px 10px; }
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								external/jasmine/jasmine_favicon.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 905 B  | 
							
								
								
									
										198
									
								
								external/jasmineAdapter/JasmineAdapter.js
									
									
									
									
										vendored
									
									
								
							
							
						
						@ -1,198 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * @fileoverview Jasmine JsTestDriver Adapter.
 | 
					 | 
				
			||||||
 * @author misko@hevery.com (Misko Hevery)
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
(function(window) {
 | 
					 | 
				
			||||||
  var rootDescribes = new Describes(window);
 | 
					 | 
				
			||||||
  var describePath = [];
 | 
					 | 
				
			||||||
  rootDescribes.collectMode();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  var JASMINE_TYPE = 'jasmine test case';
 | 
					 | 
				
			||||||
  TestCase('Jasmine Adapter Tests', null, JASMINE_TYPE);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  var jasminePlugin = {
 | 
					 | 
				
			||||||
      name:'jasmine',
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      getTestRunsConfigurationFor: function(testCaseInfos, expressions, testRunsConfiguration) {
 | 
					 | 
				
			||||||
        for (var i = 0; i < testCaseInfos.length; i++) {
 | 
					 | 
				
			||||||
          if (testCaseInfos[i].getType() == JASMINE_TYPE) {
 | 
					 | 
				
			||||||
            testRunsConfiguration.push(new jstestdriver.TestRunConfiguration(testCaseInfos[i], []));
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      runTestConfiguration: function(testRunConfiguration, onTestDone, onTestRunConfigurationComplete){
 | 
					 | 
				
			||||||
        if (testRunConfiguration.getTestCaseInfo().getType() != JASMINE_TYPE) return false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        var jasmineEnv = jasmine.currentEnv_ = new jasmine.Env();
 | 
					 | 
				
			||||||
        rootDescribes.playback();
 | 
					 | 
				
			||||||
        var specLog = jstestdriver.console.log_ = [];
 | 
					 | 
				
			||||||
        var start;
 | 
					 | 
				
			||||||
        jasmineEnv.specFilter = function(spec) {
 | 
					 | 
				
			||||||
          return rootDescribes.isExclusive(spec);
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        jasmineEnv.reporter = {
 | 
					 | 
				
			||||||
          log: function(str){
 | 
					 | 
				
			||||||
            specLog.push(str);
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          reportRunnerStarting: function(runner) { },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          reportSpecStarting: function(spec) {
 | 
					 | 
				
			||||||
            specLog = jstestdriver.console.log_ = [];
 | 
					 | 
				
			||||||
            start = new Date().getTime();
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          reportSpecResults: function(spec) {
 | 
					 | 
				
			||||||
            var suite = spec.suite;
 | 
					 | 
				
			||||||
            var results = spec.results();
 | 
					 | 
				
			||||||
            if (results.skipped) return;
 | 
					 | 
				
			||||||
            var end = new Date().getTime();
 | 
					 | 
				
			||||||
            var messages = [];
 | 
					 | 
				
			||||||
            var resultItems = results.getItems();
 | 
					 | 
				
			||||||
            var state = 'passed';
 | 
					 | 
				
			||||||
            for ( var i = 0; i < resultItems.length; i++) {
 | 
					 | 
				
			||||||
              if (!resultItems[i].passed()) {
 | 
					 | 
				
			||||||
                state = resultItems[i].message.match(/AssertionError:/) ? 'error' : 'failed';
 | 
					 | 
				
			||||||
                messages.push({
 | 
					 | 
				
			||||||
                  message: resultItems[i].toString(),
 | 
					 | 
				
			||||||
                  name: resultItems[i].trace.name,
 | 
					 | 
				
			||||||
                  stack: formatStack(resultItems[i].trace.stack)
 | 
					 | 
				
			||||||
              });
 | 
					 | 
				
			||||||
              }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            onTestDone(
 | 
					 | 
				
			||||||
              new jstestdriver.TestResult(
 | 
					 | 
				
			||||||
                suite.getFullName(),
 | 
					 | 
				
			||||||
                spec.description,
 | 
					 | 
				
			||||||
                state,
 | 
					 | 
				
			||||||
                jstestdriver.angular.toJson(messages),
 | 
					 | 
				
			||||||
                specLog.join('\n'),
 | 
					 | 
				
			||||||
                end - start));
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          reportSuiteResults: function(suite) {},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          reportRunnerResults: function(runner) {
 | 
					 | 
				
			||||||
            onTestRunConfigurationComplete();
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        jasmineEnv.execute();
 | 
					 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      onTestsFinish: function(){
 | 
					 | 
				
			||||||
        jasmine.currentEnv_ = null;
 | 
					 | 
				
			||||||
        rootDescribes.collectMode();
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
  jstestdriver.pluginRegistrar.register(jasminePlugin);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  function formatStack(stack) {
 | 
					 | 
				
			||||||
    var lines = (stack||'').split(/\r?\n/);
 | 
					 | 
				
			||||||
    var frames = [];
 | 
					 | 
				
			||||||
    for (i = 0; i < lines.length; i++) {
 | 
					 | 
				
			||||||
      if (!lines[i].match(/\/jasmine[\.-]/)) {
 | 
					 | 
				
			||||||
        frames.push(lines[i].replace(/https?:\/\/\w+(:\d+)?\/test\//, '').replace(/^\s*/, '      '));
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return frames.join('\n');
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  function noop(){}
 | 
					 | 
				
			||||||
  function Describes(window){
 | 
					 | 
				
			||||||
    var describes = {};
 | 
					 | 
				
			||||||
    var beforeEachs = {};
 | 
					 | 
				
			||||||
    var afterEachs = {};
 | 
					 | 
				
			||||||
    // Here we store:
 | 
					 | 
				
			||||||
    // 0: everyone runs
 | 
					 | 
				
			||||||
    // 1: run everything under ddescribe
 | 
					 | 
				
			||||||
    // 2: run only iits (ignore ddescribe)
 | 
					 | 
				
			||||||
    var exclusive = 0;
 | 
					 | 
				
			||||||
    var collectMode = true;
 | 
					 | 
				
			||||||
    intercept('describe', describes);
 | 
					 | 
				
			||||||
    intercept('xdescribe', describes);
 | 
					 | 
				
			||||||
    intercept('beforeEach', beforeEachs);
 | 
					 | 
				
			||||||
    intercept('afterEach', afterEachs);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    function intercept(functionName, collection){
 | 
					 | 
				
			||||||
      window[functionName] = function(desc, fn){
 | 
					 | 
				
			||||||
        if (collectMode) {
 | 
					 | 
				
			||||||
          collection[desc] = function(){
 | 
					 | 
				
			||||||
            jasmine.getEnv()[functionName](desc, fn);
 | 
					 | 
				
			||||||
          };
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
          jasmine.getEnv()[functionName](desc, fn);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    window.ddescribe = function(name, fn){
 | 
					 | 
				
			||||||
      if (exclusive < 1) {
 | 
					 | 
				
			||||||
        exclusive = 1; // run ddescribe only
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      window.describe(name, function(){
 | 
					 | 
				
			||||||
        var oldIt = window.it;
 | 
					 | 
				
			||||||
        window.it = function(name, fn){
 | 
					 | 
				
			||||||
          fn.exclusive = 1; // run anything under ddescribe
 | 
					 | 
				
			||||||
          jasmine.getEnv().it(name, fn);
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        try {
 | 
					 | 
				
			||||||
          fn.call(this);
 | 
					 | 
				
			||||||
        } finally {
 | 
					 | 
				
			||||||
          window.it = oldIt;
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    window.iit = function(name, fn){
 | 
					 | 
				
			||||||
      exclusive = fn.exclusive = 2; // run only iits
 | 
					 | 
				
			||||||
      jasmine.getEnv().it(name, fn);
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    this.collectMode = function() {
 | 
					 | 
				
			||||||
      collectMode = true;
 | 
					 | 
				
			||||||
      exclusive = 0; // run everything
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    this.playback = function(){
 | 
					 | 
				
			||||||
      collectMode = false;
 | 
					 | 
				
			||||||
      playback(beforeEachs);
 | 
					 | 
				
			||||||
      playback(afterEachs);
 | 
					 | 
				
			||||||
      playback(describes);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      function playback(set) {
 | 
					 | 
				
			||||||
        for ( var name in set) {
 | 
					 | 
				
			||||||
          set[name]();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    this.isExclusive = function(spec) {
 | 
					 | 
				
			||||||
      if (exclusive) {
 | 
					 | 
				
			||||||
        var blocks = spec.queue.blocks;
 | 
					 | 
				
			||||||
        for ( var i = 0; i < blocks.length; i++) {
 | 
					 | 
				
			||||||
          if (blocks[i].func.exclusive >= exclusive) {
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      return true;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
})(window);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Patch Jasmine for proper stack traces
 | 
					 | 
				
			||||||
jasmine.Spec.prototype.fail = function (e) {
 | 
					 | 
				
			||||||
  var expectationResult = new jasmine.ExpectationResult({
 | 
					 | 
				
			||||||
    passed: false,
 | 
					 | 
				
			||||||
    message: e ? jasmine.util.formatException(e) : 'Exception'
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
  // PATCH
 | 
					 | 
				
			||||||
  if (e) {
 | 
					 | 
				
			||||||
    expectationResult.trace = e;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  this.results_.addResult(expectationResult);
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
							
								
								
									
										23
									
								
								external/jasmineAdapter/MIT.LICENSE
									
									
									
									
										vendored
									
									
								
							
							
						
						@ -1,23 +0,0 @@
 | 
				
			|||||||
Copyright (c) 2010
 | 
					 | 
				
			||||||
  Misko Hevery <misko@hevery.com>
 | 
					 | 
				
			||||||
  Olmo Maldonado <me@ibolmo.com>
 | 
					 | 
				
			||||||
  Christoph Pojer <christoph.pojer@gmail.com>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Permission is hereby granted, free of charge, to any person obtaining
 | 
					 | 
				
			||||||
a copy of this software and associated documentation files (the
 | 
					 | 
				
			||||||
"Software"), to deal in the Software without restriction, including
 | 
					 | 
				
			||||||
without limitation the rights to use, copy, modify, merge, publish,
 | 
					 | 
				
			||||||
distribute, sublicense, and/or sell copies of the Software, and to
 | 
					 | 
				
			||||||
permit persons to whom the Software is furnished to do so, subject to
 | 
					 | 
				
			||||||
the following conditions:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The above copyright notice and this permission notice shall be
 | 
					 | 
				
			||||||
included in all copies or substantial portions of the Software.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 | 
					 | 
				
			||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 | 
					 | 
				
			||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 | 
					 | 
				
			||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 | 
					 | 
				
			||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 | 
					 | 
				
			||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 | 
					 | 
				
			||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
					 | 
				
			||||||
							
								
								
									
										24
									
								
								external/jpgjs/jpg.js
									
									
									
									
										vendored
									
									
								
							
							
						
						@ -637,7 +637,10 @@ var JpegImage = (function jpegImage() {
 | 
				
			|||||||
                  tableData[z] = data[offset++];
 | 
					                  tableData[z] = data[offset++];
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
              } else if ((quantizationTableSpec >> 4) === 1) { //16 bit
 | 
					              } else if ((quantizationTableSpec >> 4) === 1) { //16 bit
 | 
				
			||||||
                  tableData[j] = readUint16();
 | 
					                for (j = 0; j < 64; j++) {
 | 
				
			||||||
 | 
					                  var z = dctZigZag[j];
 | 
				
			||||||
 | 
					                  tableData[z] = readUint16();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
              } else
 | 
					              } else
 | 
				
			||||||
                throw "DQT: invalid table spec";
 | 
					                throw "DQT: invalid table spec";
 | 
				
			||||||
              quantizationTables[quantizationTableSpec & 15] = tableData;
 | 
					              quantizationTables[quantizationTableSpec & 15] = tableData;
 | 
				
			||||||
@ -652,7 +655,8 @@ var JpegImage = (function jpegImage() {
 | 
				
			|||||||
            frame.precision = data[offset++];
 | 
					            frame.precision = data[offset++];
 | 
				
			||||||
            frame.scanLines = readUint16();
 | 
					            frame.scanLines = readUint16();
 | 
				
			||||||
            frame.samplesPerLine = readUint16();
 | 
					            frame.samplesPerLine = readUint16();
 | 
				
			||||||
            frame.components = [];
 | 
					            frame.components = {};
 | 
				
			||||||
 | 
					            frame.componentsOrder = [];
 | 
				
			||||||
            var componentsCount = data[offset++], componentId;
 | 
					            var componentsCount = data[offset++], componentId;
 | 
				
			||||||
            var maxH = 0, maxV = 0;
 | 
					            var maxH = 0, maxV = 0;
 | 
				
			||||||
            for (i = 0; i < componentsCount; i++) {
 | 
					            for (i = 0; i < componentsCount; i++) {
 | 
				
			||||||
@ -660,6 +664,7 @@ var JpegImage = (function jpegImage() {
 | 
				
			|||||||
              var h = data[offset + 1] >> 4;
 | 
					              var h = data[offset + 1] >> 4;
 | 
				
			||||||
              var v = data[offset + 1] & 15;
 | 
					              var v = data[offset + 1] & 15;
 | 
				
			||||||
              var qId = data[offset + 2];
 | 
					              var qId = data[offset + 2];
 | 
				
			||||||
 | 
					              frame.componentsOrder.push(componentId);
 | 
				
			||||||
              frame.components[componentId] = {
 | 
					              frame.components[componentId] = {
 | 
				
			||||||
                h: h,
 | 
					                h: h,
 | 
				
			||||||
                v: v,
 | 
					                v: v,
 | 
				
			||||||
@ -728,14 +733,13 @@ var JpegImage = (function jpegImage() {
 | 
				
			|||||||
      this.jfif = jfif;
 | 
					      this.jfif = jfif;
 | 
				
			||||||
      this.adobe = adobe;
 | 
					      this.adobe = adobe;
 | 
				
			||||||
      this.components = [];
 | 
					      this.components = [];
 | 
				
			||||||
      for (var id in frame.components) {
 | 
					      for (var i = 0; i < frame.componentsOrder.length; i++) {
 | 
				
			||||||
        if (frame.components.hasOwnProperty(id)) {
 | 
					        var component = frame.components[frame.componentsOrder[i]];
 | 
				
			||||||
          this.components.push({
 | 
					        this.components.push({
 | 
				
			||||||
            lines: buildComponentData(frame, frame.components[id]),
 | 
					          lines: buildComponentData(frame, component),
 | 
				
			||||||
            scaleX: frame.components[id].h / frame.maxH,
 | 
					          scaleX: component.h / frame.maxH,
 | 
				
			||||||
            scaleY: frame.components[id].v / frame.maxV
 | 
					          scaleY: component.v / frame.maxV
 | 
				
			||||||
          });
 | 
					        });
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    getData: function getData(width, height) {
 | 
					    getData: function getData(width, height) {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								external/jsTestDriver/JsTestDriver-1.3.3d.jar
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										202
									
								
								external/jsTestDriver/LICENSE-2.0.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						@ -1,202 +0,0 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
                                 Apache License
 | 
					 | 
				
			||||||
                           Version 2.0, January 2004
 | 
					 | 
				
			||||||
                        http://www.apache.org/licenses/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   1. Definitions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      "License" shall mean the terms and conditions for use, reproduction,
 | 
					 | 
				
			||||||
      and distribution as defined by Sections 1 through 9 of this document.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      "Licensor" shall mean the copyright owner or entity authorized by
 | 
					 | 
				
			||||||
      the copyright owner that is granting the License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      "Legal Entity" shall mean the union of the acting entity and all
 | 
					 | 
				
			||||||
      other entities that control, are controlled by, or are under common
 | 
					 | 
				
			||||||
      control with that entity. For the purposes of this definition,
 | 
					 | 
				
			||||||
      "control" means (i) the power, direct or indirect, to cause the
 | 
					 | 
				
			||||||
      direction or management of such entity, whether by contract or
 | 
					 | 
				
			||||||
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
 | 
					 | 
				
			||||||
      outstanding shares, or (iii) beneficial ownership of such entity.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      "You" (or "Your") shall mean an individual or Legal Entity
 | 
					 | 
				
			||||||
      exercising permissions granted by this License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      "Source" form shall mean the preferred form for making modifications,
 | 
					 | 
				
			||||||
      including but not limited to software source code, documentation
 | 
					 | 
				
			||||||
      source, and configuration files.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      "Object" form shall mean any form resulting from mechanical
 | 
					 | 
				
			||||||
      transformation or translation of a Source form, including but
 | 
					 | 
				
			||||||
      not limited to compiled object code, generated documentation,
 | 
					 | 
				
			||||||
      and conversions to other media types.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      "Work" shall mean the work of authorship, whether in Source or
 | 
					 | 
				
			||||||
      Object form, made available under the License, as indicated by a
 | 
					 | 
				
			||||||
      copyright notice that is included in or attached to the work
 | 
					 | 
				
			||||||
      (an example is provided in the Appendix below).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      "Derivative Works" shall mean any work, whether in Source or Object
 | 
					 | 
				
			||||||
      form, that is based on (or derived from) the Work and for which the
 | 
					 | 
				
			||||||
      editorial revisions, annotations, elaborations, or other modifications
 | 
					 | 
				
			||||||
      represent, as a whole, an original work of authorship. For the purposes
 | 
					 | 
				
			||||||
      of this License, Derivative Works shall not include works that remain
 | 
					 | 
				
			||||||
      separable from, or merely link (or bind by name) to the interfaces of,
 | 
					 | 
				
			||||||
      the Work and Derivative Works thereof.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      "Contribution" shall mean any work of authorship, including
 | 
					 | 
				
			||||||
      the original version of the Work and any modifications or additions
 | 
					 | 
				
			||||||
      to that Work or Derivative Works thereof, that is intentionally
 | 
					 | 
				
			||||||
      submitted to Licensor for inclusion in the Work by the copyright owner
 | 
					 | 
				
			||||||
      or by an individual or Legal Entity authorized to submit on behalf of
 | 
					 | 
				
			||||||
      the copyright owner. For the purposes of this definition, "submitted"
 | 
					 | 
				
			||||||
      means any form of electronic, verbal, or written communication sent
 | 
					 | 
				
			||||||
      to the Licensor or its representatives, including but not limited to
 | 
					 | 
				
			||||||
      communication on electronic mailing lists, source code control systems,
 | 
					 | 
				
			||||||
      and issue tracking systems that are managed by, or on behalf of, the
 | 
					 | 
				
			||||||
      Licensor for the purpose of discussing and improving the Work, but
 | 
					 | 
				
			||||||
      excluding communication that is conspicuously marked or otherwise
 | 
					 | 
				
			||||||
      designated in writing by the copyright owner as "Not a Contribution."
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      "Contributor" shall mean Licensor and any individual or Legal Entity
 | 
					 | 
				
			||||||
      on behalf of whom a Contribution has been received by Licensor and
 | 
					 | 
				
			||||||
      subsequently incorporated within the Work.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   2. Grant of Copyright License. Subject to the terms and conditions of
 | 
					 | 
				
			||||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
					 | 
				
			||||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
					 | 
				
			||||||
      copyright license to reproduce, prepare Derivative Works of,
 | 
					 | 
				
			||||||
      publicly display, publicly perform, sublicense, and distribute the
 | 
					 | 
				
			||||||
      Work and such Derivative Works in Source or Object form.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   3. Grant of Patent License. Subject to the terms and conditions of
 | 
					 | 
				
			||||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
					 | 
				
			||||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
					 | 
				
			||||||
      (except as stated in this section) patent license to make, have made,
 | 
					 | 
				
			||||||
      use, offer to sell, sell, import, and otherwise transfer the Work,
 | 
					 | 
				
			||||||
      where such license applies only to those patent claims licensable
 | 
					 | 
				
			||||||
      by such Contributor that are necessarily infringed by their
 | 
					 | 
				
			||||||
      Contribution(s) alone or by combination of their Contribution(s)
 | 
					 | 
				
			||||||
      with the Work to which such Contribution(s) was submitted. If You
 | 
					 | 
				
			||||||
      institute patent litigation against any entity (including a
 | 
					 | 
				
			||||||
      cross-claim or counterclaim in a lawsuit) alleging that the Work
 | 
					 | 
				
			||||||
      or a Contribution incorporated within the Work constitutes direct
 | 
					 | 
				
			||||||
      or contributory patent infringement, then any patent licenses
 | 
					 | 
				
			||||||
      granted to You under this License for that Work shall terminate
 | 
					 | 
				
			||||||
      as of the date such litigation is filed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   4. Redistribution. You may reproduce and distribute copies of the
 | 
					 | 
				
			||||||
      Work or Derivative Works thereof in any medium, with or without
 | 
					 | 
				
			||||||
      modifications, and in Source or Object form, provided that You
 | 
					 | 
				
			||||||
      meet the following conditions:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      (a) You must give any other recipients of the Work or
 | 
					 | 
				
			||||||
          Derivative Works a copy of this License; and
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      (b) You must cause any modified files to carry prominent notices
 | 
					 | 
				
			||||||
          stating that You changed the files; and
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      (c) You must retain, in the Source form of any Derivative Works
 | 
					 | 
				
			||||||
          that You distribute, all copyright, patent, trademark, and
 | 
					 | 
				
			||||||
          attribution notices from the Source form of the Work,
 | 
					 | 
				
			||||||
          excluding those notices that do not pertain to any part of
 | 
					 | 
				
			||||||
          the Derivative Works; and
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      (d) If the Work includes a "NOTICE" text file as part of its
 | 
					 | 
				
			||||||
          distribution, then any Derivative Works that You distribute must
 | 
					 | 
				
			||||||
          include a readable copy of the attribution notices contained
 | 
					 | 
				
			||||||
          within such NOTICE file, excluding those notices that do not
 | 
					 | 
				
			||||||
          pertain to any part of the Derivative Works, in at least one
 | 
					 | 
				
			||||||
          of the following places: within a NOTICE text file distributed
 | 
					 | 
				
			||||||
          as part of the Derivative Works; within the Source form or
 | 
					 | 
				
			||||||
          documentation, if provided along with the Derivative Works; or,
 | 
					 | 
				
			||||||
          within a display generated by the Derivative Works, if and
 | 
					 | 
				
			||||||
          wherever such third-party notices normally appear. The contents
 | 
					 | 
				
			||||||
          of the NOTICE file are for informational purposes only and
 | 
					 | 
				
			||||||
          do not modify the License. You may add Your own attribution
 | 
					 | 
				
			||||||
          notices within Derivative Works that You distribute, alongside
 | 
					 | 
				
			||||||
          or as an addendum to the NOTICE text from the Work, provided
 | 
					 | 
				
			||||||
          that such additional attribution notices cannot be construed
 | 
					 | 
				
			||||||
          as modifying the License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      You may add Your own copyright statement to Your modifications and
 | 
					 | 
				
			||||||
      may provide additional or different license terms and conditions
 | 
					 | 
				
			||||||
      for use, reproduction, or distribution of Your modifications, or
 | 
					 | 
				
			||||||
      for any such Derivative Works as a whole, provided Your use,
 | 
					 | 
				
			||||||
      reproduction, and distribution of the Work otherwise complies with
 | 
					 | 
				
			||||||
      the conditions stated in this License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   5. Submission of Contributions. Unless You explicitly state otherwise,
 | 
					 | 
				
			||||||
      any Contribution intentionally submitted for inclusion in the Work
 | 
					 | 
				
			||||||
      by You to the Licensor shall be under the terms and conditions of
 | 
					 | 
				
			||||||
      this License, without any additional terms or conditions.
 | 
					 | 
				
			||||||
      Notwithstanding the above, nothing herein shall supersede or modify
 | 
					 | 
				
			||||||
      the terms of any separate license agreement you may have executed
 | 
					 | 
				
			||||||
      with Licensor regarding such Contributions.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   6. Trademarks. This License does not grant permission to use the trade
 | 
					 | 
				
			||||||
      names, trademarks, service marks, or product names of the Licensor,
 | 
					 | 
				
			||||||
      except as required for reasonable and customary use in describing the
 | 
					 | 
				
			||||||
      origin of the Work and reproducing the content of the NOTICE file.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   7. Disclaimer of Warranty. Unless required by applicable law or
 | 
					 | 
				
			||||||
      agreed to in writing, Licensor provides the Work (and each
 | 
					 | 
				
			||||||
      Contributor provides its Contributions) on an "AS IS" BASIS,
 | 
					 | 
				
			||||||
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 | 
					 | 
				
			||||||
      implied, including, without limitation, any warranties or conditions
 | 
					 | 
				
			||||||
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
 | 
					 | 
				
			||||||
      PARTICULAR PURPOSE. You are solely responsible for determining the
 | 
					 | 
				
			||||||
      appropriateness of using or redistributing the Work and assume any
 | 
					 | 
				
			||||||
      risks associated with Your exercise of permissions under this License.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   8. Limitation of Liability. In no event and under no legal theory,
 | 
					 | 
				
			||||||
      whether in tort (including negligence), contract, or otherwise,
 | 
					 | 
				
			||||||
      unless required by applicable law (such as deliberate and grossly
 | 
					 | 
				
			||||||
      negligent acts) or agreed to in writing, shall any Contributor be
 | 
					 | 
				
			||||||
      liable to You for damages, including any direct, indirect, special,
 | 
					 | 
				
			||||||
      incidental, or consequential damages of any character arising as a
 | 
					 | 
				
			||||||
      result of this License or out of the use or inability to use the
 | 
					 | 
				
			||||||
      Work (including but not limited to damages for loss of goodwill,
 | 
					 | 
				
			||||||
      work stoppage, computer failure or malfunction, or any and all
 | 
					 | 
				
			||||||
      other commercial damages or losses), even if such Contributor
 | 
					 | 
				
			||||||
      has been advised of the possibility of such damages.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   9. Accepting Warranty or Additional Liability. While redistributing
 | 
					 | 
				
			||||||
      the Work or Derivative Works thereof, You may choose to offer,
 | 
					 | 
				
			||||||
      and charge a fee for, acceptance of support, warranty, indemnity,
 | 
					 | 
				
			||||||
      or other liability obligations and/or rights consistent with this
 | 
					 | 
				
			||||||
      License. However, in accepting such obligations, You may act only
 | 
					 | 
				
			||||||
      on Your own behalf and on Your sole responsibility, not on behalf
 | 
					 | 
				
			||||||
      of any other Contributor, and only if You agree to indemnify,
 | 
					 | 
				
			||||||
      defend, and hold each Contributor harmless for any liability
 | 
					 | 
				
			||||||
      incurred by, or claims asserted against, such Contributor by reason
 | 
					 | 
				
			||||||
      of your accepting any such warranty or additional liability.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   END OF TERMS AND CONDITIONS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   APPENDIX: How to apply the Apache License to your work.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      To apply the Apache License to your work, attach the following
 | 
					 | 
				
			||||||
      boilerplate notice, with the fields enclosed by brackets "[]"
 | 
					 | 
				
			||||||
      replaced with your own identifying information. (Don't include
 | 
					 | 
				
			||||||
      the brackets!)  The text should be enclosed in the appropriate
 | 
					 | 
				
			||||||
      comment syntax for the file format. We also recommend that a
 | 
					 | 
				
			||||||
      file or class name and description of purpose be included on the
 | 
					 | 
				
			||||||
      same "printed page" as the copyright notice for easier
 | 
					 | 
				
			||||||
      identification within third-party archives.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   Copyright [yyyy] [name of copyright owner]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 | 
				
			||||||
   you may not use this file except in compliance with the License.
 | 
					 | 
				
			||||||
   You may obtain a copy of the License at
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       http://www.apache.org/licenses/LICENSE-2.0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   Unless required by applicable law or agreed to in writing, software
 | 
					 | 
				
			||||||
   distributed under the License is distributed on an "AS IS" BASIS,
 | 
					 | 
				
			||||||
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					 | 
				
			||||||
   See the License for the specific language governing permissions and
 | 
					 | 
				
			||||||
   limitations under the License.
 | 
					 | 
				
			||||||
							
								
								
									
										3
									
								
								external/webL10n/README.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					The source code for the library can be found at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  https://github.com/fabi1cazenave/webL10n
 | 
				
			||||||
							
								
								
									
										322
									
								
								external/webL10n/l10n.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,322 @@
 | 
				
			|||||||
 | 
					/*  Copyright (c) 2011-2012 Fabien Cazenave, Mozilla.
 | 
				
			||||||
 | 
					  *
 | 
				
			||||||
 | 
					  * Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
				
			||||||
 | 
					  * of this software and associated documentation files (the "Software"), to
 | 
				
			||||||
 | 
					  * deal in the Software without restriction, including without limitation the
 | 
				
			||||||
 | 
					  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 | 
				
			||||||
 | 
					  * sell copies of the Software, and to permit persons to whom the Software is
 | 
				
			||||||
 | 
					  * furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					  *
 | 
				
			||||||
 | 
					  * The above copyright notice and this permission notice shall be included in
 | 
				
			||||||
 | 
					  * all copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					  *
 | 
				
			||||||
 | 
					  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
				
			||||||
 | 
					  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
				
			||||||
 | 
					  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
				
			||||||
 | 
					  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
				
			||||||
 | 
					  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
				
			||||||
 | 
					  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 | 
				
			||||||
 | 
					  * IN THE SOFTWARE.
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Additional modifications for PDF.js project:
 | 
				
			||||||
 | 
					    - Loading resources from <script type='application/l10n'>;
 | 
				
			||||||
 | 
					    - Disabling language initialization on page loading;
 | 
				
			||||||
 | 
					    - Add fallback argument to the translateString.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(function(window) {
 | 
				
			||||||
 | 
					  var gL10nData = {};
 | 
				
			||||||
 | 
					  var gTextData = '';
 | 
				
			||||||
 | 
					  var gLanguage = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // parser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function evalString(text) {
 | 
				
			||||||
 | 
					    return text.replace(/\\\\/g, '\\')
 | 
				
			||||||
 | 
					               .replace(/\\n/g, '\n')
 | 
				
			||||||
 | 
					               .replace(/\\r/g, '\r')
 | 
				
			||||||
 | 
					               .replace(/\\t/g, '\t')
 | 
				
			||||||
 | 
					               .replace(/\\b/g, '\b')
 | 
				
			||||||
 | 
					               .replace(/\\f/g, '\f')
 | 
				
			||||||
 | 
					               .replace(/\\{/g, '{')
 | 
				
			||||||
 | 
					               .replace(/\\}/g, '}')
 | 
				
			||||||
 | 
					               .replace(/\\"/g, '"')
 | 
				
			||||||
 | 
					               .replace(/\\'/g, "'");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function parseProperties(text, lang) {
 | 
				
			||||||
 | 
					    var reBlank = /^\s*|\s*$/;
 | 
				
			||||||
 | 
					    var reComment = /^\s*#|^\s*$/;
 | 
				
			||||||
 | 
					    var reSection = /^\s*\[(.*)\]\s*$/;
 | 
				
			||||||
 | 
					    var reImport = /^\s*@import\s+url\((.*)\)\s*$/i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // parse the *.properties file into an associative array
 | 
				
			||||||
 | 
					    var currentLang = '*';
 | 
				
			||||||
 | 
					    var supportedLang = [];
 | 
				
			||||||
 | 
					    var skipLang = false;
 | 
				
			||||||
 | 
					    var data = [];
 | 
				
			||||||
 | 
					    var match = '';
 | 
				
			||||||
 | 
					    var entries = text.replace(reBlank, '').split(/[\r\n]+/);
 | 
				
			||||||
 | 
					    for (var i = 0; i < entries.length; i++) {
 | 
				
			||||||
 | 
					      var line = entries[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // comment or blank line?
 | 
				
			||||||
 | 
					      if (reComment.test(line))
 | 
				
			||||||
 | 
					        continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // section start?
 | 
				
			||||||
 | 
					      if (reSection.test(line)) {
 | 
				
			||||||
 | 
					        match = reSection.exec(line);
 | 
				
			||||||
 | 
					        currentLang = match[1];
 | 
				
			||||||
 | 
					        skipLang = (currentLang != lang) && (currentLang != '*') &&
 | 
				
			||||||
 | 
					          (currentLang != lang.substring(0, 2));
 | 
				
			||||||
 | 
					        continue;
 | 
				
			||||||
 | 
					      } else if (skipLang) {
 | 
				
			||||||
 | 
					        continue;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // @import rule?
 | 
				
			||||||
 | 
					      if (reImport.test(line)) {
 | 
				
			||||||
 | 
					        match = reImport.exec(line);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // key-value pair
 | 
				
			||||||
 | 
					      var tmp = line.split('=');
 | 
				
			||||||
 | 
					      if (tmp.length > 1)
 | 
				
			||||||
 | 
					        data[tmp[0]] = evalString(tmp[1]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // find the attribute descriptions, if any
 | 
				
			||||||
 | 
					    for (var key in data) {
 | 
				
			||||||
 | 
					      var id, prop, index = key.lastIndexOf('.');
 | 
				
			||||||
 | 
					      if (index > 0) { // attribute
 | 
				
			||||||
 | 
					        id = key.substring(0, index);
 | 
				
			||||||
 | 
					        prop = key.substr(index + 1);
 | 
				
			||||||
 | 
					      } else { // textContent, could be innerHTML as well
 | 
				
			||||||
 | 
					        id = key;
 | 
				
			||||||
 | 
					        prop = 'textContent';
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if (!gL10nData[id])
 | 
				
			||||||
 | 
					        gL10nData[id] = {};
 | 
				
			||||||
 | 
					      gL10nData[id][prop] = data[key];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function parse(text, lang) {
 | 
				
			||||||
 | 
					    gTextData += text;
 | 
				
			||||||
 | 
					    // we only support *.properties files at the moment
 | 
				
			||||||
 | 
					    return parseProperties(text, lang);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // load and parse the specified resource file
 | 
				
			||||||
 | 
					  function loadResource(href, lang, onSuccess, onFailure) {
 | 
				
			||||||
 | 
					    var xhr = new XMLHttpRequest();
 | 
				
			||||||
 | 
					    xhr.open('GET', href, true);
 | 
				
			||||||
 | 
					    xhr.overrideMimeType('text/plain; charset=utf-8');
 | 
				
			||||||
 | 
					    xhr.onreadystatechange = function() {
 | 
				
			||||||
 | 
					      if (xhr.readyState == 4) {
 | 
				
			||||||
 | 
					        if (xhr.status == 200 || xhr.status == 0) {
 | 
				
			||||||
 | 
					          parse(xhr.responseText, lang);
 | 
				
			||||||
 | 
					          if (onSuccess)
 | 
				
			||||||
 | 
					            onSuccess();
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          if (onFailure)
 | 
				
			||||||
 | 
					            onFailure();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    xhr.send(null);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // load and parse all resources for the specified locale
 | 
				
			||||||
 | 
					  function loadLocale(lang, callback) {
 | 
				
			||||||
 | 
					    clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // check all <link type="application/l10n" href="..." /> nodes
 | 
				
			||||||
 | 
					    // and load the resource files
 | 
				
			||||||
 | 
					    var langLinks = document.querySelectorAll('link[type="application/l10n"]');
 | 
				
			||||||
 | 
					    var langLinksCount = langLinks.length;
 | 
				
			||||||
 | 
					    var langScripts = document.querySelectorAll('script[type="application/l10n"]');
 | 
				
			||||||
 | 
					    var langScriptCount = langScripts.length;
 | 
				
			||||||
 | 
					    var langCount = langLinksCount + langScriptCount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // start the callback when all resources are loaded
 | 
				
			||||||
 | 
					    var onResourceLoaded = null;
 | 
				
			||||||
 | 
					    var gResourceCount = 0;
 | 
				
			||||||
 | 
					    onResourceLoaded = function() {
 | 
				
			||||||
 | 
					      gResourceCount++;
 | 
				
			||||||
 | 
					      if (gResourceCount >= langCount) {
 | 
				
			||||||
 | 
					        // execute the [optional] callback
 | 
				
			||||||
 | 
					        if (callback)
 | 
				
			||||||
 | 
					          callback();
 | 
				
			||||||
 | 
					        // fire a 'localized' DOM event
 | 
				
			||||||
 | 
					        var evtObject = document.createEvent('Event');
 | 
				
			||||||
 | 
					        evtObject.initEvent('localized', false, false);
 | 
				
			||||||
 | 
					        evtObject.language = lang;
 | 
				
			||||||
 | 
					        window.dispatchEvent(evtObject);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // load all resource files
 | 
				
			||||||
 | 
					    function l10nResourceLink(link) {
 | 
				
			||||||
 | 
					      var href = link.href;
 | 
				
			||||||
 | 
					      var type = link.type;
 | 
				
			||||||
 | 
					      this.load = function(lang, callback) {
 | 
				
			||||||
 | 
					        var applied = lang;
 | 
				
			||||||
 | 
					        loadResource(href, lang, callback, function() {
 | 
				
			||||||
 | 
					          console.warn(href + ' not found.');
 | 
				
			||||||
 | 
					          applied = '';
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        return applied; // return lang if found, an empty string if not found
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    gLanguage = lang;
 | 
				
			||||||
 | 
					    for (var i = 0; i < langLinksCount; i++) {
 | 
				
			||||||
 | 
					      var resource = new l10nResourceLink(langLinks[i]);
 | 
				
			||||||
 | 
					      var rv = resource.load(lang, onResourceLoaded);
 | 
				
			||||||
 | 
					      if (rv != lang) // lang not found, used default resource instead
 | 
				
			||||||
 | 
					        gLanguage = '';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    for (var i = 0; i < langScriptCount; i++) {
 | 
				
			||||||
 | 
					      var scriptText = langScripts[i].text;
 | 
				
			||||||
 | 
					      parse(scriptText, lang);
 | 
				
			||||||
 | 
					      onResourceLoaded();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // fetch an l10n object, warn if not found
 | 
				
			||||||
 | 
					  function getL10nData(key) {
 | 
				
			||||||
 | 
					    var data = gL10nData[key];
 | 
				
			||||||
 | 
					    if (!data)
 | 
				
			||||||
 | 
					      console.warn('[l10n] #' + key + ' missing for [' + gLanguage + ']');
 | 
				
			||||||
 | 
					    return data;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // replace {{arguments}} with their values
 | 
				
			||||||
 | 
					  function substArguments(str, args) {
 | 
				
			||||||
 | 
					    var reArgs = /\{\{\s*([a-zA-Z\.]+)\s*\}\}/;
 | 
				
			||||||
 | 
					    var match = reArgs.exec(str);
 | 
				
			||||||
 | 
					    while (match) {
 | 
				
			||||||
 | 
					      if (!match || match.length < 2)
 | 
				
			||||||
 | 
					        return str; // argument key not found
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var arg = match[1];
 | 
				
			||||||
 | 
					      var sub = '';
 | 
				
			||||||
 | 
					      if (arg in args) {
 | 
				
			||||||
 | 
					        sub = args[arg];
 | 
				
			||||||
 | 
					      } else if (arg in gL10nData) {
 | 
				
			||||||
 | 
					        sub = gL10nData[arg].textContent;
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        console.warn('[l10n] could not find argument {{' + arg + '}}');
 | 
				
			||||||
 | 
					        return str;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      str = str.substring(0, match.index) + sub +
 | 
				
			||||||
 | 
					            str.substr(match.index + match[0].length);
 | 
				
			||||||
 | 
					      match = reArgs.exec(str);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return str;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // translate a string
 | 
				
			||||||
 | 
					  function translateString(key, args, fallback) {
 | 
				
			||||||
 | 
					    var data = getL10nData(key);
 | 
				
			||||||
 | 
					    if (!data && fallback)
 | 
				
			||||||
 | 
					      data = {textContent: fallback};
 | 
				
			||||||
 | 
					    if (!data)
 | 
				
			||||||
 | 
					      return '{{' + key + '}}';
 | 
				
			||||||
 | 
					    return substArguments(data.textContent, args);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // translate an HTML element
 | 
				
			||||||
 | 
					  function translateElement(element) {
 | 
				
			||||||
 | 
					    if (!element || !element.dataset)
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // get the related l10n object
 | 
				
			||||||
 | 
					    var key = element.dataset.l10nId;
 | 
				
			||||||
 | 
					    var data = getL10nData(key);
 | 
				
			||||||
 | 
					    if (!data)
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // get arguments (if any)
 | 
				
			||||||
 | 
					    // TODO: more flexible parser?
 | 
				
			||||||
 | 
					    var args;
 | 
				
			||||||
 | 
					    if (element.dataset.l10nArgs) try {
 | 
				
			||||||
 | 
					      args = JSON.parse(element.dataset.l10nArgs);
 | 
				
			||||||
 | 
					    } catch (e) {
 | 
				
			||||||
 | 
					      console.warn('[l10n] could not parse arguments for #' + key + '');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // translate element
 | 
				
			||||||
 | 
					    // TODO: security check?
 | 
				
			||||||
 | 
					    for (var k in data)
 | 
				
			||||||
 | 
					      element[k] = substArguments(data[k], args);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // translate an HTML subtree
 | 
				
			||||||
 | 
					  function translateFragment(element) {
 | 
				
			||||||
 | 
					    element = element || document.querySelector('html');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // check all translatable children (= w/ a `data-l10n-id' attribute)
 | 
				
			||||||
 | 
					    var children = element.querySelectorAll('*[data-l10n-id]');
 | 
				
			||||||
 | 
					    var elementCount = children.length;
 | 
				
			||||||
 | 
					    for (var i = 0; i < elementCount; i++)
 | 
				
			||||||
 | 
					      translateElement(children[i]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // translate element itself if necessary
 | 
				
			||||||
 | 
					    if (element.dataset.l10nId)
 | 
				
			||||||
 | 
					      translateElement(element);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // clear all l10n data
 | 
				
			||||||
 | 
					  function clear() {
 | 
				
			||||||
 | 
					    gL10nData = {};
 | 
				
			||||||
 | 
					    gTextData = '';
 | 
				
			||||||
 | 
					    gLanguage = '';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*
 | 
				
			||||||
 | 
					  // load the default locale on startup
 | 
				
			||||||
 | 
					  window.addEventListener('DOMContentLoaded', function() {
 | 
				
			||||||
 | 
					    var lang = navigator.language;
 | 
				
			||||||
 | 
					    if (navigator.mozSettings) {
 | 
				
			||||||
 | 
					      var req = navigator.mozSettings.getLock().get('language.current');
 | 
				
			||||||
 | 
					      req.onsuccess = function() {
 | 
				
			||||||
 | 
					        loadLocale(req.result['language.current'] || lang, translateFragment);
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      req.onerror = function() {
 | 
				
			||||||
 | 
					        loadLocale(lang, translateFragment);
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      loadLocale(lang, translateFragment);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Public API
 | 
				
			||||||
 | 
					  document.mozL10n = {
 | 
				
			||||||
 | 
					    // get a localized string
 | 
				
			||||||
 | 
					    get: translateString,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // get|set the document language and direction
 | 
				
			||||||
 | 
					    get language() {
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        // get|set the document language (ISO-639-1)
 | 
				
			||||||
 | 
					        get code() { return gLanguage; },
 | 
				
			||||||
 | 
					        set code(lang) { loadLocale(lang, translateFragment); },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // get the direction (ltr|rtl) of the current language
 | 
				
			||||||
 | 
					        get direction() {
 | 
				
			||||||
 | 
					          // http://www.w3.org/International/questions/qa-scripts
 | 
				
			||||||
 | 
					          // Arabic, Hebrew, Farsi, Pashto, Urdu
 | 
				
			||||||
 | 
					          var rtlList = ['ar', 'he', 'fa', 'ps', 'ur'];
 | 
				
			||||||
 | 
					          return (rtlList.indexOf(gLanguage) >= 0) ? 'rtl' : 'ltr';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					})(this);
 | 
				
			||||||
							
								
								
									
										8
									
								
								l10n/ar/metadata.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					    <em:localized>
 | 
				
			||||||
 | 
					      <Description>
 | 
				
			||||||
 | 
					        <em:locale>ar</em:locale>
 | 
				
			||||||
 | 
					        <em:name>عارض PDF</em:name>
 | 
				
			||||||
 | 
					        <em:description>يستخدم HTML5 لعرض ملفات PDF مباشره من خلال Firefox.</em:description>
 | 
				
			||||||
 | 
					      </Description>
 | 
				
			||||||
 | 
					    </em:localized>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										31
									
								
								l10n/ar/viewer.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					bookmark.title=النافذه الحالية (نسخ أو فتح نافذة جديدة)
 | 
				
			||||||
 | 
					previous.title=السابق
 | 
				
			||||||
 | 
					next.title=التالي
 | 
				
			||||||
 | 
					print.title=طباعة
 | 
				
			||||||
 | 
					download.title=تحميل
 | 
				
			||||||
 | 
					zoom_out.title=التصغير
 | 
				
			||||||
 | 
					zoom_in.title=تكبير
 | 
				
			||||||
 | 
					error_more_info=مزيد من المعلومات
 | 
				
			||||||
 | 
					error_less_info=معلومات أقل
 | 
				
			||||||
 | 
					error_close=أغلق
 | 
				
			||||||
 | 
					error_build=PDF.JS بناء: {{build}}
 | 
				
			||||||
 | 
					error_message=رسالة: {{message}}
 | 
				
			||||||
 | 
					error_stack=المكدس: {{stack}}
 | 
				
			||||||
 | 
					error_file=ملف: {{file}}
 | 
				
			||||||
 | 
					error_line=سطر: {{line}}
 | 
				
			||||||
 | 
					page_scale_width=عرض الصفحه
 | 
				
			||||||
 | 
					page_scale_fit=تحجيم الصفحه
 | 
				
			||||||
 | 
					page_scale_auto=تكبير تلقائي
 | 
				
			||||||
 | 
					page_scale_actual=الحجم الفعلي
 | 
				
			||||||
 | 
					toggle_slider.title=تبديل المتزلج
 | 
				
			||||||
 | 
					thumbs.title=اظهار الصور المصغرة
 | 
				
			||||||
 | 
					outline.title=عرض مخطط الوثيقه
 | 
				
			||||||
 | 
					loading=تحميل ... {{percent}}٪ 
 | 
				
			||||||
 | 
					loading_error_indicator=خطأ
 | 
				
			||||||
 | 
					loading_error=حدث خطأ أثناء تحميل وثيقه بي دي اف
 | 
				
			||||||
 | 
					rendering_error=حدث خطأ اثناء رسم الصفحه
 | 
				
			||||||
 | 
					page_label=الصفحة:
 | 
				
			||||||
 | 
					page_of=من {{pageCount}}
 | 
				
			||||||
 | 
					no_outline=لايوجد مخطط
 | 
				
			||||||
 | 
					open_file.title=فتح ملف
 | 
				
			||||||
 | 
					text_annotation_type=[{{type}} ملاحظة]
 | 
				
			||||||
							
								
								
									
										8
									
								
								l10n/da/metadata.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					    <em:localized>
 | 
				
			||||||
 | 
					      <Description>
 | 
				
			||||||
 | 
					        <em:locale>da</em:locale>
 | 
				
			||||||
 | 
					        <em:name>PDF Viewer</em:name>
 | 
				
			||||||
 | 
					        <em:description>Benytter HTML5 til at vise PDF-filer direkte i Firefox.</em:description>
 | 
				
			||||||
 | 
					      </Description>
 | 
				
			||||||
 | 
					    </em:localized>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										31
									
								
								l10n/da/viewer.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					bookmark.title=Aktuel visning (kopier eller åbn i et nyt vindue)
 | 
				
			||||||
 | 
					previous.title=Forrige
 | 
				
			||||||
 | 
					next.title=Næste
 | 
				
			||||||
 | 
					print.title=Udskriv
 | 
				
			||||||
 | 
					download.title=Hent
 | 
				
			||||||
 | 
					zoom_out.title=Zoom ud
 | 
				
			||||||
 | 
					zoom_in.title=Zoom ind
 | 
				
			||||||
 | 
					error_more_info=Mere information
 | 
				
			||||||
 | 
					error_less_info=Mindre information
 | 
				
			||||||
 | 
					error_close=Luk
 | 
				
			||||||
 | 
					error_build=PDF.JS Build: {{build}}
 | 
				
			||||||
 | 
					error_message=Besked: {{message}}
 | 
				
			||||||
 | 
					error_stack=Stak: {{stack}}
 | 
				
			||||||
 | 
					error_file=Fil: {{file}}
 | 
				
			||||||
 | 
					error_line=Linje: {{line}}
 | 
				
			||||||
 | 
					page_scale_width=Sidebredde
 | 
				
			||||||
 | 
					page_scale_fit=Helside
 | 
				
			||||||
 | 
					page_scale_auto=Automatisk zoom
 | 
				
			||||||
 | 
					page_scale_actual=Faktisk størrelse
 | 
				
			||||||
 | 
					toggle_slider.title=Skift Slider
 | 
				
			||||||
 | 
					thumbs.title=Vis thumbnails
 | 
				
			||||||
 | 
					outline.title=Vis dokumentoversigt
 | 
				
			||||||
 | 
					loading=Indlæser... {{percent}}%
 | 
				
			||||||
 | 
					loading_error_indicator=Fejl
 | 
				
			||||||
 | 
					loading_error=Der skete en fejl under indlæsningen af PDF-filen
 | 
				
			||||||
 | 
					rendering_error=Der skete en fejl under gengivelsen af PDF-filen
 | 
				
			||||||
 | 
					page_label=Side:
 | 
				
			||||||
 | 
					page_of=af {{pageCount}}
 | 
				
			||||||
 | 
					no_outline=Ingen dokumentoversigt tilgængelig
 | 
				
			||||||
 | 
					open_file.title=Åbn fil
 | 
				
			||||||
 | 
					text_annotation_type=[{{type}} Kommentar]
 | 
				
			||||||
							
								
								
									
										8
									
								
								l10n/de/metadata.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					    <em:localized>
 | 
				
			||||||
 | 
					      <Description>
 | 
				
			||||||
 | 
					        <em:locale>de</em:locale>
 | 
				
			||||||
 | 
					        <em:name>PDF Viewer</em:name>
 | 
				
			||||||
 | 
					        <em:description>Nutzt HTML5 um PDFs direkt in Firefox anzuzeigen.</em:description>
 | 
				
			||||||
 | 
					      </Description>
 | 
				
			||||||
 | 
					    </em:localized>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										31
									
								
								l10n/de/viewer.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					bookmark.title=Aktuelle Ansicht (Kopieren oder in einem neuen Fenster öffnen)
 | 
				
			||||||
 | 
					previous.title=Zurück
 | 
				
			||||||
 | 
					next.title=Vor
 | 
				
			||||||
 | 
					print.title=Drucken
 | 
				
			||||||
 | 
					download.title=Runterladen
 | 
				
			||||||
 | 
					zoom_out.title=Verkleinern
 | 
				
			||||||
 | 
					zoom_in.title=Vergrößern
 | 
				
			||||||
 | 
					error_more_info=Mehr Info
 | 
				
			||||||
 | 
					error_less_info=Weniger Info
 | 
				
			||||||
 | 
					error_close=Schließen
 | 
				
			||||||
 | 
					error_build=PDF.JS Build: {{build}}
 | 
				
			||||||
 | 
					error_message=Nachricht: {{message}}
 | 
				
			||||||
 | 
					error_stack=Stack: {{stack}}
 | 
				
			||||||
 | 
					error_file=Datei: {{file}}
 | 
				
			||||||
 | 
					error_line=Zeile: {{line}}
 | 
				
			||||||
 | 
					page_scale_width=Seitenbreite
 | 
				
			||||||
 | 
					page_scale_fit=Ganze Seite
 | 
				
			||||||
 | 
					page_scale_auto=Automatisch
 | 
				
			||||||
 | 
					page_scale_actual=Originalgröße
 | 
				
			||||||
 | 
					toggle_slider.title=Thumbnails ein-/ausblenden
 | 
				
			||||||
 | 
					thumbs.title=Zeige Thumbnails
 | 
				
			||||||
 | 
					outline.title=Zeige Inhaltsverzeichnis
 | 
				
			||||||
 | 
					loading=Lade... {{percent}}%
 | 
				
			||||||
 | 
					loading_error_indicator=Fehler
 | 
				
			||||||
 | 
					loading_error=Das PDF konnte nicht geladen werden.
 | 
				
			||||||
 | 
					rendering_error=Das PDF konnte nicht angezeigt werden.
 | 
				
			||||||
 | 
					page_label=Seite:
 | 
				
			||||||
 | 
					page_of=von {{pageCount}}
 | 
				
			||||||
 | 
					no_outline=Kein Inhaltsverzeichnis verfügbar
 | 
				
			||||||
 | 
					open_file.title=Öffne Datei
 | 
				
			||||||
 | 
					text_annotation_type=[{{type}} Annotation]
 | 
				
			||||||
							
								
								
									
										8
									
								
								l10n/en-US/metadata.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					    <em:localized>
 | 
				
			||||||
 | 
					      <Description>
 | 
				
			||||||
 | 
					        <em:locale>en-US</em:locale>
 | 
				
			||||||
 | 
					        <em:name>PDF Viewer</em:name>
 | 
				
			||||||
 | 
					        <em:description>Uses HTML5 to display PDF files directly in Firefox.</em:description>
 | 
				
			||||||
 | 
					      </Description>
 | 
				
			||||||
 | 
					    </em:localized>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										42
									
								
								l10n/en-US/viewer.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					bookmark.title=Current view (copy or open in new window)
 | 
				
			||||||
 | 
					previous.title=Previous Page
 | 
				
			||||||
 | 
					next.title=Next Page
 | 
				
			||||||
 | 
					print.title=Print
 | 
				
			||||||
 | 
					download.title=Download
 | 
				
			||||||
 | 
					zoom_out.title=Zoom Out
 | 
				
			||||||
 | 
					zoom_in.title=Zoom In
 | 
				
			||||||
 | 
					error_more_info=More Information
 | 
				
			||||||
 | 
					error_less_info=Less Information
 | 
				
			||||||
 | 
					error_close=Close
 | 
				
			||||||
 | 
					error_build=PDF.JS Build: {{build}}
 | 
				
			||||||
 | 
					error_message=Message: {{message}}
 | 
				
			||||||
 | 
					error_stack=Stack: {{stack}}
 | 
				
			||||||
 | 
					error_file=File: {{file}}
 | 
				
			||||||
 | 
					error_line=Line: {{line}}
 | 
				
			||||||
 | 
					page_scale_width=Page Width
 | 
				
			||||||
 | 
					page_scale_fit=Page Fit
 | 
				
			||||||
 | 
					page_scale_auto=Automatic Zoom
 | 
				
			||||||
 | 
					page_scale_actual=Actual Size
 | 
				
			||||||
 | 
					toggle_slider.title=Toggle Slider
 | 
				
			||||||
 | 
					thumbs.title=Show Thumbnails
 | 
				
			||||||
 | 
					outline.title=Show Document Outline
 | 
				
			||||||
 | 
					loading=Loading... {{percent}}%
 | 
				
			||||||
 | 
					loading_error_indicator=Error
 | 
				
			||||||
 | 
					loading_error=An error occurred while loading the PDF.
 | 
				
			||||||
 | 
					rendering_error=An error occurred while rendering the page.
 | 
				
			||||||
 | 
					page_label=Page:
 | 
				
			||||||
 | 
					page_of=of {{pageCount}}
 | 
				
			||||||
 | 
					no_outline=No Outline Available
 | 
				
			||||||
 | 
					open_file.title=Open File
 | 
				
			||||||
 | 
					text_annotation_type=[{{type}} Annotation]
 | 
				
			||||||
 | 
					toggle_slider_label=Toggle Slider
 | 
				
			||||||
 | 
					thumbs_label=Thumbnails
 | 
				
			||||||
 | 
					outline_label=Document Outline
 | 
				
			||||||
 | 
					bookmark_label=Current View
 | 
				
			||||||
 | 
					previous_label=Previous
 | 
				
			||||||
 | 
					next_label=Next
 | 
				
			||||||
 | 
					print_label=Print
 | 
				
			||||||
 | 
					download_label=Download
 | 
				
			||||||
 | 
					zoom_out_label=Zoom Out
 | 
				
			||||||
 | 
					zoom_in_label=Zoom In
 | 
				
			||||||
 | 
					zoom.title=Zoom
 | 
				
			||||||
							
								
								
									
										8
									
								
								l10n/it/metadata.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					    <em:localized>
 | 
				
			||||||
 | 
					      <Description>
 | 
				
			||||||
 | 
					        <em:locale>it</em:locale>
 | 
				
			||||||
 | 
					        <em:name>PDF Viewer</em:name>
 | 
				
			||||||
 | 
					        <em:description>Usa HTML5 per visualizzare i file PDF direttamente in Firefox.</em:description>
 | 
				
			||||||
 | 
					      </Description>
 | 
				
			||||||
 | 
					    </em:localized>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										31
									
								
								l10n/it/viewer.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					bookmark.title=Visualizzazione corrente (copia o apri in una nuova finestra)
 | 
				
			||||||
 | 
					previous.title=Precedente
 | 
				
			||||||
 | 
					next.title=Successiva
 | 
				
			||||||
 | 
					print.title=Stampa
 | 
				
			||||||
 | 
					download.title=Download
 | 
				
			||||||
 | 
					zoom_out.title=Riduci Zoom
 | 
				
			||||||
 | 
					zoom_in.title=Aumenta Zoom
 | 
				
			||||||
 | 
					error_more_info=Più Informazioni
 | 
				
			||||||
 | 
					error_less_info=Meno Informazioni
 | 
				
			||||||
 | 
					error_close=Chiudi
 | 
				
			||||||
 | 
					error_build=PDF.JS Build: {{build}}
 | 
				
			||||||
 | 
					error_message=Messaggio: {{message}}
 | 
				
			||||||
 | 
					error_stack=Stack: {{stack}}
 | 
				
			||||||
 | 
					error_file=File: {{file}}
 | 
				
			||||||
 | 
					error_line=Linea: {{line}}
 | 
				
			||||||
 | 
					page_scale_width=Adatta alla Larghezza
 | 
				
			||||||
 | 
					page_scale_fit=Adatta alla Pagina
 | 
				
			||||||
 | 
					page_scale_auto=Zoom Automatico
 | 
				
			||||||
 | 
					page_scale_actual=Dimensione Attuale
 | 
				
			||||||
 | 
					toggle_slider.title=Visualizza Riquadro Laterale
 | 
				
			||||||
 | 
					thumbs.title=Mostra Miniature
 | 
				
			||||||
 | 
					outline.title=Mostra Indice Documento
 | 
				
			||||||
 | 
					loading=Caricamento... {{percent}}%
 | 
				
			||||||
 | 
					loading_error_indicator=Errore
 | 
				
			||||||
 | 
					loading_error=È accaduto un errore durante il caricamento del PDF.
 | 
				
			||||||
 | 
					rendering_error=È accaduto un errore durante il rendering della pagina.
 | 
				
			||||||
 | 
					page_label=Pagina:
 | 
				
			||||||
 | 
					page_of=di {{pageCount}}
 | 
				
			||||||
 | 
					no_outline=Nessun Indice Disponibile
 | 
				
			||||||
 | 
					open_file.title=Apri File
 | 
				
			||||||
 | 
					text_annotation_type=[{{type}} Annotazione]
 | 
				
			||||||
							
								
								
									
										8
									
								
								l10n/pt-BR/metadata.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					    <em:localized>
 | 
				
			||||||
 | 
					      <Description>
 | 
				
			||||||
 | 
					        <em:locale>pt-BR</em:locale>
 | 
				
			||||||
 | 
					        <em:name>PDF Viewer</em:name>
 | 
				
			||||||
 | 
					        <em:description>Aprensenta PDFs no browser usando a tecnologia HTML5.</em:description>
 | 
				
			||||||
 | 
					      </Description>
 | 
				
			||||||
 | 
					    </em:localized>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										31
									
								
								l10n/pt-BR/viewer.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					bookmark.title=Marcar posição atual (bookmark)
 | 
				
			||||||
 | 
					previous.title=Página anterior
 | 
				
			||||||
 | 
					next.title=Próxima página
 | 
				
			||||||
 | 
					print.title=Imprimir
 | 
				
			||||||
 | 
					download.title=Baixar arquivo
 | 
				
			||||||
 | 
					zoom_out.title=Diminuir Zoom
 | 
				
			||||||
 | 
					zoom_in.title=Aumentar Zoom
 | 
				
			||||||
 | 
					error_more_info=Mais informações
 | 
				
			||||||
 | 
					error_less_info=Menos informações
 | 
				
			||||||
 | 
					error_close=Fechar
 | 
				
			||||||
 | 
					error_build=PDF.JS Versão: {{build}}
 | 
				
			||||||
 | 
					error_message=Mensagem: {{message}}
 | 
				
			||||||
 | 
					error_stack=Pilha: {{stack}}
 | 
				
			||||||
 | 
					error_file=Arquivo: {{file}}
 | 
				
			||||||
 | 
					error_line=Linha: {{line}}
 | 
				
			||||||
 | 
					page_scale_width=Largura da página
 | 
				
			||||||
 | 
					page_scale_fit=Página inteira
 | 
				
			||||||
 | 
					page_scale_auto=Zoom automático
 | 
				
			||||||
 | 
					page_scale_actual=Tamanho original
 | 
				
			||||||
 | 
					toggle_slider.title=Abrir/fechar aba lateral
 | 
				
			||||||
 | 
					thumbs.title=Mostrar miniaturas
 | 
				
			||||||
 | 
					outline.title=Mostrar índice
 | 
				
			||||||
 | 
					loading=Carregando... {{percent}}%
 | 
				
			||||||
 | 
					loading_error_indicator=Erro
 | 
				
			||||||
 | 
					loading_error=Um erro ocorreu ao carregar o arquivo.
 | 
				
			||||||
 | 
					rendering_error=Um erro ocorreu ao apresentar a página.
 | 
				
			||||||
 | 
					page_label=Página:
 | 
				
			||||||
 | 
					page_of=de {{pageCount}}
 | 
				
			||||||
 | 
					no_outline=Índice não disponível
 | 
				
			||||||
 | 
					open_file.title=Abrir arquivo
 | 
				
			||||||
 | 
					text_annotation_type=[{{type}} Anotações]
 | 
				
			||||||
							
								
								
									
										8
									
								
								l10n/ru/metadata.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					    <em:localized>
 | 
				
			||||||
 | 
					      <Description>
 | 
				
			||||||
 | 
					        <em:locale>ru</em:locale>
 | 
				
			||||||
 | 
					        <em:name>PDF Viewer</em:name>
 | 
				
			||||||
 | 
					        <em:description>Показывает файлы PDF непосредственно в Firefox используя HTML5.</em:description>
 | 
				
			||||||
 | 
					      </Description>
 | 
				
			||||||
 | 
					    </em:localized>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										42
									
								
								l10n/ru/viewer.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					bookmark.title=Ссылка на текущий вид (скопировать или открыть в новом окне) 
 | 
				
			||||||
 | 
					previous.title=Предыдущая страница
 | 
				
			||||||
 | 
					next.title=Следующая страница
 | 
				
			||||||
 | 
					print.title=Печать
 | 
				
			||||||
 | 
					download.title=Загрузить
 | 
				
			||||||
 | 
					zoom_out.title=Уменьшить
 | 
				
			||||||
 | 
					zoom_in.title=Увеличить
 | 
				
			||||||
 | 
					error_more_info=Детали
 | 
				
			||||||
 | 
					error_less_info=Скрыть детали
 | 
				
			||||||
 | 
					error_close=Закрыть
 | 
				
			||||||
 | 
					error_build=PDF.JS компиляция: {{build}}
 | 
				
			||||||
 | 
					error_message=Сообщение: {{message}}
 | 
				
			||||||
 | 
					error_stack=Стeк: {{stack}}
 | 
				
			||||||
 | 
					error_file=Файл: {{file}}
 | 
				
			||||||
 | 
					error_line=Строка: {{line}}
 | 
				
			||||||
 | 
					page_scale_width=По ширине страницы
 | 
				
			||||||
 | 
					page_scale_fit=Во всю страницу
 | 
				
			||||||
 | 
					page_scale_auto=Авто
 | 
				
			||||||
 | 
					page_scale_actual=Настоящий размер
 | 
				
			||||||
 | 
					toggle_slider.title=Открыть/закрыть вспомогательную панель
 | 
				
			||||||
 | 
					thumbs.title=Показать уменьшенные изображения
 | 
				
			||||||
 | 
					outline.title=Показать содержание документа
 | 
				
			||||||
 | 
					loading=Загрузка... {{percent}}%
 | 
				
			||||||
 | 
					loading_error_indicator=Ошибка
 | 
				
			||||||
 | 
					loading_error=Произошла ошибка во время загрузки PDF.
 | 
				
			||||||
 | 
					rendering_error=Произошла ошибка во время создания страницы.
 | 
				
			||||||
 | 
					page_label=Страница:
 | 
				
			||||||
 | 
					page_of=из {{pageCount}}
 | 
				
			||||||
 | 
					no_outline=Содержание не доступно
 | 
				
			||||||
 | 
					open_file.title=Открыть файл
 | 
				
			||||||
 | 
					text_annotation_type=[Аннотация {{type}}]
 | 
				
			||||||
 | 
					toggle_slider_label=Вспомогательная панель
 | 
				
			||||||
 | 
					thumbs_label=Уменьшенные изображения
 | 
				
			||||||
 | 
					outline_label=Содержание документа
 | 
				
			||||||
 | 
					bookmark_label=Текущий вид
 | 
				
			||||||
 | 
					previous_label=Предыдущая
 | 
				
			||||||
 | 
					next_label=Следующая
 | 
				
			||||||
 | 
					print_label=Печать
 | 
				
			||||||
 | 
					download_label=Загрузить
 | 
				
			||||||
 | 
					zoom_out_label=Уменьшить
 | 
				
			||||||
 | 
					zoom_in_label=Увеличить
 | 
				
			||||||
 | 
					zoom.title=Масштаб
 | 
				
			||||||
							
								
								
									
										8
									
								
								l10n/sr/metadata.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					    <em:localized>
 | 
				
			||||||
 | 
					      <Description>
 | 
				
			||||||
 | 
					        <em:locale>sr</em:locale>
 | 
				
			||||||
 | 
					        <em:name>ПДФ читач</em:name>
 | 
				
			||||||
 | 
					        <em:description>Користи ХТМЛ5 да би приказао ПДФ датотеке директно у Фајерфоксу.</em:description>
 | 
				
			||||||
 | 
					      </Description>
 | 
				
			||||||
 | 
					    </em:localized>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										42
									
								
								l10n/sr/viewer.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					bookmark.title=Тренутни приказ (Умножити или отворити у новом прозору)
 | 
				
			||||||
 | 
					previous.title=Предходна страна
 | 
				
			||||||
 | 
					next.title=Следећа страна
 | 
				
			||||||
 | 
					print.title=Штампај
 | 
				
			||||||
 | 
					download.title=Преузми
 | 
				
			||||||
 | 
					zoom_out.title=Умањи
 | 
				
			||||||
 | 
					zoom_in.title=Увећај
 | 
				
			||||||
 | 
					error_more_info=Више информација
 | 
				
			||||||
 | 
					error_less_info=Мање информација
 | 
				
			||||||
 | 
					error_close=Затвори
 | 
				
			||||||
 | 
					error_build=PDF.JS Build: {{build}}
 | 
				
			||||||
 | 
					error_message=Message: {{message}}
 | 
				
			||||||
 | 
					error_stack=Stack: {{stack}}
 | 
				
			||||||
 | 
					error_file=File: {{file}}
 | 
				
			||||||
 | 
					error_line=Line: {{line}}
 | 
				
			||||||
 | 
					page_scale_width=Ширина странице
 | 
				
			||||||
 | 
					page_scale_fit=Уклопи 
 | 
				
			||||||
 | 
					page_scale_auto=Увећај аутоматски
 | 
				
			||||||
 | 
					page_scale_actual=Стварна величина
 | 
				
			||||||
 | 
					toggle_slider.title=Клизач
 | 
				
			||||||
 | 
					thumbs.title=Прикажи у сличицама
 | 
				
			||||||
 | 
					outline.title=Прикажи у линијама
 | 
				
			||||||
 | 
					loading=Учитавање... {{percent}}%
 | 
				
			||||||
 | 
					loading_error_indicator=Грешка
 | 
				
			||||||
 | 
					loading_error=Дошло је до грешке током учитавања ПДФ-а.
 | 
				
			||||||
 | 
					rendering_error=Дошло је до грешке приликом приказивања стране.
 | 
				
			||||||
 | 
					page_label=Страна:
 | 
				
			||||||
 | 
					page_of=од {{pageCount}}
 | 
				
			||||||
 | 
					no_outline=Нема линија
 | 
				
			||||||
 | 
					open_file.title=Отвори датотеку
 | 
				
			||||||
 | 
					text_annotation_type=[{{type}} Annotation]
 | 
				
			||||||
 | 
					toggle_slider_label=Клизач
 | 
				
			||||||
 | 
					thumbs_label=Сличице
 | 
				
			||||||
 | 
					outline_label=Документи у линијама
 | 
				
			||||||
 | 
					bookmark_label=Тренутни приказ
 | 
				
			||||||
 | 
					previous_label=Предходна
 | 
				
			||||||
 | 
					next_label=Следећа
 | 
				
			||||||
 | 
					print_label=Штампај
 | 
				
			||||||
 | 
					download_label=Преузми
 | 
				
			||||||
 | 
					zoom_out_label=Умањи
 | 
				
			||||||
 | 
					zoom_in_label=Увећај
 | 
				
			||||||
 | 
					zoom.title=Скала
 | 
				
			||||||
							
								
								
									
										42
									
								
								l10n/xx/viewer.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					bookmark.title=<<<_¢ȗггεпţ ṿiεẂ (¢OÞӳ Oг OÞεп iп пεẂ ẂiпÐOẂ)_>>>
 | 
				
			||||||
 | 
					previous.title=<<<_ÞгεṿiOȗ§ Þãģε_>>>
 | 
				
			||||||
 | 
					next.title=<<<_пεӾţ Þãģε_>>>
 | 
				
			||||||
 | 
					print.title=<<<_Þгiпţ_>>>
 | 
				
			||||||
 | 
					download.title=<<<_ÐOẂпḻOãÐ_>>>
 | 
				
			||||||
 | 
					zoom_out.title=<<<_ƩOOм Oȗţ_>>>
 | 
				
			||||||
 | 
					zoom_in.title=<<<_ƩOOм iп_>>>
 | 
				
			||||||
 | 
					error_more_info=<<<_мOгε iп£OгмãţiOп_>>>
 | 
				
			||||||
 | 
					error_less_info=<<<_ḻε§§ iп£OгмãţiOп_>>>
 | 
				
			||||||
 | 
					error_close=<<<_¢ḻO§ε_>>>
 | 
				
			||||||
 | 
					error_build=<<<_ÞУ.ʃ§ ьȗiḻÐ: {{build}}_>>>
 | 
				
			||||||
 | 
					error_message=<<<_мε§§ãģε: {{message}}_>>>
 | 
				
			||||||
 | 
					error_stack=<<<_§ţã¢қ: {{stack}}_>>>
 | 
				
			||||||
 | 
					error_file=<<<_£iḻε: {{file}}_>>>
 | 
				
			||||||
 | 
					error_line=<<<_ḻiпε: {{line}}_>>>
 | 
				
			||||||
 | 
					page_scale_width=<<<_Þãģε ẂiÐţН_>>>
 | 
				
			||||||
 | 
					page_scale_fit=<<<_Þãģε £iţ_>>>
 | 
				
			||||||
 | 
					page_scale_auto=<<<_ãȗţOмãţi¢ ƩOOм_>>>
 | 
				
			||||||
 | 
					page_scale_actual=<<<_ã¢ţȗãḻ §iƩε_>>>
 | 
				
			||||||
 | 
					toggle_slider.title=<<<_ţOģģḻε §ḻiÐεг_>>>
 | 
				
			||||||
 | 
					thumbs.title=<<<_§НOẂ ţНȗмьпãiḻ§_>>>
 | 
				
			||||||
 | 
					outline.title=<<<_§НOẂ ÐO¢ȗмεпţ Oȗţḻiпε_>>>
 | 
				
			||||||
 | 
					loading=<<<_ḻOãÐiпģ... {{percent}}%_>>>
 | 
				
			||||||
 | 
					loading_error_indicator=<<<_εггOг_>>>
 | 
				
			||||||
 | 
					loading_error=<<<_ãп εггOг O¢¢ȗггεÐ ẂНiḻε ḻOãÐiпģ ţНε ÞУ._>>>
 | 
				
			||||||
 | 
					rendering_error=<<<_ãп εггOг O¢¢ȗггεÐ ẂНiḻε гεпÐεгiпģ ţНε Þãģε._>>>
 | 
				
			||||||
 | 
					page_label=Þãģε:
 | 
				
			||||||
 | 
					page_of=<<<_O£ {{pageCount}}_>>>
 | 
				
			||||||
 | 
					no_outline=<<<_пO Oȗţḻiпε ãṿãiḻãьḻε_>>>
 | 
				
			||||||
 | 
					open_file.title=<<<_OÞεп £iḻε_>>>
 | 
				
			||||||
 | 
					text_annotation_type=<<<_[{{type}} ãппOţãţiOп]_>>>
 | 
				
			||||||
 | 
					toggle_slider_label=<<<_ţOģģḻε §ḻiÐεг_>>>
 | 
				
			||||||
 | 
					thumbs_label=<<<_ţНȗмьпãiḻ§_>>>
 | 
				
			||||||
 | 
					outline_label=<<<_ÐO¢ȗмεпţ Oȗţḻiпε_>>>
 | 
				
			||||||
 | 
					bookmark_label=<<<_¢ȗггεпţ ṿiεẂ_>>>
 | 
				
			||||||
 | 
					previous_label=<<<_ÞгεṿiOȗ§_>>>
 | 
				
			||||||
 | 
					next_label=<<<_пεӾţ_>>>
 | 
				
			||||||
 | 
					print_label=<<<_Þгiпţ_>>>
 | 
				
			||||||
 | 
					download_label=<<<_ÐOẂпḻOãÐ_>>>
 | 
				
			||||||
 | 
					zoom_out_label=<<<_ƩOOм Oȗţ_>>>
 | 
				
			||||||
 | 
					zoom_in_label=<<<_ƩOOм iп_>>>
 | 
				
			||||||
 | 
					zoom.title=<<<_ƩOOм_>>>
 | 
				
			||||||
							
								
								
									
										192
									
								
								make.js
									
									
									
									
									
								
							
							
						
						@ -33,6 +33,7 @@ target.all = function() {
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
target.web = function() {
 | 
					target.web = function() {
 | 
				
			||||||
  target.production();
 | 
					  target.production();
 | 
				
			||||||
 | 
					  target.locale();
 | 
				
			||||||
  target.extension();
 | 
					  target.extension();
 | 
				
			||||||
  target.pagesrepo();
 | 
					  target.pagesrepo();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -40,8 +41,13 @@ target.web = function() {
 | 
				
			|||||||
  echo();
 | 
					  echo();
 | 
				
			||||||
  echo('### Creating web site');
 | 
					  echo('### Creating web site');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var GH_PAGES_SRC_FILES = [
 | 
				
			||||||
 | 
					    'web/*',
 | 
				
			||||||
 | 
					    'external/webL10n/l10n.js'
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  cp(BUILD_TARGET, GH_PAGES_DIR + BUILD_TARGET);
 | 
					  cp(BUILD_TARGET, GH_PAGES_DIR + BUILD_TARGET);
 | 
				
			||||||
  cp('-R', 'web/*', GH_PAGES_DIR + '/web');
 | 
					  cp('-R', GH_PAGES_SRC_FILES, GH_PAGES_DIR + '/web');
 | 
				
			||||||
  cp(FIREFOX_BUILD_DIR + '/*.xpi', FIREFOX_BUILD_DIR + '/*.rdf',
 | 
					  cp(FIREFOX_BUILD_DIR + '/*.xpi', FIREFOX_BUILD_DIR + '/*.rdf',
 | 
				
			||||||
    GH_PAGES_DIR + EXTENSION_SRC_DIR + 'firefox/');
 | 
					    GH_PAGES_DIR + EXTENSION_SRC_DIR + 'firefox/');
 | 
				
			||||||
  cp(GH_PAGES_DIR + '/web/index.html.template', GH_PAGES_DIR + '/index.html');
 | 
					  cp(GH_PAGES_DIR + '/web/index.html.template', GH_PAGES_DIR + '/index.html');
 | 
				
			||||||
@ -56,6 +62,52 @@ target.web = function() {
 | 
				
			|||||||
    " and issue 'git commit' to push changes.");
 | 
					    " and issue 'git commit' to push changes.");
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// make locale
 | 
				
			||||||
 | 
					// Creates localized resources for the viewer and extension.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					target.locale = function() {
 | 
				
			||||||
 | 
					  var L10N_PATH = 'l10n';
 | 
				
			||||||
 | 
					  var METADATA_OUTPUT = 'extensions/firefox/metadata.inc';
 | 
				
			||||||
 | 
					  var VIEWER_OUTPUT = 'web/locale.properties';
 | 
				
			||||||
 | 
					  var DEFAULT_LOCALE = 'en-US';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  cd(ROOT_DIR);
 | 
				
			||||||
 | 
					  echo();
 | 
				
			||||||
 | 
					  echo('### Building localization files');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var subfolders = ls(L10N_PATH);
 | 
				
			||||||
 | 
					  subfolders.sort();
 | 
				
			||||||
 | 
					  var metadataContent = '';
 | 
				
			||||||
 | 
					  var viewerOutput = '';
 | 
				
			||||||
 | 
					  for (var i = 0; i < subfolders.length; i++) {
 | 
				
			||||||
 | 
					    var locale = subfolders[i];
 | 
				
			||||||
 | 
					    var path = L10N_PATH + '/' + locale;
 | 
				
			||||||
 | 
					    if (!test('-d', path))
 | 
				
			||||||
 | 
					      continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!/^[a-z][a-z](-[A-Z][A-Z])?$/.test(locale)) {
 | 
				
			||||||
 | 
					      echo('Skipping invalid locale: ' + locale);
 | 
				
			||||||
 | 
					      continue;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (test('-f', path + '/viewer.properties')) {
 | 
				
			||||||
 | 
					      var properties = cat(path + '/viewer.properties');
 | 
				
			||||||
 | 
					      if (locale == DEFAULT_LOCALE)
 | 
				
			||||||
 | 
					        viewerOutput = '[*]\n' + properties + '\n' + viewerOutput;
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        viewerOutput = viewerOutput + '[' + locale + ']\n' + properties + '\n';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (test('-f', path + '/metadata.inc')) {
 | 
				
			||||||
 | 
					      var metadata = cat(path + '/metadata.inc');
 | 
				
			||||||
 | 
					      metadataContent += metadata;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  viewerOutput.to(VIEWER_OUTPUT);
 | 
				
			||||||
 | 
					  metadataContent.to(METADATA_OUTPUT);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// make production
 | 
					// make production
 | 
				
			||||||
// Creates production output (pdf.js, and corresponding changes to web/ files)
 | 
					// Creates production output (pdf.js, and corresponding changes to web/ files)
 | 
				
			||||||
@ -175,6 +227,7 @@ var EXTENSION_WEB_FILES =
 | 
				
			|||||||
       'web/viewer.css',
 | 
					       'web/viewer.css',
 | 
				
			||||||
       'web/viewer.js',
 | 
					       'web/viewer.js',
 | 
				
			||||||
       'web/viewer.html',
 | 
					       'web/viewer.html',
 | 
				
			||||||
 | 
					       'external/webL10n/l10n.js',
 | 
				
			||||||
       'web/viewer-production.html'],
 | 
					       'web/viewer-production.html'],
 | 
				
			||||||
    EXTENSION_BASE_VERSION = 'f0f0418a9c6637981fe1182b9212c2d592774c7d',
 | 
					    EXTENSION_BASE_VERSION = 'f0f0418a9c6637981fe1182b9212c2d592774c7d',
 | 
				
			||||||
    EXTENSION_VERSION_PREFIX = '0.3.',
 | 
					    EXTENSION_VERSION_PREFIX = '0.3.',
 | 
				
			||||||
@ -222,11 +275,10 @@ target.firefox = function() {
 | 
				
			|||||||
      FIREFOX_EXTENSION_FILES_TO_COPY =
 | 
					      FIREFOX_EXTENSION_FILES_TO_COPY =
 | 
				
			||||||
        ['*.js',
 | 
					        ['*.js',
 | 
				
			||||||
         '*.rdf',
 | 
					         '*.rdf',
 | 
				
			||||||
 | 
					         '*.svg',
 | 
				
			||||||
         '*.png',
 | 
					         '*.png',
 | 
				
			||||||
         'install.rdf.in',
 | 
					 | 
				
			||||||
         'README.mozilla',
 | 
					 | 
				
			||||||
         'components',
 | 
					         'components',
 | 
				
			||||||
         '../../LICENSE'];
 | 
					         '../../LICENSE'],
 | 
				
			||||||
      FIREFOX_EXTENSION_FILES =
 | 
					      FIREFOX_EXTENSION_FILES =
 | 
				
			||||||
        ['bootstrap.js',
 | 
					        ['bootstrap.js',
 | 
				
			||||||
         'install.rdf',
 | 
					         'install.rdf',
 | 
				
			||||||
@ -234,17 +286,12 @@ target.firefox = function() {
 | 
				
			|||||||
         'icon64.png',
 | 
					         'icon64.png',
 | 
				
			||||||
         'components',
 | 
					         'components',
 | 
				
			||||||
         'content',
 | 
					         'content',
 | 
				
			||||||
         'LICENSE'];
 | 
					         'LICENSE'],
 | 
				
			||||||
      FIREFOX_MC_EXTENSION_FILES =
 | 
					 | 
				
			||||||
        ['bootstrap.js',
 | 
					 | 
				
			||||||
         'icon.png',
 | 
					 | 
				
			||||||
         'icon64.png',
 | 
					 | 
				
			||||||
         'components',
 | 
					 | 
				
			||||||
         'content',
 | 
					 | 
				
			||||||
         'LICENSE'];
 | 
					 | 
				
			||||||
      FIREFOX_EXTENSION_NAME = 'pdf.js.xpi',
 | 
					      FIREFOX_EXTENSION_NAME = 'pdf.js.xpi',
 | 
				
			||||||
      FIREFOX_AMO_EXTENSION_NAME = 'pdf.js.amo.xpi';
 | 
					      FIREFOX_AMO_EXTENSION_NAME = 'pdf.js.amo.xpi';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var LOCALE_CONTENT = cat('web/locale.properties');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  target.production();
 | 
					  target.production();
 | 
				
			||||||
  target.buildnumber();
 | 
					  target.buildnumber();
 | 
				
			||||||
  cd(ROOT_DIR);
 | 
					  cd(ROOT_DIR);
 | 
				
			||||||
@ -263,6 +310,7 @@ target.firefox = function() {
 | 
				
			|||||||
  // Copy a standalone version of pdf.js inside the content directory
 | 
					  // Copy a standalone version of pdf.js inside the content directory
 | 
				
			||||||
  cp(BUILD_TARGET, FIREFOX_BUILD_CONTENT_DIR + BUILD_DIR);
 | 
					  cp(BUILD_TARGET, FIREFOX_BUILD_CONTENT_DIR + BUILD_DIR);
 | 
				
			||||||
  cp('-R', EXTENSION_WEB_FILES, FIREFOX_BUILD_CONTENT_DIR + '/web');
 | 
					  cp('-R', EXTENSION_WEB_FILES, FIREFOX_BUILD_CONTENT_DIR + '/web');
 | 
				
			||||||
 | 
					  cp('web/locale.properties', FIREFOX_BUILD_CONTENT_DIR + '/web');
 | 
				
			||||||
  rm(FIREFOX_BUILD_CONTENT_DIR + '/web/viewer-production.html');
 | 
					  rm(FIREFOX_BUILD_CONTENT_DIR + '/web/viewer-production.html');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Copy over the firefox extension snippet so we can inline pdf.js in it
 | 
					  // Copy over the firefox extension snippet so we can inline pdf.js in it
 | 
				
			||||||
@ -271,6 +319,7 @@ target.firefox = function() {
 | 
				
			|||||||
  // Modify the viewer so it does all the extension-only stuff.
 | 
					  // Modify the viewer so it does all the extension-only stuff.
 | 
				
			||||||
  cd(FIREFOX_BUILD_CONTENT_DIR + '/web');
 | 
					  cd(FIREFOX_BUILD_CONTENT_DIR + '/web');
 | 
				
			||||||
  sed('-i', /.*PDFJSSCRIPT_INCLUDE_BUNDLE.*\n/, cat(ROOT_DIR + BUILD_TARGET), 'viewer-snippet-firefox-extension.html');
 | 
					  sed('-i', /.*PDFJSSCRIPT_INCLUDE_BUNDLE.*\n/, cat(ROOT_DIR + BUILD_TARGET), 'viewer-snippet-firefox-extension.html');
 | 
				
			||||||
 | 
					  sed('-i', /.*PDFJSSCRIPT_LOCALE_DATA.*\n/, LOCALE_CONTENT, 'viewer-snippet-firefox-extension.html');
 | 
				
			||||||
  sed('-i', /.*PDFJSSCRIPT_REMOVE_CORE.*\n/g, '', 'viewer.html');
 | 
					  sed('-i', /.*PDFJSSCRIPT_REMOVE_CORE.*\n/g, '', 'viewer.html');
 | 
				
			||||||
  sed('-i', /.*PDFJSSCRIPT_REMOVE_FIREFOX_EXTENSION.*\n/g, '', 'viewer.html');
 | 
					  sed('-i', /.*PDFJSSCRIPT_REMOVE_FIREFOX_EXTENSION.*\n/g, '', 'viewer.html');
 | 
				
			||||||
  sed('-i', /.*PDFJSSCRIPT_INCLUDE_FIREFOX_EXTENSION.*\n/, cat('viewer-snippet-firefox-extension.html'), 'viewer.html');
 | 
					  sed('-i', /.*PDFJSSCRIPT_INCLUDE_FIREFOX_EXTENSION.*\n/, cat('viewer-snippet-firefox-extension.html'), 'viewer.html');
 | 
				
			||||||
@ -278,6 +327,8 @@ target.firefox = function() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // We don't need pdf.js anymore since its inlined
 | 
					  // We don't need pdf.js anymore since its inlined
 | 
				
			||||||
  rm('-Rf', FIREFOX_BUILD_CONTENT_DIR + BUILD_DIR);
 | 
					  rm('-Rf', FIREFOX_BUILD_CONTENT_DIR + BUILD_DIR);
 | 
				
			||||||
 | 
					  rm(FIREFOX_BUILD_CONTENT_DIR + '/web/viewer-snippet-firefox-extension.html');
 | 
				
			||||||
 | 
					  rm(FIREFOX_BUILD_CONTENT_DIR + '/web/locale.properties');
 | 
				
			||||||
  // Remove '.DS_Store' and other hidden files
 | 
					  // Remove '.DS_Store' and other hidden files
 | 
				
			||||||
  find(FIREFOX_BUILD_DIR).forEach(function(file) {
 | 
					  find(FIREFOX_BUILD_DIR).forEach(function(file) {
 | 
				
			||||||
    if (file.match(/^\./))
 | 
					    if (file.match(/^\./))
 | 
				
			||||||
@ -287,8 +338,10 @@ target.firefox = function() {
 | 
				
			|||||||
  // Update the build version number
 | 
					  // Update the build version number
 | 
				
			||||||
  sed('-i', /PDFJSSCRIPT_VERSION/, EXTENSION_VERSION, FIREFOX_BUILD_DIR + '/install.rdf');
 | 
					  sed('-i', /PDFJSSCRIPT_VERSION/, EXTENSION_VERSION, FIREFOX_BUILD_DIR + '/install.rdf');
 | 
				
			||||||
  sed('-i', /PDFJSSCRIPT_VERSION/, EXTENSION_VERSION, FIREFOX_BUILD_DIR + '/update.rdf');
 | 
					  sed('-i', /PDFJSSCRIPT_VERSION/, EXTENSION_VERSION, FIREFOX_BUILD_DIR + '/update.rdf');
 | 
				
			||||||
  sed('-i', /PDFJSSCRIPT_VERSION/, EXTENSION_VERSION, FIREFOX_BUILD_DIR + '/install.rdf.in');
 | 
					
 | 
				
			||||||
  sed('-i', /PDFJSSCRIPT_VERSION/, EXTENSION_VERSION, FIREFOX_BUILD_DIR + '/README.mozilla');
 | 
					  // Update localized metadata
 | 
				
			||||||
 | 
					  var localizedMetadata = cat(EXTENSION_SRC_DIR + '/firefox/metadata.inc');
 | 
				
			||||||
 | 
					  sed('-i', /.*PDFJS_LOCALIZED_METADATA.*\n/, localizedMetadata, FIREFOX_BUILD_DIR + '/install.rdf');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Create the xpi
 | 
					  // Create the xpi
 | 
				
			||||||
  cd(FIREFOX_BUILD_DIR);
 | 
					  cd(FIREFOX_BUILD_DIR);
 | 
				
			||||||
@ -302,9 +355,89 @@ target.firefox = function() {
 | 
				
			|||||||
  exec('zip -r ' + FIREFOX_AMO_EXTENSION_NAME + ' ' + FIREFOX_EXTENSION_FILES.join(' '));
 | 
					  exec('zip -r ' + FIREFOX_AMO_EXTENSION_NAME + ' ' + FIREFOX_EXTENSION_FILES.join(' '));
 | 
				
			||||||
  echo('AMO extension created: ' + FIREFOX_AMO_EXTENSION_NAME);
 | 
					  echo('AMO extension created: ' + FIREFOX_AMO_EXTENSION_NAME);
 | 
				
			||||||
  cd(ROOT_DIR);
 | 
					  cd(ROOT_DIR);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// make mozcentral
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					target.mozcentral = function() {
 | 
				
			||||||
 | 
					  cd(ROOT_DIR);
 | 
				
			||||||
 | 
					  echo();
 | 
				
			||||||
 | 
					  echo('### Building mozilla-central extension');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var MOZCENTRAL_DIR = BUILD_DIR + '/mozcentral',
 | 
				
			||||||
 | 
					      MOZCENTRAL_CONTENT_DIR = MOZCENTRAL_DIR + '/content/',
 | 
				
			||||||
 | 
					      MOZCENTRAL_L10N_DIR = MOZCENTRAL_DIR + '/l10n/',
 | 
				
			||||||
 | 
					      FIREFOX_CONTENT_DIR = EXTENSION_SRC_DIR + '/firefox/content/',
 | 
				
			||||||
 | 
					      FIREFOX_EXTENSION_FILES_TO_COPY =
 | 
				
			||||||
 | 
					        ['*.js',
 | 
				
			||||||
 | 
					         '*.svg',
 | 
				
			||||||
 | 
					         '*.png',
 | 
				
			||||||
 | 
					         'install.rdf.in',
 | 
				
			||||||
 | 
					         'README.mozilla',
 | 
				
			||||||
 | 
					         'components',
 | 
				
			||||||
 | 
					         '../../LICENSE'],
 | 
				
			||||||
 | 
					      DEFAULT_LOCALE_FILES =
 | 
				
			||||||
 | 
					        ['l10n/en-US/viewer.properties',
 | 
				
			||||||
 | 
					         'l10n/en-US/metadata.inc'],
 | 
				
			||||||
 | 
					      FIREFOX_MC_EXTENSION_FILES =
 | 
				
			||||||
 | 
					        ['bootstrap.js',
 | 
				
			||||||
 | 
					         'icon.png',
 | 
				
			||||||
 | 
					         'icon64.png',
 | 
				
			||||||
 | 
					         'components',
 | 
				
			||||||
 | 
					         'content',
 | 
				
			||||||
 | 
					         'LICENSE'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  target.production();
 | 
				
			||||||
 | 
					  target.buildnumber();
 | 
				
			||||||
 | 
					  cd(ROOT_DIR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Clear out everything in the firefox extension build directory
 | 
				
			||||||
 | 
					  rm('-rf', MOZCENTRAL_DIR);
 | 
				
			||||||
 | 
					  mkdir('-p', MOZCENTRAL_CONTENT_DIR);
 | 
				
			||||||
 | 
					  mkdir('-p', MOZCENTRAL_L10N_DIR);
 | 
				
			||||||
 | 
					  mkdir('-p', MOZCENTRAL_CONTENT_DIR + BUILD_DIR);
 | 
				
			||||||
 | 
					  mkdir('-p', MOZCENTRAL_CONTENT_DIR + '/web');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Copy extension files
 | 
				
			||||||
 | 
					  cd('extensions/firefox');
 | 
				
			||||||
 | 
					  cp('-R', FIREFOX_EXTENSION_FILES_TO_COPY, ROOT_DIR + MOZCENTRAL_DIR);
 | 
				
			||||||
 | 
					  cd(ROOT_DIR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Copy a standalone version of pdf.js inside the content directory
 | 
				
			||||||
 | 
					  cp(BUILD_TARGET, MOZCENTRAL_CONTENT_DIR + BUILD_DIR);
 | 
				
			||||||
 | 
					  cp('-R', EXTENSION_WEB_FILES, MOZCENTRAL_CONTENT_DIR + '/web');
 | 
				
			||||||
 | 
					  rm(MOZCENTRAL_CONTENT_DIR + '/web/viewer-production.html');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Copy over the firefox extension snippet so we can inline pdf.js in it
 | 
				
			||||||
 | 
					  cp('web/viewer-snippet-firefox-extension.html', MOZCENTRAL_CONTENT_DIR + '/web');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Modify the viewer so it does all the extension-only stuff.
 | 
				
			||||||
 | 
					  cd(MOZCENTRAL_CONTENT_DIR + '/web');
 | 
				
			||||||
 | 
					  sed('-i', /.*PDFJSSCRIPT_INCLUDE_BUNDLE.*\n/, cat(ROOT_DIR + BUILD_TARGET), 'viewer-snippet-firefox-extension.html');
 | 
				
			||||||
 | 
					  sed('-i', /.*PDFJSSCRIPT_REMOVE_CORE.*\n/g, '', 'viewer.html');
 | 
				
			||||||
 | 
					  sed('-i', /.*PDFJSSCRIPT_REMOVE_FIREFOX_EXTENSION.*\n/g, '', 'viewer.html');
 | 
				
			||||||
 | 
					  sed('-i', /.*PDFJSSCRIPT_INCLUDE_FIREFOX_EXTENSION.*\n/, cat('viewer-snippet-firefox-extension.html'), 'viewer.html');
 | 
				
			||||||
 | 
					  cd(ROOT_DIR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // We don't need pdf.js anymore since its inlined
 | 
				
			||||||
 | 
					  rm('-Rf', MOZCENTRAL_CONTENT_DIR + BUILD_DIR);
 | 
				
			||||||
 | 
					  rm(MOZCENTRAL_CONTENT_DIR + '/web/viewer-snippet-firefox-extension.html');
 | 
				
			||||||
 | 
					  // Remove '.DS_Store' and other hidden files
 | 
				
			||||||
 | 
					  find(MOZCENTRAL_DIR).forEach(function(file) {
 | 
				
			||||||
 | 
					    if (file.match(/^\./))
 | 
				
			||||||
 | 
					      rm('-f', file);
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Copy default localization files
 | 
				
			||||||
 | 
					  cp(DEFAULT_LOCALE_FILES, MOZCENTRAL_L10N_DIR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Update the build version number
 | 
				
			||||||
 | 
					  sed('-i', /PDFJSSCRIPT_VERSION/, EXTENSION_VERSION, MOZCENTRAL_DIR + '/install.rdf.in');
 | 
				
			||||||
 | 
					  sed('-i', /PDFJSSCRIPT_VERSION/, EXTENSION_VERSION, MOZCENTRAL_DIR + '/README.mozilla');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // List all files for mozilla-central
 | 
					  // List all files for mozilla-central
 | 
				
			||||||
  cd(FIREFOX_BUILD_DIR);
 | 
					  cd(MOZCENTRAL_DIR);
 | 
				
			||||||
  var extensionFiles = '';
 | 
					  var extensionFiles = '';
 | 
				
			||||||
  find(FIREFOX_MC_EXTENSION_FILES).forEach(function(file){
 | 
					  find(FIREFOX_MC_EXTENSION_FILES).forEach(function(file){
 | 
				
			||||||
    if (test('-f', file))
 | 
					    if (test('-f', file))
 | 
				
			||||||
@ -344,6 +477,7 @@ target.chrome = function() {
 | 
				
			|||||||
  // Copy a standalone version of pdf.js inside the content directory
 | 
					  // Copy a standalone version of pdf.js inside the content directory
 | 
				
			||||||
  cp(BUILD_TARGET, CHROME_BUILD_CONTENT_DIR + BUILD_DIR);
 | 
					  cp(BUILD_TARGET, CHROME_BUILD_CONTENT_DIR + BUILD_DIR);
 | 
				
			||||||
  cp('-R', EXTENSION_WEB_FILES, CHROME_BUILD_CONTENT_DIR + '/web');
 | 
					  cp('-R', EXTENSION_WEB_FILES, CHROME_BUILD_CONTENT_DIR + '/web');
 | 
				
			||||||
 | 
					  cp('web/locale.properties', CHROME_BUILD_CONTENT_DIR + '/web');
 | 
				
			||||||
  mv('-f', CHROME_BUILD_CONTENT_DIR + '/web/viewer-production.html',
 | 
					  mv('-f', CHROME_BUILD_CONTENT_DIR + '/web/viewer-production.html',
 | 
				
			||||||
    CHROME_BUILD_CONTENT_DIR + '/web/viewer.html');
 | 
					    CHROME_BUILD_CONTENT_DIR + '/web/viewer.html');
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -358,8 +492,9 @@ target.chrome = function() {
 | 
				
			|||||||
// make test
 | 
					// make test
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
target.test = function() {
 | 
					target.test = function() {
 | 
				
			||||||
  target.browsertest();
 | 
					  target.unittest({}, function() {
 | 
				
			||||||
  target.unittest();
 | 
					    target.browsertest();
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
@ -367,8 +502,9 @@ target.test = function() {
 | 
				
			|||||||
// (Special tests for the Github bot)
 | 
					// (Special tests for the Github bot)
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
target.bottest = function() {
 | 
					target.bottest = function() {
 | 
				
			||||||
  target.browsertest({noreftest: true});
 | 
					  target.unittest({}, function() {
 | 
				
			||||||
  // target.unittest();
 | 
					    target.browsertest({noreftest: true});
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
@ -398,18 +534,22 @@ target.browsertest = function(options) {
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
// make unittest
 | 
					// make unittest
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
target.unittest = function() {
 | 
					target.unittest = function(options, callback) {
 | 
				
			||||||
  cd(ROOT_DIR);
 | 
					  cd(ROOT_DIR);
 | 
				
			||||||
  echo();
 | 
					  echo();
 | 
				
			||||||
  echo('### Running unit tests');
 | 
					  echo('### Running unit tests');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!which('make')) {
 | 
					  var PDF_BROWSERS = env['PDF_BROWSERS'] || 'resources/browser_manifests/browser_manifest.json';
 | 
				
			||||||
    echo('make not found. Skipping unit tests...');
 | 
					 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  cd('test/unit');
 | 
					  if (!test('-f', 'test/' + PDF_BROWSERS)) {
 | 
				
			||||||
  exec('make', {async: true});
 | 
					    echo('Browser manifest file test/' + PDF_BROWSERS + ' does not exist.');
 | 
				
			||||||
 | 
					    echo('Try copying one of the examples in test/resources/browser_manifests/');
 | 
				
			||||||
 | 
					    exit(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  callback = callback || function() {};
 | 
				
			||||||
 | 
					  cd('test');
 | 
				
			||||||
 | 
					  exec(PYTHON_BIN + ' -u test.py --unitTest --browserManifestFile=' + PDF_BROWSERS,
 | 
				
			||||||
 | 
					    {async: true}, callback);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										32
									
								
								src/api.js
									
									
									
									
									
								
							
							
						
						@ -45,7 +45,7 @@ PDFJS.getDocument = function getDocument(source) {
 | 
				
			|||||||
 * Proxy to a PDFDocument in the worker thread. Also, contains commonly used
 | 
					 * Proxy to a PDFDocument in the worker thread. Also, contains commonly used
 | 
				
			||||||
 * properties that can be read synchronously.
 | 
					 * properties that can be read synchronously.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
var PDFDocumentProxy = (function() {
 | 
					var PDFDocumentProxy = (function PDFDocumentProxyClosure() {
 | 
				
			||||||
  function PDFDocumentProxy(pdfInfo, transport) {
 | 
					  function PDFDocumentProxy(pdfInfo, transport) {
 | 
				
			||||||
    this.pdfInfo = pdfInfo;
 | 
					    this.pdfInfo = pdfInfo;
 | 
				
			||||||
    this.transport = transport;
 | 
					    this.transport = transport;
 | 
				
			||||||
@ -69,14 +69,14 @@ var PDFDocumentProxy = (function() {
 | 
				
			|||||||
     * @return {Promise} A promise that is resolved with a {PDFPageProxy}
 | 
					     * @return {Promise} A promise that is resolved with a {PDFPageProxy}
 | 
				
			||||||
     * object.
 | 
					     * object.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    getPage: function(number) {
 | 
					    getPage: function PDFDocumentProxy_getPage(number) {
 | 
				
			||||||
      return this.transport.getPage(number);
 | 
					      return this.transport.getPage(number);
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @return {Promise} A promise that is resolved with a lookup table for
 | 
					     * @return {Promise} A promise that is resolved with a lookup table for
 | 
				
			||||||
     * mapping named destinations to reference numbers.
 | 
					     * mapping named destinations to reference numbers.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    getDestinations: function() {
 | 
					    getDestinations: function PDFDocumentProxy_getDestinations() {
 | 
				
			||||||
      var promise = new PDFJS.Promise();
 | 
					      var promise = new PDFJS.Promise();
 | 
				
			||||||
      var destinations = this.pdfInfo.destinations;
 | 
					      var destinations = this.pdfInfo.destinations;
 | 
				
			||||||
      promise.resolve(destinations);
 | 
					      promise.resolve(destinations);
 | 
				
			||||||
@ -97,7 +97,7 @@ var PDFDocumentProxy = (function() {
 | 
				
			|||||||
     *  ...
 | 
					     *  ...
 | 
				
			||||||
     * ].
 | 
					     * ].
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    getOutline: function() {
 | 
					    getOutline: function PDFDocumentProxy_getOutline() {
 | 
				
			||||||
      var promise = new PDFJS.Promise();
 | 
					      var promise = new PDFJS.Promise();
 | 
				
			||||||
      var outline = this.pdfInfo.outline;
 | 
					      var outline = this.pdfInfo.outline;
 | 
				
			||||||
      promise.resolve(outline);
 | 
					      promise.resolve(outline);
 | 
				
			||||||
@ -109,7 +109,7 @@ var PDFDocumentProxy = (function() {
 | 
				
			|||||||
     * available in the information dictionary and similarly metadata is a
 | 
					     * available in the information dictionary and similarly metadata is a
 | 
				
			||||||
     * {Metadata} object with information from the metadata section of the PDF.
 | 
					     * {Metadata} object with information from the metadata section of the PDF.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    getMetadata: function() {
 | 
					    getMetadata: function PDFDocumentProxy_getMetadata() {
 | 
				
			||||||
      var promise = new PDFJS.Promise();
 | 
					      var promise = new PDFJS.Promise();
 | 
				
			||||||
      var info = this.pdfInfo.info;
 | 
					      var info = this.pdfInfo.info;
 | 
				
			||||||
      var metadata = this.pdfInfo.metadata;
 | 
					      var metadata = this.pdfInfo.metadata;
 | 
				
			||||||
@ -119,7 +119,7 @@ var PDFDocumentProxy = (function() {
 | 
				
			|||||||
      });
 | 
					      });
 | 
				
			||||||
      return promise;
 | 
					      return promise;
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    destroy: function() {
 | 
					    destroy: function PDFDocumentProxy_destroy() {
 | 
				
			||||||
      this.transport.destroy();
 | 
					      this.transport.destroy();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
@ -169,7 +169,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
 | 
				
			|||||||
     * @return {PageViewport} Contains 'width' and 'height' properties along
 | 
					     * @return {PageViewport} Contains 'width' and 'height' properties along
 | 
				
			||||||
     * with transforms required for rendering.
 | 
					     * with transforms required for rendering.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    getViewport: function(scale, rotate) {
 | 
					    getViewport: function PDFPageProxy_getViewport(scale, rotate) {
 | 
				
			||||||
      if (arguments.length < 2)
 | 
					      if (arguments.length < 2)
 | 
				
			||||||
        rotate = this.rotate;
 | 
					        rotate = this.rotate;
 | 
				
			||||||
      return new PDFJS.PageViewport(this.view, scale, rotate, 0, 0);
 | 
					      return new PDFJS.PageViewport(this.view, scale, rotate, 0, 0);
 | 
				
			||||||
@ -178,7 +178,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
 | 
				
			|||||||
     * @return {Promise} A promise that is resolved with an {array} of the
 | 
					     * @return {Promise} A promise that is resolved with an {array} of the
 | 
				
			||||||
     * annotation objects.
 | 
					     * annotation objects.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    getAnnotations: function() {
 | 
					    getAnnotations: function PDFPageProxy_getAnnotations() {
 | 
				
			||||||
      if (this.annotationsPromise)
 | 
					      if (this.annotationsPromise)
 | 
				
			||||||
        return this.annotationsPromise;
 | 
					        return this.annotationsPromise;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -198,7 +198,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
 | 
				
			|||||||
     * @return {Promise} A promise that is resolved when the page finishes
 | 
					     * @return {Promise} A promise that is resolved when the page finishes
 | 
				
			||||||
     * rendering.
 | 
					     * rendering.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    render: function(params) {
 | 
					    render: function PDFPageProxy_render(params) {
 | 
				
			||||||
      this.renderInProgress = true;
 | 
					      this.renderInProgress = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      var promise = new Promise();
 | 
					      var promise = new Promise();
 | 
				
			||||||
@ -257,8 +257,8 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
 | 
				
			|||||||
     * For internal use only.
 | 
					     * For internal use only.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    startRenderingFromOperatorList:
 | 
					    startRenderingFromOperatorList:
 | 
				
			||||||
      function PDFPageWrapper_startRenderingFromOperatorList(operatorList,
 | 
					      function PDFPageProxy_startRenderingFromOperatorList(operatorList,
 | 
				
			||||||
                                                             fonts) {
 | 
					                                                           fonts) {
 | 
				
			||||||
      var self = this;
 | 
					      var self = this;
 | 
				
			||||||
      this.operatorList = operatorList;
 | 
					      this.operatorList = operatorList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -279,7 +279,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * For internal use only.
 | 
					     * For internal use only.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    ensureFonts: function PDFPageWrapper_ensureFonts(fonts, callback) {
 | 
					    ensureFonts: function PDFPageProxy_ensureFonts(fonts, callback) {
 | 
				
			||||||
      this.stats.time('Font Loading');
 | 
					      this.stats.time('Font Loading');
 | 
				
			||||||
      // Convert the font names to the corresponding font obj.
 | 
					      // Convert the font names to the corresponding font obj.
 | 
				
			||||||
      for (var i = 0, ii = fonts.length; i < ii; i++) {
 | 
					      for (var i = 0, ii = fonts.length; i < ii; i++) {
 | 
				
			||||||
@ -299,7 +299,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * For internal use only.
 | 
					     * For internal use only.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    display: function PDFPageWrapper_display(gfx, viewport, callback) {
 | 
					    display: function PDFPageProxy_display(gfx, viewport, callback) {
 | 
				
			||||||
      var stats = this.stats;
 | 
					      var stats = this.stats;
 | 
				
			||||||
      stats.time('Rendering');
 | 
					      stats.time('Rendering');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -332,7 +332,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
 | 
				
			|||||||
     * @return {Promise} That is resolved with the a {string} that is the text
 | 
					     * @return {Promise} That is resolved with the a {string} that is the text
 | 
				
			||||||
     * content from the page.
 | 
					     * content from the page.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    getTextContent: function() {
 | 
					    getTextContent: function PDFPageProxy_getTextContent() {
 | 
				
			||||||
      var promise = new PDFJS.Promise();
 | 
					      var promise = new PDFJS.Promise();
 | 
				
			||||||
      this.transport.messageHandler.send('GetTextContent', {
 | 
					      this.transport.messageHandler.send('GetTextContent', {
 | 
				
			||||||
          pageIndex: this.pageNumber - 1
 | 
					          pageIndex: this.pageNumber - 1
 | 
				
			||||||
@ -346,7 +346,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Stub for future feature.
 | 
					     * Stub for future feature.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    getOperationList: function() {
 | 
					    getOperationList: function PDFPageProxy_getOperationList() {
 | 
				
			||||||
      var promise = new PDFJS.Promise();
 | 
					      var promise = new PDFJS.Promise();
 | 
				
			||||||
      var operationList = { // not implemented
 | 
					      var operationList = { // not implemented
 | 
				
			||||||
        dependencyFontsID: null,
 | 
					        dependencyFontsID: null,
 | 
				
			||||||
@ -358,7 +358,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Destroys resources allocated by the page.
 | 
					     * Destroys resources allocated by the page.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    destroy: function() {
 | 
					    destroy: function PDFPageProxy_destroy() {
 | 
				
			||||||
      this.destroyed = true;
 | 
					      this.destroyed = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (!this.renderInProgress) {
 | 
					      if (!this.renderInProgress) {
 | 
				
			||||||
 | 
				
			|||||||
@ -230,6 +230,7 @@ var Page = (function PageClosure() {
 | 
				
			|||||||
          case 'http':
 | 
					          case 'http':
 | 
				
			||||||
          case 'https':
 | 
					          case 'https':
 | 
				
			||||||
          case 'ftp':
 | 
					          case 'ftp':
 | 
				
			||||||
 | 
					          case 'mailto':
 | 
				
			||||||
            return true;
 | 
					            return true;
 | 
				
			||||||
          default:
 | 
					          default:
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
 | 
				
			|||||||
@ -557,7 +557,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
 | 
				
			|||||||
      var toUnicode = dict.get('ToUnicode') ||
 | 
					      var toUnicode = dict.get('ToUnicode') ||
 | 
				
			||||||
        baseDict.get('ToUnicode');
 | 
					        baseDict.get('ToUnicode');
 | 
				
			||||||
      if (toUnicode)
 | 
					      if (toUnicode)
 | 
				
			||||||
        properties.toUnicode = this.readToUnicode(toUnicode, xref);
 | 
					        properties.toUnicode = this.readToUnicode(toUnicode, xref, properties);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (properties.composite) {
 | 
					      if (properties.composite) {
 | 
				
			||||||
        // CIDSystemInfo helps to match CID to glyphs
 | 
					        // CIDSystemInfo helps to match CID to glyphs
 | 
				
			||||||
@ -613,7 +613,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
 | 
				
			|||||||
      properties.hasEncoding = hasEncoding;
 | 
					      properties.hasEncoding = hasEncoding;
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    readToUnicode: function PartialEvaluator_readToUnicode(toUnicode, xref) {
 | 
					    readToUnicode: function PartialEvaluator_readToUnicode(toUnicode, xref,
 | 
				
			||||||
 | 
					                                                           properties) {
 | 
				
			||||||
      var cmapObj = toUnicode;
 | 
					      var cmapObj = toUnicode;
 | 
				
			||||||
      var charToUnicode = [];
 | 
					      var charToUnicode = [];
 | 
				
			||||||
      if (isName(cmapObj)) {
 | 
					      if (isName(cmapObj)) {
 | 
				
			||||||
@ -702,6 +703,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
          } else if (octet == 0x3E) {
 | 
					          } else if (octet == 0x3E) {
 | 
				
			||||||
            if (token.length) {
 | 
					            if (token.length) {
 | 
				
			||||||
 | 
					              // XXX guessing chars size by checking number size in the CMap
 | 
				
			||||||
 | 
					              if (token.length <= 2 && properties.composite)
 | 
				
			||||||
 | 
					                properties.wideChars = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              if (token.length <= 4) {
 | 
					              if (token.length <= 4) {
 | 
				
			||||||
                // parsing hex number
 | 
					                // parsing hex number
 | 
				
			||||||
                tokens.push(parseInt(token, 16));
 | 
					                tokens.push(parseInt(token, 16));
 | 
				
			||||||
@ -919,6 +924,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
 | 
				
			|||||||
        length1: length1,
 | 
					        length1: length1,
 | 
				
			||||||
        length2: length2,
 | 
					        length2: length2,
 | 
				
			||||||
        composite: composite,
 | 
					        composite: composite,
 | 
				
			||||||
 | 
					        wideChars: composite,
 | 
				
			||||||
        fixedPitch: false,
 | 
					        fixedPitch: false,
 | 
				
			||||||
        fontMatrix: dict.get('FontMatrix') || IDENTITY_MATRIX,
 | 
					        fontMatrix: dict.get('FontMatrix') || IDENTITY_MATRIX,
 | 
				
			||||||
        firstChar: firstChar || 0,
 | 
					        firstChar: firstChar || 0,
 | 
				
			||||||
 | 
				
			|||||||
@ -1519,6 +1519,7 @@ var Font = (function FontClosure() {
 | 
				
			|||||||
    this.widths = properties.widths;
 | 
					    this.widths = properties.widths;
 | 
				
			||||||
    this.defaultWidth = properties.defaultWidth;
 | 
					    this.defaultWidth = properties.defaultWidth;
 | 
				
			||||||
    this.composite = properties.composite;
 | 
					    this.composite = properties.composite;
 | 
				
			||||||
 | 
					    this.wideChars = properties.wideChars;
 | 
				
			||||||
    this.hasEncoding = properties.hasEncoding;
 | 
					    this.hasEncoding = properties.hasEncoding;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.fontMatrix = properties.fontMatrix;
 | 
					    this.fontMatrix = properties.fontMatrix;
 | 
				
			||||||
@ -3251,7 +3252,7 @@ var Font = (function FontClosure() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      glyphs = [];
 | 
					      glyphs = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (this.composite) {
 | 
					      if (this.wideChars) {
 | 
				
			||||||
        // composite fonts have multi-byte strings convert the string from
 | 
					        // composite fonts have multi-byte strings convert the string from
 | 
				
			||||||
        // single-byte to multi-byte
 | 
					        // single-byte to multi-byte
 | 
				
			||||||
        // XXX assuming CIDFonts are two-byte - later need to extract the
 | 
					        // XXX assuming CIDFonts are two-byte - later need to extract the
 | 
				
			||||||
 | 
				
			|||||||
@ -4,8 +4,28 @@
 | 
				
			|||||||
'use strict';
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var Metadata = PDFJS.Metadata = (function MetadataClosure() {
 | 
					var Metadata = PDFJS.Metadata = (function MetadataClosure() {
 | 
				
			||||||
 | 
					  function fixMetadata(meta) {
 | 
				
			||||||
 | 
					    return meta.replace(/>\\376\\377([^<]+)/g, function(all, codes) {
 | 
				
			||||||
 | 
					      var bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g,
 | 
				
			||||||
 | 
					                                function(code, d1, d2, d3) {
 | 
				
			||||||
 | 
					        return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      var chars = '';
 | 
				
			||||||
 | 
					      for (var i = 0; i < bytes.length; i += 2) {
 | 
				
			||||||
 | 
					        var code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);
 | 
				
			||||||
 | 
					        chars += code >= 32 && code < 127 && code != 60 && code != 62 &&
 | 
				
			||||||
 | 
					          code != 38 && false ? String.fromCharCode(code) :
 | 
				
			||||||
 | 
					          '&#x' + (0x10000 + code).toString(16).substring(1) + ';';
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return '>' + chars;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function Metadata(meta) {
 | 
					  function Metadata(meta) {
 | 
				
			||||||
    if (typeof meta === 'string') {
 | 
					    if (typeof meta === 'string') {
 | 
				
			||||||
 | 
					      // Ghostscript produces invalid metadata
 | 
				
			||||||
 | 
					      meta = fixMetadata(meta);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      var parser = new DOMParser();
 | 
					      var parser = new DOMParser();
 | 
				
			||||||
      meta = parser.parseFromString(meta, 'application/xml');
 | 
					      meta = parser.parseFromString(meta, 'application/xml');
 | 
				
			||||||
    } else if (!(meta instanceof Document)) {
 | 
					    } else if (!(meta instanceof Document)) {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										20
									
								
								src/obj.js
									
									
									
									
									
								
							
							
						
						@ -39,7 +39,7 @@ var Dict = (function DictClosure() {
 | 
				
			|||||||
    // Map should only be used internally, use functions below to access.
 | 
					    // Map should only be used internally, use functions below to access.
 | 
				
			||||||
    var map = Object.create(null);
 | 
					    var map = Object.create(null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.assignXref = function Dict_assingXref(newXref) {
 | 
					    this.assignXref = function Dict_assignXref(newXref) {
 | 
				
			||||||
      xref = newXref;
 | 
					      xref = newXref;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -364,9 +364,8 @@ var XRef = (function XRefClosure() {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // Sanity check: as per spec, first object must have these properties
 | 
					      // Sanity check: as per spec, first object must be free
 | 
				
			||||||
      if (this.entries[0] &&
 | 
					      if (this.entries[0] && !this.entries[0].free)
 | 
				
			||||||
          !(this.entries[0].gen === 65535 && this.entries[0].free))
 | 
					 | 
				
			||||||
        error('Invalid XRef table: unexpected first object');
 | 
					        error('Invalid XRef table: unexpected first object');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // Sanity check
 | 
					      // Sanity check
 | 
				
			||||||
@ -525,7 +524,7 @@ var XRef = (function XRefClosure() {
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
      // reading XRef streams
 | 
					      // reading XRef streams
 | 
				
			||||||
      for (var i = 0, ii = xrefStms.length; i < ii; ++i) {
 | 
					      for (var i = 0, ii = xrefStms.length; i < ii; ++i) {
 | 
				
			||||||
          this.readXRef(xrefStms[i]);
 | 
					          this.readXRef(xrefStms[i], true);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      // finding main trailer
 | 
					      // finding main trailer
 | 
				
			||||||
      var dict;
 | 
					      var dict;
 | 
				
			||||||
@ -548,7 +547,7 @@ var XRef = (function XRefClosure() {
 | 
				
			|||||||
      // nothing helps
 | 
					      // nothing helps
 | 
				
			||||||
      error('Invalid PDF structure');
 | 
					      error('Invalid PDF structure');
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    readXRef: function XRef_readXRef(startXRef) {
 | 
					    readXRef: function XRef_readXRef(startXRef, recoveryMode) {
 | 
				
			||||||
      var stream = this.stream;
 | 
					      var stream = this.stream;
 | 
				
			||||||
      stream.pos = startXRef;
 | 
					      stream.pos = startXRef;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -581,16 +580,18 @@ var XRef = (function XRefClosure() {
 | 
				
			|||||||
            error('Invalid XRef stream');
 | 
					            error('Invalid XRef stream');
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          dict = this.readXRefStream(obj);
 | 
					          dict = this.readXRefStream(obj);
 | 
				
			||||||
 | 
					          if (!dict)
 | 
				
			||||||
 | 
					            error('Failed to read XRef stream');
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Recursively get previous dictionary, if any
 | 
					        // Recursively get previous dictionary, if any
 | 
				
			||||||
        obj = dict.get('Prev');
 | 
					        obj = dict.get('Prev');
 | 
				
			||||||
        if (isInt(obj))
 | 
					        if (isInt(obj))
 | 
				
			||||||
          this.readXRef(obj);
 | 
					          this.readXRef(obj, recoveryMode);
 | 
				
			||||||
        else if (isRef(obj)) {
 | 
					        else if (isRef(obj)) {
 | 
				
			||||||
          // The spec says Prev must not be a reference, i.e. "/Prev NNN"
 | 
					          // The spec says Prev must not be a reference, i.e. "/Prev NNN"
 | 
				
			||||||
          // This is a fallback for non-compliant PDFs, i.e. "/Prev NNN 0 R"
 | 
					          // This is a fallback for non-compliant PDFs, i.e. "/Prev NNN 0 R"
 | 
				
			||||||
          this.readXRef(obj.num);
 | 
					          this.readXRef(obj.num, recoveryMode);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return dict;
 | 
					        return dict;
 | 
				
			||||||
@ -598,6 +599,9 @@ var XRef = (function XRefClosure() {
 | 
				
			|||||||
        log('(while reading XRef): ' + e);
 | 
					        log('(while reading XRef): ' + e);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (recoveryMode)
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      warn('Indexing all PDF objects');
 | 
					      warn('Indexing all PDF objects');
 | 
				
			||||||
      return this.indexObjects();
 | 
					      return this.indexObjects();
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
				
			|||||||
@ -110,7 +110,7 @@ Shadings.RadialAxial = (function RadialAxialClosure() {
 | 
				
			|||||||
    var r1 = raw[6];
 | 
					    var r1 = raw[6];
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
      type: 'Pattern',
 | 
					      type: 'Pattern',
 | 
				
			||||||
      getPattern: function(ctx) {
 | 
					      getPattern: function RadialAxial_getPattern(ctx) {
 | 
				
			||||||
        var curMatrix = ctx.mozCurrentTransform;
 | 
					        var curMatrix = ctx.mozCurrentTransform;
 | 
				
			||||||
        if (curMatrix) {
 | 
					        if (curMatrix) {
 | 
				
			||||||
          var userMatrix = ctx.mozCurrentTransformInverse;
 | 
					          var userMatrix = ctx.mozCurrentTransformInverse;
 | 
				
			||||||
 | 
				
			|||||||
@ -97,7 +97,7 @@ var Util = PDFJS.Util = (function UtilClosure() {
 | 
				
			|||||||
    return [xt, yt];
 | 
					    return [xt, yt];
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Util.applyInverseTransform = function Util_applyTransform(p, m) {
 | 
					  Util.applyInverseTransform = function Util_applyInverseTransform(p, m) {
 | 
				
			||||||
    var d = m[0] * m[3] - m[1] * m[2];
 | 
					    var d = m[0] * m[3] - m[1] * m[2];
 | 
				
			||||||
    var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
 | 
					    var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
 | 
				
			||||||
    var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
 | 
					    var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
 | 
				
			||||||
 | 
				
			|||||||
@ -23,9 +23,9 @@ var files = [
 | 
				
			|||||||
  'pattern.js',
 | 
					  'pattern.js',
 | 
				
			||||||
  'stream.js',
 | 
					  'stream.js',
 | 
				
			||||||
  'worker.js',
 | 
					  'worker.js',
 | 
				
			||||||
  '../external/jpgjs/jpg.js',
 | 
					 | 
				
			||||||
  'jpx.js',
 | 
					  'jpx.js',
 | 
				
			||||||
  'bidi.js'
 | 
					  'bidi.js',
 | 
				
			||||||
 | 
					  '../external/jpgjs/jpg.js'
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Load all the files.
 | 
					// Load all the files.
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								test/pdfs/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@ -18,6 +18,7 @@
 | 
				
			|||||||
!cmykjpeg.pdf
 | 
					!cmykjpeg.pdf
 | 
				
			||||||
!issue840.pdf
 | 
					!issue840.pdf
 | 
				
			||||||
!scan-bad.pdf
 | 
					!scan-bad.pdf
 | 
				
			||||||
 | 
					!pdfjsbad1586.pdf
 | 
				
			||||||
!freeculture.pdf
 | 
					!freeculture.pdf
 | 
				
			||||||
!pdfkit_compressed.pdf
 | 
					!pdfkit_compressed.pdf
 | 
				
			||||||
!TAMReview.pdf
 | 
					!TAMReview.pdf
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								test/pdfs/issue1597.pdf.link
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					http://content1d.omroep.nl/227cbd4ae54f95dd466a7a8475fec2ea/4f95b377/nos/docs/230412_brief_koningin.pdf
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								test/pdfs/pdfjsbad1586.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										217
									
								
								test/test.py
									
									
									
									
									
								
							
							
						
						@ -39,9 +39,13 @@ class TestOptions(OptionParser):
 | 
				
			|||||||
                        default=False)
 | 
					                        default=False)
 | 
				
			||||||
        self.add_option("--port", action="store", dest="port", type="int",
 | 
					        self.add_option("--port", action="store", dest="port", type="int",
 | 
				
			||||||
                        help="The port the HTTP server should listen on.", default=8080)
 | 
					                        help="The port the HTTP server should listen on.", default=8080)
 | 
				
			||||||
 | 
					        self.add_option("--unitTest", action="store_true", dest="unitTest",
 | 
				
			||||||
 | 
					                        help="Run the unit tests.", default=False)
 | 
				
			||||||
        self.set_usage(USAGE_EXAMPLE)
 | 
					        self.set_usage(USAGE_EXAMPLE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def verifyOptions(self, options):
 | 
					    def verifyOptions(self, options):
 | 
				
			||||||
 | 
					        if options.reftest and options.unitTest:
 | 
				
			||||||
 | 
					            self.error("--reftest and --unitTest must not be specified at the same time.")
 | 
				
			||||||
        if options.masterMode and options.manifestFile:
 | 
					        if options.masterMode and options.manifestFile:
 | 
				
			||||||
            self.error("--masterMode and --manifestFile must not be specified at the same time.")
 | 
					            self.error("--masterMode and --manifestFile must not be specified at the same time.")
 | 
				
			||||||
        if not options.manifestFile:
 | 
					        if not options.manifestFile:
 | 
				
			||||||
@ -50,6 +54,7 @@ class TestOptions(OptionParser):
 | 
				
			|||||||
            print "Warning: ignoring browser argument since manifest file was also supplied"
 | 
					            print "Warning: ignoring browser argument since manifest file was also supplied"
 | 
				
			||||||
        if not options.browser and not options.browserManifestFile:
 | 
					        if not options.browser and not options.browserManifestFile:
 | 
				
			||||||
            print "Starting server on port %s." % options.port
 | 
					            print "Starting server on port %s." % options.port
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return options
 | 
					        return options
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
def prompt(question):
 | 
					def prompt(question):
 | 
				
			||||||
@ -68,7 +73,8 @@ MIMEs = {
 | 
				
			|||||||
    '.gif': 'image/gif',
 | 
					    '.gif': 'image/gif',
 | 
				
			||||||
    '.ico': 'image/x-icon',
 | 
					    '.ico': 'image/x-icon',
 | 
				
			||||||
    '.png': 'image/png',
 | 
					    '.png': 'image/png',
 | 
				
			||||||
    '.log': 'text/plain'
 | 
					    '.log': 'text/plain',
 | 
				
			||||||
 | 
					    '.properties': 'text/plain'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class State:
 | 
					class State:
 | 
				
			||||||
@ -86,6 +92,13 @@ class State:
 | 
				
			|||||||
    eqLog = None
 | 
					    eqLog = None
 | 
				
			||||||
    lastPost = { }
 | 
					    lastPost = { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class UnitTestState:
 | 
				
			||||||
 | 
					    browsers = [ ]
 | 
				
			||||||
 | 
					    browsersRunning = 0
 | 
				
			||||||
 | 
					    lastPost = { }
 | 
				
			||||||
 | 
					    numErrors = 0
 | 
				
			||||||
 | 
					    numRun = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Result:
 | 
					class Result:
 | 
				
			||||||
    def __init__(self, snapshot, failure, page):
 | 
					    def __init__(self, snapshot, failure, page):
 | 
				
			||||||
        self.snapshot = snapshot
 | 
					        self.snapshot = snapshot
 | 
				
			||||||
@ -95,8 +108,7 @@ class Result:
 | 
				
			|||||||
class TestServer(SocketServer.TCPServer):
 | 
					class TestServer(SocketServer.TCPServer):
 | 
				
			||||||
    allow_reuse_address = True
 | 
					    allow_reuse_address = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class PDFTestHandler(BaseHTTPRequestHandler):
 | 
					class TestHandlerBase(BaseHTTPRequestHandler):
 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Disable annoying noise by default
 | 
					    # Disable annoying noise by default
 | 
				
			||||||
    def log_request(code=0, size=0):
 | 
					    def log_request(code=0, size=0):
 | 
				
			||||||
        if VERBOSE:
 | 
					        if VERBOSE:
 | 
				
			||||||
@ -110,34 +122,6 @@ class PDFTestHandler(BaseHTTPRequestHandler):
 | 
				
			|||||||
        with open(path, "rb") as f:
 | 
					        with open(path, "rb") as f:
 | 
				
			||||||
            self.wfile.write(f.read())
 | 
					            self.wfile.write(f.read())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def sendIndex(self, path, query):
 | 
					 | 
				
			||||||
        if not path.endswith("/"):
 | 
					 | 
				
			||||||
          # we need trailing slash
 | 
					 | 
				
			||||||
          self.send_response(301)
 | 
					 | 
				
			||||||
          redirectLocation = path + "/"
 | 
					 | 
				
			||||||
          if query:
 | 
					 | 
				
			||||||
            redirectLocation += "?" + query
 | 
					 | 
				
			||||||
          self.send_header("Location",  redirectLocation)
 | 
					 | 
				
			||||||
          self.end_headers()
 | 
					 | 
				
			||||||
          return
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.send_response(200)
 | 
					 | 
				
			||||||
        self.send_header("Content-Type", "text/html")
 | 
					 | 
				
			||||||
        self.end_headers()
 | 
					 | 
				
			||||||
        if query == "frame":
 | 
					 | 
				
			||||||
          self.wfile.write("<html><frameset cols=*,200><frame name=pdf>" +
 | 
					 | 
				
			||||||
            "<frame src='" + path + "'></frameset></html>")
 | 
					 | 
				
			||||||
          return
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        location = os.path.abspath(os.path.realpath(DOC_ROOT + os.sep + path))
 | 
					 | 
				
			||||||
        self.wfile.write("<html><body><h1>PDFs of " + path + "</h1>\n")
 | 
					 | 
				
			||||||
        for filename in os.listdir(location):
 | 
					 | 
				
			||||||
          if filename.lower().endswith('.pdf'):
 | 
					 | 
				
			||||||
            self.wfile.write("<a href='/web/viewer.html?file=" +
 | 
					 | 
				
			||||||
              urllib.quote_plus(path + filename, '/') + "' target=pdf>" +
 | 
					 | 
				
			||||||
              filename + "</a><br>\n")
 | 
					 | 
				
			||||||
        self.wfile.write("</body></html>")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def do_GET(self):
 | 
					    def do_GET(self):
 | 
				
			||||||
        url = urlparse(self.path)
 | 
					        url = urlparse(self.path)
 | 
				
			||||||
        # Ignore query string
 | 
					        # Ignore query string
 | 
				
			||||||
@ -168,6 +152,70 @@ class PDFTestHandler(BaseHTTPRequestHandler):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        self.sendFile(path, ext)
 | 
					        self.sendFile(path, ext)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class UnitTestHandler(TestHandlerBase):
 | 
				
			||||||
 | 
					    def sendIndex(self, path, query):
 | 
				
			||||||
 | 
					        print "send index"
 | 
				
			||||||
 | 
					    def do_POST(self):
 | 
				
			||||||
 | 
					        numBytes = int(self.headers['Content-Length'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.send_response(200)
 | 
				
			||||||
 | 
					        self.send_header('Content-Type', 'text/plain')
 | 
				
			||||||
 | 
					        self.end_headers()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        url = urlparse(self.path)
 | 
				
			||||||
 | 
					        result = json.loads(self.rfile.read(numBytes))
 | 
				
			||||||
 | 
					        browser = result['browser']
 | 
				
			||||||
 | 
					        UnitTestState.lastPost[browser] = int(time.time())
 | 
				
			||||||
 | 
					        if url.path == "/tellMeToQuit":
 | 
				
			||||||
 | 
					            tellAppToQuit(url.path, url.query)
 | 
				
			||||||
 | 
					            UnitTestState.browsersRunning -= 1
 | 
				
			||||||
 | 
					            UnitTestState.lastPost[browser] = None
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        elif url.path == '/info':
 | 
				
			||||||
 | 
					            print result['message']
 | 
				
			||||||
 | 
					        elif url.path == '/submit_task_results':
 | 
				
			||||||
 | 
					            status, description = result['status'], result['description']
 | 
				
			||||||
 | 
					            UnitTestState.numRun += 1
 | 
				
			||||||
 | 
					            if status == 'TEST-UNEXPECTED-FAIL':
 | 
				
			||||||
 | 
					                UnitTestState.numErrors += 1
 | 
				
			||||||
 | 
					            message = status + ' | ' + description + ' | in ' + browser
 | 
				
			||||||
 | 
					            if 'error' in result:
 | 
				
			||||||
 | 
					                message += ' | ' + result['error']
 | 
				
			||||||
 | 
					            print message
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            print 'Error: uknown action' + url.path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PDFTestHandler(TestHandlerBase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def sendIndex(self, path, query):
 | 
				
			||||||
 | 
					        if not path.endswith("/"):
 | 
				
			||||||
 | 
					          # we need trailing slash
 | 
				
			||||||
 | 
					          self.send_response(301)
 | 
				
			||||||
 | 
					          redirectLocation = path + "/"
 | 
				
			||||||
 | 
					          if query:
 | 
				
			||||||
 | 
					            redirectLocation += "?" + query
 | 
				
			||||||
 | 
					          self.send_header("Location",  redirectLocation)
 | 
				
			||||||
 | 
					          self.end_headers()
 | 
				
			||||||
 | 
					          return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.send_response(200)
 | 
				
			||||||
 | 
					        self.send_header("Content-Type", "text/html")
 | 
				
			||||||
 | 
					        self.end_headers()
 | 
				
			||||||
 | 
					        if query == "frame":
 | 
				
			||||||
 | 
					          self.wfile.write("<html><frameset cols=*,200><frame name=pdf>" +
 | 
				
			||||||
 | 
					            "<frame src='" + path + "'></frameset></html>")
 | 
				
			||||||
 | 
					          return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        location = os.path.abspath(os.path.realpath(DOC_ROOT + os.sep + path))
 | 
				
			||||||
 | 
					        self.wfile.write("<html><body><h1>PDFs of " + path + "</h1>\n")
 | 
				
			||||||
 | 
					        for filename in os.listdir(location):
 | 
				
			||||||
 | 
					          if filename.lower().endswith('.pdf'):
 | 
				
			||||||
 | 
					            self.wfile.write("<a href='/web/viewer.html?file=" +
 | 
				
			||||||
 | 
					              urllib.quote_plus(path + filename, '/') + "' target=pdf>" +
 | 
				
			||||||
 | 
					              filename + "</a><br>\n")
 | 
				
			||||||
 | 
					        self.wfile.write("</body></html>")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def do_POST(self):
 | 
					    def do_POST(self):
 | 
				
			||||||
        numBytes = int(self.headers['Content-Length'])
 | 
					        numBytes = int(self.headers['Content-Length'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -245,6 +293,8 @@ class BaseBrowserCommand(object):
 | 
				
			|||||||
        self.browserLog = open(BROWSERLOG_FILE, "w")
 | 
					        self.browserLog = open(BROWSERLOG_FILE, "w")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def teardown(self):
 | 
					    def teardown(self):
 | 
				
			||||||
 | 
					        self.process.terminate()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # If the browser is still running, wait up to ten seconds for it to quit
 | 
					        # If the browser is still running, wait up to ten seconds for it to quit
 | 
				
			||||||
        if self.process and self.process.poll() is None:
 | 
					        if self.process and self.process.poll() is None:
 | 
				
			||||||
            checks = 0
 | 
					            checks = 0
 | 
				
			||||||
@ -255,6 +305,7 @@ class BaseBrowserCommand(object):
 | 
				
			|||||||
            if self.process.poll() is None:
 | 
					            if self.process.poll() is None:
 | 
				
			||||||
                print "Process %s is still running. Killing." % self.name
 | 
					                print "Process %s is still running. Killing." % self.name
 | 
				
			||||||
                self.process.kill()
 | 
					                self.process.kill()
 | 
				
			||||||
 | 
					                self.process.wait()
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
        if self.tempDir is not None and os.path.exists(self.tempDir):
 | 
					        if self.tempDir is not None and os.path.exists(self.tempDir):
 | 
				
			||||||
            shutil.rmtree(self.tempDir)
 | 
					            shutil.rmtree(self.tempDir)
 | 
				
			||||||
@ -354,6 +405,17 @@ def verifyPDFs(manifestList):
 | 
				
			|||||||
            error = True
 | 
					            error = True
 | 
				
			||||||
    return not error
 | 
					    return not error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def getTestBrowsers(options):
 | 
				
			||||||
 | 
					    testBrowsers = []
 | 
				
			||||||
 | 
					    if options.browserManifestFile:
 | 
				
			||||||
 | 
					        testBrowsers = makeBrowserCommands(options.browserManifestFile)
 | 
				
			||||||
 | 
					    elif options.browser:
 | 
				
			||||||
 | 
					        testBrowsers = [makeBrowserCommand({"path":options.browser, "name":None})]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if options.browserManifestFile or options.browser:
 | 
				
			||||||
 | 
					        assert len(testBrowsers) > 0
 | 
				
			||||||
 | 
					    return testBrowsers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def setUp(options):
 | 
					def setUp(options):
 | 
				
			||||||
    # Only serve files from a pdf.js clone
 | 
					    # Only serve files from a pdf.js clone
 | 
				
			||||||
    assert not GIT_CLONE_CHECK or os.path.isfile('../src/pdf.js') and os.path.isdir('../.git')
 | 
					    assert not GIT_CLONE_CHECK or os.path.isfile('../src/pdf.js') and os.path.isdir('../.git')
 | 
				
			||||||
@ -366,14 +428,7 @@ def setUp(options):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    assert not os.path.isdir(TMPDIR)
 | 
					    assert not os.path.isdir(TMPDIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    testBrowsers = []
 | 
					    testBrowsers = getTestBrowsers(options)
 | 
				
			||||||
    if options.browserManifestFile:
 | 
					 | 
				
			||||||
        testBrowsers = makeBrowserCommands(options.browserManifestFile)
 | 
					 | 
				
			||||||
    elif options.browser:
 | 
					 | 
				
			||||||
        testBrowsers = [makeBrowserCommand({"path":options.browser, "name":None})]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if options.browserManifestFile or options.browser:
 | 
					 | 
				
			||||||
        assert len(testBrowsers) > 0
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    with open(options.manifestFile) as mf:
 | 
					    with open(options.manifestFile) as mf:
 | 
				
			||||||
        manifestList = json.load(mf)
 | 
					        manifestList = json.load(mf)
 | 
				
			||||||
@ -398,13 +453,23 @@ def setUp(options):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return testBrowsers
 | 
					    return testBrowsers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def startBrowsers(browsers, options):
 | 
					def setUpUnitTests(options):
 | 
				
			||||||
 | 
					    # Only serve files from a pdf.js clone
 | 
				
			||||||
 | 
					    assert not GIT_CLONE_CHECK or os.path.isfile('../src/pdf.js') and os.path.isdir('../.git')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    testBrowsers = getTestBrowsers(options)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    UnitTestState.browsersRunning = len(testBrowsers)
 | 
				
			||||||
 | 
					    for b in testBrowsers:
 | 
				
			||||||
 | 
					        UnitTestState.lastPost[b.name] = int(time.time())
 | 
				
			||||||
 | 
					    return testBrowsers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def startBrowsers(browsers, options, path):
 | 
				
			||||||
    for b in browsers:
 | 
					    for b in browsers:
 | 
				
			||||||
        b.setup()
 | 
					        b.setup()
 | 
				
			||||||
        print 'Launching', b.name
 | 
					        print 'Launching', b.name
 | 
				
			||||||
        host = 'http://%s:%s' % (SERVER_HOST, options.port) 
 | 
					        host = 'http://%s:%s' % (SERVER_HOST, options.port) 
 | 
				
			||||||
        path = '/test/test_slave.html?'
 | 
					        qs = '?browser='+ urllib.quote(b.name) +'&manifestFile='+ urllib.quote(options.manifestFile)
 | 
				
			||||||
        qs = 'browser='+ urllib.quote(b.name) +'&manifestFile='+ urllib.quote(options.manifestFile)
 | 
					 | 
				
			||||||
        qs += '&path=' + b.path
 | 
					        qs += '&path=' + b.path
 | 
				
			||||||
        b.start(host + path + qs)
 | 
					        b.start(host + path + qs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -526,7 +591,7 @@ def processResults():
 | 
				
			|||||||
    print ''
 | 
					    print ''
 | 
				
			||||||
    numFatalFailures = (State.numErrors + State.numFBFFailures)
 | 
					    numFatalFailures = (State.numErrors + State.numFBFFailures)
 | 
				
			||||||
    if 0 == State.numEqFailures and 0 == numFatalFailures:
 | 
					    if 0 == State.numEqFailures and 0 == numFatalFailures:
 | 
				
			||||||
        print 'All tests passed.'
 | 
					        print 'All regression tests passed.'
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        print 'OHNOES!  Some tests failed!'
 | 
					        print 'OHNOES!  Some tests failed!'
 | 
				
			||||||
        if 0 < State.numErrors:
 | 
					        if 0 < State.numErrors:
 | 
				
			||||||
@ -576,7 +641,7 @@ def startReftest(browser, options):
 | 
				
			|||||||
def runTests(options, browsers):
 | 
					def runTests(options, browsers):
 | 
				
			||||||
    t1 = time.time()
 | 
					    t1 = time.time()
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        startBrowsers(browsers, options)
 | 
					        startBrowsers(browsers, options, '/test/test_slave.html')
 | 
				
			||||||
        while not State.done:
 | 
					        while not State.done:
 | 
				
			||||||
            for b in State.lastPost:
 | 
					            for b in State.lastPost:
 | 
				
			||||||
                if State.remaining[b] > 0 and int(time.time()) - State.lastPost[b] > BROWSER_TIMEOUT:
 | 
					                if State.remaining[b] > 0 and int(time.time()) - State.lastPost[b] > BROWSER_TIMEOUT:
 | 
				
			||||||
@ -598,6 +663,30 @@ def runTests(options, browsers):
 | 
				
			|||||||
        print "\nStarting reftest harness to examine %d eq test failures." % State.numEqFailures
 | 
					        print "\nStarting reftest harness to examine %d eq test failures." % State.numEqFailures
 | 
				
			||||||
        startReftest(browsers[0], options)
 | 
					        startReftest(browsers[0], options)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def runUnitTests(options, browsers):
 | 
				
			||||||
 | 
					    t1 = time.time()
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        startBrowsers(browsers, options, '/test/unit/unit_test.html')
 | 
				
			||||||
 | 
					        while UnitTestState.browsersRunning > 0:
 | 
				
			||||||
 | 
					            for b in UnitTestState.lastPost:
 | 
				
			||||||
 | 
					                if UnitTestState.lastPost[b] != None and int(time.time()) - UnitTestState.lastPost[b] > BROWSER_TIMEOUT:
 | 
				
			||||||
 | 
					                    print 'TEST-UNEXPECTED-FAIL | test failed', b, "has not responded in", BROWSER_TIMEOUT, "s"
 | 
				
			||||||
 | 
					                    UnitTestState.lastPost[b] = None
 | 
				
			||||||
 | 
					                    UnitTestState.browsersRunning -= 1
 | 
				
			||||||
 | 
					                    UnitTestState.numErrors += 1
 | 
				
			||||||
 | 
					            time.sleep(1)
 | 
				
			||||||
 | 
					        print ''
 | 
				
			||||||
 | 
					        print 'Ran', UnitTestState.numRun, 'tests'
 | 
				
			||||||
 | 
					        if UnitTestState.numErrors > 0:
 | 
				
			||||||
 | 
					            print 'OHNOES!  Some tests failed!'
 | 
				
			||||||
 | 
					            print '  ', UnitTestState.numErrors, 'of', UnitTestState.numRun, 'failed'
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            print 'All unit tests passed.'
 | 
				
			||||||
 | 
					    finally:
 | 
				
			||||||
 | 
					        teardownBrowsers(browsers)
 | 
				
			||||||
 | 
					    t2 = time.time()
 | 
				
			||||||
 | 
					    print "Unit test Runtime was", int(t2 - t1), "seconds"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def main():
 | 
					def main():
 | 
				
			||||||
    optionParser = TestOptions()
 | 
					    optionParser = TestOptions()
 | 
				
			||||||
    options, args = optionParser.parse_args()
 | 
					    options, args = optionParser.parse_args()
 | 
				
			||||||
@ -605,23 +694,33 @@ def main():
 | 
				
			|||||||
    if options == None:
 | 
					    if options == None:
 | 
				
			||||||
        sys.exit(1)
 | 
					        sys.exit(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    httpd = TestServer((SERVER_HOST, options.port), PDFTestHandler)
 | 
					    if options.unitTest:
 | 
				
			||||||
    httpd.masterMode = options.masterMode
 | 
					        httpd = TestServer((SERVER_HOST, options.port), UnitTestHandler)
 | 
				
			||||||
    httpd_thread = threading.Thread(target=httpd.serve_forever)
 | 
					        httpd_thread = threading.Thread(target=httpd.serve_forever)
 | 
				
			||||||
    httpd_thread.setDaemon(True)
 | 
					        httpd_thread.setDaemon(True)
 | 
				
			||||||
    httpd_thread.start()
 | 
					        httpd_thread.start()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    browsers = setUp(options)
 | 
					        browsers = setUpUnitTests(options)
 | 
				
			||||||
    if len(browsers) > 0:
 | 
					        if len(browsers) > 0:
 | 
				
			||||||
        runTests(options, browsers)
 | 
					            runUnitTests(options, browsers)
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        # just run the server
 | 
					        httpd = TestServer((SERVER_HOST, options.port), PDFTestHandler)
 | 
				
			||||||
        print "Running HTTP server. Press Ctrl-C to quit."
 | 
					        httpd.masterMode = options.masterMode
 | 
				
			||||||
        try:
 | 
					        httpd_thread = threading.Thread(target=httpd.serve_forever)
 | 
				
			||||||
            while True:
 | 
					        httpd_thread.setDaemon(True)
 | 
				
			||||||
                time.sleep(1)
 | 
					        httpd_thread.start()
 | 
				
			||||||
        except (KeyboardInterrupt):
 | 
					
 | 
				
			||||||
            print "\nExiting."
 | 
					        browsers = setUp(options)
 | 
				
			||||||
 | 
					        if len(browsers) > 0:
 | 
				
			||||||
 | 
					            runTests(options, browsers)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            # just run the server
 | 
				
			||||||
 | 
					            print "Running HTTP server. Press Ctrl-C to quit."
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                while True:
 | 
				
			||||||
 | 
					                    time.sleep(1)
 | 
				
			||||||
 | 
					            except (KeyboardInterrupt):
 | 
				
			||||||
 | 
					                print "\nExiting."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
    main()
 | 
					    main()
 | 
				
			||||||
 | 
				
			|||||||
@ -363,6 +363,12 @@
 | 
				
			|||||||
      "link": true,
 | 
					      "link": true,
 | 
				
			||||||
      "type": "eq"
 | 
					      "type": "eq"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    {  "id": "issue1586",
 | 
				
			||||||
 | 
					      "file": "pdfs/pdfjsbad1586.pdf",
 | 
				
			||||||
 | 
					      "md5": "793d0870f0b0c613799b0677d64daca4",
 | 
				
			||||||
 | 
					      "rounds": 1,
 | 
				
			||||||
 | 
					      "type": "load"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    {  "id": "aboutstacks",
 | 
					    {  "id": "aboutstacks",
 | 
				
			||||||
      "file": "pdfs/aboutstacks.pdf",
 | 
					      "file": "pdfs/aboutstacks.pdf",
 | 
				
			||||||
      "md5": "6e7c8416a293ba2d83bc8dd20c6ccf51",
 | 
					      "md5": "6e7c8416a293ba2d83bc8dd20c6ccf51",
 | 
				
			||||||
@ -560,6 +566,13 @@
 | 
				
			|||||||
      "link": true,
 | 
					      "link": true,
 | 
				
			||||||
      "type": "eq"
 | 
					      "type": "eq"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    {  "id": "issue1597",
 | 
				
			||||||
 | 
					      "file": "pdfs/issue1597.pdf",
 | 
				
			||||||
 | 
					      "md5": "a5ebef467fd6e2fc0aeb56c9eb725ae3",
 | 
				
			||||||
 | 
					      "rounds": 1,
 | 
				
			||||||
 | 
					      "link": true,
 | 
				
			||||||
 | 
					      "type": "eq"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    {  "id": "issue1317",
 | 
					    {  "id": "issue1317",
 | 
				
			||||||
      "file": "pdfs/issue1317.pdf",
 | 
					      "file": "pdfs/issue1317.pdf",
 | 
				
			||||||
      "md5": "6fb46275b30c48c8985617d4f86199e3",
 | 
					      "md5": "6fb46275b30c48c8985617d4f86199e3",
 | 
				
			||||||
 | 
				
			|||||||
@ -1,116 +0,0 @@
 | 
				
			|||||||
# Create temporary profile directory name.
 | 
					 | 
				
			||||||
TEMP_PROFILE:=$(shell echo `pwd`)/test_reports/temp_profile
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# These are the Firefox command line arguments.
 | 
					 | 
				
			||||||
FIREFOX_ARGS:=-no-remote -profile $(TEMP_PROFILE)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# These are the Chrome command line arguments.
 | 
					 | 
				
			||||||
CHROME_ARGS:=--user-data-dir=$(TEMP_PROFILE) --no-first-run --disable-sync
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Unit test uses the manifest from ref test to determine which browsers will
 | 
					 | 
				
			||||||
# be used for running the unit tests.
 | 
					 | 
				
			||||||
MANIFEST:=../resources/browser_manifests/browser_manifest.json
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This is a helper command to separate multiple browsers to their own lines
 | 
					 | 
				
			||||||
# for an easier sed operation.
 | 
					 | 
				
			||||||
SPLIT_LINES:=sed 's|,|,@|g' | tr '@' '\n'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This is a helper command to join multiple lines together.
 | 
					 | 
				
			||||||
JOIN_LINES:=tr -d '\n'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Fetch the paths to browsers that are going to be used in testing.
 | 
					 | 
				
			||||||
# For OS X the path to the binary needs to be added.
 | 
					 | 
				
			||||||
# Add the browser arguments for each browser.
 | 
					 | 
				
			||||||
# Create random profile directory for each browser.
 | 
					 | 
				
			||||||
BROWSERS_PATHS:=$(shell echo `\
 | 
					 | 
				
			||||||
  sed -n 's|.*"path":\(.*\)|\1,|p' $(MANIFEST) | \
 | 
					 | 
				
			||||||
  $(JOIN_LINES) \
 | 
					 | 
				
			||||||
`)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The browser_manifest.json file has only the app directory for mac browsers.
 | 
					 | 
				
			||||||
# The absolute path to the browser binary needs to be used.
 | 
					 | 
				
			||||||
BROWSERS_PATHS_WITH_MAC_CORRECTION:=$(shell echo '$(BROWSERS_PATHS)' | \
 | 
					 | 
				
			||||||
  $(SPLIT_LINES) | \
 | 
					 | 
				
			||||||
  sed 's|\(Aurora\.app\)|\1/Contents/MacOS/firefox-bin|' | \
 | 
					 | 
				
			||||||
  sed 's|\(Firefox.*\.app\)|\1/Contents/MacOS/firefox-bin|' | \
 | 
					 | 
				
			||||||
  sed 's|\(Google Chrome\.app\)|\1/Contents/MacOS/Google Chrome|' | \
 | 
					 | 
				
			||||||
  $(JOIN_LINES) \
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Replace " with @@@@ so that echoing do not destroy the quotation marks.
 | 
					 | 
				
			||||||
QUOTATION_MARK:=\"
 | 
					 | 
				
			||||||
SUBSTITUTE_FOR_QUOTATION_MARK:=@@@@
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Each of the browser can have their own separate arguments.
 | 
					 | 
				
			||||||
BROWSERS_WITH_ARGUMENTS:=$(shell echo '$(BROWSERS_PATHS_WITH_MAC_CORRECTION)' | \
 | 
					 | 
				
			||||||
  $(SPLIT_LINES) | \
 | 
					 | 
				
			||||||
  sed "s|\(irefox.*\)\($(QUOTATION_MARK)\),|\1;$(FIREFOX_ARGS)\2,|" | \
 | 
					 | 
				
			||||||
  sed "s|\(hrome.*\)\($(QUOTATION_MARK)\),|\1;$(CHROME_ARGS)\2,|" | \
 | 
					 | 
				
			||||||
  $(JOIN_LINES) \
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# A temporary profile directory is needed for each of the browser. In this way
 | 
					 | 
				
			||||||
# a unit test run will not disturb the main browsing session of the user. The
 | 
					 | 
				
			||||||
# $RANDOM shell variable is used to generate non-conflicting temporary
 | 
					 | 
				
			||||||
# directories.
 | 
					 | 
				
			||||||
BROWSERS_WITH_UKNOWN_RANDOM_PROFILE_PATHS:=$(shell echo '$(BROWSERS_WITH_ARGUMENTS)' | \
 | 
					 | 
				
			||||||
  $(SPLIT_LINES) | \
 | 
					 | 
				
			||||||
  sed 's|\(temp_profile\)|\1_$$RANDOM$$RANDOM|' | \
 | 
					 | 
				
			||||||
  sed "s|$(QUOTATION_MARK)|$(SUBSTITUTE_FOR_QUOTATION_MARK)|g" | \
 | 
					 | 
				
			||||||
  $(JOIN_LINES) \
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Echo the variable so that the unknown random directories become known.
 | 
					 | 
				
			||||||
# Replace @@@@ with " so that jsTestDriver will work properly.
 | 
					 | 
				
			||||||
BROWSERS:=$(shell echo "$(BROWSERS_WITH_UKNOWN_RANDOM_PROFILE_PATHS)" | \
 | 
					 | 
				
			||||||
  sed "s|$(SUBSTITUTE_FOR_QUOTATION_MARK)|$(QUOTATION_MARK)|g" \
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Get the known random directories for browsers. This information will be used
 | 
					 | 
				
			||||||
# to create the profile directories beforehand. Create also the dummy temp
 | 
					 | 
				
			||||||
# profile directory so that the mkdir command would not fail for browsers that
 | 
					 | 
				
			||||||
# do not need it.
 | 
					 | 
				
			||||||
PROFILES:=$(TEMP_PROFILE) $(shell echo '$(BROWSERS)' | \
 | 
					 | 
				
			||||||
  $(SPLIT_LINES) | \
 | 
					 | 
				
			||||||
  sed -n "s|.*\( $(TEMP_PROFILE)_[0-9]\+\).*|\1|p" | \
 | 
					 | 
				
			||||||
  $(JOIN_LINES) \
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This is the command to invoke the unit test.
 | 
					 | 
				
			||||||
PROG:=java \
 | 
					 | 
				
			||||||
-Xms512m \
 | 
					 | 
				
			||||||
-Xmx1024m \
 | 
					 | 
				
			||||||
-jar ../../external/jsTestDriver/JsTestDriver-1.3.3d.jar \
 | 
					 | 
				
			||||||
--config ./jsTestDriver.conf \
 | 
					 | 
				
			||||||
--reset \
 | 
					 | 
				
			||||||
--port 4224 \
 | 
					 | 
				
			||||||
--browser $(BROWSERS) \
 | 
					 | 
				
			||||||
--tests all \
 | 
					 | 
				
			||||||
--testOutput ./test_reports/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This default rule runs the unit tests with the constructed command.
 | 
					 | 
				
			||||||
test:
 | 
					 | 
				
			||||||
	@mkdir -p $(PROFILES)
 | 
					 | 
				
			||||||
	$(PROG)
 | 
					 | 
				
			||||||
	@rm -rf $(PROFILES)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# In case this Makefile needs to be debugged then this rule will provide all
 | 
					 | 
				
			||||||
# the information from intermediate steps.
 | 
					 | 
				
			||||||
debug:
 | 
					 | 
				
			||||||
	@echo 'Debug browsers paths: $(BROWSERS_PATHS)'
 | 
					 | 
				
			||||||
	@echo
 | 
					 | 
				
			||||||
	@echo 'Debug browsers paths with mac correction: $(BROWSERS_PATHS_WITH_MAC_CORRECTION)'
 | 
					 | 
				
			||||||
	@echo
 | 
					 | 
				
			||||||
	@echo 'Debug browsers with arguments: $(BROWSERS_WITH_ARGUMENTS)'
 | 
					 | 
				
			||||||
	@echo
 | 
					 | 
				
			||||||
	@echo 'Debug browsers random profile paths: $(BROWSERS_WITH_UKNOWN_RANDOM_PROFILE_PATHS)'
 | 
					 | 
				
			||||||
	@echo
 | 
					 | 
				
			||||||
	@echo 'Debug browsers: $(BROWSERS)'
 | 
					 | 
				
			||||||
	@echo
 | 
					 | 
				
			||||||
	@echo 'Debug profiles: $(PROFILES)'
 | 
					 | 
				
			||||||
	@echo
 | 
					 | 
				
			||||||
	@echo 'Command to be run: $(PROG)'
 | 
					 | 
				
			||||||
	@echo
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.phony:: test
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ -6,11 +6,11 @@
 | 
				
			|||||||
describe('api', function() {
 | 
					describe('api', function() {
 | 
				
			||||||
  // TODO run with worker enabled
 | 
					  // TODO run with worker enabled
 | 
				
			||||||
  PDFJS.disableWorker = true;
 | 
					  PDFJS.disableWorker = true;
 | 
				
			||||||
  var basicApiUrl = '/basicapi.pdf';
 | 
					  var basicApiUrl = '../pdfs/basicapi.pdf';
 | 
				
			||||||
  function waitsForPromise(promise) {
 | 
					  function waitsForPromise(promise) {
 | 
				
			||||||
    waitsFor(function() {
 | 
					    waitsFor(function() {
 | 
				
			||||||
      return promise.isResolved || promise.isRejected;
 | 
					      return promise.isResolved || promise.isRejected;
 | 
				
			||||||
    }, 250);
 | 
					    }, 1000);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  function expectAfterPromise(promise, successCallback) {
 | 
					  function expectAfterPromise(promise, successCallback) {
 | 
				
			||||||
    waitsForPromise(promise);
 | 
					    waitsForPromise(promise);
 | 
				
			||||||
@ -25,8 +25,6 @@ describe('api', function() {
 | 
				
			|||||||
  describe('PDFJS', function() {
 | 
					  describe('PDFJS', function() {
 | 
				
			||||||
    describe('getDocument', function() {
 | 
					    describe('getDocument', function() {
 | 
				
			||||||
      it('creates pdf doc from URL', function() {
 | 
					      it('creates pdf doc from URL', function() {
 | 
				
			||||||
        console.log('what is');
 | 
					 | 
				
			||||||
        debugger;
 | 
					 | 
				
			||||||
        var promise = PDFJS.getDocument(basicApiUrl);
 | 
					        var promise = PDFJS.getDocument(basicApiUrl);
 | 
				
			||||||
        expectAfterPromise(promise, function(data) {
 | 
					        expectAfterPromise(promise, function(data) {
 | 
				
			||||||
          expect(true).toEqual(true);
 | 
					          expect(true).toEqual(true);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,39 +0,0 @@
 | 
				
			|||||||
server: http://localhost:4224
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
basepath: ..
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
load:
 | 
					 | 
				
			||||||
  - ../external/jasmine/jasmine.js
 | 
					 | 
				
			||||||
  - ../external/jasmineAdapter/JasmineAdapter.js
 | 
					 | 
				
			||||||
  - ../src/obj.js
 | 
					 | 
				
			||||||
  - ../src/core.js
 | 
					 | 
				
			||||||
  - ../src/util.js
 | 
					 | 
				
			||||||
  - ../src/api.js
 | 
					 | 
				
			||||||
  - ../src/canvas.js
 | 
					 | 
				
			||||||
  - ../src/obj.js
 | 
					 | 
				
			||||||
  - ../src/function.js
 | 
					 | 
				
			||||||
  - ../src/charsets.js
 | 
					 | 
				
			||||||
  - ../src/cidmaps.js
 | 
					 | 
				
			||||||
  - ../src/colorspace.js
 | 
					 | 
				
			||||||
  - ../src/crypto.js
 | 
					 | 
				
			||||||
  - ../src/evaluator.js
 | 
					 | 
				
			||||||
  - ../src/fonts.js
 | 
					 | 
				
			||||||
  - ../src/glyphlist.js
 | 
					 | 
				
			||||||
  - ../src/image.js
 | 
					 | 
				
			||||||
  - ../src/metrics.js
 | 
					 | 
				
			||||||
  - ../src/parser.js
 | 
					 | 
				
			||||||
  - ../src/pattern.js
 | 
					 | 
				
			||||||
  - ../src/stream.js
 | 
					 | 
				
			||||||
  - ../src/worker.js
 | 
					 | 
				
			||||||
  - ../src/bidi.js
 | 
					 | 
				
			||||||
  - ../src/metadata.js
 | 
					 | 
				
			||||||
  - ../external/jpgjs/jpg.js
 | 
					 | 
				
			||||||
  - unit/obj_spec.js
 | 
					 | 
				
			||||||
  - unit/font_spec.js
 | 
					 | 
				
			||||||
  - unit/function_spec.js
 | 
					 | 
				
			||||||
  - unit/crypto_spec.js
 | 
					 | 
				
			||||||
  - unit/stream_spec.js
 | 
					 | 
				
			||||||
  - unit/api_spec.js
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
gateway:
 | 
					 | 
				
			||||||
 - {matcher: "*.pdf", server: "http://localhost:8888/test/pdfs/"}
 | 
					 | 
				
			||||||
							
								
								
									
										18
									
								
								test/unit/metadata_spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | 
				
			||||||
 | 
					/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe('metadata', function() {
 | 
				
			||||||
 | 
					  describe('incorrect_xmp', function() {
 | 
				
			||||||
 | 
					    it('should fix the incorrect XMP data', function() {
 | 
				
			||||||
 | 
					      var invalidXMP = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\'>' +
 | 
				
			||||||
 | 
					        '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\'>' +
 | 
				
			||||||
 | 
					        '<rdf:Description xmlns:dc=\'http://purl.org/dc/elements/1.1/\'>' +
 | 
				
			||||||
 | 
					        '<dc:title>\\376\\377\\000P\\000D\\000F\\000&</dc:title>' +
 | 
				
			||||||
 | 
					        '</rdf:Description></rdf:RDF></x:xmpmeta>';
 | 
				
			||||||
 | 
					      var meta = new Metadata(invalidXMP);
 | 
				
			||||||
 | 
					      expect(meta.get('dc:title')).toEqual('PDF&');
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@ -4,7 +4,21 @@
 | 
				
			|||||||
'use strict';
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('stream', function() {
 | 
					describe('stream', function() {
 | 
				
			||||||
 | 
					  beforeEach(function() {
 | 
				
			||||||
 | 
					    this.addMatchers({
 | 
				
			||||||
 | 
					      toMatchTypedArray: function(expected) {
 | 
				
			||||||
 | 
					        var actual = this.actual;
 | 
				
			||||||
 | 
					        if (actual.length != expected.length)
 | 
				
			||||||
 | 
					          return false;
 | 
				
			||||||
 | 
					        for (var i = 0, ii = expected.length; i < ii; i++) {
 | 
				
			||||||
 | 
					          var a = actual[i], b = expected[i];
 | 
				
			||||||
 | 
					          if (a !== b)
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
  describe('PredictorStream', function() {
 | 
					  describe('PredictorStream', function() {
 | 
				
			||||||
    it('should decode simple predictor data', function() {
 | 
					    it('should decode simple predictor data', function() {
 | 
				
			||||||
      var dict = new Dict();
 | 
					      var dict = new Dict();
 | 
				
			||||||
@ -18,7 +32,9 @@ describe('stream', function() {
 | 
				
			|||||||
      var predictor = new PredictorStream(input, dict);
 | 
					      var predictor = new PredictorStream(input, dict);
 | 
				
			||||||
      var result = predictor.getBytes(6);
 | 
					      var result = predictor.getBytes(6);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      expect(result).toEqual(new Uint8Array([100, 3, 101, 2, 102, 1]));
 | 
					      expect(result).toMatchTypedArray(
 | 
				
			||||||
 | 
					        new Uint8Array([100, 3, 101, 2, 102, 1])
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										3
									
								
								test/unit/test_reports/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@ -1,3 +0,0 @@
 | 
				
			|||||||
TEST*
 | 
					 | 
				
			||||||
temp*
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
							
								
								
									
										72
									
								
								test/unit/testreporter.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | 
				
			||||||
 | 
					/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var TestReporter = function(browser, appPath) {
 | 
				
			||||||
 | 
					  function send(action, json) {
 | 
				
			||||||
 | 
					    var r = new XMLHttpRequest();
 | 
				
			||||||
 | 
					    // (The POST URI is ignored atm.)
 | 
				
			||||||
 | 
					    r.open('POST', action, true);
 | 
				
			||||||
 | 
					    r.setRequestHeader('Content-Type', 'application/json');
 | 
				
			||||||
 | 
					    r.onreadystatechange = function sendTaskResultOnreadystatechange(e) {
 | 
				
			||||||
 | 
					      if (r.readyState == 4) {
 | 
				
			||||||
 | 
					        // Retry until successful
 | 
				
			||||||
 | 
					        if (r.status !== 200)
 | 
				
			||||||
 | 
					          send(action, json);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    json['browser'] = browser;
 | 
				
			||||||
 | 
					    r.send(JSON.stringify(json));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function sendInfo(message) {
 | 
				
			||||||
 | 
					    send('/info', {message: message});
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function sendResult(status, description, error) {
 | 
				
			||||||
 | 
					    var message = {
 | 
				
			||||||
 | 
					      status: status,
 | 
				
			||||||
 | 
					      description: description
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    if (typeof error !== 'undefined')
 | 
				
			||||||
 | 
					      message['error'] = error;
 | 
				
			||||||
 | 
					    send('/submit_task_results', message);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function sendQuitRequest() {
 | 
				
			||||||
 | 
					    send('/tellMeToQuit?path=' + escape(appPath), {});
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.now = function() {
 | 
				
			||||||
 | 
					    return new Date().getTime();
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.reportRunnerStarting = function() {
 | 
				
			||||||
 | 
					    this.runnerStartTime = this.now();
 | 
				
			||||||
 | 
					    sendInfo('Started unit tests for ' + browser + '.');
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.reportSpecStarting = function() { };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.reportSpecResults = function(spec) {
 | 
				
			||||||
 | 
					    var results = spec.results();
 | 
				
			||||||
 | 
					    if (results.skipped) {
 | 
				
			||||||
 | 
					      sendResult('TEST-SKIPPED', results.description);
 | 
				
			||||||
 | 
					    } else if (results.passed()) {
 | 
				
			||||||
 | 
					      sendResult('TEST-PASSED', results.description);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      var failedMessages = '';
 | 
				
			||||||
 | 
					      var items = results.getItems();
 | 
				
			||||||
 | 
					      for (var i = 0, ii = items.length; i < ii; i++)
 | 
				
			||||||
 | 
					        if (!items[i].passed())
 | 
				
			||||||
 | 
					          failedMessages += items[i].message + ' ';
 | 
				
			||||||
 | 
					      sendResult('TEST-UNEXPECTED-FAIL', results.description, failedMessages);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.reportSuiteResults = function(suite) { };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  this.reportRunnerResults = function(runner) {
 | 
				
			||||||
 | 
					    // Give the test.py some time process any queued up requests
 | 
				
			||||||
 | 
					    setTimeout(sendQuitRequest, 500);
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										95
									
								
								test/unit/unit_test.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,95 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					  <title>pdf.js unit test</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <link rel="shortcut icon" type="image/png" href="../../external/jasmine/jasmine_favicon.png">
 | 
				
			||||||
 | 
					  <link rel="stylesheet" type="text/css" href="../../external/jasmine/jasmine.css">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../external/jasmine/jasmine.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../external/jasmine/jasmine-html.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="testreporter.js"></script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <!-- include source files here... -->
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/core.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/api.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/util.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/canvas.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/obj.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/function.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/charsets.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/cidmaps.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/colorspace.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/crypto.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/evaluator.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/fonts.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/glyphlist.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/image.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/metrics.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/parser.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/pattern.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/stream.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/worker.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../src/metadata.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="../../external/jpgjs/jpg.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript">PDFJS.workerSrc = '../../src/worker_loader.js';</script>
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  <!-- include spec files here... -->
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="obj_spec.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="font_spec.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="function_spec.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="crypto_spec.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="stream_spec.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="api_spec.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript" src="metadata_spec.js"></script>
 | 
				
			||||||
 | 
					  <script type="text/javascript">
 | 
				
			||||||
 | 
					    'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    (function pdfJsUnitTest() {
 | 
				
			||||||
 | 
					      function queryParams() {
 | 
				
			||||||
 | 
					        var qs = window.location.search.substring(1);
 | 
				
			||||||
 | 
					        var kvs = qs.split('&');
 | 
				
			||||||
 | 
					        var params = { };
 | 
				
			||||||
 | 
					        for (var i = 0; i < kvs.length; ++i) {
 | 
				
			||||||
 | 
					          var kv = kvs[i].split('=');
 | 
				
			||||||
 | 
					          params[unescape(kv[0])] = unescape(kv[1]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return params;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var jasmineEnv = jasmine.getEnv();
 | 
				
			||||||
 | 
					      jasmineEnv.updateInterval = 1000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var trivialReporter = new jasmine.TrivialReporter();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      jasmineEnv.addReporter(trivialReporter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var params = queryParams();
 | 
				
			||||||
 | 
					      if (params['browser']) {
 | 
				
			||||||
 | 
					        var testReporter = new TestReporter(params['browser'], params['path']);
 | 
				
			||||||
 | 
					        jasmineEnv.addReporter(testReporter);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      jasmineEnv.specFilter = function pdfJsUnitTestSpecFilter(spec) {
 | 
				
			||||||
 | 
					        return trivialReporter.specFilter(spec);
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var currentWindowOnload = window.onload;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      window.onload = function pdfJsUnitTestOnload() {
 | 
				
			||||||
 | 
					        if (currentWindowOnload) {
 | 
				
			||||||
 | 
					          currentWindowOnload();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        execJasmine();
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      function execJasmine() {
 | 
				
			||||||
 | 
					        jasmineEnv.execute();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    })();
 | 
				
			||||||
 | 
					  </script>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										1
									
								
								web/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@ -1 +1,2 @@
 | 
				
			|||||||
viewer-production.html
 | 
					viewer-production.html
 | 
				
			||||||
 | 
					locale.properties
 | 
				
			||||||
 | 
				
			|||||||
@ -423,8 +423,9 @@ var PDFBug = (function PDFBugClosure() {
 | 
				
			|||||||
      panels.setAttribute('class', 'panels');
 | 
					      panels.setAttribute('class', 'panels');
 | 
				
			||||||
      ui.appendChild(panels);
 | 
					      ui.appendChild(panels);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      document.body.appendChild(ui);
 | 
					      var container = document.getElementById('viewerContainer');
 | 
				
			||||||
      document.body.style.paddingRight = panelWidth + 'px';
 | 
					      container.appendChild(ui);
 | 
				
			||||||
 | 
					      container.style.right = panelWidth + 'px';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // Initialize all the debugging tools.
 | 
					      // Initialize all the debugging tools.
 | 
				
			||||||
      var tools = this.tools;
 | 
					      var tools = this.tools;
 | 
				
			||||||
 | 
				
			|||||||
| 
		 Before Width: | Height: | Size: 188 B After Width: | Height: | Size: 188 B  | 
| 
		 Before Width: | Height: | Size: 289 B After Width: | Height: | Size: 289 B  | 
| 
		 Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB  | 
@ -1,662 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
					 | 
				
			||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<svg
 | 
					 | 
				
			||||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
					 | 
				
			||||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
					 | 
				
			||||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
					 | 
				
			||||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns:xlink="http://www.w3.org/1999/xlink"
 | 
					 | 
				
			||||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
					 | 
				
			||||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
					 | 
				
			||||||
   inkscape:export-ydpi="240.00000"
 | 
					 | 
				
			||||||
   inkscape:export-xdpi="240.00000"
 | 
					 | 
				
			||||||
   inkscape:export-filename="/home/jimmac/gfx/novell/pdes/trunk/docs/BIGmime-text.png"
 | 
					 | 
				
			||||||
   sodipodi:docname="bookmark.svg"
 | 
					 | 
				
			||||||
   inkscape:version="0.48.1 r9760"
 | 
					 | 
				
			||||||
   sodipodi:version="0.32"
 | 
					 | 
				
			||||||
   id="svg249"
 | 
					 | 
				
			||||||
   height="48.000000px"
 | 
					 | 
				
			||||||
   width="48.000000px"
 | 
					 | 
				
			||||||
   inkscape:output_extension="org.inkscape.output.svg.inkscape"
 | 
					 | 
				
			||||||
   version="1.1"
 | 
					 | 
				
			||||||
   viewbox="0 0 48 48">
 | 
					 | 
				
			||||||
  <defs
 | 
					 | 
				
			||||||
     id="defs3">
 | 
					 | 
				
			||||||
    <inkscape:perspective
 | 
					 | 
				
			||||||
       sodipodi:type="inkscape:persp3d"
 | 
					 | 
				
			||||||
       inkscape:vp_x="0 : 24 : 1"
 | 
					 | 
				
			||||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
					 | 
				
			||||||
       inkscape:vp_z="48 : 24 : 1"
 | 
					 | 
				
			||||||
       inkscape:persp3d-origin="24 : 16 : 1"
 | 
					 | 
				
			||||||
       id="perspective100" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient5060"
 | 
					 | 
				
			||||||
       id="radialGradient5031"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
 | 
					 | 
				
			||||||
       cx="605.71429"
 | 
					 | 
				
			||||||
       cy="486.64789"
 | 
					 | 
				
			||||||
       fx="605.71429"
 | 
					 | 
				
			||||||
       fy="486.64789"
 | 
					 | 
				
			||||||
       r="117.14286" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient5060">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop5062" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop5064" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient5060"
 | 
					 | 
				
			||||||
       id="radialGradient5029"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
 | 
					 | 
				
			||||||
       cx="605.71429"
 | 
					 | 
				
			||||||
       cy="486.64789"
 | 
					 | 
				
			||||||
       fx="605.71429"
 | 
					 | 
				
			||||||
       fy="486.64789"
 | 
					 | 
				
			||||||
       r="117.14286" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient5048">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop5050" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop5056"
 | 
					 | 
				
			||||||
         offset="0.5"
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop5052" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient5048"
 | 
					 | 
				
			||||||
       id="linearGradient5027"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
 | 
					 | 
				
			||||||
       x1="302.85715"
 | 
					 | 
				
			||||||
       y1="366.64789"
 | 
					 | 
				
			||||||
       x2="302.85715"
 | 
					 | 
				
			||||||
       y2="609.50507" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient2906">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2908" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2910" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient2896">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2898" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2900" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2598">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#859dbc;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2600" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#547299;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2602" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2590">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2592" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2594" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient5897">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0.0000000;"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         id="stop5899" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop5905"
 | 
					 | 
				
			||||||
         offset="0.50000000"
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0.56701028;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0.0000000;"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         id="stop5901" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient5866">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop5868" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop5870" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient4404">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop4406" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop4408" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient4542">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop4544" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop4546" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient15662">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop15664"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop15666"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient269">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop270"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop271"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient259">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop260"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#fafafa;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop261"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient12512">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop12513"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop12517"
 | 
					 | 
				
			||||||
         offset="0.50000000"
 | 
					 | 
				
			||||||
         style="stop-color:#fff520;stop-opacity:0.89108908;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop12514"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#fff300;stop-opacity:0.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       r="14.375000"
 | 
					 | 
				
			||||||
       fy="125.00000"
 | 
					 | 
				
			||||||
       fx="55.000000"
 | 
					 | 
				
			||||||
       cy="125.00000"
 | 
					 | 
				
			||||||
       cx="55.000000"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       id="radialGradient278"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient12512"
 | 
					 | 
				
			||||||
       inkscape:collect="always" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient269"
 | 
					 | 
				
			||||||
       id="radialGradient15656"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(0.968273,0.000000,0.000000,1.036374,3.250000,0.489522)"
 | 
					 | 
				
			||||||
       cx="8.8244190"
 | 
					 | 
				
			||||||
       cy="3.7561285"
 | 
					 | 
				
			||||||
       fx="8.8244190"
 | 
					 | 
				
			||||||
       fy="3.7561285"
 | 
					 | 
				
			||||||
       r="37.751713" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient259"
 | 
					 | 
				
			||||||
       id="radialGradient15658"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(0.960493,0.000000,0.000000,1.044769,-0.103553,-0.159183)"
 | 
					 | 
				
			||||||
       cx="33.966679"
 | 
					 | 
				
			||||||
       cy="35.736916"
 | 
					 | 
				
			||||||
       fx="33.966679"
 | 
					 | 
				
			||||||
       fy="35.736916"
 | 
					 | 
				
			||||||
       r="86.708450" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient15662"
 | 
					 | 
				
			||||||
       id="radialGradient15668"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(0.973033,0.000000,0.000000,1.034937,3.168754,0.555277)"
 | 
					 | 
				
			||||||
       cx="8.1435566"
 | 
					 | 
				
			||||||
       cy="7.2678967"
 | 
					 | 
				
			||||||
       fx="8.1435566"
 | 
					 | 
				
			||||||
       fy="7.2678967"
 | 
					 | 
				
			||||||
       r="38.158695" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4542"
 | 
					 | 
				
			||||||
       id="radialGradient4548"
 | 
					 | 
				
			||||||
       cx="24.306795"
 | 
					 | 
				
			||||||
       cy="42.07798"
 | 
					 | 
				
			||||||
       fx="24.306795"
 | 
					 | 
				
			||||||
       fy="42.07798"
 | 
					 | 
				
			||||||
       r="15.821514"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.000000,0.000000,0.000000,0.284916,0.000000,30.08928)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4404"
 | 
					 | 
				
			||||||
       id="linearGradient4410"
 | 
					 | 
				
			||||||
       x1="16.812500"
 | 
					 | 
				
			||||||
       y1="1.8750000"
 | 
					 | 
				
			||||||
       x2="16.812500"
 | 
					 | 
				
			||||||
       y2="4.7187500"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(-1.319549,0.000000,0.000000,1.362060,40.38853,-0.362057)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient5866"
 | 
					 | 
				
			||||||
       id="linearGradient5872"
 | 
					 | 
				
			||||||
       x1="19.452349"
 | 
					 | 
				
			||||||
       y1="13.174174"
 | 
					 | 
				
			||||||
       x2="19.685436"
 | 
					 | 
				
			||||||
       y2="27.095339"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.224255,0.000000,0.000000,1.282176,0.371569,0.264657)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient5897"
 | 
					 | 
				
			||||||
       id="linearGradient5903"
 | 
					 | 
				
			||||||
       x1="19.000000"
 | 
					 | 
				
			||||||
       y1="9.7738247"
 | 
					 | 
				
			||||||
       x2="19.000000"
 | 
					 | 
				
			||||||
       y2="15.635596"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.319549,0.000000,0.000000,2.133926,-4.476133,-14.64845)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2590"
 | 
					 | 
				
			||||||
       id="linearGradient2596"
 | 
					 | 
				
			||||||
       x1="19.970377"
 | 
					 | 
				
			||||||
       y1="6.1167107"
 | 
					 | 
				
			||||||
       x2="19.970377"
 | 
					 | 
				
			||||||
       y2="2.53125"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.319549,0.000000,0.000000,1.280356,-5.745298,0.249007)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2598"
 | 
					 | 
				
			||||||
       id="linearGradient2604"
 | 
					 | 
				
			||||||
       x1="18.431311"
 | 
					 | 
				
			||||||
       y1="19.119474"
 | 
					 | 
				
			||||||
       x2="18.402472"
 | 
					 | 
				
			||||||
       y2="4.2702327"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.319549,0.000000,0.000000,1.299013,-3.106200,-1.336165)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2896"
 | 
					 | 
				
			||||||
       id="linearGradient2902"
 | 
					 | 
				
			||||||
       x1="14.584077"
 | 
					 | 
				
			||||||
       y1="1.6392649"
 | 
					 | 
				
			||||||
       x2="14.552828"
 | 
					 | 
				
			||||||
       y2="2.4912448"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.000000,0.000000,0.000000,1.594214,0.000000,-0.790249)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2906"
 | 
					 | 
				
			||||||
       id="linearGradient2912"
 | 
					 | 
				
			||||||
       x1="13.354311"
 | 
					 | 
				
			||||||
       y1="1.4866425"
 | 
					 | 
				
			||||||
       x2="14.075844"
 | 
					 | 
				
			||||||
       y2="2.4017651"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.000000,0.000000,0.000000,1.184816,0.000000,-0.727880)" />
 | 
					 | 
				
			||||||
  </defs>
 | 
					 | 
				
			||||||
  <sodipodi:namedview
 | 
					 | 
				
			||||||
     inkscape:window-y="158"
 | 
					 | 
				
			||||||
     inkscape:window-x="433"
 | 
					 | 
				
			||||||
     inkscape:window-height="690"
 | 
					 | 
				
			||||||
     inkscape:window-width="872"
 | 
					 | 
				
			||||||
     inkscape:document-units="px"
 | 
					 | 
				
			||||||
     inkscape:grid-bbox="true"
 | 
					 | 
				
			||||||
     showgrid="false"
 | 
					 | 
				
			||||||
     inkscape:current-layer="layer5"
 | 
					 | 
				
			||||||
     inkscape:cy="24"
 | 
					 | 
				
			||||||
     inkscape:cx="24"
 | 
					 | 
				
			||||||
     inkscape:zoom="9.8333333"
 | 
					 | 
				
			||||||
     inkscape:pageshadow="2"
 | 
					 | 
				
			||||||
     inkscape:pageopacity="0.0"
 | 
					 | 
				
			||||||
     borderopacity="0.25490196"
 | 
					 | 
				
			||||||
     bordercolor="#666666"
 | 
					 | 
				
			||||||
     pagecolor="#ffffff"
 | 
					 | 
				
			||||||
     id="base"
 | 
					 | 
				
			||||||
     inkscape:showpageshadow="false"
 | 
					 | 
				
			||||||
     showguides="true"
 | 
					 | 
				
			||||||
     inkscape:guide-bbox="true"
 | 
					 | 
				
			||||||
     inkscape:window-maximized="0" />
 | 
					 | 
				
			||||||
  <metadata
 | 
					 | 
				
			||||||
     id="metadata4">
 | 
					 | 
				
			||||||
    <rdf:RDF>
 | 
					 | 
				
			||||||
      <cc:Work
 | 
					 | 
				
			||||||
         rdf:about="">
 | 
					 | 
				
			||||||
        <dc:format>image/svg+xml</dc:format>
 | 
					 | 
				
			||||||
        <dc:type
 | 
					 | 
				
			||||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
					 | 
				
			||||||
        <dc:title>New Bookmark</dc:title>
 | 
					 | 
				
			||||||
        <dc:subject>
 | 
					 | 
				
			||||||
          <rdf:Bag>
 | 
					 | 
				
			||||||
            <rdf:li>bookmark</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>remember</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>favorite</rdf:li>
 | 
					 | 
				
			||||||
          </rdf:Bag>
 | 
					 | 
				
			||||||
        </dc:subject>
 | 
					 | 
				
			||||||
        <cc:license
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
 | 
					 | 
				
			||||||
        <dc:creator>
 | 
					 | 
				
			||||||
          <cc:Agent>
 | 
					 | 
				
			||||||
            <dc:title>Andreas Nilsson</dc:title>
 | 
					 | 
				
			||||||
          </cc:Agent>
 | 
					 | 
				
			||||||
        </dc:creator>
 | 
					 | 
				
			||||||
        <dc:source />
 | 
					 | 
				
			||||||
        <dc:contributor>
 | 
					 | 
				
			||||||
          <cc:Agent>
 | 
					 | 
				
			||||||
            <dc:title>Jakub Steiner</dc:title>
 | 
					 | 
				
			||||||
          </cc:Agent>
 | 
					 | 
				
			||||||
        </dc:contributor>
 | 
					 | 
				
			||||||
        <dc:description>create bookmark action</dc:description>
 | 
					 | 
				
			||||||
      </cc:Work>
 | 
					 | 
				
			||||||
      <cc:License
 | 
					 | 
				
			||||||
         rdf:about="http://creativecommons.org/licenses/publicdomain/">
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#Reproduction" />
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#Distribution" />
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
 | 
					 | 
				
			||||||
      </cc:License>
 | 
					 | 
				
			||||||
    </rdf:RDF>
 | 
					 | 
				
			||||||
  </metadata>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer"
 | 
					 | 
				
			||||||
     id="layer6"
 | 
					 | 
				
			||||||
     inkscape:label="Shadow">
 | 
					 | 
				
			||||||
    <g
 | 
					 | 
				
			||||||
       style="display:inline"
 | 
					 | 
				
			||||||
       id="g5022"
 | 
					 | 
				
			||||||
       transform="matrix(2.165152e-2,0,0,1.485743e-2,43.0076,42.68539)">
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         y="-150.69685"
 | 
					 | 
				
			||||||
         x="-1559.2523"
 | 
					 | 
				
			||||||
         height="478.35718"
 | 
					 | 
				
			||||||
         width="1339.6335"
 | 
					 | 
				
			||||||
         id="rect4173"
 | 
					 | 
				
			||||||
         style="opacity:0.40206185;color:black;fill:url(#linearGradient5027);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
      <path
 | 
					 | 
				
			||||||
         sodipodi:nodetypes="cccc"
 | 
					 | 
				
			||||||
         id="path5058"
 | 
					 | 
				
			||||||
         d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
 | 
					 | 
				
			||||||
         style="opacity:0.40206185;color:black;fill:url(#radialGradient5029);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
      <path
 | 
					 | 
				
			||||||
         style="opacity:0.40206185;color:black;fill:url(#radialGradient5031);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
         d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
 | 
					 | 
				
			||||||
         id="path5018"
 | 
					 | 
				
			||||||
         sodipodi:nodetypes="cccc" />
 | 
					 | 
				
			||||||
    </g>
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     style="display:inline"
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer"
 | 
					 | 
				
			||||||
     inkscape:label="Base"
 | 
					 | 
				
			||||||
     id="layer1">
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="color:#000000;fill:url(#radialGradient15658);fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient15656);stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
       id="rect15391"
 | 
					 | 
				
			||||||
       width="34.875000"
 | 
					 | 
				
			||||||
       height="41.063431"
 | 
					 | 
				
			||||||
       x="6.5000000"
 | 
					 | 
				
			||||||
       y="3.5000000"
 | 
					 | 
				
			||||||
       ry="1.1490481"
 | 
					 | 
				
			||||||
       rx="1.1490486" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient15668);stroke-width:0.99999958;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
       id="rect15660"
 | 
					 | 
				
			||||||
       width="32.937012"
 | 
					 | 
				
			||||||
       height="39.028210"
 | 
					 | 
				
			||||||
       x="7.5024552"
 | 
					 | 
				
			||||||
       y="4.5010486"
 | 
					 | 
				
			||||||
       ry="0.14904849"
 | 
					 | 
				
			||||||
       rx="0.14904852" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.98855311;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:0.017543854"
 | 
					 | 
				
			||||||
       d="M 11.505723,5.4942766 L 11.505723,43.400869"
 | 
					 | 
				
			||||||
       id="path15672"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:0.20467831"
 | 
					 | 
				
			||||||
       d="M 12.500000,5.0205154 L 12.500000,43.038228"
 | 
					 | 
				
			||||||
       id="path15674"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cc" />
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer"
 | 
					 | 
				
			||||||
     id="layer5"
 | 
					 | 
				
			||||||
     inkscape:label="Text"
 | 
					 | 
				
			||||||
     style="display:inline">
 | 
					 | 
				
			||||||
    <g
 | 
					 | 
				
			||||||
       id="g2188">
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect15686"
 | 
					 | 
				
			||||||
         width="20.000006"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="15.999994"
 | 
					 | 
				
			||||||
         y="9.0000000"
 | 
					 | 
				
			||||||
         rx="0.13778631"
 | 
					 | 
				
			||||||
         ry="0.065390877" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect15688"
 | 
					 | 
				
			||||||
         width="20.000006"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="15.999994"
 | 
					 | 
				
			||||||
         y="11.000000"
 | 
					 | 
				
			||||||
         rx="0.13778631"
 | 
					 | 
				
			||||||
         ry="0.065390877" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect15690"
 | 
					 | 
				
			||||||
         width="20.000006"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="15.999994"
 | 
					 | 
				
			||||||
         y="13.000000"
 | 
					 | 
				
			||||||
         rx="0.13778631"
 | 
					 | 
				
			||||||
         ry="0.065390877" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect15692"
 | 
					 | 
				
			||||||
         width="20.000006"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="15.999994"
 | 
					 | 
				
			||||||
         y="15.000000"
 | 
					 | 
				
			||||||
         rx="0.13778631"
 | 
					 | 
				
			||||||
         ry="0.065390877" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect15694"
 | 
					 | 
				
			||||||
         width="20.000006"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="15.999994"
 | 
					 | 
				
			||||||
         y="17.000000"
 | 
					 | 
				
			||||||
         rx="0.13778631"
 | 
					 | 
				
			||||||
         ry="0.065390877" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect15696"
 | 
					 | 
				
			||||||
         width="20.000006"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="15.999994"
 | 
					 | 
				
			||||||
         y="19.000000"
 | 
					 | 
				
			||||||
         rx="0.13778631"
 | 
					 | 
				
			||||||
         ry="0.065390877" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect15698"
 | 
					 | 
				
			||||||
         width="20.000006"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="15.999994"
 | 
					 | 
				
			||||||
         y="21.000000"
 | 
					 | 
				
			||||||
         rx="0.13778631"
 | 
					 | 
				
			||||||
         ry="0.065390877" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect15700"
 | 
					 | 
				
			||||||
         width="20.000006"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="15.999994"
 | 
					 | 
				
			||||||
         y="23.000000"
 | 
					 | 
				
			||||||
         rx="0.13778631"
 | 
					 | 
				
			||||||
         ry="0.065390877" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect15732"
 | 
					 | 
				
			||||||
         width="9.0000057"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="15.999986"
 | 
					 | 
				
			||||||
         y="25.000000"
 | 
					 | 
				
			||||||
         rx="0.062003858"
 | 
					 | 
				
			||||||
         ry="0.065390877" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect15736"
 | 
					 | 
				
			||||||
         width="20.000006"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="15.999986"
 | 
					 | 
				
			||||||
         y="29.000000"
 | 
					 | 
				
			||||||
         rx="0.13778631"
 | 
					 | 
				
			||||||
         ry="0.065390877" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect15738"
 | 
					 | 
				
			||||||
         width="20.000006"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="15.999986"
 | 
					 | 
				
			||||||
         y="31.000000"
 | 
					 | 
				
			||||||
         rx="0.13778631"
 | 
					 | 
				
			||||||
         ry="0.065390877" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect15740"
 | 
					 | 
				
			||||||
         width="20.000006"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="15.999986"
 | 
					 | 
				
			||||||
         y="33.000000"
 | 
					 | 
				
			||||||
         rx="0.13778631"
 | 
					 | 
				
			||||||
         ry="0.065390877" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect15742"
 | 
					 | 
				
			||||||
         width="20.000006"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="15.999986"
 | 
					 | 
				
			||||||
         y="35.000000"
 | 
					 | 
				
			||||||
         rx="0.13778631"
 | 
					 | 
				
			||||||
         ry="0.065390877" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect15744"
 | 
					 | 
				
			||||||
         width="14.000014"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="15.999986"
 | 
					 | 
				
			||||||
         y="37.000000"
 | 
					 | 
				
			||||||
         rx="0.096450485"
 | 
					 | 
				
			||||||
         ry="0.065390877" />
 | 
					 | 
				
			||||||
    </g>
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="opacity:0.28021976;fill:url(#linearGradient5872);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 | 
					 | 
				
			||||||
       d="M 28.245858,31.324906 L 21.147869,27.133701 L 14.30757,30.8838 L 13.761859,3.9475667 L 28.549598,3.9475667 L 28.245858,31.324906 z "
 | 
					 | 
				
			||||||
       id="path5138"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cccccc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:url(#linearGradient2604);fill-opacity:1;fill-rule:evenodd;stroke:#364878;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline"
 | 
					 | 
				
			||||||
       d="M 12.427339,3.5180202 C 12.427339,3.5180202 12.240033,0.60520607 15.107867,0.54270607 L 25.119343,0.50728624 C 26.277287,0.50728624 26.581888,1.1910178 26.581888,2.1095589 L 26.581888,29.729916 L 20.545426,24.533862 L 14.674346,29.729916 L 14.591655,3.519629 L 12.427339,3.5180202 z "
 | 
					 | 
				
			||||||
       id="path2204"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccccccc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="opacity:0.4450549;fill:url(#linearGradient4410);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 | 
					 | 
				
			||||||
       d="M 13.030252,3.0117919 C 13.011046,2.225362 13.312918,1.0801307 15.375418,1.0176307 L 25.027906,1 C 25.640922,1 26.090152,1.1674319 26.090152,1.7994802 L 26.060994,10.491851 L 15.317102,10.491851 L 15.192102,2.9993251 C 15.192102,2.9993251 13.030252,3.0117919 13.030252,3.0117919 z "
 | 
					 | 
				
			||||||
       id="path3668"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cccccccs" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="opacity:0.28021976;fill:url(#linearGradient5903);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
 | 
					 | 
				
			||||||
       id="rect5895"
 | 
					 | 
				
			||||||
       width="10.556392"
 | 
					 | 
				
			||||||
       height="12.803556"
 | 
					 | 
				
			||||||
       x="15.317101"
 | 
					 | 
				
			||||||
       y="6.6907959"
 | 
					 | 
				
			||||||
       rx="0.062003858"
 | 
					 | 
				
			||||||
       ry="0.065390877" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2596);stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.19125683;display:inline"
 | 
					 | 
				
			||||||
       d="M 24.476832,2.2095507 L 25.575535,3.113139 L 25.547445,27.511911 L 20.497463,23.203758 L 15.704084,27.415203 L 15.699081,2.7495618 L 24.476832,2.2095507 z "
 | 
					 | 
				
			||||||
       id="path5969"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccccc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="opacity:0.48295456;color:#000000;fill:url(#linearGradient2912);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.10533953;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
       d="M 15.158602,3.9384083 L 15.114407,1.0335178 C 12.983906,1.0335178 12.993087,2.9680775 12.993087,3.9384083 L 15.158602,3.9384083 z "
 | 
					 | 
				
			||||||
       id="path2894"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cccc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cccc"
 | 
					 | 
				
			||||||
       id="path2904"
 | 
					 | 
				
			||||||
       d="M 15.158602,3.9384086 L 15.114407,1.8247593 C 12.81631,1.8426926 12.993087,3.9384086 12.993087,3.9384086 L 15.158602,3.9384086 z "
 | 
					 | 
				
			||||||
       style="opacity:0.35795455;color:#000000;fill:url(#linearGradient2902);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.10533953;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 28 KiB  | 
@ -1,533 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
					 | 
				
			||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
					 | 
				
			||||||
<svg
 | 
					 | 
				
			||||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
					 | 
				
			||||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
					 | 
				
			||||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
					 | 
				
			||||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns:xlink="http://www.w3.org/1999/xlink"
 | 
					 | 
				
			||||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
					 | 
				
			||||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
					 | 
				
			||||||
   sodipodi:docname="document-print.svg"
 | 
					 | 
				
			||||||
   sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/actions"
 | 
					 | 
				
			||||||
   inkscape:version="0.46"
 | 
					 | 
				
			||||||
   sodipodi:version="0.32"
 | 
					 | 
				
			||||||
   id="svg2994"
 | 
					 | 
				
			||||||
   height="48px"
 | 
					 | 
				
			||||||
   width="48px"
 | 
					 | 
				
			||||||
   inkscape:output_extension="org.inkscape.output.svg.inkscape"
 | 
					 | 
				
			||||||
   viewbox="0 0 48 48">
 | 
					 | 
				
			||||||
  <defs
 | 
					 | 
				
			||||||
     id="defs3">
 | 
					 | 
				
			||||||
    <inkscape:perspective
 | 
					 | 
				
			||||||
       sodipodi:type="inkscape:persp3d"
 | 
					 | 
				
			||||||
       inkscape:vp_x="0 : 24 : 1"
 | 
					 | 
				
			||||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
					 | 
				
			||||||
       inkscape:vp_z="48 : 24 : 1"
 | 
					 | 
				
			||||||
       inkscape:persp3d-origin="24 : 16 : 1"
 | 
					 | 
				
			||||||
       id="perspective84" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient5060"
 | 
					 | 
				
			||||||
       id="radialGradient5031"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
 | 
					 | 
				
			||||||
       cx="605.71429"
 | 
					 | 
				
			||||||
       cy="486.64789"
 | 
					 | 
				
			||||||
       fx="605.71429"
 | 
					 | 
				
			||||||
       fy="486.64789"
 | 
					 | 
				
			||||||
       r="117.14286" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient5060">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop5062" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop5064" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient5060"
 | 
					 | 
				
			||||||
       id="radialGradient5029"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
 | 
					 | 
				
			||||||
       cx="605.71429"
 | 
					 | 
				
			||||||
       cy="486.64789"
 | 
					 | 
				
			||||||
       fx="605.71429"
 | 
					 | 
				
			||||||
       fy="486.64789"
 | 
					 | 
				
			||||||
       r="117.14286" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient5048">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop5050" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop5056"
 | 
					 | 
				
			||||||
         offset="0.5"
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop5052" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient5048"
 | 
					 | 
				
			||||||
       id="linearGradient5027"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
 | 
					 | 
				
			||||||
       x1="302.85715"
 | 
					 | 
				
			||||||
       y1="366.64789"
 | 
					 | 
				
			||||||
       x2="302.85715"
 | 
					 | 
				
			||||||
       y2="609.50507" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient7612">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop7614" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop7616" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient7612"
 | 
					 | 
				
			||||||
       id="radialGradient7618"
 | 
					 | 
				
			||||||
       cx="24.000000"
 | 
					 | 
				
			||||||
       cy="41.875000"
 | 
					 | 
				
			||||||
       fx="24.000000"
 | 
					 | 
				
			||||||
       fy="41.875000"
 | 
					 | 
				
			||||||
       r="19.125000"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.000000,0.000000,0.000000,0.333333,0.000000,27.91667)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient4762">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0.12371134;"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         id="stop4764" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4768"
 | 
					 | 
				
			||||||
         offset="0.10344828"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop4766" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient4741">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4743"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#dcdcda;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4745"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#bab9b7;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient4733">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4735"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0.23711340;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4737"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient4698">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4700"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#fffffd;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#bbbbb9;stop-opacity:1.0000000;"
 | 
					 | 
				
			||||||
         offset="0.50000000"
 | 
					 | 
				
			||||||
         id="stop4706" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4702"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient4688">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4690"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#666666;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4692"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient4680"
 | 
					 | 
				
			||||||
       inkscape:collect="always">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4682"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#f7f6f5;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4684"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         style="stop-color:#f7f6f5;stop-opacity:0;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient4668">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4670"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#8e8d87;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#cbc9c1;stop-opacity:1.0000000;"
 | 
					 | 
				
			||||||
         offset="0.27586207"
 | 
					 | 
				
			||||||
         id="stop4676" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4672"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#8e8d87;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient259">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop260"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#e0e0e0;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1.0000000;"
 | 
					 | 
				
			||||||
         offset="0.40546969"
 | 
					 | 
				
			||||||
         id="stop4886" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#cdcdcd;stop-opacity:1.0000000;"
 | 
					 | 
				
			||||||
         offset="0.53448278"
 | 
					 | 
				
			||||||
         id="stop4884" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop261"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#494949;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient15662">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop15664"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop15666"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       r="2.1227016"
 | 
					 | 
				
			||||||
       fy="26.925594"
 | 
					 | 
				
			||||||
       fx="9.1295490"
 | 
					 | 
				
			||||||
       cy="26.925594"
 | 
					 | 
				
			||||||
       cx="9.1295490"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       id="radialGradient1433"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4698"
 | 
					 | 
				
			||||||
       inkscape:collect="always" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       y2="72.064316"
 | 
					 | 
				
			||||||
       x2="9.9128132"
 | 
					 | 
				
			||||||
       y1="57.227650"
 | 
					 | 
				
			||||||
       x1="9.8698082"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(2.772086,0.000000,0.000000,0.360739,0.618718,2.883883)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       id="linearGradient1447"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4733"
 | 
					 | 
				
			||||||
       inkscape:collect="always" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       y2="54.136139"
 | 
					 | 
				
			||||||
       x2="10.338233"
 | 
					 | 
				
			||||||
       y1="64.652260"
 | 
					 | 
				
			||||||
       x1="10.338233"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(2.369844,0.000000,0.000000,0.421969,0.000000,2.000000)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       id="linearGradient1451"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4680"
 | 
					 | 
				
			||||||
       inkscape:collect="always" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       y2="62.282467"
 | 
					 | 
				
			||||||
       x2="9.7052784"
 | 
					 | 
				
			||||||
       y1="70.724976"
 | 
					 | 
				
			||||||
       x1="9.7316532"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(2.369844,0.000000,0.000000,0.421969,0.000000,2.000000)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       id="linearGradient1453"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4688"
 | 
					 | 
				
			||||||
       inkscape:collect="always" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       y2="19.337463"
 | 
					 | 
				
			||||||
       x2="20.717800"
 | 
					 | 
				
			||||||
       y1="25.140253"
 | 
					 | 
				
			||||||
       x1="20.771229"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.198769,0,0,0.853565,-0.143086,2.034513)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       id="linearGradient1456"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient15662"
 | 
					 | 
				
			||||||
       inkscape:collect="always" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       y2="25.247311"
 | 
					 | 
				
			||||||
       x2="24.789707"
 | 
					 | 
				
			||||||
       y1="3.6785457"
 | 
					 | 
				
			||||||
       x1="25.056711"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(0.944939,0,0,1.076147,6.844577e-2,4.093177)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       id="linearGradient1459"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient259"
 | 
					 | 
				
			||||||
       inkscape:collect="always" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       y2="58.831264"
 | 
					 | 
				
			||||||
       x2="15.487823"
 | 
					 | 
				
			||||||
       y1="32.539238"
 | 
					 | 
				
			||||||
       x1="15.387969"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.490161,0,0,0.668741,8.895132e-2,2)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       id="linearGradient1464"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4762"
 | 
					 | 
				
			||||||
       inkscape:collect="always" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       y2="88.294930"
 | 
					 | 
				
			||||||
       x2="18.972126"
 | 
					 | 
				
			||||||
       y1="88.294930"
 | 
					 | 
				
			||||||
       x1="1.8456430"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(2.291824,0,0,0.434269,8.855179e-2,2)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       id="linearGradient1468"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4741"
 | 
					 | 
				
			||||||
       inkscape:collect="always" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       y2="88.294933"
 | 
					 | 
				
			||||||
       x2="18.972126"
 | 
					 | 
				
			||||||
       y1="88.294933"
 | 
					 | 
				
			||||||
       x1="1.8456431"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(2.30272,0,0,0.437918,0,0.584034)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       id="linearGradient1471"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4668"
 | 
					 | 
				
			||||||
       inkscape:collect="always" />
 | 
					 | 
				
			||||||
  </defs>
 | 
					 | 
				
			||||||
  <sodipodi:namedview
 | 
					 | 
				
			||||||
     inkscape:window-y="160"
 | 
					 | 
				
			||||||
     inkscape:window-x="331"
 | 
					 | 
				
			||||||
     inkscape:window-height="688"
 | 
					 | 
				
			||||||
     inkscape:window-width="872"
 | 
					 | 
				
			||||||
     inkscape:guide-bbox="true"
 | 
					 | 
				
			||||||
     showguides="true"
 | 
					 | 
				
			||||||
     inkscape:document-units="px"
 | 
					 | 
				
			||||||
     inkscape:grid-bbox="true"
 | 
					 | 
				
			||||||
     showgrid="false"
 | 
					 | 
				
			||||||
     inkscape:current-layer="layer1"
 | 
					 | 
				
			||||||
     inkscape:cy="-18.264187"
 | 
					 | 
				
			||||||
     inkscape:cx="-72.591911"
 | 
					 | 
				
			||||||
     inkscape:zoom="1"
 | 
					 | 
				
			||||||
     inkscape:pageshadow="2"
 | 
					 | 
				
			||||||
     inkscape:pageopacity="0.0"
 | 
					 | 
				
			||||||
     borderopacity="0.090196078"
 | 
					 | 
				
			||||||
     bordercolor="#666666"
 | 
					 | 
				
			||||||
     pagecolor="#ffffff"
 | 
					 | 
				
			||||||
     id="base"
 | 
					 | 
				
			||||||
     inkscape:showpageshadow="false"
 | 
					 | 
				
			||||||
     fill="#729fcf" />
 | 
					 | 
				
			||||||
  <metadata
 | 
					 | 
				
			||||||
     id="metadata4">
 | 
					 | 
				
			||||||
    <rdf:RDF>
 | 
					 | 
				
			||||||
      <cc:Work
 | 
					 | 
				
			||||||
         rdf:about="">
 | 
					 | 
				
			||||||
        <dc:format>image/svg+xml</dc:format>
 | 
					 | 
				
			||||||
        <dc:type
 | 
					 | 
				
			||||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
					 | 
				
			||||||
        <dc:title>Print Document</dc:title>
 | 
					 | 
				
			||||||
        <dc:creator>
 | 
					 | 
				
			||||||
          <cc:Agent>
 | 
					 | 
				
			||||||
            <dc:title>Jakub Steiner</dc:title>
 | 
					 | 
				
			||||||
          </cc:Agent>
 | 
					 | 
				
			||||||
        </dc:creator>
 | 
					 | 
				
			||||||
        <cc:license
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
 | 
					 | 
				
			||||||
        <dc:source>http://jimmac.musichall.cz</dc:source>
 | 
					 | 
				
			||||||
        <dc:subject>
 | 
					 | 
				
			||||||
          <rdf:Bag>
 | 
					 | 
				
			||||||
            <rdf:li>document</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>lpr</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>print</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>local</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>laser</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>bubblejet</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>inkjet</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>print</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>output</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>cups</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>lpd</rdf:li>
 | 
					 | 
				
			||||||
          </rdf:Bag>
 | 
					 | 
				
			||||||
        </dc:subject>
 | 
					 | 
				
			||||||
      </cc:Work>
 | 
					 | 
				
			||||||
      <cc:License
 | 
					 | 
				
			||||||
         rdf:about="http://creativecommons.org/licenses/publicdomain/">
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#Reproduction" />
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#Distribution" />
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
 | 
					 | 
				
			||||||
      </cc:License>
 | 
					 | 
				
			||||||
    </rdf:RDF>
 | 
					 | 
				
			||||||
  </metadata>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer"
 | 
					 | 
				
			||||||
     inkscape:label="Layer 1"
 | 
					 | 
				
			||||||
     id="layer1">
 | 
					 | 
				
			||||||
    <g
 | 
					 | 
				
			||||||
       style="display:inline"
 | 
					 | 
				
			||||||
       id="g5022"
 | 
					 | 
				
			||||||
       transform="matrix(2.411405e-2,0,0,1.929202e-2,45.48953,39.75228)">
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         y="-150.69685"
 | 
					 | 
				
			||||||
         x="-1559.2523"
 | 
					 | 
				
			||||||
         height="478.35718"
 | 
					 | 
				
			||||||
         width="1339.6335"
 | 
					 | 
				
			||||||
         id="rect4173"
 | 
					 | 
				
			||||||
         style="opacity:0.40206185;color:black;fill:url(#linearGradient5027);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
      <path
 | 
					 | 
				
			||||||
         sodipodi:nodetypes="cccc"
 | 
					 | 
				
			||||||
         id="path5058"
 | 
					 | 
				
			||||||
         d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
 | 
					 | 
				
			||||||
         style="opacity:0.40206185;color:black;fill:url(#radialGradient5029);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
      <path
 | 
					 | 
				
			||||||
         style="opacity:0.40206185;color:black;fill:url(#radialGradient5031);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
         d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
 | 
					 | 
				
			||||||
         id="path5018"
 | 
					 | 
				
			||||||
         sodipodi:nodetypes="cccc" />
 | 
					 | 
				
			||||||
    </g>
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       ry="1.7115477"
 | 
					 | 
				
			||||||
       rx="1.7115483"
 | 
					 | 
				
			||||||
       y="36.004189"
 | 
					 | 
				
			||||||
       x="4.75"
 | 
					 | 
				
			||||||
       height="6.4915943"
 | 
					 | 
				
			||||||
       width="38.4375"
 | 
					 | 
				
			||||||
       id="rect4652"
 | 
					 | 
				
			||||||
       style="fill:url(#linearGradient1471);fill-opacity:1;stroke:#595959;stroke-width:0.99999982;stroke-miterlimit:4;stroke-opacity:1" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cssssssssssss"
 | 
					 | 
				
			||||||
       id="rect4609"
 | 
					 | 
				
			||||||
       d="M 7.1308961,21.5 L 40.870615,21.5 C 41.255661,21.5 41.747648,21.788155 42.051049,22.223919 C 42.354451,22.659684 43.787518,24.83394 44.109448,25.297964 C 44.431378,25.761987 44.502397,26.201852 44.502397,26.774049 L 44.502397,38.850951 C 44.502397,39.764524 43.770402,40.5 42.861152,40.5 L 5.1403596,40.5 C 4.2311094,40.5 3.4991138,39.764524 3.4991138,38.850951 L 3.4991138,26.774049 C 3.4991138,26.280031 3.6002798,25.571641 3.9455202,25.120718 C 4.3811666,24.551713 5.5498664,22.57277 5.8581276,22.153118 C 6.1663887,21.733467 6.7324461,21.5 7.1308961,21.5 z "
 | 
					 | 
				
			||||||
       style="color:#000000;fill:url(#linearGradient1468);fill-opacity:1;fill-rule:nonzero;stroke:#676767;stroke-width:1.00000036;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cssssssss"
 | 
					 | 
				
			||||||
       id="path4718"
 | 
					 | 
				
			||||||
       d="M 7.705278,21.975532 C 7.20729,21.975532 6.5669691,22.107308 6.3043987,22.511224 L 4.4657443,25.339651 C 4.169761,25.794966 4.4993705,26.868141 5.3900051,26.868141 L 42.678553,26.868141 C 43.883282,26.868141 43.8868,25.858073 43.602814,25.428039 L 41.851714,22.776389 C 41.534204,22.295589 41.418956,21.975532 40.625945,21.975532 L 7.705278,21.975532 z "
 | 
					 | 
				
			||||||
       style="fill:#fbfbfb;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient1464);stroke-width:0.94696701;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
       d="M 7.6002951,22.445756 L 40.374658,22.445756 C 40.739745,22.445756 41.206233,22.718629 41.493909,23.131283 C 41.781585,23.543938 42.788049,25.160945 43.093293,25.60036 C 43.398536,26.039775 43.528159,26.456312 43.528159,26.998164 L 43.528159,38.279261 C 43.528159,39.144385 43.394653,39.528356 42.532529,39.528356 L 5.530506,39.528356 C 4.6683828,39.528356 4.472593,39.144385 4.472593,38.279261 L 4.472593,26.998164 C 4.472593,26.530345 4.6930819,25.859523 5.0204282,25.432514 C 5.4334949,24.893685 6.1012112,23.461633 6.393495,23.064237 C 6.6857789,22.666841 7.222497,22.445756 7.6002951,22.445756 z "
 | 
					 | 
				
			||||||
       id="path4750"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cssssssssssss" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccccc"
 | 
					 | 
				
			||||||
       id="rect15391"
 | 
					 | 
				
			||||||
       d="M 11.68177,4.4977642 L 36.313839,4.4977642 C 36.964072,4.4977642 37.487546,5.007949 37.487546,5.6416762 L 37.487546,24.348117 L 10.508063,24.348117 L 10.508063,5.6416762 C 10.508063,5.007949 11.031536,4.4977642 11.68177,4.4977642 z "
 | 
					 | 
				
			||||||
       style="color:#000000;fill:url(#linearGradient1459);fill-opacity:1;fill-rule:nonzero;stroke:#898989;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient1456);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
       id="rect15660"
 | 
					 | 
				
			||||||
       width="25.000576"
 | 
					 | 
				
			||||||
       height="18.836374"
 | 
					 | 
				
			||||||
       x="11.498513"
 | 
					 | 
				
			||||||
       y="5.4992466"
 | 
					 | 
				
			||||||
       ry="0.17677675"
 | 
					 | 
				
			||||||
       rx="0.17677672" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       ry="1.7115483"
 | 
					 | 
				
			||||||
       rx="1.7115483"
 | 
					 | 
				
			||||||
       y="27.375000"
 | 
					 | 
				
			||||||
       x="6.8750000"
 | 
					 | 
				
			||||||
       height="5.1875000"
 | 
					 | 
				
			||||||
       width="33.750000"
 | 
					 | 
				
			||||||
       id="rect4678"
 | 
					 | 
				
			||||||
       style="fill:url(#linearGradient1451);fill-opacity:1.0000000;stroke:url(#linearGradient1453);stroke-width:1.0000000;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       transform="translate(0.000000,2.000000)"
 | 
					 | 
				
			||||||
       d="M 10.871767 27.626486 A 1.2816310 1.2816310 0 1 1  8.3085046,27.626486 A 1.2816310 1.2816310 0 1 1  10.871767 27.626486 z"
 | 
					 | 
				
			||||||
       sodipodi:ry="1.2816310"
 | 
					 | 
				
			||||||
       sodipodi:rx="1.2816310"
 | 
					 | 
				
			||||||
       sodipodi:cy="27.626486"
 | 
					 | 
				
			||||||
       sodipodi:cx="9.5901356"
 | 
					 | 
				
			||||||
       id="path4696"
 | 
					 | 
				
			||||||
       style="fill:url(#radialGradient1433);fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
 | 
					 | 
				
			||||||
       sodipodi:type="arc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="csscssssc"
 | 
					 | 
				
			||||||
       id="path4731"
 | 
					 | 
				
			||||||
       d="M 11.743718,25.416053 L 37.306218,25.478553 C 37.993716,25.480234 38.294038,25.107558 38.243718,24.478553 L 38.118718,22.916053 L 39.984835,22.916053 C 40.797335,22.916053 40.975035,23.108616 41.172335,23.478553 L 41.672335,24.416053 C 42.199130,25.403793 43.483508,26.390165 42.170495,26.390165 C 37.667784,26.390165 13.993718,26.041053 11.743718,25.416053 z "
 | 
					 | 
				
			||||||
       style="fill:url(#linearGradient1447);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;opacity:0.36571429" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
 | 
					 | 
				
			||||||
       d="M 42.9375,26.5 L 4.8125,26.5"
 | 
					 | 
				
			||||||
       id="path4760"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cc" />
 | 
					 | 
				
			||||||
    <g
 | 
					 | 
				
			||||||
       transform="translate(0.000000,2.000000)"
 | 
					 | 
				
			||||||
       style="opacity:0.43575415"
 | 
					 | 
				
			||||||
       id="g4849">
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#000000;fill-opacity:0.29239765;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect4831"
 | 
					 | 
				
			||||||
         width="19.000000"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="14.000000"
 | 
					 | 
				
			||||||
         y="5.0000000" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         y="7.0000000"
 | 
					 | 
				
			||||||
         x="14.000000"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         width="19.000000"
 | 
					 | 
				
			||||||
         id="rect4833"
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#000000;fill-opacity:0.29239765;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#000000;fill-opacity:0.29239765;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect4835"
 | 
					 | 
				
			||||||
         width="19.000000"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="14.000000"
 | 
					 | 
				
			||||||
         y="9.0000000" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         y="11.000000"
 | 
					 | 
				
			||||||
         x="14.000000"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         width="19.000000"
 | 
					 | 
				
			||||||
         id="rect4837"
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#000000;fill-opacity:0.29239765;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         style="color:#000000;fill:#000000;fill-opacity:0.29239765;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
         id="rect4839"
 | 
					 | 
				
			||||||
         width="11.000000"
 | 
					 | 
				
			||||||
         height="1.0000000"
 | 
					 | 
				
			||||||
         x="14.000000"
 | 
					 | 
				
			||||||
         y="13.000000" />
 | 
					 | 
				
			||||||
    </g>
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer"
 | 
					 | 
				
			||||||
     id="layer2"
 | 
					 | 
				
			||||||
     inkscape:label="arrow">
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cccccccc"
 | 
					 | 
				
			||||||
       id="path8643"
 | 
					 | 
				
			||||||
       d="M 21.02159,20.989431 L 27.989391,20.989431 L 27.989391,16.064984 L 31,16.064984 L 24.553756,8 L 17.435622,15.986875 L 21.023684,15.986875 L 21.02159,20.989431 z "
 | 
					 | 
				
			||||||
       style="opacity:1;color:#000000;fill:#a7a7a7;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999958;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 23 KiB  | 
@ -1,620 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
					 | 
				
			||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
					 | 
				
			||||||
<svg
 | 
					 | 
				
			||||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
					 | 
				
			||||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
					 | 
				
			||||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
					 | 
				
			||||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns:xlink="http://www.w3.org/1999/xlink"
 | 
					 | 
				
			||||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
					 | 
				
			||||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
					 | 
				
			||||||
   sodipodi:docname="document-save.svg"
 | 
					 | 
				
			||||||
   sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/actions"
 | 
					 | 
				
			||||||
   inkscape:version="0.46"
 | 
					 | 
				
			||||||
   sodipodi:version="0.32"
 | 
					 | 
				
			||||||
   id="svg2913"
 | 
					 | 
				
			||||||
   height="48px"
 | 
					 | 
				
			||||||
   width="48px"
 | 
					 | 
				
			||||||
   inkscape:output_extension="org.inkscape.output.svg.inkscape"
 | 
					 | 
				
			||||||
   viewbox="0 0 48 48">
 | 
					 | 
				
			||||||
  <defs
 | 
					 | 
				
			||||||
     id="defs3">
 | 
					 | 
				
			||||||
    <inkscape:perspective
 | 
					 | 
				
			||||||
       sodipodi:type="inkscape:persp3d"
 | 
					 | 
				
			||||||
       inkscape:vp_x="0 : 24 : 1"
 | 
					 | 
				
			||||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
					 | 
				
			||||||
       inkscape:vp_z="48 : 24 : 1"
 | 
					 | 
				
			||||||
       inkscape:persp3d-origin="24 : 16 : 1"
 | 
					 | 
				
			||||||
       id="perspective104" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient5060"
 | 
					 | 
				
			||||||
       id="radialGradient5031"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
 | 
					 | 
				
			||||||
       cx="605.71429"
 | 
					 | 
				
			||||||
       cy="486.64789"
 | 
					 | 
				
			||||||
       fx="605.71429"
 | 
					 | 
				
			||||||
       fy="486.64789"
 | 
					 | 
				
			||||||
       r="117.14286" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient5060">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop5062" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop5064" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient5060"
 | 
					 | 
				
			||||||
       id="radialGradient5029"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
 | 
					 | 
				
			||||||
       cx="605.71429"
 | 
					 | 
				
			||||||
       cy="486.64789"
 | 
					 | 
				
			||||||
       fx="605.71429"
 | 
					 | 
				
			||||||
       fy="486.64789"
 | 
					 | 
				
			||||||
       r="117.14286" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient5048">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop5050" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop5056"
 | 
					 | 
				
			||||||
         offset="0.5"
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:black;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop5052" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient5048"
 | 
					 | 
				
			||||||
       id="linearGradient5027"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
 | 
					 | 
				
			||||||
       x1="302.85715"
 | 
					 | 
				
			||||||
       y1="366.64789"
 | 
					 | 
				
			||||||
       x2="302.85715"
 | 
					 | 
				
			||||||
       y2="609.50507" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient6925">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#204a87;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop6927" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#204a87;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop6929" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient6901">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#3465a4;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop6903" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#3465a4;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop6905" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient4991">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop4993" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop4995" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4991"
 | 
					 | 
				
			||||||
       id="radialGradient4997"
 | 
					 | 
				
			||||||
       cx="23.447077"
 | 
					 | 
				
			||||||
       cy="6.4576745"
 | 
					 | 
				
			||||||
       fx="23.447077"
 | 
					 | 
				
			||||||
       fy="6.4576745"
 | 
					 | 
				
			||||||
       r="19.0625"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(-1.314471,-1.006312e-2,-1.022964e-2,1.336221,46.22108,-4.909887)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2187"
 | 
					 | 
				
			||||||
       inkscape:collect="always">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop2189"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop2191"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2187"
 | 
					 | 
				
			||||||
       id="linearGradient1764"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(0.914114,1.412791e-16,-1.412791e-16,0.914114,-3.868698,-2.706902)"
 | 
					 | 
				
			||||||
       x1="33.059906"
 | 
					 | 
				
			||||||
       y1="27.394117"
 | 
					 | 
				
			||||||
       x2="12.624337"
 | 
					 | 
				
			||||||
       y2="12.583769" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient8662">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop8664" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop8666" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient8662"
 | 
					 | 
				
			||||||
       id="radialGradient8668"
 | 
					 | 
				
			||||||
       cx="24.837126"
 | 
					 | 
				
			||||||
       cy="36.421127"
 | 
					 | 
				
			||||||
       fx="24.837126"
 | 
					 | 
				
			||||||
       fy="36.421127"
 | 
					 | 
				
			||||||
       r="15.644737"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.000000,-7.816467e-32,-1.132409e-32,0.536723,-5.897962e-14,16.87306)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2555">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop2557"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#e6e6e6;stop-opacity:1.0000000;"
 | 
					 | 
				
			||||||
         offset="0.50000000"
 | 
					 | 
				
			||||||
         id="stop2561" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop2563"
 | 
					 | 
				
			||||||
         offset="0.75000000"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#e1e1e1;stop-opacity:1.0000000;"
 | 
					 | 
				
			||||||
         offset="0.84166664"
 | 
					 | 
				
			||||||
         id="stop2565" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop2559"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient4274">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0.25490198;"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         id="stop4276" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1.0000000;"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         id="stop4278" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient4264"
 | 
					 | 
				
			||||||
       inkscape:collect="always">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4266"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4268"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient4254"
 | 
					 | 
				
			||||||
       inkscape:collect="always">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4256"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4258"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient4244">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4246"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4248"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient4236"
 | 
					 | 
				
			||||||
       inkscape:collect="always">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4238"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#eeeeee;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4240"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         style="stop-color:#eeeeee;stop-opacity:0;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient4228">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4230"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4232"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient4184">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4186"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#838383;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop4188"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#bbbbbb;stop-opacity:0.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       gradientTransform="translate(0.795493,3.799180)"
 | 
					 | 
				
			||||||
       y2="35.281250"
 | 
					 | 
				
			||||||
       x2="24.687500"
 | 
					 | 
				
			||||||
       y1="35.281250"
 | 
					 | 
				
			||||||
       x1="7.0625000"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       id="linearGradient4209"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4184"
 | 
					 | 
				
			||||||
       inkscape:collect="always" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       y2="40.943935"
 | 
					 | 
				
			||||||
       x2="36.183067"
 | 
					 | 
				
			||||||
       y1="28.481176"
 | 
					 | 
				
			||||||
       x1="7.6046205"
 | 
					 | 
				
			||||||
       id="linearGradient4234"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4228"
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       gradientTransform="translate(0.000000,5.125000)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       y2="33.758667"
 | 
					 | 
				
			||||||
       x2="12.221823"
 | 
					 | 
				
			||||||
       y1="37.205811"
 | 
					 | 
				
			||||||
       x1="12.277412"
 | 
					 | 
				
			||||||
       id="linearGradient4242"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4236"
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       gradientTransform="translate(0.000000,5.125000)" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.286242,0.781698,-0.710782,1.169552,-2.354348,0.248140)"
 | 
					 | 
				
			||||||
       r="20.935817"
 | 
					 | 
				
			||||||
       fy="2.9585190"
 | 
					 | 
				
			||||||
       fx="15.571491"
 | 
					 | 
				
			||||||
       cy="2.9585190"
 | 
					 | 
				
			||||||
       cx="15.571491"
 | 
					 | 
				
			||||||
       id="radialGradient4250"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4244"
 | 
					 | 
				
			||||||
       inkscape:collect="always" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       y2="47.620636"
 | 
					 | 
				
			||||||
       x2="44.096100"
 | 
					 | 
				
			||||||
       y1="4.4331360"
 | 
					 | 
				
			||||||
       x1="12.378357"
 | 
					 | 
				
			||||||
       id="linearGradient4260"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4254"
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       gradientTransform="translate(0.000000,5.125000)" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.000000,0.000000,0.000000,0.651032,-2.885063e-16,9.455693)"
 | 
					 | 
				
			||||||
       r="23.555494"
 | 
					 | 
				
			||||||
       fy="27.096155"
 | 
					 | 
				
			||||||
       fx="23.201941"
 | 
					 | 
				
			||||||
       cy="27.096155"
 | 
					 | 
				
			||||||
       cx="23.201941"
 | 
					 | 
				
			||||||
       id="radialGradient4270"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4264"
 | 
					 | 
				
			||||||
       inkscape:collect="always" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       y2="26.357183"
 | 
					 | 
				
			||||||
       x2="23.688078"
 | 
					 | 
				
			||||||
       y1="11.318835"
 | 
					 | 
				
			||||||
       x1="23.688078"
 | 
					 | 
				
			||||||
       id="linearGradient4272"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient4274"
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       gradientTransform="translate(0.000000,5.125000)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2555"
 | 
					 | 
				
			||||||
       id="linearGradient2553"
 | 
					 | 
				
			||||||
       x1="33.431175"
 | 
					 | 
				
			||||||
       y1="31.964777"
 | 
					 | 
				
			||||||
       x2="21.747974"
 | 
					 | 
				
			||||||
       y2="11.780679"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient6901"
 | 
					 | 
				
			||||||
       id="linearGradient6907"
 | 
					 | 
				
			||||||
       x1="14.751649"
 | 
					 | 
				
			||||||
       y1="15.868432"
 | 
					 | 
				
			||||||
       x2="8.8953285"
 | 
					 | 
				
			||||||
       y2="16.743431"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient6925"
 | 
					 | 
				
			||||||
       id="linearGradient6931"
 | 
					 | 
				
			||||||
       x1="12.25"
 | 
					 | 
				
			||||||
       y1="18.25"
 | 
					 | 
				
			||||||
       x2="7"
 | 
					 | 
				
			||||||
       y2="21.118431"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
  </defs>
 | 
					 | 
				
			||||||
  <sodipodi:namedview
 | 
					 | 
				
			||||||
     inkscape:window-y="30"
 | 
					 | 
				
			||||||
     inkscape:window-x="0"
 | 
					 | 
				
			||||||
     inkscape:window-height="818"
 | 
					 | 
				
			||||||
     inkscape:window-width="999"
 | 
					 | 
				
			||||||
     inkscape:document-units="px"
 | 
					 | 
				
			||||||
     inkscape:grid-bbox="true"
 | 
					 | 
				
			||||||
     showgrid="false"
 | 
					 | 
				
			||||||
     inkscape:current-layer="layer2"
 | 
					 | 
				
			||||||
     inkscape:cy="11.891468"
 | 
					 | 
				
			||||||
     inkscape:cx="-133.68151"
 | 
					 | 
				
			||||||
     inkscape:zoom="1"
 | 
					 | 
				
			||||||
     inkscape:pageshadow="2"
 | 
					 | 
				
			||||||
     inkscape:pageopacity="0.0"
 | 
					 | 
				
			||||||
     borderopacity="0.22745098"
 | 
					 | 
				
			||||||
     bordercolor="#666666"
 | 
					 | 
				
			||||||
     pagecolor="#ffffff"
 | 
					 | 
				
			||||||
     id="base"
 | 
					 | 
				
			||||||
     inkscape:showpageshadow="false"
 | 
					 | 
				
			||||||
     fill="#3465a4"
 | 
					 | 
				
			||||||
     stroke="#204a87" />
 | 
					 | 
				
			||||||
  <metadata
 | 
					 | 
				
			||||||
     id="metadata4">
 | 
					 | 
				
			||||||
    <rdf:RDF>
 | 
					 | 
				
			||||||
      <cc:Work
 | 
					 | 
				
			||||||
         rdf:about="">
 | 
					 | 
				
			||||||
        <dc:format>image/svg+xml</dc:format>
 | 
					 | 
				
			||||||
        <dc:type
 | 
					 | 
				
			||||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
					 | 
				
			||||||
        <dc:title>Save</dc:title>
 | 
					 | 
				
			||||||
        <dc:creator>
 | 
					 | 
				
			||||||
          <cc:Agent>
 | 
					 | 
				
			||||||
            <dc:title>Jakub Steiner</dc:title>
 | 
					 | 
				
			||||||
          </cc:Agent>
 | 
					 | 
				
			||||||
        </dc:creator>
 | 
					 | 
				
			||||||
        <dc:subject>
 | 
					 | 
				
			||||||
          <rdf:Bag>
 | 
					 | 
				
			||||||
            <rdf:li>hdd</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>hard drive</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>save</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>io</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>store</rdf:li>
 | 
					 | 
				
			||||||
          </rdf:Bag>
 | 
					 | 
				
			||||||
        </dc:subject>
 | 
					 | 
				
			||||||
        <cc:license
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
 | 
					 | 
				
			||||||
        <dc:identifier />
 | 
					 | 
				
			||||||
        <dc:source>http://jimmac.musichall.cz</dc:source>
 | 
					 | 
				
			||||||
      </cc:Work>
 | 
					 | 
				
			||||||
      <cc:License
 | 
					 | 
				
			||||||
         rdf:about="http://creativecommons.org/licenses/publicdomain/">
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#Reproduction" />
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#Distribution" />
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
 | 
					 | 
				
			||||||
      </cc:License>
 | 
					 | 
				
			||||||
    </rdf:RDF>
 | 
					 | 
				
			||||||
  </metadata>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     inkscape:label="pix"
 | 
					 | 
				
			||||||
     id="layer2"
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer">
 | 
					 | 
				
			||||||
    <g
 | 
					 | 
				
			||||||
       style="display:inline"
 | 
					 | 
				
			||||||
       id="g5022"
 | 
					 | 
				
			||||||
       transform="matrix(2.411405e-2,0,0,1.929202e-2,45.48953,41.75228)">
 | 
					 | 
				
			||||||
      <rect
 | 
					 | 
				
			||||||
         y="-150.69685"
 | 
					 | 
				
			||||||
         x="-1559.2523"
 | 
					 | 
				
			||||||
         height="478.35718"
 | 
					 | 
				
			||||||
         width="1339.6335"
 | 
					 | 
				
			||||||
         id="rect4173"
 | 
					 | 
				
			||||||
         style="opacity:0.40206185;color:black;fill:url(#linearGradient5027);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
      <path
 | 
					 | 
				
			||||||
         sodipodi:nodetypes="cccc"
 | 
					 | 
				
			||||||
         id="path5058"
 | 
					 | 
				
			||||||
         d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
 | 
					 | 
				
			||||||
         style="opacity:0.40206185;color:black;fill:url(#radialGradient5029);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
      <path
 | 
					 | 
				
			||||||
         style="opacity:0.40206185;color:black;fill:url(#radialGradient5031);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
         d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
 | 
					 | 
				
			||||||
         id="path5018"
 | 
					 | 
				
			||||||
         sodipodi:nodetypes="cccc" />
 | 
					 | 
				
			||||||
    </g>
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cccsccccccccc"
 | 
					 | 
				
			||||||
       id="path4196"
 | 
					 | 
				
			||||||
       d="M 11.28569,13.087628 C 10.66069,13.087628 10.254441,13.377808 10.004442,13.931381 C 10.004441,13.931381 3.5356915,31.034938 3.5356915,31.034938 C 3.5356915,31.034938 3.2856915,31.706497 3.2856915,32.816188 C 3.2856915,32.816188 3.2856915,42.466156 3.2856915,42.466156 C 3.2856915,43.548769 3.943477,44.091158 4.9419415,44.091156 L 43.50444,44.091156 C 44.489293,44.091156 45.09819,43.372976 45.09819,42.247406 L 45.09819,32.597438 C 45.09819,32.597438 45.204153,31.827015 45.00444,31.284938 L 38.28569,14.087631 C 38.101165,13.575725 37.648785,13.099533 37.16069,13.087628 L 11.28569,13.087628 z "
 | 
					 | 
				
			||||||
       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#535353;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccccccc"
 | 
					 | 
				
			||||||
       id="path4170"
 | 
					 | 
				
			||||||
       d="M 3.2735915,32.121812 L 4.0381936,31.429597 L 41.647883,31.492097 L 45.11029,31.809395 L 45.11029,42.247927 C 45.11029,43.373496 44.503272,44.091258 43.518419,44.091258 L 4.9354314,44.091258 C 3.9369667,44.091258 3.2735915,43.549207 3.2735915,42.466594 L 3.2735915,32.121812 z "
 | 
					 | 
				
			||||||
       style="fill:url(#linearGradient4234);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.02044296px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="csccccccs"
 | 
					 | 
				
			||||||
       id="path3093"
 | 
					 | 
				
			||||||
       d="M 3.5490842,31.039404 C 2.8347985,32.50369 3.5484686,33.432261 4.5847985,33.432261 C 4.5847985,33.432261 43.584797,33.432261 43.584797,33.432261 C 44.703844,33.408451 45.430035,32.420356 45.013368,31.289403 L 38.299082,14.078704 C 38.114558,13.566798 37.64432,13.090606 37.156225,13.078701 L 11.299083,13.078701 C 10.674083,13.078701 10.263369,13.382274 10.01337,13.935847 C 10.01337,13.935847 3.5490842,31.039404 3.5490842,31.039404 z "
 | 
					 | 
				
			||||||
       style="fill:url(#radialGradient4250);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="36.299183"
 | 
					 | 
				
			||||||
       x="7.857996"
 | 
					 | 
				
			||||||
       height="5.5625"
 | 
					 | 
				
			||||||
       width="17.625"
 | 
					 | 
				
			||||||
       id="rect4174"
 | 
					 | 
				
			||||||
       style="opacity:1;color:#000000;fill:url(#linearGradient4209);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.40899992;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cscc"
 | 
					 | 
				
			||||||
       id="path4194"
 | 
					 | 
				
			||||||
       d="M 7.8579947,41.86168 C 7.8579947,41.86168 7.8579947,37.850195 7.8579947,37.850195 C 9.6935221,41.029421 16.154485,41.86168 20.795492,41.86168 C 20.795492,41.86168 7.8579947,41.86168 7.8579947,41.86168 z "
 | 
					 | 
				
			||||||
       style="opacity:0.81142853;fill:url(#linearGradient4242);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cccccccc"
 | 
					 | 
				
			||||||
       id="path4201"
 | 
					 | 
				
			||||||
       d="M 44.796162,30.753688 C 44.859684,32.003662 44.382159,33.069528 43.474046,33.097438 C 43.474046,33.097438 5.3553296,33.097437 5.3553297,33.097438 C 4.0660978,33.097438 3.4875937,32.772491 3.271279,32.229382 C 3.3630404,33.173714 4.0970964,33.878688 5.3553297,33.878688 C 5.3553296,33.878687 43.474046,33.878688 43.474046,33.878688 C 44.550053,33.845617 45.226851,32.454664 44.82621,30.883897 L 44.796162,30.753688 z "
 | 
					 | 
				
			||||||
       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       id="path4211"
 | 
					 | 
				
			||||||
       d="M 10.96875,15.28125 C 10.922675,15.481571 10.78125,15.668047 10.78125,15.875 C 10.78125,16.823605 11.37223,17.664474 12.125,18.46875 C 12.365268,18.314675 12.490117,18.114342 12.75,17.96875 C 11.809691,17.152746 11.196604,16.252168 10.96875,15.28125 z M 37.625,15.28125 C 37.396273,16.250866 36.782988,17.153676 35.84375,17.96875 C 36.117894,18.122332 36.247738,18.33699 36.5,18.5 C 37.257262,17.693344 37.8125,16.826956 37.8125,15.875 C 37.8125,15.668047 37.670906,15.481571 37.625,15.28125 z M 39.8125,23.71875 C 39.198709,27.758861 32.513887,30.96875 24.28125,30.96875 C 16.068996,30.968751 9.4211001,27.775964 8.78125,23.75 C 8.7488928,23.947132 8.65625,24.141882 8.65625,24.34375 C 8.6562503,28.661697 15.645354,32.187501 24.28125,32.1875 C 32.917146,32.1875 39.937499,28.661698 39.9375,24.34375 C 39.9375,24.130826 39.848449,23.926394 39.8125,23.71875 z "
 | 
					 | 
				
			||||||
       style="opacity:0.69142857;color:#000000;fill:url(#linearGradient4272);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       transform="translate(8.838843e-2,5.301780)"
 | 
					 | 
				
			||||||
       d="M 8.5736699 25.593554 A 1.3700194 1.016466 0 1 1  5.833631,25.593554 A 1.3700194 1.016466 0 1 1  8.5736699 25.593554 z"
 | 
					 | 
				
			||||||
       sodipodi:ry="1.016466"
 | 
					 | 
				
			||||||
       sodipodi:rx="1.3700194"
 | 
					 | 
				
			||||||
       sodipodi:cy="25.593554"
 | 
					 | 
				
			||||||
       sodipodi:cx="7.2036505"
 | 
					 | 
				
			||||||
       id="path4224"
 | 
					 | 
				
			||||||
       style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:0.45762706;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
       sodipodi:type="arc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:type="arc"
 | 
					 | 
				
			||||||
       style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:0.45762706;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
       id="path4226"
 | 
					 | 
				
			||||||
       sodipodi:cx="7.2036505"
 | 
					 | 
				
			||||||
       sodipodi:cy="25.593554"
 | 
					 | 
				
			||||||
       sodipodi:rx="1.3700194"
 | 
					 | 
				
			||||||
       sodipodi:ry="1.016466"
 | 
					 | 
				
			||||||
       d="M 8.5736699 25.593554 A 1.3700194 1.016466 0 1 1  5.833631,25.593554 A 1.3700194 1.016466 0 1 1  8.5736699 25.593554 z"
 | 
					 | 
				
			||||||
       transform="translate(33.96705,5.213390)" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 | 
					 | 
				
			||||||
       d="M 11.642515,13.540723 C 11.040823,13.540723 10.649724,13.820081 10.409049,14.35301 C 10.409048,14.35301 3.9940341,30.943732 3.9940341,30.943732 C 3.9940341,30.943732 3.7533573,31.590247 3.7533573,32.658555 C 3.7533573,32.658555 3.7533573,41.948651 3.7533573,41.948651 C 3.7533573,43.303391 4.1974134,43.57555 5.3478414,43.57555 L 43.034746,43.57555 C 44.357872,43.57555 44.569062,43.259153 44.569062,41.738058 L 44.569062,32.447962 C 44.569062,32.447962 44.671072,31.706271 44.478807,31.184409 L 37.885616,14.378434 C 37.707973,13.885617 37.334964,13.552184 36.865071,13.540723 L 11.642515,13.540723 z "
 | 
					 | 
				
			||||||
       id="path4252"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cccsccccccccc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000048px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372885"
 | 
					 | 
				
			||||||
       d="M 40.5,36.554166 L 40.5,41.575101"
 | 
					 | 
				
			||||||
       id="path4282" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       id="path4284"
 | 
					 | 
				
			||||||
       d="M 38.5,36.613943 L 38.5,41.634878"
 | 
					 | 
				
			||||||
       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000048px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372885" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000048px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372885"
 | 
					 | 
				
			||||||
       d="M 36.5,36.613943 L 36.5,41.634878"
 | 
					 | 
				
			||||||
       id="path4286" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       id="path4288"
 | 
					 | 
				
			||||||
       d="M 34.5,36.613943 L 34.5,41.634878"
 | 
					 | 
				
			||||||
       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000048px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372885" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000048px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372885"
 | 
					 | 
				
			||||||
       d="M 32.5,36.613943 L 32.5,41.634878"
 | 
					 | 
				
			||||||
       id="path4290" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       id="path4292"
 | 
					 | 
				
			||||||
       d="M 30.5,36.613943 L 30.5,41.634878"
 | 
					 | 
				
			||||||
       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000048px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372885" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       id="path4294"
 | 
					 | 
				
			||||||
       d="M 39.5,36.604065 L 39.5,41.625"
 | 
					 | 
				
			||||||
       style="opacity:0.09714284;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="opacity:0.09714284;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
 | 
					 | 
				
			||||||
       d="M 37.5,36.663842 L 37.5,41.684777"
 | 
					 | 
				
			||||||
       id="path4296" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       id="path4298"
 | 
					 | 
				
			||||||
       d="M 35.5,36.663842 L 35.5,41.684777"
 | 
					 | 
				
			||||||
       style="opacity:0.09714284;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="opacity:0.09714284;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
 | 
					 | 
				
			||||||
       d="M 33.5,36.663842 L 33.5,41.684777"
 | 
					 | 
				
			||||||
       id="path4300" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       id="path4302"
 | 
					 | 
				
			||||||
       d="M 31.5,36.663842 L 31.5,41.684777"
 | 
					 | 
				
			||||||
       style="opacity:0.09714284;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       id="path4572"
 | 
					 | 
				
			||||||
       d="M 7.875,36.3125 L 7.875,41.84375 L 20.4375,41.84375 L 8.21875,41.5 L 7.875,36.3125 z "
 | 
					 | 
				
			||||||
       style="opacity:0.43999999;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:type="arc"
 | 
					 | 
				
			||||||
       style="opacity:0.20571427;color:#000000;fill:url(#linearGradient2553);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.93365198;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
       id="path2545"
 | 
					 | 
				
			||||||
       sodipodi:cx="25"
 | 
					 | 
				
			||||||
       sodipodi:cy="19.5625"
 | 
					 | 
				
			||||||
       sodipodi:rx="14.875"
 | 
					 | 
				
			||||||
       sodipodi:ry="6.6875"
 | 
					 | 
				
			||||||
       d="M 39.875 19.5625 A 14.875 6.6875 0 1 1  10.125,19.5625 A 14.875 6.6875 0 1 1  39.875 19.5625 z"
 | 
					 | 
				
			||||||
       transform="matrix(1.037815,0.000000,0.000000,1.060747,-1.632878,3.030370)" />
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer"
 | 
					 | 
				
			||||||
     id="layer1"
 | 
					 | 
				
			||||||
     inkscape:label="down">
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       transform="matrix(1.130190,1.178179e-16,7.918544e-17,-0.759601,-3.909725,53.66554)"
 | 
					 | 
				
			||||||
       d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1  9.1923885,36.421127 A 15.644737 8.3968935 0 1 1  40.481863 36.421127 z"
 | 
					 | 
				
			||||||
       sodipodi:ry="8.3968935"
 | 
					 | 
				
			||||||
       sodipodi:rx="15.644737"
 | 
					 | 
				
			||||||
       sodipodi:cy="36.421127"
 | 
					 | 
				
			||||||
       sodipodi:cx="24.837126"
 | 
					 | 
				
			||||||
       id="path8660"
 | 
					 | 
				
			||||||
       style="opacity:0.14117647;color:#000000;fill:url(#radialGradient8668);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
       sodipodi:type="arc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="opacity:1;color:#000000;fill:url(#linearGradient6907);fill-opacity:1.0;fill-rule:nonzero;stroke:url(#linearGradient6931);stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
 | 
					 | 
				
			||||||
       d="M 3.2034501,25.835194 C 2.1729477,-5.3853369 28.741616,-0.4511153 28.582416,15.788689 L 35.89533,15.788689 L 24.517652,28.774671 L 12.585426,15.788689 C 12.585426,15.788689 20.126859,15.788689 20.126859,15.788689 C 20.583921,4.8193225 3.4092324,1.6100346 3.2034501,25.835194 z "
 | 
					 | 
				
			||||||
       id="path1432"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccccc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccccc"
 | 
					 | 
				
			||||||
       id="path2177"
 | 
					 | 
				
			||||||
       d="M 7.6642103,9.1041047 C 12.40638,-0.0400306 28.122336,2.7175443 27.761604,16.579393 L 34.078976,16.579393 C 34.078976,16.579393 24.513151,27.536769 24.513151,27.536769 L 14.41668,16.579393 C 14.41668,16.579393 20.87332,16.579393 20.87332,16.579393 C 21.144975,5.0041615 10.922265,5.5345215 7.6642103,9.1041047 z "
 | 
					 | 
				
			||||||
       style="opacity:0.47159091;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient1764);stroke-width:0.99999934;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="opacity:0.49431817;color:#000000;fill:url(#radialGradient4997);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
       d="M 34.767155,16.211613 L 32.782979,18.757322 C 27.372947,17.241029 24.896829,21.486664 17.109284,20.489112 L 13.247998,16.080077 L 20.434468,16.162862 C 20.483219,4.3164571 8.3443098,4.998966 5.0292663,13.627829 C 8.8372201,-1.2611216 27.893316,0.8064118 28.28332,16.114112 L 34.767155,16.211613 z "
 | 
					 | 
				
			||||||
       id="path4989"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cccccccc" />
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 29 KiB  | 
@ -1,201 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
					 | 
				
			||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
					 | 
				
			||||||
<svg
 | 
					 | 
				
			||||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
					 | 
				
			||||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
					 | 
				
			||||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
					 | 
				
			||||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns:xlink="http://www.w3.org/1999/xlink"
 | 
					 | 
				
			||||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
					 | 
				
			||||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
					 | 
				
			||||||
   sodipodi:docname="go-down.svg"
 | 
					 | 
				
			||||||
   sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
 | 
					 | 
				
			||||||
   inkscape:version="0.46"
 | 
					 | 
				
			||||||
   sodipodi:version="0.32"
 | 
					 | 
				
			||||||
   id="svg11300"
 | 
					 | 
				
			||||||
   height="48px"
 | 
					 | 
				
			||||||
   width="48px"
 | 
					 | 
				
			||||||
   inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
 | 
					 | 
				
			||||||
   inkscape:export-xdpi="90.000000"
 | 
					 | 
				
			||||||
   inkscape:export-ydpi="90.000000"
 | 
					 | 
				
			||||||
   inkscape:output_extension="org.inkscape.output.svg.inkscape"
 | 
					 | 
				
			||||||
   viewbox="0 0 48 48">
 | 
					 | 
				
			||||||
  <defs
 | 
					 | 
				
			||||||
     id="defs3">
 | 
					 | 
				
			||||||
    <inkscape:perspective
 | 
					 | 
				
			||||||
       sodipodi:type="inkscape:persp3d"
 | 
					 | 
				
			||||||
       inkscape:vp_x="0 : 24 : 1"
 | 
					 | 
				
			||||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
					 | 
				
			||||||
       inkscape:vp_z="48 : 24 : 1"
 | 
					 | 
				
			||||||
       inkscape:persp3d-origin="24 : 16 : 1"
 | 
					 | 
				
			||||||
       id="perspective24" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient1442">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop1444"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#73d216" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop1446"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#4e9a06" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient8662"
 | 
					 | 
				
			||||||
       inkscape:collect="always">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop8664"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop8666"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient8650"
 | 
					 | 
				
			||||||
       inkscape:collect="always">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop8652"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop8654"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient8662"
 | 
					 | 
				
			||||||
       id="radialGradient1444"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.000000,0.000000,0.000000,0.536723,1.614716e-15,16.87306)"
 | 
					 | 
				
			||||||
       cx="24.837126"
 | 
					 | 
				
			||||||
       cy="36.421127"
 | 
					 | 
				
			||||||
       fx="24.837126"
 | 
					 | 
				
			||||||
       fy="36.421127"
 | 
					 | 
				
			||||||
       r="15.644737" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient1442"
 | 
					 | 
				
			||||||
       id="radialGradient1469"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.871885e-16,-0.843022,1.020168,2.265228e-16,0.606436,42.58614)"
 | 
					 | 
				
			||||||
       cx="35.292667"
 | 
					 | 
				
			||||||
       cy="20.494493"
 | 
					 | 
				
			||||||
       fx="35.292667"
 | 
					 | 
				
			||||||
       fy="20.494493"
 | 
					 | 
				
			||||||
       r="16.956199" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient8650"
 | 
					 | 
				
			||||||
       id="radialGradient1471"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(3.749427e-16,-2.046729,-1.557610,-2.853404e-16,44.11559,66.93275)"
 | 
					 | 
				
			||||||
       cx="15.987216"
 | 
					 | 
				
			||||||
       cy="1.5350308"
 | 
					 | 
				
			||||||
       fx="15.987216"
 | 
					 | 
				
			||||||
       fy="1.5350308"
 | 
					 | 
				
			||||||
       r="17.171415" />
 | 
					 | 
				
			||||||
  </defs>
 | 
					 | 
				
			||||||
  <sodipodi:namedview
 | 
					 | 
				
			||||||
     inkscape:window-y="30"
 | 
					 | 
				
			||||||
     inkscape:window-x="0"
 | 
					 | 
				
			||||||
     inkscape:window-height="818"
 | 
					 | 
				
			||||||
     inkscape:window-width="1280"
 | 
					 | 
				
			||||||
     inkscape:showpageshadow="false"
 | 
					 | 
				
			||||||
     inkscape:document-units="px"
 | 
					 | 
				
			||||||
     inkscape:grid-bbox="true"
 | 
					 | 
				
			||||||
     showgrid="false"
 | 
					 | 
				
			||||||
     inkscape:current-layer="layer1"
 | 
					 | 
				
			||||||
     inkscape:cy="23.239067"
 | 
					 | 
				
			||||||
     inkscape:cx="15.972815"
 | 
					 | 
				
			||||||
     inkscape:zoom="11.313708"
 | 
					 | 
				
			||||||
     inkscape:pageshadow="2"
 | 
					 | 
				
			||||||
     inkscape:pageopacity="0.0"
 | 
					 | 
				
			||||||
     borderopacity="0.25490196"
 | 
					 | 
				
			||||||
     bordercolor="#666666"
 | 
					 | 
				
			||||||
     pagecolor="#ffffff"
 | 
					 | 
				
			||||||
     id="base"
 | 
					 | 
				
			||||||
     fill="#4e9a06"
 | 
					 | 
				
			||||||
     stroke="#4e9a06" />
 | 
					 | 
				
			||||||
  <metadata
 | 
					 | 
				
			||||||
     id="metadata4">
 | 
					 | 
				
			||||||
    <rdf:RDF>
 | 
					 | 
				
			||||||
      <cc:Work
 | 
					 | 
				
			||||||
         rdf:about="">
 | 
					 | 
				
			||||||
        <dc:format>image/svg+xml</dc:format>
 | 
					 | 
				
			||||||
        <dc:type
 | 
					 | 
				
			||||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
					 | 
				
			||||||
        <dc:creator>
 | 
					 | 
				
			||||||
          <cc:Agent>
 | 
					 | 
				
			||||||
            <dc:title>Jakub Steiner</dc:title>
 | 
					 | 
				
			||||||
          </cc:Agent>
 | 
					 | 
				
			||||||
        </dc:creator>
 | 
					 | 
				
			||||||
        <dc:source>http://jimmac.musichall.cz</dc:source>
 | 
					 | 
				
			||||||
        <cc:license
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
 | 
					 | 
				
			||||||
        <dc:title>Go Down</dc:title>
 | 
					 | 
				
			||||||
        <dc:subject>
 | 
					 | 
				
			||||||
          <rdf:Bag>
 | 
					 | 
				
			||||||
            <rdf:li>go</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>lower</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>down</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>arrow</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>pointer</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>></rdf:li>
 | 
					 | 
				
			||||||
          </rdf:Bag>
 | 
					 | 
				
			||||||
        </dc:subject>
 | 
					 | 
				
			||||||
        <dc:contributor>
 | 
					 | 
				
			||||||
          <cc:Agent>
 | 
					 | 
				
			||||||
            <dc:title>Andreas Nilsson</dc:title>
 | 
					 | 
				
			||||||
          </cc:Agent>
 | 
					 | 
				
			||||||
        </dc:contributor>
 | 
					 | 
				
			||||||
      </cc:Work>
 | 
					 | 
				
			||||||
      <cc:License
 | 
					 | 
				
			||||||
         rdf:about="http://creativecommons.org/licenses/publicdomain/">
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#Reproduction" />
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#Distribution" />
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
 | 
					 | 
				
			||||||
      </cc:License>
 | 
					 | 
				
			||||||
    </rdf:RDF>
 | 
					 | 
				
			||||||
  </metadata>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer"
 | 
					 | 
				
			||||||
     inkscape:label="Layer 1"
 | 
					 | 
				
			||||||
     id="layer1">
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       transform="matrix(1.214466,0.000000,0.000000,0.595458,-6.163846,16.31275)"
 | 
					 | 
				
			||||||
       d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1  9.1923885,36.421127 A 15.644737 8.3968935 0 1 1  40.481863 36.421127 z"
 | 
					 | 
				
			||||||
       sodipodi:ry="8.3968935"
 | 
					 | 
				
			||||||
       sodipodi:rx="15.644737"
 | 
					 | 
				
			||||||
       sodipodi:cy="36.421127"
 | 
					 | 
				
			||||||
       sodipodi:cx="24.837126"
 | 
					 | 
				
			||||||
       id="path8660"
 | 
					 | 
				
			||||||
       style="opacity:0.20454545;color:#000000;fill:url(#radialGradient1444);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
       sodipodi:type="arc" />
 | 
					 | 
				
			||||||
    <g
 | 
					 | 
				
			||||||
       id="g1464"
 | 
					 | 
				
			||||||
       transform="matrix(-1.000000,0.000000,0.000000,-1.000000,47.02856,43.99921)">
 | 
					 | 
				
			||||||
      <path
 | 
					 | 
				
			||||||
         style="opacity:1.0000000;color:#000000;fill:url(#radialGradient1469);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#3a7304;stroke-width:1.0000004;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
         d="M 14.519136,38.500000 L 32.524165,38.496094 L 32.524165,25.504468 L 40.519531,25.496656 L 23.374809,5.4992135 L 6.5285585,25.497284 L 14.524440,25.501074 L 14.519136,38.500000 z "
 | 
					 | 
				
			||||||
         id="path8643"
 | 
					 | 
				
			||||||
         sodipodi:nodetypes="cccccccc" />
 | 
					 | 
				
			||||||
      <path
 | 
					 | 
				
			||||||
         style="opacity:0.50802141;color:#000000;fill:url(#radialGradient1471);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
         d="M 39.429889,24.993467 L 32.023498,25.005186 L 32.026179,37.998023 L 16.647623,37.98887 C 17.417545,19.64788 27.370272,26.995797 32.029282,16.341991 L 39.429889,24.993467 z "
 | 
					 | 
				
			||||||
         id="path8645"
 | 
					 | 
				
			||||||
         sodipodi:nodetypes="cccccc" />
 | 
					 | 
				
			||||||
      <path
 | 
					 | 
				
			||||||
         sodipodi:nodetypes="cccccccc"
 | 
					 | 
				
			||||||
         id="path8658"
 | 
					 | 
				
			||||||
         d="M 15.520704,37.496094 L 31.522109,37.500000 L 31.522109,24.507050 L 38.338920,24.491425 L 23.384644,7.0388396 L 8.6781173,24.495782 L 15.518018,24.501029 L 15.520704,37.496094 z "
 | 
					 | 
				
			||||||
         style="opacity:0.48128340;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000004;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
    </g>
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 8.2 KiB  | 
@ -1,197 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
					 | 
				
			||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
					 | 
				
			||||||
<svg
 | 
					 | 
				
			||||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
					 | 
				
			||||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
					 | 
				
			||||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
					 | 
				
			||||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns:xlink="http://www.w3.org/1999/xlink"
 | 
					 | 
				
			||||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
					 | 
				
			||||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
					 | 
				
			||||||
   sodipodi:docname="go-up.svg"
 | 
					 | 
				
			||||||
   sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
 | 
					 | 
				
			||||||
   inkscape:version="0.46"
 | 
					 | 
				
			||||||
   sodipodi:version="0.32"
 | 
					 | 
				
			||||||
   id="svg11300"
 | 
					 | 
				
			||||||
   height="48px"
 | 
					 | 
				
			||||||
   width="48px"
 | 
					 | 
				
			||||||
   inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
 | 
					 | 
				
			||||||
   inkscape:export-xdpi="90.000000"
 | 
					 | 
				
			||||||
   inkscape:export-ydpi="90.000000"
 | 
					 | 
				
			||||||
   inkscape:output_extension="org.inkscape.output.svg.inkscape"
 | 
					 | 
				
			||||||
   viewbox="0 0 48 48">
 | 
					 | 
				
			||||||
  <defs
 | 
					 | 
				
			||||||
     id="defs3">
 | 
					 | 
				
			||||||
    <inkscape:perspective
 | 
					 | 
				
			||||||
       sodipodi:type="inkscape:persp3d"
 | 
					 | 
				
			||||||
       inkscape:vp_x="0 : 24 : 1"
 | 
					 | 
				
			||||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
					 | 
				
			||||||
       inkscape:vp_z="48 : 24 : 1"
 | 
					 | 
				
			||||||
       inkscape:persp3d-origin="24 : 16 : 1"
 | 
					 | 
				
			||||||
       id="perspective23" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2304">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop2306"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#73d216" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop2308"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#4e9a06" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient8662"
 | 
					 | 
				
			||||||
       inkscape:collect="always">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop8664"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop8666"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient8650"
 | 
					 | 
				
			||||||
       inkscape:collect="always">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop8652"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop8654"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient8650"
 | 
					 | 
				
			||||||
       id="radialGradient1438"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(-3.749427e-16,-2.046729,1.557610,-2.853404e-16,2.767009,66.93275)"
 | 
					 | 
				
			||||||
       cx="24.53788"
 | 
					 | 
				
			||||||
       cy="0.40010813"
 | 
					 | 
				
			||||||
       fx="24.53788"
 | 
					 | 
				
			||||||
       fy="0.40010813"
 | 
					 | 
				
			||||||
       r="17.171415" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2304"
 | 
					 | 
				
			||||||
       id="radialGradient1441"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.871885e-16,-0.843022,1.020168,2.265228e-16,0.606436,42.58614)"
 | 
					 | 
				
			||||||
       cx="11.319205"
 | 
					 | 
				
			||||||
       cy="22.454971"
 | 
					 | 
				
			||||||
       fx="11.319205"
 | 
					 | 
				
			||||||
       fy="22.454971"
 | 
					 | 
				
			||||||
       r="16.956199" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient8662"
 | 
					 | 
				
			||||||
       id="radialGradient1444"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.000000,0.000000,0.000000,0.536723,1.614716e-15,16.87306)"
 | 
					 | 
				
			||||||
       cx="24.837126"
 | 
					 | 
				
			||||||
       cy="36.421127"
 | 
					 | 
				
			||||||
       fx="24.837126"
 | 
					 | 
				
			||||||
       fy="36.421127"
 | 
					 | 
				
			||||||
       r="15.644737" />
 | 
					 | 
				
			||||||
  </defs>
 | 
					 | 
				
			||||||
  <sodipodi:namedview
 | 
					 | 
				
			||||||
     inkscape:window-y="30"
 | 
					 | 
				
			||||||
     inkscape:window-x="0"
 | 
					 | 
				
			||||||
     inkscape:window-height="818"
 | 
					 | 
				
			||||||
     inkscape:window-width="1280"
 | 
					 | 
				
			||||||
     inkscape:showpageshadow="false"
 | 
					 | 
				
			||||||
     inkscape:document-units="px"
 | 
					 | 
				
			||||||
     inkscape:grid-bbox="true"
 | 
					 | 
				
			||||||
     showgrid="false"
 | 
					 | 
				
			||||||
     inkscape:current-layer="layer1"
 | 
					 | 
				
			||||||
     inkscape:cy="25.620377"
 | 
					 | 
				
			||||||
     inkscape:cx="9.6380363"
 | 
					 | 
				
			||||||
     inkscape:zoom="13.059378"
 | 
					 | 
				
			||||||
     inkscape:pageshadow="2"
 | 
					 | 
				
			||||||
     inkscape:pageopacity="0.0"
 | 
					 | 
				
			||||||
     borderopacity="0.25490196"
 | 
					 | 
				
			||||||
     bordercolor="#666666"
 | 
					 | 
				
			||||||
     pagecolor="#ffffff"
 | 
					 | 
				
			||||||
     id="base"
 | 
					 | 
				
			||||||
     fill="#73d216"
 | 
					 | 
				
			||||||
     stroke="#73d216" />
 | 
					 | 
				
			||||||
  <metadata
 | 
					 | 
				
			||||||
     id="metadata4">
 | 
					 | 
				
			||||||
    <rdf:RDF>
 | 
					 | 
				
			||||||
      <cc:Work
 | 
					 | 
				
			||||||
         rdf:about="">
 | 
					 | 
				
			||||||
        <dc:format>image/svg+xml</dc:format>
 | 
					 | 
				
			||||||
        <dc:type
 | 
					 | 
				
			||||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
					 | 
				
			||||||
        <dc:creator>
 | 
					 | 
				
			||||||
          <cc:Agent>
 | 
					 | 
				
			||||||
            <dc:title>Jakub Steiner</dc:title>
 | 
					 | 
				
			||||||
          </cc:Agent>
 | 
					 | 
				
			||||||
        </dc:creator>
 | 
					 | 
				
			||||||
        <dc:source>http://jimmac.musichall.cz</dc:source>
 | 
					 | 
				
			||||||
        <cc:license
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
 | 
					 | 
				
			||||||
        <dc:title>Go Up</dc:title>
 | 
					 | 
				
			||||||
        <dc:subject>
 | 
					 | 
				
			||||||
          <rdf:Bag>
 | 
					 | 
				
			||||||
            <rdf:li>go</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>higher</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>up</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>arrow</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>pointer</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>></rdf:li>
 | 
					 | 
				
			||||||
          </rdf:Bag>
 | 
					 | 
				
			||||||
        </dc:subject>
 | 
					 | 
				
			||||||
        <dc:contributor>
 | 
					 | 
				
			||||||
          <cc:Agent>
 | 
					 | 
				
			||||||
            <dc:title>Andreas Nilsson</dc:title>
 | 
					 | 
				
			||||||
          </cc:Agent>
 | 
					 | 
				
			||||||
        </dc:contributor>
 | 
					 | 
				
			||||||
      </cc:Work>
 | 
					 | 
				
			||||||
      <cc:License
 | 
					 | 
				
			||||||
         rdf:about="http://creativecommons.org/licenses/publicdomain/">
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#Reproduction" />
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#Distribution" />
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
 | 
					 | 
				
			||||||
      </cc:License>
 | 
					 | 
				
			||||||
    </rdf:RDF>
 | 
					 | 
				
			||||||
  </metadata>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer"
 | 
					 | 
				
			||||||
     inkscape:label="Layer 1"
 | 
					 | 
				
			||||||
     id="layer1">
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       transform="matrix(1.214466,0.000000,0.000000,0.595458,-6.163846,16.31275)"
 | 
					 | 
				
			||||||
       d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1  9.1923885,36.421127 A 15.644737 8.3968935 0 1 1  40.481863 36.421127 z"
 | 
					 | 
				
			||||||
       sodipodi:ry="8.3968935"
 | 
					 | 
				
			||||||
       sodipodi:rx="15.644737"
 | 
					 | 
				
			||||||
       sodipodi:cy="36.421127"
 | 
					 | 
				
			||||||
       sodipodi:cx="24.837126"
 | 
					 | 
				
			||||||
       id="path8660"
 | 
					 | 
				
			||||||
       style="opacity:0.29946521;color:#000000;fill:url(#radialGradient1444);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
       sodipodi:type="arc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cccccccc"
 | 
					 | 
				
			||||||
       id="path8643"
 | 
					 | 
				
			||||||
       d="M 14.491792,38.500000 L 32.469477,38.500000 L 32.469477,25.547437 L 40.500000,25.547437 L 23.374809,5.4992135 L 6.5285585,25.489471 L 14.497096,25.555762 L 14.491792,38.500000 z "
 | 
					 | 
				
			||||||
       style="opacity:1.0000000;color:#000000;fill:url(#radialGradient1441);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#3a7304;stroke-width:1.0000004;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cccscc"
 | 
					 | 
				
			||||||
       id="path8645"
 | 
					 | 
				
			||||||
       d="M 7.5855237,25.03253 L 14.995821,25.03253 L 15.062422,31.594339 C 20.718034,20.593878 31.055517,22.749928 31.656768,15.966674 C 31.656768,15.966674 23.366938,6.4219692 23.366938,6.4219692 L 7.5855237,25.03253 z "
 | 
					 | 
				
			||||||
       style="opacity:0.50802141;color:#000000;fill:url(#radialGradient1438);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="opacity:0.48128340;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000004;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
 | 
					 | 
				
			||||||
       d="M 15.602735,37.500000 L 31.502578,37.500000 L 31.502578,24.507050 L 38.311576,24.507050 L 23.361206,7.0700896 L 8.6546798,24.550470 L 15.475049,24.528373 L 15.602735,37.500000 z "
 | 
					 | 
				
			||||||
       id="path8658"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="cccccccc" />
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 8.0 KiB  | 
@ -1,202 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
					 | 
				
			||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<svg
 | 
					 | 
				
			||||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
					 | 
				
			||||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
					 | 
				
			||||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
					 | 
				
			||||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
					 | 
				
			||||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
					 | 
				
			||||||
   width="48px"
 | 
					 | 
				
			||||||
   height="48px"
 | 
					 | 
				
			||||||
   id="svg3007"
 | 
					 | 
				
			||||||
   version="1.1"
 | 
					 | 
				
			||||||
   inkscape:version="0.48.1 r9760"
 | 
					 | 
				
			||||||
   sodipodi:docname="nav-outline.svg">
 | 
					 | 
				
			||||||
  <defs
 | 
					 | 
				
			||||||
     id="defs3009">
 | 
					 | 
				
			||||||
    <filter
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="filter5333"
 | 
					 | 
				
			||||||
       x="-0.16623206"
 | 
					 | 
				
			||||||
       width="1.3324641"
 | 
					 | 
				
			||||||
       y="-0.030014125"
 | 
					 | 
				
			||||||
       height="1.0600282">
 | 
					 | 
				
			||||||
      <feGaussianBlur
 | 
					 | 
				
			||||||
         inkscape:collect="always"
 | 
					 | 
				
			||||||
         stdDeviation="0.47888561"
 | 
					 | 
				
			||||||
         id="feGaussianBlur5335" />
 | 
					 | 
				
			||||||
    </filter>
 | 
					 | 
				
			||||||
  </defs>
 | 
					 | 
				
			||||||
  <sodipodi:namedview
 | 
					 | 
				
			||||||
     id="base"
 | 
					 | 
				
			||||||
     pagecolor="#ffffff"
 | 
					 | 
				
			||||||
     bordercolor="#666666"
 | 
					 | 
				
			||||||
     borderopacity="1.0"
 | 
					 | 
				
			||||||
     inkscape:pageopacity="0.0"
 | 
					 | 
				
			||||||
     inkscape:pageshadow="2"
 | 
					 | 
				
			||||||
     inkscape:zoom="11.945051"
 | 
					 | 
				
			||||||
     inkscape:cx="20.614872"
 | 
					 | 
				
			||||||
     inkscape:cy="23.423899"
 | 
					 | 
				
			||||||
     inkscape:current-layer="layer1"
 | 
					 | 
				
			||||||
     showgrid="true"
 | 
					 | 
				
			||||||
     inkscape:grid-bbox="true"
 | 
					 | 
				
			||||||
     inkscape:document-units="px"
 | 
					 | 
				
			||||||
     inkscape:window-width="1440"
 | 
					 | 
				
			||||||
     inkscape:window-height="773"
 | 
					 | 
				
			||||||
     inkscape:window-x="0"
 | 
					 | 
				
			||||||
     inkscape:window-y="0"
 | 
					 | 
				
			||||||
     inkscape:window-maximized="0" />
 | 
					 | 
				
			||||||
  <metadata
 | 
					 | 
				
			||||||
     id="metadata3012">
 | 
					 | 
				
			||||||
    <rdf:RDF>
 | 
					 | 
				
			||||||
      <cc:Work
 | 
					 | 
				
			||||||
         rdf:about="">
 | 
					 | 
				
			||||||
        <dc:format>image/svg+xml</dc:format>
 | 
					 | 
				
			||||||
        <dc:type
 | 
					 | 
				
			||||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
					 | 
				
			||||||
        <dc:title />
 | 
					 | 
				
			||||||
      </cc:Work>
 | 
					 | 
				
			||||||
    </rdf:RDF>
 | 
					 | 
				
			||||||
  </metadata>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     id="layer1"
 | 
					 | 
				
			||||||
     inkscape:label="Layer 1"
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer">
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#f0f0f0;fill-rule:evenodd;stroke:#808080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1"
 | 
					 | 
				
			||||||
       id="rect3783"
 | 
					 | 
				
			||||||
       width="46.16272"
 | 
					 | 
				
			||||||
       height="45.59861"
 | 
					 | 
				
			||||||
       x="1.0341953"
 | 
					 | 
				
			||||||
       y="0.99112236" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect3787"
 | 
					 | 
				
			||||||
       width="2.8205326"
 | 
					 | 
				
			||||||
       height="2.7823999"
 | 
					 | 
				
			||||||
       x="4.2307992"
 | 
					 | 
				
			||||||
       y="4.093708" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect5257"
 | 
					 | 
				
			||||||
       width="24.68285"
 | 
					 | 
				
			||||||
       height="1.4102663"
 | 
					 | 
				
			||||||
       x="8.0855274"
 | 
					 | 
				
			||||||
       y="4.657815" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="8.4185247"
 | 
					 | 
				
			||||||
       x="8.4615984"
 | 
					 | 
				
			||||||
       height="2.7823999"
 | 
					 | 
				
			||||||
       width="2.8205326"
 | 
					 | 
				
			||||||
       id="rect5259"
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="9.0766497"
 | 
					 | 
				
			||||||
       x="12.410344"
 | 
					 | 
				
			||||||
       height="1.4102663"
 | 
					 | 
				
			||||||
       width="30.498053"
 | 
					 | 
				
			||||||
       id="rect5261"
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect5263"
 | 
					 | 
				
			||||||
       width="2.8205326"
 | 
					 | 
				
			||||||
       height="2.7823999"
 | 
					 | 
				
			||||||
       x="8.4615984"
 | 
					 | 
				
			||||||
       y="13.307448" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect5265"
 | 
					 | 
				
			||||||
       width="24.972752"
 | 
					 | 
				
			||||||
       height="1.4102663"
 | 
					 | 
				
			||||||
       x="12.410344"
 | 
					 | 
				
			||||||
       y="13.965573" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="17.444229"
 | 
					 | 
				
			||||||
       x="4.3248172"
 | 
					 | 
				
			||||||
       height="2.7823999"
 | 
					 | 
				
			||||||
       width="2.8205326"
 | 
					 | 
				
			||||||
       id="rect5267"
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="18.008337"
 | 
					 | 
				
			||||||
       x="8.1795454"
 | 
					 | 
				
			||||||
       height="1.4102663"
 | 
					 | 
				
			||||||
       width="25.101433"
 | 
					 | 
				
			||||||
       id="rect5269"
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect5271"
 | 
					 | 
				
			||||||
       width="2.8205326"
 | 
					 | 
				
			||||||
       height="2.7823999"
 | 
					 | 
				
			||||||
       x="8.5556164"
 | 
					 | 
				
			||||||
       y="21.769047" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect5273"
 | 
					 | 
				
			||||||
       width="28.782515"
 | 
					 | 
				
			||||||
       height="1.4102663"
 | 
					 | 
				
			||||||
       x="12.880433"
 | 
					 | 
				
			||||||
       y="22.427172" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="26.65797"
 | 
					 | 
				
			||||||
       x="13.475181"
 | 
					 | 
				
			||||||
       height="2.7823999"
 | 
					 | 
				
			||||||
       width="2.8205326"
 | 
					 | 
				
			||||||
       id="rect5275"
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="27.316095"
 | 
					 | 
				
			||||||
       x="17.479"
 | 
					 | 
				
			||||||
       height="1.4102663"
 | 
					 | 
				
			||||||
       width="23.681646"
 | 
					 | 
				
			||||||
       id="rect5277"
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect5279"
 | 
					 | 
				
			||||||
       width="2.8205326"
 | 
					 | 
				
			||||||
       height="2.7823999"
 | 
					 | 
				
			||||||
       x="8.5130949"
 | 
					 | 
				
			||||||
       y="31.006269" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect5281"
 | 
					 | 
				
			||||||
       width="24.557148"
 | 
					 | 
				
			||||||
       height="1.4102663"
 | 
					 | 
				
			||||||
       x="12.592034"
 | 
					 | 
				
			||||||
       y="31.636858" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="35.464046"
 | 
					 | 
				
			||||||
       x="13.475181"
 | 
					 | 
				
			||||||
       height="2.7823999"
 | 
					 | 
				
			||||||
       width="2.8205326"
 | 
					 | 
				
			||||||
       id="rect5283"
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="36.055695"
 | 
					 | 
				
			||||||
       x="17.744923"
 | 
					 | 
				
			||||||
       height="1.4102663"
 | 
					 | 
				
			||||||
       width="18.577394"
 | 
					 | 
				
			||||||
       id="rect5285"
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect5287"
 | 
					 | 
				
			||||||
       width="2.8205326"
 | 
					 | 
				
			||||||
       height="2.7823999"
 | 
					 | 
				
			||||||
       x="13.54166"
 | 
					 | 
				
			||||||
       y="40.35297" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#404040;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect5289"
 | 
					 | 
				
			||||||
       width="23.080858"
 | 
					 | 
				
			||||||
       height="1.4102663"
 | 
					 | 
				
			||||||
       x="17.678442"
 | 
					 | 
				
			||||||
       y="40.944618" />
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 5.3 KiB  | 
@ -1,283 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
					 | 
				
			||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<svg
 | 
					 | 
				
			||||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
					 | 
				
			||||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
					 | 
				
			||||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
					 | 
				
			||||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
					 | 
				
			||||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
					 | 
				
			||||||
   width="48px"
 | 
					 | 
				
			||||||
   height="48px"
 | 
					 | 
				
			||||||
   id="svg3007"
 | 
					 | 
				
			||||||
   version="1.1"
 | 
					 | 
				
			||||||
   inkscape:version="0.48.1 r9760"
 | 
					 | 
				
			||||||
   sodipodi:docname="nav-thumbs.svg">
 | 
					 | 
				
			||||||
  <defs
 | 
					 | 
				
			||||||
     id="defs3009">
 | 
					 | 
				
			||||||
    <filter
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="filter5333"
 | 
					 | 
				
			||||||
       x="-0.16623206"
 | 
					 | 
				
			||||||
       width="1.3324641"
 | 
					 | 
				
			||||||
       y="-0.030014125"
 | 
					 | 
				
			||||||
       height="1.0600282">
 | 
					 | 
				
			||||||
      <feGaussianBlur
 | 
					 | 
				
			||||||
         inkscape:collect="always"
 | 
					 | 
				
			||||||
         stdDeviation="0.47888561"
 | 
					 | 
				
			||||||
         id="feGaussianBlur5335" />
 | 
					 | 
				
			||||||
    </filter>
 | 
					 | 
				
			||||||
    <filter
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="filter5966">
 | 
					 | 
				
			||||||
      <feGaussianBlur
 | 
					 | 
				
			||||||
         inkscape:collect="always"
 | 
					 | 
				
			||||||
         stdDeviation="0.3570515"
 | 
					 | 
				
			||||||
         id="feGaussianBlur5968" />
 | 
					 | 
				
			||||||
    </filter>
 | 
					 | 
				
			||||||
  </defs>
 | 
					 | 
				
			||||||
  <sodipodi:namedview
 | 
					 | 
				
			||||||
     id="base"
 | 
					 | 
				
			||||||
     pagecolor="#ffffff"
 | 
					 | 
				
			||||||
     bordercolor="#666666"
 | 
					 | 
				
			||||||
     borderopacity="1.0"
 | 
					 | 
				
			||||||
     inkscape:pageopacity="0.0"
 | 
					 | 
				
			||||||
     inkscape:pageshadow="2"
 | 
					 | 
				
			||||||
     inkscape:zoom="11.945051"
 | 
					 | 
				
			||||||
     inkscape:cx="9.375932"
 | 
					 | 
				
			||||||
     inkscape:cy="24.942259"
 | 
					 | 
				
			||||||
     inkscape:current-layer="layer1"
 | 
					 | 
				
			||||||
     showgrid="true"
 | 
					 | 
				
			||||||
     inkscape:grid-bbox="true"
 | 
					 | 
				
			||||||
     inkscape:document-units="px"
 | 
					 | 
				
			||||||
     inkscape:window-width="1440"
 | 
					 | 
				
			||||||
     inkscape:window-height="773"
 | 
					 | 
				
			||||||
     inkscape:window-x="0"
 | 
					 | 
				
			||||||
     inkscape:window-y="0"
 | 
					 | 
				
			||||||
     inkscape:window-maximized="0" />
 | 
					 | 
				
			||||||
  <metadata
 | 
					 | 
				
			||||||
     id="metadata3012">
 | 
					 | 
				
			||||||
    <rdf:RDF>
 | 
					 | 
				
			||||||
      <cc:Work
 | 
					 | 
				
			||||||
         rdf:about="">
 | 
					 | 
				
			||||||
        <dc:format>image/svg+xml</dc:format>
 | 
					 | 
				
			||||||
        <dc:type
 | 
					 | 
				
			||||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
					 | 
				
			||||||
        <dc:title />
 | 
					 | 
				
			||||||
      </cc:Work>
 | 
					 | 
				
			||||||
    </rdf:RDF>
 | 
					 | 
				
			||||||
  </metadata>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     id="layer1"
 | 
					 | 
				
			||||||
     inkscape:label="Layer 1"
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer">
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#484848;fill-rule:evenodd;stroke:#808080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1"
 | 
					 | 
				
			||||||
       id="rect3783"
 | 
					 | 
				
			||||||
       width="46.16272"
 | 
					 | 
				
			||||||
       height="45.59861"
 | 
					 | 
				
			||||||
       x="1.0341953"
 | 
					 | 
				
			||||||
       y="0.99112236" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="4.7876148"
 | 
					 | 
				
			||||||
       x="14.359808"
 | 
					 | 
				
			||||||
       height="12.764274"
 | 
					 | 
				
			||||||
       width="9.7061672"
 | 
					 | 
				
			||||||
       id="rect5960"
 | 
					 | 
				
			||||||
       style="fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter5966)"
 | 
					 | 
				
			||||||
       transform="matrix(1.0465713,0,0,1.0642851,3.6426579,-2.1141417)" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#ffffff;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect5958"
 | 
					 | 
				
			||||||
       width="9.7061672"
 | 
					 | 
				
			||||||
       height="12.764274"
 | 
					 | 
				
			||||||
       x="18.897236"
 | 
					 | 
				
			||||||
       y="3.1920807" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       transform="matrix(1.0465713,0,0,1.0642851,3.6426579,13.043433)"
 | 
					 | 
				
			||||||
       style="fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter5966)"
 | 
					 | 
				
			||||||
       id="rect5970"
 | 
					 | 
				
			||||||
       width="9.7061672"
 | 
					 | 
				
			||||||
       height="12.764274"
 | 
					 | 
				
			||||||
       x="14.359808"
 | 
					 | 
				
			||||||
       y="4.7876148" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="18.349655"
 | 
					 | 
				
			||||||
       x="18.897236"
 | 
					 | 
				
			||||||
       height="12.764274"
 | 
					 | 
				
			||||||
       width="9.7061672"
 | 
					 | 
				
			||||||
       id="rect5972"
 | 
					 | 
				
			||||||
       style="fill:#ffffff;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="4.7876148"
 | 
					 | 
				
			||||||
       x="14.359808"
 | 
					 | 
				
			||||||
       height="12.764274"
 | 
					 | 
				
			||||||
       width="9.7061672"
 | 
					 | 
				
			||||||
       id="rect5974"
 | 
					 | 
				
			||||||
       style="fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter5966)"
 | 
					 | 
				
			||||||
       transform="matrix(1.0465713,0,0,0.9368834,3.6426579,29.209842)" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#ffffff;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect5976"
 | 
					 | 
				
			||||||
       width="9.7061672"
 | 
					 | 
				
			||||||
       height="11.833546"
 | 
					 | 
				
			||||||
       x="18.897236"
 | 
					 | 
				
			||||||
       y="33.906113" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="4.905829"
 | 
					 | 
				
			||||||
       x="19.960924"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       width="7.7117486"
 | 
					 | 
				
			||||||
       id="rect5995"
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect6177"
 | 
					 | 
				
			||||||
       width="3.6219761"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       x="19.960924"
 | 
					 | 
				
			||||||
       y="6.0340419" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect6179"
 | 
					 | 
				
			||||||
       width="7.7117486"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       x="19.960924"
 | 
					 | 
				
			||||||
       y="7.2562728" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="8.3844862"
 | 
					 | 
				
			||||||
       x="19.960924"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       width="5.6903667"
 | 
					 | 
				
			||||||
       id="rect6181"
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="9.7007341"
 | 
					 | 
				
			||||||
       x="19.960924"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       width="7.7117486"
 | 
					 | 
				
			||||||
       id="rect6183"
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect6185"
 | 
					 | 
				
			||||||
       width="7.7117486"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       x="19.960924"
 | 
					 | 
				
			||||||
       y="10.828948" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="12.051179"
 | 
					 | 
				
			||||||
       x="19.960924"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       width="7.7117486"
 | 
					 | 
				
			||||||
       id="rect6187"
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="14.213587"
 | 
					 | 
				
			||||||
       x="23.204536"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       width="1.2245234"
 | 
					 | 
				
			||||||
       id="rect6189"
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect6209"
 | 
					 | 
				
			||||||
       width="7.7117486"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       x="19.772888"
 | 
					 | 
				
			||||||
       y="19.854652" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="39.08128"
 | 
					 | 
				
			||||||
       x="19.913914"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       width="3.6219761"
 | 
					 | 
				
			||||||
       id="rect6211"
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="22.205095"
 | 
					 | 
				
			||||||
       x="19.772888"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       width="6.6305442"
 | 
					 | 
				
			||||||
       id="rect6213"
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect6215"
 | 
					 | 
				
			||||||
       width="7.7587576"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       x="19.866905"
 | 
					 | 
				
			||||||
       y="37.859051" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect6217"
 | 
					 | 
				
			||||||
       width="7.7117486"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       x="19.772888"
 | 
					 | 
				
			||||||
       y="21.029873" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="25.777771"
 | 
					 | 
				
			||||||
       x="19.772888"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       width="7.7117486"
 | 
					 | 
				
			||||||
       id="rect6219"
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect6221"
 | 
					 | 
				
			||||||
       width="7.7117486"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       x="19.772888"
 | 
					 | 
				
			||||||
       y="27.000002" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect6223"
 | 
					 | 
				
			||||||
       width="1.2245234"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       x="23.204536"
 | 
					 | 
				
			||||||
       y="28.974375" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect6225"
 | 
					 | 
				
			||||||
       width="3.6219761"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       x="19.960922"
 | 
					 | 
				
			||||||
       y="42.983021" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect6227"
 | 
					 | 
				
			||||||
       width="7.7117486"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       x="19.913914"
 | 
					 | 
				
			||||||
       y="36.777847" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="35.602627"
 | 
					 | 
				
			||||||
       x="19.913914"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       width="7.7117486"
 | 
					 | 
				
			||||||
       id="rect6231"
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="rect6233"
 | 
					 | 
				
			||||||
       width="7.7117486"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       x="19.913914"
 | 
					 | 
				
			||||||
       y="40.350525" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       y="41.572754"
 | 
					 | 
				
			||||||
       x="19.913914"
 | 
					 | 
				
			||||||
       height="0.66480595"
 | 
					 | 
				
			||||||
       width="7.7117486"
 | 
					 | 
				
			||||||
       id="rect6235"
 | 
					 | 
				
			||||||
       style="fill:#808080;fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
    <rect
 | 
					 | 
				
			||||||
       style="fill:#0000e6;fill-opacity:0.44444448;stroke:none"
 | 
					 | 
				
			||||||
       id="rect6237"
 | 
					 | 
				
			||||||
       width="3.5256658"
 | 
					 | 
				
			||||||
       height="1.927364"
 | 
					 | 
				
			||||||
       x="22.077036"
 | 
					 | 
				
			||||||
       y="23.367346" />
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 7.6 KiB  | 
@ -1,297 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
					 | 
				
			||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<svg
 | 
					 | 
				
			||||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
					 | 
				
			||||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
					 | 
				
			||||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
					 | 
				
			||||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns:xlink="http://www.w3.org/1999/xlink"
 | 
					 | 
				
			||||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
					 | 
				
			||||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
					 | 
				
			||||||
   width="48"
 | 
					 | 
				
			||||||
   height="48"
 | 
					 | 
				
			||||||
   id="svg3075"
 | 
					 | 
				
			||||||
   version="1.1"
 | 
					 | 
				
			||||||
   inkscape:version="0.48.1 r9760"
 | 
					 | 
				
			||||||
   sodipodi:docname="pin-down.svg"
 | 
					 | 
				
			||||||
   viewPort="0 0 48 48">
 | 
					 | 
				
			||||||
  <defs
 | 
					 | 
				
			||||||
     id="defs3077">
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient3804">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop3806" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop3808" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient3965">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop3967"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop3969" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient3885">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#a8b5e9;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop3889" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop3891"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         style="stop-color:#1d4488;stop-opacity:1;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient3865">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#0e0ec3;stop-opacity:0"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop3867" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop3883"
 | 
					 | 
				
			||||||
         offset="0.5"
 | 
					 | 
				
			||||||
         style="stop-color:#95b1e4;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#0d29c0;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop3869" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient3853">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#717171;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop3855" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop3861"
 | 
					 | 
				
			||||||
         offset="0.5"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#818181;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop3857" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3885"
 | 
					 | 
				
			||||||
       id="radialGradient3792"
 | 
					 | 
				
			||||||
       cx="13.508819"
 | 
					 | 
				
			||||||
       cy="30.521608"
 | 
					 | 
				
			||||||
       fx="13.508819"
 | 
					 | 
				
			||||||
       fy="30.521608"
 | 
					 | 
				
			||||||
       r="13.254341"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1,0,0,1.045977,0,-1.4434017)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3885"
 | 
					 | 
				
			||||||
       id="linearGradient3802"
 | 
					 | 
				
			||||||
       x1="15.306904"
 | 
					 | 
				
			||||||
       y1="13.407407"
 | 
					 | 
				
			||||||
       x2="29.35461"
 | 
					 | 
				
			||||||
       y2="30.15519"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.2304178,0,0,1.1235308,-2.1158755,998.83747)" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3804"
 | 
					 | 
				
			||||||
       id="radialGradient3812"
 | 
					 | 
				
			||||||
       cx="20.111172"
 | 
					 | 
				
			||||||
       cy="28.238274"
 | 
					 | 
				
			||||||
       fx="20.111172"
 | 
					 | 
				
			||||||
       fy="28.238274"
 | 
					 | 
				
			||||||
       r="7.6291947"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.2304178,0,0,1.1452771,-2.1158755,998.22337)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3885"
 | 
					 | 
				
			||||||
       id="radialGradient3822"
 | 
					 | 
				
			||||||
       cx="23.985939"
 | 
					 | 
				
			||||||
       cy="24.847366"
 | 
					 | 
				
			||||||
       fx="23.985939"
 | 
					 | 
				
			||||||
       fy="24.847366"
 | 
					 | 
				
			||||||
       r="10.593476"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(0.63682384,0.44303926,-1.1714282,1.6838088,35.523491,-26.055439)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <filter
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="filter3856"
 | 
					 | 
				
			||||||
       x="-0.30370581"
 | 
					 | 
				
			||||||
       width="1.6074116"
 | 
					 | 
				
			||||||
       y="-0.32771564"
 | 
					 | 
				
			||||||
       height="1.6554313">
 | 
					 | 
				
			||||||
      <feGaussianBlur
 | 
					 | 
				
			||||||
         inkscape:collect="always"
 | 
					 | 
				
			||||||
         stdDeviation="4.7808869"
 | 
					 | 
				
			||||||
         id="feGaussianBlur3858" />
 | 
					 | 
				
			||||||
    </filter>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3885"
 | 
					 | 
				
			||||||
       id="radialGradient3865"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1,0,0,1.045977,0,-1.4434017)"
 | 
					 | 
				
			||||||
       cx="13.508819"
 | 
					 | 
				
			||||||
       cy="30.521608"
 | 
					 | 
				
			||||||
       fx="13.508819"
 | 
					 | 
				
			||||||
       fy="30.521608"
 | 
					 | 
				
			||||||
       r="13.254341" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3885"
 | 
					 | 
				
			||||||
       id="linearGradient3867"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.2304178,0,0,1.1235308,-2.1158755,998.83747)"
 | 
					 | 
				
			||||||
       x1="15.306904"
 | 
					 | 
				
			||||||
       y1="13.407407"
 | 
					 | 
				
			||||||
       x2="29.35461"
 | 
					 | 
				
			||||||
       y2="30.15519" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3804"
 | 
					 | 
				
			||||||
       id="radialGradient3869"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.2304178,0,0,1.1452771,-2.1158755,998.22337)"
 | 
					 | 
				
			||||||
       cx="20.111172"
 | 
					 | 
				
			||||||
       cy="28.238274"
 | 
					 | 
				
			||||||
       fx="20.111172"
 | 
					 | 
				
			||||||
       fy="28.238274"
 | 
					 | 
				
			||||||
       r="7.6291947" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3885"
 | 
					 | 
				
			||||||
       id="radialGradient3871"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(0.63682384,0.44303926,-1.1714282,1.6838088,35.523491,-26.055439)"
 | 
					 | 
				
			||||||
       cx="23.985939"
 | 
					 | 
				
			||||||
       cy="24.847366"
 | 
					 | 
				
			||||||
       fx="23.985939"
 | 
					 | 
				
			||||||
       fy="24.847366"
 | 
					 | 
				
			||||||
       r="10.593476" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3885"
 | 
					 | 
				
			||||||
       id="linearGradient3875"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(0.98683814,0,0,0.9524914,3.4991888,1004.1467)"
 | 
					 | 
				
			||||||
       x1="15.306904"
 | 
					 | 
				
			||||||
       y1="13.407407"
 | 
					 | 
				
			||||||
       x2="29.35461"
 | 
					 | 
				
			||||||
       y2="30.15519" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3804"
 | 
					 | 
				
			||||||
       id="radialGradient3877"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.195641,0.23932984,-0.18533175,0.95255553,4.5333676,999.33159)"
 | 
					 | 
				
			||||||
       cx="20.111172"
 | 
					 | 
				
			||||||
       cy="28.238274"
 | 
					 | 
				
			||||||
       fx="20.111172"
 | 
					 | 
				
			||||||
       fy="28.238274"
 | 
					 | 
				
			||||||
       r="7.6291947" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3885"
 | 
					 | 
				
			||||||
       id="radialGradient3880"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.5847553,0.52693722,-0.99805104,2.7064773,14.11088,-45.304477)"
 | 
					 | 
				
			||||||
       cx="18.133854"
 | 
					 | 
				
			||||||
       cy="19.778509"
 | 
					 | 
				
			||||||
       fx="18.133854"
 | 
					 | 
				
			||||||
       fy="19.778509"
 | 
					 | 
				
			||||||
       r="10.593476" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3885"
 | 
					 | 
				
			||||||
       id="radialGradient3882"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1,0,0,1.045977,0,-1.4434017)"
 | 
					 | 
				
			||||||
       cx="13.508819"
 | 
					 | 
				
			||||||
       cy="30.521608"
 | 
					 | 
				
			||||||
       fx="13.508819"
 | 
					 | 
				
			||||||
       fy="30.521608"
 | 
					 | 
				
			||||||
       r="13.254341" />
 | 
					 | 
				
			||||||
  </defs>
 | 
					 | 
				
			||||||
  <sodipodi:namedview
 | 
					 | 
				
			||||||
     id="base"
 | 
					 | 
				
			||||||
     pagecolor="#ffffff"
 | 
					 | 
				
			||||||
     bordercolor="#666666"
 | 
					 | 
				
			||||||
     borderopacity="1.0"
 | 
					 | 
				
			||||||
     inkscape:pageopacity="0.0"
 | 
					 | 
				
			||||||
     inkscape:pageshadow="2"
 | 
					 | 
				
			||||||
     inkscape:zoom="4.9558805"
 | 
					 | 
				
			||||||
     inkscape:cx="3.0237013"
 | 
					 | 
				
			||||||
     inkscape:cy="17.287267"
 | 
					 | 
				
			||||||
     inkscape:document-units="px"
 | 
					 | 
				
			||||||
     inkscape:current-layer="layer1"
 | 
					 | 
				
			||||||
     showgrid="false"
 | 
					 | 
				
			||||||
     inkscape:window-width="1291"
 | 
					 | 
				
			||||||
     inkscape:window-height="776"
 | 
					 | 
				
			||||||
     inkscape:window-x="16"
 | 
					 | 
				
			||||||
     inkscape:window-y="0"
 | 
					 | 
				
			||||||
     inkscape:window-maximized="0" />
 | 
					 | 
				
			||||||
  <metadata
 | 
					 | 
				
			||||||
     id="metadata3080">
 | 
					 | 
				
			||||||
    <rdf:RDF>
 | 
					 | 
				
			||||||
      <cc:Work
 | 
					 | 
				
			||||||
         rdf:about="">
 | 
					 | 
				
			||||||
        <dc:format>image/svg+xml</dc:format>
 | 
					 | 
				
			||||||
        <dc:type
 | 
					 | 
				
			||||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
					 | 
				
			||||||
        <dc:title />
 | 
					 | 
				
			||||||
      </cc:Work>
 | 
					 | 
				
			||||||
    </rdf:RDF>
 | 
					 | 
				
			||||||
  </metadata>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     inkscape:label="Layer 1"
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer"
 | 
					 | 
				
			||||||
     id="layer1"
 | 
					 | 
				
			||||||
     transform="translate(0,-1004.3622)">
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3856)"
 | 
					 | 
				
			||||||
       d="m 14.326415,1019.2702 c -8.3327876,4.0675 -9.8235436,10.8833 -8.8783416,15.1336 4.6840646,7.9754 8.3608166,13.8165 24.0118786,12.9139 9.657617,-3.7312 12.9762,-9.3269 13.519293,-15.7389 -0.547269,-4.3839 -1.957958,-9.3396 -5.649854,-14.9317 -3.965534,-2.471 -6.300859,-4.4246 -10.290805,-4.2374 -8.25193,0.5026 -8.752485,4.4502 -12.712171,6.8605 z"
 | 
					 | 
				
			||||||
       id="path3826"
 | 
					 | 
				
			||||||
       inkscape:connector-curvature="0"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccccc"
 | 
					 | 
				
			||||||
       transform="matrix(0.69099294,0,0,0.75978808,7.3427938,249.11025)" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:type="arc"
 | 
					 | 
				
			||||||
       style="fill:url(#radialGradient3882);fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="path3011"
 | 
					 | 
				
			||||||
       sodipodi:cx="21.176477"
 | 
					 | 
				
			||||||
       sodipodi:cy="31.393986"
 | 
					 | 
				
			||||||
       sodipodi:rx="13.254341"
 | 
					 | 
				
			||||||
       sodipodi:ry="13.863736"
 | 
					 | 
				
			||||||
       d="m 34.430819,31.393986 a 13.254341,13.863736 0 1 1 -26.5086827,0 13.254341,13.863736 0 1 1 26.5086827,0 z"
 | 
					 | 
				
			||||||
       transform="matrix(0.98683814,0,0,0.83062636,2.696034,1005.3655)" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:url(#linearGradient3875);fill-opacity:1;stroke:url(#radialGradient3877);stroke-width:0.9695127;stroke-opacity:1"
 | 
					 | 
				
			||||||
       d="m 17.246758,1026.7905 c -1.7156,4.5052 -2.482464,10.6205 8.726963,10.7476 4.849099,-1.8941 3.522783,-5.3561 6.021544,-11.8282 l -10.973104,-1.5977 z"
 | 
					 | 
				
			||||||
       id="path3794"
 | 
					 | 
				
			||||||
       inkscape:connector-curvature="0"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:type="arc"
 | 
					 | 
				
			||||||
       style="fill:url(#radialGradient3880);fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
       id="path3814"
 | 
					 | 
				
			||||||
       sodipodi:cx="24.718111"
 | 
					 | 
				
			||||||
       sodipodi:cy="23.38278"
 | 
					 | 
				
			||||||
       sodipodi:rx="10.593476"
 | 
					 | 
				
			||||||
       sodipodi:ry="9.6854639"
 | 
					 | 
				
			||||||
       d="m 35.311587,23.38278 a 10.593476,9.6854639 0 1 1 -21.186952,0 10.593476,9.6854639 0 1 1 21.186952,0 z"
 | 
					 | 
				
			||||||
       transform="matrix(0.85425691,0,0,0.84187503,3.9779774,1006.7561)" />
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 9.6 KiB  | 
@ -1,230 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
					 | 
				
			||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<svg
 | 
					 | 
				
			||||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
					 | 
				
			||||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
					 | 
				
			||||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
					 | 
				
			||||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns:xlink="http://www.w3.org/1999/xlink"
 | 
					 | 
				
			||||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
					 | 
				
			||||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
					 | 
				
			||||||
   width="48"
 | 
					 | 
				
			||||||
   height="48"
 | 
					 | 
				
			||||||
   id="svg3075"
 | 
					 | 
				
			||||||
   version="1.1"
 | 
					 | 
				
			||||||
   inkscape:version="0.48.1 r9760"
 | 
					 | 
				
			||||||
   sodipodi:docname="pin-up.svg"
 | 
					 | 
				
			||||||
   viewPort="0 0 48 48">
 | 
					 | 
				
			||||||
  <defs
 | 
					 | 
				
			||||||
     id="defs3077">
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient3965">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop3967"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop3969" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient3885">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#a8b5e9;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop3889" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop3891"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         style="stop-color:#1d4488;stop-opacity:1;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient3865">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#0e0ec3;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop3867" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop3883"
 | 
					 | 
				
			||||||
         offset="0.5"
 | 
					 | 
				
			||||||
         style="stop-color:#95b1e4;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#0d29c0;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop3869" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient3853">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#717171;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop3855" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop3861"
 | 
					 | 
				
			||||||
         offset="0.5"
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#818181;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop3857" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3853"
 | 
					 | 
				
			||||||
       id="linearGradient3859"
 | 
					 | 
				
			||||||
       x1="7.7696066"
 | 
					 | 
				
			||||||
       y1="34.979828"
 | 
					 | 
				
			||||||
       x2="11.854106"
 | 
					 | 
				
			||||||
       y2="39.107044"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="translate(4.8388015,1001.6582)" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3885"
 | 
					 | 
				
			||||||
       id="radialGradient3871"
 | 
					 | 
				
			||||||
       cx="14.801222"
 | 
					 | 
				
			||||||
       cy="1030.6609"
 | 
					 | 
				
			||||||
       fx="14.801222"
 | 
					 | 
				
			||||||
       fy="1030.6609"
 | 
					 | 
				
			||||||
       r="10.177785"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1,0,0,1.0108042,4.8388015,-13.880529)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3865"
 | 
					 | 
				
			||||||
       id="linearGradient3881"
 | 
					 | 
				
			||||||
       x1="15.012629"
 | 
					 | 
				
			||||||
       y1="11.922465"
 | 
					 | 
				
			||||||
       x2="31.098303"
 | 
					 | 
				
			||||||
       y2="28.858271"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1,0,0,0.97315436,4.8388015,1002.4769)" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3885"
 | 
					 | 
				
			||||||
       id="radialGradient3909"
 | 
					 | 
				
			||||||
       cx="16.437693"
 | 
					 | 
				
			||||||
       cy="22.596292"
 | 
					 | 
				
			||||||
       fx="16.437693"
 | 
					 | 
				
			||||||
       fy="22.596292"
 | 
					 | 
				
			||||||
       r="1.7789712"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1,0,0,8.3599999,0,-166.30871)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3865"
 | 
					 | 
				
			||||||
       id="linearGradient3927"
 | 
					 | 
				
			||||||
       x1="26.47109"
 | 
					 | 
				
			||||||
       y1="1010.7343"
 | 
					 | 
				
			||||||
       x2="35.294788"
 | 
					 | 
				
			||||||
       y2="1019.8425"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="translate(4.5541661,-2.1347654)" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient3965"
 | 
					 | 
				
			||||||
       id="radialGradient3995"
 | 
					 | 
				
			||||||
       cx="23.189369"
 | 
					 | 
				
			||||||
       cy="25.704245"
 | 
					 | 
				
			||||||
       fx="23.189369"
 | 
					 | 
				
			||||||
       fy="25.704245"
 | 
					 | 
				
			||||||
       r="37.336674"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1,0,0,1.0332422,0,-0.85446479)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <filter
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="filter4009"
 | 
					 | 
				
			||||||
       x="-0.19299152"
 | 
					 | 
				
			||||||
       width="1.385983"
 | 
					 | 
				
			||||||
       y="-0.18351803"
 | 
					 | 
				
			||||||
       height="1.3670361">
 | 
					 | 
				
			||||||
      <feGaussianBlur
 | 
					 | 
				
			||||||
         inkscape:collect="always"
 | 
					 | 
				
			||||||
         stdDeviation="3.8667902"
 | 
					 | 
				
			||||||
         id="feGaussianBlur4011" />
 | 
					 | 
				
			||||||
    </filter>
 | 
					 | 
				
			||||||
  </defs>
 | 
					 | 
				
			||||||
  <sodipodi:namedview
 | 
					 | 
				
			||||||
     id="base"
 | 
					 | 
				
			||||||
     pagecolor="#ffffff"
 | 
					 | 
				
			||||||
     bordercolor="#666666"
 | 
					 | 
				
			||||||
     borderopacity="1.0"
 | 
					 | 
				
			||||||
     inkscape:pageopacity="0.0"
 | 
					 | 
				
			||||||
     inkscape:pageshadow="2"
 | 
					 | 
				
			||||||
     inkscape:zoom="3.2819435"
 | 
					 | 
				
			||||||
     inkscape:cx="18.697469"
 | 
					 | 
				
			||||||
     inkscape:cy="17.287267"
 | 
					 | 
				
			||||||
     inkscape:document-units="px"
 | 
					 | 
				
			||||||
     inkscape:current-layer="layer1"
 | 
					 | 
				
			||||||
     showgrid="false"
 | 
					 | 
				
			||||||
     inkscape:window-width="970"
 | 
					 | 
				
			||||||
     inkscape:window-height="778"
 | 
					 | 
				
			||||||
     inkscape:window-x="284"
 | 
					 | 
				
			||||||
     inkscape:window-y="0"
 | 
					 | 
				
			||||||
     inkscape:window-maximized="0" />
 | 
					 | 
				
			||||||
  <metadata
 | 
					 | 
				
			||||||
     id="metadata3080">
 | 
					 | 
				
			||||||
    <rdf:RDF>
 | 
					 | 
				
			||||||
      <cc:Work
 | 
					 | 
				
			||||||
         rdf:about="">
 | 
					 | 
				
			||||||
        <dc:format>image/svg+xml</dc:format>
 | 
					 | 
				
			||||||
        <dc:type
 | 
					 | 
				
			||||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
					 | 
				
			||||||
        <dc:title></dc:title>
 | 
					 | 
				
			||||||
      </cc:Work>
 | 
					 | 
				
			||||||
    </rdf:RDF>
 | 
					 | 
				
			||||||
  </metadata>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     inkscape:label="Layer 1"
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer"
 | 
					 | 
				
			||||||
     id="layer1"
 | 
					 | 
				
			||||||
     transform="translate(0,-1004.3622)">
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:url(#radialGradient3995);stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1.0;filter:url(#filter4009)"
 | 
					 | 
				
			||||||
       d="M -0.85390618,50.988672 14.231769,27.790888 C 12.21393,25.133052 9.5514307,24.605255 9.9622384,18.824874 13.947134,14.236899 17.362759,16.258973 21.347654,16.54779 l 8.966014,-8.6813789 c 1.467204,-2.4778468 -1.023584,-4.6422045 0.569271,-7.25820222 4.802307,-0.84764718 6.662499,1.15219542 11.527733,6.26197842 4.061691,4.1873637 5.648882,7.0611607 4.411848,9.5352857 -1.075122,2.776443 -4.518349,-0.692782 -5.835025,0.56927 l -9.108332,10.104556 c -0.418785,3.74872 2.078647,7.861968 -1.280859,11.243098 -4.132171,0.818036 -6.734336,-1.933944 -9.819921,-3.557942 z"
 | 
					 | 
				
			||||||
       id="path3955"
 | 
					 | 
				
			||||||
       inkscape:connector-curvature="0"
 | 
					 | 
				
			||||||
       transform="translate(0,1004.3622)"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccccccccccc" />
 | 
					 | 
				
			||||||
    <g
 | 
					 | 
				
			||||||
       id="g3929">
 | 
					 | 
				
			||||||
      <path
 | 
					 | 
				
			||||||
         sodipodi:nodetypes="cccc"
 | 
					 | 
				
			||||||
         inkscape:connector-curvature="0"
 | 
					 | 
				
			||||||
         id="path3083"
 | 
					 | 
				
			||||||
         d="m 3.2884874,1051.0662 c 3.1862139,-6.2911 11.3693156,-15.19 15.4471616,-20.0327 l 2.86533,3.0086 c -3.476851,3.6575 -10.192375,10.8664 -18.3124916,17.0241 z"
 | 
					 | 
				
			||||||
         style="fill:url(#linearGradient3859);fill-opacity:1;stroke:#a5a5a5;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
 | 
					 | 
				
			||||||
      <path
 | 
					 | 
				
			||||||
         sodipodi:nodetypes="ccccc"
 | 
					 | 
				
			||||||
         inkscape:connector-curvature="0"
 | 
					 | 
				
			||||||
         id="path3863"
 | 
					 | 
				
			||||||
         d="m 11.10078,1023.3294 c 5.038264,10.1095 11.83652,14.8875 18.358981,18.2167 1.196291,-2.5422 1.454996,-5.6203 0,-9.6776 l -8.539061,-8.6814 c -3.704654,-1.8936 -6.871076,-1.3652 -9.81992,0.1423 z"
 | 
					 | 
				
			||||||
         style="fill:url(#radialGradient3871);fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
      <path
 | 
					 | 
				
			||||||
         sodipodi:nodetypes="ccccc"
 | 
					 | 
				
			||||||
         inkscape:connector-curvature="0"
 | 
					 | 
				
			||||||
         id="path3873"
 | 
					 | 
				
			||||||
         d="m 33.729292,1011.5171 -13.235545,11.4952 c 2.869602,4.2703 6.221839,7.4544 9.108332,9.1408 l 11.385416,-13.0187 z"
 | 
					 | 
				
			||||||
         style="fill:url(#linearGradient3881);fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
      <path
 | 
					 | 
				
			||||||
         sodipodi:nodetypes="ccccc"
 | 
					 | 
				
			||||||
         inkscape:connector-curvature="0"
 | 
					 | 
				
			||||||
         id="path3893"
 | 
					 | 
				
			||||||
         d="m 33.228885,1011.6148 c 1.843189,2.7806 3.431654,5.6597 7.19852,7.6953 l 5.398891,1.7423 c -7.6738,-4.7914 -10.989683,-9.5828 -13.947133,-14.3741 z"
 | 
					 | 
				
			||||||
         style="fill:url(#linearGradient3927);fill-opacity:1;stroke:none" />
 | 
					 | 
				
			||||||
      <path
 | 
					 | 
				
			||||||
         transform="matrix(0.68275275,-0.5590416,0.45791123,0.47036287,17.42507,1012.2127)"
 | 
					 | 
				
			||||||
         d="m 18.216664,22.596292 a 1.7789712,14.872199 0 1 1 -3.557943,0 1.7789712,14.872199 0 1 1 3.557943,0 z"
 | 
					 | 
				
			||||||
         sodipodi:ry="14.872199"
 | 
					 | 
				
			||||||
         sodipodi:rx="1.7789712"
 | 
					 | 
				
			||||||
         sodipodi:cy="22.596292"
 | 
					 | 
				
			||||||
         sodipodi:cx="16.437693"
 | 
					 | 
				
			||||||
         id="path3901"
 | 
					 | 
				
			||||||
         style="fill:url(#radialGradient3909);fill-opacity:1;stroke:none"
 | 
					 | 
				
			||||||
         sodipodi:type="arc" />
 | 
					 | 
				
			||||||
    </g>
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 8.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								web/images/texture.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								web/images/toolbarButton-bookmark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 244 B  | 
							
								
								
									
										
											BIN
										
									
								
								web/images/toolbarButton-download.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 512 B  | 
							
								
								
									
										
											BIN
										
									
								
								web/images/toolbarButton-menuArrows.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 237 B  | 
							
								
								
									
										
											BIN
										
									
								
								web/images/toolbarButton-pageDown-rtl.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 558 B  | 
							
								
								
									
										
											BIN
										
									
								
								web/images/toolbarButton-pageDown.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 353 B  | 
							
								
								
									
										
											BIN
										
									
								
								web/images/toolbarButton-pageUp-rtl.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 426 B  | 
							
								
								
									
										
											BIN
										
									
								
								web/images/toolbarButton-pageUp.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 344 B  | 
							
								
								
									
										
											BIN
										
									
								
								web/images/toolbarButton-print.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 474 B  | 
							
								
								
									
										
											BIN
										
									
								
								web/images/toolbarButton-sidebarToggle.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 349 B  | 
							
								
								
									
										
											BIN
										
									
								
								web/images/toolbarButton-viewOutline.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 300 B  | 
							
								
								
									
										
											BIN
										
									
								
								web/images/toolbarButton-viewThumbnail.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 211 B  | 
							
								
								
									
										
											BIN
										
									
								
								web/images/toolbarButton-zoomIn.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 228 B  | 
							
								
								
									
										
											BIN
										
									
								
								web/images/toolbarButton-zoomOut.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 143 B  | 
@ -1,437 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
					 | 
				
			||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
					 | 
				
			||||||
<svg
 | 
					 | 
				
			||||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
					 | 
				
			||||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
					 | 
				
			||||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
					 | 
				
			||||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns:xlink="http://www.w3.org/1999/xlink"
 | 
					 | 
				
			||||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
					 | 
				
			||||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
					 | 
				
			||||||
   width="48px"
 | 
					 | 
				
			||||||
   height="48px"
 | 
					 | 
				
			||||||
   id="svg6431"
 | 
					 | 
				
			||||||
   sodipodi:version="0.32"
 | 
					 | 
				
			||||||
   inkscape:version="0.46"
 | 
					 | 
				
			||||||
   sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/actions"
 | 
					 | 
				
			||||||
   sodipodi:docname="list-add.svg"
 | 
					 | 
				
			||||||
   inkscape:output_extension="org.inkscape.output.svg.inkscape"
 | 
					 | 
				
			||||||
   viewbox="0 0 48 48">
 | 
					 | 
				
			||||||
  <defs
 | 
					 | 
				
			||||||
     id="defs6433">
 | 
					 | 
				
			||||||
    <inkscape:perspective
 | 
					 | 
				
			||||||
       sodipodi:type="inkscape:persp3d"
 | 
					 | 
				
			||||||
       inkscape:vp_x="0 : 24 : 1"
 | 
					 | 
				
			||||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
					 | 
				
			||||||
       inkscape:vp_z="48 : 24 : 1"
 | 
					 | 
				
			||||||
       inkscape:persp3d-origin="24 : 16 : 1"
 | 
					 | 
				
			||||||
       id="perspective70" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient2091">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2093" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2095" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient7916">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop7918" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0.34020618;"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         id="stop7920" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient8662">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop8664" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop8666" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient8662"
 | 
					 | 
				
			||||||
       id="radialGradient1503"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.000000,0.000000,0.000000,0.536723,-1.018989e-13,16.87306)"
 | 
					 | 
				
			||||||
       cx="24.837126"
 | 
					 | 
				
			||||||
       cy="36.421127"
 | 
					 | 
				
			||||||
       fx="24.837126"
 | 
					 | 
				
			||||||
       fy="36.421127"
 | 
					 | 
				
			||||||
       r="15.644737" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient2847">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#3465a4;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2849" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#3465a4;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2851" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2847"
 | 
					 | 
				
			||||||
       id="linearGradient1488"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(-1.000000,0.000000,0.000000,-1.000000,-1.242480,40.08170)"
 | 
					 | 
				
			||||||
       x1="37.128052"
 | 
					 | 
				
			||||||
       y1="29.729605"
 | 
					 | 
				
			||||||
       x2="37.065414"
 | 
					 | 
				
			||||||
       y2="26.194071" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2831">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#3465a4;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2833" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop2855"
 | 
					 | 
				
			||||||
         offset="0.33333334"
 | 
					 | 
				
			||||||
         style="stop-color:#5b86be;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#83a8d8;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2835" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2831"
 | 
					 | 
				
			||||||
       id="linearGradient1486"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="translate(-48.30498,-6.043298)"
 | 
					 | 
				
			||||||
       x1="13.478554"
 | 
					 | 
				
			||||||
       y1="10.612206"
 | 
					 | 
				
			||||||
       x2="15.419417"
 | 
					 | 
				
			||||||
       y2="19.115122" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2380">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#b9cfe7;stop-opacity:1"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2382" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#729fcf;stop-opacity:1"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2384" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2682">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#3977c3;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2684" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#89aedc;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2686" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2682"
 | 
					 | 
				
			||||||
       id="linearGradient2688"
 | 
					 | 
				
			||||||
       x1="36.713837"
 | 
					 | 
				
			||||||
       y1="31.455952"
 | 
					 | 
				
			||||||
       x2="37.124462"
 | 
					 | 
				
			||||||
       y2="24.842253"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="translate(-48.77039,-5.765705)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient2690">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#c4d7eb;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2692" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#c4d7eb;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2694" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2690"
 | 
					 | 
				
			||||||
       id="linearGradient2696"
 | 
					 | 
				
			||||||
       x1="32.647972"
 | 
					 | 
				
			||||||
       y1="30.748846"
 | 
					 | 
				
			||||||
       x2="37.124462"
 | 
					 | 
				
			||||||
       y2="24.842253"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="translate(-48.77039,-5.765705)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient2871">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#3465a4;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2873" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#3465a4;stop-opacity:1"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2875" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2402">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#729fcf;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2404" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#528ac5;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2406" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2797"
 | 
					 | 
				
			||||||
       id="linearGradient1493"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       x1="5.9649176"
 | 
					 | 
				
			||||||
       y1="26.048164"
 | 
					 | 
				
			||||||
       x2="52.854097"
 | 
					 | 
				
			||||||
       y2="26.048164" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient2797">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2799" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2801" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2797"
 | 
					 | 
				
			||||||
       id="linearGradient1491"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       x1="5.9649176"
 | 
					 | 
				
			||||||
       y1="26.048164"
 | 
					 | 
				
			||||||
       x2="52.854097"
 | 
					 | 
				
			||||||
       y2="26.048164" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient7179">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop7181" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop7183" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2316">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2318" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0.65979379;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2320" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient1322">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop1324"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#729fcf" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop1326"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#5187d6;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient1322"
 | 
					 | 
				
			||||||
       id="linearGradient4975"
 | 
					 | 
				
			||||||
       x1="34.892849"
 | 
					 | 
				
			||||||
       y1="36.422989"
 | 
					 | 
				
			||||||
       x2="45.918697"
 | 
					 | 
				
			||||||
       y2="48.547989"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="translate(-18.01785,-13.57119)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient7179"
 | 
					 | 
				
			||||||
       id="linearGradient7185"
 | 
					 | 
				
			||||||
       x1="13.435029"
 | 
					 | 
				
			||||||
       y1="13.604306"
 | 
					 | 
				
			||||||
       x2="22.374878"
 | 
					 | 
				
			||||||
       y2="23.554308"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient7179"
 | 
					 | 
				
			||||||
       id="linearGradient7189"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       x1="13.435029"
 | 
					 | 
				
			||||||
       y1="13.604306"
 | 
					 | 
				
			||||||
       x2="22.374878"
 | 
					 | 
				
			||||||
       y2="23.554308"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(-1.000000,0.000000,0.000000,-1.000000,47.93934,50.02474)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2380"
 | 
					 | 
				
			||||||
       id="linearGradient7180"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       x1="62.513836"
 | 
					 | 
				
			||||||
       y1="36.061237"
 | 
					 | 
				
			||||||
       x2="15.984863"
 | 
					 | 
				
			||||||
       y2="20.60858" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2871"
 | 
					 | 
				
			||||||
       id="linearGradient7182"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       x1="46.834816"
 | 
					 | 
				
			||||||
       y1="45.264122"
 | 
					 | 
				
			||||||
       x2="45.380436"
 | 
					 | 
				
			||||||
       y2="50.939667" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2402"
 | 
					 | 
				
			||||||
       id="linearGradient7184"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       x1="18.935766"
 | 
					 | 
				
			||||||
       y1="23.667896"
 | 
					 | 
				
			||||||
       x2="53.588622"
 | 
					 | 
				
			||||||
       y2="26.649362" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2871"
 | 
					 | 
				
			||||||
       id="linearGradient7186"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       x1="46.834816"
 | 
					 | 
				
			||||||
       y1="45.264122"
 | 
					 | 
				
			||||||
       x2="45.380436"
 | 
					 | 
				
			||||||
       y2="50.939667" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient7916"
 | 
					 | 
				
			||||||
       id="linearGradient7922"
 | 
					 | 
				
			||||||
       x1="16.874998"
 | 
					 | 
				
			||||||
       y1="22.851799"
 | 
					 | 
				
			||||||
       x2="27.900846"
 | 
					 | 
				
			||||||
       y2="34.976799"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2091"
 | 
					 | 
				
			||||||
       id="radialGradient2097"
 | 
					 | 
				
			||||||
       cx="23.070683"
 | 
					 | 
				
			||||||
       cy="35.127438"
 | 
					 | 
				
			||||||
       fx="23.070683"
 | 
					 | 
				
			||||||
       fy="35.127438"
 | 
					 | 
				
			||||||
       r="10.319340"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(0.914812,1.265023e-2,-8.21502e-3,0.213562,2.253914,27.18889)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
  </defs>
 | 
					 | 
				
			||||||
  <sodipodi:namedview
 | 
					 | 
				
			||||||
     id="base"
 | 
					 | 
				
			||||||
     pagecolor="#ffffff"
 | 
					 | 
				
			||||||
     bordercolor="#666666"
 | 
					 | 
				
			||||||
     borderopacity="0.15686275"
 | 
					 | 
				
			||||||
     inkscape:pageopacity="0.0"
 | 
					 | 
				
			||||||
     inkscape:pageshadow="2"
 | 
					 | 
				
			||||||
     inkscape:zoom="1"
 | 
					 | 
				
			||||||
     inkscape:cx="-123.56934"
 | 
					 | 
				
			||||||
     inkscape:cy="0.031886897"
 | 
					 | 
				
			||||||
     inkscape:current-layer="layer1"
 | 
					 | 
				
			||||||
     showgrid="false"
 | 
					 | 
				
			||||||
     inkscape:grid-bbox="true"
 | 
					 | 
				
			||||||
     inkscape:document-units="px"
 | 
					 | 
				
			||||||
     inkscape:window-width="1280"
 | 
					 | 
				
			||||||
     inkscape:window-height="818"
 | 
					 | 
				
			||||||
     inkscape:window-x="0"
 | 
					 | 
				
			||||||
     inkscape:window-y="30"
 | 
					 | 
				
			||||||
     showguides="true"
 | 
					 | 
				
			||||||
     inkscape:guide-bbox="true"
 | 
					 | 
				
			||||||
     inkscape:showpageshadow="false" />
 | 
					 | 
				
			||||||
  <metadata
 | 
					 | 
				
			||||||
     id="metadata6436">
 | 
					 | 
				
			||||||
    <rdf:RDF>
 | 
					 | 
				
			||||||
      <cc:Work
 | 
					 | 
				
			||||||
         rdf:about="">
 | 
					 | 
				
			||||||
        <dc:format>image/svg+xml</dc:format>
 | 
					 | 
				
			||||||
        <dc:type
 | 
					 | 
				
			||||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
					 | 
				
			||||||
        <dc:title>Add</dc:title>
 | 
					 | 
				
			||||||
        <dc:date>2006-01-04</dc:date>
 | 
					 | 
				
			||||||
        <dc:creator>
 | 
					 | 
				
			||||||
          <cc:Agent>
 | 
					 | 
				
			||||||
            <dc:title>Andreas Nilsson</dc:title>
 | 
					 | 
				
			||||||
          </cc:Agent>
 | 
					 | 
				
			||||||
        </dc:creator>
 | 
					 | 
				
			||||||
        <dc:source>http://tango-project.org</dc:source>
 | 
					 | 
				
			||||||
        <dc:subject>
 | 
					 | 
				
			||||||
          <rdf:Bag>
 | 
					 | 
				
			||||||
            <rdf:li>add</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>plus</rdf:li>
 | 
					 | 
				
			||||||
          </rdf:Bag>
 | 
					 | 
				
			||||||
        </dc:subject>
 | 
					 | 
				
			||||||
        <cc:license
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
 | 
					 | 
				
			||||||
      </cc:Work>
 | 
					 | 
				
			||||||
      <cc:License
 | 
					 | 
				
			||||||
         rdf:about="http://creativecommons.org/licenses/publicdomain/">
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#Reproduction" />
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#Distribution" />
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
 | 
					 | 
				
			||||||
      </cc:License>
 | 
					 | 
				
			||||||
    </rdf:RDF>
 | 
					 | 
				
			||||||
  </metadata>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     id="layer1"
 | 
					 | 
				
			||||||
     inkscape:label="Layer 1"
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer">
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       sodipodi:type="arc"
 | 
					 | 
				
			||||||
       style="opacity:0.10824742;fill:url(#radialGradient2097);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
 | 
					 | 
				
			||||||
       id="path1361"
 | 
					 | 
				
			||||||
       sodipodi:cx="22.958872"
 | 
					 | 
				
			||||||
       sodipodi:cy="34.94062"
 | 
					 | 
				
			||||||
       sodipodi:rx="10.31934"
 | 
					 | 
				
			||||||
       sodipodi:ry="2.320194"
 | 
					 | 
				
			||||||
       d="M 33.278212 34.94062 A 10.31934 2.320194 0 1 1  12.639532,34.94062 A 10.31934 2.320194 0 1 1  33.278212 34.94062 z"
 | 
					 | 
				
			||||||
       transform="matrix(1.550487,0,0,1.978714,-12.4813,-32.49103)" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:#75a1d0;fill-opacity:1.0000000;stroke:#3465a4;stroke-width:1.0000004px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
 | 
					 | 
				
			||||||
       d="M 27.514356,37.542682 L 27.514356,28.515722 L 37.492820,28.475543 L 37.492820,21.480219 L 27.523285,21.480219 L 27.514356,11.520049 L 20.498082,11.531210 L 20.502546,21.462362 L 10.512920,21.536022 L 10.477206,28.504561 L 20.511475,28.475543 L 20.518171,37.515896 L 27.514356,37.542682 z "
 | 
					 | 
				
			||||||
       id="text1314"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccccccccccc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="opacity:0.40860215;fill:url(#linearGradient4975);fill-opacity:1.0000000;stroke:url(#linearGradient7922);stroke-width:1.0000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
 | 
					 | 
				
			||||||
       d="M 26.498702,36.533920 L 26.498702,27.499738 L 36.501304,27.499738 L 36.494607,22.475309 L 26.507630,22.475309 L 26.507630,12.480335 L 21.512796,12.498193 L 21.521725,22.475309 L 11.495536,22.493166 L 11.468750,27.466256 L 21.533143,27.475185 L 21.519750,36.502670 L 26.498702,36.533920 z "
 | 
					 | 
				
			||||||
       id="path7076"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccccccccccc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;opacity:0.31182796"
 | 
					 | 
				
			||||||
       d="M 11.000000,25.000000 C 11.000000,26.937500 36.984375,24.031250 36.984375,24.968750 L 36.984375,21.968750 L 27.000000,22.000000 L 27.000000,12.034772 L 21.000000,12.034772 L 21.000000,22.000000 L 11.000000,22.000000 L 11.000000,25.000000 z "
 | 
					 | 
				
			||||||
       id="path7914"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccccccc" />
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 14 KiB  | 
@ -1,425 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
					 | 
				
			||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
					 | 
				
			||||||
<svg
 | 
					 | 
				
			||||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
					 | 
				
			||||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
					 | 
				
			||||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
					 | 
				
			||||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
   xmlns:xlink="http://www.w3.org/1999/xlink"
 | 
					 | 
				
			||||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
					 | 
				
			||||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
					 | 
				
			||||||
   width="48px"
 | 
					 | 
				
			||||||
   height="48px"
 | 
					 | 
				
			||||||
   id="svg6431"
 | 
					 | 
				
			||||||
   sodipodi:version="0.32"
 | 
					 | 
				
			||||||
   inkscape:version="0.46"
 | 
					 | 
				
			||||||
   sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/actions"
 | 
					 | 
				
			||||||
   sodipodi:docname="list-remove.svg"
 | 
					 | 
				
			||||||
   inkscape:output_extension="org.inkscape.output.svg.inkscape"
 | 
					 | 
				
			||||||
   viewbox="0 0 48 48">
 | 
					 | 
				
			||||||
  <defs
 | 
					 | 
				
			||||||
     id="defs6433">
 | 
					 | 
				
			||||||
    <inkscape:perspective
 | 
					 | 
				
			||||||
       sodipodi:type="inkscape:persp3d"
 | 
					 | 
				
			||||||
       inkscape:vp_x="0 : 24 : 1"
 | 
					 | 
				
			||||||
       inkscape:vp_y="0 : 1000 : 0"
 | 
					 | 
				
			||||||
       inkscape:vp_z="48 : 24 : 1"
 | 
					 | 
				
			||||||
       inkscape:persp3d-origin="24 : 16 : 1"
 | 
					 | 
				
			||||||
       id="perspective69" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient2091">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2093" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2095" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2091"
 | 
					 | 
				
			||||||
       id="radialGradient2097"
 | 
					 | 
				
			||||||
       cx="23.070683"
 | 
					 | 
				
			||||||
       cy="35.127438"
 | 
					 | 
				
			||||||
       fx="23.070683"
 | 
					 | 
				
			||||||
       fy="35.127438"
 | 
					 | 
				
			||||||
       r="10.319340"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(0.914812,1.265023e-2,-8.21502e-3,0.213562,2.253914,27.18889)"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient7916">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop7918" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0.34020618;"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         id="stop7920" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient8662">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop8664" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop8666" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <radialGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient8662"
 | 
					 | 
				
			||||||
       id="radialGradient1503"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(1.000000,0.000000,0.000000,0.536723,-1.018989e-13,16.87306)"
 | 
					 | 
				
			||||||
       cx="24.837126"
 | 
					 | 
				
			||||||
       cy="36.421127"
 | 
					 | 
				
			||||||
       fx="24.837126"
 | 
					 | 
				
			||||||
       fy="36.421127"
 | 
					 | 
				
			||||||
       r="15.644737" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient2847">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#3465a4;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2849" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#3465a4;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2851" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2847"
 | 
					 | 
				
			||||||
       id="linearGradient1488"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(-1.000000,0.000000,0.000000,-1.000000,-1.242480,40.08170)"
 | 
					 | 
				
			||||||
       x1="37.128052"
 | 
					 | 
				
			||||||
       y1="29.729605"
 | 
					 | 
				
			||||||
       x2="37.065414"
 | 
					 | 
				
			||||||
       y2="26.194071" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2831">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#3465a4;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2833" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop2855"
 | 
					 | 
				
			||||||
         offset="0.33333334"
 | 
					 | 
				
			||||||
         style="stop-color:#5b86be;stop-opacity:1;" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#83a8d8;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2835" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2831"
 | 
					 | 
				
			||||||
       id="linearGradient1486"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="translate(-48.30498,-6.043298)"
 | 
					 | 
				
			||||||
       x1="13.478554"
 | 
					 | 
				
			||||||
       y1="10.612206"
 | 
					 | 
				
			||||||
       x2="15.419417"
 | 
					 | 
				
			||||||
       y2="19.115122" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2380">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#b9cfe7;stop-opacity:1"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2382" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#729fcf;stop-opacity:1"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2384" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2682">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#3977c3;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2684" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#89aedc;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2686" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2682"
 | 
					 | 
				
			||||||
       id="linearGradient2688"
 | 
					 | 
				
			||||||
       x1="36.713837"
 | 
					 | 
				
			||||||
       y1="31.455952"
 | 
					 | 
				
			||||||
       x2="37.124462"
 | 
					 | 
				
			||||||
       y2="24.842253"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="translate(-48.77039,-5.765705)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient2690">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#c4d7eb;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2692" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#c4d7eb;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2694" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2690"
 | 
					 | 
				
			||||||
       id="linearGradient2696"
 | 
					 | 
				
			||||||
       x1="32.647972"
 | 
					 | 
				
			||||||
       y1="30.748846"
 | 
					 | 
				
			||||||
       x2="37.124462"
 | 
					 | 
				
			||||||
       y2="24.842253"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="translate(-48.77039,-5.765705)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient2871">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#3465a4;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2873" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#3465a4;stop-opacity:1"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2875" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2402">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#729fcf;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2404" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#528ac5;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2406" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2797"
 | 
					 | 
				
			||||||
       id="linearGradient1493"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       x1="5.9649176"
 | 
					 | 
				
			||||||
       y1="26.048164"
 | 
					 | 
				
			||||||
       x2="52.854097"
 | 
					 | 
				
			||||||
       y2="26.048164" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient2797">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2799" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2801" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2797"
 | 
					 | 
				
			||||||
       id="linearGradient1491"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       x1="5.9649176"
 | 
					 | 
				
			||||||
       y1="26.048164"
 | 
					 | 
				
			||||||
       x2="52.854097"
 | 
					 | 
				
			||||||
       y2="26.048164" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       id="linearGradient7179">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop7181" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop7183" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient2316">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#000000;stop-opacity:1;"
 | 
					 | 
				
			||||||
         offset="0"
 | 
					 | 
				
			||||||
         id="stop2318" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         style="stop-color:#ffffff;stop-opacity:0.65979379;"
 | 
					 | 
				
			||||||
         offset="1"
 | 
					 | 
				
			||||||
         id="stop2320" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       id="linearGradient1322">
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop1324"
 | 
					 | 
				
			||||||
         offset="0.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#729fcf" />
 | 
					 | 
				
			||||||
      <stop
 | 
					 | 
				
			||||||
         id="stop1326"
 | 
					 | 
				
			||||||
         offset="1.0000000"
 | 
					 | 
				
			||||||
         style="stop-color:#5187d6;stop-opacity:1.0000000;" />
 | 
					 | 
				
			||||||
    </linearGradient>
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient1322"
 | 
					 | 
				
			||||||
       id="linearGradient4975"
 | 
					 | 
				
			||||||
       x1="34.892849"
 | 
					 | 
				
			||||||
       y1="36.422989"
 | 
					 | 
				
			||||||
       x2="45.918697"
 | 
					 | 
				
			||||||
       y2="48.547989"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       gradientTransform="translate(-18.01785,-13.57119)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient7179"
 | 
					 | 
				
			||||||
       id="linearGradient7185"
 | 
					 | 
				
			||||||
       x1="13.435029"
 | 
					 | 
				
			||||||
       y1="13.604306"
 | 
					 | 
				
			||||||
       x2="22.374878"
 | 
					 | 
				
			||||||
       y2="23.554308"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient7179"
 | 
					 | 
				
			||||||
       id="linearGradient7189"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       x1="13.435029"
 | 
					 | 
				
			||||||
       y1="13.604306"
 | 
					 | 
				
			||||||
       x2="22.374878"
 | 
					 | 
				
			||||||
       y2="23.554308"
 | 
					 | 
				
			||||||
       gradientTransform="matrix(-1.000000,0.000000,0.000000,-1.000000,47.93934,50.02474)" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2380"
 | 
					 | 
				
			||||||
       id="linearGradient7180"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       x1="62.513836"
 | 
					 | 
				
			||||||
       y1="36.061237"
 | 
					 | 
				
			||||||
       x2="15.984863"
 | 
					 | 
				
			||||||
       y2="20.60858" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2871"
 | 
					 | 
				
			||||||
       id="linearGradient7182"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       x1="46.834816"
 | 
					 | 
				
			||||||
       y1="45.264122"
 | 
					 | 
				
			||||||
       x2="45.380436"
 | 
					 | 
				
			||||||
       y2="50.939667" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2402"
 | 
					 | 
				
			||||||
       id="linearGradient7184"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       x1="18.935766"
 | 
					 | 
				
			||||||
       y1="23.667896"
 | 
					 | 
				
			||||||
       x2="53.588622"
 | 
					 | 
				
			||||||
       y2="26.649362" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient2871"
 | 
					 | 
				
			||||||
       id="linearGradient7186"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse"
 | 
					 | 
				
			||||||
       x1="46.834816"
 | 
					 | 
				
			||||||
       y1="45.264122"
 | 
					 | 
				
			||||||
       x2="45.380436"
 | 
					 | 
				
			||||||
       y2="50.939667" />
 | 
					 | 
				
			||||||
    <linearGradient
 | 
					 | 
				
			||||||
       inkscape:collect="always"
 | 
					 | 
				
			||||||
       xlink:href="#linearGradient7916"
 | 
					 | 
				
			||||||
       id="linearGradient7922"
 | 
					 | 
				
			||||||
       x1="16.874998"
 | 
					 | 
				
			||||||
       y1="22.851799"
 | 
					 | 
				
			||||||
       x2="27.900846"
 | 
					 | 
				
			||||||
       y2="34.976799"
 | 
					 | 
				
			||||||
       gradientUnits="userSpaceOnUse" />
 | 
					 | 
				
			||||||
  </defs>
 | 
					 | 
				
			||||||
  <sodipodi:namedview
 | 
					 | 
				
			||||||
     id="base"
 | 
					 | 
				
			||||||
     pagecolor="#ffffff"
 | 
					 | 
				
			||||||
     bordercolor="#666666"
 | 
					 | 
				
			||||||
     borderopacity="0.10980392"
 | 
					 | 
				
			||||||
     inkscape:pageopacity="0.0"
 | 
					 | 
				
			||||||
     inkscape:pageshadow="2"
 | 
					 | 
				
			||||||
     inkscape:zoom="1"
 | 
					 | 
				
			||||||
     inkscape:cx="-123.27226"
 | 
					 | 
				
			||||||
     inkscape:cy="26.474252"
 | 
					 | 
				
			||||||
     inkscape:current-layer="layer1"
 | 
					 | 
				
			||||||
     showgrid="false"
 | 
					 | 
				
			||||||
     inkscape:grid-bbox="true"
 | 
					 | 
				
			||||||
     inkscape:document-units="px"
 | 
					 | 
				
			||||||
     inkscape:window-width="1280"
 | 
					 | 
				
			||||||
     inkscape:window-height="818"
 | 
					 | 
				
			||||||
     inkscape:window-x="0"
 | 
					 | 
				
			||||||
     inkscape:window-y="30"
 | 
					 | 
				
			||||||
     inkscape:showpageshadow="false" />
 | 
					 | 
				
			||||||
  <metadata
 | 
					 | 
				
			||||||
     id="metadata6436">
 | 
					 | 
				
			||||||
    <rdf:RDF>
 | 
					 | 
				
			||||||
      <cc:Work
 | 
					 | 
				
			||||||
         rdf:about="">
 | 
					 | 
				
			||||||
        <dc:format>image/svg+xml</dc:format>
 | 
					 | 
				
			||||||
        <dc:type
 | 
					 | 
				
			||||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
					 | 
				
			||||||
        <dc:title>Remove</dc:title>
 | 
					 | 
				
			||||||
        <dc:date>2006-01-04</dc:date>
 | 
					 | 
				
			||||||
        <dc:creator>
 | 
					 | 
				
			||||||
          <cc:Agent>
 | 
					 | 
				
			||||||
            <dc:title>Andreas Nilsson</dc:title>
 | 
					 | 
				
			||||||
          </cc:Agent>
 | 
					 | 
				
			||||||
        </dc:creator>
 | 
					 | 
				
			||||||
        <dc:source>http://tango-project.org</dc:source>
 | 
					 | 
				
			||||||
        <dc:subject>
 | 
					 | 
				
			||||||
          <rdf:Bag>
 | 
					 | 
				
			||||||
            <rdf:li>remove</rdf:li>
 | 
					 | 
				
			||||||
            <rdf:li>delete</rdf:li>
 | 
					 | 
				
			||||||
          </rdf:Bag>
 | 
					 | 
				
			||||||
        </dc:subject>
 | 
					 | 
				
			||||||
        <cc:license
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
 | 
					 | 
				
			||||||
      </cc:Work>
 | 
					 | 
				
			||||||
      <cc:License
 | 
					 | 
				
			||||||
         rdf:about="http://creativecommons.org/licenses/publicdomain/">
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#Reproduction" />
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#Distribution" />
 | 
					 | 
				
			||||||
        <cc:permits
 | 
					 | 
				
			||||||
           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
 | 
					 | 
				
			||||||
      </cc:License>
 | 
					 | 
				
			||||||
    </rdf:RDF>
 | 
					 | 
				
			||||||
  </metadata>
 | 
					 | 
				
			||||||
  <g
 | 
					 | 
				
			||||||
     id="layer1"
 | 
					 | 
				
			||||||
     inkscape:label="Layer 1"
 | 
					 | 
				
			||||||
     inkscape:groupmode="layer">
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:#75a1d0;fill-opacity:1.0000000;stroke:#3465a4;stroke-width:1.0000004px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
 | 
					 | 
				
			||||||
       d="M 27.514356,28.359472 L 39.633445,28.475543 L 39.633445,21.480219 L 27.523285,21.480219 L 20.502546,21.462362 L 8.5441705,21.489147 L 8.5084565,28.457686 L 20.511475,28.475543 L 27.514356,28.359472 z "
 | 
					 | 
				
			||||||
       id="text1314"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccccccc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="opacity:0.40860215;fill:url(#linearGradient4975);fill-opacity:1.0000000;stroke:url(#linearGradient7922);stroke-width:1.0000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
 | 
					 | 
				
			||||||
       d="M 38.579429,27.484113 L 38.588357,22.475309 L 9.5267863,22.493166 L 9.5000003,27.466256 L 38.579429,27.484113 z "
 | 
					 | 
				
			||||||
       id="path7076"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccc" />
 | 
					 | 
				
			||||||
    <path
 | 
					 | 
				
			||||||
       style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;opacity:0.31182796"
 | 
					 | 
				
			||||||
       d="M 9.0000000,25.000000 C 9.0000000,26.937500 39.125000,24.062500 39.125000,25.000000 L 39.125000,22.000000 L 9.0000000,22.000000 L 9.0000000,25.000000 z "
 | 
					 | 
				
			||||||
       id="path7914"
 | 
					 | 
				
			||||||
       sodipodi:nodetypes="ccccc" />
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 13 KiB  | 
@ -1,5 +1,9 @@
 | 
				
			|||||||
<!-- This snippet is used in firefox extension, see Makefile -->
 | 
					<!-- This snippet is used in firefox extension, see Makefile -->
 | 
				
			||||||
<base href="resource://pdf.js/web/" />
 | 
					<base href="resource://pdf.js/web/" />
 | 
				
			||||||
 | 
					<script type="application/l10n">
 | 
				
			||||||
 | 
					<!-- PDFJSSCRIPT_LOCALE_DATA -->
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					<script type="text/javascript" src="l10n.js"></script>
 | 
				
			||||||
<script type="text/javascript" id="PDFJS_SCRIPT_TAG">
 | 
					<script type="text/javascript" id="PDFJS_SCRIPT_TAG">
 | 
				
			||||||
<!--
 | 
					<!--
 | 
				
			||||||
// pdf.js is inlined here because resource:// urls won't work
 | 
					// pdf.js is inlined here because resource:// urls won't work
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,6 @@
 | 
				
			|||||||
<!-- This snippet is used in production, see Makefile -->
 | 
					<!-- This snippet is used in production, see Makefile -->
 | 
				
			||||||
 | 
					<link rel="resource" type="application/l10n" href="locale.properties"/>
 | 
				
			||||||
 | 
					<script type="text/javascript" src="l10n.js"></script>
 | 
				
			||||||
<script type="text/javascript" src="../build/pdf.js"></script>
 | 
					<script type="text/javascript" src="../build/pdf.js"></script>
 | 
				
			||||||
<script type="text/javascript">
 | 
					<script type="text/javascript">
 | 
				
			||||||
  // This specifies the location of the pdf.js file.
 | 
					  // This specifies the location of the pdf.js file.
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1045
									
								
								web/viewer.css
									
									
									
									
									
								
							
							
						
						
							
								
								
									
										319
									
								
								web/viewer.html
									
									
									
									
									
								
							
							
						
						@ -1,163 +1,182 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					<!DOCTYPE html>
 | 
				
			||||||
<html>
 | 
					<html dir="ltr">
 | 
				
			||||||
    <head>
 | 
					  <head>
 | 
				
			||||||
        <title>Simple pdf.js page viewer</title>
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
        <!-- PDFJSSCRIPT_INCLUDE_FIREFOX_EXTENSION -->
 | 
					    <title>PDF.js viewer</title>
 | 
				
			||||||
 | 
					    <!-- PDFJSSCRIPT_INCLUDE_FIREFOX_EXTENSION -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <link rel="stylesheet" href="viewer.css"/>
 | 
					    <link rel="stylesheet" href="viewer.css"/>
 | 
				
			||||||
 | 
					    <link rel="resource" type="application/l10n" href="locale.properties"/><!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <script type="text/javascript" src="compatibility.js"></script> <!-- PDFJSSCRIPT_REMOVE_FIREFOX_EXTENSION -->
 | 
					    <script type="text/javascript" src="compatibility.js"></script> <!-- PDFJSSCRIPT_REMOVE_FIREFOX_EXTENSION -->
 | 
				
			||||||
 | 
					    <script type="text/javascript" src="../external/webL10n/l10n.js"></script><!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- PDFJSSCRIPT_INCLUDE_BUILD -->
 | 
					    <!-- PDFJSSCRIPT_INCLUDE_BUILD -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/core.js"></script> <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/core.js"></script> <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/util.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/util.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/api.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/api.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/metadata.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/metadata.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/canvas.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/canvas.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/obj.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/obj.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/function.js"></script> <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/function.js"></script> <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/charsets.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/charsets.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/cidmaps.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/cidmaps.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/colorspace.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/colorspace.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/crypto.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/crypto.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/evaluator.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/evaluator.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/fonts.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/fonts.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/glyphlist.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/glyphlist.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/image.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/image.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/metrics.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/metrics.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/parser.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/parser.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/pattern.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/pattern.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/stream.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/stream.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/worker.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/worker.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../external/jpgjs/jpg.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../external/jpgjs/jpg.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/jpx.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/jpx.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="../src/bidi.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript" src="../src/bidi.js"></script>  <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript">PDFJS.workerSrc = '../src/worker_loader.js';</script> <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
					    <script type="text/javascript">PDFJS.workerSrc = '../src/worker_loader.js';</script> <!-- PDFJSSCRIPT_REMOVE_CORE -->
 | 
				
			||||||
        <script type="text/javascript" src="debugger.js"></script>
 | 
					    <script type="text/javascript" src="debugger.js"></script>
 | 
				
			||||||
        <script type="text/javascript" src="viewer.js"></script>
 | 
					    <script type="text/javascript" src="viewer.js"></script>
 | 
				
			||||||
 | 
					  </head>
 | 
				
			||||||
 | 
					 | 
				
			||||||
    </head>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <body>
 | 
					  <body>
 | 
				
			||||||
    <div id="controls">
 | 
					    <div id="outerContainer">
 | 
				
			||||||
      <button id="previous" onclick="PDFView.page--;" oncontextmenu="return false;">
 | 
					 | 
				
			||||||
        <img src="images/go-up.svg" align="top" height="16"/>
 | 
					 | 
				
			||||||
        Previous
 | 
					 | 
				
			||||||
      </button>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <button id="next" onclick="PDFView.page++;" oncontextmenu="return false;">
 | 
					      <div id="sidebarContainer">
 | 
				
			||||||
        <img src="images/go-down.svg" align="top" height="16"/>
 | 
					        <div id="toolbarSidebar">
 | 
				
			||||||
        Next
 | 
					          <button id="viewThumbnail" class="toolbarButton group toggled" title="Show Thumbnails" onclick="PDFView.switchSidebarView('thumbs')" tabindex="1" data-l10n-id="thumbs">
 | 
				
			||||||
      </button>
 | 
					             <span data-l10n-id="thumbs_label">Thumbnails</span>
 | 
				
			||||||
 | 
					          </button>
 | 
				
			||||||
      <div class="separator"></div>
 | 
					          <button id="viewOutline" class="toolbarButton group" title="Show Document Outline" onclick="PDFView.switchSidebarView('outline')" tabindex="2" data-l10n-id="outline">
 | 
				
			||||||
 | 
					             <span data-l10n-id="outline_label">Document Outline</span>
 | 
				
			||||||
      <input type="number" id="pageNumber" onchange="PDFView.page = this.value;" value="1" size="4" min="1" />
 | 
					          </button>
 | 
				
			||||||
 | 
					          <button id="viewSearch" class="toolbarButton group" title="Search Document" onclick="PDFView.switchSidebarView('search')" tabindex="3" data-l10n-id="search">
 | 
				
			||||||
      <span>/</span>
 | 
					             <span data-l10n-id="search_label">Search Document</span>
 | 
				
			||||||
      <span id="numPages">--</span>
 | 
					          </button>
 | 
				
			||||||
 | 
					 | 
				
			||||||
      <div class="separator"></div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <button id="zoomOut" title="Zoom Out" onclick="PDFView.zoomOut();" oncontextmenu="return false;">
 | 
					 | 
				
			||||||
        <img src="images/zoom-out.svg" align="top" height="16"/>
 | 
					 | 
				
			||||||
      </button>
 | 
					 | 
				
			||||||
      <button id="zoomIn" title="Zoom In" onclick="PDFView.zoomIn();" oncontextmenu="return false;">
 | 
					 | 
				
			||||||
        <img src="images/zoom-in.svg" align="top" height="16"/>
 | 
					 | 
				
			||||||
      </button>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <div class="separator"></div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <select id="scaleSelect" onchange="PDFView.parseScale(this.value);" oncontextmenu="return false;">
 | 
					 | 
				
			||||||
        <option id="customScaleOption" value="custom"></option>
 | 
					 | 
				
			||||||
        <option value="0.5">50%</option>
 | 
					 | 
				
			||||||
        <option value="0.75">75%</option>
 | 
					 | 
				
			||||||
        <option value="1">100%</option>
 | 
					 | 
				
			||||||
        <option value="1.25">125%</option>
 | 
					 | 
				
			||||||
        <option value="1.5">150%</option>
 | 
					 | 
				
			||||||
        <option value="2">200%</option>
 | 
					 | 
				
			||||||
        <option id="pageWidthOption" value="page-width">Page Width</option>
 | 
					 | 
				
			||||||
        <option id="pageFitOption" value="page-fit">Page Fit</option>
 | 
					 | 
				
			||||||
        <option id="pageAutoOption" value="auto" selected="selected">Auto</option>
 | 
					 | 
				
			||||||
      </select>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <div class="separator"></div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <button id="print" onclick="window.print();" oncontextmenu="return false;">
 | 
					 | 
				
			||||||
        <img src="images/document-print.svg" align="top" height="16"/>
 | 
					 | 
				
			||||||
        Print
 | 
					 | 
				
			||||||
      </button>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <button id="download" title="Download" onclick="PDFView.download();" oncontextmenu="return false;">
 | 
					 | 
				
			||||||
        <img src="images/download.svg" align="top" height="16"/>
 | 
					 | 
				
			||||||
        Download
 | 
					 | 
				
			||||||
      </button>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <div class="separator"></div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <input id="fileInput" type="file" oncontextmenu="return false;"/>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <div id="fileInputSeperator" class="separator"></div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <a href="#" id="viewBookmark" title="Bookmark (or copy) current location">
 | 
					 | 
				
			||||||
        <img src="images/bookmark.svg" alt="Bookmark" align="top" height="16"/>
 | 
					 | 
				
			||||||
      </a>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div id="errorWrapper" hidden='true'>
 | 
					 | 
				
			||||||
      <div id="errorMessageLeft">
 | 
					 | 
				
			||||||
        <span id="errorMessage"></span>
 | 
					 | 
				
			||||||
        <button id="errorShowMore" onclick="" oncontextmenu="return false;">
 | 
					 | 
				
			||||||
          More Information
 | 
					 | 
				
			||||||
        </button>
 | 
					 | 
				
			||||||
        <button id="errorShowLess" onclick="" oncontextmenu="return false;" hidden='true'>
 | 
					 | 
				
			||||||
          Less Information
 | 
					 | 
				
			||||||
        </button>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div id="errorMessageRight">
 | 
					 | 
				
			||||||
        <button id="errorClose" oncontextmenu="return false;">
 | 
					 | 
				
			||||||
          Close
 | 
					 | 
				
			||||||
        </button>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div class="clearBoth"></div>
 | 
					 | 
				
			||||||
      <textarea id="errorMoreInfo" hidden='true' readonly="readonly"></textarea>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <div id="sidebar">
 | 
					 | 
				
			||||||
      <div id="sidebarBox">
 | 
					 | 
				
			||||||
        <div id="pinIcon" onClick="PDFView.pinSidebar()"></div>
 | 
					 | 
				
			||||||
        <div id="sidebarScrollView">
 | 
					 | 
				
			||||||
          <div id="sidebarView"></div>
 | 
					 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        <div id="outlineScrollView" hidden='true'>
 | 
					        <div id="sidebarContent">
 | 
				
			||||||
          <div id="outlineView"></div>
 | 
					          <div id="thumbnailView">
 | 
				
			||||||
        </div>
 | 
					          </div>
 | 
				
			||||||
        <div id="searchScrollView" hidden='true'>
 | 
					          <div id="outlineView" class="hidden">
 | 
				
			||||||
          <div id="searchToolbar">
 | 
					          </div>
 | 
				
			||||||
            <input id="searchTermsInput" onkeydown='if (event.keyCode == 13) PDFView.search()'>
 | 
					          <div id="searchView" class="hidden">
 | 
				
			||||||
            <button id="searchButton" onclick='PDFView.search()'>Find</button>
 | 
					            <div id="searchToolbar">
 | 
				
			||||||
 | 
					              <input id="searchTermsInput" onkeydown='if (event.keyCode == 13) PDFView.search()'>
 | 
				
			||||||
 | 
					              <button id="searchButton" onclick='PDFView.search()'>Find</button>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div id="searchResults"></div>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div id="searchResults"></div>
 | 
					 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        <div id="sidebarControls">
 | 
					      </div>  <!-- sidebarContainer -->
 | 
				
			||||||
          <button id="thumbsSwitch" title="Show Thumbnails" onclick="PDFView.switchSidebarView('thumbs')" data-selected>
 | 
					 | 
				
			||||||
            <img src="images/nav-thumbs.svg" align="top" height="16" alt="Thumbs" />
 | 
					 | 
				
			||||||
          </button>
 | 
					 | 
				
			||||||
          <button id="outlineSwitch" title="Show Document Outline" onclick="PDFView.switchSidebarView('outline')" disabled>
 | 
					 | 
				
			||||||
            <img src="images/nav-outline.svg" align="top" height="16" alt="Document Outline" />
 | 
					 | 
				
			||||||
          </button>
 | 
					 | 
				
			||||||
          <button id="searchSwitch" title="Show Search" onclick="PDFView.switchSidebarView('search')">
 | 
					 | 
				
			||||||
            <img src="images/edit-find.svg" align="top" height="16" alt="Search Document" />
 | 
					 | 
				
			||||||
          </button>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <div id="loadingBox">
 | 
					      <div id="mainContainer">
 | 
				
			||||||
        <div id="loading">Loading... 0%</div>
 | 
					        <div class="toolbar">
 | 
				
			||||||
        <div id="loadingBar"><div class="progress"></div></div>
 | 
					          <div id="toolbarContainer">
 | 
				
			||||||
    </div>
 | 
					
 | 
				
			||||||
    <div id="viewer"></div>
 | 
					            <div id="toolbarViewer">
 | 
				
			||||||
 | 
					              <div id="toolbarViewerLeft">
 | 
				
			||||||
 | 
					                <button id="sidebarToggle" class="toolbarButton" title="Toggle Sidebar" tabindex="3" data-l10n-id="toggle_slider">
 | 
				
			||||||
 | 
					                  <span data-l10n-id="toggle_slider_label">Toggle Sidebar</span>
 | 
				
			||||||
 | 
					                </button>
 | 
				
			||||||
 | 
					                <div class="toolbarButtonSpacer"></div>
 | 
				
			||||||
 | 
					                <div class="splitToolbarButton">
 | 
				
			||||||
 | 
					                  <button class="toolbarButton pageUp" title="Previous Page" onclick="PDFView.page--" id="previous" tabindex="4" data-l10n-id="previous">
 | 
				
			||||||
 | 
					                    <span data-l10n-id="previous_label">Previous</span>
 | 
				
			||||||
 | 
					                  </button>
 | 
				
			||||||
 | 
					                  <div class="splitToolbarButtonSeparator"></div>
 | 
				
			||||||
 | 
					                  <button class="toolbarButton pageDown" title="Next Page" onclick="PDFView.page++" id="next" tabindex="5" data-l10n-id="next">
 | 
				
			||||||
 | 
					                    <span data-l10n-id="next_label">Next</span>
 | 
				
			||||||
 | 
					                  </button>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <label class="toolbarLabel" for="pageNumber" data-l10n-id="page_label">Page: </label>
 | 
				
			||||||
 | 
					                <input type="number" id="pageNumber" class="toolbarField pageNumber" onchange="PDFView.page = this.value;" value="1" size="4" min="1" tabindex="6">
 | 
				
			||||||
 | 
					                </input>
 | 
				
			||||||
 | 
					                <span id="numPages" class="toolbarLabel"></span>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					              <div id="toolbarViewerRight">
 | 
				
			||||||
 | 
					                <input id="fileInput" class="fileInput" type="file" oncontextmenu="return false;" tabindex="10" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <!--
 | 
				
			||||||
 | 
					                <input id="fileInput" class="fileInput" type="file" oncontextmenu="return false;" style="visibility: hidden; position: fixed; right: 0; top: 0" />
 | 
				
			||||||
 | 
					                <button id="openFile" class="toolbarButton print" title="Open File" tabindex="10" data-l10n-id="open_file" onclick="document.getElementById('fileInput').click()">
 | 
				
			||||||
 | 
					                   <span data-l10n-id="open_file_label">Open</span>
 | 
				
			||||||
 | 
					                </button>
 | 
				
			||||||
 | 
					                -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <!--
 | 
				
			||||||
 | 
					                <button id="print" class="toolbarButton print" title="Print" tabindex="11" data-l10n-id="print" onclick="window.print()">
 | 
				
			||||||
 | 
					                  <span data-l10n-id="print_label">Print</span>
 | 
				
			||||||
 | 
					                </button>
 | 
				
			||||||
 | 
					                -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <button id="download" class="toolbarButton download" title="Download" onclick="PDFView.download();" tabindex="12" data-l10n-id="download">
 | 
				
			||||||
 | 
					                  <span data-l10n-id="download_label">Download</span>
 | 
				
			||||||
 | 
					                </button>
 | 
				
			||||||
 | 
					                <!-- <div class="toolbarButtonSpacer"></div> -->
 | 
				
			||||||
 | 
					                <a href="#" id="viewBookmark" class="toolbarButton bookmark" title="Current view (copy or open in new window)" tabindex="13" data-l10n-id="bookmark"><span data-l10n-id="bookmark_label">Current View</span></a>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					              <div class="outerCenter">
 | 
				
			||||||
 | 
					                <div class="innerCenter" id="toolbarViewerMiddle">
 | 
				
			||||||
 | 
					                  <div class="splitToolbarButton">
 | 
				
			||||||
 | 
					                    <button class="toolbarButton zoomOut" title="Zoom Out" onclick="PDFView.zoomOut();" tabindex="7" data-l10n-id="zoom_out">
 | 
				
			||||||
 | 
					                      <span data-l10n-id="zoom_out_label">Zoom Out</span>
 | 
				
			||||||
 | 
					                    </button>
 | 
				
			||||||
 | 
					                    <div class="splitToolbarButtonSeparator"></div>
 | 
				
			||||||
 | 
					                    <button class="toolbarButton zoomIn" title="Zoom In" onclick="PDFView.zoomIn();" tabindex="8" data-l10n-id="zoom_in">
 | 
				
			||||||
 | 
					                      <span data-l10n-id="zoom_in_label">Zoom In</span>
 | 
				
			||||||
 | 
					                     </button>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <span class="dropdownToolbarButton">
 | 
				
			||||||
 | 
					                     <select id="scaleSelect" onchange="PDFView.parseScale(this.value);" title="Zoom" oncontextmenu="return false;" tabindex="9" data-l10n-id="zoom">
 | 
				
			||||||
 | 
					                      <option id="pageAutoOption" value="auto" selected="selected" data-l10n-id="page_scale_auto">Automatic Zoom</option>
 | 
				
			||||||
 | 
					                      <option id="pageActualOption" value="page-actual" data-l10n-id="page_scale_actual">Actual Size</option>
 | 
				
			||||||
 | 
					                      <option id="pageFitOption" value="page-fit" data-l10n-id="page_scale_fit">Fit Page</option>
 | 
				
			||||||
 | 
					                      <option id="pageWidthOption" value="page-width" data-l10n-id="page_scale_width">Full Width</option>
 | 
				
			||||||
 | 
					                      <option id="customScaleOption" value="custom"></option>
 | 
				
			||||||
 | 
					                      <option value="0.5">50%</option>
 | 
				
			||||||
 | 
					                      <option value="0.75">75%</option>
 | 
				
			||||||
 | 
					                      <option value="1">100%</option>
 | 
				
			||||||
 | 
					                      <option value="1.25">125%</option>
 | 
				
			||||||
 | 
					                      <option value="1.5">150%</option>
 | 
				
			||||||
 | 
					                      <option value="2">200%</option>
 | 
				
			||||||
 | 
					                    </select>
 | 
				
			||||||
 | 
					                  </span>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <div id="viewerContainer">
 | 
				
			||||||
 | 
					          <div id="viewer"></div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <div id="loadingBox">
 | 
				
			||||||
 | 
					            <div id="loading" data-l10n-id="loading" data-l10n-args='{"percent": 0}'>Loading... 0%</div>
 | 
				
			||||||
 | 
					            <div id="loadingBar"><div class="progress"></div></div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <div id="errorWrapper" hidden='true'>
 | 
				
			||||||
 | 
					          <div id="errorMessageLeft">
 | 
				
			||||||
 | 
					            <span id="errorMessage"></span>
 | 
				
			||||||
 | 
					            <button id="errorShowMore" onclick="" oncontextmenu="return false;" data-l10n-id="error_more_info">
 | 
				
			||||||
 | 
					              More Information
 | 
				
			||||||
 | 
					            </button>
 | 
				
			||||||
 | 
					            <button id="errorShowLess" onclick="" oncontextmenu="return false;" data-l10n-id="error_less_info" hidden='true'>
 | 
				
			||||||
 | 
					              Less Information
 | 
				
			||||||
 | 
					            </button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div id="errorMessageRight">
 | 
				
			||||||
 | 
					            <button id="errorClose" oncontextmenu="return false;" data-l10n-id="error_close">
 | 
				
			||||||
 | 
					              Close
 | 
				
			||||||
 | 
					            </button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div class="clearBoth"></div>
 | 
				
			||||||
 | 
					          <textarea id="errorMoreInfo" hidden='true' readonly="readonly"></textarea>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div> <!-- mainContainer -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </div> <!-- outerContainer -->
 | 
				
			||||||
  </body>
 | 
					  </body>
 | 
				
			||||||
</html>
 | 
					</html>
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										329
									
								
								web/viewer.js
									
									
									
									
									
								
							
							
						
						@ -15,6 +15,8 @@ var kMaxScale = 4.0;
 | 
				
			|||||||
var kImageDirectory = './images/';
 | 
					var kImageDirectory = './images/';
 | 
				
			||||||
var kSettingsMemory = 20;
 | 
					var kSettingsMemory = 20;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var mozL10n = document.mozL10n || document.webL10n;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function getFileName(url) {
 | 
					function getFileName(url) {
 | 
				
			||||||
  var anchor = url.indexOf('#');
 | 
					  var anchor = url.indexOf('#');
 | 
				
			||||||
  var query = url.indexOf('?');
 | 
					  var query = url.indexOf('?');
 | 
				
			||||||
@ -62,6 +64,9 @@ var ProgressBar = (function ProgressBarClosure() {
 | 
				
			|||||||
    updateBar: function ProgressBar_updateBar() {
 | 
					    updateBar: function ProgressBar_updateBar() {
 | 
				
			||||||
      var progressSize = this.width * this._percent / 100;
 | 
					      var progressSize = this.width * this._percent / 100;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (this._percent > 95)
 | 
				
			||||||
 | 
					        this.div.classList.add('full');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      this.div.style.width = progressSize + this.units;
 | 
					      this.div.style.width = progressSize + this.units;
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -216,6 +221,13 @@ var PDFView = {
 | 
				
			|||||||
  initialBookmark: document.location.hash.substring(1),
 | 
					  initialBookmark: document.location.hash.substring(1),
 | 
				
			||||||
  startedTextExtraction: false,
 | 
					  startedTextExtraction: false,
 | 
				
			||||||
  pageText: [],
 | 
					  pageText: [],
 | 
				
			||||||
 | 
					  container: null,
 | 
				
			||||||
 | 
					  initialized: false,
 | 
				
			||||||
 | 
					  // called once when the document is loaded
 | 
				
			||||||
 | 
					  initialize: function pdfViewInitialize() {
 | 
				
			||||||
 | 
					    this.container = document.getElementById('viewerContainer');
 | 
				
			||||||
 | 
					    this.initialized = true;
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  setScale: function pdfViewSetScale(val, resetAutoSettings) {
 | 
					  setScale: function pdfViewSetScale(val, resetAutoSettings) {
 | 
				
			||||||
    if (val == this.currentScale)
 | 
					    if (val == this.currentScale)
 | 
				
			||||||
@ -247,32 +259,43 @@ var PDFView = {
 | 
				
			|||||||
      return;
 | 
					      return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var container = this.container;
 | 
				
			||||||
    var currentPage = this.pages[this.page - 1];
 | 
					    var currentPage = this.pages[this.page - 1];
 | 
				
			||||||
    var pageWidthScale = (window.innerWidth - kScrollbarPadding) /
 | 
					    var pageWidthScale = (container.clientWidth - kScrollbarPadding) /
 | 
				
			||||||
                          currentPage.width * currentPage.scale / kCssUnits;
 | 
					                          currentPage.width * currentPage.scale / kCssUnits;
 | 
				
			||||||
    var pageHeightScale = (window.innerHeight - kScrollbarPadding) /
 | 
					    var pageHeightScale = (container.clientHeight - kScrollbarPadding) /
 | 
				
			||||||
                           currentPage.height * currentPage.scale / kCssUnits;
 | 
					                           currentPage.height * currentPage.scale / kCssUnits;
 | 
				
			||||||
    if ('page-width' == value)
 | 
					    switch (value) {
 | 
				
			||||||
      this.setScale(pageWidthScale, resetAutoSettings);
 | 
					      case 'page-actual':
 | 
				
			||||||
    if ('page-height' == value)
 | 
					        this.setScale(1, resetAutoSettings);
 | 
				
			||||||
      this.setScale(pageHeightScale, resetAutoSettings);
 | 
					        break;
 | 
				
			||||||
    if ('page-fit' == value) {
 | 
					      case 'page-width':
 | 
				
			||||||
      this.setScale(
 | 
					        this.setScale(pageWidthScale, resetAutoSettings);
 | 
				
			||||||
        Math.min(pageWidthScale, pageHeightScale), resetAutoSettings);
 | 
					        break;
 | 
				
			||||||
 | 
					      case 'page-height':
 | 
				
			||||||
 | 
					        this.setScale(pageHeightScale, resetAutoSettings);
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					      case 'page-fit':
 | 
				
			||||||
 | 
					        this.setScale(
 | 
				
			||||||
 | 
					            Math.min(pageWidthScale, pageHeightScale), resetAutoSettings);
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					      case 'auto':
 | 
				
			||||||
 | 
					        this.setScale(Math.min(1.0, pageWidthScale), resetAutoSettings);
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if ('auto' == value)
 | 
					 | 
				
			||||||
      this.setScale(Math.min(1.0, pageWidthScale), resetAutoSettings);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    selectScaleOption(value);
 | 
					    selectScaleOption(value);
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  zoomIn: function pdfViewZoomIn() {
 | 
					  zoomIn: function pdfViewZoomIn() {
 | 
				
			||||||
    var newScale = Math.min(kMaxScale, this.currentScale * kDefaultScaleDelta);
 | 
					    var newScale = (this.currentScale * kDefaultScaleDelta).toFixed(2);
 | 
				
			||||||
 | 
					    newScale = Math.min(kMaxScale, newScale);
 | 
				
			||||||
    this.parseScale(newScale, true);
 | 
					    this.parseScale(newScale, true);
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  zoomOut: function pdfViewZoomOut() {
 | 
					  zoomOut: function pdfViewZoomOut() {
 | 
				
			||||||
    var newScale = Math.max(kMinScale, this.currentScale / kDefaultScaleDelta);
 | 
					    var newScale = (this.currentScale / kDefaultScaleDelta).toFixed(2);
 | 
				
			||||||
 | 
					    newScale = Math.max(kMinScale, newScale);
 | 
				
			||||||
    this.parseScale(newScale, true);
 | 
					    this.parseScale(newScale, true);
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -328,11 +351,13 @@ var PDFView = {
 | 
				
			|||||||
      },
 | 
					      },
 | 
				
			||||||
      function getDocumentError(message, exception) {
 | 
					      function getDocumentError(message, exception) {
 | 
				
			||||||
        var loadingIndicator = document.getElementById('loading');
 | 
					        var loadingIndicator = document.getElementById('loading');
 | 
				
			||||||
        loadingIndicator.textContent = 'Error';
 | 
					        loadingIndicator.textContent = mozL10n.get('loading_error_indicator',
 | 
				
			||||||
 | 
					          null, 'Error');
 | 
				
			||||||
        var moreInfo = {
 | 
					        var moreInfo = {
 | 
				
			||||||
          message: message
 | 
					          message: message
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        self.error('An error occurred while loading the PDF.', moreInfo);
 | 
					        self.error(mozL10n.get('loading_error', null,
 | 
				
			||||||
 | 
					          'An error occurred while loading the PDF.'), moreInfo);
 | 
				
			||||||
        self.loading = false;
 | 
					        self.loading = false;
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      function getDocumentProgress(progressData) {
 | 
					      function getDocumentProgress(progressData) {
 | 
				
			||||||
@ -439,17 +464,29 @@ var PDFView = {
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
    moreInfoButton.removeAttribute('hidden');
 | 
					    moreInfoButton.removeAttribute('hidden');
 | 
				
			||||||
    lessInfoButton.setAttribute('hidden', 'true');
 | 
					    lessInfoButton.setAttribute('hidden', 'true');
 | 
				
			||||||
    errorMoreInfo.value = 'PDF.JS Build: ' + PDFJS.build + '\n';
 | 
					    errorMoreInfo.value =
 | 
				
			||||||
 | 
					      mozL10n.get('error_build', {build: PDFJS.build},
 | 
				
			||||||
 | 
					      'PDF.JS Build: {{build}}') + '\n';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (moreInfo) {
 | 
					    if (moreInfo) {
 | 
				
			||||||
      errorMoreInfo.value += 'Message: ' + moreInfo.message;
 | 
					      errorMoreInfo.value +=
 | 
				
			||||||
 | 
					        mozL10n.get('error_message', {message: moreInfo.message},
 | 
				
			||||||
 | 
					        'Message: {{message}}');
 | 
				
			||||||
      if (moreInfo.stack) {
 | 
					      if (moreInfo.stack) {
 | 
				
			||||||
        errorMoreInfo.value += '\n' + 'Stack: ' + moreInfo.stack;
 | 
					        errorMoreInfo.value += '\n' +
 | 
				
			||||||
 | 
					          mozL10n.get('error_stack', {stack: moreInfo.stack},
 | 
				
			||||||
 | 
					          'Stack: {{stack}}');
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        if (moreInfo.filename)
 | 
					        if (moreInfo.filename) {
 | 
				
			||||||
          errorMoreInfo.value += '\n' + 'File: ' + moreInfo.filename;
 | 
					          errorMoreInfo.value += '\n' +
 | 
				
			||||||
        if (moreInfo.lineNumber)
 | 
					            mozL10n.get('error_file', {file: moreInfo.filename},
 | 
				
			||||||
          errorMoreInfo.value += '\n' + 'Line: ' + moreInfo.lineNumber;
 | 
					            'File: {{file}}');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (moreInfo.lineNumber) {
 | 
				
			||||||
 | 
					          errorMoreInfo.value += '\n' +
 | 
				
			||||||
 | 
					            mozL10n.get('error_line', {line: moreInfo.lineNumber},
 | 
				
			||||||
 | 
					            'Line: {{line}}');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    errorMoreInfo.rows = errorMoreInfo.value.split('\n').length - 1;
 | 
					    errorMoreInfo.rows = errorMoreInfo.value.split('\n').length - 1;
 | 
				
			||||||
@ -458,7 +495,8 @@ var PDFView = {
 | 
				
			|||||||
  progress: function pdfViewProgress(level) {
 | 
					  progress: function pdfViewProgress(level) {
 | 
				
			||||||
    var percent = Math.round(level * 100);
 | 
					    var percent = Math.round(level * 100);
 | 
				
			||||||
    var loadingIndicator = document.getElementById('loading');
 | 
					    var loadingIndicator = document.getElementById('loading');
 | 
				
			||||||
    loadingIndicator.textContent = 'Loading... ' + percent + '%';
 | 
					    loadingIndicator.textContent = mozL10n.get('loading', {percent: percent},
 | 
				
			||||||
 | 
					      'Loading... {{percent}}%');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    PDFView.loadingBar.percent = percent;
 | 
					    PDFView.loadingBar.percent = percent;
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
@ -478,14 +516,14 @@ var PDFView = {
 | 
				
			|||||||
    var loadingBox = document.getElementById('loadingBox');
 | 
					    var loadingBox = document.getElementById('loadingBox');
 | 
				
			||||||
    loadingBox.setAttribute('hidden', 'true');
 | 
					    loadingBox.setAttribute('hidden', 'true');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var sidebar = document.getElementById('sidebarView');
 | 
					    var thumbsView = document.getElementById('thumbnailView');
 | 
				
			||||||
    sidebar.parentNode.scrollTop = 0;
 | 
					    thumbsView.parentNode.scrollTop = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while (sidebar.hasChildNodes())
 | 
					    while (thumbsView.hasChildNodes())
 | 
				
			||||||
      sidebar.removeChild(sidebar.lastChild);
 | 
					      thumbsView.removeChild(thumbsView.lastChild);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ('_loadingInterval' in sidebar)
 | 
					    if ('_loadingInterval' in thumbsView)
 | 
				
			||||||
      clearInterval(sidebar._loadingInterval);
 | 
					      clearInterval(thumbsView._loadingInterval);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var container = document.getElementById('viewer');
 | 
					    var container = document.getElementById('viewer');
 | 
				
			||||||
    while (container.hasChildNodes())
 | 
					    while (container.hasChildNodes())
 | 
				
			||||||
@ -494,7 +532,8 @@ var PDFView = {
 | 
				
			|||||||
    var pagesCount = pdfDocument.numPages;
 | 
					    var pagesCount = pdfDocument.numPages;
 | 
				
			||||||
    var id = pdfDocument.fingerprint;
 | 
					    var id = pdfDocument.fingerprint;
 | 
				
			||||||
    var storedHash = null;
 | 
					    var storedHash = null;
 | 
				
			||||||
    document.getElementById('numPages').textContent = pagesCount;
 | 
					    document.getElementById('numPages').textContent =
 | 
				
			||||||
 | 
					      mozL10n.get('page_of', {pageCount: pagesCount}, 'of {{pageCount}}');
 | 
				
			||||||
    document.getElementById('pageNumber').max = pagesCount;
 | 
					    document.getElementById('pageNumber').max = pagesCount;
 | 
				
			||||||
    PDFView.documentFingerprint = id;
 | 
					    PDFView.documentFingerprint = id;
 | 
				
			||||||
    var store = PDFView.store = new Settings(id);
 | 
					    var store = PDFView.store = new Settings(id);
 | 
				
			||||||
@ -522,7 +561,7 @@ var PDFView = {
 | 
				
			|||||||
        var page = promisedPages[i - 1];
 | 
					        var page = promisedPages[i - 1];
 | 
				
			||||||
        var pageView = new PageView(container, page, i, scale,
 | 
					        var pageView = new PageView(container, page, i, scale,
 | 
				
			||||||
                                    page.stats, self.navigateTo.bind(self));
 | 
					                                    page.stats, self.navigateTo.bind(self));
 | 
				
			||||||
        var thumbnailView = new ThumbnailView(sidebar, page, i);
 | 
					        var thumbnailView = new ThumbnailView(thumbsView, page, i);
 | 
				
			||||||
        bindOnAfterDraw(pageView, thumbnailView);
 | 
					        bindOnAfterDraw(pageView, thumbnailView);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pages.push(pageView);
 | 
					        pages.push(pageView);
 | 
				
			||||||
@ -542,13 +581,7 @@ var PDFView = {
 | 
				
			|||||||
    // outline and initial view depends on destinations and pagesRefMap
 | 
					    // outline and initial view depends on destinations and pagesRefMap
 | 
				
			||||||
    PDFJS.Promise.all([pagesPromise, destinationsPromise]).then(function() {
 | 
					    PDFJS.Promise.all([pagesPromise, destinationsPromise]).then(function() {
 | 
				
			||||||
      pdfDocument.getOutline().then(function(outline) {
 | 
					      pdfDocument.getOutline().then(function(outline) {
 | 
				
			||||||
        if (!outline)
 | 
					 | 
				
			||||||
          return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.outline = new DocumentOutlineView(outline);
 | 
					        self.outline = new DocumentOutlineView(outline);
 | 
				
			||||||
        var outlineSwitchButton = document.getElementById('outlineSwitch');
 | 
					 | 
				
			||||||
        outlineSwitchButton.removeAttribute('disabled');
 | 
					 | 
				
			||||||
        self.switchSidebarView('outline');
 | 
					 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      self.setInitialView(storedHash, scale);
 | 
					      self.setInitialView(storedHash, scale);
 | 
				
			||||||
@ -697,40 +730,51 @@ var PDFView = {
 | 
				
			|||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  switchSidebarView: function pdfViewSwitchSidebarView(view) {
 | 
					  switchSidebarView: function pdfViewSwitchSidebarView(view) {
 | 
				
			||||||
    var thumbsScrollView = document.getElementById('sidebarScrollView');
 | 
					    var thumbsView = document.getElementById('thumbnailView');
 | 
				
			||||||
    var thumbsSwitchButton = document.getElementById('thumbsSwitch');
 | 
					    var outlineView = document.getElementById('outlineView');
 | 
				
			||||||
    if (view == 'thumbs') {
 | 
					    var searchView = document.getElementById('searchView');
 | 
				
			||||||
      thumbsScrollView.removeAttribute('hidden');
 | 
					 | 
				
			||||||
      thumbsSwitchButton.setAttribute('data-selected', true);
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      thumbsScrollView.setAttribute('hidden', 'true');
 | 
					 | 
				
			||||||
      thumbsSwitchButton.removeAttribute('data-selected');
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    var outlineScrollView = document.getElementById('outlineScrollView');
 | 
					    var thumbsButton = document.getElementById('viewThumbnail');
 | 
				
			||||||
    var outlineSwitchButton = document.getElementById('outlineSwitch');
 | 
					    var outlineButton = document.getElementById('viewOutline');
 | 
				
			||||||
    if (view == 'outline') {
 | 
					    var searchButton = document.getElementById('viewSearch');
 | 
				
			||||||
      outlineScrollView.removeAttribute('hidden');
 | 
					 | 
				
			||||||
      outlineSwitchButton.setAttribute('data-selected', true);
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      outlineScrollView.setAttribute('hidden', 'true');
 | 
					 | 
				
			||||||
      outlineSwitchButton.removeAttribute('data-selected');
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var searchScrollView = document.getElementById('searchScrollView');
 | 
					    switch (view) {
 | 
				
			||||||
    var searchSwitchButton = document.getElementById('searchSwitch');
 | 
					      case 'thumbs':
 | 
				
			||||||
    if (view == 'search') {
 | 
					        thumbsButton.classList.add('toggled');
 | 
				
			||||||
      searchScrollView.removeAttribute('hidden');
 | 
					        outlineButton.classList.remove('toggled');
 | 
				
			||||||
      searchSwitchButton.setAttribute('data-selected', true);
 | 
					        searchButton.classList.remove('toggled');
 | 
				
			||||||
 | 
					        thumbsView.classList.remove('hidden');
 | 
				
			||||||
 | 
					        outlineView.classList.add('hidden');
 | 
				
			||||||
 | 
					        searchView.classList.add('hidden');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      var searchTermsInput = document.getElementById('searchTermsInput');
 | 
					        updateThumbViewArea();
 | 
				
			||||||
      searchTermsInput.focus();
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // Start text extraction as soon as the search gets displayed.
 | 
					      case 'outline':
 | 
				
			||||||
      this.extractText();
 | 
					        thumbsButton.classList.remove('toggled');
 | 
				
			||||||
    } else {
 | 
					        outlineButton.classList.add('toggled');
 | 
				
			||||||
      searchScrollView.setAttribute('hidden', 'true');
 | 
					        searchButton.classList.remove('toggled');
 | 
				
			||||||
      searchSwitchButton.removeAttribute('data-selected');
 | 
					        thumbsView.classList.add('hidden');
 | 
				
			||||||
 | 
					        outlineView.classList.remove('hidden');
 | 
				
			||||||
 | 
					        searchView.classList.add('hidden');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (outlineButton.getAttribute('disabled'))
 | 
				
			||||||
 | 
					          return;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      case 'search':
 | 
				
			||||||
 | 
					        thumbsButton.classList.remove('toggled');
 | 
				
			||||||
 | 
					        outlineButton.classList.remove('toggled');
 | 
				
			||||||
 | 
					        searchButton.classList.add('toggled');
 | 
				
			||||||
 | 
					        thumbsView.classList.add('hidden');
 | 
				
			||||||
 | 
					        outlineView.classList.add('hidden');
 | 
				
			||||||
 | 
					        searchView.classList.remove('hidden');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var searchTermsInput = document.getElementById('searchTermsInput');
 | 
				
			||||||
 | 
					        searchTermsInput.focus();
 | 
				
			||||||
 | 
					        // Start text extraction as soon as the search gets displayed.
 | 
				
			||||||
 | 
					        this.extractText();
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -752,43 +796,45 @@ var PDFView = {
 | 
				
			|||||||
    extractPageText(0);
 | 
					    extractPageText(0);
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  pinSidebar: function pdfViewPinSidebar() {
 | 
					 | 
				
			||||||
    document.getElementById('sidebar').classList.toggle('pinned');
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  getVisiblePages: function pdfViewGetVisiblePages() {
 | 
					  getVisiblePages: function pdfViewGetVisiblePages() {
 | 
				
			||||||
    var pages = this.pages;
 | 
					    var pages = this.pages;
 | 
				
			||||||
    var kBottomMargin = 10;
 | 
					    var kBottomMargin = 10;
 | 
				
			||||||
 | 
					    var kTopPadding = 30;
 | 
				
			||||||
    var visiblePages = [];
 | 
					    var visiblePages = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var currentHeight = kBottomMargin;
 | 
					    var currentHeight = kTopPadding + kBottomMargin;
 | 
				
			||||||
    var windowTop = window.pageYOffset;
 | 
					    var container = this.container;
 | 
				
			||||||
 | 
					    // Add 1px to the scrolltop to give a little wiggle room if the math is off,
 | 
				
			||||||
 | 
					    // this won't be needed if we calc current page number based off the middle
 | 
				
			||||||
 | 
					    // of the screen instead of the top.
 | 
				
			||||||
 | 
					    var containerTop = container.scrollTop + 1;
 | 
				
			||||||
    for (var i = 1; i <= pages.length; ++i) {
 | 
					    for (var i = 1; i <= pages.length; ++i) {
 | 
				
			||||||
      var page = pages[i - 1];
 | 
					      var page = pages[i - 1];
 | 
				
			||||||
      var pageHeight = page.height + kBottomMargin;
 | 
					      var pageHeight = page.height + kBottomMargin;
 | 
				
			||||||
      if (currentHeight + pageHeight > windowTop)
 | 
					      if (currentHeight + pageHeight > containerTop)
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      currentHeight += pageHeight;
 | 
					      currentHeight += pageHeight;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var windowBottom = window.pageYOffset + window.innerHeight;
 | 
					    var containerBottom = containerTop + container.clientHeight;
 | 
				
			||||||
    for (; i <= pages.length && currentHeight < windowBottom; ++i) {
 | 
					    for (; i <= pages.length && currentHeight < containerBottom; ++i) {
 | 
				
			||||||
      var singlePage = pages[i - 1];
 | 
					      var singlePage = pages[i - 1];
 | 
				
			||||||
      visiblePages.push({ id: singlePage.id, y: currentHeight,
 | 
					      visiblePages.push({ id: singlePage.id, y: currentHeight,
 | 
				
			||||||
                          view: singlePage });
 | 
					                          view: singlePage });
 | 
				
			||||||
      currentHeight += singlePage.height * singlePage.scale + kBottomMargin;
 | 
					      currentHeight += page.height + kBottomMargin;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return visiblePages;
 | 
					    return visiblePages;
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getVisibleThumbs: function pdfViewGetVisibleThumbs() {
 | 
					  getVisibleThumbs: function pdfViewGetVisibleThumbs() {
 | 
				
			||||||
    var thumbs = this.thumbnails;
 | 
					    var thumbs = this.thumbnails;
 | 
				
			||||||
    var kBottomMargin = 5;
 | 
					    var kBottomMargin = 15;
 | 
				
			||||||
    var visibleThumbs = [];
 | 
					    var visibleThumbs = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var view = document.getElementById('sidebarScrollView');
 | 
					    var view = document.getElementById('thumbnailView');
 | 
				
			||||||
    var currentHeight = kBottomMargin;
 | 
					    var currentHeight = kBottomMargin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var top = view.scrollTop;
 | 
					    var top = view.scrollTop;
 | 
				
			||||||
    for (var i = 1; i <= thumbs.length; ++i) {
 | 
					    for (var i = 1; i <= thumbs.length; ++i) {
 | 
				
			||||||
      var thumb = thumbs[i - 1];
 | 
					      var thumb = thumbs[i - 1];
 | 
				
			||||||
@ -907,8 +953,9 @@ var PageView = function pageView(container, pdfPage, id, scale,
 | 
				
			|||||||
      var type = item.type;
 | 
					      var type = item.type;
 | 
				
			||||||
      var rect = viewport.convertToViewportRectangle(item.rect);
 | 
					      var rect = viewport.convertToViewportRectangle(item.rect);
 | 
				
			||||||
      rect = PDFJS.Util.normalizeRect(rect);
 | 
					      rect = PDFJS.Util.normalizeRect(rect);
 | 
				
			||||||
      image.src = kImageDirectory + type.toLowerCase() + '.svg';
 | 
					      image.src = kImageDirectory + 'annotation-' + type.toLowerCase() + '.svg';
 | 
				
			||||||
      image.alt = '[' + type + ' Annotation]';
 | 
					      image.alt = mozL10n.get('text_annotation_type', {type: type},
 | 
				
			||||||
 | 
					        '[{{type}} Annotation]');
 | 
				
			||||||
      var content = document.createElement('div');
 | 
					      var content = document.createElement('div');
 | 
				
			||||||
      content.setAttribute('hidden', true);
 | 
					      content.setAttribute('hidden', true);
 | 
				
			||||||
      var title = document.createElement('h1');
 | 
					      var title = document.createElement('h1');
 | 
				
			||||||
@ -1005,9 +1052,9 @@ var PageView = function pageView(container, pdfPage, id, scale,
 | 
				
			|||||||
          y = dest[3];
 | 
					          y = dest[3];
 | 
				
			||||||
          width = dest[4] - x;
 | 
					          width = dest[4] - x;
 | 
				
			||||||
          height = dest[5] - y;
 | 
					          height = dest[5] - y;
 | 
				
			||||||
          widthScale = (window.innerWidth - kScrollbarPadding) /
 | 
					          widthScale = (this.container.clientWidth - kScrollbarPadding) /
 | 
				
			||||||
            width / kCssUnits;
 | 
					            width / kCssUnits;
 | 
				
			||||||
          heightScale = (window.innerHeight - kScrollbarPadding) /
 | 
					          heightScale = (this.container.clientHeight - kScrollbarPadding) /
 | 
				
			||||||
            height / kCssUnits;
 | 
					            height / kCssUnits;
 | 
				
			||||||
          scale = Math.min(widthScale, heightScale);
 | 
					          scale = Math.min(widthScale, heightScale);
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
@ -1015,16 +1062,15 @@ var PageView = function pageView(container, pdfPage, id, scale,
 | 
				
			|||||||
          return;
 | 
					          return;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      var boundingRect = [
 | 
					 | 
				
			||||||
        this.viewport.convertToViewportPoint(x, y),
 | 
					 | 
				
			||||||
        this.viewport.convertToViewportPoint(x + width, y + height)
 | 
					 | 
				
			||||||
      ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      if (scale && scale !== PDFView.currentScale)
 | 
					      if (scale && scale !== PDFView.currentScale)
 | 
				
			||||||
        PDFView.parseScale(scale, true);
 | 
					        PDFView.parseScale(scale, true);
 | 
				
			||||||
      else if (PDFView.currentScale === kUnknownScale)
 | 
					      else if (PDFView.currentScale === kUnknownScale)
 | 
				
			||||||
        PDFView.parseScale(kDefaultScale, true);
 | 
					        PDFView.parseScale(kDefaultScale, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var boundingRect = [
 | 
				
			||||||
 | 
					        this.viewport.convertToViewportPoint(x, y),
 | 
				
			||||||
 | 
					        this.viewport.convertToViewportPoint(x + width, y + height)
 | 
				
			||||||
 | 
					      ];
 | 
				
			||||||
      setTimeout(function pageViewScrollIntoViewRelayout() {
 | 
					      setTimeout(function pageViewScrollIntoViewRelayout() {
 | 
				
			||||||
        // letting page to re-layout before scrolling
 | 
					        // letting page to re-layout before scrolling
 | 
				
			||||||
        var scale = PDFView.currentScale;
 | 
					        var scale = PDFView.currentScale;
 | 
				
			||||||
@ -1090,8 +1136,10 @@ var PageView = function pageView(container, pdfPage, id, scale,
 | 
				
			|||||||
        delete self.loadingIconDiv;
 | 
					        delete self.loadingIconDiv;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (error)
 | 
					      if (error) {
 | 
				
			||||||
        PDFView.error('An error occurred while rendering the page.', error);
 | 
					        PDFView.error(mozL10n.get('rendering_error', null,
 | 
				
			||||||
 | 
					          'An error occurred while rendering the page.'), error);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      self.stats = pdfPage.stats;
 | 
					      self.stats = pdfPage.stats;
 | 
				
			||||||
      self.updateStats();
 | 
					      self.updateStats();
 | 
				
			||||||
@ -1137,16 +1185,13 @@ var ThumbnailView = function thumbnailView(container, pdfPage, id) {
 | 
				
			|||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var viewport = pdfPage.getViewport(1);
 | 
					  var viewport = pdfPage.getViewport(1);
 | 
				
			||||||
  var pageWidth = viewport.width;
 | 
					  var pageWidth = this.width = viewport.width;
 | 
				
			||||||
  var pageHeight = viewport.height;
 | 
					  var pageHeight = this.height = viewport.height;
 | 
				
			||||||
  var pageRatio = pageWidth / pageHeight;
 | 
					  var pageRatio = pageWidth / pageHeight;
 | 
				
			||||||
  this.id = id;
 | 
					  this.id = id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var maxThumbSize = 134;
 | 
					  var canvasWidth = 98;
 | 
				
			||||||
  var canvasWidth = this.width = pageRatio >= 1 ? maxThumbSize :
 | 
					  var canvasHeight = canvasWidth / this.width * this.height;
 | 
				
			||||||
    maxThumbSize * pageRatio;
 | 
					 | 
				
			||||||
  var canvasHeight = this.height = pageRatio <= 1 ? maxThumbSize :
 | 
					 | 
				
			||||||
    maxThumbSize / pageRatio;
 | 
					 | 
				
			||||||
  var scaleX = this.scaleX = (canvasWidth / pageWidth);
 | 
					  var scaleX = this.scaleX = (canvasWidth / pageWidth);
 | 
				
			||||||
  var scaleY = this.scaleY = (canvasHeight / pageHeight);
 | 
					  var scaleY = this.scaleY = (canvasHeight / pageHeight);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1166,9 +1211,14 @@ var ThumbnailView = function thumbnailView(container, pdfPage, id) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    canvas.width = canvasWidth;
 | 
					    canvas.width = canvasWidth;
 | 
				
			||||||
    canvas.height = canvasHeight;
 | 
					    canvas.height = canvasHeight;
 | 
				
			||||||
 | 
					    canvas.className = 'thumbnailImage';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    div.setAttribute('data-loaded', true);
 | 
					    div.setAttribute('data-loaded', true);
 | 
				
			||||||
    div.appendChild(canvas);
 | 
					
 | 
				
			||||||
 | 
					    var ring = document.createElement('div');
 | 
				
			||||||
 | 
					    ring.className = 'thumbnailSelectionRing';
 | 
				
			||||||
 | 
					    ring.appendChild(canvas);
 | 
				
			||||||
 | 
					    div.appendChild(ring);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var ctx = canvas.getContext('2d');
 | 
					    var ctx = canvas.getContext('2d');
 | 
				
			||||||
    ctx.save();
 | 
					    ctx.save();
 | 
				
			||||||
@ -1219,6 +1269,8 @@ var ThumbnailView = function thumbnailView(container, pdfPage, id) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
var DocumentOutlineView = function documentOutlineView(outline) {
 | 
					var DocumentOutlineView = function documentOutlineView(outline) {
 | 
				
			||||||
  var outlineView = document.getElementById('outlineView');
 | 
					  var outlineView = document.getElementById('outlineView');
 | 
				
			||||||
 | 
					  while (outlineView.firstChild)
 | 
				
			||||||
 | 
					    outlineView.removeChild(outlineView.firstChild);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function bindItemLink(domObj, item) {
 | 
					  function bindItemLink(domObj, item) {
 | 
				
			||||||
    domObj.href = PDFView.getDestinationHash(item.dest);
 | 
					    domObj.href = PDFView.getDestinationHash(item.dest);
 | 
				
			||||||
@ -1228,6 +1280,15 @@ var DocumentOutlineView = function documentOutlineView(outline) {
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (!outline) {
 | 
				
			||||||
 | 
					    var noOutline = document.createElement('div');
 | 
				
			||||||
 | 
					    noOutline.classList.add('noOutline');
 | 
				
			||||||
 | 
					    noOutline.textContent = mozL10n.get('no_outline', null,
 | 
				
			||||||
 | 
					      'No Outline Available');
 | 
				
			||||||
 | 
					    outlineView.appendChild(noOutline);
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var queue = [{parent: outlineView, items: outline}];
 | 
					  var queue = [{parent: outlineView, items: outline}];
 | 
				
			||||||
  while (queue.length > 0) {
 | 
					  while (queue.length > 0) {
 | 
				
			||||||
    var levelData = queue.shift();
 | 
					    var levelData = queue.shift();
 | 
				
			||||||
@ -1387,6 +1448,7 @@ var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
window.addEventListener('load', function webViewerLoad(evt) {
 | 
					window.addEventListener('load', function webViewerLoad(evt) {
 | 
				
			||||||
 | 
					  PDFView.initialize();
 | 
				
			||||||
  var params = PDFView.parseQueryString(document.location.search.substring(1));
 | 
					  var params = PDFView.parseQueryString(document.location.search.substring(1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var file = PDFJS.isFirefoxExtension ?
 | 
					  var file = PDFJS.isFirefoxExtension ?
 | 
				
			||||||
@ -1395,8 +1457,6 @@ window.addEventListener('load', function webViewerLoad(evt) {
 | 
				
			|||||||
  if (PDFJS.isFirefoxExtension || !window.File || !window.FileReader ||
 | 
					  if (PDFJS.isFirefoxExtension || !window.File || !window.FileReader ||
 | 
				
			||||||
      !window.FileList || !window.Blob) {
 | 
					      !window.FileList || !window.Blob) {
 | 
				
			||||||
    document.getElementById('fileInput').setAttribute('hidden', 'true');
 | 
					    document.getElementById('fileInput').setAttribute('hidden', 'true');
 | 
				
			||||||
    document.getElementById('fileInputSeperator')
 | 
					 | 
				
			||||||
                              .setAttribute('hidden', 'true');
 | 
					 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    document.getElementById('fileInput').value = null;
 | 
					    document.getElementById('fileInput').value = null;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -1408,6 +1468,12 @@ window.addEventListener('load', function webViewerLoad(evt) {
 | 
				
			|||||||
  if ('disableWorker' in hashParams)
 | 
					  if ('disableWorker' in hashParams)
 | 
				
			||||||
    PDFJS.disableWorker = (hashParams['disableWorker'] === 'true');
 | 
					    PDFJS.disableWorker = (hashParams['disableWorker'] === 'true');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var locale = !PDFJS.isFirefoxExtension ? navigator.language :
 | 
				
			||||||
 | 
					    FirefoxCom.request('getLocale', null);
 | 
				
			||||||
 | 
					  if ('locale' in hashParams)
 | 
				
			||||||
 | 
					    locale = hashParams['locale'];
 | 
				
			||||||
 | 
					  mozL10n.language.code = locale;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if ('disableTextLayer' in hashParams)
 | 
					  if ('disableTextLayer' in hashParams)
 | 
				
			||||||
    PDFJS.disableTextLayer = (hashParams['disableTextLayer'] === 'true');
 | 
					    PDFJS.disableTextLayer = (hashParams['disableTextLayer'] === 'true');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1420,8 +1486,28 @@ window.addEventListener('load', function webViewerLoad(evt) {
 | 
				
			|||||||
    PDFBug.init();
 | 
					    PDFBug.init();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var sidebarScrollView = document.getElementById('sidebarScrollView');
 | 
					  var thumbsView = document.getElementById('thumbnailView');
 | 
				
			||||||
  sidebarScrollView.addEventListener('scroll', updateThumbViewArea, true);
 | 
					  thumbsView.addEventListener('scroll', updateThumbViewArea, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var mainContainer = document.getElementById('mainContainer');
 | 
				
			||||||
 | 
					  var outerContainer = document.getElementById('outerContainer');
 | 
				
			||||||
 | 
					  mainContainer.addEventListener('transitionend', function(e) {
 | 
				
			||||||
 | 
					    if (e.target == mainContainer) {
 | 
				
			||||||
 | 
					      var event = document.createEvent('UIEvents');
 | 
				
			||||||
 | 
					      event.initUIEvent('resize', false, false, window, 0);
 | 
				
			||||||
 | 
					      window.dispatchEvent(event);
 | 
				
			||||||
 | 
					      outerContainer.classList.remove('sidebarMoving');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  document.getElementById('sidebarToggle').addEventListener('click',
 | 
				
			||||||
 | 
					    function() {
 | 
				
			||||||
 | 
					      this.classList.toggle('toggled');
 | 
				
			||||||
 | 
					      outerContainer.classList.add('sidebarMoving');
 | 
				
			||||||
 | 
					      outerContainer.classList.toggle('sidebarOpen');
 | 
				
			||||||
 | 
					      updateThumbViewArea();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  PDFView.open(file, 0);
 | 
					  PDFView.open(file, 0);
 | 
				
			||||||
}, true);
 | 
					}, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1449,6 +1535,8 @@ function preDraw() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function updateViewarea() {
 | 
					function updateViewarea() {
 | 
				
			||||||
 | 
					  if (!PDFView.initialized)
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
  var visiblePages = PDFView.getVisiblePages();
 | 
					  var visiblePages = PDFView.getVisiblePages();
 | 
				
			||||||
  var pageToDraw;
 | 
					  var pageToDraw;
 | 
				
			||||||
  for (var i = 0; i < visiblePages.length; i++) {
 | 
					  for (var i = 0; i < visiblePages.length; i++) {
 | 
				
			||||||
@ -1479,13 +1567,12 @@ function updateViewarea() {
 | 
				
			|||||||
  var normalizedScaleValue = currentScaleValue == currentScale ?
 | 
					  var normalizedScaleValue = currentScaleValue == currentScale ?
 | 
				
			||||||
    currentScale * 100 : currentScaleValue;
 | 
					    currentScale * 100 : currentScaleValue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var kViewerTopMargin = 52;
 | 
					 | 
				
			||||||
  var pageNumber = firstPage.id;
 | 
					  var pageNumber = firstPage.id;
 | 
				
			||||||
  var pdfOpenParams = '#page=' + pageNumber;
 | 
					  var pdfOpenParams = '#page=' + pageNumber;
 | 
				
			||||||
  pdfOpenParams += '&zoom=' + normalizedScaleValue;
 | 
					  pdfOpenParams += '&zoom=' + normalizedScaleValue;
 | 
				
			||||||
  var currentPage = PDFView.pages[pageNumber - 1];
 | 
					  var currentPage = PDFView.pages[pageNumber - 1];
 | 
				
			||||||
  var topLeft = currentPage.getPagePoint(window.pageXOffset,
 | 
					  var topLeft = currentPage.getPagePoint(PDFView.container.scrollLeft,
 | 
				
			||||||
    window.pageYOffset - firstPage.y - kViewerTopMargin);
 | 
					    (PDFView.container.scrollTop - firstPage.y));
 | 
				
			||||||
  pdfOpenParams += ',' + Math.round(topLeft[0]) + ',' + Math.round(topLeft[1]);
 | 
					  pdfOpenParams += ',' + Math.round(topLeft[0]) + ',' + Math.round(topLeft[1]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var store = PDFView.store;
 | 
					  var store = PDFView.store;
 | 
				
			||||||
@ -1521,13 +1608,11 @@ function updateThumbViewArea() {
 | 
				
			|||||||
  }, delay);
 | 
					  }, delay);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
window.addEventListener('transitionend', updateThumbViewArea, true);
 | 
					 | 
				
			||||||
window.addEventListener('webkitTransitionEnd', updateThumbViewArea, true);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
window.addEventListener('resize', function webViewerResize(evt) {
 | 
					window.addEventListener('resize', function webViewerResize(evt) {
 | 
				
			||||||
  if (document.getElementById('pageWidthOption').selected ||
 | 
					  if (PDFView.initialized &&
 | 
				
			||||||
 | 
					      (document.getElementById('pageWidthOption').selected ||
 | 
				
			||||||
      document.getElementById('pageFitOption').selected ||
 | 
					      document.getElementById('pageFitOption').selected ||
 | 
				
			||||||
      document.getElementById('pageAutoOption').selected)
 | 
					      document.getElementById('pageAutoOption').selected))
 | 
				
			||||||
      PDFView.parseScale(document.getElementById('scaleSelect').value);
 | 
					      PDFView.parseScale(document.getElementById('scaleSelect').value);
 | 
				
			||||||
  updateViewarea();
 | 
					  updateViewarea();
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
@ -1583,6 +1668,10 @@ function selectScaleOption(value) {
 | 
				
			|||||||
  return predefinedValueFound;
 | 
					  return predefinedValueFound;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					window.addEventListener('localized', function localized(evt) {
 | 
				
			||||||
 | 
					  document.getElementsByTagName('html')[0].dir = mozL10n.language.direction;
 | 
				
			||||||
 | 
					}, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
window.addEventListener('scalechange', function scalechange(evt) {
 | 
					window.addEventListener('scalechange', function scalechange(evt) {
 | 
				
			||||||
  var customScaleOption = document.getElementById('customScaleOption');
 | 
					  var customScaleOption = document.getElementById('customScaleOption');
 | 
				
			||||||
  customScaleOption.selected = false;
 | 
					  customScaleOption.selected = false;
 | 
				
			||||||
@ -1606,8 +1695,26 @@ window.addEventListener('scalechange', function scalechange(evt) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
window.addEventListener('pagechange', function pagechange(evt) {
 | 
					window.addEventListener('pagechange', function pagechange(evt) {
 | 
				
			||||||
  var page = evt.pageNumber;
 | 
					  var page = evt.pageNumber;
 | 
				
			||||||
  if (document.getElementById('pageNumber').value != page)
 | 
					  if (document.getElementById('pageNumber').value != page) {
 | 
				
			||||||
    document.getElementById('pageNumber').value = page;
 | 
					    document.getElementById('pageNumber').value = page;
 | 
				
			||||||
 | 
					    var selected = document.querySelector('.thumbnail.selected');
 | 
				
			||||||
 | 
					    if (selected)
 | 
				
			||||||
 | 
					      selected.classList.remove('selected');
 | 
				
			||||||
 | 
					    var thumbnail = document.getElementById('thumbnailContainer' + page);
 | 
				
			||||||
 | 
					    thumbnail.classList.add('selected');
 | 
				
			||||||
 | 
					    var visibleThumbs = PDFView.getVisibleThumbs();
 | 
				
			||||||
 | 
					    var numVisibleThumbs = visibleThumbs.length;
 | 
				
			||||||
 | 
					    // If the thumbnail isn't currently visible scroll it into view.
 | 
				
			||||||
 | 
					    if (numVisibleThumbs > 0) {
 | 
				
			||||||
 | 
					      var first = visibleThumbs[0].id;
 | 
				
			||||||
 | 
					      // Account for only one thumbnail being visible.
 | 
				
			||||||
 | 
					      var last = numVisibleThumbs > 1 ?
 | 
				
			||||||
 | 
					                  visibleThumbs[numVisibleThumbs - 1].id : first;
 | 
				
			||||||
 | 
					      if (page <= first || page >= last)
 | 
				
			||||||
 | 
					        thumbnail.scrollIntoView();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  document.getElementById('previous').disabled = (page <= 1);
 | 
					  document.getElementById('previous').disabled = (page <= 1);
 | 
				
			||||||
  document.getElementById('next').disabled = (page >= PDFView.pages.length);
 | 
					  document.getElementById('next').disabled = (page >= PDFView.pages.length);
 | 
				
			||||||
}, true);
 | 
					}, true);
 | 
				
			||||||
 | 
				
			|||||||