From 5f15301376e94b191b75ff967943cdb3e3c6fe1e Mon Sep 17 00:00:00 2001 From: Leona Date: Mon, 16 Nov 2015 08:34:26 -0800 Subject: [PATCH] images need to be in _static folder for linkage, updating index with files, syntax editing on message broker service --- source/Makefile | 192 + source/_build/doctrees/bundles_in_clr.doctree | Bin 0 -> 34294 bytes .../doctrees/bundles_in_clr_html.doctree | Bin 0 -> 33728 bytes .../_build/doctrees/bundles_overview.doctree | Bin 0 -> 5200 bytes source/_build/doctrees/disclaimers.doctree | Bin 0 -> 3641 bytes .../doctrees/documentation_license.doctree | Bin 0 -> 2811 bytes source/_build/doctrees/environment.pickle | Bin 0 -> 72402 bytes ...-clear-containers-gettting-started.doctree | Bin 0 -> 15976 bytes .../doctrees/gs_creating_bootable_usb.doctree | Bin 0 -> 15401 bytes .../doctrees/gs_getting_started.doctree | Bin 0 -> 5664 bytes .../gs_installing_clr_as_host.doctree | Bin 0 -> 12060 bytes .../doctrees/gs_running_clr_virtual.doctree | Bin 0 -> 11897 bytes .../doctrees/gs_supported_hardware.doctree | Bin 0 -> 4222 bytes source/_build/doctrees/index.doctree | Bin 0 -> 12307 bytes .../doctrees/openstack_block_storage.doctree | Bin 0 -> 88220 bytes ...enstack_bundle_and_service_summary.doctree | Bin 0 -> 19944 bytes .../_build/doctrees/openstack_compute.doctree | Bin 0 -> 96682 bytes .../doctrees/openstack_dashboard.doctree | Bin 0 -> 7268 bytes .../openstack_environment-database.doctree | Bin 0 -> 11047 bytes .../openstack_environment-messaging.doctree | Bin 0 -> 10243 bytes .../openstack_identity-openrc.doctree | Bin 0 -> 15855 bytes .../doctrees/openstack_identity.doctree | Bin 0 -> 77327 bytes .../_build/doctrees/openstack_image.doctree | Bin 0 -> 54499 bytes .../openstack_installing_bundles.doctree | Bin 0 -> 11967 bytes .../doctrees/openstack_networking.doctree | Bin 0 -> 57647 bytes .../doctrees/openstack_object_storage.doctree | Bin 0 -> 122303 bytes .../doctrees/openstack_orchestration.doctree | Bin 0 -> 57967 bytes .../openstack_supporting-database.doctree | Bin 0 -> 10563 bytes .../openstack_supporting-messaging.doctree | Bin 0 -> 10570 bytes .../openstack_sys_req_and_pw_summary.doctree | Bin 0 -> 19100 bytes .../doctrees/openstack_telemetry.doctree | Bin 0 -> 45808 bytes .../doctrees/openstack_use_cases.doctree | Bin 0 -> 8109 bytes source/_build/doctrees/substitutions.doctree | Bin 0 -> 2760 bytes .../doctrees/swupdate_about_sw_update.doctree | Bin 0 -> 15871 bytes .../swupdate_how_to_run_the_updater.doctree | Bin 0 -> 8856 bytes source/_build/html/.buildinfo | 4 + .../html/_images}/bundles_overview.png | Bin .../html/_images}/gs_confirmation_screen.png | Bin .../_build/html/_sources/bundles_in_clr.txt | 7 + .../html/_sources/bundles_in_clr_html.txt | 773 ++ .../_build/html/_sources/bundles_overview.txt | 25 + source/_build/html/_sources/disclaimers.txt | 10 + .../html/_sources/documentation_license.txt | 12 + .../gs-clear-containers-gettting-started.txt | 75 + .../_sources/gs_creating_bootable_usb.txt | 69 + .../html/_sources/gs_getting_started.txt | 11 + .../_sources/gs_installing_clr_as_host.txt | 38 + .../html/_sources/gs_running_clr_virtual.txt | 67 + .../html/_sources/gs_supported_hardware.txt | 11 + source/_build/html/_sources/index.txt | 100 + .../html/_sources/openstack_block_storage.txt | 479 + .../openstack_bundle_and_service_summary.txt | 51 + .../html/_sources/openstack_compute.txt | 528 + .../html/_sources/openstack_dashboard.txt | 34 + .../openstack_environment-database.txt | 58 + .../openstack_environment-messaging.txt | 59 + .../_sources/openstack_identity-openrc.txt | 75 + .../html/_sources/openstack_identity.txt | 418 + .../_build/html/_sources/openstack_image.txt | 278 + .../_sources/openstack_installing_bundles.txt | 26 + .../html/_sources/openstack_networking.txt | 309 + .../_sources/openstack_object_storage.txt | 626 + .../html/_sources/openstack_orchestration.txt | 290 + .../openstack_supporting-database.txt | 53 + .../openstack_supporting-messaging.txt | 48 + .../openstack_sys_req_and_pw_summary.txt | 78 + .../html/_sources/openstack_telemetry.txt | 224 + .../html/_sources/openstack_use_cases.txt | 27 + source/_build/html/_sources/substitutions.txt | 5 + .../_sources/swupdate_about_sw_update.txt | 105 + .../swupdate_how_to_run_the_updater.txt | 39 + source/_build/html/_static/ajax-loader.gif | Bin 0 -> 673 bytes source/_build/html/_static/alabaster.css | 585 + source/_build/html/_static/basic.css | 599 + source/_build/html/_static/comment-bright.png | Bin 0 -> 3500 bytes source/_build/html/_static/comment-close.png | Bin 0 -> 3578 bytes source/_build/html/_static/comment.png | Bin 0 -> 3445 bytes source/_build/html/_static/doctools.js | 263 + source/_build/html/_static/down-pressed.png | Bin 0 -> 347 bytes source/_build/html/_static/down.png | Bin 0 -> 347 bytes source/_build/html/_static/file.png | Bin 0 -> 358 bytes .../html/_static/images/bundles_overview.png | Bin 0 -> 115841 bytes .../_static/images/gs_confirmation_screen.png | Bin 0 -> 42586 bytes .../images/openstack_example_architecture.jpg | Bin source/_build/html/_static/jquery-1.11.1.js | 10308 ++++++++++++++++ source/_build/html/_static/jquery.js | 4 + source/_build/html/_static/minus.png | Bin 0 -> 173 bytes source/_build/html/_static/plus.png | Bin 0 -> 173 bytes source/_build/html/_static/pygments.css | 63 + source/_build/html/_static/searchtools.js | 622 + .../_build/html/_static/underscore-1.3.1.js | 999 ++ source/_build/html/_static/underscore.js | 31 + source/_build/html/_static/up-pressed.png | Bin 0 -> 345 bytes source/_build/html/_static/up.png | Bin 0 -> 345 bytes source/_build/html/_static/websupport.js | 808 ++ source/_build/html/bundles_in_clr.html | 874 ++ source/_build/html/bundles_in_clr_html.html | 864 ++ source/_build/html/bundles_overview.html | 116 + source/_build/html/disclaimers.html | 100 + source/_build/html/documentation_license.html | 99 + source/_build/html/genindex.html | 92 + .../gs-clear-containers-gettting-started.html | 184 + .../_build/html/gs_creating_bootable_usb.html | 172 + source/_build/html/gs_getting_started.html | 100 + .../html/gs_installing_clr_as_host.html | 137 + .../_build/html/gs_running_clr_virtual.html | 170 + source/_build/html/gs_supported_hardware.html | 102 + source/_build/html/index.html | 205 + source/_build/html/objects.inv | Bin 0 -> 944 bytes .../_build/html/openstack_block_storage.html | 649 + .../openstack_bundle_and_service_summary.html | 178 + source/_build/html/openstack_compute.html | 691 ++ source/_build/html/openstack_dashboard.html | 132 + .../html/openstack_environment-database.html | 171 + .../html/openstack_environment-messaging.html | 165 + .../html/openstack_identity-openrc.html | 176 + source/_build/html/openstack_identity.html | 566 + source/_build/html/openstack_image.html | 421 + .../html/openstack_installing_bundles.html | 115 + source/_build/html/openstack_networking.html | 456 + .../_build/html/openstack_object_storage.html | 830 ++ .../_build/html/openstack_orchestration.html | 422 + .../html/openstack_supporting-database.html | 159 + .../html/openstack_supporting-messaging.html | 153 + .../openstack_sys_req_and_pw_summary.html | 195 + source/_build/html/openstack_telemetry.html | 358 + source/_build/html/openstack_use_cases.html | 112 + source/_build/html/search.html | 99 + source/_build/html/searchindex.js | 1 + source/_build/html/substitutions.html | 92 + .../_build/html/swupdate_about_sw_update.html | 192 + .../html/swupdate_how_to_run_the_updater.html | 138 + source/_static/images/bundles_overview.png | Bin 0 -> 115841 bytes .../_static/images/gs_confirmation_screen.png | Bin 0 -> 42586 bytes .../images/openstack_example_architecture.jpg | Bin 0 -> 31111 bytes source/bundles_in_clr_html.rst | 7 +- source/bundles_overview.rst | 2 +- source/conf.py | 62 +- source/gs_creating_bootable_usb.rst | 2 +- source/index.rst | 46 +- source/openstack_environment-database.rst | 58 + source/openstack_environment-messaging.rst | 59 + 142 files changed, 29360 insertions(+), 48 deletions(-) create mode 100644 source/Makefile create mode 100644 source/_build/doctrees/bundles_in_clr.doctree create mode 100644 source/_build/doctrees/bundles_in_clr_html.doctree create mode 100644 source/_build/doctrees/bundles_overview.doctree create mode 100644 source/_build/doctrees/disclaimers.doctree create mode 100644 source/_build/doctrees/documentation_license.doctree create mode 100644 source/_build/doctrees/environment.pickle create mode 100644 source/_build/doctrees/gs-clear-containers-gettting-started.doctree create mode 100644 source/_build/doctrees/gs_creating_bootable_usb.doctree create mode 100644 source/_build/doctrees/gs_getting_started.doctree create mode 100644 source/_build/doctrees/gs_installing_clr_as_host.doctree create mode 100644 source/_build/doctrees/gs_running_clr_virtual.doctree create mode 100644 source/_build/doctrees/gs_supported_hardware.doctree create mode 100644 source/_build/doctrees/index.doctree create mode 100644 source/_build/doctrees/openstack_block_storage.doctree create mode 100644 source/_build/doctrees/openstack_bundle_and_service_summary.doctree create mode 100644 source/_build/doctrees/openstack_compute.doctree create mode 100644 source/_build/doctrees/openstack_dashboard.doctree create mode 100644 source/_build/doctrees/openstack_environment-database.doctree create mode 100644 source/_build/doctrees/openstack_environment-messaging.doctree create mode 100644 source/_build/doctrees/openstack_identity-openrc.doctree create mode 100644 source/_build/doctrees/openstack_identity.doctree create mode 100644 source/_build/doctrees/openstack_image.doctree create mode 100644 source/_build/doctrees/openstack_installing_bundles.doctree create mode 100644 source/_build/doctrees/openstack_networking.doctree create mode 100644 source/_build/doctrees/openstack_object_storage.doctree create mode 100644 source/_build/doctrees/openstack_orchestration.doctree create mode 100644 source/_build/doctrees/openstack_supporting-database.doctree create mode 100644 source/_build/doctrees/openstack_supporting-messaging.doctree create mode 100644 source/_build/doctrees/openstack_sys_req_and_pw_summary.doctree create mode 100644 source/_build/doctrees/openstack_telemetry.doctree create mode 100644 source/_build/doctrees/openstack_use_cases.doctree create mode 100644 source/_build/doctrees/substitutions.doctree create mode 100644 source/_build/doctrees/swupdate_about_sw_update.doctree create mode 100644 source/_build/doctrees/swupdate_how_to_run_the_updater.doctree create mode 100644 source/_build/html/.buildinfo rename source/{images => _build/html/_images}/bundles_overview.png (100%) rename source/{images => _build/html/_images}/gs_confirmation_screen.png (100%) create mode 100644 source/_build/html/_sources/bundles_in_clr.txt create mode 100644 source/_build/html/_sources/bundles_in_clr_html.txt create mode 100644 source/_build/html/_sources/bundles_overview.txt create mode 100644 source/_build/html/_sources/disclaimers.txt create mode 100644 source/_build/html/_sources/documentation_license.txt create mode 100644 source/_build/html/_sources/gs-clear-containers-gettting-started.txt create mode 100644 source/_build/html/_sources/gs_creating_bootable_usb.txt create mode 100644 source/_build/html/_sources/gs_getting_started.txt create mode 100644 source/_build/html/_sources/gs_installing_clr_as_host.txt create mode 100644 source/_build/html/_sources/gs_running_clr_virtual.txt create mode 100644 source/_build/html/_sources/gs_supported_hardware.txt create mode 100644 source/_build/html/_sources/index.txt create mode 100644 source/_build/html/_sources/openstack_block_storage.txt create mode 100644 source/_build/html/_sources/openstack_bundle_and_service_summary.txt create mode 100644 source/_build/html/_sources/openstack_compute.txt create mode 100644 source/_build/html/_sources/openstack_dashboard.txt create mode 100644 source/_build/html/_sources/openstack_environment-database.txt create mode 100644 source/_build/html/_sources/openstack_environment-messaging.txt create mode 100644 source/_build/html/_sources/openstack_identity-openrc.txt create mode 100644 source/_build/html/_sources/openstack_identity.txt create mode 100644 source/_build/html/_sources/openstack_image.txt create mode 100644 source/_build/html/_sources/openstack_installing_bundles.txt create mode 100644 source/_build/html/_sources/openstack_networking.txt create mode 100644 source/_build/html/_sources/openstack_object_storage.txt create mode 100644 source/_build/html/_sources/openstack_orchestration.txt create mode 100644 source/_build/html/_sources/openstack_supporting-database.txt create mode 100644 source/_build/html/_sources/openstack_supporting-messaging.txt create mode 100644 source/_build/html/_sources/openstack_sys_req_and_pw_summary.txt create mode 100644 source/_build/html/_sources/openstack_telemetry.txt create mode 100644 source/_build/html/_sources/openstack_use_cases.txt create mode 100644 source/_build/html/_sources/substitutions.txt create mode 100644 source/_build/html/_sources/swupdate_about_sw_update.txt create mode 100644 source/_build/html/_sources/swupdate_how_to_run_the_updater.txt create mode 100644 source/_build/html/_static/ajax-loader.gif create mode 100644 source/_build/html/_static/alabaster.css create mode 100644 source/_build/html/_static/basic.css create mode 100644 source/_build/html/_static/comment-bright.png create mode 100644 source/_build/html/_static/comment-close.png create mode 100644 source/_build/html/_static/comment.png create mode 100644 source/_build/html/_static/doctools.js create mode 100644 source/_build/html/_static/down-pressed.png create mode 100644 source/_build/html/_static/down.png create mode 100644 source/_build/html/_static/file.png create mode 100644 source/_build/html/_static/images/bundles_overview.png create mode 100644 source/_build/html/_static/images/gs_confirmation_screen.png rename source/{ => _build/html/_static}/images/openstack_example_architecture.jpg (100%) create mode 100644 source/_build/html/_static/jquery-1.11.1.js create mode 100644 source/_build/html/_static/jquery.js create mode 100644 source/_build/html/_static/minus.png create mode 100644 source/_build/html/_static/plus.png create mode 100644 source/_build/html/_static/pygments.css create mode 100644 source/_build/html/_static/searchtools.js create mode 100644 source/_build/html/_static/underscore-1.3.1.js create mode 100644 source/_build/html/_static/underscore.js create mode 100644 source/_build/html/_static/up-pressed.png create mode 100644 source/_build/html/_static/up.png create mode 100644 source/_build/html/_static/websupport.js create mode 100644 source/_build/html/bundles_in_clr.html create mode 100644 source/_build/html/bundles_in_clr_html.html create mode 100644 source/_build/html/bundles_overview.html create mode 100644 source/_build/html/disclaimers.html create mode 100644 source/_build/html/documentation_license.html create mode 100644 source/_build/html/genindex.html create mode 100644 source/_build/html/gs-clear-containers-gettting-started.html create mode 100644 source/_build/html/gs_creating_bootable_usb.html create mode 100644 source/_build/html/gs_getting_started.html create mode 100644 source/_build/html/gs_installing_clr_as_host.html create mode 100644 source/_build/html/gs_running_clr_virtual.html create mode 100644 source/_build/html/gs_supported_hardware.html create mode 100644 source/_build/html/index.html create mode 100644 source/_build/html/objects.inv create mode 100644 source/_build/html/openstack_block_storage.html create mode 100644 source/_build/html/openstack_bundle_and_service_summary.html create mode 100644 source/_build/html/openstack_compute.html create mode 100644 source/_build/html/openstack_dashboard.html create mode 100644 source/_build/html/openstack_environment-database.html create mode 100644 source/_build/html/openstack_environment-messaging.html create mode 100644 source/_build/html/openstack_identity-openrc.html create mode 100644 source/_build/html/openstack_identity.html create mode 100644 source/_build/html/openstack_image.html create mode 100644 source/_build/html/openstack_installing_bundles.html create mode 100644 source/_build/html/openstack_networking.html create mode 100644 source/_build/html/openstack_object_storage.html create mode 100644 source/_build/html/openstack_orchestration.html create mode 100644 source/_build/html/openstack_supporting-database.html create mode 100644 source/_build/html/openstack_supporting-messaging.html create mode 100644 source/_build/html/openstack_sys_req_and_pw_summary.html create mode 100644 source/_build/html/openstack_telemetry.html create mode 100644 source/_build/html/openstack_use_cases.html create mode 100644 source/_build/html/search.html create mode 100644 source/_build/html/searchindex.js create mode 100644 source/_build/html/substitutions.html create mode 100644 source/_build/html/swupdate_about_sw_update.html create mode 100644 source/_build/html/swupdate_how_to_run_the_updater.html create mode 100644 source/_static/images/bundles_overview.png create mode 100644 source/_static/images/gs_confirmation_screen.png create mode 100644 source/_static/images/openstack_example_architecture.jpg create mode 100644 source/openstack_environment-database.rst create mode 100644 source/openstack_environment-messaging.rst diff --git a/source/Makefile b/source/Makefile new file mode 100644 index 00000000..655286aa --- /dev/null +++ b/source/Makefile @@ -0,0 +1,192 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " applehelp to make an Apple Help Book" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " coverage to run coverage check of the documentation (if enabled)" + +clean: + rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/ClearLinuxDocumentation.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/ClearLinuxDocumentation.qhc" + +applehelp: + $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp + @echo + @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." + @echo "N.B. You won't be able to view it unless you put it in" \ + "~/Library/Documentation/Help or install it in your application" \ + "bundle." + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/ClearLinuxDocumentation" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/ClearLinuxDocumentation" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +coverage: + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/coverage/python.txt." + +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/source/_build/doctrees/bundles_in_clr.doctree b/source/_build/doctrees/bundles_in_clr.doctree new file mode 100644 index 0000000000000000000000000000000000000000..46e4815f3d8ed9afcbe45bb4c951ea9baefdab5f GIT binary patch literal 34294 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 F{vW-EJmLTV literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/bundles_in_clr_html.doctree b/source/_build/doctrees/bundles_in_clr_html.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5c425eaa3f950f649b1ea6a69c010aab07c903e3 GIT binary patch literal 33728 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 literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/bundles_overview.doctree b/source/_build/doctrees/bundles_overview.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6f773a1655d69b9da0941bdab8c8b141b6e8ca7b GIT binary patch literal 5200 zcmeHLX?Gk)6_q7xnXxuIwi7#c(vbQ+x7SrI zX@G_p2v}j?cL@6)_I=L};iqu8Ro$ay5a;lPFC6QG&UAOxd#~QR_bv70s2?PLu4Ski zaT0J_uGnQ?BS}LF4OlBO@c7JPtzcB%3_jlzfXOT8bT4 zc}HofAuoyDfOi#57Bt0XQ!i88jkr=?4?=2fs3PMeJxPu$j~1u^fj@pAozHa$;FcsV-?^ElnU zItpP`VCnf{RKO`OSRD2WA{X*HEy5=k3%ax@PTNS|I~3^`iW|jAag#VB&a!d4hn55^ zUS1Tpw8gD$;k3nVZE>NU3n&(qy2h}!HNFjyH4jyB$5U77MFqVWCJ3YMV&3uc&aec8 z$m?ZZD(dtS*nGL5ml~V@i6A{_qO#oa6c3yvx6u% z9!OQj6ktlRYP(y(H|(TVxkmAyQ}!Z^TFluCre*jXtZn2T4C zHZZ}FF*bK(>}8Ux2EA-wh-$lTqL-U6-FaA;jt;`~3emjozy_@VfUhj*RR(~@nU^g9 zg@M^!1-;t9Z0*R%$U|P-cMb*_fdN9&P#WkMc*Pod#9*fkSrya38N|JAW2chk3J}Pl z%Y$!A&X$nAaFC0vG@w1sLj+m(9Zy#ut=u7~1w0LtzS$!)K&Pv>Afn+sF15hR1kl-# zz_c;zfcZ=Hk|T~6L^3w$^>mVfF`i{h44@$ohoOaMo(7%H&7Cb|z)&SNX9C6bLDmFd2jnpMvP`yB zqO>XAHWPS(tbQOVf=WiU&FLl)L+C(~A*oHt5Lgjsk1|&PcV{O^JhmN%hdclpCRSZZt@;6Kq0Yq6$?>nu5+d0$rvkrG07~|!lKXI3 znL?aA1uMB1)eoyhHdDl$2dFG20Jb6>Fb35MCl92loKd~QL+Ise7vCb4m##m#iG2!;ZI>^kz=UBu>zeV zp3$3IY-V>RvNOP23VJJ>!q2kze_KIqHm~|oCkfrbN=0vPlgo}Dn5gXTceKf4Cx@21 z_EV=#KCAiCga`dA1#RNSIyOBR-RyMH#iX`t;ogwfYm+c$rAdZxk!-Ok8B|l;6PV&= z_S>RpqfH^387M0ahzg3?ylE*i)D9N|AUXs^Nt;qOg{HzZ^@?cUAk)okzZKLU^THg{ zEM*C)g7hLgF>r-zh9?-lp(uwLH$Zff1(;ULB?WO znoZlmG$hyEMw0cKLPuefwpk4>@VSvq{cD(bd1}sJsv2@Py|cw;%_xw%=>N=kt>|3{ zq)v>EfjRGHmGTJD92A4PVpKFbT1Z z^T^#c2&WGtCUZd^rS2}K6nzA~!u%@ZZc;7#D3;Blsf~@nWkIBmwb&`+_bwU;6EzpZ z9_-beKF+4_VfpquE(i1pcARfZTsr{PxvG5gN%&^MaFGuPO8oFv+1+FsOMg-(UjXLr~bk2mRat?FE<;(35`L?M0NxNkc} zKklMg;aQBHhrR$l8K0o9w$pWW;xF#7W91O&8uZeaV5Y(7K9qeKDux_SUt#09?k?X+ zUuE@by8-mquv^CaLquO^HM??I$sRq!=3Gn$W{d>{%}`3;Xt5d?oI;`8rf(uK)wI`f zw`8CNeQOohJO^<^-)7@%?E$F%4x1d@@_bjEVRK-y#`JHv02gWc-ZfV1@z{*%aQ63M zngzg~OMU>bs|fc$F6FojQuM88B-E+au*r*KX=dd;M#vnR~C&w7W5}^7Rep8^3S%p nv(;{J^@Y10-0R>*ht&pYRMB7B^j9`v(0~i5zZLZNywms>ev5LF literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/disclaimers.doctree b/source/_build/doctrees/disclaimers.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7f656f6f46b21b0b47788d37175e70fd88791304 GIT binary patch literal 3641 zcmds4X=5Bm5tU`Hq+K0eIX>dVP9`SC3PigJ31AEa5`sw(Y&hIO9K+B%)4Sc#T-Dv9 z0~itmArkj}-}imrknlVBH@u!bByG$e$Oob|)8xj+InfpP!nVij)ast`eaQ&FmVsY>KY2%EDHb29f9) znk{LLE#+Jr5hTJG-iLv@PYt#d7Fy$wz+{CE1!8R@XbYf*PI@sw8#C8*6J6X~x#HRVy z(2LXSO$63zdBFjrSJ(_9fUk5$PP3We(wo<>U};-siD<_rY=^PnI#y}1otbv7vnNDo zR{^DI4>q(9SZrxy=`5SIyzhdcTiDFNExMI8xV2h!3k#&qm2`fE9d*Ip=Cipj4>z=f z^>*AuMeg<*@_aUnJQ#!PJA76fJiUM`tW^=cNHz<044w(P6Y$NA(n}ZRv|RR!?j%CG z=xP-<=*2+jQb{W-^7MKGu|7P`H{B%xg}hmwWoN~9jz|NXC4f;VqM*AIR8hU8q?gJW zdD2M4H!whEK*I*OXbtYUb+?{S?vEvMlqaMJ+3C3CIOJb5i9Gz`ea&;( zpw|Mt2TFR~3m!arJ>a|S3cgS3#c`jn`r9KVJ<8^AIp}3?E@_Q5%}&zI;$XDW&|7?Z zD_cIK64maGPmi&a6U$wLGW0f|-p=ZwvQ-5edWTQ%th&v@NRFyLc@63__HbXgm`{&S zvfk_%E0WQg2E7Z^UoYw12%Jqh7QDx?fYoAGd}~M0@6h!|A_Cf=3!+t5?HSGan3Gs` z?9tBE$LPIv&FT?Yaay$D4P?c;a6o)6xE2FV zMSmEz>=tq4t6NeyIOL3kEO2>?e6ae*mJUZr5gxnzxNeCAiVmAo(NLm$2xIYJQVjKd zl5BB=`XCdkq$gNYrIFH3J_ddo+VCl6b4FNnr@o=&fPD8fdX`9|#^XFj<7!ZvQC3pE z!cL4h5jcf(aT_AIaT82uI>IQDV;{sxK_YdBE$Ci|rI<+y9g|__q_w%Z(r()`p9<6vEQed+dBx*u1d+&*mqv?{+W)L_v-N)i!+(jk<1mH`r2s=2Q&4%J$CD$+(ay@ng>W$2BSIr z_h9o7)QYQy{@}CI6>C*$gs#4jMC!1Q=#RT>9-knnq{024TnDY-8TY|IcZx1MH7RL> zZ=%1fO$|N~{#w%CFc@DlAlJb!v4M#Gy`+DjqhEBI^v_B`ZYV_stB<;=p?~@GZ;bBl UGs4ibB|RsbKK)0YgLU|O3zrin~dUjTpb>JL6(;G$doqeuR9KmqPNrgR zTJC4cGuy%=58TAb5~miSnX#1HotzsyTH-XEG)2!?Y3ZEG!kG6B&XhO{^EuOohbcFP z4Jfz~U=!w}LTkD(G^)@M$5t0wF^`mH?ld0j!YNi*)mO@9%JR@yrY#;{KLWGvSs5Fg zD{&qgk&sDDH{po@7ZwlWrl;9Jvs|?BBmqBF;vEEBv+erX(;N3qOiWx?`Hq$YVZE=v z@*ZBk{HXVAW_jXWS2`afIs-Fw86n2AViIQR^LK7MN#}i`Qtl@v@}q<^oye>hD&yx` zy~!iHMC2KNbif}IS)~~!GUA!x9c?V0gIUW4E;&38&3)kb186a8wd@s^$h)h=3yaW* zi`+#Tycoc2lrUrH``rOFdMw)1j{187m~t$60ZflV?+pq#O4vBIiN?kl3En3r1(El| z!`$8AL#p?s@6FKt@7}~8mAJSlPKz_*tTWcc1sXTt8HOze$DqI&8Z+;q`x#(ndvA!@ast9 z_jdd%on^nhwj$F(izRloeZ7t+g;WQ;=SGEWd&cf0e6`(EI_7$5TgFygTW+_Ejz*6e zdQEn|^}X>!SFa8qx!lRKLEH1!R(!U$($g(}?S_!X+g5thqt6;#>=hZk<1z35k>BC0 zT94PdqmJ~5f~qTYR!Ns77NI<0;dm!ht*%J0j@zalC}bD z@D~9-=41iK$KF#l!{cN%`v`Bj)Dr<-cd*C+Ea85#3k@09HuMzr&)h*Q2A>Y_8JHVC zHUjX=5}$wZL`(GoDd6;Esj=ymbD{{kxZ}9|wyH16nG-!g16ovtf z1VQaq2fVR94RbY!+VH|IOw+(gIR35+7r53+hXh!~L~J&~bBpmFTvUb43;SJnavB3fN@TH5$f(3wk%mJjbR1A= zPQ*o;hx^hpD2Ot0U77V&9VRJkew*pc0j9e+OYzMvoN@H`Wl|L{v^*uemg6Rw9?zF9 zEnkT-fs=eFX?&8p3sX~+5=AqS%KCDESzR&`-j+1dDvgS6juOQ-L!L63ge<1PSxt_7 z7cNpJ>3+lADt=|A{&pSV+b|6`o~Ea7!t8ik z`Lj3&C#ab%jY!uLG?Og8vkT1u&p53xMD||@S|xy6l)OutH!1BgAr`dL82sxV9CxMO z@6-3d8~5q<_I4-Vu|j24pT>O4r%>bLu5-uCvSBD_Wl7xHLd7|nsBD1m!-d=FIMf9n zh(63a;|gz4@F7gf7(XJkDmqxHzwN(HvLYOB8-FJ?*Q8cjHTZD=XDii8 z+G%vP1@g>sALA#xaExX{02? z12QVx*^%xn)Qu}<+FQ5x?Z_>b%`NWbdXG%>Yi)1Kw5RjAB`mO5$h6n(fPI~*j&!0k zlbeufDb(fqtUWi^x23768FdvholQ-3`80O-OCC8b*S|T@JJr>d8!$PsluD~~sx&29Io91=-oIbZ5ShYMI%T zFLrfh6>Q9CXiXJT&8d7kH>9OC+d|LsqdK##>3p5w>vBWk)zV&WnURSBDm5#gEvlAu zZdjsMqApb^s7!OQ03*wKx#1%dy)&)(+;Yi8|JGs`o0iWlpG@>?X;0Kpr`4HK-ps~$Nw7xQwfjdX?u zGgeRZ?Mk7lLN4wsU2IMz`V~?$Xg9Y;qK~vGw`Q@qaSc>9Bj3={o=&NTmTYGsmFY~Y ze8Y@%p&)@lq*Ni@nj7IT0&97>kua6$<)Eo+k93wxI?E@W6_U=1Ne3-(;P*OCed7q! zI-XU=#+Ry$u}XwGW@?PhC}vvIxpmQi^}JjI8?XqlQBK@h3(a!YaM+CcC|(i$d};>F z=0-~c*7tH7lp3&MXahDv1C~O4y9zWN%N5hbbZ%q#xrvwClzvv{ZU%SOFT1l`z@4mW zankvMN)s1Mu2hXJT$_Y!mm*x%91?L_;*oQbeKu53FCQJD{szX!?r=BZ<@TVvfs8%j?IiKm z42NQ~Gf@0#^m2QZ{Mp;@&ptkX_Vrs&8khDfIoYKB*&qJI5x+gt?Je1kbgYn#$+*}h z(^;Gyn}C^y)28kiDY)9~9iDy=(;Ak3R z!oxbTDbr(ZSrwbui6Qd9wXv}nahXE8rBFm;3usNz%N@Yh{O`5RLKC~nO&l6v3SFcN z$C2D@Y2h3%cVMZ72ZgrqV6?Cwsu*v89(+B-%N|U!KFs%WN709n?4#kz;bm8XGgL93Zfe0% zIG;O4yg1g&9ar+=_)srSfEVNF1&->|c~oB~hFW4$OKj1YJ`tXu-stVq`n>xl^T`r+K-5mfCrGXgkk9JL>@7sxupt!}m71GvV)9UhZES z8Fx-A8zRH`S;a1#)})(K&DkROozw>XHqVF6Wl_^uRuIc)+X}OA zN)a>FTmbVIdbx`juIN%1BLe4?9V6e(#m-iok~QJnuBBZyIfah)+$G}ErC#peC7&+y zPraA>rrs+`v+R{--o45{8DFiZ-fN8W9Ro)LTAMkPy(#zTq55eiX%T5mqINg~p;1DvC=V=d%vyXVWM@!B=7V7Nd zaF!!tavA#syn52hJw>l7vYv+dN6O|`01zDdg2k?w$~QULd?ELY`0%Wkd#>ce^PxVx z03TSDFJJ{H&ErWbACszHgi9}ZxtHlu_a$F}htHNh44y+aw`ci>#mun_#J^X)+-oKO zUiXidH+-YzP5;<`#IbijtY0m&f>Wf>WMMF zdInOtFW}#oUhcp2ubX0D!O>63kqsVmT2pzaIg1gT`&zvE#>;(M^6I;h&KpVR&7|{I z(s?`Sm|%SmuXye|p#=Q_j{NB5exf76oS$L)8*Q7>;lzx7*Mh&U{4>M%}?v^K3e}MG5M!q@-H9Js@Gz@dI_^?F{I${+AuucSdFD()^02@ zeH~`m!YcU8;U! zuD>=X|1s47Q7%t9S0tS)lg?F1M^Epnj-dL+!KiMROui7yw%NH!Er~2RKM=xGOGyR8 zLJJOJ9dVatHA8lG=Mq5a#Js6J(}ER)v>MFf^m7Ojo*Ig+lGKZmMC1GQ6rh;f`wWeDbth2 z$pJG~@?#xjp~34ycxpXtISkn4DhoESj<`#AEBgDADBYULWA!J~frS+{iY3{!(MWh| zeQZlj+dz~MrZyy~suOL5z3^^h2v2PySlx+ObveTHx7>*`9XQEXo1%nxv6+C!l)&gO zn~M_S#TEqV!^A|^5}U4jq1qA|aAYe8Pi-x5eY^-3+lKhKOOs{qc(^Eg=U*l$E#0VX z31rN+L&8&Iu`R`HoGAMwoqdx|GU@D>bo5_uHJ+f5l^itz8Sr*{2v6-G@Q@`PwIlIy zmnOBh{AbM*va+{Wzv{%f_#Cwp%hJJ#NO)>zY)cMK5+x*@yAV|0$N@0XR8)%SuE>Lr zlOa4cMQRupUUDjHiMuph4l0j@ILhE~*~xK9Wie6Ln(e?6ESIBIix_C7fkf|oq197qN!O)1vz_g! z=5%}BQ*GSU^SZX0fpX4}#44p2HiWExD+i_KCHi+{TV)YlWuPaP?3&YH_au7Ft6{NK zxwJMqQ6FlpJg{fdTx0M|H?Uf&+F8+<#B$||g83a%L-35Qw9ctIi5{C+ri?DHvZlCYI+Czd8A9u%~_vIOSBcq>fd&e=jCDSo7*-~y{7+WR zWtH-$FY=$JI-C_elUM;xmH&%Mn^O4({()5gkXnLcB=B!g9l<&l_{WIkqj$-Qo;p%$ z2y$Hd*Q4eU{k5Ota^8GFcDG!pjv{<+V)=3e^m<~+`q5HH&1bU5pt!pnHiIE3u^Sd~BYa&Xp`R>C>a*QOxBzQeto^ zt3hX-fW7mg&I3*)jwb_&rF}SimT;0lds?kgC!?5iS7K#f4W;Fn2GjA?DNUrJe z^j*FBHs93~x63&?xaKt9)swQzsW;>r%zU>r$-10AYyS&B-{k}=n?x^PSeBeF({F4l z|65*wA_&ffEGYwzJC0NraW{ffnp<5?rP8p#-^BTDX%=-kV}}0ineXaZ(&aqZxEgwb zZv}Qr`7GYIWIf+4O^Gh2zMB7!%y&z(pv$Rlkx%vK7Zd%kvXRFHA9XP*nA9uLPah=n z>JsQ4&ahQ>Mz%{X33hPUqE?D1+NZ;ks(Jvn``Kqvcko*3qVxyt)&0B!-zTBY)ttovj)64s{o@j!p~$B~5La8J)$BW-cn- zjlEuCKubp7N|0Cg$c|F4yBF%DQ8+PDE%fm|sEz9^l8@?sU=n>LzBAMVQ0&22@2bO% zK5(c`J%}uHg@+(K^)R+06N9?u%#hm!z}KAiw0Z=4;fvforXHm-lqc{`y1lE3_h9iZ zCG{BhuUNiWVuF837LiKS5yPtrDEv4J4@ltzB!znvlzM`CU56-5D6F33jz0R#{wb!H z(xJx!YFk@owt5=-lIj`eEHMh>K|PCPDlrsi7n#nsEbEX3;kV)FS0x@9>{G7u_?QcS1)0g%X$*ADV^yU`cOKCd(vbb0=TM>_vC|!0IPb&NVL0QccckRI*e2?lN_px% zDLj}3XZyH$UrK*~t?^)`2yR9JCtisCL|-(5Yhxb*Sx_HI1j;+^0CzZ3ATxT zX68|!O4&i$5xGYScg3jBu-8lU2Ng4lJR*J$eR5&|XFr8C!@T-J3iLDFsV||*m7%h` z!M>5G!&xq_LGYFV^<11XN2dB_M9=EGuCr<_MCy9)8;u@&zbExb3Nx6&pFj|&i0&3Jm)6Q zxyy4N_MB%tXMyK@>^Wb1&O*=a%L?7WvRzKLoXS1V;J$EMtb9Tej)`SH(mBH>GxLf^*Eu5az+Zi#buQM8Q%%ncfSfqDGdf=q~ zPTQm@$-VcNR<<=zI*!*GMm% z)K}UvX>n=HB>g9J(qeLCf*1ws*tsc1Uun^#-tt#(Ql0$G0*;NE)Vr7%s;6b#7*INL z{)8-jwe{xxZhbWxX2J( zX#0Z&B38EktTy6X4KCg9r~X1YXJBItb5QBuWK+bNTd&1oFSuq=Ub|b2nc>T2i!-a+ zHL>2+HJ4YsmSASpZ91xtt+jMzyW*xA)z{W)Ph5O=x2S&1j9!`Q&+H!81qQHG zbNOdJdaY?m77213Tu2(o0ySK}S4**Akeu?O(I94ayJj?)B|DR8(bU4I?Q z?3x#nmS*YDtBcDpr($JD4dc$ROJ&OpNqd&7HB%IA>>P67E`UblRL5PS)viW;=77 zxz6FvG0w5hsm^K6+0Hr6CC;VJP0r2EUC!Ok!_FhlGtRTl0_RodW9Jj+Yv&thq4SH( zd~zLJCO^3fEsJn+u~w!)xwa{@pgS7FSSCWblqa!~%VaVg%9SXY5#<7oOp5vmsw8k-r|ZyPd5XSfcxJJ&HxT>42k|U-Lr!`qrh$scr+7sAZbikOf1B;6}^|nE^KD z{)mMgwTaCvA3Vwv_omFOd2-l{rE5A4jbX_i=jP2>DtMR;JpyjQaBac!y32?A3C!&Fh_XFP z^!RX(+JVJ_G=-iG?TB*ed}09qaWu(!^G?{~C6>TckXI9#Ry$*hNxAYVo#tYDd%A#Q zRvydJlTZeKhIbLbt^&}{&ZxZqNbjgqQ<04tcZ2ZMG^xbYI9-&= z8sjdF^EQ{=nQ#BJr&?R}(@ngVn8MxPcvdJiL#4W$I+Z{{nAiitQ+pC+9{5p>qEwrp zH#D&qWTo$TxCzf`b+)AI)ZWNO#rr_u5h)CqmGL~F>ON?00Ngq2u~e=Eg~fjw{#sWaL*4vBmz!L4AG&GmafB) z_S9TK7`hIp5}<3fcv}WTB6A>?3(Nc%3T4%$R+i{3UHAuOy&NQWC{-OR(c-UK9f7hS z=ST=o&BK=D@bKCb5}dGkk({`ih&0$)(l@iJ`2xajQvme2dY?1G4$`Bm~^DW&cLGjed0x^7@B1)y*xJy&Sp9*Q|J`HJ4 z{ZkMIema!^-67NCh|uYg&d|acl#B9UraBV{aC#Pmr~ZX4Cr>C(Y)!ffQv7R)&s zqa%N=DA5r(kNK8?^96r_AAey4o~GEoiy$ol7bESdO9Wvec&RAW=4pxWe?wXVE<+ku zN(5oxS5OHMFeKiLL80a};OIG%%b(T5E1VEIM~hcd>id_+Nlkc;PS>QaLKY%_HH4?G z!Iqk#)$BTI$Yj}@Rz9Ea# z0)=yf6z|94qvUeAt09|jz;l(L5$Ey^yg|o4Raq;UYzf_ain6|OD=?FwS$Vc59}}}U zT}YW{yY%y%fyX%m4|A%gQ4jcj2EtR%VoSdN*ILmf7_#s#Q9TZy6XVZo;Izc}eGF+?{RC-GeJTjU>St5}tPYIpi=KGT zLu7hAHxwN+msM3?^ko#^_`>qgtj z^((RUwYH@r{f#J-VNW^yi3||)7lfyJ^%i0ryr#mX zAK_Hk0568po?2XEbbxz{65Y@xm~R8!NAP|9_G@+vW4LcRv&DJiG^jg1AW0Ef*^z?Wt7+VYsNL65wL3xc%qP^9immSU#Fnb|y|M z%q_pQ5<;Kp$f}g)FOS@uf<+{pIlw^7lA;ZiScw4vR#t<+Luc5M6?rL5O?Xhl2KPiw z*ipnc&yBIeFfMMaq218bttm<+b!h7dWZ2=imf%MEachU-;x0`vRO>L`a=tDUJnbeB zLt29B+ zTY;EJZ6`{#eVQVEETj$eIHWx_UJwR8fl46I>)MHqV~bC#_{SR31(n5mwQAsMaP`oFTI=Z_c-;%qlz$g3RQzGEB#CS}FwA}87G#2OuVaS;-O0{)bB7Ap9%WVQ_ zPwgQH1K*QMfZG)V6K5CShlW@4oe^RX@j*XyaGbrmDH|u`1@CX-} zBryi9MdhFhkeGq+l#4A%{2wX=#f(un#dfBhDc0JxHBDlNDAgod5;~D@$6{9CU4D2j z0!~Yel!CNfAdj@C3W6{k7DcJHPD_Lz0BO6xETla(TM!05hf1IeEbm``_pgoDN->?J zRp<;Y98X#C-aK^zc7n7MAv|>wwjj;HEAw3X5KfH^?#Y5V zMPqbuPZcG)k*6`=2Kk?YKi!W%BLYuTY{Hq4HpXWmjVl0xFhM$7lxp*|MEE(7Hpb^7 z?WywwVc_Re3B-6n+&&smJzm0tO|NL`0!n?|cM7gW%IhO8#6HCOA_z}ij4cNU-~MMy zAnbH2JnZEWVFP%HRCKAXNE7gHQK}IP6FoLQoF_XxZW04GYXh2{ zTSTd5$42*7=391e6a4Ld{2dW^nqoly18K><6KPyK5QJgpZc(bu(-PtLKw5I|McPyM z3BthdrxGA{P&{xZR_hp{Yqa+OrT+6Y)qj?#9z+HxdI$m!YhX)?c=v0d7)A@d3}>Nw zv^*lUJ*sQdd^{#fbwF%9A4k58=Mw^d(hq+s0!~Y8-_wvbp3fkSrF}t|cs@rZ5YH`p zI$yOiCZguRC%Amn`rPkn$b3F-bMjBV&C+F>VLVf)H|nVg;N zMEIfj@{#sMGxV`2latPrq%$???3Q%&i*nT`%&;@yrvm)U5Bxk77opq}!ZV00@wD3J; z#SLLUU>`{P5yDeHVGGh6yb0K)3qp=TPT?}^uIv!)UVj0MjiU!M2U{T z@5r|V{2}l^{qVmc;Izc%^;)7lwiZJg3-;KStoIhB+Bz)}z69ZW<5B=_$m=8UzJ7Q= zDuMVf%Kcz9GDWxPOMl8my&r4m7qEN|!hTN;#)!-^6hw9THwq0 z;lm=}w8R)L3u*ZrjB0(>HQq3`BFcijl^{H|GPYzd z2KIb^VM}!R|NLUCvU!oD86rrDCdV0Q$LK0ztX><_V{}zfLS7ygV}@mOH36>f2gXBz zahEn2i#3>U>0A?vr$z|G@UfOCm4@*GIqWBXB&4NtZKOT5jvx$tT`B=O@t~%;O?DvP zfrdAs>B^h%QpmvlvUG+P)}yTX<>aaX#X;C82v3d17KAx?`?yQ*s%FmhOFKhm&J85f zva%sGPi=&4X{c;0N_22GVSd$}%;qVLI<+aXF{^C`;i)lFmkHbER1*E|<9T=v-+Uv% z8JN)DdC23%T62!Z^OC9Acvz+2OjY)b*!R+Q=h znYz?=%(uO7tl-D_@#7=#G{wF#0n+xq?UBZ7@&sYRxFeN7?;8@Yc%xOVy^+q*;!c$M zZn%oKwX2E9LeJY7!c&v5xHCb1sCxR)WR7ccC zWGeDq)3J6F_%uI!I+aE1Sc~=8v36&rlihW3ke;U!P$s+UNqP@SH%NL!|}-t38!JNR;Zh*`9bX^KDP`1b>Jhe`o}rrr0kIgS0(y zF4CSlTo9%w{)0-OC-#q}^(Ne`Rx(eOnjuoXka<=8iA>a16;{|?#AATa0|L-1m5-XkTZX~_zWGIu} zjU|1Gq&JcDsYut-`%YtJQkPWX5*^wF8Jt?X;6G8;Q>U|P+Xc@Mr8*AM%%!h1h?UVG9rZ1qZ zm#6niZ*JOu|8@4?KNhT4U5J9{sTVWR6g|AJ?s+Jj|G2-?)&ehQt`ia#k&7q zCQ5bKZP+eHzU{wP2>ePv{3*GqZ} zN#7vpEhT-Uq_>jvO_JVP(l<+b8%f_H>1`!_tE9J+^lg$JE9u)MJxY+e`W`N$()(yCuD&r0+qxmN9oP%8iuvOT%5Z*kw~)w$WwdT(-((b6mE=WdmG# z?$TwKzPfbMrFSmfa_NstM?!}$`$kX0mw!5=jw<&7@2UIgxgF9Eh*I6RR?()^gUq)> z`XMM-q8Er6laGi}ji)J&t4AU2kbVqlPdzRO1Al@_U`P*)`(BJ$>nNsUwDu&WzCU<^ z?{()-VK>I?(-59|23w9<-XH8Q^enM)mriy+LZ6drp4Zjr5&D8C(NTC2`Sv99C4s-} zhrbd5rzJLP0i@;NRitt2ydX>vUl*m?IxP|Y2BhWSO{6{bmLLrLZ7Kl{hT_Tu-d-uU zYUy{H)=C7uqsezD&1=P3m3foDydL#k2o+GT!2oN za-+KahbZBxkFYIu`;SGb4w>!tpCI2x{8NE{=7)bC0jDK4{|iVP@h_3ay0jon#J{2v zi1;#$IPS^KOU&hC9Qj&fPXB21YfAk^pNYCMiMp;#eS=&?{aXmUdI?)bozM1%l>MGH z#a(*dQ{2nbjnigVQ+^N|KWZC#fczv%7Rfw$x1)rxGA4s5J4CUhKf>co|Xt-8q!j*4APz&CI|yxmP&wvVR5{z3GX4` zyU$A>0j$0n9Zm}!q}Ab+_3|Q#>D8YURLdb73@i`fsTHv0XyIEYLJETy`W?;-XQ)}4 zp{Wp95?oR0TuIld8CqGC>JZrouY!CV;d+6u>W9Z7;IzcHt_Eo%ygJgJiVMO-cnvCn z2={oUKRmW{jrP{047<`l0vU+vS`eNZi7lfVcBP+Q)*8>XrM7i+Z91OoiV_{q^^kAl z*&y&ye)#AJI4!Y#>qFXjZh*9>HWY-3=SEZl@f;erpQp5M46n7j(mR^mm{K24r&fIF zQf-1fM0HaLPi=-RqsrrHWl3~Yy4zD=Ii=5+F3XheyzIt$pOdvy%@{Gbxi+W+zlA83 zfrtNFBEwEGTM2G!KW>{)T->DzHh)`4OW1Zu6Q`tiL^mwxxeoR6j1mZeEj z(=NIu&C;%-RE7(!n2Zd|(iFi>_2YI6#l>BkU=XG;-_kT4il=rLh>3GTluEmCm!^o{ z1Jcs8C(`(8iy#bqFDgCJG&__gIztP4QwF|Ps`kMy1bklzPbINszz;*f=|OnFZD{us zOq0gw(C#lvbQ4p|w;^s8e2X978iA)NHXzM>8{#%7ST7cciIF2pwSAf*J_Bh(>>}-{ znSwCzb}E4okFYl>1)kgBtw{EPiioE+!ik{E^rM4PfAuT;QhB+4{lG>i0H7%g;i)cc zImxXlr>}TDYI}RdmG%la=wxfVr!yyYD_ysyGcQVXI19+PY!(H6fFC|90!~Ye!fZ%O z<{YH4;wuQl#zCS~Tc;($4~Dd4dPsZf5J4FDp;Q87_IO+mCylPr-eHts$Mw0$06B+4 zcd?<@O9Q2EJ->hpqdO4t&*cOs>J zB|#7O;EmU2{ZB%b&8m}74;VZd!c(VUO9uH$g8!vfj5>y_C&Decr;72@v~f-DKShZq z_jKf2a?cR>nSS_L5pY^!^!^2D$vqosPn{zOL+-g$0_4X04_H_t19yg0y)Z1CKRQbf z&ZDfCm+|>-I zaSf&ZzMSdx6$h1++zX4bi$fA#{&p?OgOKYWJas*`BxH^9nCTV`R@l^VR_qDJ4N~=u zx@yhEO`=qDVPknS^X-VbMew)!@wY|bX^KI(9nw;H2hyJUk01;ecZyPNo|Xu|3(`_~ zH`1QEM-T>nFO>k5t3^;*o||f&66q~nxQ|lb0TxbUxoUMk%7VfNAUyRTwxlo?NnsfY z`q;d1`pU;LOTu0!~Ye!jq7eh^LVD)YF16 zL_9+!Kt$Y5ZRH~rpOm#91dDikTlk2gzjWeR%KFCD%ac^vH-uW#_JhAtxq1$zLB{hC zo_YaWl2IELbg+><(Gm8~)>8DMn0-l`)fBxfN;O6H)Z!K7TZ$G4{8c~vwFo#ZF*>h9 zT8iF4+EZ@|!cg=Ul>kLU<9N0x(>8~nyi$uq2)(1pw<+~9!X8o;zb2@wQtu!S;eQvx zQ}1ER@N*fVvLu2{cmGbX%jb5^Tsz6VF9tu*26f;+6s0oo@c$!ZSi(LQ+$VnAr=hsG zOA~DVXUw;ZeGbJ_UkJp6{7X?P?Z#c2BL2USma(sp_SDycFz|1v1Q-ihN0=M>2bIpy z!nc(5A)iZ9-ysL|d=KHNAFu^I&e7n4j)ZezBmARae$p5n;h#l`Zs|hi+erT+_+S0_ z-y-ld#diG8d>iRMpm^#}ftXPJB}%n@nj*ee-*TiELmD@hV~Zwh_j^+bM7p~>!^?jL zBmS#~b3(W2%MvgKPP)IXyKF=MU+n`B=;{mMseW`9qiK<<0JUs+_tf^6`UmLxb!_TH zi4N_O%(v7I6#PXrGA|N;%h8coICTu ziHZ>>ClcDCS_@Txu#pgWBR;kyjIR^;n-zjh#;7MYyE~m&M|@dV`=S|MPn2qg?VQ=b zd`s~t!H@Ri*N?!{6a%>dq@{R6q;W&LAPmJDQwdN!GUD8u{F=|U%7hv6hKO)V=`=mr zgtESIEie#%3Qj(a1(`1MYEwW!;bsuHUmjahxCj-1GPXIKGJ7E0Tx#D!*RDy~Qj}^^ zY*4pizMU<%7W_7T{I(HznqnxngS4EEMcPy21Yt-SFG{s}S|WS`q~&ybq;V6xAPjs* zDgjQHh-X?isQ$|o&KDh`m7OSioE9gd6e!vm0{6gUThp{iuftiXo)&kJs&~~@Yknq+ zQXL>0-zmtq@trF0-Td%r5pY^!%cn!y`0kFhrxJoN@!f+;Aikp_#*BZw{Ef+wuG61A zDeD^>B1evY)cB{sMgT$1UJ#zz8(WgI$kkvJF$z8L)!oFmk9e@J_CRx(6s4L&JMry@ ze9K{z!1wpVQxR}lV$7N$Er%^gd#Y6shQl zPiel5vR=NovssSLJch~M<+4h2Hkq@D<|6O=2J z&(xLc;J1qs9sCaF+vs-+KI_MKMc`?Q&CfyF=qsc>l^2AGet}9L`orS#5%_dNs-*=V zAS+1JYn`#^AgvZD_3axH?sROdt}QkV9I6A5jabiuz)N$mWvqGoMo3|Vn0|+c*d96N zNKFUonsi_f5~Vt@HZTVx-}2%K{189<&&J0`bVQjQR+L;c&aRw$wRNKOdX9}ka7$J zUU!2nN#Px6)n&m6oet-ueB3B6Csbc5I!??Sugz%2P7tL!W_BJrk@+^}Ckg&!KmL>m zJWa9rr$XA8pN2GEpf3m$^V6vWVm{ms1)kfc@Lf%{NP~ec((W0Q_40uy)4#{t`t)!( z69o|Yvmo#e9c&qSe&Q^&ID${_!-H=J#Mx5UIl3+#-g8B%4zCT*dC0c|;(UQ$;D=ur z0jDLl@*+q}&c#UM<@$m!(Y;iZYU{K__`e}7IhP@gm+K3{z^|YZActpC8`e4k=n$=3 zNf|i;u0k$&xEcbl(!sXd5kN1)NvLfETq|a-(`Gb9*NajeBs&6bV7?9Vje@_)kH0wr zPg89EEs!?Iw<3*K?F+&L`F1LSATMJ_fc_NqB6WZIN27O8>X@7UJf)dmH`aasKgdPQ z?}We$a|%U!9U=~KNx|hDK_vS zNK4AYNaL;gf-q5iRFrD-v_$x0kd~Ckk;Yr~1!3S%QVEd4p1)D8J)aKI%2Sk)J^yLs zf`w-w@Ln8jEeoM@KfMfRq1^LrJfD*)pVw7tK3))|Iv_TlFCyQ@^Cf}5?1#S+0jDLl zbOEG|=c`ELZhS$Qc)m_05YILENCQ41+sw=UJQS9evt$v!K_1SoHQscXUc5o6ADzcj z45oHD)hw-RN$oMIUA>9oAmA+syuk)r5)j8Bpaw9;1>4yZBi;Qgct`BMtL#o zB|8_r&wNYM2ZI05kN+qFPg4xg$B>q$Pmso&=>=hE`ix3|rs3r)U}hC6;u=f%pJ}>C zyPs3)qp`U%UvZu53lsnqUqaxy0BlJGkH(?J5qx?d9(+3~eI<2$t?Sa^{YI4P@Y?Wv zi+nqVz7zQOe)ta&a9Uz3e}uH;{Dd^#NiPT!-G!o5Tc;($e}S~*{E9T*NiPTk|D8&J zob^htnN2r1sk~#JlxR)2rHbu^(sET-wms7_r`EAV$LY-CVwx zluCLKi6xL>dqp3?_4VWWh2n6b0{a=r{*bm;3_u!h&=-WEbxBbw&EgF>*iZOCNZTux zLK<(-7leTirV{8CA=lTA3BA5XXJ}yvWqso~FkO0HbDbDI;2CSdXWsI$S($Y9=JC6A(x@34IN-<2)sZaTXX>D6i`a%Yp2vX)lxM~YFbv;q^TM%N@dLWt`2)c z_SqJ_oS>KYqgRMPs}+%9iC#%?EBkS)gyP~ZO)!r2%(qOh3dK_~ff%Y*6Q$DYxJy&S zuMTOMjw6lB5rQ!AHL3K(^x2_I(-~SAL8+%nx^$ciEeNM^KHOK34XL6zkURsrr4YfAZ@%iL>i0xf-nKwSd?n> zv_$wOkT%|%B8>+H1YzJ~s089YC@xod+*sy@!XM0Af78=-MB@iTQkjgkE8B^4f(Egx;13IF+8;NlBRc} ztd}p*PApYvI(1A}sV1TfqP#N%mg=!(l=0Fg`u1*%&o+-$%L{1glZhqXfP#nG}i~WR8hqOfQjx<*A1!0)jLzGIh zahH||-xJaj$rny|YA-<;_})|kMD}t}nRs7%KJyaYriyo5(HUCUhf+^O=4BRG7}g_V zmrQ4Iw%Qj3KvojMQ~P1diRcC}LVtu2|N8)&N;^Z|YPEkU)At$CRB316eK^gs+qubd z)&d<%=h(u&<}58rtwcgZ#LILveAJ zCfG6$(uV#Jq&;=0AWZBI6Q$B@+@&SL=R(@hAC5F`_ZNhLA3>$3(BBmrdOAZ3M^Xm9 zV1z%+G2hABu6s<4nHSHfc_<7f=0kYuC~V2ZLtuiwEdmn{TPBW{nvT&mX(o;pr7|S& z^f+W#CXN@}34Yv(p}4q96Kv>7%(qmW3l;VOv0R>f;_#^a+zkv> z-Y=uB1`@no1L3J_u?25`qaF~=Ky**^bz6-+9vmbv;1fHfC zm|Gz&(YGP(soMo%n7TuhYV)*2_nvaJ>sSb#Z=flXi@q9$!kNV+{MZjr^ z?Ry;3#`6iJJ@up@Ogx{W5{PH%nGOyd4wTN)l+*3~6yaf}$8_Uq%D^)n94;Il1aW%PZ|baacx&|p(*CFOZB@`5&^NqJF}Xi{E6z9r>lfxqI1FNlEC z5~J}dq$TAwq&@YzAPgyQPzjJyUUds$MZdtfOiuNxTR1m#oZh@i8C-P>39q(N=19E- z7$|xh!c*^HON#ufZZ%W_rr7>knR-`jy{BzyrrsANnyC+vZ<+c~;2-(nA4kAxiLv$5kI@&jE=xQ&{z)hXCGDXMf%@>sVt|YrY zYJlZ2kwnmgzvpKH#SP?G` z;f7nRMEWMaT6v<&^y61b{ZzF-z~jxMpM|Wfbe3m6^&0@-=XVIaI0swuvt|W9k#O+B z*4E0)pJL@NZAJ6a3*W;T=|uCg81gMIizDr+-hwcJT_OTbON>V!!p-~T`wG0DAKsrz zfR{!1c0>5wMki@`0A=^zZm2^M#C}N#PYuMDvG4xd4QxYC(e8eUhPhR5^mxXepD!i8 z4AQ=6h6amL$q-sN1R3^pZK&Xu_T!cb#bIR}`x&5N%(v7o3&m5z1!AaOPLxW!ahIlu zUmns@y8_aq6R)uZOg!8U$hBqo@QzKEeNAsJ5@TV+u?)6jBOr@@~*?d8(cR z!)arK=;dh2`o{6WKS;hyI)N)Xf$KRjOpvLVwjR^g)%vIo1aAO=*Zg41QTqQ>Il2ks z7~W0FC-LPKqtMa2z;>vO#K(=bkGex`BFY;{=gp+^R?>Mp>Aa&CT{lIB?Ma&nZj2wd zc_=RK(gcIN1@moJ+7b%Z@&#i0!q%cx+Ksz3Mf^69wkvImw5PTcgn^Hx66i|hFAFR{ z6WA7A`P-FW7N9eB z4yBzTtF1dqrVam2&^$E}Thyq-zq2UOVVJ~xOT#XL-_?(w9D%1PHgXE{Ee%tlcxpF+ z82i&iskTp3#7~E`H0+Kv*3JcC;CoOB&`{&sU`i|FJ&;A0>BpXwi}E%Yen$@^?gfFn z-Ld7U1Z1(+E8MTrjQe$2OYHVJ-zKRy+K zrzwV^8Pc-Zf;3j+1!3q&i&AZ#mI!Zyv~12m+Eb1o3_L?6z-Gk~My;&THQIA2^|Pvh zFSTuAzO_%?9S5Rx^(b_THgd>7dVazJ#t{gr{j-G&-NC)wj`x?Jg8xVYo+FRF>``8qp3MjlxS*BLcXQuWPzXJho2e&rzJ+@ zG)PO$Kas{22|*ZY&Y%*YCgP5}TA84Ww0kCHcX!;Kg#rltzaVhQ0$T>YyF2daeNS=5 z$yo3MBj*T+=V-w(a;}&?Pn*?5oG(f>5%$1-0rM>r7YhC&KmOtfJWVkomq1!3E=Af? z{}zN{;xZ}$CQ7TXfom3cM#qj0c@VT#V(2m5xSTSu`Wm=Wk;d7!|9Lib1 zAZ*E#Z}qiXG=>M88cv%%NxNFAzD8HAxwux8YA$RnuVcPF@LVtW8~peiBk(lEAlw9L zsk|9!Pu(I2!^N$lRGX(I!f%7LRNjuXr|uAhf&Yg}fJ%7+v{t6*5Ut!v8Fo41E@Xg` zyCLu{A8biU*yRZN79M;4e+iC=d!@GfbZwf2`$ee^gN@w;SWc^X^HK7 z1ky(FQKUWfm>^6PAE#0k#SLqXA|0ZYCn#$?LO+SJ2<%f3csCEW3~Y@@Xtto%SU)2M zp4A3)te+DlI@Zr4-^Tg{fxqa7zZ3zdB}U<8NE_={koMF9L6}&-N~J2+8`T8`&8>-p?5U-GiAhkpB5qyT>Juo zkH=z5E+XFhM0fvAuz3j31UMhtL-B87@ON!c2mTLHDpw%k|DVXPhv2^i*K2?{s&R{n zQi+SZG{NRC&V0*QZz!Hx!jJD0fu||r`y$^m)=%L5{qO-)0*r+$Hh&zt*i2_=p^mb? zaX7}(PT5%;G^*Gs*Qw3j%4$iJ08IlSJhc?Ipvn0P1Aq=`PNKdEFi0?iHAY8lh$z(& zvn?LVd>iql1;30RKP&=IQ*6(&kT&4Mk;a!`1!4O5@}g9mrzOHyfV2T$5ou4YBnSgv znMxqw6-yb_i^k#Mr)#vg3T4>oPdzda^;IEohdZ_$9AT$F^fH_U_Wj@&09KRQR@b#@ zKH{QO2gJs64dmN+t|{;le)w7ua9U#fMnc+nu8lOlH+v-$r<2fp6l6ZyEuoCAM`lNE_iXNPB8?L6`_{K_w93A#oE`yv?tW$##a^2Oi#M z=^QO?NvXf%nCQZ1igEef)TFjT79zVf1U}k|EhEdXl~xo)ROxF^QRU&Yn-2nfZD;gt z#ol(>o{suhQ7R9m@O~UJ?EErba1;Ev?L%=`q{n_Xeh21Tx^{%(shtF3;yqE6O1p8F zrikAe($X~vX;1AU2m{}hN`S8N1&FV^zW_mJXkjvCeIvHLCg6Fs<}B_WR#TvYn5ht0 zs>ha-_|Kq$K4=lAxsp0&DKra=i4618;0tIB(^Dz2%di z^4d^&pR>?1oEGzK+Pr3XhA6)$oj;P!pGoJhq}yw;UcK}sJO_D}-Hbq8KXhgkH15(6 z1JuqUmf;R4p6V2op(ra#i1oNjgRG(p(vqA*+EYqEriMI~0Li@^)MwjKVsxQyV8s&@ zbcsd^l==mX^3cBim(iTf%BQVjiRt5b!epM=l|#&w>8c12I6VNuQ?sxIr*0oa53JEs zVa$l*7t#`T zIMTTNUO>i)BSZ;xg7#R$k&u?Kc}QdVTtKFVqo@Q38x)`AqzVmlvPImOlx|%F`sg4{ z9!;rFuJ%M#F;o>}Rq7aIfTCj|upW*rhaFF@0>!`=9o3_(M3So+!8r0?B|2UT+8Cc8 z6`!ap)-;_YN@#>^j88@p8{<=?hEx4DoEBXJ?XkiCgtRd}9cfRUAs`duGpPh(JUrf- zoz>Z%O||OfS0~*vGhggjgjmy2nm&tCuZm1CRq91kQ>FSB3LxfZL*Q-q*fQo^3J)!g z*s}qVv3G+3KUZo!PuHpge!eK(2K)jPu>rqOYPiT>!^P1x&>mZT38W49rATABTRd~LlpqB`XCwnJV+)s@ZQWmMTtea4$_ZfI4R1JaAY0ez=8ms9F5zR86l)gg0| zSc!?1SXTeH)pzNt zb^PxZrQ7)5gCaKm_eu@-`D?g8x(3=~`yYU`@qZ9$Pdy|c6aR;)1mYiy&q`$q4Q*K^ zQE$t1;yrn|pQ0_JI^^VO5lEoRbm9?8{n3j(QF#oNOX#I?{q_=5xq1{u!Ng+__;M_^ zWP%^P=m7{i*u0+TzzJFK8r~BE;(3~$*?69&_qly>?qE*&>??Uli+Ebqh z!bI*{?N!@l=^Nr-(#)1>&VF(A9=yIfMYlX>`19Osu!NX1lfy0;5{zb zatN)ehY-EgyjHIMa_XwQ)!U8vXz4BWEurhvy!N5uu7N^HcTL%jknLKs9m%acv)>ox zEKB{Qn*RQ32Gmkb+@%8yNFAglZAqkYJ3K3}f323H(vwqI2S+j1HVD#kI2dVsj+PbJ z+J;gIa%lgC>gY%-UEOYfBqRnE|4`{IZ7xlz=RZ9FV_AHvpr%|qrq`wnzJ9B9{}cViW_J|owa2L8VsSZbQPaD;D3#sc zKWsPkRj`6ou%f?$l_DxoDbuajMov1}I(! z!c*&FONzJA6w@1_%B>uqmZ$Xu)}UdUr%|FrH+MAiZMfGL{04sfh7ow0VoNq+z76-r zP&~DXKuo+g6{XrfO%cBtqz(5Nq_Nm72m{}ON+8_by=h*b)tfnQ5on>`bY@G+o?bQ| zBy1}{K-kt0SRcn0gf*^(qi6W-!~9zir~pHk&F-GpZKd|@bnTkgv7$uBbsX|7t>Xng z!4Ka)0!~Ye#14>_)g6(>nz$egEfYnlwoXfg?+j^KorE;j#06pCyHW|T+S5h1=pjY# zXmT=T*mbul$N)oAA+S)6Eg1^C?nXz$c?diH@eC(;EpD1vn652omUb7VI!<={z zyobQ|^uzhSgs^AYXo+p!3(|&pZ=|uTE(jCmeW?V(-1D8pi!f^FFuh1p)_AMZekcnv znjk#2Kei+z7CBt_IHUO#NZe%$d*a7-`IH!F)&?{eEuuto(aL;FMq2P~e*BCGJWVkS z4x}X`gS4kyK^QV-QVEa|am(r=FhDP9x}CDS8<;v!0AcTh@KhFChP}JHR@s2?SleSw zm(-Qhb?FEzQK}pV>%zYK|aGfDaU<+Bz)}eh{SP z=U}99GrJ%R{17SueyZ=4Sp;h6Agvxs8F9PJVaNk3b0P3bc5KN?#O*TlIGm8~Cnru* z(HC6ZZG9(c{}4Zp(0*t}j}&E}q_c0*NhY2Bl1`I8YoEsq%jJ9l9_0rf9SV%Qw85|( z!+cBTu~4vTFA&4V@uE~3j=MBP{0Wej%oCCJ)JcLc@RO+o$ShrSl_s+#XpgSHsq(=u z`a>h9Q0haZK(JT0mtSR}uS3VKL1Ncn&dy4Il-L8ir-L5TjY}y5uXECi;eKjjrh4^n z6b40?LE!c5*m7*G<~z{vOw4$uSuH`Ypq;qOmWC6_5tl5HyRW1;&h$RZ)0JZSDs5WR ze6=XmfwrUK8suA^t`+!oe)#nfa9U!3Zh*8r-H5cOZW4sy>1HYcp32X&*xPd~SIsIr z6R&z$bh79+eYu4)_(%({wfdv3ZIr@(D-dApHVC|M2U{}cf25@c{2jCyciHfsXd_vg zHg_lA1o$5@eWy098M{lA%7Y5pcQ-OD)AtDOUO(=>P+Z)l35Mr>=3A;CfP!zv3dC^r zkSLXQ<1S4R|1hMb`Vpi(^{5~W{4pv4szX+n*!0kUsq}|N9;ejDu8FPb&O)Xzr}Rhl z3FLvTCm}rb6tJ@>QkS!3U+CEJY|0<-7_-jbxg*SpQ@HeOgB0jt{3Hon8ss5C-biq&_ z=p{|RNvTioLjP5&w@?6NybXc(*kH?{!_&La;$Vmk=$@f>rLOmMU7DfyMTw5k2h6t& zeJJ>k{P>R}@HE9{egbI;`V?urs74Sb!k>#$ZJw40{{qqy^d-`GA-W(8{3|K}f_nVV z896}c9Zh~s8TOy^8)SfxZy`MO9kwJS>^~}T4zK0z0~%Du1!<&qbSueu_65l z`8K3K3w)s;{!0X$me{^uA#F&1L)ufn3&Mo-4=RC>{+<7qkx{0@^x{v-8vkGZg|Y~I zuO;d1V%Re9HU7V33v110XFIbx3<^ zNkJGc22u%dv10if1UTy2?{Df0t(EUEjh=((Da|iMsb67I`nCWM=H^x@ee>HO6hia| zLtv>KTSk8c%tMh7%tdTWPhk)H7h{LTP_eeOwx+3AMwDtQ?6F`N^DP(43VygBzgz^K zrWlOnAuSgxAdNT12*Pl&5|scKc==iRb6Do2szD!7~0B)F$az#u~q&Y(Ts z$Hc;F+Jfe2by2E0vN4V`-*UW$;MeryM?~OhiXmAG(o#GUX}qCE5Qd|5M5#7UON6fr zX(?V0X}qCE5C%SqN`PW{Ral7kvzD3mC$@9fYUGV*B^T0Grkm3Ej@2oD@+~nt z2z*CBe5VLFEiqmbAuTaGBaOGa3&Iey3zYydtLsUOe-*n_mY>DS^CfdCFH@Mxwx<_m z>Y~SVV^_-h#?|et!+&|U`t|sdIhB_y*;2onjM89h3WTSoVoSDa!(yUhGkYS*PC2`Y ziD}w|CSOy%?mxI8K z^w@$rcQ5__oKA*QWslc+ffY1NN53dabQBIiz9nInz-Rm6b0Xlh#P%HsX*oCuX-^$2 z2opq4lxpj=MED_)mV-l)_S9j5Fz~rl0vrsE}TtbXTD|Z1Sp<5Q6MJdCy7#NH}29D@h3xC z#!f-nQ>O~Tz)zzRU@Tf@z=6Os zAUt&@wj4dpdi2oQaLVlHIZI&w(lE`!*`h>8;~eH&HqI6Nd4Bx)5qO$nLoa}|WL$`} zr!EqNiRQ(kRGX(I!Y_feWL%0g?s^x5fnP=?K*qA=a{>Oj)cro>@E^$#ouuWYRN zdV$~Ihu;_hrzN)bCP*9Sn~}yn>w++GzLiQK&P&IOd7g0ny&%&=n!Sy(zHummoM3gb z3~wWRJ2DaBJ0Ng}I<|~(XihQkisK-6?kO61zi^&WNNl zI_Zo_I%AX0&Piur(rHUN*`zZ&>C8qxrnsL5iYf2zH`sWsb@ zS9gnF_h`R%9Q*RgC*StTHCH<$bn=z0<~gHv^3zp%Ib%$L(QVFHo&3Dd_s-5po^sf7 zzpg#m8OY?^`ZWf$J8inar(f;qWOZ`EdVe~zb@I)H-#Bx1@}u|9aE{T*&pS_aPBqC} z|LdHslV9w9y>khYryQET<$=4MoAlmSx1ZtMrIYVH^P2OpPJXcC!Ok-}x!{b+&H^M) zIb^~U8$RoNtoMHLaLW1G?7eOqXCae^UVi841&OC<>08`GC9WFra^ZW4uh!leHb~+u zB~N{E>4PNRrsSmKB<@;!Z|ZP~KT9Gax7;f{=)89hJ6QP8+Je8<5ni=yy zjt6f)ZQ7J+2T$LAkL{;zzxL>T)^FH2x$oNQQ6MJunm0{7MreP!)>gz9!5)V?x!9cO zjZ;f!@x(yY)>4k=$~K;bY_>f=Dw8g>Nj#lGNBd~?1Zx`3FUB@ujWDhFV0u%!Glh?q zwH}oijJNU@(z6TVbgHFrRANx36K^g@iI!|D!jc$JEVMO@X~<`0s3%cXF|j0KisGGw zsi&~ZOAL_@(l!;ch(mKR)849{=6>}Iwjl)Jv!{d{Tn z3*5b<+5KW^_e8f5_b%nB5o0#37ly-m0-Rqg% zpOtoh&fS}v-CvY;f63kB%sUvu1w3!rp%1aEOsx+3i~C|sRtsJ7|>K2 Lvr9q8m>uxHTAdM8#d+(L>-g`(R_5XWscTd-BixTqX|9#T!?#!Fl=gpgT&AfcU z$@`vNa?=&3V7dwZESnWCq2``+t(q68qx$vkicvPb>8k0f`GM-_&n%oXXO8RmlsC0J zTB**_%qkSw71uLLCBw6wipC%0=lR`L3q~^=0FW=42BAsCGwg~YWs>GuMnwyel6)bLe_<&nXNT8W<^yqT;W$O z8uj&~T|eh~wg>Gxm2APBa8*yBdiCC_L9UrCo31Nl7LThXdT-t*g4(m8TGi2`dZJ+F z9TH`#rK9>%!}pvC$MGtTXJ&sla$yb#Wsm_EH+6wZVEO59oQt*V3So=LSHv4 zi>$U5>Wf2rq-yq9V=dCRh75!(AAw%VaD`K~*4Mk>8l?g>td1L3$M-jTJ=_mokx(bV z=e0nc2%jfoDzZf~a}wMjoz}9m;eAN&gn?m7)o0DqJ0l$HGGo9oU^!)TpycKUL;&I6 zaR;j86ydfh^gVYVY%nkzQfYEMwO(J~8I$Y;YJ=Vx3ZfpOCk)RcJLh|F*R53^JO^kt>-R0)5#p zd3F^#bE+nXD-P$=u4k6rw6@1W3$wzYcpfl$s6oAXz(!=mONd@Gs@0O6mr&;>>Y_Tmch`he7qjk1+v&cOorHCNi8cJcFaD)4 z{=))w85^Hfv0IF9anBnI)E*Q|&x<_MlD?!js6}0FtueSGJ=|JouyZbq6_n|>xHDW4 zs7J7?@JM+<(@1$GNREYGZ;88K)qp#4_Zr4=sJtDTM?#8hp!Tv9jPi<53U*W@P&uZ4 zE2!^*cT~wP^I***kyb^@0cS0F%7Wuk7ACWDX-@8#ZLXk=6-;q?<*i?bvBfVb8<#soR#A(gLF zjQC=qonm@oRhv-E|Codmu-RmwEVda-if z!a68b;+|XX*E_>PRmseS=~IaM9Q(sTAdI3*V(mH2QIyGLkr9>?stTGaP{ck|1tQDy zs_xJLM%xK*3YJU5o)y=3@j{aW1!t;Ka*RUS^2()iqv82%9=z9YJwMMQfehXFsFJzg zHm5d3Ny^z$S)XiTm_z_gKr_W?Sm>^?rCb)$YvU55u}r?j-oHOkQ_Q*Z;B&4HfOQr1 zZE@l0HvEn(;ZXXhW&_m5_Jn#g#JD<80sF}T7W*-T$7$UJa+lfZkn`M?GHLJal$3(Gvo79h+znCfXk6@}+4EbQlwD9-@qrmh+K< zy3KLIp&|9e<}mT3b~;`fJHz1Sll?2OCNlC zzjf%ocWlhkGx{y=VmAcpnXHAitOZDY$=JqC+F0Jkt36@owJ0v1rk(}rPmR1vdcm{X zNL=d$&k+^h7^vqm=iK&&dXIcwo3g4Yng2gY;$ZI)5nH4YMZyF!8(4oY|{4lWu#?Ordd$8HVg8) zHq6undA$g7TcB=d(%klzdO_aMrtQdb7UYc(WLEsV38K9@P;ZIx-_{`79f5i)i^fY1 zp;+Qp$WbwLBQbDIZSxlOwq}{$-iEK5Oz#kx?hMpBnI^Zrqh6+WwP`!Df@OL)WI8+} z?}0Gy4b=N$#CJ9b^Zr16fQ8{Dl?%6(i2bpwmT~zT?G&^o4$$B1hn9HIxVNIJZ$XjY4%By8SN8=0_`C}$=LF!pf%+b! zSqVN4r9#dPzF*4?GA96(#rK?{L$+wm9`0hl_yHt793}NbNcN*Z{TM7sBKlpph_%7O z*p8M%Abj7=seS_7KMmB+Sls)Es!o4D57aLh;b!o5uN_AHl2!Ywnrf|Iwn@80aleN6 z_l?AFAoXtp^}AT3Kd;v)C-7+i{60{BU@7D~ln#B8yCu(8?+(--#Id004_i{gOhg_YuSF>w}=j*^PH6)u{O5^EI;N*(;#EwUyf zS*cSRV0umq@D@;)d?#i3TyMX8UN=G3E*YDd8aGUgshf%Q6`9{U?NCDS*D)9=sK(Gj zZZLfR=`RAF>#n69JOb(!s>x!+6pI?F6muh5EFeolkjzzV?J$`0e0(Do%QtG_M#8KF z-vot}N?79JC8+wPa;yxXc!-V$p+?1U@TH|fzg02oVoMz(0O4R;#~>YxatOK%kARj7 zP?!wV0f8P%*}9r%maCTG+HQhYpdQLtDQH$jXgZ(_(ExL}S_+#v3^5~G(i+smaz~*J zltydu3BHcQBcS7@tpv#;laOAmcg5uC1Sv!7i_rQ3RksGrVBVb06!0e|>;u$~ zFMV#h7KX8NfEgw#PU4C=yv~jF_bx`pyKl6Si#xG`o3rzDGCp{nZbR&0n@}LLFiPPq zptO7^GoOG>F1KAyUf|PMxY!r^@+MhZbnKImd=!&-=12n~XR~7u#+fD!GCW6$&3FlDi-0FHAOC-(7I+`q zJkp8;q^%-mi&o$+=1h{ zNi2Nv;s~85kmrYxne}j|9W%pcj%;(HaS(MatgNOnQ*7zQ7YL3Pf35Z6?WmVte4&sW zj!5zz|7=Lo4sPF9WQOaz$wLKC3)zvA*b+M#cv#L6%!4(PvhK3S}b(-rJoM?wF@0GNIVV0dr zillKn&5jC*77=Tjy+rCcKwc^=JuG6WZ+0v}sVqvpQZEw>EfhyiW~GiX@NgzME9|rf z&`_z4M?jYg-sCLXf-x3Il-@k5m#`~9Mk$*sVR=454+k9N&j^((A}Ys&!^3O4L3F*R z0VzEKXt?iR$>{X%1Le|?i(LYfu0ny{g^}Jh30q9#4A&eD21in?t4DI(aOTLIP!^ET z(_TCRGVmMsT$V{x!1F8avN-|Chaj2LAmkVyzLD`g+Ky$$?7SJdo9yMXr-5UEtZiwu zbmD?wZ83b!)l8{pSDO$nCL=CZAC?QKnVGKlFiRS?5E>a^t=SA5t;!urG%5lJ3fqTA zKqWyJttcL<3D{t+MVZCOW6ILJ5;bQr;4z0#Sc4eF*gYI>TV$Uo9>NngvrJV0K&Hb} zAO$E0MR)|{;y3mJ<}>yJI0E|uPe(lg^k)ETb77f|?w5)>Ez=ZAthF*7J;1MvWIDPn zPC=)o0Z&ICg|~nnE#FBwMiov+XEh1qV^lk_u}fDojlLqY8Cjp_=oARrI=-S=XpN7@ zaD(CdO!l#84mDnbM?lvKv1Bpgg#{B$%3$<30eO4~k}1Ldb<;NTD;3V1XD2f@p(P2I z9qrJE>L;T(7BO?4E}o1&0fZa%Be~yo!cVJyPL1vKL~b|y;Pd+=(1l_T;t|mG!ez1; z3Bjri`&Kl=da^)0C4`b0){Gw%H=vkZ;i+6*Y@SFJ>nBh}o;DTZ>Czdo4xT26IU+tC zZvj0+zLOanMjVzCD-sgPtU8!GIXG*8*-&g!o(zQx1#DorD;MnDOE{jlcP}QuCUNlW z!|aK&SR*f#%&bw6(L6f&n95<^p6B73#f+R=rZYDPA1%hK#n5L;J;%^z;VqzN%Xcy} z{6O&yo>(LG;r2N~qlKrDGdMKeD3!yRQ|~ha^jx5TUpx5|4ZOFcLlax109pYxeUyOS6qWNgXhNqX{8&bR!kAPk#jl(4q zCIi>z(`*q3bh8wpbthVf4nr?T8QQ-BkAPl@Uta5&sjo?e=pBzguM*f-N3bUX*AacL z!MwF$=rxSuu*1-qEb=V?1Jko2M6U%fC!}`Q_7VNW(;D|Zx=KuxCK95I0Utr9UKQObgKZH4LoYsC(V81j28z0G)gOBuO zsi@O7eFY`fa!G5y%CDW0*6xT?g|A5iPHXSNTR>lz?{JxZEW8G>9f$4d8{D?9$mApI zO1k<@0k5MMrK>gk-{J=0)<8YFZ=)EJe+Q3%zAH$Q#fSzoBEm}=`aJ>peh8A8#4xZ2 z`AEazqwrX{T-V^uXQUsvZh@SW6PIY(7oUaPoIX9hS@WyNH%+6AXa|E$1Joi?oeGXeQ|2qKwh zok{sn6#YW#4t*|acP!^G0Vvb%UkT1%hd5=WEM7XFv^~qurSnd??p6SfAV%i~i_A^r zPLd%0MsT#~wicRx%kUhTeutNUelOrjS;d+SN%{k~?<+FH^)c#h!P7!^WH)!^KQb_{ zx&8?+0sUEElSM%Vb^V3EYwMp<+Pvb?S7de>*I)S=uDZ>N-+KTLyZ#N2fc}o(I6yEj zFlxA?k7c*;FA5bLMD&Fo&hxr_bl4>N2f#=5p4t@~Y{j_rPr>>x{OVmOkV_HtZz-HJ z4~0wI>2l5~W#d*Z%|-Dz&Ev|W8?NjKzN4geKGz=G)Rb>RxYQv4oea>Ox4rO8JS~vY zF8s1%>5JmqLfFkQsT;+(A5@d2cD0BS(rh7qn-{>s31$qLphbXz`Filcek*=MCBk-# z^`iTX54M+@_MNA-EVapSP;?`MXAUTtZ9G)@Pd@jTiCBrFaSG z7{STOF$f$hAI*-{S7cte?J|B2XLcj1?c`lB*}=jh4KD0x$=O_!Npjf2o+ct$eAOgP z%YhYMvjUHRR^m7I8s;$cnv3P3_crQ^R)qlU4^;=Z)`(W4WK{363*ogaT7z$BqNm>c zF0DoBI30&yy(hM8X!GMy7SIV?v&60xY~p({p@c4J((FX8>~h2FaxNwDS$A^lH>qmB4Jh%0Yq zb>^avOD7BRUJNjHHH*N<2V`B^B&9u`!z5!KQ;e_!^)yXse(x#a2)>V-b7+V$cYw?0 znH3u3m+k_#Cb3FcuF__FvjAeGtoSZ%LD>kp4@BjIRMNR(H;v0NmT7u)2FkD3k8^yl>U)R6Kg5VSnYFw}XYxl6Uy;HdarOX5 zGCB)ouhix)8J4!twn!l3PfQfv%P(c<7 zUUg0ElVq{%PCKP|3DO}4j?DKGsbZ8|+9l;nS$nvuDVMb(t?U+@(M3w^`&ahShyeF; zf2f5KmoAdh#Z4BYi&3n1_})b7bQ zHKm8+3-|FB^R-x9JLCR{eF~2Ygy#jj?x_y{RoY0q*h;e`ux{{W!f0UBp8jH);>e;{kwlU51; z9zBwa=a-zyBxU(^ZKL{{`ruxG6s2$UatzMS=*!^7^XvlU_@x(}q2BI!6ke~d3Hv?L zUWrT4t7m1StC3Uy2zpUu5a}H*nJ66BmrGZ{I;}}^yb36?T`ktA*A!MGwAF&ImJ);!4jdUrgGxa0s78x#1I%nr9p VN#P?P!mqV@oLqilaTLkz{{hj$BEkRw literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/gs_creating_bootable_usb.doctree b/source/_build/doctrees/gs_creating_bootable_usb.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f69ef0e82ad6713e7a88f4ac049df6d4426ebb02 GIT binary patch literal 15401 zcmdU02Y4LSwRTfmTXF$|ZEQS%k=Mp6*^X!e48~v(#xlX4uq07dv%4eRk#~3Yo|&~I zl1V}m5<9*3-h1!8C!}}M6ViL{jrX5(XI8r^wv(sth4+2??abVJ?&Y%se9g`+_(A(cxA<+xGj(QFs$6PW_5%0hG3fx@T4FZ4$dgYK_Wp@>7M6gIM@M~0X^(ljPs^}JcGSZ$pXs>c= zp+5o{D}LzaAR2{w^}dC68{5q*2Kux}pPp8&_UeR}42+hk8*Pnhv(vE(GY~l=Cd-J) zGJZvhAW+7bY^`dy&k=)V>gcA-m4Uf3#$4-EhrN-Fm4UGYi5M%>WUMn(%HERbFXLnq z4Q7~N=x1V6NpqNLy;^Fo6GKUf5MnUqnsvTGEwek>Oc|IdBW5~Nb=qr2gG`-BBMH4x zb=h5s96?4*WYz5Ug7Qj5s9m2mq|Z)I?pziDjn7yaR z%FX2({dOxX4V&uCYLVRraiz(fSH^6#DeGj#8 z-#ydhURZKd`bsdpC(>7eX^Ap>W{EQP!7HannF9y))e!MQ77^UHp!1hpy_b2vripj( zT<4V;xpunx4!IL>yn%m{_;t74s`o|uda$jSkv+A%Gt)G1N@tXus!HkokaIB72UyOR z!Y!|bF*XO5^2b>;=}RsmD~l>&0ihDH(W`i&=fJlla>8c|2xT0rQ~j`K|1dl@?$8L# zxk8C@PLNZ65DxcPyGx-<6$G^-ZfSCxgxP|F@xl#4#+Ev8(8^C*bv#t7R1zddJPK=0 zX}G6B#T|8F^bM@$d(NijR(1(i^NndWkiB9afMR7wogL)oSk(7JA4N~KmjVlVW63Lc;jy>_ zBe1lh7*Ry$jz7E(b3bWi<2lp&h*#lwl+t;qr4Z>Nd;QHUmm52Q9!c9vSao_--7nh) z0l-&=zm;oZi1fqF>L$kT!8eX8q#lFO4@bHLLK4af=w9gNt%ea@mfi*|JU2R7PuCS7 z^&?$nqy9S$jmIeV2_0$T<~$(PePXtrqk}1jP~rmNOczl1J*tMXrx|n4f@L;a*N$sz zl~Yq@JfhfM3)X1JS2P`WdW>S3niJWkkW;xNvwIj~iu7S6r+y0&92}17F`T28tWq zvRlr(Jpad#!&CHRpz%j6nHwT7rixDJ@K9yOsDfXvLR5?_R?+1bGeTi18e$q2SZK+J zWGK6Y$vLHQXENAk!Oc^{!^Pt8ur=<5$|_*4joAy2G*5`*XGdKg{Y+NRvu3f^V4{s@ zD;`;&6Y1yve-!!Yv0uuF`n*}>gxS#zpUr+xuE^o5ar5v$?&piuR5X3kYg za3FF@Dg9#T^CgjfDI;nJ&BRgI6fc{}B9JkQF9(N90L@ONUjbfT8R=I6g@o^ynDE^e z)6lO*=O4%h0RJy|pMDLvdu^m&#{&MBcrYeVtm@ZC`VGuUtEieg1}plFb1M2x(A*-x z7K{4L5acb9eruxU*PHNbw98B7<}Rk+2Kcu}`W;MeX0_o7aTya?#c|}Fk$xA0{u!8d zTYGp1;d3-vGOh=P7S*m3Ul55)bL4dN?4bk z6xgoeTqqR z6uo<b!pzk@l_RF8u+HI(z0v3jIO&-iIRn zVb;t%;e;gbof*e?4lL{3l>P{u_@j~j7}LA~a?G~}a!36*CceCw#wHHWvuot(+y9L% zxKGR&=^+#=|C7-D$?xQS3fld2q(1{mCE$M41YBNL7-i_sqEqwk%I6~edDaI{fKS{D zq?_-uQ*}H={e^uCS@CMCI*;Z5BIYheZpE_bFR677&-l&u0VZr;R_&Ou@x}#0%k+gs zzT_7U=X4GGY$^Q}uy;qKziNa4?yt>sO?F;r=j+oEAqu4QH-O-qk^UCTcTdPS?*T!7 zn??T4Y;4`ZY<*V(z@3r)9#~M{hMvCJ*wwy2vti%9)41UexT~!{0n7S_u=0;0{bQEz zM8KeZCrr*=;3tv(DL3ikF7O}3L6-Svv767b1FLSACGv^Fw*L7nu6`#A{|m@I%f{|6 zA?>ds{cEr;KK&Cjx+RYMn@Inbr8?)N9C?>AetT!)x4)b6TV_oEURlk4`v=t(`z_c@ z7BYW~^q-h$vXFs_dBDWdbTK?o|Jl4RZE$P-7XbkjezM~EYoz~{$kepr`FoRl=zpj+ zvf}xtYLykwx@5}xFSFvgE20J9gW2KpgR5pcKcIzxfGhkpc0*qO&?0Hou)h~Cff53= zm>Ufo2kR05+;%Iq;1N-)pz9usN!C9osOn5SBHAbvy2oM$SOn1)4+vxl$XNy?dk5Uy4zQ%g5`2?Y3i74HSPXmE3wBG@ zks40XeE2Kx3u6H-{UuX!v4@L=_7M;JzgSLBZ4;+z0XAx}3g;GqRjXQLKoGLa1CeY_( zz0Yg~-Yu9{n>Bu2`~CgRs^>*5oh?$&RQ;yJ?&k==fUJLvT4)oBpxJZrh^SlY&HBjH zg9>XD;S}p9+AL7%7-}h$+n`qFV2e~u=fL2=@IzZs58LymWo!;Q4@F>L8y*p5q`izm zV@yn9yfTX{o>k7b>8Qt0?-lCX4Rx8n&NroIMeY!KJ7aog+$^-FJA2>0Oro%RbGrdK%bzD+=srLRW!x8!h=zoL?)fADF^UM?^)&W0p^2OkWsECUCBR zj7)(vPvAzSqQNetP@*=-1kU5vr80rrnQ$^D4R``~7;h1kd<&ZM1r$>EGEfpPI-PHAfW-t-VXarM=R$Q zJo_2(OC^7tXK*+MDZ?o-gDUdrv2>5&;mna?OuVXmuEA$6yd9bM1J2wkx~ViF*Qkt? zu%cV!SZoeXWI4$m z6i@ta5w!P@(VFdZ);y1(50KL7;+f_==ZjDe=iz(?d|S-$0JOTvnz#ka4l8ryWLN0c z1FT{ZYmm#5LEp*;m-X#$3MKV``fw(7+< z{KQXs664!E#w<04<|hk^1|H(jT&MXIZZL3CB%TUTDCTK+MD%n)+&vc4WrnBX^D_kG znFb_VfX{H?v)l=XPom@X@9?nM-`Tn2;_Wl`fe@7CG}}Z;$J%khHCHyQq$NocbqLzY ziW#TUjnYfxe3o!9Q~JvijXzre2C}Ej<Yr^$_{FctrF(0q&j)81z~0IO08Dn!F%x z!l}C_ke5T@3k7^SzXmUd!WW?)#ySJoj-xwzF~Gp}OYn&3rGnGMNM@=rMy7%2Wc5rh zGgx0PSYKhVnxl!6v{bW#UMYB972~NdtKxOxtEGHyO}qy6&_uk1EzoQ64Uu1mM?|le z#ztf&(#i0C){%tFTe6uk+6=$>zu#&3xm4{_rjbIjV` zZ*dYbayU%hb|8tWW=l+RmU98}2i;0f6=@olW%WBHZ?w{H6_APHQd|<^yP*kAHXA(K zZV_JSt)R|6^ET$fZV^1PF=J5Ki*dXqiIOMH551jHHtd4hDa>Gs9v7d&#^E z^Sl%1WHu??EPp;AtW0;xzI|6E;pBq?Fp%9hzr50ifEU{OFdh+oM2K|HHxbCo3Wx5I zJVzfDQXh*+S&*lmLN`ZRC4C&gF_L%$;#@kqopH>_s5I$x$4xApC8Lf$!8DGSK$#@f zUB%(@lMJ1QG@rstM4x6(RQH%L3eG+w-(pVsth|qoF@eTRJNg_7nv(6tST&6O^ZYzP zawL5LK(O2w@rdY4_)jJi%#w*q(=+hs%L4or16&VH#yAK~@sB4Z_R^4?N&tT@yF_=O z#h~3;zYKw+-hjR;$i9YuyB!6R!A@V7!f$ZlieR#w_e;5?RY2cF@eqBBD_1sMt`L0R zmfG)d?Wxn6a@u-8-xYv68K48XtrGMC`ks`2AOGA}>}AQl4$f7jAD|dFIqI_1FM-ex zrP+`0KRw0-lL3V3Kk|2Qqh zaxZPKO1v`1_cK^;0WCxg_&kM|=2XN5BF^B(T?y=B(IV6h+RJF9fCe~atWk*;qs(5P z98!k9kLzBZ8;;1`DixMXy|jcuI^ccz? z)F!2!q0b}}9@`mV3x;%>qz-=XEIF0Y8tyfrA&z`fT(-!q&{BTskO4Nt+?bZ(n*|Uf z<-}j96J`6*WgsdBJH8~~SEx$>QwpPR47QxXTI|l4KXYq^Rxq5}J7}+m$$iQ}QNHBP zn@@%Dy@c150JB%H00Hm*fPRTjNmp@kOVQ2OM(GsBWUt`tQ+Aojk{c-34e3;rAG0_3 zwXj+X=fc055w$XFg^*6;k50bBf>Yq!1V=AA9c8fU@?x!A&D8@zKxM-dCjc{JGMd@Nl&Z zF{&2CTHL^>TkKYutc=o`f>LY_?>^!MUg#5Tl+x7&Tmd|sbCKR(%3)6lXUVuHL>4NK z+8ZEhxgJ!f+$d*`pU(o&F?+FFIYMU(G9!33aBD?KSuW8zQoI6J1h5;0iz5&Lm;D0T zB;~7Ed$>p^S7~CcoGUn&n)^}6YpxuoZUOG%{!kAi0d1Dj<crj{cCAw(K0_eY%Thjb5= zCb!7!3mLT4hUyitWoy$b1KE?!ddE2GrUuj`xDmuv2WmjGl; z`Ua9&LO(a9uS>b{BCkl7@e6M3;Sw3HP{nrNg~DU@8K&POy@GGB2GDD$aLGvSuF>TH zK`)98BE2J^D^NIOpC(-eb2^teu%H98>58-)wMTJF#Tl;`U5O$dAw-w;sJ@4B*Yfu2 z>9Ya3i%C~;qXlx&j;_XgM0@d{R_oN~l%;;7&M-@xHAs8ei0zXNW^;KxUeCl$fVFaf zQ?pk!T^co$m}>;vwfM)L-}yWc4+v%q#Ip|YHM=7jP6E0PphL6||B@1iYk+h;J|fzW Qf3l*81U(b^&#io6!rvk6zUE~CEU#Ar`XPgA)~u5}PKU8Oy#xljFb z6C3d+Xn9TU_<`gN9m`o7n48#ZHsq_F_G)K3(86hi+>=fiMCr__POO~CSUN$Zd3f_p zjwc%;&^RQOoCd2Y+pN;M(t(D&apd}ZQqfRG1vZj+QgOG%mBP)6*4JnQ8)>9cLJ?QR zscdi>uCjv98?p4vZW^hwQ7_f;WE|@#);w2&Hjb}h14iAzSF|ak%|+4AMw_bCmcG={ zbyN(njaJjrf~H%9EnW## zqhiIhQpT#1$oOiYUjijmCErk4d2m@OO*`0t_L>Ga+R6HJA?XBG@U)geJ=HLZlhGZD zY^}j{SB(wUy~ZJFEO;Uw{4_Cp6`fRL1C7vA3g36vSYQ6@$@qq~flqf7qbXYl0XY?6 zslg6g=@ii`w${@6a=a82fVm5FDgfJ)(P>3-JnIp_Kx`K~*l~O&!3r0rbAZ#}zFVJl ztsbR}%A#K!tHe$=&_0GL0&1LI6erch?wUBUCU({6PDOE)80F&R8r``l21P$lMR9zc zfJp3^RnLbacgg4sF=|eSneV#N%z+Mhf$j#O&&=p72yI>HqSajJeCtA&o{T~Q)&UJ_Bo*CT> z>Ioy1v(daoR`u029L|v^z@F`jP&t;(id|nh=b&4NBL{J4;hF@Is_YyPxV;-coJJgJFNhRGYe%nKg468n?81Hf zoykD9rs2p1!NY`0$BTUX(nxD#lhb~o8Zt<9*|~yqXAJxvI|$#EX%v}=-3X;S6-b?W z;Xz9npW|XAfkhM<>H<#}7@AzT8cq5Q%?(ZV6~*3(1i|G0Z4}7A=n^B~7!dmJS!B#`X_2in0cy2W%ldI`Dg&xc?8Zg6iJWv9f|veqQn=Jn~IYm;vwwdJyd9W^~YqyaNc{YV07-nkUaG8x|i#bz`tb zkqzKfQ#($q#bNkve?SC_$e**EX;%w;;%F>bJx1Aee%wNAw8tpz(_~Itw%*WXCJBQ^ zpy#_Jwmd;~K+Pi+tHNZte#7%%d4>xjQ(+Y7YCv%)qYzLCRChd_$pga$5(#pJ{Q zrRJqck0ijpwuQs95IY*mc(kB!p`Z8 zW{jy;yv>cx;Rz;d&Svyrv+R5va#fr<4KH%MP{j+W0cl5jAr#NEgQr{(D}B&G;_{r_ zM#xXC1jU>z(?f84yOt0(J3Mr??6AI*9Ws+0jEGC_riVd+hi7z6M}Z}8alMwMt_tr z?72RpIS4MUHSC%1u;iJ`r1=l+lw7tVdp!+W;go|I8(9y_R02(7&{}q^DHbaJPX1{S`emqo=V!e9bHO zr)TsGwn@#l>T&3HRw{aCjh@9eFKNH*?q}ENIqaxq%S~~v=(#m|9vgy>+xAV-^K0}1 zTVikM^m(=`cp=)lu7nF6;freY;^khhW|iix&YA+f1opZiqnGAj!d@>k_F{b@pW-3% zkj;{v&Iv^{8UQpVwi!Vyvd+Xfwr+oQ-(~c2lY;0K*70u4=#||QU$xRnwuu|e;#b4g zXTe$*;}i)^4s~2^*UH{=mnm7%vpN8#-L;hIHL&MR8NIecg&T7!T#yHok)_Jg>+rKN zQxcAh^bsdN}eVgs%xZTT&9E3DA_*bpeu;O1<4{~X2z zJXz@Y6y029BMN@VcXY)0AnU^$Ofx>jhC?rErl{Ys-skjT){Aca zBW%d`(C2EemC#3xh!$MevWGr4-pe*X4NNbheE#rpj3a~>>h^+9jQ6qOwh-<9_mfpI zR%P3{l(BT7du)?*{wPrPhcMiy*d`;Q!WMxGLug5#W_>=dr%n1ym2Kj!I(k~AXG5+8 z=bAn{&vwMAMi@WRnV$p4fks2qEf5K|jnbAoV?3Td51VZC(^lekeN538fE6-r5KYGI zWnaXy5tHKc;gIBBi@sE4TMh1$L1?Y!!uKGr=JaJYh!>^Zr=Q`|SJ-Ag6JTZoH&0a? zo38?!ezZoDL6g4LwiOsR6{rC7CHgu}ZlHBL>!7?+dkrDDGeFyQyV1h}M?V#Hle|Mg( z&nG0VVK03TVj7NiJyg;6am6y==?APY)sv;O=!dM(-fjr}BkT^M#U`R3vmv{(qyWNC z*hbe6lvf9oZCrj@Wkc}b1Q!M~^fLtNA??-O>A=^5em*|PMwar3e!=?Kfql68mu#Rj zBKs94A{)*43LU=j1wf?f*QnB(JmQ#}0qoyEG)sU5NPY{ls}?4JE~OZxDf-FIJZt3@1H2le?>1xreoGo+DL@p1Ql;U#RCx$4@5!5TT#4G_i%UJ%e~ptz1>}R*WGXZy8F$0GjB+O=tt&{ zH{HLkU;V1;S5?2N`qd3f3q`*W29B$8o?o<8hF{CJ7i8p;3y#U9kzAHF+dZpn2Qw90 z$>ou3&JK4sH8nY&3M|*P$#BZnxGh^|hxg76JKnfaaBYhW*YUz>!&gSh2dEd=u3=F@ zIDuUVLb8p(H!LHtXxt7AHKPK%EL(?$*Vm&8gv}@{We8sdvTbO%0{~^q0rqh$fwA^k zJ!xF!6Uy)>QC@ z^Cc4#m%?OZH{`Q2lB*yevZjb+_1Vrt zo}6gCy!uFr;fkQw$Xr3P4l} zU3Vsz5ep=4d$3Eg0=t-J;b-J#$o6NNyLI`I->RJ|la9HW$f0R)bAYSqLP* zs4n)4O=79w^;!dKTw~v1w#2C9g#uP{QC6%S5$i_8nh|mKh=7VVgCwUYpJlEeSG|c4 zVdK59@m@>yY8&4f#+od5!M@s3UnZX|mYQwwIc^aw$%{we1jG)rH4%}#gcp2HHdzX5 zt{sv6S#y2OB2b}TUsc!HEq2fA^l<`(g1w~H?%8-|F_wJS^`}5jzZ|L&V|$eWd5A@MRU=Wh@HVq3UnB;8y;-{& zn|3&oM|jhi%_|#j+8F$e9V9Nr#I{`%$rob^yOgSet*C*L!z`O?vt~;?C|@!Rr{A<~ zp1HExwWqRrX;$zlaa|-wSR?KN{2qNc;4Cg2U2rBCqlx9EJ9_G8LN2pkhZ!oMQ2Rf{ z8YKKFjx&mUS~zh3@cTwT+)4i^JXC>fC>w$WJ{znt*UpD(Y%~YM zMan*;Q;DPmKibM17$&@UdzEEL;h5m_R7EmiuCpNKRBgb_RPhvLIJktxD|QHds7}Ia zV-5vVEvL-xs-^YDVf?gJd+5p;(PD*Q1_TWZZvz>pZea4|;PVxcd?j;mdQ%gXP!-{L z(>beHjB}HU?G@Qjr@=!;Mi9{Tk$e@SKL?bZ#GvI3S`zVz*-?v19%H?Db=GVJUXFi< zmjNA~^}v)xp1g5ZZ%-1S+%$Y902Xr{8nWmkIq@_i6%^(1SVzniz={aLbqY>!VlK4d zO+m0CZ$3#1^P1SJLbqn;AHI&q5qw6TfK+aY!J88IeDu%KHLfh zKv*xozrp4$N3_Mk!X|M&>+Tz|-A}}%d=obJ&5?Wy*3n9QORU5#F&*-)`mg~KJ{xj? zeOn}NJufUOVsq@# zoP0YFCeB)D5B-h?9<1u2->E(HosoPO3yJ66UhDnd-C*wE3Kq(H*!!(nj70ffuz6P` z-^YwB3We3~gfX%5-W|#JGwcRnd?NnjJv=EPQS0gl7V4_FaaP=%Ql73p&g5D#{+EIyxD*P^(-0C9XVl3&82 zg7H4AO$Em!m=#<3NBc3MGnX&dts}o;?yX5&bn@J*3kICPAmB#sgd$9DZ4st7@O!P^ z*t_*6MVLn{PH?^|TH*h94R)vD&DXMmlaxmz`E`~EmwalHl$!XyF1)V~?i-YRz5yn; zCQRu(=9_g)C3#Ghif=)HPu0@jhOEC6$?vkPnT$tcw{))F`NtypJ?8Tv@OcEO1BxLI zidKn$<1&B}e&`~zu#Vb>=No08t6IY1#HD0U8D*3dkl^QxgC)*H*rj29;Abpv#t6s{ z5pr%fTz?#+oZb<_P@{+_BuV<})~X0g*@op6je@WdI&(UMI$RK{j9=1k3Aiq>^mCq_ zidBbp-)|(=v(nA|0mS;?)00#A8`#F*jO1_eZaqzTz-B$Bm2dvx?xNC0mYW}Q{ld|V z{B0QE4we@6SQsY2p71(EFE> z{3{S9cL(ffEL|C;H&4fJwiSwabctF@d|*4ZV##S{mA#VH`gL|uX{6%$;eM94S6 z)f8bL*~;es;Gf-np$Vzf73`dn^W2R zEk`g{|5BKde+M!CeI);Z<@L*10=zzsqmT2!pG5K>c_BUoo&qtlIs8+a7|y?15bp4W zScbE~)7l>S&kM{54Dk8?FW80otH^(a{QfPH{|>ga+57}*h{P?;1%DdJ|6q=Hf|Mtt zDg8;YSzF#iveTtpMw*G>C~d(TN8LLXH&i`7}VCzzgCzvqYe zv_=E3je)DGh24N^RU==sd)|Ert-}PEF`da1aitNKO3pN`$D6q%S2aZ3Xd&grhqL%Y zQ*yP?#>hDHr?Yvu1%>P}r$8Il;nP zWLF$Kba=O}HX@asfzO}x-ANlko8^tCfgRTy)9W#xiZ*3%F6hCMgS$E$8-7`bbaU5e z?C#G^6pIsGGBgG89m!l0zbnmO=o$FV_DGvG!RP+U38wRyf=v@Fu!L|9L}`nrWC7uj zH56+r0}uQP#Y*R6MJQ?(|023T)7CSQkj|phAp!C)VN_L6R~l%WhF!o%bpxKMzw-`k z$5TYT`n_lP0jSKur`b&@l+UQ$!(3zD2UqhR_UVrU!+odEDDA*p?8b%o7tuu;QO}b> z1ifRa$1wvvOQYMFp!A8$1EhkST^wVV+73-7GfiA~e zqY^kh4jT&_gCy;9o?0@yn6OQ-{B*R_qIq zjL|;55H~;YLbH4tJT=_}zi=agHrXA5^F7+H>HCprl-;dkEgJv;wCvZ3emVe}u$2e# zFQOM{4&n%cWv;z4Zvu!P#JfJ}uGF9}tb&5`A^kGnNpBJ>dEz0SIG{_<`$8_wqsPKX zi}Yz{65km08=I4yFTI!CoTIBS8}z*h|023tuM^Y9WW?roNdGgt>KlmYa13B}6++@B zn|$2BLq{+^WM+zX!AH9XS~$qmBRy6a_$9;)$c^nh@_Y*D8hk;gLo1VqZX$Xy-Xr3m zDJxpUv}hHNph01`Xcs>d8L^XZa_Cz9H7Bw*$71G+fGkg;E{N_DdI`P_nVr>D5GyHq zsYZGoe$6%v@LGyS^x(^QaHX0lkNIvsouw#`;Sn0;kE`ma*7z*_b&S8BF>fljohT}3 zfFc954$#641CqZVeF@$%{JX}o?d-b#X(r_aS^nHUt1m1l zMaS?3y1yFhA$mqLAK&SrW66Pbz8c?#%nm9QFaeEyA-QxT#>@?A79aRNdLA7+DCwp$ z5tQ9Nx`{#Bp+p5+_v9VN`z)FR?aEv~l%kt8@-DO(IF&p+G`CACdW|0K418WPrE!)K zHsd?Z&-Gp>z>K0BbdV*G@;(GLUk zzAc9TZH%aeNh<_&8^3gN7Z%d5{51O@x*cQK)$U?guH>uctmqDm!!zNQl&fC}@Y`eH zF21AXi(%lktunns!>-|ND>>ZHL2e$cieLpr(Rbn_N}YD4cgv2QMY@w;SJ~4J{I4#Z zCQ^JCqi!}^3OcQ$cWab-&!OFuj&cH@=skLLO#y9+NAot9Px82|=6*ov;Cu0L*4zkI z%T?Dnr$%{Qb)~xibi!O_dz17&jVxxoqU^8;F3T?6t%q0QK=Pr;e0M`0N+|SxJ>J98 zLsP5n086BDkH)zoK2Fft;~k|BXy7ikhpO99bgv%mp0{K4K@6MCVNmM5gzn?#OoEE7 z=tD6k$E)3B`Y?mF>nXj;8K;l%dw0I*DBVz#2=SwOZaX|pl7!#SU~F;LSboYW27*3@ zk-;{zt6oXz0S0U~kL(9YALr-R^tAj0-q1$ajef5Hy=-icC}#)sAjWZNKW^i2uz0T? z!oZN(rS)n~il5Y@9jc7eG%rJ(tcpH`u@fd*1S)gR`V0>*cYSZ1KFg0A>cy9@x53W=WJ23U7yID+oV-5I zlb1S0`T{?6!5C`y{fihpVV)h^z3tlCFF~$>Ky^*`{L+^I0xN=)xLBdBL(!KpIAX5V zrh)(m&AV_cFks%gB7Fs4XHjdirm91aUR)Bt;h4E*{+S+!DqrJCO}gos z9>sG+U&n72!ATZbrR=)v%7}_a1;^B%BOr^ zz7N>joq6;6ym>S89$Zm&f^rnPo*wW6hwB`DR=FSMi=!RfE z@QV(wXt^?$tE}#ttu!xIxz<3SW!ISOwz|uaQXpB>L8QuDt{$;+4lf7FrqOcEh_%j+ z!k`iap&x|2XjqbKhnHLJB)jWqxh|Gh_lY)Zqj$zF4RPK>&RQg`p9YllU(-0 zdL5ZN%e+`2t{sa?3-zWU1Y95|2cWn@EO+*aE!HvtJqRXlu&(7ZH9!=B9ggRhxl=67 z7L6RcV!2ziiOpK{SnVkqd8>dJd-_D*n7C<7>=+Z<$K-8&VuM)E#m!@KZ=YxvZ9EeF z!z}_VS(}>ThafMGR+7rsI ziJUwP>5jzmE|PA~@@31;2+p{zU9LkmZO^hWVDNdCOeKe9G3OBZDLYP%dNVtDnpFbD zj`<I?*GqF~?)2gi#8?2G`R`p8^4@I%}6HM9MUitF)yL&iFM z@i~YPFQF3wwett5RcatE4(D;@66PfiDeO3zvsAj9E z)dsSWa^;+_em{S^C?P&{seU{UgFG@!-!c$!r*3f8%CN~V_R zXY=qNRQEG1Bh|ohE3-KY`jx=*f@!3`bqeU8MS976&K(NiW<_FdXlNVm%0abC?UbM7 zrrl7m@$uelJY~^Fn(^_$!3KSrSgo4rb9H7QO|g3OWmF?Ws5gq`6zTDDz@T4S9J4$u zoyzudavCO?iRCPzS_``43)N1O@qxuW11klNSA*Ry44bE8`5N#S$MUs6YQn}$5;odX zs`7Pa($ct0WyYxTL5w>e%hwY#i+U451clg#V)+Jw*-s2V2Tvf`9!`U-$ca;)2yZ)_4*je6b$_0;z|7a-lmSiU*a%0osgB8#Ap#PTg9)NQ1erR5#-xHu@15Ly#y z2z~2Z2qgyP+r%~VL+IN@ZZ3qL1=;6kX2^Fy@OQ@YT_oM}M<(?Ta_C26`EDXcyW8gT zk}Ut8OM3NtVYYP`yLd*+_d%A&V)_2eh>s>lOgtKy?Xp1td?1#O6MgfY@P!b*Fzrrf zL$Txq<;k4)UntpHpU&_knV5Y%?%DsIlis{_5ea$2~R zFt?2zIW~IY@E{vNV?9b&eFt*h3#s$Hhn1EZsZ^Z#-bvGaOXhrF7f*|)d2 zcMrQCw7`6%ODym3DYwiS-t&_sC+jNLB1QxE?&-f}sydT3bKfp`JU=;A&04DLwq3ic zEMIa1%}$;@ab%!UN8%`V3h^9y_JN*WBT-Mk>pOhrz|MZRa)4Bma^hpR;k)I2ECbv- zz<2H3xwAi$s5gCSgpD*;{UXp|W!gCqmTQB9yLa!tHIHWoRSkR>#~WDC92XYpy|V{~ zPghc_Yo4v;hspguf{p!5)f?0`8|N5LS{*g$m8&T(Ke{NK^bfDkR)~+mH~-%~QZxQv zb`SY+M2b(u@{?I8d15X}dMcKmqByXT_R2w;6JdLqYz6xnHkUrOzDYhpZi$mQo1H#= z6iKi>$r&AeAwt+8wb2F`4cHUYTyj`xmf?`ij=T`i2oRgkbPS z*Y=2*4m{3GnuD;Dqsc(~668Dz=WOHS18k^b&i!~8QXWNFRSicw(}8mOGXexk6hI(l zHV00Cyy8w^BZFb%;{_g;3t9{McZx|LGQX5EeGvZdH?W^Y|?y&(yGT1 zonOGpl-~k>_|{l{8yWru&MQLOQ^?_Ht$jL{-%cENn6)&iS*1| z1pIs~e~$RrgP|kAH0{S&6(@xV0L>#`J!;XyJUA$SzJXP<@%n|uYVRK&$k_ZvuzBm1 z(UQLeF@8Cgze4<8Ar3J6`9yd!!WUxstAvd9cE~}sVEGy&xfsovJCQHi9!32I5sfu| z?NZj*nTh%95c6_aZU<*W9%8g+Uai=NGhUx}j!B&a1B0xc<L(L9DB(-#%|U0K0r{6C&tEk$#z@BgU-y|)oUg|6Z-`0S ztX>h5p#PQhn8|p+-!>sSyoZ*Hzk~HD3S0>p`S&pVKg9AMiPtMd0#?5|H#ff)%YPzl zTfow@>)43clf=n?zSPXzOCtUYM7%sc`L7V>-(vaiAa9OUzGk?h$W4Cp^;rG~F?M`T zSJ>QP+h@ZQ%99hw>2P3$d058wZO%)^pUq9i+4crc5yn0Kvx%kZ?(tuVdwe5S%aFPf zJKL7V4wUuv27ge?&G3fHxAf$3AM~YGpc5+VSrTe>6`&tJuUhaEt5$<|%M!~iWeawSfnI?TxC>*XNH)d_%9uFGRqIY2|MmH3I(Dudhj#W~`$(KS?; z0qIUaMrWY5V-;FachCVQwhLjl#h4dna5}(IQGisw9$n_#rYx{^X1C1D4=`!u87N#n z>=zj@WR~>=JT$uR zInY!afCI*&4PC4@8ERXe6GjL@Dw*@nYYggZQ`8jfdf6qc)XOeup-eZa%f85X)qt=B#6-Cvx-m^$cS(`%l0qZQVVJgL}*WU_2Nk3FrLm7K5liMYPrU+4!@oHW4v(sk|B4+@%hYhywtC zh)ck%3IK&{JMj~%T?TRDJ;Y?@Jy;;qKUz1fm7%hIjZ%UtS86xlMy#%SxezWSwYt@y zqdEnv0}ZA!Mcrl^_fq2;JzFgWUNIY`)r-+QruI?i+Ii(i2H)+bcaVD5FBnSYC|ccN z0QM6=XW0!+DU((QOzS~BDfzNiWtC5K=cHbOX4E>>WvQ1*sXNWEAv_o6x5=4o2ANYY z1q>Yc5Po9yGCY&SqBmBD%?C@Dr;MJk#9i9PtDP!ClEw^Mg7rb7GxoN1aRn$OCEt zRkf+R(K2FnxK2`3re1+>$lldxaIH?EbxfVc)9T7>nOOM@+G1r<&l;Rcn|ionB9m5U z&9GNeXNOLX(X^u7M8kFgmt=JM<>b!VUW5uibr1RjbuXT=x{qM3b(v2VDd!`tX>~t( zz~|K{d%<}e3hZjYfeI*8->5P4jaaKxrHlb6wu_XfUWGPmGhKseRKA2kfRaL&hZR%s zBEqUyP(=dig!7fTsqPxb_XQN}@!DK{l~%SvjsiJU1L82RN~MBYl}u|_7!b*f$1)*o zMZcO=4!w7Iwm%V}?hgYU-1So13ht{4y>vR*bt1*6*3<;PNdRM{qVZNG&^C+-15r^| zh#e~SMangRIbnO);gM6Ta|G6Eb*20zwPc9Kn(1)X!|@5{p$gD`(YhYHxLOom3V)3d zwGnIOP)YjeqRKQssupJ`b}5B6Sar1%Rcpn17|=?i9T5%Xa;{$qQs6KF?nb?lsq+M0 zZdX-gU^kH2=+cC&U&KBXqQKv$(1}Y4Ud!LObC08@>2obz7?JyjkxsQZL#SJ=w&bu@ z%^H-(<|wwCay4Cws0U2zhB6AUCX2jkyIwK9M}iN&8l4xc>mh2j9#ZGrsA%p-)N25A z(YgwCT`D%n62WVlM-HT{dg`^Nc@4_&0ywgZnS#R!Ppj9N_I0E^6q=eUxl}6;8k{SW znn!H={YiD+0C&@TsD}})UT<1gFR++;2+dY&6jt*4)EnqMm!hIs^l*a7^&5?>-bi4b zW=LMU6Y5R$y}IbQn$G6a6K{3FjO|3E!JSaWolzGFjAoo&Do(o&4(Q*EmSI$%&UaGv z2m!WQXO4iSx6pfgS}3dDiZ7Hwu11|*hN@C$15XpaivmdeVZ}i0j2o;-1J_H?M#?Nmo8*27Me)EOB{Saz9}ZV99N|lt)%) mwsdIqNq~;2r|>jISSaLGpTbA1K8>eXKc+rIzng8)9r$lA({?`q literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/gs_supported_hardware.doctree b/source/_build/doctrees/gs_supported_hardware.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3e80d7bc548d967aa8972cf57dc2c68496ec4a6d GIT binary patch literal 4222 zcmcIn_kR?}6$gQ&y8{Uj1{;u*HExF!>6{o60x5Q|v9avK4h&Jsdb77Xce7@9XW!1O zN}P=$u@fo1_v%!qIK6kL_uhN{l6+_P?j*$VoB4duhr8R^neY34zi-}qXNEjqdYKMF zH62TztD5;5@mSYr{l2p_l+%VftHy4`^_#UY4dn z;wYJ=9;eMsR`aUW?HtT)UnjuQQA#4jnAxSqXuu_E83FN*18yB6MZ~W zeLUO5DBICdQv)7NWUS(eAoOuOZMW%?`dXH7RELA39pGqZPM3nC)Sd4Fy=-mt92T*G7W+sm(%0xY=hy*vRS3&dZ$yP#ufPDXNh@N z(O#R4dZDWnK3{3G;quq3@Cj=JpRN`lY9lamx(2LQde)(9#gN!;XRWoYDZ~KjYE%bp z`*OOjE-qv11ZWVu#U8ecFC$l!2J=(lX7~pm@vCT>>JJ(JJ2Do z(SCqFkkeBDx=4T%=O@5Z5z9Uk3t$ez=OL$q2ISMu0SRz@Q0Bx#Yk4}!7vQbK7dqwX z51yrG#g-q~KOthM}Af;*JG#c}P5& zDrE8;w_2RX7EEGNdp^*@I%2G7-C?|Vopt;KUQMlIvF72Uk61UQNE8j#vXmd9XRnIC z+6O>K3q})9KN{Fj)JsXbGprtW?=w@S)Mll%}m7@<@qqmW6le`0Pc8U zPPTD}0duNw2eL{SJ?_cL=>^_1{w$X<{C`(3d8}IwSaUaASP!1g@$|xah(d%H4G6n0 zf?J5t%E`MZSjb1*_pBCy4?r_hGa|IRB0Q#KPzNH2oB|_)0n_Su(y1FO zTtN{}>E0$A>(~FHfSt}MWEFfYi&d0U%(kkGZx28rfhSToL=_Lps z*9}rKH~h2Vkk9dOW_@|1^!f#q7}Pw};-dbd`ffD+8QXZQdGt8FG&3UIU-;!rPG|c& zzU+KOcZvJV;+I3w!?NaSGNq*^s|0?xiCacMW2@y+^eUTP&Bl8CmzumLr`NKr zLF@;q=^IMKie6{a>sdu{tx?_-y9a7;5~ z7*O;Uz}SwhW$L3@P4FJNk^tS%Tbpci+V-#%U2B$x^foprv`*BaMng-9W;)=yJuTBt zL+B`M(A!xRuJE|oo8Ga6hLsiMW~M*P)fwy7Kq(7wc{>1%*#JlfAtMPJ7eYlx?Bu;EO%rw-CLS*`oJ zG4!|ab`YIDVkq7O3p<^4%t@B7+kg7%b5Da93Bg+j8auUkiG4 zrozV0^$~ra4YQL+ar6(^Xm7~-A?AQB7_Br~V3P}=NYjs&ShZ93Kp^|afL0h_g_57Z z>?*?e=TL@GP|;79*=8ekKS6)StX_i7&(BXMi(1IINKl{8HLz4Q=;x+V#M)hOM9>i- z{xtmp7p#ms^h-8*E*)#K;8)^dHg0Y#XN7`avmp!@zX4i_xd+2QSE=7Fvpr>=@sJnE z4wAHRdb8H=;N~u=g;y2*-ex-s*9NiTX)!$W*l_RDAC}lAjGoA(^7|jn)mhNfzX1Q# z%vx;6+NxHL%YU9(SB`;y$?30k3_<%aKkduR#Jp-!FN^8la{4>&^J`6Q`bSYoiY9k$ jNy=EYcb6*qr%nH2BgPUKHUFK{f5e1M{}nr3>_7c~IAjwm literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/index.doctree b/source/_build/doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..07f2e0d82ebfa69a1ddf89826eb92e3678b11fe5 GIT binary patch literal 12307 zcmds7d6*{bsis2fLnb~Ckmt}Va7C{_n&VpWWtgY^@nXKCGuFk0H zof)+hR9aTNZ&AEa@m5s454=T0QBhP>ybnY~L_|b?5mnXG-7|~(-uM1`-`8JPRc1tF zWW+BcGb8iLC5572sD*AR7^(P0C&=(;*{OsXz4(}`^pZ#~9Wr|=cG(GMt4^SoMY>}s zw{p>`~x|Jy-2yF_TqVCK}ao|se(>6Iqty;80M|Wj&%RyaqgF?x6%MJy)JDcl5 zQNC6wmLRexn_G`hzv@&VtFUY5&SQ7(G~9Bvt6R(X>-4_+`fkeWOrv zY$~~x+KiFv9Fs23=GK7JtrXpY6Bu@-XoPm2TUwFLt%_@$87U7SqM&qdwq~vlYWW~^ zL)gNvSVdY;X{1+ziulvARNUIWwZ7wP?BIly`m|bvL5a9i=39~y7*ASa!aKc>b76X0wgg(MNJn_hI=nu~+#A*nNVvihY zn;o&xqbBsxYPnrAm%($69vbgPiwUhh2A%CLD7RFEjr6e-`nY+9hJ#8@MjsC&4M%ze zMiN+DHV2FC42yFG7H767F$!a@RR^hq)jG3738ODt%I0Jf zzV*Q2+xG&uCB+>0#>^&*q@VyhZ!leGhG&>W?m+moFByCN)9AGY+&^fcaY|j*(YN+&%@g)qV6#$Z$SFvv|kMtGnTMlR2 z{pu{aQz|rWxzRXb!^V@0bKvZfvE8StPx0V+YV7rP#E?^^TE#6OXlL|9?m$RO2a@nv zB}BhU;K=xY8oX^qdS_m(Qvw%zA-F6~U6Kb}_Eo(CL>D9NFpyZ)%NGO^qF_c(qW4pg zR;fD~Ll#EkQq*dfUFi*(os&M5?J&0t9a3SrWcJLIOPhnLjR?BS?5>g%IJDc*rPyN) z7qOw2rX47w15aDLXweqiAg8o-FtNp8Mj?W29aLdh-8?#4AP1(}?Eu1MzY>i2G&Pz~ z2BZ1e(Gy2Dj1F$w;+Cf}b}8ICxILkVdxXI_H#YGg=D^vKvvn}svv zu#NwV{1yiGsTk!vh3QCBTAaiRwVquZ zv>;E1=E`ItF`Owj_b?IceZ~uG&kSd!FKO zc6FrdsemgJRV9i&e@G#ADGpZZ0(D_lr7=l0#UX|8bInk^zL^TF#Bx?@xjl9Lf^4oI zT|#A0t0IPAWo9Xxio7J#*Vgq5v$?f#eT>G+l$G~=Ssz)oAg^Ck*DuaWG=T`07i1;O z)KgZWM3x;`%ExNrC3XGMY;GVHgCJB%33j^_*6fmgSzW(8n>#`X;#I+L0kfEmDW8I2 z)|yw24Try?u3zb>OZO;*&sPnpJ?dKZBJ~pWGW7~a?HFIoC^#?;p-wHY7+Aref-_Ok4}Ukj~Z+Dh#A{<{7^Hg{+8sV^rI~{)*myw(v8E-;>eGy9&zMw>c~&Tj{Ib# zKLvrZ)i@*BYJ3{jzNy)PpJ@@EIItn-kamTB98lNq`#I5xTV=~U*A{9eFKi;?M-4H%ioQO(sicwt#$p)Y_6}V z%B}E#*0_`rE1ZzB8n5Rkx|z8~z(@_un0n{%)#&i~qjYVq*P$ zb8Ta%H{7<#yHgzc1C7y45;|7Vf@IaE;Gz+H3BzbDeaNc*0)E6)FA>il2r&H29;=l>?szfA?) z)9n1;?W^;D59hNZ8@5F>cdUZVySG2o^&jJKJXafo#KPv-;`J03GMF&RWt(R8y>iW;w+`1Ohrb#0~qQ1Yb|B}re(n97`FkAQ)-r)};QDEnx zs(zrZ{~CvuIZc}h<6SuB4*g(V|1F*e=O|sQ_OX7S)eqJ6-{VPae&sM1Q9(ak*Z+t! z7ELr|Z1MFYb^Xt5Zgq>cyvxBZSwC9W|H|eLXsOGW{K78G!C0_^`?0$Ice^W!cA)Y; zW?@={MQNQD<3F3*zeP&L33-`^zR?mPS}H`XP5H=HI6)Zi3}~6qbqHOn@3DtK?j)pH z>J*wTq2Z`L*I7T$34>H`>K4KtA#6#KWd~C?yhSU7ychpT zK%qXo52-(>d)0mFe)WKQP(7p`R*$Gh)ngtT$zvmU+(VDM;IVohx9YL1Mi|=M6ozNPKjHEkPTEk+orKA1u64Cx5owvtms$V|Z6AJ@sKPXHC%s7@i8U9FivPQB# z3b0?9#74GKkQ`UVuQ)R<(o)E?rMo+$cJ$G703=*}6|Kc1q64KZ*_V5)3IY@F^Wyk~ zR1_T~WCzcYrHK$PwahxH`yX1yYd6SxND+e^A`KqeXb=W5k``JsEdw6w#x^;OpJTb= z|JEjkBz~|x;e_A?aW<@BGugZtWgA&KGI*B02*9N&NL#_ht(^W?!L3 zoVBy!yc!(|imaI_V&j;M#G|BSja>`3?TX+}f%j_4Tt z52;R7Q(fvh)om_sN{`a9s8l`bW|dKQs^#iPwZdGJBr}H*uZQDgCLPCQz2+*(@<~OU z&7|W|QDc)1b1Ut61K#YSFBuv^EwC|)M?@Q#6m#p{F#p~%XnVKj@rGO#Y;|ZHj7~4E{lH@x^GCTa5QLrn9T|`pG2zk594#I%o z1TX^GEGK(skwV4xm&4=n2J)4L8ybP~Yo(%LhXzu9L6}K~5M($8!3)ODWN_^?iY{@^ zbGI{siF-*BCAtz*&_;Bg$LtAWgk5T()Iw*n7@;vH9{c}qC^``x#Q-@8kBCkd)5IZ$ z5fjIjwY(LhCkVx+If~T6vf-ywq@pPj(q@!+jB;M?(W!V*-Lm4lC^hmH;lXyFw&E?K zZSvhOCkbcHog~l`nRmcr4VspFbefPiHJPmV8uCwPhOv3#&OkA`yd95-&J-d2UeX3D zBE4=OQ1SGyYZ&txdJ?Fh^;sg}>{tTlOPf?Qmp5_HlR?ASJ4a~esoa=rp2BoI*No#O zqH~2jHb`^qIFHE&JZ?WR2&elfE9CQ}k6+AT;(R8KjnORX0u;j-7vd4oMIxZzOXRZ> zVhp6R1p^lg)g>`iTZdy9m{QlI0$qv{kAs!K;4-|ZUV*`7DGYML!!X!^w}>v6?|#|k zoWqA3O@}yi1q&GPSd(TfJXLs_+D)*~Xk>yJ#uk>zIYijN!Xu)cBB|d?8e)|e21Kod zz=ixPViMV)g8q4tP>3anedhE8Am%uz2pV>o!?b2+Tt$=kVrwiqc7e3#j?`XL%+rof z*28jfJe47ZdMM-K5s}Bl2>HBa+>BMn=ABaxGC8p7&J66x8Yh9Wry+uNaVfMb3G+Ow zHsD%jI)-ZnFA@1d9w$}W+M+6x4tT6oGi0@}%xhtM2Sb)nIq%p2>-r+*2WtkM$xr|i zv>)OTQB8#Pdr4cYRMNK<&0MsbE6}}ZrZ>AFh*yBQr7#iRr2vVv3eBMY8l3H+-X`R; zXch&zZjhxml**!CM$SvvgRn?XXX)`d!*Z}XGgTyX-LUDHp%cYe=g~8m@&ZnLNq3)# z&vv)E73Ad*aU#^ApU=W0qG#hDK8^c{eq1TvVnn)%-_2!g9eNJlJyu838_;c-OP`AZ zr|FDlz+>yNy`RU=v6c?f)hNT*sN)gQ^YNc9pjZ_Q3?%kDV6&P*!|y%c-b3d1~PG_dzV)C=}rB=TRJ$nS07JdsZ?VZs5A)o4cEONC*c z{P8Q;5-&rgmtgDVc#r56Lf-Es(zwxBnwO&Kl}s@YO`d?r6XbM4w^*x%aPuk_`FObT z=I|m)z8VZ(0*u$-J)+mL3IK*E31GZVzGGlq$M2p%f?H~V#OqPe3JLBs8{!T89LvpV zPS>LZfOsPw5xoijDIiz{0fg5E1nk)2pUfd|7RI;CF}AKF-YOMMZlSlK#5)duGJ(7u zFKUHMAXXX>Zx9}yK;D73h~6pR{c=A56G+?r0D2dT81Pt;1Q2|RKsO3kQ_IN|(rD)0 z%rLe$sqaB8?DAebB6^?5>i3eSSS=YAUNTX z;t|o$@Spmhm3UnL|6Ew^iCN@CpmoMw*z>;-`gy);c>b5D7tjAn#Q!=GKYzmg4HFJ{ ztVJ^xek%;~1?f>tDOr`ZsHt9-i;;gx*(U;l!Jym8^IV5KynM^>Jl)5MNCQXeB(?`v?~ z(W!D*;~aEAYeje;&K%sTl_bmpI#5b`kzZ@l@gNr1f!rdF9S-LA-jZFJs^L%sjJU6| zj?0$d@MS%}^ziLaIH6pnL-5TV5GPrZnx{iiHV$W_tDOE8D3Bq98HL+83E5#x)?xN0 z`o-53X^`pEhOD^`(DuoKp?HFuvf@vLENTg_hl9*q#hnkph^s->5{yAdaB)Y`$=9an zNS0)-a&WthA%j~!fpW0lI|}7{%=I`J$Fb1f^9DuviB`)_R$sO zx`$DTJ5x?|_{a?>7HNb(SK~y1kA3X079>_2WzijGCo-s$?i6hhk>Yb45bbsY7iU|v zQA+y@CEwm1ido5yG~ip`E%I61tDPUZJZB8o@RmROQoX?8MgWwIV&84h5sZT!8`Lhg)j z83XHL#3u@G4~e2p;F4%rw&AF+Dv!Qk@NzUy#6mBt=_$DKbbMdm0 zkAuu}`E^~Z`P#(9K1tBUXFj9^Bu!m)GJs#--V1{yhJ~=`A?(OW%?Ci|! zYB*E493nuLAv?-qhl{xYL#@YZ0rJxxJ}V>cWDfswfwWwvfPy-c&1q zHKX~`u$5+JYgL;etZLb+Ikv@2YC@HRdQ(TD*igQdF6OVWEmi4sHD4}O4(?5zYT%TW zCw#G}=JlrL13FOO&dU7W)B?QSX^Z^O9t*M(689m!ES(@X3wmqGL!H{7Q_WY=X5~_U z)*f;yhq{%+lJiH?!m;~DY{!9goyy^Tl_Qpf8`s(6RP7NBl&BnuCO*oo9E~Ox>0M5_ zCNg%VDLE}U3)s+zm4y)uc7_NiD#xJcv2NwKB{_mm2zv% zk@MAW%dMQGe;<&XrRXh6bwL8Hx$=nJT68k4nWCK*#eAu@yX>@%igE!Yo1vCYt1Qr3 zN26MVQ>~nwTxjneMTvf&qyE7?{iMN_#ct)4-0X0bs%bH7L*GvY$EUfKCEzf195`xe zvHI(f>O_SO$Sum9oSa=v4>Ru5ld~kE${EQ-x>^wRDlPbtt&LJyr_$P&oSiAA9S6_L`;s%|+crD_HlMAmNFMER(#$&1tj(ysmYe}$ z*_Dp&>Am`-j{3X%Qg2^ z)-FlT3*zp~wcEM2zRHZ?38qJPla zqMfLm1xcUnR@RfG$p@T6j=|cl9K$&fu0_HH!!x-=WdpIhF~BbP^7tWQo5Iby!`_WX z?TR6A?lo6e&T}i9K|V*s&aMrnYlGqPuz>WiNRQ?cmGi-Gw_Djl{4Sk7ZQ72UZCwDj zww>IX72w`-Y_T(+v8^SUd?{;-)2(zi>sYXBClA{zRkdq@lSrhkoq18MrHj@`8f{gw zTSCa7{X6sU%5bu9JwqbxR7EXQB}Y3{7ARFp55tuuc9x59+Rid|#`#heUL;d>tX=tP z&R}!{e6w;-3bCaM61D{UHdwIJVo?QkMbbs5Y}uvsU=e&UMVtBut30GiTTUrG>g38* zNnbHzaevWL=`mV!t|!wlqwYp!cb+VJHQk@kg9?QL#lJE=BFzMEB> zo$(I0lEmxeG`~S|>;^6hv_j=+$x~D>*Nm>cS@)PWJ*h6Wnfu>Vnta2>xkQ=_ah`6r zOP1uwzAtqvmyx|t7rnVosG#x5F1inl?T~h#V}pNsfH7t89-V%uN8`u`AegjU86?3F zp-ZJ;$g(qTB}<$>08V%0@(whg`#1}Rmw_9H+ULr57J6L9wOBNOIg~^pClgm2^ZF3wE39|dDh2GGCwUuo0Bzfw5;V;ZU2>1Y| zU4`}q9=~kS726Ol+ul%|a1YUqI1J%FspXM_KIGj>f%Ji7lkpAZa<@{%Yc>?Ek8CI- z0g+Wo$$5cbu2N=$7|qRRgE&&lvLX#axD|)gjDoOXvp?LfhH?BKq4zpcpr(5_9s9 z5M<>V>X4qh1W{>iXehtC^1S5q7DPo98zDNIg_fqb*8&LwCPZd)2m$qRmFtqT5GoAj zGnMC)BV4F!{(?yOLoD@UoHLTBybyf7$gRAXTBY*xDVxD?ucq_P=5*)(I2Oipx2^BpVXfb?#oD@U^F^DtY&v(-cI$#( zg}LPnYsUrFX_BGS&OQzCWV)CuJJr*y%Vc#dYxBlUy*oB{ZQiueI_F~Rv<;hkH*VV2 zzww-{>$h(|?Mw+ZF)F7tjveT?*`viY0>goU0BMMi!!!(TYk9PK(Y8i05ZF}~*%p%5 zrrmioVcmvqNx&AKom^gEb8DtIFDMM2%kSR$eEq z9U}NY7_@|_ygr4)YO&AE*rid=|i^pRIfl1wQ0fK1?+I*OF1YF0XPDEm8RhIKIuT ze3VKb2BcAa;$}QOIZrVl3sycxRk|JXJ-bJWoz5s6Qsv{xIq2P3Whzd!jc53HN&%Fe7CZqa{Tlp+8x(r0WL-QC7Z;s(;0;e3i(B@__kHRG&2KF1Kj@=Zho}%`mibdK$^l2-O7(h zrpwX96O}32{z20;ejFv%(Y=`3{wHJ_$Bs>+@>3|lBW~qq#LhUdp!`E+IzM+Szn~IP z)A?nT9TX#WeibyGUxV;(+{$l(hE3<^W0=nG0Q-Bl@&`>aU^?JQo6aBI%AW}4R;u*A zM5g0t#>8+dg&P|uH>)z~Ki4zqQ%R10fgGQJ6|DRfjrcdW@^{_fe`Hs~(e9&ei@NUF`nFq9wN_`j8k?o2D6wskS z5E(AO@Wp`)U`*cg6amnHwwQrTP^XFYz(_;PM8-8&i&;oqF`H4aNfd~xX%)wyX#G)% zm?QDbWjqOqCpC5%Sw)zS5f+Gp7{S2`!AT%G{$K}{pT`BFl_$q1<|C7uS{#B0S1e#y z84HYuTpUVe7Z!*u!|{p37)O|1M|U&PJDh;KIMx^!{}F(N{EtN9ilZ27Q$Z0Wc3Dpm zG*a9IIVBG=#x~+;1|SE7h)Oguj)f9ODhJVR=fyiUpigH<@+FKcF{O~jY(O4!_%sbL zoX(ewF*idsmrKPxi49ve(^Lbd_p=U<;ul+Tu?>@sK-EmEPa@OeNPN+8h`|J3TK45kQj)OQ;`o1nu&5;N}Prl;9v<7 zSDenJrI`{T(@a;R$RwLsoFR!UWg^QYk<>mQ^hBb%NYTugTNLIduv$;0bj!(3Nwjj2 z_)v2N32Zq4Ah5AeiZ;MNhAWV`qMb2H84_D;XWEiF7-XdcNp-?62d6>wl)Pa|W6a8_ z(M{U&Q87tf)WS&^jPuGf=Z)?`mK+Tve8yT&tsV>YU;UA_Zgtb-8 z6LrdW=xQ*57@M`U+5cxg`)>nJOC`d+R#)CGW|`n#>!NhAX7h8MKYL{<6TkT!py2=T zXvzBb=d;#cPY87=S(c);S1n8uk9(~hVr&NeQXr!K?X?C6SFBz;v}R~1)6vnfs(p2O zsC~_vwzl+2yKQLs%2g};QnZjGi|tj7p|QlIla&Uh{MKi)AwQ0tEWE3P<^dbgEQZH& z5owX!K%wXG@rI^(HUI2!>QC&_-X2YF=L&Qv+8U@+spf6jS5WO2)7}-i&&LCT$=LP@b~k8&$8JEBp!ni7D956;mn}Z8yB}n%sAqq$>8{+M(=< zj+KMi!AwV6$Evj}*REV)uWcV%v3AIAPiOpczT5Ow4DD3!pGPlF#l|lebPB;=ey?LZ zElnh_)2mdj+G_b~2b^rsOqJJjEN@-Dx~uHDIqeILr5G6+ui~I09Qk#4q48?Yr_gu} z2O(=!5V8ir(qw}W(Fr7os3@#4W8pIycZ8Sj4vMIrLcm?AeWJS#I1q6?6^Sd(VroqV z#SB%CgRUGFXvEnJvR;B9W#TrUP2|S2qBHSeYciqMUd#6xjRsnKE#F@> z+98?sHlK}pn~zHqq;p-YJ7J4hSRnNzqd1rI$vV%&lPfm!?sk zVL~0kFfv&xF65jr3lar! zu?_if0JIDxLjbWIZ@|G0B(6wuaXEk@QsyAkU%C<($udvlGAUUmu(YLE)JT(h`h!a!h7KZTg}Kj;E=68D#QNm#e#%4Chn#l4W*n#V&oNGC_7>M^t6A&lzHD zVd@>-8_AA_Ia97rXi_4Fmk@Cti7N^WAy+9h1gH?Fs>ivU;fe|_GU++O8DaVo1F=v- zK1|u4^ep2A$d4j%MTJYt7A8Vwe?!X}*pcSXhX^5yI$X3Wi}LD604&IUje&P6;An@r zi*xGpzZ?0%4s#FQpaNGQamAHfTvmWcnH4ZP%)PRV%VnM+%LF@2DRJFlK9d2jQh=S1 z#N?G!D~)o#S2NOh=i5as_ACIP#`{K8JR4XbrRN}V#WhS*N{Ol#G34hm*z+V<>K^R1 zQ6W-j9<0%6DpOi|CM%xv}Y~Aok!d zpMdeCV}E1Xt8=Go1Lk=p{*tC=xcla{~5N^GHJY%qzKRD4KjZR4gr55~U zNX~!6YyoIAs!0BH)WlRtPDTaU3I6gqGM@gwQl`cxpyHKjylJF(Wg4$ku!VxZj8^g= z%7c$;3A06H2k^6rUXGV6w zi5KHN9QsR;xZ-*SirETRAkJ0f@KOf7L4iiQ-j{Jsn2m*uf;f3O@`GLPEAR$9yb_5k zUd6>_r$VI6u9w0M{&+{cS{8W?7r9Xu;b?@jAsmC@*D}!S6wtxIVJ?YKtoMJMSD)qA zBOff&o)6i<>|7zjm2__{(oP_HlFyQ@oaK#50ys5y& z7Z!*kGn)S(XNR$MbZ5!geu#j(_L1)o0|{jM5hSj-jmdf35Q{8U`UYwSiB5c!U+Hak zALCND%TlQl4%sn=GO?@g*7~iRp~TtIG7h-Vn^b)VpmY2Ub;2H|okiO?xd7kK^Q?|M z@xmId4HokmD_5&~{;Q!ZPA<2vxIDkj=5JKafyrgj?He586q zjLOaRBN$)1NWk$D@RZqWQuc6s|ydPQdK^0t-jD?3(Y zR;*n)IMlv8lU}oGu&uqLV^9^PjUOmWhmZ`>_pbQ2SBqPN)J?gpYB&kB*J!}H#W=$# zON%4;H^H)MN>CPVV75xJ!*q37o<(e6-8!x;NAL~IT$yESqNsi%**lg#`|5nULv0jN zq|ncZHu*1T3d|e_OwjUJGw2M9Dckc~&U|8h@;6R!yRPjRTD7L5eeKF@+h9lA@>Odx ztC!myc4n}xt$kI;;0j${mJQmTCvXi^C*`tJwub{G>Ileq&9Zvp*&c8AoiaS5AfZO1Tl|yaIhgP98T%*g!8J?83hNz!T8Qzn<)58dK zoPcx1RKOVtI9Il{+pF8xw5_$<@MXsGp~1DwJK9#Y4|TNJL+z_quGJP5XM0NA8l-Oe zc(T252iU3>%yVqOImR4bT-iXt*5Zx+|_JrRS>Dbq6z&VQcNr%8G` z#^ED^Z5%ADcLdPRCH`1xPvldjkMl%qWVYD*ROu6(Pm|A|TbjlhvOl;4VJCeS)OKXHXPV)SpG-iqA2TrpX`z%T#Zk(WbML#OE2~ zoeJZ%M+A3J=q4CvE_$+4(V?lj&`)1|B2VGPa(JF`w;C#66W%T`q51FN;uENjyM553 z8VO4ppM~CsN$9=!(vKGpBp(x*N7h9rF$KL>8|uVop#7o~o`Cj?28IKw1;$8dQL(|% z0G3liqk)jphJHpg*M9+@IEl$;WoqLN1fuIcA+ep zEt)d6afBqr^aL}uvE%+JOEcPhuhsZGbHvgbkNBr7t)ZozCtA0LG4_OKmqYzn=x3xe z^Itp}y0yk9mLta2_`LGt#Ml}iTl;}vAckyYUf3@hh#?y*+F-X9oly=cZRn@3vXQ5K zi6K!ZFSKcVIyuB!=x2mM|HYHR+!~)rj+mP#YNNA^dwkqPkyGa8>#ly)8&w#NtRpQp@AInJwT@E0%zRL-rOg?kDp0>n|(7*18w$7;mIrYAeUz8i*>XYP5lB^drU*Z6J^6kEwvXHEvuQKLISn|5GHc zc!V)G6%=7&S#CM&8k<;Y1~lco#4?t zh$~qyZ+5C>ksh|G1r>sXrHkQC?flRlTqrb@-;Imt3RGbwcfO16H_Tu}?%po;-*P_f zV*eeUT=9GUEw6)|M1{Zs3C1+dKQP7!2i^COY5tLbyHYDAB|h;dl!hMs8Hp?Y!gQJ@ zi3^OA0Q~Lje`Tb9Q%KJTgIeUW@fvL@UCL}IEhV)e^>-!`zaVulN$F7lKuY_U3GokL zh4lW3#1;Qy9%Pq7RcArylWG3VApemdsYf7-4K*m`2>g%qL}@yq%fbDa@KA%cMHdNI z?W~2X*9Hb!?P{h~p7A&^&|+My70R-*d0}Uu>U-3sGuFuEcx4&ojlwprf7_!kX9}=k z4drnXcD{s9I|39G4=n^dFraBv%QburV$d+be1q!McRNnQwJI@JoO<>&o%6|_4!{$x zCFS4pJfukr4f;Y&U|Q9Tcs{!CCw-a8nO&*VC(=@47D_=MW+QRM97fSJF%;mFYOPK+ zoy&+43eh3pCD0xN1LS@W;_R?@ka(yn2O}Sv2nJPPgzJ#xRFV761j=_^Fj^*D?sYTTC@)++i=t2U-uBlhY zF@i9`j_z*}wc|OnD>d84E>6HZ$oE7fuCN%O$piomVomA9Nes3~fz{E8lQ}!ggTzB@ zEJl8ePMm_*;N(;!t~iZxNSz>}rcRJD8R8d9WWm$9;2E+YYn%b(RfCj;K6hHm&~(cZ z9d}085=UB4i&we%W`>P-^WUa=wEzJ1ip3>bk%`(ZN8*Y$MkQ-Uj7V>7-1o48!P+HQ zD(|;f1Aa50Fs3`yUUM9u3AOED!qFDgYP*v2No`j#qpKC8=k7m7A$$^osoQIqN|>vT z?(dTD*K%f8>Wm4oAUaVD&2lCZS3HGrG))i(I3+143t7jQo~kg>weVxK2f2u|7&Kff ziIXaJHu9lWM+1}LLCtm*>j8pFoP)#_8yKI|En>#B9P*o;fZWKCn?Y;{?63(kNWE#fda4s!yRnxp)#d^N{-^@X|C zo^s8~Txo)odA!7dD4>97DLpEX*FNK> zXR?zpwU%+4fvV8&R0YNy!+RhnT{qnn`nOS6DM78_7GtQ1JPJoQu&-Rce7S^IV8vLl zcANpZ+JGA^)}Yn^)eR)`)aAqd{@rHl^xe)9fSS90t}f1tdFynG_$AeQDOp8P-H8oW zjAp8MWKVy76xLgo*ArLEKo4fQ(MHlG%utMACQ5z^z{gx}-ilfNtblo1 zhzfyE7=Toe4A-nT!%ANP1 zN7}FM96cCy7-qz=ooPjQ>wcJeupOK!?>Y1s5lOs7cXbgGS3HeD5`N1M$Ko3>xN1;v}{%MgBPP!esyfk9|m7@pQ%~yHsMvj2CDC+HiL$`X$-{Mw^ys zc>vll3Qsh8NH@s1G7^^@(q;Ka{UIH?2)91ZD)7|F0ilDZFd+V@_2U?9+WHrQte zd+b1eEqxgbY?6I7g_1e0VpKIqiliEO&L>kU;K>!2^Y11#`^gqQFyM2AO2s%6U59Wl zlGs;~pz*1tO#3S`gW(EwbpMEIGs2m2G^-j^l<*FkT}I-HQ3jBsSp@(ZRCQ&06$TRu zY(5ktSbdVI!?|G=BpTwPihP(GUHalnPSo%geC$Nxid~FCS{RWuEv%U=Y$8$?yCv#9 zjQR?RIyGT5K|x%}$o48^G=PmXCdtBOfcmm{2J#^by3a0P9pahDfHi*-9{*g!2%oDEo(IPK_QmzuEs06ns#bJ0 zRC*qhh#x9FLMnDG03g==$%42JIME`{N8*YXFbA?lsM_YJDn}mlg$(v036{!W80mXZ z-Sxv;G(0YV=+p|Bj@2hPDri7O$Uo^Zfu^ED(LlJOg2=jKfiXq`y670AfHB7aDpLoT z2$akb09o9NS>#cR(;odLoKGJ8dTyeZswTP(>iR@&BA5s1o7oTCz|{(ip`-hkWF9Z$ z%wRw8a=e3jzXFLXUdaIAet-m~`hiz5*sB#7xi9nszFt#9yoNKw94ssl7GmN?N@XnQ zl@zbVOK|ZzB)Cxve=*g_i9f!E8N$UYG}*gUNGKo)=?i>qMo~~ z?<>c2l-ggY?(`$fYJ7M4J2KVV0DvZYJXS?~6ud!iK8C~ll_vNB5)T5I)P9!2sfOcn3rLJQ7#j$pGO1f~2Pc zh%YeM7Zq4+0P!Wx40EusKv;;0FH;&0Aijc^;Nq)DTyYov>HvZWn%#&WK-?{he2t6T zBZ~wA2!rjfGtj*Xs0rGVg@n_HzZE}}D1XE#e=Jd^8ZI8J`cD|iPZbiH?C@v* z$>%)6IrVG(GvuSzbWyyV+7>^@8&vogNL=wtE-oufq|6GRNEId@h?(g+3k>2{64|dA z*>5DWR09RQO6q9mw~XO;3d5lo==%K-btLtBpg5K1aA*9Er-5FlPM4!Qjkx}%ZfBzl zg?gH3Hxu8-Xz!}Rt>3e(;=`?flVke>0MPVPvUGNp1uX-bX8%VB2UhSWB(C@~i&9zv zDI%-@yN-=rA%9`8ze=#wEijDO{yJtlvEB+08hzi_e|!`1!>yQ=AGnFXG3!w`p+l3u zb3TP8k8)N2p{jb-ByRs56L3s+4c<*mN^kA^2W-Ax_I#Ew$L zsH5{5m;0QE^=ai*PWxys8SAur7O?U*0RrM}0JT^MPze4QB-p^nn5E!}OVfu%H|QM4 zWsa9+QkS3}Tg#)hA~piBiUlvt^rrl=@y5co?3&f=SgnKkQmd1*nlsiS8Cf*TwQMUp zXgPaInMG=ovA^=1J6UfAK7k2`bMuj$ie{!IRgY>SRgb^hA-kbZcUl;*)dviIwzHfwjJ6SN zc#}NUo4w>uZ)#P$xms?9-w1x+Ayxo5oonk8?Rdz|OXH)Qo`uu(rzahZoW9Cgi6>XA z;@?fFQz7OJ-t_1OY&in~t6Jv08379rs|oMI0@XsP6n~quhA|mzgNGpPwN#>OBBVM| z0+Kxw3HC)Yfu@3@Py9=zpeoQ{qmsh zeiaOF(>LpqyP%pWIrFzT8<>}foV{-cHgZ0>i%ocPMHl~WN^RIbyn`c>iRnzvWeO3F zNSx^V&*R+i29?ctiyUoD2p$MXIkxy3Le3OmXRWcX$G~*~Nf>fEq+EE&(_Mb}159T!z0|V8pF< zfHaCw4zP~_pY8$1e7o4snfP{b01qkLVm)mrkGpO2SI|c}{1GF6EhN&&Ha=J!#LwiB z8nih8nqg4sloolGp2b`FnWBv+R}As*CMMYxOL7|x>BiR)?m4;ZmKtBBoC5Qkv6HEesnT9J6ppivmCK|dMa_Ncs&+8MpdujIz?2+ zQ`P5kKB?;SSO(WB8SHqBWB?XP*rs-0$0Q>x_AKG1e?CEXrM5pd{D>C-J#^%SNL=wE z=A`MdB8Iw?kbN6^F;jhsqIy}#h8oZhQ=P_D4=s9Sb=Nc5c&l5=qJJqMAo|CeFL49t zpbcJz#1$`Rwxpese6*dSGnW6)oxr1#S1|M|edwH}l!^}%cokoE-ADC$!mzMF zoGDg#r11tWW3Zw|8a|bqs6K*B^F0Dnp6-9&m_fmNJHpUp`|87r8Z>NG?lOg#Iltk^`iNqDRFrlV`;)CiVYeyl( zyBOr%5`;qtL(UvRyod9~2_f$Bn7)<4DTH`0qkf-6oyw7?Dc3|sPNxhE@S#0eug?gZ zzX?ef9dh-0gKtG|U?ytwxbaHnaGQB=T7%@;ON)wGRkAk?5h+=Na>z z3NuX^*HbIqbjs0xfs4dD`un))z6c0NY%HAOOMrn8zl;QD@i0m$MB+<3X%42o${=@1 zkQ6P>Zpq_QFBMOdWvJs@$coen5l)T2Xd9{(tzx=X!s!I~c!uw+#KIeW>!$2TMn4)? za}kIWR?Nx%fmiB>|4u*Y)IZ?cc#38&P2k{T{&x;WT4IlU=2z#@$87kw*SZAXmk}5O z$ZE~O6Fu-732r4vF(+$h`*BW${;`I zY85GU6Cd91wFc?Lm$tKuJ4f(i0;E=tNh;ca!OJRDz7M9KbZRJr{}|0&8t2CEX7vv{ zDSwvyYn)GR{2n%!uPbxe1iRiZ<|6I|MtB0UM$?Jk$Alt`_1w>%;2Q+pmD;$UxDfXP zAH2plkzo4@lWy8?*ikzYo{SM_O!@$m`L-hSQh1)lYD^XM7|}L-tTaQ}z<8ok5-N2Xx|m*j zH>PRJqxnpy)hX3)9}nMcBMs0{2Fhr zP0pqKv>3Ll;x~A~OGPoFWH`C)jWIdZtoSY9adsk3P)r^KEcWivVm_0vUYC<{ZR<gC>#P0z>OQ?`PhGBoeuMEo7s`;YRBITAZ74s!KA^wOw zNbFBYu!9SKu>wcyL{3TcyFe+f5!`3p8v@6DmV=g zZ-{|MDV57+KF6L~iGLs)D)3JvI0+7a^(qi?#iPRHEXl9We>DwTSmk@Ql=S1~s%*9Dp~;#cI(fbX;ZHI{=X+Ck_NC&r;36LvAk5Qnh+& zK9fy|VrEV9%hOhK8HvHKnzr)ECa9F$ zchL})g8&c79gGB9l^A_fL6R;I<1&yVS23SK4v`?KR_rL;`oFZ93A0gM1IhA ztXz2)jUtr{LzD7m6`h1S0>+A;{Ia@mLX4Bg(KV#~dzN7(90c_q2A(QRka-BZgyE<~ zLmCsk++3V4S@NhUItvho0@AR?1IyYw^BKD(u>ki&U6vyz)+oV$c?~p8={)eU=xtw25m7KlU?Nk z7G<K~=5PhF&` zh1B^R&3R$1kx0nHHX$DlU=E6E^%V>84zfK42{yJd0vQqzId-e+kiv~9wLer{90$ap zcsvqUoPfV@~jQtm*fQO?zUQ=Y}#$IPsXS6J; zEs2ZikSjO}xow9^VS94G!SIIHpOEGPoD~tRUnCZbW%Q)%?{Myo? z*rlC$Q7-Y}He4RDPo7GlMyBI)TEt0^McCggV)=wMr=w@J=WkA?QeCMj0k(+65Cs(Y z6eQS>$dYR+NU0V`-DJN=Tk%d~kR=j?7D2o&n?sD#Im3{;I0J8z2j;VFVkw?Df>?%! z+#HS|)_JYb%q1y;Xu*>!TKRVqpGvV+px3L^pw?B}5zDFg!UAz(Mhk6Rz#y%n1)szU zDk0Cg2x4qU2CCnI#1$(UPg6mWA#P;#X$@!a7K><9rI3 zo{A@I806ngsbv#nAMHu?SEM;$IGa&LNcTW?aQy2Dx+}GGVsykgD2A5afW#FWnL^V< zk$_jKtW*k`^xMSPx)ipvz!Fx)8$4Y+p+VI$1fM9brJ<&1&SlK;Q#9*Y8s`B5(%28A z#b%&_gw98TeTGa~_MTKrt~2#Rq_A5Uq(_4AXQ=AvThdqRQbu!o9HRs3wEW(^4Xc@( zhoqxdTU4+y7kgR~UVw=hn>#ex;<*ebniX*Nwdz~2Z)y~rhD$G6x4U?@rwi7PJRl5!*0cqPFWiAlwPPvi0_ zRbGB9<28}|HuGZ63^OgUkT19d`Otn^ru9mSOYsuyU53OJeT+fsF%g6wdrPi8D7Ig9 zQ9NCe?q|{il5}dnlkvnz_DF6h&GZHpJzB2Tblp;)*?t zMrtFGHXRG*jQG^%D;V-h3F)2MEP2+pyO&{H1#=NfHll?SS3=!(%9x+Q1mlf)3%A`f z0RcHYb{vVTKmqc+8VUBuGDA|HBonr7p1XfG=RZg0r|87;9SAe_gE@(7fK$sw&OUPd z`CKLy){u^#3s^4Cqe5N#m5*zI5`wr6i7TGZ)SC*5IjViY)4hP9UMQhbr(!Dj0^0cH zkJM>EuJ(ong`}KRi*;UkmyM{CCK~MoZpN`iaSzQ1V5mVm6Y-=XGx=p6PY0-=48fP< zlrwqSM&g}nknk{{vqzt;%g8wxl$kWZFO_)Sp~kJc4S0I z1+aC6c8AagIFBmgN%f7qlc29dDFo#y4;$B+C@9HKkcljg3eQxT4U|%VG!c?WSFu5V zl(Nd0;J}_}64i*cE0@RiAQEsUO@z|c&a}weIH?(1hQI>0(TvcoEY)0Mu&ho5A4|S; z{+{AolW(zTQe^}oFXnvp9I&hscp?5#HMBQ{+OblhHVt_`gxsnTWItksKg`1Jmsb2| zewLLW-e|v6^gMNF7tO{5k5gB?fRy(&JAKrZrjLHAm|o(RBei6y@^R??pa7**%uiH> zUEpS+>$f096jsRP=U~{jqbq);JaAc&SZ7^oElSfwcI%>L)*{i`az^VS`f3dST)*%1 zu9kTb+fc;Lz2N@EoKIcnOW5YFS2njBn>(g#Zp!9-PxRljIdoUl0hl4!OIa-=YTUDp zyQ>>Gw=4BY^qWs?r4=tjRnSeo9EmGl!S!l-64VP#O8!NKv9ILXy-L-NmN#?uXcE<7!iAA2mQl~_)lJDelx2SUTwJ-bw-S`)b z;mBFMi-GD_^xeouMM+Q*4B|b=L}hP9;)?e&CRtfxz^v>N6z4Cy8;BUi`y|%)Gu97C ztf`4$@Pt9*XFAQ`gN*7!5*5~EQ11`(k9ubps16j)@*{xb`Rv;m$44cO)Xk`nI^Abr zV8UVTWP{p3NIPyoi*Obd{TOo`ZD5iK^#-?dJ_WEJ#}mF@;onVsHp73lhG;dCu^F{| zl6eX9-qF*?QOl<|H+U4&9e4+g{4^3*e1-wSCp=O$RX_S!2K$@>qvL*!#w6i=p0mOX z;3P`CC*j>mspLSljramyfrBq1amAPLSNEnwEMgN4j)TOPCDyMn)~`ye(k2?j0O=YP zzl-tQt?Jv~Mw@2Na^y!H92EV_TG~6;#cReVcK_&yEeSf_?`OkkN#Qi0`5h zg!nxquJ}IFkU}KRAw=)+IIL0dNi6!iQ>x*y{ORd~T=pTatUM1wZ=U0o_=hTMoeu#IpDBmuAgeO{*r(Kh`d#lnv=EAfX{}Vi6e=7eT>x_p-00Hq4W6HjH z3*XPUU|7jaQa`5>W1aEv3jjb|zeIw~sEn_vpvVz-EU_Fd&i|T0ej`D6ao%8u7w3P= zdE+e3f5H>P?*PtS!|xgMA0+0~z0fIqQ>6}gh?`yWcH`trnPQFBC~=I91BIp?w%EUy z#|~aOv!c&e$JjCS`99C>H1hd=-pM$)sH{3%#Z-;?wL;v-`}Kj*dL%&Adc6AoN3L+B z^}MN(KXE?wEPuum_RaF|rc~{JB_Py+n#$~9{>nT>>d=E$hI{`TL3gF9|09OQ-$5VB z{U{Pw{DWC-`k!$F=}|jMgQ6A1e==MDQf#FlB=d8Bbvi(OjWU6;cLnxR7gjf%^1T0M zlJTDR4sN*r00Is7Sn?#M;R9YY&U7R=&JllgM^AE*j#~d^uY4c_&hP<)d!uG@hM|dK z7TzRV_4F>hM046Zs*H9;$Dda=8>M(3)f_zJ4&r@OpYwdyT&6;9oM2Tj&X(~J5%*4S&U}1skWjghFjMAux>OXuY=2MBTNzpt6MIrPB zNN^q`Q)((GMyN)R`Q(pLe3}WeGHzkQr7nCdstf)|sHS5+j_F1C>p^?KF&|IR zU8${)0W;zR;D(Bwhy-_MGaF5h2_@8;Wa~TBlbGZpMUqZ5HGO1I3CtYBd)CzfEn?+D zPi7+VF7!(*;>Cb~i1#lS;uK(oa8E^o>%f@_8QoIdwY!u@n^8P#e4es|ff2Euj)%hc zFcoP;tY_dIMXW2tQatI1)%I+685btE*Ni7uwD51aAxZC}3`Si3DFC7sz}U%ptm)*I zGlHmk`Xt+^l-w*eE`=3 zVp+rBv|Dd2XtT9W3z|4 zj=7_ax5jWNnitp<%>g`b6|^mTcbYb9pj=vHa`;{%Q>}@{Z+sr7f@DaZrkgyABt_#WX$}>(9~IL=c&Go)3*zDA36* z^0wie$&pDU-tvYkPvLwTuB^k8E1t@~n|NRKevM?n8pTTHP~|M972&N1aTbOuXLD}& zyyo?Ii-_+WB(B)NAkp)hsVZuvVj}}?Qh@SSNM4VVY8nj7Xyu}dLBmYp_-ni;w$7zg z-U?XJ*Y~&)A%_bYjzZvVjAXk+l6n|*@|M5+2+=e?-xzcNskT(M=sp2^?9{z5 z8_(IgKG*|z9a1zL2u!p1mm<>*2|gzY>AJwgq~lc5lO0^&sGg8WNl%iTPlk07o?P)X z{@uhEEk54l1KXrVG;Nbk*;}HHifHMhb0p+qMuBbfV$Kb&AYOuZ(E3Y};P7n*2(KWL zB$QqDG1$`;So~$<{hS*WF`*$54^SGpY&?y(;A0SpD>C@2t&d2W*4Iqd7t_nuRZ5YS zsBK0)BvDW5vT;KY!;CDakjZ@&A>Ai+%QHZISrm{DS$#x=f#V%$-HW}5Or!>rKuy!-p9toD(iTNGhz3BJ> z-j^mDaGzn>DVF=?U>MWY{qibVBizIo+IP?9NOpoF=tdMNcKmG8RN+`)?5yI>_=|QC zm)5Bv#c{f5y&HD{QvcFjKhx`gq8F53!L1OrQr#(B$@$bN?B!N-RjYjkYWyT>HP{hp zrP-f6gKHX=Oh=DkJ9;MP2K$q%@D5gRH4=Ql!T{m^goLR2lV>y7a}*f4!N{fM*KlT- zg@pyeLfy%8DGgr^_B^}<7uOK1A z*%)lUh=E?LfMj@DM}y`5x|c9${YqSqd{lx?bE<PTB?bV2c2 zyhEj4hXjXtGXhyDB4<|WM5@%-vw`CE64@IV*-a9eyg+m8g29Tuk&EA~ir2YO{Y{)* zzpigaKI%$atjrtL--6eu?pu-I9B;-Ut4l=9>UN@FL)V|jI%Dy6N#`9*=be&HYTs}M zg>(yJewV@=rw#Asy!sM)5Aws>a4X(HJnuz<3+EYu6c3Rz#iKtad_O~eKtg&S6G}tX zk;exa=0ghRdI;9|R;bV38JNsP~zkHZkjgMb;vETg&ARxQPV_n2;;0S{uWVnr+Jk!h-uwOu zR)whB(4p8TIiEtYPqFIUp;YG%*!5VU*b_l@;9|)h%=qimT)nV3I(n{VKkymO4aQ%e z#XH#F=a67OF9U?*FOr;!zwTtPFDS6s`0IBhO1wL`;d=rmg~yxe8o+Fcr!Clw}nk$y~!8>=8gfsiuS(BTVr#2nVM1 zb0n_#1xu{YrwR*3}E8VrEWhInBGa8V4TG8dpnVU)OmjzsftgHQtyN z-ncMK-zq)c+AfV~f6c;-x82K#=|949G|AecH4MzSy5kA}iX`>m){GLS< z7G+1z%h?V5fpdd_%pdU%+W#jcIFp(I!hsA)T?I0KVX(g{u-HK6Z=4xsVPS!=P$2Vn zO2dK7qj(7}{(;05|HNM%$PhuZd*kmL>$I=z*cEsM|L;&Wwj z{$er$3Pmugk>COcsRAc+HO4VRS;2$3Nc{@VLp~}{2QTTen@)=?dlGJb z>1da5MwtA<0%4#o@^ngNPr{|d8F&HeOOd!@8UE_-kqDXYlqR3`Ox-eLw{LhWm+x|E zZ=6NzaY7LWGD@mpH8LcNU?awzyV0=l5FV$FCNL5x? z+xta~rQ#1$p{)mB6VO)D~I?89Nn*ljJ!lEx_0s7M-t8T*OhgY>0f zw6zIF>?p*iMy#!#O6g`)_Eu#C@%Hw9ZpIoQAi>5dh@B__@$N$6irx6D#Y;S!7KaUQ z{+S)T;Jb&*Tp`QwxBXje+(ot^7cjWyobhi?Hf9K#> zS4>wLySTlRswJ9CwTR;~&)?4K&2;Yd2B{XLV3M40ONFgM&)oGS;mlVU+!4Gd_=XCZOLvl(3z zkCP{b4izBTDBFGxBfUl;m5WY+Mx$WixttxYpu|Jg{XFDDH)+wyC@ZeTYw&#?5*!Z9 zIHb!bqNaW8jUq2#$QMdTZ=;ChRvX-l80N(a<_wTDKRO;;qjcLTqk9P>i8s32xb3b7 z1S&Q$D&nOmg?itB1be`kh^#m9E)7o~k0aG6IbYg@+B<5CmjjRl{|YYL+LxSJ#IeW4 z?&!3S6w8z!=xwvi`i&|QH&_VnZoy819VV{>oU1>#ji7^mg< z9|FIcD3G1J1`n>d5r3t70M*y>k4SUpj-s}H9Tn_KZGhl6*67|h{-8wUz$s73rA&_PzON8*Y%FkvYx;!EmCFN-X9B$&O4!QNC7Zqx92>#b43k$>rwZ)ex?c$k+^WY)`>TiuW41+n8Hk{iUqOQHBlxS8l9=+9643>jCSFie()DX-^t6hNe5%+PiZ&2nO z1S@ndyd&<%&n5oVszbP^t%|P<6Bp5)kWNB;6ZvKFE&O%G0|c8qOe+_Ekw{{4#J7=y z<~W>AI2YM|^K>ln9pv>U4;Dii6maZ*?D7)d#k=Hjv>nXBey}PIkat>e?D|kkSq!)4 zsw2f#@jU{W3oXjn^yQ=YK7L=DoIh%hQdQO6nc_i4J|Evw=STZ-umOFM>xhT=?L2&G zYVi0lA)JYPu}A!Xp6B6{#^D-1gG50bng2t2cYs|IKca`Z_#}tou#r*mWBjHHa3l3| zmm_|Hciqr@R24UBmZS&yDFY^Q>0(uZJwjkJlk*gRMVz${gZ&x7#tk3*A}ML&)a z!&Q3tG(!H&p<^iG@#g?bE}+UgD3}BNB7`A+L9b_K?ZMix_$6UVF0e-iZBm&%h%j?D zF7Evm-d~qIzFe!0)~faJ|C$iZBGxjv>X&}ZqcM4@HqyVFoRIh}-l0_w$<{_j`#pPh z#P9GPt_k+X}^_j7(O1)Uj(>)N-UK z{=u&o;9lc06q!HxM#tocfAagoNP4(p6*sJ+qEdwaVw?xbPN$!YMf{tA=aW4ciu@mb zdq}9o#I)HE$;?`HsCkW;PR|L2imd1Wyy#8N&zHu^L9UiKxAVpBn!XyYc{atQ`ZO_vo5 zk$Ww!)=uy8ULAv1u+e!eOV6txOSo%;$s@y^x(sNJqe6TLk0Xx9Gp;(t-z6Ld^1+WB zu@qVms}vr@Fr@GR{vf8=fe_|$8RDE!$WU${{h^Q>XWMkJ9W)3SXvH&XKkOGnI_ zHOp(+O+TB`u45yWFsS-lLlF@z4`7BYb>Z_%ZS~lnmm`5by3~3IBz~NBL z;ZU2y<<5L_POW;JS`nHHDo(9lMe}OEakc+oR*z_E%7zwKLW>7P>Og3btm&B1d}$4| zQY;$fq}hki;yQBx(nC&FaAunWF^z*tTR~&k@f!AU-LDK+>b6DoS~J|~`NJ*pT)Pqs z!J7WCMi}0cri$bT>R@wzU`?@x)GBj83!)A&b5;;gZ6XYy{zD`6s6keRuZ(eX!35lZ z*j9%jQw>{;>#Nn{=KMePowFl2uvxHowg6EEbsOrc*wymHOj+c3bfnfg z1I_`yv&x(wlTkws#3&9rtH+(g$DPB*9b;S#4?4@86}EH4xH@*wnePnPp>x#eTn8+f z2lk~8L5_>m@jwH0xWWm&u22i=c21oLrca90W5Bco#TEq6Rt}(t42qK>-WnDUoXH#0jpbXq&#YOAd;{u#6oR)zAYO-lS3S8m+p`T@*T)b|2ywjWeu@)6N18F2L>OtX8XD zt4N2ye1O+Rqt=`)8#qHd=|GwL-zU(u&`B^M@oQybWtr}wkw0DB!<^9*NX zuSPjijBbsd2^T#pQXAPtS-Yq9bx|=?PHlpFo*k)C085|I2`Vs1?OxwtO>(D1oj1x@4`rx zSiY^0?>xxota4824Z~mxkqA?OJY z<30Tq1E3?#si%NiIZ~G-)T|zA3jjP_s|L>K#Z2*HNX1=jOhQeB6An|UM5>xlvGPU}?UxHVGm zNaT2DZ)*idv`UVFzU{ZXreB-j2~SO+EA_By8-B~0ZeoJ7*6=HiT@5im zpOWPoudFb4@_kH(xC~Pr&W zgYJvs6n97JOY9UYx`GbV>?T$TGwRD=>#nr=ztT%DR{vL_{s*D*H3<6kNPU9^Wr}yF z1(g81CsN-`c>Y#z8wE#r{cHX@BT>rjQP6;{9%Yn7A@FCa9FSLI)XPZ zxX7d0rFvx%kHJ_Tkl_KAQeoF#0Thi6NduIux+g(oH>)iV3k_eet$Mv5uKGEoyDzP! zU-ZfnYw4HJ(!)@KU%^(tj?{11RxHi^XC2M8RdkDduUu zKxV0G{%HXNkEE$AM9CGGQw~W)`wDK}jY)IUJ%TI}$i*5G3#vmSS|XWjlLbcv;T-`H zWSJl?*N7z_f@}>u!q~x4MK-pW>>bEuh8Ck*^S2u{HWb$SoiS~Lo@8JI+76`9m!XiC z?nX5v9;MpDp#Q7W7$F9-#Vpe=QfWU^xFxT1rllAU#xU>=gjJhVTi%Z;$VK8jQJR|7vHI!wUx zrTx0%t!nwsglAEeRx^0P<%ZH`I9$-O{KaNCf`LaKl;n}9hMJB-64B8@DDTGYFjHwY zNk|R~d75vh5cVDIbk`k#eoz4r$!dd`P*G2L-Q5MFuIjOgt^wuz+SM$C4e( zz$0B`jzbZoIUY$wCkS%hjcIe^J<^;gkSA$KEzM&jlWnsj&B>@2X-*N`$7vUAUjnMPSXfl?dv6zl_d_c z4N}QLcDi7mk;Xi;Kc>r#aFCtFDF@j`{D^3ifagogyMnA~2h$#Hr?VNj;Bqr*O^*sv zmb+Nf=P>ZdgAm+|N~mZINkm(OOx}%KVTRHwk^nnbAkWi~S~urQCfj-;k#H;OMZ#@@ zYieAHj4?aJai}z$xd=s&=3*ofJxP%BZcLjS?~&%o z0y(ZBwKPwWOt#IAG-cF_G?xgjrEyC)z+PuGdH2yb#VgdlPcphXoamV{9VE zDY)EP+HAhyW|@r57BKM0L(>fb1BLBC64A6!%e!%7%wAey68bv@az;aHO~*LYo!un3uh+P;fZb5znI^q~Aqp%~E7g=r< z+;?c)(#f!YGTm-rxW;iZhGRo4Zp5CzLpX&^*?(=XZ2cm=lSvj_W+pBCyM%O>lUVrM z7=$s>2f0+ZXe;4!|e|Ii0GpNo-ZBR6>fpeR|;@2mkz0qF=oN#Hq%=DxKPNl8f*0v z3_P+Y)ISMGDDP89BKow@%)4=u%xYSB5;k`V&a#A7+{X5f)5r7xirGJP3IL|+m7yc?5e7J6j* zsz82CLu#46E}3kz9hts?dXecK!TqMjE!7~?W*kglVAZo)kxieIbQYkMx))YuMvQY0 zKG|4nOyH)FgUf2$CC7uLC1)ZtYh_0YhbaLf5nI1?qZLxi!)>M_eT$hWxXgZ9W#1NN zvb@JCyO)7S{*M{`4jP3;zKbNH?+JT(H|Cxdn6^kdM87WxKhOx;Fh7(`R=7Ase5u7hBOIbX<&;D8e*B2&X9Aut9oQA39wsd|rbV*hPCsXqg3FDi4e$#= z&GHx<;FkT3r&94+!LMHKf+l?lj6_Gf|1l8r_C3j^x|NTKmpGhzm^NVCB=K*3P^35ESN1w?wH8gt(iIIRQ#AL<;y zfaZX%q63jDAyj4!Wv-R+?bAcr+RHOemKSECjNotNsDOHKauAY;4rXAu%nFd*hM?_S z7cs=6i1cXAy~643(+62h zTXmneuI287pYy{OZ)me0wfCxVJslTIEletmt>>L1OKaW+m&rkV9on7tg%z_>xN*MIx?FC78xpx-(Y zNkm799`kOjW_C$E>Vy+++$kI_fP)&av^r6$+$GEO2o63;!S^OUhI@(Hu7F1b@=O2_ ze4RVjif^KPtmcG+ytae@Gzr~ymY zVUjY~9+21Q;nipluQIXV(b>W#n#43;FX3P4GC0Khj>erUB>JjWX9F(rnkx3(y%~vB zCf3Yxtak6!STURD)+HjC!n+ zqhib?d3doZ6)(i8?pm3R!r!s8tmne*Bc+@yx8gwuH?UNQ(Fw6I?aAnZK2bic(v$Ia zt!3aVs#+s#@Z1$no{JY;`W6U(SJmlCvq2%Gb?eE#HdFT>WFR|D6xQP@Nm#5$y@bUE z(eLSd^$XMW)i0gFsw%kbi0N27Q&iTY;n8C_7SCc}{Q=ruca7I)+FfZQRD%v+6OxF| z7A5B0SjX&)*$!Y-0MF5Yr6uv?w(CAsax=q|#U$<-Pw873JS@c%Na{>0HB?TnT-B`^ zn}$v>2JtNzFJU_~Nj?%{bWUb&U$?BDGTW{FT}564zAf* z?Isi1&7!X!?@Z!<4D}NKTSUF*#_Cl>s#Vq*>+sR~ zx=XNHjo(!8XMB9euH;dL)^z(lg-eQb5eRhl?DTf##X_{#fG4y!T(Jw~B6~yc68#s0<)%G+iRZteDu* z5OfcPqY2=|jcNZh7o}UE3fE)LtID*^`Dm0Mr6|oo6ZkC!(-t+!M*S{xA=k?*3^a*? zk^!)Pr(i*9n)Hq-$uyMcGN+ybtDlr@E_ZyuILK7Xi8pePagj^=dv}Zh2Ji-E|(@D z#}Jn)6xjNy1O1hO%hqBBh|`fhQWE)qh1Uc~A`0;z4Dn8~%Phk0`H(;}Pdju8Vqiq} zjf=pW7QCGrPnRYxhG^kGrf2Sp!@j1^M>;s9o&ornxj1>t1Jd|(sZe?<{+kO>AP-E? z)1)xs!e#zUW5TPK+gLt59mV7H46a<>^)`smyG&{?=i2=QaT&KwUM{u(9U+ejlhqe7^{ zR`c-?o@c?zqy210kzNF<@RS!LiRdNx-}W%(P&~}ppdD>Vx31`=8i4(Q_XOcNFGI3hU6P z*P#X$+Yjw|RK;63+!x}q0zTHHn@~4qE~3c_5b!QeNOgKW%FI{jQ|6rXMu;!AMWUTc;4n@_$KOmC9X z#ev67wt2h-h0bN>Vtk4;72@Cm;JA$SW|W$i#^UTFDSNd5QdI!Tfr;M4aU}%rZP>&}g zlFniW1}_s4y%S*OGG^NcqQf^Mp#pjr7tgEO6X6uy#+1xuc4Gq1#`wVuE@eA7oTPW7 ze7AWBX4LqY`N8PFhY1ZZYn6cB%bCUe$V@YAly`FfMejoyY`L@=Hd^JREAZ+4C`Ye` z!K2ok^kU!-Xy7G0mhtEcy0+Dz4+`u`Hr8Yf?=8XR<@Rwl-Hu9g0qTa1JodyYeTcKm z?VUBejf7q*^kXf4m`Tqw2lP2CeMCr#rQy@Oca8N8-65qbaY%1%FXL<8TD^=BAA17W z2d9ssa+i4sL~SJ9YR7rX_<9(M{TP6Dn{)8NF@0Q!X~A2*9abS_qfVcY;$;|2aiONn z&#VxZ6+V4Z%2%-V@Dh}~cN1&nQ$llJ{g@GsG@IM$(*nGNqaf)#e7aLgmu4(RpFy!X zFAOG!PNC28?_5lZW9M_4QmvUbGTp^s3k7A!uT9bCIlr`wy+S^}hOhHsHhn>G7ovY@ zfs5Ks`XYmIoLLiPc^iZ7M#<;`b4j<8(w7);p1JKzu=HjAJwJZQioSvzUNl;YUNpcg zk)sfb4d|;V$INER#=v5+t-gkWF>{IdRY!|om(oQ(t~CW^72@qHpT2>z-8`Xcb-Iju zP-YtKE@OIny4ae*TCXWxM%CUi3}}CtzR6%1OR-hBN7?jB6d_O-i$aqQ z{l_RB3n$E#*-3#OQGUWmv*bA}`YC=#bU*$NI$Q9<%5vO1SmCS*%@tiQo9U^_&jk4A z_>XVKkLKa_7lMf4w(l?=nhV)vH8Qxjg#XU+ae9E$11z*# F{BOm2Kdk@& literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/openstack_compute.doctree b/source/_build/doctrees/openstack_compute.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d9e31d8531161e200d149c5581012fdbfd7ac86a GIT binary patch literal 96682 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 literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/openstack_environment-database.doctree b/source/_build/doctrees/openstack_environment-database.doctree new file mode 100644 index 0000000000000000000000000000000000000000..bd5c92e97c20d924da6086af58daecfc0a41af3e GIT binary patch literal 11047 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 SKHe|VLwJbkXZVb&L;nZ)?HA|( literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/openstack_environment-messaging.doctree b/source/_build/doctrees/openstack_environment-messaging.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e3b4a200068150e0f57ecbecf1f32a7f31ee1a42 GIT binary patch literal 10243 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 XK8vT>4f{v2gdW95OrOIus#X36Y^Nms literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/openstack_identity-openrc.doctree b/source/_build/doctrees/openstack_identity-openrc.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c9b82719f0e6ab03fd36bf9f67ae71893727ec0a GIT binary patch literal 15855 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 Apa1{> literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/openstack_identity.doctree b/source/_build/doctrees/openstack_identity.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b8a4f04fe4aa8efab572196c31cb9e8ff866fea6 GIT binary patch literal 77327 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
oi~Hlc&=OOMG@`%DW190xU&_o`MR6AGLgP7u ze5p#N-pnwH2+7gMlYAWlj_X2W(F*}^2-Zd7i7F$G>q27-gEgvCU5{#vWuL;bDx^p8 zGS&4{`m>)4$Lr4>RKEiNK>eCSE)D`3)w@3uPdtEeOT8gh19~&dAf5zC)xi5Uc}Xir zfAuBZI}cX#7|+R;3K-qNSpv0kPRC)mnQeb<27wyC>!RDN{V(gT87|kQ%3+t0hL#uQ zT3ua}g#(E=4SOK-6lrc>!yd%>q+vI49d1^2pyOCussoyWq+qJrgBe$Z_UMzSDIP+= zBdK*Q(h(0uIW)>GNO1o(Q|M?J3z((q)|Ky8Mt7S+cPW_C5^knFG_2VgS{_O@Z)eo; zs`(U>$HM^tc^nSX;t{|F89fpSuIXmVQgNx8T5;tdtZc933iqIki}S{(ZP&$i2=QnD zQhf9nF5I;zxwwRbCrdaLkq?3ukHz~UkH#jKxRsj7+KB9M^e7I4J(^B&9i2@cP17^U zqqmK1-60-Fba5b}KdAb6!cSWF1pM&C9r!EHRt3!`@hXsfwQME*wYQL zJ21v3J=qMY$hGQgV%U>S~7mZ!pq zH}l)K;4h6dB#+YqCBqVL#p|);iGE$Q$-3fgT{Xd(W8>f%|>&@NAY%#_!#~sm+SVBE%kA{!~ROjSy{j_-vXC=k4tysicfN}Pf_Ml z+#FiP$w998G#=N~2jp>94%Yvca|u49#7&6LAip9$i@%=u9Kj|})Ot0Z!J)t;Ay<4J zIk1S6K(8Wl<2jp70>@Z>0h;**Bq7hTsF*odPaN;&r|_! zq;c+H#JBNo6iSb(x)7xF7~f&QL_S@rDzNVo*y7}J#a{_~mm!hw5nO)rSn>=sc}0vv zP&mp7N3zRDTvv>EONj3SEV+^@;G!T-mEu7*@dJ9jIA>>SQ{sn&DY?>~&e)_f2XQ-W z-o_E?Kf?RllV?_H)tOqg5&j<&q9yVWBk>b@SWcJ0muu7G2gv`3pW+=__4r(EdS=`= zWmo(R@8Oj&i-QA`cW0nw;`ac$J$V!+^28q)nXLGXYu9q9 z<#b8>kzcQ*Au}klUKZ?%Kk@q$NqTNABPWlf2>;ADkCmOwI2nuh3j?npd+^tS@AVs!~7371lR9nky1rl-nr{SuGRc_R(XLF00Jvg4Z_ypiWBj2PqKqe1t*=^fA`XIc7Q{S?Ao%Op<;_vbQz>7YWqSiu#Y_>Jp-@plb}F2xHGzZB_^eVl^7 zKkp!Jxt?Q0KF^z@Y0O6S=Fj3_M&4^NgeQu3ifiZ(MK{Im_)|-s2y=jctl|O%R6|B8 zr!v9Q@E4J6KLw1Z6LGqyL0;bw3e{`LWxB_4#TfwIBhJKMzRrQ7ue0#riL>!H-@8Xx Ll%Agk-R}PbSEOv> literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/openstack_image.doctree b/source/_build/doctrees/openstack_image.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c25eae118dbb9e179d90ec8bc7cc9fe03ce93b25 GIT binary patch literal 54499 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 literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/openstack_installing_bundles.doctree b/source/_build/doctrees/openstack_installing_bundles.doctree new file mode 100644 index 0000000000000000000000000000000000000000..02534a313bdc5d3ceca1a664b219eb8e811fd24b GIT binary patch literal 11967 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 literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/openstack_networking.doctree b/source/_build/doctrees/openstack_networking.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d4840e97ff332b435260e111f8b8c38d63b69839 GIT binary patch literal 57647 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

_C8?rMRX3(LQ zk-0&0kN`|OzlsYtRJLUyH^&nQx+i)1Xqd%r0HOu1MuOXD8E4Dr#Xt|Sz%9hrnLd%r zr&Rf!O>}MSl8+X;7K75tKCUiWD;KjE(tv;%9xHl8Kk!3(86>{QGC5LzNge_HwHahU zf+XJn0qx)}hqO0hq9(ZG43iv~W|4i=K72@py1kfmp;mvXREgGiHGiz*PSWx^lCeV<4IAR=RUK$jz)&)A8PuiYi-t&rg8nGN+-a#CR*R+m3Tv-EgTRK=R3Ir{8 z#U55l#1IfeABsqPQDPcec=PRHtp@y(NbA;D=K5S!-}aF8jjRV_RRJwzWqX1vi?+RG zEMyN55b|R~ji>-SBwa<~i@i*Yv^$trhmb z+WIBFsggif;NcJoZIkJXi(!-l_r`23pF+8Y(KV{rd9?}JYZ*dz_hyCS05U+lkHi<( zF;oi&1tt`#B)Y5p8L#Z*iu>cZO@+?dcrk3r&0@+kwI77X#Pt9Ik2f%~8x=C@Qby)W z+yqcnhqRo;Y!k6~66GVRyO~fXrlT&}k&?tT)+GGq7yHtpC~iUit%;eG&*8FoGG6d} zeC@8xphy{3o;+l1UL`A@LY1A;>zv-3m<3Fjkj5-@u5z0roqk3)T zMU0x(W?qb6zPOj4Sk-q>n+845sjFGqr#TN!;zURIqa%B5o^$MH%Ad6fi7-UY3@bXec-xEP<1ftSej zL%VQzpp1*UF{$Gj8^uF>7VN=vW;j;Y*0^;QZsQ!nN1HGL)$*?gvk;G(C{jh}lpi*O z4?3~B$l~JFpw5sP`=-}0#f>uit8S{-QlXyzP>x;);?O>?M}j?4%t}jMvYDqAk?pgT zyt~vBUOjsw1CG3U*7Z*PSvMxV49tIWg)CDsoy)`Jo&f6`{G z7~ry{KuD(+(jTz$VMavLzaL@5A61B#2evHLuTXEcgKXWlO&%X1QAc*vEOFq5AGK{z z8F~t%(^RH_>tN`}1}TxsKw5?76!$KR(*PEjDUR3MCgf2ODqKJ5LHT^l0~k{LJ@|oi zMxP!EV`o4*CludICqr-yWD|Wso=T{bAHWu|!Gb8H6H{@W7w;~W${Rz6MxZ?(V-YrJ zkF${E{c+AD^ZEqK`#~k|i=YbiZRQh^H=384(6p;hGV(Abom(bz;P5HV4el%YG~PjV zKZC>>&jvuLY^KxZK$IdCm-z(3&SKB#$pp8onati+BktzJvr< ze&Vk-Aga(bAX+OMvqp-CCEBkr+OJBq{O!3hqkxPh`(!;d*Zwue^>u~oyCA2=Kkw|B zfUb|I=!a3uwHg~6^Twj$TFulD=^M;?^bqMtRq?iUsaWKX{*UY5KwY5X6pfYdU)Lb4}0leWpKb_MKZ| ztP(%q+@RKiBKSF}ctc%rFV9dBQ>>|2d_~ z^XQV|7kCLOeu=~vzrtVbd8k6u^YF4iOjVvT8Dk@eUrY4AVf4S1=;aQA@uGqmDsj*~ z%)euVzgGz7LTQ5SP4f5y=QfweACV7v(6qgI1GD%O-a{mRM&gS{8HvvVgbTAN~iXm?<>zqd8T&*yZ39ct8F^D7Z1hE{6#1~WW zS8EE@$6`s$GRP5A0RrWf-!WAB*4HfFJ1MTqM3Y zirJSYN{t=pcHsAp#yg%cJchxKt%1WPj^l?0AK@HN4)b^_*puvl%538KCB)q5W^l6( z&#Jf6JOTDf(&xl*YckH4XVt5?H~~dLU<(r5`Nx$=0*MCcLsHUa=E@m=_0=<5oFoAf zbFl?q;COw?D^*3t7ANCl!BbY6sPc;W1)kk0W25bo*tVn2^AG_Dss9eC#I7^ z<+7eQ4bQj;5P#d8Y55J9>~p3&UCs<=gEQ0F>%{W3JJ*@z3_7#(Z^t;unUkj}A!ly> z`*^C7EY9G<7dfkK2aF_UVIsBYVLg7x7UE3gbtmT3h=42cgvE89g};dzctNCiVjjOd zn_eC*ccrFuDNnTGb+0&wGLH!`#rV$U-1(Gye5h!O0ooW~0Rha!BqPuBdSW5JU4*|h zN06AUrHZ%`w;thjcjDL@FS-#t(ay!|_%RdWS?;Ep`TNs59BR`NrG zYUYU+YLQix_V72bF9&LYdiGdyveueco0l}E`Q};JeoMDGL0mReD`RKlVl}WpQP&{x z#ajH;UY#g16*aFF6Rk=2(W2eY2S|5f25xGQYIgyiyN*m?{;;l*p12Tid&Ncgo0y~9 zMYh<*c!y8$QqIviOn%dTkCf!V6YIFxrIa}XI|OJ~vM1K#v8~<*4q(s>r<#rJN*Ah_ zLKhp5UlN`8>x+#9n>beM7k_h)WaNpGvF505Vv`TqFu+ zZLy8s9bp&6mGomK?QlUO43))pJQD-lNGaA$u>TWED#DaF+8*k+No9s{%Z6jy74ZbTzb$b(d?;>gZiat1A(}>{Wh&xodYD5YWU)Gw z+E0E+^x_>_^{8xhsGO>qv?rd3_wY_wFvt}LN(wk7f#=d%2Q&-RVB`6a=wsLusM%;{ zk6J&4eMw-2{5~=hGmzJQ&XN^b(NB-ZVBdP}YGx_y456Nym?lGHk!6(J=FslFIWLF( z2EyjICu9nx^qv&rw_G7ryH;NeAoJG5>0ouJ<{s;6l=3hsZHqww-Ih2K_qYg$kx9mJ zwMjJ#E{6&t$FGmZs!Iuq%(Fx|o8gH(zdx3w=T-YFxe6GSBHY6`XGss1B1IGh2A)gy zU?}nszdb6{VxoxGiK*4fK>KP@qTexvima$CG3AP8BMXS5Exlpx<9oqm&FWv6>qv`B<2Q{RO}_dsfnE%LDD|@JzaOG z`|;#hiKDO=tb%nzvPTFO_J;RZ`QmGZ($rSh;6-<0F6&iYir4bn+1?O3+>~2I=j(|B zcy}8uxRvY9!^gV>f60oR$G(00;^kq)3q^JwS$l5>puG-p9f6@wELPI{Q%-KsDd7K# zxSn25DU`5Ca|8W6EhxTJ&<1Y=NS3v@>D7`DRCr4GEc*AU)+wrZ3tjiBVt*J07h_} zlK&2cE@$RxJmQ?@9M7Rl{>}7qgR@#jG%Gmz;VU6I=;8I>YT{TJ0z6}d7k&6ba8Ep) zt9l0h;z0UF>XGl@YSAOhCCyMzUro%^eT^sX1Zc0g3x9culSscC559ON{yH0a#XXc> Jlt#Vr{|8iEZr=a^ literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/openstack_object_storage.doctree b/source/_build/doctrees/openstack_object_storage.doctree new file mode 100644 index 0000000000000000000000000000000000000000..92523a217d6a9d914a74eb269d515ac5a8de1df7 GIT binary patch literal 122303 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

~L1_D_TsJuY;Bj;Jha=hv9(8 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

IBB=vA{ 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 literal 0 HcmV?d00001 diff --git a/source/_build/html/.buildinfo b/source/_build/html/.buildinfo new file mode 100644 index 00000000..677cd893 --- /dev/null +++ b/source/_build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: a4b5d0b7716605b8ac63fc8c986b086d +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/source/images/bundles_overview.png b/source/_build/html/_images/bundles_overview.png similarity index 100% rename from source/images/bundles_overview.png rename to source/_build/html/_images/bundles_overview.png diff --git a/source/images/gs_confirmation_screen.png b/source/_build/html/_images/gs_confirmation_screen.png similarity index 100% rename from source/images/gs_confirmation_screen.png rename to source/_build/html/_images/gs_confirmation_screen.png diff --git a/source/_build/html/_sources/bundles_in_clr.txt b/source/_build/html/_sources/bundles_in_clr.txt new file mode 100644 index 00000000..bd7e1367 --- /dev/null +++ b/source/_build/html/_sources/bundles_in_clr.txt @@ -0,0 +1,7 @@ +List of bundles +############################################################ + +This is a list of the basic bundles in Clear Linux* OS for Intel® Architecture: + + +.. include:: bundles_in_clr_html.rst \ No newline at end of file diff --git a/source/_build/html/_sources/bundles_in_clr_html.txt b/source/_build/html/_sources/bundles_in_clr_html.txt new file mode 100644 index 00000000..bda7d91e --- /dev/null +++ b/source/_build/html/_sources/bundles_in_clr_html.txt @@ -0,0 +1,773 @@ +.. _bundles_in_clr_html: + +Bundles in ClearLinux +##################### + +.. raw:: html + + + Bundles in ClearLinux + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bundle NameStatusDescription
bat ACTIVE +

Provides the neccesary bundles to perform BAT succesfully

+
  • Includes (devtools-basic) bundle.

    +
  • Includes (openstack-test-suite) bundle.

    +
  • Includes (os-testsuite) bundle.

    +
  • Includes (pnp-tools-basic) bundle.

    +
  • Includes (openstack-all-in-one) bundle.

    +
  • Includes (storage-utils) bundle.

    +
  • bootloader ACTIVE +

    UEFI bootloaders

    +
    clr-devops ACTIVE +

    Provides build/release tools for Clear devops team

    +
    containers-basic WIP +

    Installs rkt base for Clear Containers

    +
  • Includes (storage-utils) bundle.

    +
  • Includes (network-basic) bundle.

    +
  • Includes (kernel-container) bundle.

    +
  • cryptography ACTIVE +

    Cryptographic tools

    +
    database-mariadb ACTIVE +

    Provides components needed to run MariaDB

    +
    database-mongodb WIP +

    Provides components needed to run mongodb

    +
    devtools-basic ACTIVE +

    Provides basic set of languages and tools for development

    +
  • Includes (R-basic) bundle.

    +
  • Includes (go-basic) bundle.

    +
  • Includes (hpc-basic) bundle.

    +
  • Includes (os-core-dev) bundle.

    +
  • Includes (perl-basic) bundle.

    +
  • Includes (python-basic) bundle.

    +
  • Includes (ruby-basic) bundle.

    +
  • devtools-extras ACTIVE +

    Provides extra set of languages and tools for development

    +
  • Includes (R-extras) bundle.

    +
  • Includes (devtools-basic) bundle.

    +
  • Includes (go-extras) bundle.

    +
  • Includes (perl-extras) bundle.

    +
  • Includes (python-extras) bundle.

    +
  • Includes (ruby-extras) bundle.

    +
  • dev-utils ACTIVE +

    Provides a limited set of development utilities

    +
    dpdk-dev ACTIVE +

    All headers and libraries necessary to develop with the Data Plane Development Kit.

    +
  • Includes (os-core-dev) bundle.

    +
  • editors ACTIVE +

    Provides popular text editors

    +
    file-utils ACTIVE +

    Provides basic set of file manipulation utilities

    +
    go-basic ACTIVE +

    Provides basic Go language development

    +
    go-extras ACTIVE +

    Most popular Golang libraries

    +
  • Includes (go-basic) bundle.

    +
  • hpc-basic ACTIVE +

    Provides basic suite of MPI/HPC development tools

    +
  • Includes (os-core-dev) bundle.

    +
  • iot WIP +

    The IoT (Internet of Things) base bundle

    +
    kernel-container WIP +

    Provides a Linux kernel appropriate for a Clear Container

    +
    kernel-kvm ACTIVE +

    Provides a Linux kernel appropriate for running under KVM

    +
  • Includes (bootloader) bundle.

    +
  • kernel-native ACTIVE +

    Provides a Linux kernel appropriate for physical machines

    +
  • Includes (bootloader) bundle.

    +
  • kernel-pxe ACTIVE +

    Provides a Linux kernel linking an initramfs as root

    +
    koji WIP +

    Sets up a koji build service (builder-only, for now) based on NFS mounts.

    +
    kvm-host WIP +

    Provides necessary tools to run usable virtual machines with QEMU-KVM (independently of OpenStack).

    +
  • Includes (kernel-kvm) bundle.

    +
  • lamp-basic ACTIVE +

    Basic LAMP Server (apache2, mariadb, php5)

    +
    mail-utils WIP +

    Provides utilities for reading and sending email

    +
    message-broker-rabbitmq ACTIVE +

    Provides the RabbitMQ messaging service

    +
    net-utils ACTIVE +

    Provides an essential suite of core networking configuration and debug tools

    +
    network-advanced WIP +

    More utilities for advanced host-level networking; bridge, switch, netfilter, vpn etc.

    +
    network-basic ACTIVE +

    Provides a basic suite of networking utilities

    +
    network-proxy-client WIP +

    Tools for dealing with client-side network proxy settings.

    +
    openssh-server ACTIVE +

    Provides an SSH server (and client)

    +
    openstack-all-in-one WIP +

    Provides an All-in-one OpenStack deployment

    +
  • Includes (database-mariadb) bundle.

    +
  • Includes (database-mongodb) bundle.

    +
  • Includes (message-broker-rabbitmq) bundle.

    +
  • Includes (openstack-block-storage) bundle.

    +
  • Includes (openstack-block-storage-controller) bundle.

    +
  • Includes (openstack-compute) bundle.

    +
  • Includes (openstack-compute-controller) bundle.

    +
  • Includes (openstack-dashboard) bundle.

    +
  • Includes (openstack-database) bundle.

    +
  • Includes (openstack-identity) bundle.

    +
  • Includes (openstack-image) bundle.

    +
  • Includes (openstack-lbaas) bundle.

    +
  • Includes (openstack-network) bundle.

    +
  • Includes (openstack-object-storage) bundle.

    +
  • Includes (openstack-orchestration) bundle.

    +
  • Includes (openstack-python-clients) bundle.

    +
  • Includes (openstack-telemetry-controller) bundle.

    +
  • openstack-block-storage WIP +

    Provides an OpenStack Cinder service

    +
    openstack-block-storage-controller WIP +

    Provides an OpenStack Cinder controller service

    +
    openstack-compute WIP +

    Provides an OpenStack nova-compute node

    +
    openstack-compute-controller WIP +

    Provides an OpenStack Nova control server

    +
    openstack-configure WIP +

    Provides a suggested default configuration for OpenStack on Clear Linux.

    +
    openstack-controller WIP +

    Provides an OpenStack multi-service control server

    +
  • Includes (database-mariadb) bundle.

    +
  • Includes (message-broker-rabbitmq) bundle.

    +
  • Includes (openstack-identity) bundle.

    +
  • Includes (openstack-image) bundle.

    +
  • Includes (openstack-compute-controller) bundle.

    +
  • Includes (openstack-dashboard) bundle.

    +
  • Includes (openstack-python-clients) bundle.

    +
  • openstack-dashboard WIP +

    Provides an OpenStack Horizon server

    +
    openstack-database WIP +

    Provides a Database as a Service server

    +
    openstack-identity WIP +

    Provides an OpenStack Keystone server

    +
    openstack-image WIP +

    Provides an OpenStack Glance server

    +
    openstack-lbaas WIP +

    Provides Load Balancing as a Service

    +
    openstack-network WIP +

    Provides an OpenStack Neutron server

    +
    openstack-object-storage WIP +

    Provides an OpenStack Swift service

    +
    openstack-orchestration WIP +

    Provides an OpenStack Heat service

    +
    openstack-python-clients WIP +

    Provides OpenStack command-line utilities

    +
    openstack-telemetry-controller WIP +

    Provides an OpenStack Telemetry server

    +
    openstack-test-suite WIP +

    Provides an OpenStack Tempest/test suite

    +
    os-cloudguest WIP +

    Provides cloud-init cloud guest configuration utilities

    +
  • Includes (openssh-server) bundle.

    +
  • Includes (telemetrics) bundle.

    +
  • os-clr-on-clr WIP +

    content for development of the Clear Linux OS on the Clear Linux OS

    +
  • Includes (storage-utils) bundle.

    +
  • Includes (mail-utils) bundle.

    +
  • os-core ACTIVE +

    The basic core OS components of Clear Linux for iA

    +
    os-core-dev ACTIVE +

    Basic development tools

    +
    os-core-update ACTIVE +

    Provides basic suite for running the Clear Linux for iA Updater

    +
    os-installer ACTIVE +

    Provides an installer for Clear Linux for iA

    +
  • Includes (telemetrics) bundle.

    +
  • Includes (network-proxy-client) bundle.

    +
  • os-testsuite WIP +

    Provides basic test suite for Clear Linux for iA

    +
    os-testsuite-phoronix ACTIVE +

    All the required pieces for running the Phoronix Test Suite

    +
  • Includes (os-utils) bundle.

    +
  • Includes (devtools-basic) bundle.

    +
  • os-utils ACTIVE +

    Provides a core set of OS utilities

    +
  • Includes (editors) bundle.

    +
  • Includes (dev-utils) bundle.

    +
  • Includes (sysadmin) bundle.

    +
  • Includes (network-basic) bundle.

    +
  • Includes (file-utils) bundle.

    +
  • Includes (network-proxy-client) bundle.

    +
  • os-utils-gui ACTIVE +

    Provides a graphical desktop environment

    +
    perl-basic ACTIVE +

    Provides essential Perl language and dev tools

    +
    perl-extras ACTIVE +

    Provides extra libraries for Perl

    +
  • Includes (perl-basic) bundle.

    +
  • pnp-tools-advanced WIP +

    Provides advanced Power and Performance measurement tools

    +
    pnp-tools-basic WIP +

    Provides basic Power and Performance testing tools

    +
    pnp-tools-intermediate WIP +

    Provides a deeper-level suite of Power and Performance testing tools

    +
    python-basic ACTIVE +

    Provides core Python language and libraries

    +
    python-extras ACTIVE +

    Provides extra libraries for Python

    +
  • Includes (python-basic) bundle.

    +
  • R-basic ACTIVE +

    Provides core R language and libraries

    +
    R-extras ACTIVE +

    Provides deeper functionality R language libraries

    +
  • Includes (R-basic) bundle.

    +
  • ruby-basic ACTIVE +

    Top 3 basic Ruby Libraries

    +
    ruby-extras ACTIVE +

    Top 3 to 6 basic Ruby Libraries

    +
  • Includes (ruby-basic) bundle.

    +
  • shells ACTIVE +

    All available shell programs for Clear, along with ancillary files

    +
    storage-utils ACTIVE +

    Provides basic storage-related utilities

    +
    sysadmin ACTIVE +

    Provides a basic set of system administration utilities.

    +
    telemetrics ACTIVE +

    Provides the Telemetrics client for Clear Linux for iA

    +
    virtualbox-guest ACTIVE +

    Include the modules and binaries meant to be used as a VirtualBox instance

    +
    diff --git a/source/_build/html/_sources/bundles_overview.txt b/source/_build/html/_sources/bundles_overview.txt new file mode 100644 index 00000000..29f01de4 --- /dev/null +++ b/source/_build/html/_sources/bundles_overview.txt @@ -0,0 +1,25 @@ +Bundle overview +############################################################ + +Linux-based operating systems contain the code of several hundred, if +not thousands, of open source projects. To make this manageable, +distributions use a concept called "packages" to configure and compile +the source code of these projects into binaries. + +Many distributions then split the content of these compiled packages +into so-called sub-packages, which are the granularity at which these +distributions deploy their software. With those kinds of distributions, +system administrators can then install and update sub-packages +individually or as a set, using tools such as "yum" and "apt-get." + +The Clear Linux* OS for Intel® Architecture does things a bit differently. While we also use the +concept of packages to manage compiling source code into binaries, we do +not use the package concept to deploy software. Instead, we provide +"bundles" that  provide a set of functionality to the system +administrator, independent of how many and which pieces of the upstream +open source projects are needed for this functionality. The diagram +below gives an overall picture of it. + +.. image:: _static/images/bundles_overview.png + :align: center + :alt: confirmation diff --git a/source/_build/html/_sources/disclaimers.txt b/source/_build/html/_sources/disclaimers.txt new file mode 100644 index 00000000..4786a970 --- /dev/null +++ b/source/_build/html/_sources/disclaimers.txt @@ -0,0 +1,10 @@ +.. _disclaimers: + + +.. rubric:: Disclaimer + +.. important:: + This documentation is a work in progress and is being provided for + informative purposes only. Because it is a work in progress, there are + parts that are either missing or will be revised as code development + continues. diff --git a/source/_build/html/_sources/documentation_license.txt b/source/_build/html/_sources/documentation_license.txt new file mode 100644 index 00000000..ab5ead7b --- /dev/null +++ b/source/_build/html/_sources/documentation_license.txt @@ -0,0 +1,12 @@ +Copyright © 2015 Intel Corporation + +.. raw:: html + +
    Creative Commons License
    This work is licensed under a Creative Commons + Attribution 4.0 International License + diff --git a/source/_build/html/_sources/gs-clear-containers-gettting-started.txt b/source/_build/html/_sources/gs-clear-containers-gettting-started.txt new file mode 100644 index 00000000..b698937c --- /dev/null +++ b/source/_build/html/_sources/gs-clear-containers-gettting-started.txt @@ -0,0 +1,75 @@ +.. _gs-clear-containers-gettting-started: + +Clear Containers getting started guide +###################################### + +Clear Containers for Docker* Engine is now available on multiple +operating systems. This enables executing existing Docker applications +in the secure and fast Clear Containers environment. + +Binary packages +=============== + +The primary host platform is Clear Linux* Project for Intel® Architecture, version 4000 +or better. However, binaries for a range of operating systems are available from: + +- https://software.opensuse.org/download.html?project=home%3Aclearlinux%3Apreview&package=clear-containers-docker + +Currently experimental builds are available for: + +- CentOS*, Scientific Linux* 7 +- Fedora* 21, 22 +- openSUSE* 13.1, 13.2, Tumbleweed +- SUSE* Linux Enterprise 12 +- Debian* 8.0 +- Ubuntu* 15.04 + +If you have any feedback, please mail it to the dev@lists.clearlinux.org mailing list. +Subscription to this list is available at: https://lists.clearlinux.org/mailman/listinfo/dev. + +Installation instructions +========================= + +Using hosts other than Clear Linux OS for Intel Architecture +------------------------------------------------------------ + +If you are *not* using Clear Linux OS for Intel Architecture, follow the instructions below: + +#. Visit the link below, and select your operating system by clicking the appropriate icon: + https://software.opensuse.org/download.html?project=home%3Aclearlinux%3Apreview&package=clear-containers-docker + +#. Follow the brief instructions shown. + +#. Reload your systemd configuration:: + + $ sudo systemctl daemon-reload + +#. Start the Docker service:: + + $ systemctl restart docker + +Using Clear Linux OS for Intel Architecture as Host +--------------------------------------------------- + +If you are running Clear Linux OS for Intel Architecture on your host system, follow the +instructions below: + +#. Enable the repository by running the following as the ``root`` user:: + + # clr_bundle_add containers-basic + +#. Reload your systemd configuration:: + + $ sudo systemctl daemon-reload + +#. Start the Docker service:: + + $ systemctl restart docker + +Source Code +=========== + +The experimental source code is based on the Docker version 1.8.1 upstream release and is available at: + +- https://github.com/clearlinux/docker + diff --git a/source/_build/html/_sources/gs_creating_bootable_usb.txt b/source/_build/html/_sources/gs_creating_bootable_usb.txt new file mode 100644 index 00000000..24c72abf --- /dev/null +++ b/source/_build/html/_sources/gs_creating_bootable_usb.txt @@ -0,0 +1,69 @@ +.. _gs_creating_bootable_usb: + +Creating a bootable USB to install the OS +########################################## + +Here's how to create a USB drive that initiates the process for +:ref:`gs_installing_clr_as_host`. Alternatively, you can test the +OS by :ref:`gs_running_clr_virtual`. + + +What you need +============= + +* A USB stick, formatted as ``ext4``. Remember that the process of flashing + data to a USB completely deletes the contents of the drive; as always, run + ``dd`` with caution. +* A ClearLinux OS image; the most current version can be found here: + `https://download.clearlinux.org/image `_ + + .. tip:: + + For older versions, see our `downloads page `_. + + +Download and checksum +===================== + +:: + +$ wget https://download.clearlinux.org/image/clear-[release_number]-installer.img.xz +$ sha512sum clear-[release_number]-installer.img.xz` + +Confirm the mount point on the USB drive +======================================== + +Using ``$ lsblk`` is helpful to show the block-level devices; a USB drive +usually shows up under ``/sdb`` or ``/sdc`` (almost never ``/sda``), and should +indicate disk space approximately the size of the USB drive:: + + $ lsblk /dev/sdb + NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT + ?? sdb 8:16 1 14.9G 0 + ?? sdb1 8:17 1 14.9G 0 part + +and make sure the drive isn't already mounted. The easiest way is with:: + + # df + +Flash the image to the USB +========================== + +Flash the image with the following command, adding the ``-v`` option for verbose mode +(recommended), as the image file may be large, and the process can take a while. This +may need to be done as root:: + + $ xzcat -v clear-[release_number]-installer.img.xz | dd of=/dev/sdb bs=4M + +Wait for the final confirmation +=============================== + +This example shows ``clear-2190-installer.img.xz`` flashed to a 16GB USB drive +mounted on ``/sdc``. + +.. image:: _static/images/gs_confirmation_screen.png + :align: center + :alt: confirmation + +Success! Your USB stick is now ready to boot and initiate the process for +:ref:`gs_installing_clr_as_host`. \ No newline at end of file diff --git a/source/_build/html/_sources/gs_getting_started.txt b/source/_build/html/_sources/gs_getting_started.txt new file mode 100644 index 00000000..28aed9bd --- /dev/null +++ b/source/_build/html/_sources/gs_getting_started.txt @@ -0,0 +1,11 @@ +.. _gs_getting_started: + +Getting started with Clear Linux* OS for Intel® Architecture +############################################################ + +The easiest way to give Clear Linux OS for Intel Architecture a spin is to download a +recent KVM image from the `image directory `_ +on our download page. This directory contains a current image, the UEFI firmware +helper and the KVM start helper script. See :ref:`gs_running_clr_virtual` for details. + +You can also :ref:`gs_installing_clr_as_host` on a target computer. \ No newline at end of file diff --git a/source/_build/html/_sources/gs_installing_clr_as_host.txt b/source/_build/html/_sources/gs_installing_clr_as_host.txt new file mode 100644 index 00000000..b4e28de8 --- /dev/null +++ b/source/_build/html/_sources/gs_installing_clr_as_host.txt @@ -0,0 +1,38 @@ +.. _gs_installing_clr_as_host: + +Installing the OS as host +########################################################## + +Running Clear Linux* OS for Intel® Architecture natively on a system is easy +with the simple installer image. To get started you'll need the following: + +* A USB stick flashed with the `installer image `_. + For instructions on how to do this, see :ref:`gs_creating_bootable_usb`. +* Host machine running :ref:`gs_supported_hardware`. +* Network access via DHCP. + +Installing Clear Linux OS for Intel Architecture to a target system +=================================================================== + +1. Configure the BIOS; this may involve changing the boot device order + to boot first from the USB device. +2. Insert the USB device that is flashed with the + `installer image `_ into the + target system, then reboot. As the system boots, you'll see:: + + Clear Linux OS for Intel Architecture installation in progress... Your + computer will power off once installation completes successfully. + +The entire installation should take no more than a few minutes. If you run into +any trouble, log in as root during the installation phase and check the status +of the install with:: + + $ systemctl status ister + +You might need to switch to another TTY. + +For feedback on installation or other topics, please feel free to write in to our +`mailing list `_. + +Note: You can also :ref:`gs_running_clr_virtual`. + diff --git a/source/_build/html/_sources/gs_running_clr_virtual.txt b/source/_build/html/_sources/gs_running_clr_virtual.txt new file mode 100644 index 00000000..67ca6114 --- /dev/null +++ b/source/_build/html/_sources/gs_running_clr_virtual.txt @@ -0,0 +1,67 @@ +.. _gs_running_clr_virtual: + +Running in a virtualized environment +########################################################################## + +The easiest way to get started running Clear Linux* OS for Intel® Architecture in a virtualized +environment is to download a recent KVM image from the `image +directory `_. This directory +contains an image file, the UEFI firmware helper and the KVM start +helper script. + +Starter script +============== + +To start the image, run the ``start_qemu.sh`` script from +`here `_, or modify +the following script for your needs and run it from the command line +with ``$ script clr_image``:: + + #!/bin/bash + if [ $# -eq 0 ] ; then + echo "Please provide an image to emulate as first argument" + exit 1 + fi + image=$1 + shift + # FIXME: Add a proper MAC address + macaddr=XX:XX:XX:XX:XX:XX + qemu-system-x86_64 \ + -usb -device usb-kbd \ + -cpu qemu64,+vmx \ + -enable-kvm \ + -m 512m -bios OVMF.fd \ + -drive file="$image",index=0,if=ide \ + -net nic,model=e1000,macaddr=$macaddr \ + -net user,hostfwd=tcp::2223-:22 \ + -monitor stdio "$@" + +To run this script, connect from host via SSH. Take note that SSH is not +enabled by default. To enable it, log in through serial console with the +username ``root``. After setting the password, enable root login via SSH +by configuring ``/etc/ssh/sshd_config`` with this content:: + + PermitRootLogin yes + +Now you may connect from host via SSH through 2223:: + + $ ssh -p 2223 root@localhost + +Alternately, there are a few other ways to approach this. + +- To run the script without modifying its permissions:: + + $ bash start_qemu.sh clr_image + +- To run it as a background process:: + + $ `bash start_qemu.sh clr_image` & + +- If you'd like to run the script with execute permission:: + + $ chmod +x start_qemu.sh + $ ./start_qemu.sh clr_image + +- And to run it as a background process:: + + $ `./start_qemu.sh clr_image` & diff --git a/source/_build/html/_sources/gs_supported_hardware.txt b/source/_build/html/_sources/gs_supported_hardware.txt new file mode 100644 index 00000000..a61e6e42 --- /dev/null +++ b/source/_build/html/_sources/gs_supported_hardware.txt @@ -0,0 +1,11 @@ +.. _gs_supported_hardware: + +Supported hardware +################## + +The following processors have been tested with Clear Linux* OS for Intel® Architecture: + +- 4th Generation Intel® Core™ processor family on the system of + your choice. +- Intel® Xeon® Processor E5 v3 processor family on the server of + your choice. diff --git a/source/_build/html/_sources/index.txt b/source/_build/html/_sources/index.txt new file mode 100644 index 00000000..e2fafc5b --- /dev/null +++ b/source/_build/html/_sources/index.txt @@ -0,0 +1,100 @@ +.. ClearLinux Documentation documentation master file, created by + sphinx-quickstart on Fri Nov 13 12:23:35 2015. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + + +Welcome to ClearLinux Documentation +=================================== + +Contents: + +.. toctree:: + :maxdepth: 2 + + .. + Clear Linux Project documentation master file + + +.. include:: documentation_license.rst + + +Getting started +############### + +.. toctree:: + :maxdepth: 1 + + gs_getting_started + gs_supported_hardware + gs_creating_bootable_usb + gs_installing_clr_as_host + gs_running_clr_virtual + gs-clear-containers-gettting-started + +Software update +############### + +.. toctree:: + :maxdepth: 1 + + swupdate_about_sw_update + swupdate_how_to_run_the_updater + +Bundles +####### + +.. toctree:: + :maxdepth: 1 + + bundles_overview + bundles_in_clr + bundles_in_clr_html + + +OpenStack``*`` implementation +############################# + +.. toctree:: + :maxdepth: 1 + + openstack_use_cases + openstack_bundle_and_service_summary + openstack_sys_req_and_pw_summary + openstack_installing_bundles + openstack_environment-database + openstack_environment-messaging + openstack_identity + openstack_identity-openrc + openstack_image + openstack_compute + openstack_block_storage + openstack_dashboard + openstack_networking + openstack_orchestration + openstack_telemetry + openstack_object_storage + openstack_supporting-database + openstack_supporting-messaging + + +Disclaimers +=========== + disclaimers + + +Index and search +################ + +* :ref:`genindex` + +* :ref:`search` + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/source/_build/html/_sources/openstack_block_storage.txt b/source/_build/html/_sources/openstack_block_storage.txt new file mode 100644 index 00000000..75f66027 --- /dev/null +++ b/source/_build/html/_sources/openstack_block_storage.txt @@ -0,0 +1,479 @@ +.. _openstack_block_storage: + +Block Storage +######################## + +The OpenStack Block Storage service (cinder) adds persistent storage to +a virtual machine. Block Storage provides an infrastructure for managing +volumes, and interacts with OpenStack Compute to provide volumes for +instances. The service also enables management of volume snapshots, and +volume types. + +Install and configure controller node +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This section describes how to install and configure the Block +Storage service, code-named cinder, on the controller node. This +service requires at least one additional storage node that provides +volumes to instances. + +Prerequisites: +-------------- + +Before you install and configure the Block Storage service, you + +#. To create the database, complete these steps: + + * Use the database access client to connect to the database + server as the ``root`` user:: + + $ mysql -u root -p + + * Create the ``cinder`` database:: + + CREATE DATABASE cinder; + + * Grant proper access to the ``cinder`` database:: + + GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \ + IDENTIFIED BY 'CINDER_DBPASS'; + GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \ + IDENTIFIED BY 'CINDER_DBPASS'; + + Replace ``CINDER_DBPASS`` with a suitable password. + + * Exit the database access client. + +#. Source the ``admin`` credentials to gain access to admin-only + CLI commands:: + + $ source admin-openrc.sh + +#. To create the service credentials, complete these steps: + + * Create a ``cinder`` user:: + + $ openstack user create --domain default --password-prompt cinder + User Password: + Repeat User Password: + +-----------+----------------------------------+ + | Field | Value | + +-----------+----------------------------------+ + | domain_id | default | + | enabled | True | + | id | bb279f8ffc444637af38811a5e1f0562 | + | name | cinder | + +-----------+----------------------------------+ + + * Add the ``admin`` role to the ``cinder`` user:: + + $ openstack role add --project service --user cinder admin + + * Create the ``cinder`` and ``cinderv2`` service entities:: + + $ openstack service create --name cinder \ + --description "OpenStack Block Storage" volume + +-------------+----------------------------------+ + | Field | Value | + +-------------+----------------------------------+ + | description | OpenStack Block Storage | + | enabled | True | + | id | ab3bbbef780845a1a283490d281e7fda | + | name | cinder | + | type | volume | + +-------------+----------------------------------+ + + $ openstack service create --name cinderv2 \ + --description "OpenStack Block Storage" volumev2 + +-------------+----------------------------------+ + | Field | Value | + +-------------+----------------------------------+ + | description | OpenStack Block Storage | + | enabled | True | + | id | eb9fd245bdbc414695952e93f29fe3ac | + | name | cinderv2 | + | type | volumev2 | + +-------------+----------------------------------+ + + .. note:: + + The Block Storage services requires two service entities. + +#. Create the Block Storage service API endpoints:: + + $ openstack endpoint create --region RegionOne \ + volume public http://controller:8776/v1/%\(tenant_id\)s + +--------------+-----------------------------------------+ + | Field | Value | + +--------------+-----------------------------------------+ + | enabled | True | + | id | 03fa2c90153546c295bf30ca86b1344b | + | interface | public | + | region | RegionOne | + | region_id | RegionOne | + | service_id | ab3bbbef780845a1a283490d281e7fda | + | service_name | cinder | + | service_type | volume | + | url | http://controller:8776/v1/%(tenant_id)s | + +--------------+-----------------------------------------+ + + $ openstack endpoint create --region RegionOne \ + volume internal http://controller:8776/v1/%\(tenant_id\)s + +--------------+-----------------------------------------+ + | Field | Value | + +--------------+-----------------------------------------+ + | enabled | True | + | id | 94f684395d1b41068c70e4ecb11364b2 | + | interface | internal | + | region | RegionOne | + | region_id | RegionOne | + | service_id | ab3bbbef780845a1a283490d281e7fda | + | service_name | cinder | + | service_type | volume | + | url | http://controller:8776/v1/%(tenant_id)s | + +--------------+-----------------------------------------+ + + $ openstack endpoint create --region RegionOne \ + volume admin http://controller:8776/v1/%\(tenant_id\)s + +--------------+-----------------------------------------+ + | Field | Value | + +--------------+-----------------------------------------+ + | enabled | True | + | id | 4511c28a0f9840c78bacb25f10f62c98 | + | interface | admin | + | region | RegionOne | + | region_id | RegionOne | + | service_id | ab3bbbef780845a1a283490d281e7fda | + | service_name | cinder | + | service_type | volume | + | url | http://controller:8776/v1/%(tenant_id)s | + +--------------+-----------------------------------------+ + + $ openstack endpoint create --region RegionOne \ + volumev2 public http://controller:8776/v2/%\(tenant_id\)s + +--------------+-----------------------------------------+ + | Field | Value | + +--------------+-----------------------------------------+ + | enabled | True | + | id | 513e73819e14460fb904163f41ef3759 | + | interface | public | + | region | RegionOne | + | region_id | RegionOne | + | service_id | eb9fd245bdbc414695952e93f29fe3ac | + | service_name | cinderv2 | + | service_type | volumev2 | + | url | http://controller:8776/v2/%(tenant_id)s | + +--------------+-----------------------------------------+ + + $ openstack endpoint create --region RegionOne \ + volumev2 internal http://controller:8776/v2/%\(tenant_id\)s + +--------------+-----------------------------------------+ + | Field | Value | + +--------------+-----------------------------------------+ + | enabled | True | + | id | 6436a8a23d014cfdb69c586eff146a32 | + | interface | internal | + | region | RegionOne | + | region_id | RegionOne | + | service_id | eb9fd245bdbc414695952e93f29fe3ac | + | service_name | cinderv2 | + | service_type | volumev2 | + | url | http://controller:8776/v2/%(tenant_id)s | + +--------------+-----------------------------------------+ + + $ openstack endpoint create --region RegionOne \ + volumev2 admin http://controller:8776/v2/%\(tenant_id\)s + +--------------+-----------------------------------------+ + | Field | Value | + +--------------+-----------------------------------------+ + | enabled | True | + | id | e652cf84dd334f359ae9b045a2c91d96 | + | interface | admin | + | region | RegionOne | + | region_id | RegionOne | + | service_id | eb9fd245bdbc414695952e93f29fe3ac | + | service_name | cinderv2 | + | service_type | volumev2 | + | url | http://controller:8776/v2/%(tenant_id)s | + +--------------+-----------------------------------------+ + + .. note:: + + The Block Storage services requires endpoints for each service + entity. + +Install and configure components +-------------------------------- + +#. Install OpenStack Block Storage Controller bundle:: + + # swupd bundle-add openstack-block-storage-controller + # swupd verify --fix + +#. Custom configurations will be located at ``/etc/cinder``. + + * Create ``/etc/cinder`` directory:: + + mkdir /etc/cinder + + * Create empty cinder configuration file in + ``/etc/cinder/cinder.conf``:: + + touch /etc/cinder/cinder.conf + +#. Edit the ``/etc/cinder/cinder.conf`` file and complete the following + actions: + + * In the ``[database]`` section, configure database access. Replace + ``CINDER_DBPASS`` with the password you chose for the + database:: + + [database] + ... + connection=mysql://cinder:CINDER_DBPASS@controller/cinder + + * In the ``[DEFAULT]`` and ``[oslo_messaging_rabbit]`` section, + configure RabbitMQ message queue access. Replace ``RABBIT_PASS`` + with the password you chose for the account in + RabbitMQ:: + + [DEFAULT] + ... + rpc_backend = rabbit + + [oslo_messaging_rabbit] + ... + rabbit_host = controller + rabbit_userid = openstack + rabbit_password = RABBIT_PASS + + * In the ``[DEFAULT]`` and ``[keystone_authtoken]`` sections, configure + Identity service access. Replace ``CINDER_PASS`` with the password you + chose for the ``cinder`` user in the Identity service.:: + + [DEFAULT] + ... + auth_strategy = keystone + + [keystone_authtoken] + ... + auth_uri = http://controller:5000 + auth_url = http://controller:35357 + auth_plugin = password + project_domain_id = default + user_domain_id = default + project_name = service + username = cinder + password = CINDER_PASS + + * In the ``[DEFAULT]`` section, configure the ``my_ip`` option to + use the management interface IP address of the controller node:: + + [DEFAULT] + ... + my_ip = 10.0.0.11 + +#. Populate the Block Storage database:: + + # su -s /bin/sh -c "cinder-manage db sync" cinder + +Configure Compute to use Block Storage +-------------------------------------- + +* Edit the ``/etc/nova/nova.conf`` file and add the following + to it:: + + [cinder] + os_region_name = RegionOne + +Finalize installation +--------------------- + +#. Restart the Compute API service:: + + # systemctl restart uwsgi@nova-api.service + +#. Start the Block Storage services and configure them to start when + the system boots:: + + # systemctl enable cinder-api cinder-scheduler + # systemctl start cinder-api cinder-scheduler + +Install and configure a storage node +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This section describes how to install and configure storage nodes +for the Block Storage service. For simplicity, this configuration +references one storage node with an empty local block storage device. +The instructions use ``/dev/sdb``, but you can substitute a different +value for your particular node. + +The service provisions logical volumes on this device using the +LVM driver and provides them to instances via iSCSI transport. +You can follow these instructions with minor modifications to +horizontally scale your environment with additional storage nodes. + +Prerequisites +------------- + +#. Install the openstack block storage bundle:: + + # swupd bundle-add openstack-block-storage + # swupd verify --fix + +#. Create the LVM physical volume: ``/dev/sdb1`` If your system uses a + different device name, adjust these steps accordingly:: + + # pvcreate /dev/sdb1 + Physical volume "/dev/sdb1" successfully created + +#. Create the LVM volume group ``cinder-volumes``:: + + # vgcreate cinder-volumes /dev/sdb1 + Volume group "cinder-volumes" successfully created + + The Block Storage service creates logical volumes in this volume + group. + +#. Only instances can access Block Storage volumes. However, the + underlying operating system manages the devices associated with the + volumes. By default, the LVM volume scanning tool scans the ``/dev`` + directory for block storage devices that contain volumes. If projects + use LVM on their volumes, the scanning tool detects these volumes and + attempts to cache them which can cause a variety of problems with + both the underlying operating system and project volumes. You must + reconfigure LVM to scan only the devices that contain the + ``cinder-volume`` volume group. Edit the ``/etc/lvm/lvm.conf`` file + and complete the following action: + + * In the ``devices`` section, add a filter that accepts the + ``/dev/sdb`` device and rejects all other devices:: + + devices { + filter = [ "a/sdb/", "r/.*/"] + } + +Install and configure components +-------------------------------- + +#. Edit the ``/etc/cinder/cinder.conf`` file and complete the following + actions: + + * In the ``[database]`` section, configure database access. Replace + ``CINDER_DBPASS`` with the password you chose for the Block Storage + database:: + + [database] + ... + connection = mysql://cinder:CINDER_DBPASS@controller/cinder + + * In the ``[DEFAULT]`` and ``[oslo_messaging_rabbit]`` sections, + configure ``RabbitMQ`` message queue access. Replace ``RABBIT_PASS`` + with the password you chose for the openstack account in + ``RabbitMQ``:: + + [DEFAULT] + ... + rpc_backend = rabbit + + [oslo_messaging_rabbit] + ... + rabbit_host = controller + rabbit_userid = openstack + rabbit_password = RABBIT_PASS + + * In the ``[DEFAULT]`` and ``[keystone_authtoken]`` sections, + configure Identity service access. Replace ``CINDER_PASS`` with the + password you chose for the cinder user in the Identity service:: + + [DEFAULT] + ... + auth_strategy = keystone + + [keystone_authtoken] + ... + auth_uri = http://controller:5000 + auth_url = http://controller:35357 + auth_plugin = password + project_domain_id = default + user_domain_id = default + project_name = service + username = cinder + password = CINDER_PASS + + * In the ``[DEFAULT]`` section, configure the ``my_ip`` option. + Replace ``MANAGEMENT_INTERFACE_IP_ADDRESS`` with the IP address + of the management network interface on your storage node, + typically 10.0.0.41 for the first node in the example + architecture:: + + [DEFAULT] + ... + my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS + + * In the ``[lvm]`` section, configure the LVM back end with the LVM + driver, ``cinder-volumes`` volume group, iSCSI protocol, and + appropriate iSCSI service:: + + [lvm] + ... + volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver + volume_group = cinder-volumes + iscsi_protocol = iscsi + iscsi_helper = tgtadm + + * In the ``[DEFAULT]`` section, enable the LVM back end:: + + [DEFAULT] + ... + enabled_backends = lvm + + * In the ``[DEFAULT]`` section, configure the location of the Image + service:: + + [DEFAULT] + ... + glance_host = controller + +#. Let systemd set the correct permissions for files in ``/etc/cinder``:: + + # systemctl restart update-triggers.target + +Finalize installation +--------------------- + +#. Start the Block Storage volume service including its dependencies + and configure them to start when the system boots:: + + # systemctl enable iscsid tgtd cinder-volume + # systemctl start iscsid tgtd cinder-volume + +Configuring a compute node to use Block Storage +----------------------------------------------- + +#. Perform the following steps to enable a compute node to work with + block storage:: + + # systemctl enable iscsid + # systemctl start iscsi-gen-initiatorname iscsid + +Verify operation +~~~~~~~~~~~~~~~~ +Verify operation of the Block Storage service. + +#. Source the ``admin`` credentials to gain access to + admin-only CLI commands:: + + $ source admin-openrc.sh + +#. List service components to verify successful launch of each process:: + + $ cinder service-list + +------------------+------------+------+---------+-------+----------------------------+-----------------+ + | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason | + +------------------+------------+------+---------+-------+----------------------------+-----------------+ + | cinder-scheduler | controller | nova | enabled | up | 2014-10-18T01:30:54.000000 | None | + | cinder-volume | block1@lvm | nova | enabled | up | 2014-10-18T01:30:57.000000 | None | + +------------------+------------+------+---------+-------+----------------------------+-----------------+ + +Next topic: :ref:`openstack_dashboard`. diff --git a/source/_build/html/_sources/openstack_bundle_and_service_summary.txt b/source/_build/html/_sources/openstack_bundle_and_service_summary.txt new file mode 100644 index 00000000..1ae888de --- /dev/null +++ b/source/_build/html/_sources/openstack_bundle_and_service_summary.txt @@ -0,0 +1,51 @@ +.. _openstack_bundle_and_service_summary: + +OpenStack* bundle and service summary +############################################################ + +OpenStack provides an Infrastructure-as-a-Service (IaaS) solution +through a variety of complementary services. Each service offers an +application programming interface (API) that facilitates this +integration. The following table provides a list of OpenStack MVP +services: + +.. csv-table:: OpenStack MVP services + :header: "Bundle Name (service)", "Project Name", "Description" + :widths: 90, 90, 300 + + "openstack-compute-controller", "Nova", "Manages the lifecycle of compute instances in an OpenStack environment. Responsibilities include spawning, scheduling and decommissioning of virtual machines on demand." + "openstack-identity", "Keystone", "Provides an authentication and authorization service for other OpenStack services. Provides a catalog of endpoints for all OpenStack services." + "openstack-image", "Glance", "Stores and retrieves virtual machine disk images. OpenStack Compute makes use of this during instance provisioning." + "openstack-dashboard", "Horizon", "Provides a web-based self-service portal to interact with underlying OpenStack services." + "openstack-network", "Neutron", "Enables Network-Connectivity-as-a-Service for some OpenStack services. Besides, it provides an API for users to define networks and the attachments into them." + "openstack-object-storage", "Swift", "Stores and retrieves arbitrary unstructured data objects. It is highly fault tolerant with its data replication and scale-out architecture." + "openstack-block-storage/openstack-block-storage-controller", "Cinder", "Provides persistent block storage to running instances." + "openstack-telemetry-controller", "Ceilometer", "Monitors and meters the OpenStack cloud for billing, benchmarking, scalability, and statistical purposes." + "openstack-orchestration", "Heat", "Orchestrates multiple composite cloud applications by using either the native Heat Orchestration Template (HOT) template format or the AWS CloudFormation template format." + +OpenStack is highly configurable to meet different needs. This guide +uses two-node architecture with legacy networking (Nova-network). + +- The controller node runs the Identity Service, Image Service, + management portion of Compute, and the Dashboard. It also includes + supporting services such as a SQL database and message queue. + Optionally, the controller node runs management portions of Block + Storage services. +- The compute node runs the hypervisor portion of Compute that operates + project virtual machines or instances. By default, Compute uses KVM + as the hypervisor. Compute also provisions project networks and + provides firewalling (security groups) services. You can run more + than one compute node. +- (Optional) Block Storage node contains the disks that the Block + Storage service provisions for instances. You can deploy more than + one block storage node. +- (Optional) Object Storage node contain the disks that the Object + Storage service uses for storing accounts, containers, and objects. + This service requires two nodes. Each node requires a minimum of one + network interface. You can deploy more than two object storage nodes. +- The self-service networks option augments the provider networks option + with layer-3 (routing) services that enable self-service networks + using overlay segmentation methods. Additionally, this option provides + the foundation for advanced services such as LBaaS and FWaaS. + +Next topic: :ref:`openstack_sys_req_and_pw_summary`. \ No newline at end of file diff --git a/source/_build/html/_sources/openstack_compute.txt b/source/_build/html/_sources/openstack_compute.txt new file mode 100644 index 00000000..8f8e5d68 --- /dev/null +++ b/source/_build/html/_sources/openstack_compute.txt @@ -0,0 +1,528 @@ +.. _openstack_compute: + +Compute +################## + +Use OpenStack Compute to host and manage cloud computing systems. +OpenStack Compute interacts with OpenStack Identity for authentication, +OpenStack Image Service for disk and server images, and OpenStack +Dashboard for the user and administrative interface. Image access is +limited by projects, and by users; quotas are limited per project (the +number of instances, for example). OpenStack Compute can scale +horizontally on standard hardware and download images to launch +instances. + +Install and configure controller node +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This section describes how to install and configure the +Compute service, code-named nova, on the controller node. + +Prerequisites +------------- + +Before you install and configure the Compute service, you must +create a database, service credentials, and API endpoints. + +#. To create the database, complete these steps: + + * Use the database access client to connect to the database server + as the root user:: + + $ mysql -u root -p + + * Create the ``nova`` database:: + + CREATE DATABASE nova; + + * Grant proper access to the nova database. Replace ``NOVA_DBPASS`` + with a suitable password:: + + GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + + * Exit the database access client. + +#. Source the admin credentials to gain access to admin-only CLI + commands:: + + $ source admin-openrc.sh + +#. To create the service credentials, complete these steps: + + * Create the ``nova`` user:: + + $ openstack user create --domain default --password-prompt nova + User Password: + Repeat User Password: + +-----------+----------------------------------+ + | Field | Value | + +-----------+----------------------------------+ + | domain_id | default | + | enabled | True | + | id | 8c46e4760902464b889293a74a0c90a8 | + | name | nova | + +-----------+----------------------------------+ + + * Add the ``admin`` role to the ``nova`` user:: + + $ openstack role add --project service --user nova admin + + * Create the ``nova`` service entity:: + + $ openstack service create --name nova \ + --description "OpenStack Compute" compute + +-------------+----------------------------------+ + | Field | Value | + +-------------+----------------------------------+ + | description | OpenStack Compute | + | enabled | True | + | id | 060d59eac51b4594815603d75a00aba2 | + | name | nova | + | type | compute | + +-------------+----------------------------------+ + +#. Create the Compute service API endpoints:: + + $ openstack endpoint create --region RegionOne \ + compute public http://controller:8774/v2/%\(tenant_id\)s + +--------------+-----------------------------------------+ + | Field | Value | + +--------------+-----------------------------------------+ + | enabled | True | + | id | 3c1caa473bfe4390a11e7177894bcc7b | + | interface | public | + | region | RegionOne | + | region_id | RegionOne | + | service_id | e702f6f497ed42e6a8ae3ba2e5871c78 | + | service_name | nova | + | service_type | compute | + | url | http://controller:8774/v2/%(tenant_id)s | + +--------------+-----------------------------------------+ + + $ openstack endpoint create --region RegionOne \ + compute internal http://controller:8774/v2/%\(tenant_id\)s + +--------------+-----------------------------------------+ + | Field | Value | + +--------------+-----------------------------------------+ + | enabled | True | + | id | e3c918de680746a586eac1f2d9bc10ab | + | interface | internal | + | region | RegionOne | + | region_id | RegionOne | + | service_id | e702f6f497ed42e6a8ae3ba2e5871c78 | + | service_name | nova | + | service_type | compute | + | url | http://controller:8774/v2/%(tenant_id)s | + +--------------+-----------------------------------------+ + + $ openstack endpoint create --region RegionOne \ + compute admin http://controller:8774/v2/%\(tenant_id\)s + +--------------+-----------------------------------------+ + | Field | Value | + +--------------+-----------------------------------------+ + | enabled | True | + | id | 38f7af91666a47cfb97b4dc790b94424 | + | interface | admin | + | region | RegionOne | + | region_id | RegionOne | + | service_id | e702f6f497ed42e6a8ae3ba2e5871c78 | + | service_name | nova | + | service_type | compute | + | url | http://controller:8774/v2/%(tenant_id)s | + +--------------+-----------------------------------------+ + +Installing and configuring the Compute controller components +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To install and configure the Compute controller components: + +#. Install OpenStack Compute Controller bundle:: + + # swupd bundle-add openstack-compute-controller + # swupd verify --fix + +#. Custom configurations will be located at ``/etc/nova``. + + * Create ``/etc/nova directory``:: + + # mkdir /etc/nova + + * Create empty nova configuration file ``/etc/nova/nova.conf``:: + + # touch /etc/nova/nova.conf + +#. Edit the ``/etc/nova/nova.conf`` file and complete the following + actions: + + * In the ``[database]`` section, configure database access. Replace + ``NOVA_DBPASS`` with the password you chose for the Compute database:: + + [database] + ... + connection=mysql://nova:NOVA_DBPASS@controller/nova + + * In the ``[DEFAULT]`` and ``[oslo_messaging_rabbit]`` sections, + configure ``RabbitMQ`` message queue access. Replace ``RABBIT_PASS`` + with the password you chose for the guest account in RabbitMQ:: + + [DEFAULT] + ... + rpc_backend = rabbit + + [oslo_messaging_rabbit] + ... + rabbit_host = controller + rabbit_userid = openstack + rabbit_password = RABBIT_PASS + + * In the ``[DEFAULT]`` and ``[keystone_authtoken]`` sections, + configure Identity service access. Replace ``NOVA_PASS`` with the + password you chose for the nova user in the Identity service:: + + [DEFAULT] + ... + auth_strategy = keystone + + [keystone_authtoken] + ... + auth_uri = http://controller:5000 + auth_url = http://controller:35357 + auth_plugin = password + project_domain_id = default + user_domain_id = default + project_name = service + username = nova + password = NOVA_PASS + + + * In the ``[DEFAULT]`` section, configure the ``my_ip`` option to + use the management interface IP address of the controller node:: + + [DEFAULT] + ... + my_ip = 10.0.0.11 + + * In the ``[DEFAULT]`` section, enable support for the Networking service:: + + [DEFAULT] + ... + network_api_class = nova.network.neutronv2.api.API + security_group_api = neutron + linuxnet_interface_driver = nova.network.linux_net.NeutronLinuxBridgeInterfaceDriver + firewall_driver = nova.virt.firewall.NoopFirewallDriver + + * In the ``[vnc]`` section, configure the VNC proxy to use the + management interface IP address of the controller node:: + + [vnc] + ... + vncserver_listen = 10.0.0.11 + vncserver_proxyclient_address = 10.0.0.11 + + * In the ``[glance]`` section, configure the location of the + Image Service:: + + [glance] + ... + host = controller + +#. Ensure files have proper ownership by running the following command:: + + # systemctl restart update-triggers.target + +#. Populate the Compute database:: + + su -s /bin/sh -c "nova-manage db sync" nova + +Finalizing Compute installation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Complete the following steps to finalize Compute installation: + +#. Create the ``/etc/nginx`` directory if doesn't exists and setup nova-api + and nova-metadata to start with the Nginx http server:: + + # mkdir -p /etc/nginx + # ln -s /usr/share/nginx/conf.d/nova-api.template /etc/nginx/nova-api.conf + +#. Restart the Nginx server to reload new configurations:: + + # systemctl restart nginx + +#. Start the Compute Service services and configure them to start + when the system boots:: + + # systemctl enable uwsgi@nova-api.socket \ + uwsgi@nova-metadata.socket nova-cert.service \ + nova-consoleauth.service nova-scheduler.service \ + nova-conductor.service nova-novncproxy.service + # systemctl start uwsgi@nova-api.socket \ + uwsgi@nova-metadata.socket nova-cert.service \ + nova-consoleauth.service nova-scheduler.service \ + nova-conductor.service nova-novncproxy.service + +Install and configure a compute note +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This section describes how to install and configure the Compute service +on a compute node. This configuration uses the QEMU hypervisor with the +KVM extension on compute nodes that support hardware acceleration for +virtual machines. + +Install and configure components +-------------------------------- + +#. Install OpenStack Compute bundle:: + + # clr_bundle_add openstack-compute + +#. Custom configurations will be located at ``/etc/nova``. + + * Create ``/etc/nova`` directory:: + + # mkdir /etc/nova + + * Create empty nova configuration file ``/etc/nova/nova.conf``:: + + # touch /etc/nova/nova.conf + +#. Edit the ``/etc/nova/nova.conf`` file and complete the following + actions: + + * In the ``[DEFAULT]`` and ``[oslo_messaging_rabbit]`` sections, + configure RabbitMQ message broker access. Replace ``RABBIT_PASS`` + with the password you chose for the ``openstack`` account in ``RabbitMQ``:: + + [DEFAULT] + ... + rpc_backend = rabbit + + [oslo_messaging_rabbit] + ... + rabbit_host = controller + rabbit_userid = openstack + rabbit_password = RABBIT_PASS + + * In the ``[DEFAULT]`` and ``[keystone_authtoken]`` sections, + configure Identity service access. Replace ``NOVA_PASS`` with the + password you chose for the nova user in the Identity service:: + + [DEFAULT] + ... + auth_strategy = keystone + + [keystone_authtoken] + ... + auth_uri = http://controller:5000 + auth_url = http://controller:35357 + auth_plugin = password + project_domain_id = default + user_domain_id = default + project_name = service + username = nova + password = NOVA_PASS + + * In the ``[DEFAULT]`` section, configure the ``my_ip`` option. + Replace ``MANAGEMENT_INTERFACE_IP_ADDRESS`` with the IP address of + the management network interface on your compute node, typically + ``10.0.0.31`` for the first node in the example architecture:: + + [DEFAULT] + ... + my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS + + * In the ``[DEFAULT]`` section, enable support for the Networking service:: + + [DEFAULT] + ... + network_api_class = nova.network.neutronv2.api.API + security_group_api = neutron + linuxnet_interface_driver = nova.network.linux_net.NeutronLinuxBridgeInterfaceDriver + firewall_driver = nova.virt.firewall.NoopFirewallDriver + + * In the ``[vnc]`` section, enable and configure remote console access:: + + [vnc] + ... + enabled = True + vncserver_listen = 0.0.0.0 + vncserver_proxyclient_address = MANAGEMENT_INTERFACE_IP_ADDRESS + novncproxy_base_url = http://controller:6080/vnc_auto.html + + The server component listens on all IP addresses and the proxy + component only listens on the management interface IP address of + the compute node. The base URL indicates the location where you + can use a web browser to access remote consoles of instances on + this compute node. + + * In the ``[glance]`` section, configure the location of the + Image Service:: + + [glance] + ... + host = controller + +Finalize compute node installation +---------------------------------- + +#. Determine whether your compute node supports hardware acceleration + for virtual machines:: + + $ egrep -c '(vmx|svm)' /proc/cpuinfo + + If this command returns a value of ``one or greater``, your compute + node supports hardware acceleration which typically requires no + additional configuration. + + If this command returns a value of ``zero`` , your compute node does + not support hardware acceleration and you must configure ``libvirt`` + to use QEMU instead of KVM. + + * Edit the ``[libvirt]`` section in the ``/etc/nova/nova.conf`` file + as follows:: + + [libvirt] + ... + virt_type = qemu + +#. Ensure files have proper ownership by running the following command:: + + # systemctl restart update-triggers.target + +#. Start the Compute service including its dependencies and configure + them to start automatically when the system boots:: + + # systemctl enable libvirtd.service \ + nova-compute.service + # systemctl start libvirtd.service \ + nova-compute.service + +Verify operation +~~~~~~~~~~~~~~~~ +Verify operation of the Compute service. + +*Note:* Perform these commands on the controller node. + +#. Source the ``admin`` credentials to gain access to + admin-only CLI commands:: + + $ source admin-openrc.sh + +#. List service components to verify successful launch and + registration of each process:: + + $ nova service-list + +----+------------------+------------+----------+---------+-------+--------------+-----------------+ + | Id | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason | + +----+------------------+------------+----------+---------+-------+--------------+-----------------+ + | 1 | nova-conductor | controller | internal | enabled | up | 2014-09-16.. | - | + | 2 | nova-consoleauth | controller | internal | enabled | up | 2014-09-16.. | - | + | 3 | nova-scheduler | controller | internal | enabled | up | 2014-09-16.. | - | + | 4 | nova-cert | controller | internal | enabled | up | 2014-09-16.. | - | + | 5 | nova-compute | compute1 | nova | enabled | up | 2014-09-16.. | - | + +----+------------------+------------+----------+---------+-------+--------------+-----------------+ + +#. List API endpoints in the Identity service to verify connectivity + with the Identity service:: + + $ nova endpoints + +-----------+------------------------------------------------------------+ + | nova | Value | + +-----------+------------------------------------------------------------+ + | id | 1fb997666b79463fb68db4ccfe4e6a71 | + | interface | public | + | region | RegionOne | + | region_id | RegionOne | + | url | http://controller:8774/v2/ae7a98326b9c455588edd2656d723b9d | + +-----------+------------------------------------------------------------+ + +-----------+------------------------------------------------------------+ + | nova | Value | + +-----------+------------------------------------------------------------+ + | id | bac365db1ff34f08a31d4ae98b056924 | + | interface | admin | + | region | RegionOne | + | region_id | RegionOne | + | url | http://controller:8774/v2/ae7a98326b9c455588edd2656d723b9d | + +-----------+------------------------------------------------------------+ + +-----------+------------------------------------------------------------+ + | nova | Value | + +-----------+------------------------------------------------------------+ + | id | e37186d38b8e4b81a54de34e73b43f34 | + | interface | internal | + | region | RegionOne | + | region_id | RegionOne | + | url | http://controller:8774/v2/ae7a98326b9c455588edd2656d723b9d | + +-----------+------------------------------------------------------------+ + + +-----------+----------------------------------+ + | glance | Value | + +-----------+----------------------------------+ + | id | 41ad39f6c6444b7d8fd8318c18ae0043 | + | interface | admin | + | region | RegionOne | + | region_id | RegionOne | + | url | http://controller:9292 | + +-----------+----------------------------------+ + +-----------+----------------------------------+ + | glance | Value | + +-----------+----------------------------------+ + | id | 50ecc4ce62724e319f4fae3861e50f7d | + | interface | internal | + | region | RegionOne | + | region_id | RegionOne | + | url | http://controller:9292 | + +-----------+----------------------------------+ + +-----------+----------------------------------+ + | glance | Value | + +-----------+----------------------------------+ + | id | 7d3df077a20b4461a372269f603b7516 | + | interface | public | + | region | RegionOne | + | region_id | RegionOne | + | url | http://controller:9292 | + +-----------+----------------------------------+ + + +-----------+----------------------------------+ + | keystone | Value | + +-----------+----------------------------------+ + | id | 88150c2fdc9d406c9b25113701248192 | + | interface | internal | + | region | RegionOne | + | region_id | RegionOne | + | url | http://controller:5000/v2.0 | + +-----------+----------------------------------+ + +-----------+----------------------------------+ + | keystone | Value | + +-----------+----------------------------------+ + | id | cecab58c0f024d95b36a4ffa3e8d81e1 | + | interface | public | + | region | RegionOne | + | region_id | RegionOne | + | url | http://controller:5000/v2.0 | + +-----------+----------------------------------+ + +-----------+----------------------------------+ + | keystone | Value | + +-----------+----------------------------------+ + | id | fc90391ae7cd4216aca070042654e424 | + | interface | admin | + | region | RegionOne | + | region_id | RegionOne | + | url | http://controller:35357/v2.0 | + +-----------+----------------------------------+ + + *Note:* Ignore any warnings in this output. + +#. List images in the Image service catalog to verify connectivity + with the Image service:: + + $ nova image-list + +--------------------------------------+--------+--------+--------+ + | ID | Name | Status | Server | + +--------------------------------------+--------+--------+--------+ + | 38047887-61a7-41ea-9b49-27987d5e8bb9 | cirros | ACTIVE | | + +--------------------------------------+--------+--------+--------+ + +Next topic: :ref:`openstack_block_storage`. \ No newline at end of file diff --git a/source/_build/html/_sources/openstack_dashboard.txt b/source/_build/html/_sources/openstack_dashboard.txt new file mode 100644 index 00000000..ce585372 --- /dev/null +++ b/source/_build/html/_sources/openstack_dashboard.txt @@ -0,0 +1,34 @@ +.. _openstack_dashboard: + +Dashboard +#################### + +The OpenStack Dashboard, also known as Horizon, is a web-based interface +for cloud administrators and users to manage various OpenStack resources +and services. + +The Dashboard enables web-based interactions with the +OpenStack Compute cloud controller through the OpenStack APIs. + +Installation and configuration +------------------------------ + +The dashboard relies on functional core services including +Identity, Image service, Compute, and either Networking (neutron) +or legacy networking (nova-network). Environments with +stand-alone services such as Object Storage cannot use the +dashboard. + +To get started with OpenStack Dashboard services: + +#. Install the OpenStack Dashboard bundle:: + + # swupd bundle-add openstack-dashboard + # swupd verify --fix + +#. Enable and start the dashboard socket and the Nginx server:: + + # systemctl enable nginx uwsgi@horizon.socket + # systemctl restart nginx uwsgi@horizon.socket + +Next topic: :ref:`openstack_networking`. diff --git a/source/_build/html/_sources/openstack_environment-database.txt b/source/_build/html/_sources/openstack_environment-database.txt new file mode 100644 index 00000000..a971bd3d --- /dev/null +++ b/source/_build/html/_sources/openstack_environment-database.txt @@ -0,0 +1,58 @@ +.. openstack_environment-database: + +Database +~~~~~~~~ +Most OpenStack services use an SQL database to store information. The +database typically runs on the controller node. The procedures in this +guide use MariaDB. + +Install and configure the database server +----------------------------------------- + +#. Install MariaDB bundle: + + .. code-block:: console + + # clr_bundle_add database-mariadb + +#. Create the ``/etc/mariadb/`` folder and the ``/etc/mariadb/openstack.cnf`` file. + + .. code-block:: console + + # mkdir /etc/mariadb + # touch /etc/mariadb/openstack.cnf + +#. Add the ``[mysqld]`` section, set the bind-address key to the + management IP address of the controller node to enable access by + other nodes via the management network and enable useful options for + UTF-8 character set: + + .. code:: console + + [mysqld] + bind-address = 10.0.0.11 + default-storage-engine = innodb + innodb_file_per_table + collation-server = utf8_general_ci + init-connect = 'SET NAMES utf8' + character-set-server = utf8 + +Finalizing database installation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Complete the following steps to finalize database installation: + +#. Start the database service and configure it to start when the system + boots: + + .. code:: console + + # systemctl enable mariadb.service + # systemctl start mariadb.service + +2. Secure the database service including choosing a suitable password + for the root account: + + .. code:: console + + # mysql_secure_installation diff --git a/source/_build/html/_sources/openstack_environment-messaging.txt b/source/_build/html/_sources/openstack_environment-messaging.txt new file mode 100644 index 00000000..25a9237b --- /dev/null +++ b/source/_build/html/_sources/openstack_environment-messaging.txt @@ -0,0 +1,59 @@ +.. openstack_environment-messaging: + +Message queue +~~~~~~~~~~~~~ + +OpenStack uses a ``message queue`` to coordinate operations and +status details among services. The message queue service typically +runs on the controller node. OpenStack supports several message queue +services. This guide implements the ``RabbitMQ`` message queue service. + +Install the message queue service +--------------------------------- + + .. code-block:: console + + # clr_bundle_add message-broker-rabbitmq + + +Configuring the message broker service +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Complete the following steps to configure the message broker service: + +1. Message broker service needs to be able to resolve to itself. Add the + following line to :file:`/etc/hosts` + + .. code-block:: literal + + 127.0.0.1 controller + + +2. Start the message broker service and configure it to start when the + system boots: + + .. code-block:: console + + # systemctl enable rabbitmq-server.service + # systemctl start rabbitmq-server.service + + +3. Add the OpenStack user: + + .. code-block:: console + + # rabbitmqctl add_user openstack RABBIT_PASS + Creating user openstack ... + ...done. + + Replace ``RABBIT_PASS`` with a suitable password. + + +4. Permit configuration, write, and read access for the OpenStack user: + + .. code-block:: console + + # rabbitmqctl set_permissions openstack ".*" ".*" ".*" + + Setting permissions for user "openstack" in vhost "/" ... + ...done. diff --git a/source/_build/html/_sources/openstack_identity-openrc.txt b/source/_build/html/_sources/openstack_identity-openrc.txt new file mode 100644 index 00000000..724333db --- /dev/null +++ b/source/_build/html/_sources/openstack_identity-openrc.txt @@ -0,0 +1,75 @@ +.. _openstack_identity-openrc: + +Create OpenStack* client environment scripts +############################################ + +The previous section used a combination of environment variables and +command options to interact with the Identity service via the +``openstack`` client. To increase efficiency of client operations, +OpenStack supports simple client environment scripts also known as +OpenRC files. These scripts typically contain common options for +all clients but also support unique options. For more information, see the +`OpenStack User Guide `__. + +Creating the scripts +-------------------- + +Create client environment scripts for the ``admin`` and ``demo`` +projects and users. Future portions of this guide reference these +scripts to load appropriate credentials for client operations. + +#. Create the ``admin-openrc.sh`` file and add the following content:: + + export OS_PROJECT_DOMAIN_ID=default + export OS_USER_DOMAIN_ID=default + export OS_PROJECT_NAME=admin + export OS_TENANT_NAME=admin + export OS_USERNAME=admin + export OS_PASSWORD=ADMIN_PASS + export OS_AUTH_URL=http://controller:35357/v3 + export OS_IDENTITY_API_VERSION=3 + + Replace ``ADMIN_PASS`` with the password you chose + for the ``admin`` user in the Identity service. + +#. Create the ``demo-openrc.sh`` file and add the following content:: + + export OS_PROJECT_DOMAIN_ID=default + export OS_USER_DOMAIN_ID=default + export OS_PROJECT_NAME=demo + export OS_TENANT_NAME=demo + export OS_USERNAME=demo + export OS_PASSWORD=DEMO_PASS + export OS_AUTH_URL=http://controller:5000/v3 + export OS_IDENTITY_API_VERSION=3 + + Replace ``DEMO_PASS`` with the password you chose + for the ``demo`` user in the Identity service. + +Using the scripts +----------------- + +To run clients as a specific project and user, you can simply load +the associated client environment script prior to running them. +For example: + +#. Load the ``admin-openrc.sh`` file to populate + environment variables with the location of the Identity service + and the ``admin`` project and user credentials:: + + $ source admin-openrc.sh + +#. Request an authentication token:: + + $ openstack token issue + +------------+----------------------------------+ + | Field | Value | + +------------+----------------------------------+ + | expires | 2015-03-25T01:45:49.950092Z | + | id | cd4110152ac24bdeaa82e1443c910c36 | + | project_id | cf12a15c5ea84b019aec3dc45580896b | + | user_id | 4d411f2291f34941b30eef9bd797505a | + +------------+----------------------------------+ + +Next topic: :ref:`openstack_image`. \ No newline at end of file diff --git a/source/_build/html/_sources/openstack_identity.txt b/source/_build/html/_sources/openstack_identity.txt new file mode 100644 index 00000000..7ef71f0e --- /dev/null +++ b/source/_build/html/_sources/openstack_identity.txt @@ -0,0 +1,418 @@ +.. _openstack_identity: + +Identity Service +################### + +The OpenStack Identity service provides a single point of integration for +managing authentication, authorization, and service catalog services. +Additionally, it provides information about users but that are not included in +OpenStack (such as LDAP services) can be integrated into a pre-existing +infrastructure. + +When installing OpenStack Identity service, you must register each +service in your OpenStack installation. Identity service can then track +which OpenStack services are installed and where they are located on +the network. + +Install and configure +~~~~~~~~~~~~~~~~~~~~~ + +This section describes how to install and configure the OpenStack +Identity service, code-named keystone, on the controller node. For +performance, this configuration deploys the Nginx* HTTP server to handle +requests. + +Prerequisites +------------- + +Before you configure the OpenStack Identity service, you must create a +database and an administration token. + +#. To create the database, complete the following actions: + + * Use the database access client to connect to the database server as the + ``root`` user.:: + + $ mysql -u root -p + + * Create the ``keystone`` database.:: + + CREATE DATABASE keystone; + + * Grant proper access to the ``keystone`` databaseReplace ``KEYSTONE_DBPASS`` + with a suitable password.:: + + GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ + IDENTIFIED BY 'KEYSTONE_DBPASS'; + GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ + IDENTIFIED BY 'KEYSTONE_DBPASS'; + + + * Exit the database access client. + +#. Generate a random value to use as the administration token during + initial configuration:: + + $ openssl rand -hex 10 + +Install and configure components +-------------------------------- + +#. Run the following command to install the packages.:: + + # swupd bundle-add openstack-identity + # swupd verify --fix + +#. Custom configurations will be located at ``/etc/keystone/``. + + * Create the ``/etc/keystone`` directory.:: + + # mkdir /etc/keystone + + * Create keystone configuration file ``/etc/keystone/keystone.conf``.:: + + # touch /etc/keystone/keystone.conf + +#. Edit the ``/etc/keystone/keystone.conf`` file and complete the following + actions: + + * In the ``[DEFAULT]`` section, define the value of the initial + administration token. Replace ``ADMIN_TOKEN`` with the random value that + you generated in a previous step.:: + + [DEFAULT] + ... + admin_token = ADMIN_TOKEN + + * In the ``[database]`` section, configure database access. Replace + ``KEYSTONE_DBPASS`` with the password you chose for the database.:: + + [database] + ... + connection = mysql://keystone:KEYSTONE_DBPASS@controller/keystone + + +#. Ensure files have proper ownership by running the following command:: + + # systemctl restart update-triggers.target + +#. Populate the Identity service database:: + + # su -s /bin/sh -c "keystone-manage db_sync" keystone + +Finalize the installation +------------------------- + +#. Keystone is deployed as a uwsgi module. To start the Identity + service, you should enable and start the nginx service.:: + + # systemctl enable nginx uwsgi@keystone-admin.socket \ + uwsgi@keystone-public.socket + + # systemctl start nginx uwsgi@keystone-admin.socket \ + uwsgi@keystone-public.socket + + +Create the service entity and API endpoints +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The Identity service provides a catalog of services and their locations. +Each service that you add to your OpenStack environment requires a +service entity and several API endpoints in the catalog. + +Prerequisites +------------- + +You must pass the value of the authentication token to the `openstack` +command with the ``--os-token`` parameter or set the OS_TOKEN +environment variable. Similarly, you must also pass the value of the +Identity service URL to the `openstack` command with the ``--os-url`` +parameter or set the OS_URL environment variable. This guide uses +environment variables to reduce command length. + +#. Configure the authentication token:: + + $ export OS_TOKEN=ADMIN_TOKEN + + Replace ``ADMIN_TOKEN`` with the authentication token that you + generated before. For example:: + + $ export OS_TOKEN=294a4c8a8a475f9b9836 + +#. Configure the endpoint URL:: + + $ export OS_URL=http://controller:35357/v3 + +#. Configure the Identity API version:: + + $ export OS_IDENTITY_API_VERSION=3 + +#. Install the OpenStack Python clients bundle:: + + # swupd bundle-add openstack-python-clients + # swupd verify --fix + + +Create the service entity and API endpoints +------------------------------------------- + + +#. The Identity service manages a catalog of services in your OpenStack + environment. Services use this catalog to determine the other services + available in your environment. + + Create the service entity for the Identity service:: + + $ openstack service create \ + --name keystone --description "OpenStack Identity" identity + +-------------+----------------------------------+ + | Field | Value | + +-------------+----------------------------------+ + | description | OpenStack Identity | + | enabled | True | + | id | 4ddaae90388b4ebc9d252ec2252d8d10 | + | name | keystone | + | type | identity | + +-------------+----------------------------------+ + +#. The Identity service manages a catalog of API endpoints associated with + the services in your OpenStack environment. Services use this catalog to + determine how to communicate with other services in your environment. + + OpenStack uses three API endpoint variants for each service: admin, + internal, and public. The admin API endpoint allows modifying users and + tenants by default, while the public and internal APIs do not allow these + operations. In a production environment, the variants might reside on + separate networks that service different types of users for security + reasons. For instance, the public API network might be visible from the + Internet so customers can manage their clouds. The admin API network + might be restricted to operators within the organization that manages + cloud infrastructure. The internal API network might be restricted to + the hosts that contain OpenStack services. Also, OpenStack supports + multiple regions for scalability. For simplicity, this guide uses the + management network for all endpoint variations and the default + ``RegionOne`` region. + + Create the Identity service API endpoints:: + + $ openstack endpoint create --region RegionOne \ + identity public http://controller:5000/v3 + +--------------+----------------------------------+ + | Field | Value | + +--------------+----------------------------------+ + | enabled | True | + | id | 30fff543e7dc4b7d9a0fb13791b78bf4 | + | interface | public | + | region | RegionOne | + | region_id | RegionOne | + | service_id | 8c8c0927262a45ad9066cfe70d46892c | + | service_name | keystone | + | service_type | identity | + | url | http://controller:5000/v3 | + +--------------+----------------------------------+ + + $ openstack endpoint create --region RegionOne \ + identity internal http://controller:5000/v3 + +--------------+----------------------------------+ + | Field | Value | + +--------------+----------------------------------+ + | enabled | True | + | id | 57cfa543e7dc4b712c0ab137911bc4fe | + | interface | internal | + | region | RegionOne | + | region_id | RegionOne | + | service_id | 6f8de927262ac12f6066cfe70d99ac51 | + | service_name | keystone | + | service_type | identity | + | url | http://controller:5000/v3 | + +--------------+----------------------------------+ + + $ openstack endpoint create --region RegionOne \ + identity admin http://controller:35357/v3 + +--------------+----------------------------------+ + | Field | Value | + +--------------+----------------------------------+ + | enabled | True | + | id | 78c3dfa3e7dc44c98ab1b1379122ecb1 | + | interface | admin | + | region | RegionOne | + | region_id | RegionOne | + | service_id | 34ab3d27262ac449cba6cfe704dbc11f | + | service_name | keystone | + | service_type | identity | + | url | http://controller:35357/v3 | + +--------------+----------------------------------+ + +Creating projects, users and roles +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Complete the following steps to create projects, users and roles: + +#. Create an administrative project, user, and role for administrative + operations in your environment: + + * Create the ``admin`` project:: + + $ openstack project create --domain default \ + --description "Admin Project" admin + +-------------+----------------------------------+ + | Field | Value | + +-------------+----------------------------------+ + | description | Admin Project | + | domain_id | default | + | enabled | True | + | id | 343d245e850143a096806dfaefa9afdc | + | is_domain | False | + | name | admin | + | parent_id | None | + +-------------+----------------------------------+ + + * Create the ``admin`` user:: + + $ openstack user create --domain default \ + --password-prompt admin + User Password: + Repeat User Password: + +-----------+----------------------------------+ + | Field | Value | + +-----------+----------------------------------+ + | domain_id | default | + | email | admin@example.com | + | enabled | True | + | id | ac3377633149401296f6c0d92d79dc16 | + | name | admin | + +-----------+----------------------------------+ + + * Create the ``admin`` role:: + + $ openstack role create admin + +-------+----------------------------------+ + | Field | Value | + +-------+----------------------------------+ + | id | cd2cb9a39e874ea69e5d4b896eb16128 | + | name | admin | + +-------+----------------------------------+ + + * Add the ``admin`` role to the ``admin`` project and user:: + + $ openstack role add --project admin --user admin admin + +#. This guide uses a service project that contains a unique user for each + service that you add to your environment. Create the ``service`` + project:: + + $ openstack project create --domain default \ + --description "Service Project" service + +-------------+----------------------------------+ + | Field | Value | + +-------------+----------------------------------+ + | description | Service Project | + | domain_id | default | + | enabled | True | + | id | 894cdfa366d34e9d835d3de01e752262 | + | is_domain | False | + | name | service | + | parent_id | None | + +-------------+----------------------------------+ + +#. Regular (non-admin) tasks should use an unprivileged project and user. + As an example, this guide creates the ``demo`` project and user. + + * Create the ``demo`` project:: + + $ openstack project create --domain default \ + --description "Demo Project" demo + +-------------+----------------------------------+ + | Field | Value | + +-------------+----------------------------------+ + | description | Demo Project | + | domain_id | default | + | enabled | True | + | id | ed0b60bf607743088218b0a533d5943f | + | is_domain | False | + | name | demo | + | parent_id | None | + +-------------+----------------------------------+ + + * Create the ``demo`` user:: + + $ openstack user create --domain default \ + --password-prompt demo + User Password: + Repeat User Password: + +-----------+----------------------------------+ + | Field | Value | + +-----------+----------------------------------+ + | domain_id | default | + | email | demo@example.com | + | enabled | True | + | id | 58126687cbcc4888bfa9ab73a2256f27 | + | name | demo | + +-----------+----------------------------------+ + + * Create the ``user`` role:: + + $ openstack role create user + +-------+----------------------------------+ + | Field | Value | + +-------+----------------------------------+ + | id | 997ce8d05fc143ac97d83fdfb5998552 | + | name | user | + +-------+----------------------------------+ + + * Add the ``user`` role to the ``demo`` project and user:: + + $ openstack role add --project demo --user demo user + +Verify operation +~~~~~~~~~~~~~~~~ + +Verify operation of the Identity service before installing other +services. + +#. For security reasons, remove admin_token from + ``/etc/keystone/keystone.conf``: + + Edit the ``[DEFAULT]`` section and remove ``admin_token``. + +#. Restart the keystone-admin service to reload the changes:: + + # systemctl restart uwsgi@keystone-admin.service + +#. Unset the temporary ``OS_TOKEN`` and ``OS_URL`` environment variables:: + + $ unset OS_TOKEN OS_URL + +#. As the ``admin`` user, request an authentication token:: + + $ openstack --os-auth-url http://controller:35357/v3 \ + --os-project-domain-id default --os-user-domain-id default \ + --os-project-name admin --os-username admin --os-auth-type password \ + token issue + Password: + +------------+----------------------------------+ + | Field | Value | + +------------+----------------------------------+ + | expires | 2015-03-24T18:55:01Z | + | id | ff5ed908984c4a4190f584d826d75fed | + | project_id | cf12a15c5ea84b019aec3dc45580896b | + | user_id | 4d411f2291f34941b30eef9bd797505a | + +------------+----------------------------------+ + +#. As the ``demo`` user, request an authentication token:: + + $ openstack --os-auth-url http://controller:5000/v3 \ + --os-project-domain-id default --os-user-domain-id default \ + --os-project-name demo --os-username demo --os-auth-type password \ + token issue + Password: + +------------+----------------------------------+ + | Field | Value | + +------------+----------------------------------+ + | expires | 2014-10-10T12:51:33Z | + | id | 1b87ceae9e08411ba4a16e4dada04802 | + | project_id | 4aa51bb942be4dd0ac0555d7591f80a6 | + | user_id | 7004dfa0dda84d63aef81cf7f100af01 | + +------------+----------------------------------+ + +Next topic: :ref:`openstack_identity-openrc`. \ No newline at end of file diff --git a/source/_build/html/_sources/openstack_image.txt b/source/_build/html/_sources/openstack_image.txt new file mode 100644 index 00000000..d31d7f1f --- /dev/null +++ b/source/_build/html/_sources/openstack_image.txt @@ -0,0 +1,278 @@ +.. _openstack_image: + +Image Service +################ + +The OpenStack Image service (glance) enables users to discover, register, and +retrieve virtual machine images. + +Install and configure the Image Service +--------------------------------------- + +This section describes how to install and configure the Image service, +code-named glance, on the controller node. For simplicity, this configuration +stores images on the local file system. By default, this directory is +``/var/lib/glance/images/``. + +Prerequisites +~~~~~~~~~~~~~ + +Before you install and configure the Image service, you must create a database, +service credentials, and API endpoints. + +#. To create the database, complete these steps: + + * Use the database access client to connect to the database + server as the ``root`` user.:: + + $ mysql -u root -p + + * Create the ``glance`` database:: + + CREATE DATABASE glance; + + * Grant proper access to the ``glance`` database. Replace ``GLANCE_DBPASS`` + with a suitable password.:: + + GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \ + IDENTIFIED BY 'GLANCE_DBPASS'; + GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \ + IDENTIFIED BY 'GLANCE_DBPASS'; + + * Exit the database access client. + +#. Source the ``admin`` credentials to gain access to admin-only CLI commands.:: + + $ source admin-openrc.sh + +#. To create the service credentials, complete these steps: + + * Create the ``glance`` user:: + + $ openstack user create --domain default --password-prompt glance + User Password: + Repeat User Password: + +-----------+----------------------------------+ + | Field | Value | + +-----------+----------------------------------+ + | domain_id | default | + | enabled | True | + | id | e38230eeff474607805b596c91fa15d9 | + | name | glance | + +-----------+----------------------------------+ + + * Add the ``admin`` role to the ``glance`` user and ``service`` project.:: + + $ openstack role add --project service --user glance admin + + * Create the ``glance`` service entity.:: + + $ openstack service create --name glance \ + --description "OpenStack Image service" image + +-------------+----------------------------------+ + | Field | Value | + +-------------+----------------------------------+ + | description | OpenStack Image service | + | enabled | True | + | id | 8c2c7f1b9b5049ea9e63757b5533e6d2 | + | name | glance | + | type | image | + +-------------+----------------------------------+ + +#. Create the Image service API endpoints.:: + + $ openstack endpoint create --region RegionOne \ + image public http://controller:9292 + +--------------+----------------------------------+ + | Field | Value | + +--------------+----------------------------------+ + | enabled | True | + | id | 340be3625e9b4239a6415d034e98aace | + | interface | public | + | region | RegionOne | + | region_id | RegionOne | + | service_id | 8c2c7f1b9b5049ea9e63757b5533e6d2 | + | service_name | glance | + | service_type | image | + | url | http://controller:9292 | + +--------------+----------------------------------+ + + $ openstack endpoint create --region RegionOne \ + image internal http://controller:9292 + +--------------+----------------------------------+ + | Field | Value | + +--------------+----------------------------------+ + | enabled | True | + | id | a6e4b153c2ae4c919eccfdbb7dceb5d2 | + | interface | internal | + | region | RegionOne | + | region_id | RegionOne | + | service_id | 8c2c7f1b9b5049ea9e63757b5533e6d2 | + | service_name | glance | + | service_type | image | + | url | http://controller:9292 | + +--------------+----------------------------------+ + + $ openstack endpoint create --region RegionOne \ + image admin http://controller:9292 + +--------------+----------------------------------+ + | Field | Value | + +--------------+----------------------------------+ + | enabled | True | + | id | 0c37ed58103f4300a84ff125a539032d | + | interface | admin | + | region | RegionOne | + | region_id | RegionOne | + | service_id | 8c2c7f1b9b5049ea9e63757b5533e6d2 | + | service_name | glance | + | service_type | image | + | url | http://controller:9292 | + +--------------+----------------------------------+ + +Install and configure components +-------------------------------- + +#. Install OpenStack Image bundle.:: + + # swupd bundle-add openstack-image + # swupd verify --fix + +#. Configurations will be located at ``/etc/glance``. + + * Create ``/etc/glance`` directory.:: + + # mkdir /etc/glance + + * Create ``/etc/glance/glance-api.conf`` and + ``/etc/glance/glance-registry.conf`` configuration files.:: + + # touch /etc/glance/glance-{api,registry}.conf + +#. Edit the ``/etc/glance/glance-api.conf`` file and complete the following + actions: + + * In the ``[database]`` section, configure database access. Replace + ``GLANCE_DBPASS`` with the password you chose for the Image service + database.:: + + [database] + ... + connection = mysql://glance:GLANCE_DBPASS@controller/glance + + * In the ``[keystone_authtoken]`` section, configure Identity service access. + Replace ``GLANCE_PASS`` with the password you chose for the ``glance`` user + in the Identity service.:: + + [keystone_authtoken] + ... + auth_uri = http://controller:5000 + auth_url = http://controller:35357 + auth_plugin = password + project_domain_id = default + user_domain_id = default + project_name = service + username = glance + password = GLANCE_PASS + +#. Edit the ``/etc/glance/glance-registry.conf`` file and complete the following + actions: + + * In the ``[database]`` section, configure database access. Replace + ``GLANCE_DBPASS`` with the password you chose for the Image service + database.:: + + [database] + ... + connection = mysql://glance:GLANCE_DBPASS@controller/glance + + * In the ``[keystone_authtoken]`` section, configure Identity service + access. Replace ``GLANCE_PASS`` with the password you chose for the + ``glance`` user in the Identity service.:: + + [keystone_authtoken] + ... + auth_uri = http://controller:5000 + auth_url = http://controller:35357 + auth_plugin = password + project_domain_id = default + user_domain_id = default + project_name = service + username = glance + password = GLANCE_PASS + +#. Ensure files have proper ownership by running the following command:: + + # systemctl restart update-triggers.target + +#. Populate the Image Service database:: + + # su -s /bin/sh -c "glance-manage db_sync" glance + +Finalize installation +--------------------- + +#. Start the Image Service services and configure them to start when the + system boots:: + + # systemctl enable glance-api.service glance-registry.service + # systemctl start glance-api.service glance-registry.service + +Verify operation +~~~~~~~~~~~~~~~~ + +Verify operation of the Image service using +`CirrOS `__, a small +Linux image that helps you test your OpenStack deployment. + +#. In each client environment script, configure the Image service + client to use API version 2.0:: + + $ echo "export OS_IMAGE_API_VERSION=2" \ + | tee -a admin-openrc.sh demo-openrc.sh + +#. Source the ``admin`` credentials to gain access to admin-only CLI commands:: + + $ source admin-openrc.sh + +#. Download the source image:: + + $ curl -Ok http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img + +#. Upload the image to the Image service using the `QCOW2` disk format, `bare` + container format, and public visibility so all projects can access it:: + + $ openstack image create cirros --file cirros-0.3.4-x86_64-disk.img \ + --disk-format qcow2 --container-format bare --public + +------------------+------------------------------------------------------+ + | Field | Value | + +------------------+------------------------------------------------------+ + | checksum | ee1eca47dc88f4879d8a229cc70a07c6 | + | container_format | bare | + | created_at | 2015-10-26T23:40:03Z | + | disk_format | qcow2 | + | file | /v2/images/fcf6fa55-56e9-4402-8137-3e9315c84905/file | + | id | fcf6fa55-56e9-4402-8137-3e9315c84905 | + | min_disk | 0 | + | min_ram | 0 | + | name | cirros | + | owner | 2e3093872ebf4143a122e2cc01a50d13 | + | protected | False | + | schema | /v2/schemas/image | + | size | 13287936 | + | status | active | + | tags | | + | updated_at | 2015-10-26T23:40:03Z | + | virtual_size | None | + | visibility | public | + +------------------+------------------------------------------------------+ + +#. Confirm upload of the image and validate attributes:: + + $ openstack image list + +--------------------------------------+--------+ + | ID | Name | + +--------------------------------------+--------+ + | 38047887-61a7-41ea-9b49-27987d5e8bb9 | cirros | + +--------------------------------------+--------+ + +Next topic: :ref:`openstack_compute`. \ No newline at end of file diff --git a/source/_build/html/_sources/openstack_installing_bundles.txt b/source/_build/html/_sources/openstack_installing_bundles.txt new file mode 100644 index 00000000..b19a1296 --- /dev/null +++ b/source/_build/html/_sources/openstack_installing_bundles.txt @@ -0,0 +1,26 @@ +.. _openstack_installing_bundles: + +Installing OpenStack* MVP bundles +############################################################ + +Note: This article walks through an OpenStack MVP installation by using +bundles available for Clear Linux* OS for Intel® Architecture. The sample +configuration files that are included would likely require modification +for your environment. + +To install, continue with the following topics: + +* `Database `_ +* `Message queue `_ +* `OpenStack Identity `_ +* `Create OpenStack client environment scripts `_ +* `OpenStack Image `_ +* `OpenStack Compute `_ +* `OpenStack Block Storage `_ +* `OpenStack Dashboard `_ +* `OpenStack Networking `_ +* `OpenStack Orchestration `_ +* `OpenStack Telemetry `_ +* `OpenStack Object Storage `_ + +Next topic: :ref:`openstack_supporting-database`. \ No newline at end of file diff --git a/source/_build/html/_sources/openstack_networking.txt b/source/_build/html/_sources/openstack_networking.txt new file mode 100644 index 00000000..673001fa --- /dev/null +++ b/source/_build/html/_sources/openstack_networking.txt @@ -0,0 +1,309 @@ +.. _openstack_networking: + +Networking +############################################################ + +OpenStack* Networking allows you to create and attach interface devices +managed by other OpenStack services to networks. Plug-ins can be +implemented to accommodate different networking equipment and software, +providing flexibility to OpenStack architecture and deployment. + +Installing and configuring the controller node +------------------------------------------------- + +Prerequisites +~~~~~~~~~~~~~ + +Before configuring the OpenStack Networking (neutron) service, create a +database, service credentials, and an API endpoint. + +#. Create the database: + + * Use the database access client to connect to the database server + as the ``root`` user:: + + $ mysql -u root -p + + * Create the ``neutron`` database:: + + CREATE DATABASE neutron; + + * Grant proper access to the ``neutron`` database. Replace + *``NEUTRON_DBPASS``* with a suitable password:: + + GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \ + IDENTIFIED BY 'NEUTRON_DBPASS'; + GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \ + IDENTIFIED BY 'NEUTRON_DBPASS'; + + * Exit the database access client. + +#. Source the ``admin`` credentials to gain access to admin-only CLI + commands:: + + $ source admin-openrc.sh + +#. To create the service credentials, complete these steps: + + * Create the ``neutron`` user:: + + $ openstack user create --password-prompt neutron + User Password: + Repeat User Password: + +----------+----------------------------------+ + | Field | Value | + +----------+----------------------------------+ + | email | None | + | enabled | True | + | id | ab67f043d9304017aaa73d692eeb4945 | + | name | neutron | + | username | neutron | + +----------+----------------------------------+ + + * Add the ``admin`` role to the ``neutron`` user:: + + +-------+----------------------------------+ + | Field | Value | + +-------+----------------------------------+ + | id | cd2cb9a39e874ea69e5d4b896eb16128 | + | name | admin | + +-------+----------------------------------+ + + * Create the ``neutron`` service entity:: + + $ openstack service create --name neutron \ + --description "OpenStack Networking" network + +-------------+----------------------------------+ + | Field | Value | + +-------------+----------------------------------+ + | description | OpenStack Networking | + | enabled | True | + | id | f71529314dab4a4d8eca427e701d209e | + | name | neutron | + | type | network | + +-------------+----------------------------------+ + +#. Create the Networking service API endpoint:: + + --publicurl http://controller:9696 \ + --adminurl http://controller:9696 \ + --internalurl http://controller:9696 \ + --region RegionOne \ + network + +--------------+----------------------------------+ + | Field | Value | + +--------------+----------------------------------+ + | adminurl | http://controller:9696 | + | id | 04a7d3c1de784099aaba83a8a74100b3 | + | internalurl | http://controller:9696 | + | publicurl | http://controller:9696 | + | region | RegionOne | + | service_id | f71529314dab4a4d8eca427e701d209e | + | service_name | neutron | + | service_type | network | + +--------------+----------------------------------+ + +Installing the Networking components +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Complete the following step to install the Networking components: + +- Install OpenStack networking bundle:: + + # clr_bundle_add openstack-network + +Configuring the Networking server component +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Complete the following steps to configure the Networking server component: + +The Networking server component configuration includes the database, +authentication mechanism, message queue, topology change notifications, +and plug-in. + +Edit the ``/etc/neutron/neutron.conf `` file: + +#. Custom configurations will be located at ``/etc/neutron``. + + * Create /etc/neutron directory:: + + $ mkdir /etc/neutron + + * Create empty neutron configuration + file:: + + $ touch /etc/neutron/neutron.conf + +#. In the ``[database]`` section, configure database access. Replace + *NEUTRON_DBPASS* with the password you chose for the database:: + + [database] + ... + connection = mysql://neutron:NEUTRON_DBPASS@controller/neutron + +#. In the ``[DEFAULT]`` and ``[oslo_messaging_rabbit]`` sections, + configure RabbitMQ message queue access. Replace *``RABBIT_PASS``* + with the password you chose for the ``openstack`` account in + RabbitMQ:: + + [DEFAULT] + ... + rpc_backend = rabbit + [oslo_messaging_rabbit] + ... + rabbit_host = controller + rabbit_userid = openstack + rabbit_password = RABBIT_PASS + +#. In the ``[DEFAULT]`` and ``[keystone_authtoken]`` sections, configure + Identity service access. Replace *``NEUTRON_PASS``* with the password + you chose for the ``neutron`` user in the Identity service:: + + [DEFAULT] + ... + auth_strategy = keystone + [keystone_authtoken] + ... + auth_uri = http://controller:5000 + auth_url = http://controller:35357 + auth_plugin = password + project_domain_id = default + user_domain_id = default + project_name = service + username = neutron + password = NEUTRON_PASS + +#. In the ``[DEFAULT]`` section, enable the Modular Layer 2 (ML2) + plug-in, router service, and overlapping IP addresses:: + + [DEFAULT] + ... + core_plugin = ml2 + service_plugins = router + allow_overlapping_ips = True + +#. In the ``[DEFAULT]`` and ``[nova]`` sections, configure Networking to + notify Compute of network topology changes. Replace ``NOVA_PASS`` + with the password you chose for the ``nova`` user in the Identity + service:: + + [DEFAULT] + ... + notify_nova_on_port_status_changes = True + notify_nova_on_port_data_changes = True + nova_url = http://controller:8774/v2 + [nova] + ... + auth_url = http://controller:35357 + auth_plugin = password + project_domain_id = default + user_domain_id = default + region_name = RegionOne + project_name = service + username = nova + password = NOVA_PASS + +Configuring the Modular Layer 2 (ML2) plug-in +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ML2 plug-in uses the Open vSwitch (OVS) mechanism (agent) to build +the virtual networking framework for instances. However, the controller +node does not need the OVS components because it does not handle +instance network traffic. + +#. Custom configuration for ML2 plug-in will be stored in ``/etc/neutron/plugins/ml2``:: + + mkdir -p /etc/neutron/plugins/ml2 + touch /etc/neutron.plugins/ml2/ml2_conf.ini + +#. Edit the ``/etc/neutron/plugins/ml2/ml2_conf.ini`` file as follows: + + * In the ``[ml2]`` section, enable the flat, VLAN, generic routing + encapsulation (GRE), and virtual extensible LAN (VXLAN) network + type drivers, GRE tenant networks, and the OVS mechanism driver:: + + [ml2] + ... + type_drivers = flat,vlan,gre,vxlan + tenant_network_types = gre + mechanism_drivers = openvswitch + + * In the ``[ml2_type_gre]`` section, configure the tunnel identifier + (id) range:: + + [ml2_type_gre] + ... + tunnel_id_ranges = 1:1000 + + * In the ``[securitygroup]`` section, enable security groups, enable + ipset, and configure the OVS iptables firewall driver:: + + [securitygroup] + ... + enable_security_group = True + enable_ipset = True + firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver + +Configuring Compute to use Networking +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +By default, distribution packages configure Compute to use legacy +networking. You must reconfigure Compute to manage networks through +Networking. + +#. Edit the ``/etc/nova/nova.conf`` file on the controller node as + follows: + + * In the ``[DEFAULT]`` section, configure the APIs and drivers:: + + [DEFAULT] + ... + network_api_class = nova.network.neutronv2.api.API + security_group_api = neutron + linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver + firewall_driver = nova.virt.firewall.NoopFirewallDriver + + * In the ``[neutron]`` section, configure access + parameters. Replace *NEUTRON_PASS* with the password you + chose for the ``neutron`` user in the Identity service:: + + [neutron] + ... + url = http://controller:9696 + auth_strategy = keystone + admin_auth_url = http://controller:35357/v2.0 + admin_tenant_name = service + admin_username = neutron + admin_password = NEUTRON_PASS + +Finalizing installation +~~~~~~~~~~~~~~~~~~~~~~~~ + +#. The Networking service initialization scripts expect a symbolic link + ``/etc/neutron/plugin.ini`` pointing to the ML2 plug-in configuration + file, ``/etc/neutron/plugins/ml2/ml2_conf.ini``. If this symbolic + link does not exist, create it using the following command:: + + # ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini + +#. Populate the database:: + + # su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \ + --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron + +#. Let ``systemd`` set the correct permissions for files in ``/etc/neutron``:: + + # systemctl restart update-triggers.target + +#. Restart the Compute services:: + + # systemctl restart nova-api.service nova-scheduler.service \ + nova-conductor.service + +#. Start the Networking service and configure it to start when the + system boots:: + + # systemctl enable neutron-server.service + # systemctl start neutron-server.service + +Next topic: :ref:`openstack_orchestration`. \ No newline at end of file diff --git a/source/_build/html/_sources/openstack_object_storage.txt b/source/_build/html/_sources/openstack_object_storage.txt new file mode 100644 index 00000000..b01654b6 --- /dev/null +++ b/source/_build/html/_sources/openstack_object_storage.txt @@ -0,0 +1,626 @@ +.. _openstack_object_storage: + +Object Storage +######################### + +Install and configure the controller node +----------------------------------------- + +This section describes how to install and configure the proxy service +that handles requests for the account, container, and object services +operating on the storage nodes. For simplicity, this guide installs and +configures the proxy service on the controller node. However, you can +run the proxy service on any node with network connectivity to the +storage nodes. Additionally, you can install and configure the proxy +service on multiple nodes to increase performance and redundancy. + +To configure prerequisites +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The proxy service relies on an authentication and authorization +mechanism such as the Identity service. However, unlike other services, +it also offers an internal mechanism that allows it to operate without +any other OpenStack* services. However, for simplicity, this guide +references the Identity service OpenStack Identity Service. Before you +configure the Object Storage service, you must create service +credentials and an API endpoint. + +#. Source the ``admin`` credentials to gain access to admin-only CLI + commands:: + + $ source admin-openrc.sh + +#. To create the Identity service credentials, complete these steps: + + * Create the swift user:: + + $ openstack user create --password-prompt swift + User Password: + Repeat User Password: + +----------+----------------------------------+  + | Field    | Value                            |  + +----------+----------------------------------+  + | email    | None                             |  + | enabled  | True                             |  + | id       | d535e5cbd2b74ac7bfb97db9cced3ed6 |  + | name     | swift                            |  + | username | swift                            |  + +----------+----------------------------------+ + + * Add the admin role to the swift user:: + + $ openstack role add --project service --user swift admin + +-------+----------------------------------+ + | Field | Value                            | + +-------+----------------------------------+ + | id    | cd2cb9a39e874ea69e5d4b896eb16128 | + | name  | admin                            | + +-------+----------------------------------+ + + * Create the swift service entity:: + + $ openstack service create --name swift \ + --description "OpenStack Object Storage" object-store + +-------------+----------------------------------+ + | Field       | Value                            | + +-------------+----------------------------------+ + | description | OpenStack Object Storage         | + | enabled     | True                             | + | id          | 75ef509da2c340499d454ae96a2c5c34 | + | name        | swift                            | + | type        | object-store                     | + +-------------+----------------------------------+ + +#. Create the Object Storage service API endpoint:: + + $ openstack endpoint create \ + --publicurl 'http://controller:8080/v1/AUTH_%(tenant_id)s' \ + --internalurl 'http://controller:8080/v1/AUTH_%(tenant_id)s' \ + --adminurl http://controller:8080 \ + --region RegionOne \ + object-store + +--------------+----------------------------------------------+ + | Field        | Value                                        | + +--------------+----------------------------------------------+ + | adminurl     | http://controller:8080/                      | + | id           | af534fb8b7ff40a6acf725437c586ebe             | + | internalurl  | http://controller:8080/v1/AUTH_%(tenant_id)s | + | publicurl    | http://controller:8080/v1/AUTH_%(tenant_id)s | + | region       | RegionOne                                    | + | service_id   | 75ef509da2c340499d454ae96a2c5c34             | + | service_name | swift                                        | + | service_type | object-store                                 | + +--------------+----------------------------------------------+ + +To install and configure the controller node components +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#. Install the bundle:: + + # clr_bundle_add openstack-object-storage + +#. Create the directory ``/etc/swift`` if does not exist:: + + # mkdir /etc/swift + +#. Copy the sample proxy-server config file to the configuration + directory:: + + # cp /usr/share/defaults/swift/proxy-server.conf /etc/swift + +#. Edit the ``/etc/swift/proxy-server.conf`` file and complete the + following actions: + + * In the ``[pipeline:main]`` section, enable the appropriate + modules:: + + [pipeline:main] + pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo proxy-logging proxy-server + + * In the ``[app:proxy-server]`` section, enable automatic account + creation:: + + [app:proxy-server] + ... + account_autocreate = true + + * In the ``[filter:keystoneauth]`` section, configure the operator + roles:: + + [filter:keystoneauth] + use = egg:swift#keystoneauth + ... + operator_roles = admin,user + + * In the ``[filter:authtoken]`` section, configure Identity service + access. Replace SWIFT\_PASS with the password you chose for the + swift user in the Identity service:: + + [filter:authtoken] + paste.filter_factory = keystonemiddleware.auth_token:filter_factory + ... + auth_uri = http://controller:5000 + auth_url = http://controller:35357 + auth_plugin = password + project_domain_id = default + user_domain_id = default + project_name = service + username = swift + password = SWIFT_PASS + delay_auth_decision = true + + * In the ``[filter:cache]`` section, configure the memcached + location:: + + [filter:cache] + ... + memcache_servers = 127.0.0.1:11211 + +Install and configure the storage nodes +--------------------------------------- + +This section describes how to install and configure storage nodes that +operate the account, container, and object services. For simplicity, +this configuration references two storage nodes, each containing two +empty local block storage devices. Each of the devices, ``/dev/sdb`` and +``/dev/sdc``, must contain a suitable partition table with one partition +occupying the entire device. Although the Object Storage service +supports any file system with extended attributes (xattr), testing and +benchmarking indicate the best performance and reliability on XFS. + +To configure prerequisites +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You must configure each storage node before you install and configure +the Object Storage service on it. Similar to the controller node, each +storage node contains one network interface on the management network. +Optionally, each storage node can contain a second network interface on +a separate network for replication. + +#. Configure unique items on the first storage node: + + * Configure the management interface:: + + IP address: 10.0.0.51 + Network mask: 255.255.255.0 (or /24) + Default gateway: 10.0.0.1 + + * Set the hostname of the node to ``object1``. + +#. Configure unique items on the second storage node: + + * Configure the management interface:: + + IP address: 10.0.0.52 + Network mask: 255.255.255.0 (or /24) + Default gateway: 10.0.0.1 + + * Set the hostname of the node to ``object2``. + +#. Configure shared items on both storage nodes: + + * Copy the contents of the ``/etc/hosts`` file from the controller + node and add the following to it:: + + # object1 + 10.0.0.51 object1 + # object2 + 10.0.0.52 object2 + + Also add this content to the ``/etc/hosts`` file on all other nodes in your environment. + + * Install the OpenStack Object Storage bundle:: + + # clr\_bundle\_add openstack-object-storage + + * Format the ``/dev/sdb1`` and ``/dev/sdc1`` partitions as XFS:: + + # mkfs.xfs /dev/sdb1 + # mkfs.xfs /dev/sdc1 + + * Create the mount point directory structure:: + + # mkdir -p /srv/node/sdb1 + # mkdir -p /srv/node/sdc1 + + * Edit the ``/etc/fstab`` file and add the following to it:: + + /dev/sdb1 /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 2 + /dev/sdc1 /srv/node/sdc1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 2 + + * Mount the devices:: + + # mount /srv/node/sdb1 + # mount /srv/node/sdc1 + +#. Edit the ``/etc/rsyncd.conf`` file and add the following to it:: + + uid = swift + gid = swift + log file = /var/log/rsyncd.log + pid file = /var/run/rsyncd.pid + address = MANAGEMENT\_INTERFACE\_IP\_ADDRESS + [account] + max connections = 2 + path = /srv/node/ + read only = false + lock file = /var/lock/account.lock + [container] + max connections = 2 + path = /srv/node/ + read only = false + lock file = /var/lock/container.lock + [object] + max connections = 2 + path = /srv/node/ + read only = false + lock file = /var/lock/object.lock + + Replace ``MANAGEMENT_INTERFACE_IP_ADDRESS`` with the IP address of + the management network on the storage node. + + Note: The ``rsync`` service requires no authentication, so consider + running it on a private network. + +#. Start the ``rsyncd`` service and configure it to start when the + system boots:: + + # systemctl enable rsyncd.service + # systemctl start rsyncd.service + +Install and configure storage node components +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#. Copy the accounting, container, object, container-reconciler, and + object-expirer service configuration files to the configuration + directory:: + + # cp /usr/share/defaults/swift/account-server.conf /etc/swift + # cp /usr/share/defaults/swift/container-server.conf /etc/swift + # cp /usr/share/defaults/swift/object-server.conf /etc/swift + # cp /usr/share/defaults/swift/container-reconciler.conf/etc/swift + # cp /usr/share/defaults/swift/object-expirer.conf /etc/swift + +#. Edit the ``/etc/swift/account-server.conf`` file and complete the + following actions: + + * In the ``[DEFAULT]`` section, configure the bind IP address and + mount point directory:: + + [DEFAULT] + ... + bind\_ip = MANAGEMENT\_INTERFACE\_IP\_ADDRESS + devices = /srv/node + + Replace ``MANAGEMENT_INTERFACE_IP_ADDRESS`` with the IP + address of the management network on the storage node. + + * In the ``[pipeline:main]`` section, enable the appropriate + modules:: + + [pipeline:main] + pipeline = healthcheck recon account-server + + * In the ``[filter:recon]`` section, configure the recon (metrics) + cache directory:: + + [filter:recon] + ... + recon\_cache\_path = /var/cache/swift + +#. Edit the ``/etc/swift/container-server.conf`` file and complete the + following actions: + + * In the ``[DEFAULT]`` section, configure the bind IP address and + mount point directory:: + + [DEFAULT] + ... + bind\_ip = MANAGEMENT\_INTERFACE\_IP\_ADDRESS + devices = /srv/node + + Replace ``MANAGEMENT_INTERFACE_IP_ADDRESS`` with the IP + address of the management network on the storage node. + + * modules:: + + [pipeline:main] + pipeline = healthcheck recon container-server + + * In the ``[filter:recon]`` section, configure the recon (metrics) + cache directory:: + + [filter:recon] + ... + recon\_cache\_path = /var/cache/swift + +#. Edit the ``/etc/swift/object-server.conf`` file and complete the + following actions: + + * In the ``[DEFAULT]`` section, configure the bind IP address and + mount point directory:: + + [DEFAULT] + ... + bind\_ip = MANAGEMENT\_INTERFACE\_IP\_ADDRESS + devices = /srv/node + + Replace ``MANAGEMENT_INTERFACE_IP_ADDRESS`` with the IP + address of the management network on the storage node. + + * In the ``[pipeline:main]`` section, enable the appropriate + modules:: + + [pipeline:main] + pipeline = healthcheck recon object-server + + * In the ``[filter:recon]`` section, configure the recon (metrics) + cache and lock directories:: + + [filter:recon] + ... + recon\_cache\_path = /var/cache/swift + recon\_lock\_path = /var/lock + +#. Ensure proper ownership of the mount point directory structure:: + + # systemctl restart update-triggers.target + +About Creating initial rings +---------------------------- + +Before starting the Object Storage services, you must create the initial +account, container, and object rings. The ring builder creates +configuration files that each node uses to determine and deploy the +storage architecture. For simplicity, this guide uses one region and +zone with 2^10 (1024) maximum partitions, 3 replicas of each object, and +1 hour minimum time between moving a partition more than once. For +Object Storage, a partition indicates a directory on a storage device +rather than a conventional partition table. + +Create Account Ring +------------------- + +The account server uses the account ring to maintain lists of +containers. + +To create the ring +~~~~~~~~~~~~~~~~~~ + +#. Change to the /etc/swift directory. +#. Create the base account.builder file:: + + # swift-ring-builder account.builder create 10 3 1 + +#. Add each storage node to the ring:: + + # swift-ring-builder account.builder \ + add r1z1-STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS:6002/DEVICE_NAME DEVICE_WEIGHT + + Replace *STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS* with the + IP address of the management network on the storage node. Replace + *DEVICE_NAME* with a storage device name on the same storage node. + For example, using the first storage node with the ``/dev/sdb1`` storage + device and weight of 100:: + + # swift-ring-builder account.builder add r1z1-10.0.0.51:6002/sdb1 100 + + Repeat this command for each storage device on each storage node. In + the example architecture, use the command in four variations:: + + # swift-ring-builder account.builder add r1z1-10.0.0.51:6002/sdb1 100 + Device d0r1z1-10.0.0.51:6002R10.0.0.51:6002/sdb1_"" with 100.0 weight got id 0 + # swift-ring-builder account.builder add r1z2-10.0.0.51:6002/sdc1 100 + Device d1r1z2-10.0.0.51:6002R10.0.0.51:6002/sdc1_"" with 100.0 weight got id 1 + # swift-ring-builder account.builder add r1z3-10.0.0.52:6002/sdb1 100 + Device d2r1z3-10.0.0.52:6002R10.0.0.52:6002/sdb1_"" with 100.0 weight got id 2 + # swift-ring-builder account.builder add r1z4-10.0.0.52:6002/sdc1 100 + Device d3r1z4-10.0.0.52:6002R10.0.0.52:6002/sdc1_"" with 100.0 weight got id 3 + +#. Verify the ring contents:: + + # swift-ring-builder account.builder account.builder, build version 4 + 1024 partitions, 3.000000 replicas, 1 regions, 4 zones, 4 devices, 100.00 balance, 0.00 dispersion + The minimum number of hours before a partition can be reassigned is 1 + The overload factor is 0.00% (0.000000) + Devices:    id  region  zone      ip address  port  replication ip  replication port      name weight partitions balance meta +              0       1     1       10.0.0.51  6002       10.0.0.51              6002      sdb1 100.00          0 -100.00 +              1       1     2       10.0.0.51  6002       10.0.0.51              6002      sdc1 100.00          0 -100.00 +              2       1     3       10.0.0.52  6002       10.0.0.52              6002      sdb1 100.00          0 -100.00 +              3       1     4       10.0.0.52  6002       10.0.0.52              6002      sdc1 100.00          0 -100.00 + +#. Rebalance the ring:: + + # swift-ring-builder account.builder rebalance + Reassigned 1024 (100.00%) partitions. Balance is now 0.00. Dispersion is now 0.00 + +Create Container Ring +--------------------- + +The container server uses the container ring to maintain lists of +objects. However, it does not track object locations. + +To create the ring +~~~~~~~~~~~~~~~~~~ + +#. Change to the ``/etc/swift`` directory. +#. Create the base container.builder file:: + + # swift-ring-builder container.builder create 10 3 1 + +#. Add each storage node to the ring:: + + # swift-ring-builder container.builder \ + add r1z1-STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS:6001/DEVICE_NAME DEVICE_WEIGHT + + Replace *STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS* with the + IP address of the management network on the storage node. Replace + *DEVICE_NAME* with a storage device name on the same storage node. + For example, using the first storage node with the /dev/sdb1 storage + device and weight of 100:: + + # swift-ring-builder container.builder add r1z1-10.0.0.51:6001/sdb1 100 + + Repeat this command for each storage device on each storage node. In + the example architecture, use the command in four variations:: + + # swift-ring-builder container.builder add r1z1-10.0.0.51:6001/sdb1 100 + Device d0r1z1-10.0.0.51:6002R10.0.0.51:6002/sdb1_"" with 100.0 weight got id 0 + # swift-ring-builder container.builder add r1z2-10.0.0.51:6001/sdc1 100 + Device d1r1z2-10.0.0.51:6002R10.0.0.51:6002/sdc1_"" with 100.0 weight got id 1 + # swift-ring-builder container.builder add r1z3-10.0.0.52:6001/sdb1 100 + Device d2r1z3-10.0.0.52:6002R10.0.0.52:6002/sdb1_"" with 100.0 weight got id 2 + # swift-ring-builder container.builder add r1z4-10.0.0.52:6001/sdc1 100 + Device d3r1z4-10.0.0.52:6002R10.0.0.52:6002/sdc1_"" with 100.0 weight got id 3 + +#. Verify the ring contents:: + + # swift-ring-builder container.builder + container.builder, build version 4 + 1024 partitions, 3.000000 replicas, 1 regions, 4 zones, 4 devices, 100.00 balance, 0.00 dispersion + The minimum number of hours before a partition can be reassigned is 1 + The overload factor is 0.00% (0.000000) + Devices:    id  region  zone      ip address  port  replication ip  replication port      name weight partitions balance meta +              0       1     1       10.0.0.51  6001       10.0.0.51              6001      sdb1 100.00          0 -100.00 +              1       1     2       10.0.0.51  6001       10.0.0.51              6001      sdc1 100.00          0 -100.00 +              2       1     3       10.0.0.52  6001       10.0.0.52              6001      sdb1 100.00          0 -100.00 +              3       1     4       10.0.0.52  6001       10.0.0.52              6001      sdc1 100.00          0 -100.00 + +#. Rebalance the ring:: + + # swift-ring-builder container.builder rebalance + Reassigned 1024 (100.00%) partitions. Balance is now 0.00. Dispersion is now 0.00 + +Create Object Ring +------------------ + +The object server uses the object ring to maintain lists of object +locations on local devices. + +To create the ring +~~~~~~~~~~~~~~~~~~ + +#. Change to the ``/etc/swift`` directory. +#. Create the base ``object.builder`` file:: + + # swift-ring-builder object.builder create 10 3 1 + +#. Add each storage node to the ring:: + + # swift-ring-builder object.builder \ + add r1z1-STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS:6000/DEVICE_NAME DEVICE_WEIGHT + + Replace *STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS* with the + IP address of the management network on the storage node. Replace + *DEVICE_NAME* with a storage device name on the same storage node. + For example, using the first storage node with the /dev/sdb1 storage + device and weight of 100:: + + # swift-ring-builder object.builder add r1z1-10.0.0.51:6000/sdb1 100 + + Repeat this command for each storage device on each storage node. In + the example architecture, use the command in four variations:: + + # swift-ring-builder object.builder add r1z1-10.0.0.51:6000/sdb1 100 + Device d0r1z1-10.0.0.51:6002R10.0.0.51:6002/sdb1_"" with 100.0 weight got id 0 + # swift-ring-builder object.builder add r1z2-10.0.0.51:6000/sdc1 100 + Device d1r1z2-10.0.0.51:6002R10.0.0.51:6002/sdc1_"" with 100.0 weight got id 1 + # swift-ring-builder object.builder add r1z3-10.0.0.52:6000/sdb1 100 + Device d2r1z3-10.0.0.52:6002R10.0.0.52:6002/sdb1_"" with 100.0 weight got id 2 + # swift-ring-builder object.builder add r1z4-10.0.0.52:6000/sdc1 100 + Device d3r1z4-10.0.0.52:6002R10.0.0.52:6002/sdc1_"" with 100.0 weight got id 3 + +#. Verify the ring contents:: + + # swift-ring-builder object.builder + object.builder, build version 4 + 1024 partitions, 3.000000 replicas, 1 regions, 4 zones, 4 devices, 100.00 balance, 0.00 dispersion + The minimum number of hours before a partition can be reassigned is 1 + The overload factor is 0.00% (0.000000) + Devices:    id  region  zone      ip address  port  replication ip  replication port      name weight partitions balance meta +              0       1     1       10.0.0.51  6000       10.0.0.51              6000      sdb1 100.00          0 -100.00 +              1       1     2       10.0.0.51  6000       10.0.0.51              6000      sdc1 100.00          0 -100.00 +              2       1     3       10.0.0.52  6000       10.0.0.52              6000      sdb1 100.00          0 -100.00 +              3       1     4       10.0.0.52  6000       10.0.0.52              6000      sdc1 100.00          0 -100.00 + +#. Rebalance the ring:: + + # swift-ring-builder object.builder rebalance + Reassigned 1024 (100.00%) partitions. Balance is now 0.00. Dispersion is now 0.00 + +Distribute ring configuration files +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Copy the account.ring.gz, container.ring.gz, and object.ring.gz files to +the /etc/swift directory on each storage node and any additional nodes +running the proxy service. + +Finalize installation +--------------------- + +Configure hashes and default storage policy +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#. Copy the swift service configuration file to the configuration directory:: + + # cp /usr/share/defaults/swift/swift.conf /etc/swift + +#. Edit the ``/etc/swift/swift.conf`` file and complete the following + actions: + + * In the ``[swift-hash]`` section, configure the hash path prefix and + suffix for your environment:: + + [swift-hash] + ... + swift_hash_path_suffix = HASH_PATH_PREFIX + swift_hash_path_prefix = HASH_PATH_SUFFIX + + * In the ``[storage-policy:0]`` section, configure the default storage + policy:: + + [storage-policy:0] + ... + name = Policy-0 + default = yes + +#. Copy the swift.conf file to the ``/etc/swift`` directory on each storage + node and any additional nodes running the proxy service. +#. On all nodes, ensure proper ownership of the configuration directory:: + + # systemctl restart update-triggers.target + +#. On the controller node and any other nodes running the proxy service, + start the Object Storage proxy service including its dependencies and + configure them to start when the system boots:: + + # systemctl enable swift-proxy.service memcached.service + # systemctl start swift-proxy.service memcached.service + +#. On the storage nodes, start the Object Storage services and configure + them to start when the system boots:: + + # systemctl enable swift-account.service \ +                 swift-account-auditor.service \ +                 swift-account-reaper.service \ +                 swift-account-replicator.service \ +                 swift-container.service \ +                 swift-container-auditor.service \ +                 swift-container-replicator.service \ +                 swift-container-updater.service \ +                 swift-object.service \ +                 swift-object-auditor.service \ +                 swift-object-replicator.service \ +                 swift-object-updater.service + # systemctl start swift-account.service \ +                 swift-account-auditor.service \ +                 swift-account-reaper.service \ +                 swift-account-replicator.service \ +                 swift-container.service \ +                 swift-container-auditor.service \ +                 swift-container-replicator.service \ +                 swift-container-updater.service \ +                 swift-object.service \ +                 swift-object-auditor.service \ +                 swift-object-replicator.service \ +                 swift-object-updater.service diff --git a/source/_build/html/_sources/openstack_orchestration.txt b/source/_build/html/_sources/openstack_orchestration.txt new file mode 100644 index 00000000..b3af8090 --- /dev/null +++ b/source/_build/html/_sources/openstack_orchestration.txt @@ -0,0 +1,290 @@ +.. _openstack_orchestration: + +Orchestration +############################################################ + +The Orchestration module provides template-based OpenStack* API calls +on a cloud application. It integrates core components of OpenStack into +a one-file template system that allows you to create most OpenStack +resource types, including: instances, floating IPs, volumes, security +groups, and users. The module also provides advanced functionality: +instance high availability, instance auto-scaling, and nested stacks, +all of which allow OpenStack core projects to accommodate a larger user +base.   + +The service enables deployers to integrate with the Orchestration module +directly, or through custom plugins. + +Installing and configuring controller node +----------------------------------------------- + +This section describes how to install and configure the Orchestration +module, codenamed heat, on the controller node. + +Configuring prerequisites +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Before you install and configure Orchestration, you must create a +database, service credentials, and API endpoints. + +#. To create the database, complete these steps: + + * Use the database access client to connect to the database server + as the ``root`` user:: + + $ mysql -u root -p + + * Create the ``heat`` database:: + + CREATE DATABASE heat; + + * Grant proper access to the ``heat`` database. + Replace *HEAT_DBPASS*  with a suitable password:: + + GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' \ + IDENTIFIED BY 'HEAT_DBPASS'; + GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' \ + IDENTIFIED BY 'HEAT_DBPASS'; + + * Exit the database access client. + +#. Source the ``admin`` credentials to gain access to admin-only CLI + commands:: + + $ source admin-openrc.sh + +#. To create the service credentials, complete these steps: + + * Create the ``heat`` user:: + + $ openstack user create --password-prompt heat + User Password: + Repeat User Password: + +----------+----------------------------------+ + | Field | Value | + +----------+----------------------------------+ + | email | None | + | enabled | True | + | id | 7fd67878dcd04d0393469ef825a7e005 | + | name | heat | + | username | heat | + +----------+----------------------------------+ + + * Add the ``admin`` role to the ``heat`` user:: + + $ openstack role add --project service --user heat admin + +-------+----------------------------------+ + | Field | Value | + +-------+----------------------------------+ + | id | cd2cb9a39e874ea69e5d4b896eb16128 | + | name | admin | + +-------+----------------------------------+ + + * Create the ``heat_stack_owner`` role:: + + $ openstack role create heat_stack_owner + +-------+----------------------------------+ + | Field | Value | + +-------+----------------------------------+ + | id | c0a1cbee7261446abc873392f616de87 | + | name | heat_stack_owner | + +-------+----------------------------------+ + + * Add the ``heat_stack_owner`` role to the ``demo`` tenant and + user. + + Note: You must add the ``heat_stack_owner`` role to users that + manage stacks:: + + $ openstack role add --project demo --user demo heat_stack_owner + +-------+----------------------------------+ + | Field | Value | + +-------+----------------------------------+ + | id | c0a1cbee7261446abc873392f616de87 | + | name | heat_stack_owner | + +-------+----------------------------------+ + + * Create the ``heat_stack_user`` role. + + Note: The Orchestration service automatically assigns the ``heat_stack_user`` role + to users that it creates during stack deployment. By default, this role restricts  + API operations. To avoid conflicts, do not add this role to users with the  + heat_stack_owner role:: + + $ openstack role create heat_stack_user + +-------+----------------------------------+ + | Field | Value | + +-------+----------------------------------+ + | id | e01546b1a81c4e32a6d14a9259e60154 | + | name | heat_stack_user | + +-------+----------------------------------+ + + * Create the ``heat`` and ``heat-cfn`` service entities:: + + +-------------+----------------------------------+ + | Field | Value | + +-------------+----------------------------------+ + | description | Orchestration | + | enabled | True | + | id | 031112165cad4c2bb23e84603957de29 | + | name | heat | + | type | orchestration | + +-------------+----------------------------------+ + $ openstack service create --name heat-cfn \ + --description "Orchestration" cloudformation + +-------------+----------------------------------+ + | Field | Value | + +-------------+----------------------------------+ + | description | Orchestration | + | enabled | True | + | id | 297740d74c0a446bbff867acdccb33fa | + | name | heat-cfn | + | type | cloudformation | + +-------------+----------------------------------+ + +#. Create the Orchestration service API endpoints:: + + $ openstack endpoint create \ + --publicurl http://controller:8004/v1/%\(tenant_id\)s \ + --internalurl http://controller:8004/v1/%\(tenant_id\)s \ + --adminurl http://controller:8004/v1/%\(tenant_id\)s \ + --region RegionOne \ + orchestration + +--------------+-----------------------------------------+ + | Field | Value | + +--------------+-----------------------------------------+ + | adminurl | http://controller:8004/v1/%(tenant_id)s | + | id | f41225f665694b95a46448e8676b0dc2 | + | internalurl | http://controller:8004/v1/%(tenant_id)s | + | publicurl | http://controller:8004/v1/%(tenant_id)s | + | region | RegionOne | + | service_id | 031112165cad4c2bb23e84603957de29 | + | service_name | heat | + | service_type | orchestration | + +--------------+-----------------------------------------+ + $ openstack endpoint create \ + --publicurl http://controller:8000/v1 \ + --internalurl http://controller:8000/v1 \ + --adminurl http://controller:8000/v1 \ + --region RegionOne \ + cloudformation + +--------------+----------------------------------+ + | Field | Value | + +--------------+----------------------------------+ + | adminurl | http://controller:8000/v1 | + | id | f41225f665694b95a46448e8676b0dc2 | + | internalurl | http://controller:8000/v1 | + | publicurl | http://controller:8000/v1 | + | region | RegionOne | + | service_id | 297740d74c0a446bbff867acdccb33fa | + | service_name | heat-cfn | + | service_type | cloudformation | + +--------------+----------------------------------+ + +Installing and configuring the Orchestration components +---------------------------------------------------------- + +To install and configure the Orchestration components: + +#. Install OpenStack Orchestration bundle:: + + # clr_bundle_add openstack-orchestration + +#. Create the ``/etc/heat/heat.conf file``:: + + # mkdir /etc/heat # touch /etc/heat/heat.conf + +#. Edit the ``/etc/heat/heat.conf`` file and complete the following + actions: + + * In the ``[database]`` section, configure database access. + Replace *HEAT_DBPASS*  with the password you chose for the + Orchestration database:: + + [database] + ... + connection = mysql://heat:HEAT_DBPASS@controller/heat + + * In the ``[DEFAULT]`` and ``[oslo_messaging_rabbit]`` sections, + configure RabbitMQ message queue access. + Replace *``RABBIT_PASS``*  with the password you chose for + the ``openstack`` account in RabbitMQ:: + + [DEFAULT] + ... + rpc_backend = rabbit + [oslo_messaging_rabbit] + ... + rabbit_host = controller + rabbit_userid = openstack + rabbit_password = RABBIT_PASS + + * In the ``[keystone_authtoken]`` and ``[ec2authtoken]`` sections, + configure Identity service access. Replace *HEAT_PASS*  with + the password you chose for the ``heat`` user in the Identity + service:: + + [keystone_authtoken] + ... + auth_uri = http://controller:5000/v2.0 + identity_uri = http://controller:35357 + admin_tenant_name = service + admin_user = heat + admin_password = HEAT_PASS + [ec2authtoken] + ... + auth_uri = http://controller:5000/v2.0 + + * In the ``[DEFAULT]`` section, configure the metadata and wait + condition URLs:: + + [DEFAULT] + ... + heat_metadata_server_url = http://controller:8000 + heat_waitcondition_server_url = http://controller:8000/v1/waitcondition + + * In the ``[DEFAULT]`` section, configure information about the + heat Identity service domain. Replace  *``HEAT_DOMAIN_PASS``* +  with the password you chose for the admin user of + the ``heat`` user domain in the Identity service:: + + [DEFAULT] + ... + stack_domain_admin = heat_domain_admin + stack_domain_admin_password = HEAT_DOMAIN_PASS + stack_user_domain_name = heat_user_domain + +#. Source the ``admin`` credentials to gain access to admin-only CLI + commands:: + + $ source admin-openrc.sh + +#. Create the heat domain in Identity service. + Replace *``HEAT_DOMAIN_PASS``*  with a suitable + password:: + + $ heat-keystone-setup-domain \ + --stack-user-domain-name heat_user_domain \ + --stack-domain-admin heat_domain_admin \ + --stack-domain-admin-password HEAT_DOMAIN_PASS + +#. Let systemd set the correct permissions for files in ``/etc/heat``:: + + # systemctl restart update-triggers.target + +#. Populate the Orchestration database:: + + # su -s /bin/sh -c "heat-manage db_sync" heat`` + +Finalizing installation +~~~~~~~~~~~~~~~~~~~~~~~~ + +Complete this step to finalize the installation: + +* Start the Orchestration services and configure them to start when the + system boots:: + + # systemctl enable heat-api.service heat-api-cfn.service heat-engine.service + # systemctl start heat-api.service heat-api-cfn.service heat-engine.service`` + +Next topic: :ref:`openstack_telemetry`. \ No newline at end of file diff --git a/source/_build/html/_sources/openstack_supporting-database.txt b/source/_build/html/_sources/openstack_supporting-database.txt new file mode 100644 index 00000000..62eac990 --- /dev/null +++ b/source/_build/html/_sources/openstack_supporting-database.txt @@ -0,0 +1,53 @@ +.. _openstack_supporting-database: + +Database +######## + +Most OpenStack* services use an SQL database to store information. The +database typically runs on the controller node. The procedures in this +guide use MariaDB. + +Install and configure the database server +----------------------------------------- + +#. Install MariaDB bundle:: + + # swupd bundle-add database-mariadb + # swupd verify --fix + +#. Create the ``/etc/mariadb/`` folder and the ``/etc/mariadb/openstack.cnf`` + file:: + + # mkdir /etc/mariadb + # touch /etc/mariadb/openstack.cnf + +#. Add the ``[mysqld]`` section, set the bind-address key to the + management IP address of the controller node to enable access by + other nodes via the management network and enable useful options for + UTF-8 character set:: + + [mysqld] + bind-address = 10.0.0.11 + default-storage-engine = innodb + innodb_file_per_table + collation-server = utf8_general_ci + init-connect = 'SET NAMES utf8' + character-set-server = utf8 + +Finalizing database installation +-------------------------------- + +Complete the following steps to finalize database installation: + +#. Start the database service and configure it to start when the system + boots:: + + # systemctl enable mariadb.service + # systemctl start mariadb.service + +#. Secure the database service including choosing a suitable password + for the root account:: + + # mysql_secure_installation + +Next topic: :ref:`openstack_supporting-messaging`. \ No newline at end of file diff --git a/source/_build/html/_sources/openstack_supporting-messaging.txt b/source/_build/html/_sources/openstack_supporting-messaging.txt new file mode 100644 index 00000000..be9c167d --- /dev/null +++ b/source/_build/html/_sources/openstack_supporting-messaging.txt @@ -0,0 +1,48 @@ +.. _openstack_supporting-messaging: + +Message queue +############# + +OpenStack* uses a `message queue` to coordinate operations and +status information among services. The message queue service typically +runs on the controller node. OpenStack supports several message queue +services. This guide implements the RabbitMQ message queue service. + +Install the message queue service +--------------------------------- + +#. Install the message queue bundle.:: + + # swupd bundle-add message-broker-rabbitmq + # swupd verify --fix + +Configuring the message broker service +-------------------------------------- + +Complete the following steps to configure the message broker service: + +#. Message broker service needs to be able to resolve to itself. Add the + following line to ``/etc/hosts``.:: + + 127.0.0.1 controller + +#. Start the message broker service and configure it to start when the + system boots.:: + + # systemctl enable rabbitmq-server.service + # systemctl start rabbitmq-server.service + +#. Add the OpenStack user. Replace ``RABBIT_PASS`` with a suitable password.:: + + # rabbitmqctl add_user openstack RABBIT_PASS + Creating user openstack ... + ...done. + + +#. Permit configuration, write, and read access for the OpenStack user.:: + + # rabbitmqctl set_permissions openstack ".*" ".*" ".*" + Setting permissions for user "openstack" in vhost "/" ... + ...done. + +Next topic: :ref:`openstack_identity`. \ No newline at end of file diff --git a/source/_build/html/_sources/openstack_sys_req_and_pw_summary.txt b/source/_build/html/_sources/openstack_sys_req_and_pw_summary.txt new file mode 100644 index 00000000..c67ae79b --- /dev/null +++ b/source/_build/html/_sources/openstack_sys_req_and_pw_summary.txt @@ -0,0 +1,78 @@ +.. _openstack_sys_req_and_pw_summary: + +System requirements and password summary +############################################################ + +System requirements +---------------------------- + +For best performance, we recommend that your environment meets or +exceeds the following hardware requirements: + +- Controller Node: 1 processor, 2 GB memory, and 5 GB storage. +- Compute Node: 1 processor, 2 GB memory, and 10 GB storage. + +For OpenStack* services, this guide uses \ ``SERVICE_PASS``\ to reference +service account passwords and ``SERVICE_DBPASS`` to reference database +passwords. + +Prerequisites +--------------------- + +All nodes require Internet access to install OpenStack bundles and +perform maintenance tasks such as periodic updates. + +OpenStack and supporting services require administrative privileges +during installation and operation. + +You must also configure networking so that each node can resolve the +other nodes by name in addition to IP address. For example, the +``controller`` name must resolve to ``10.0.0.11``, the IP address of the +management interface on the controller node. + +To configure name resolution: + +#. Set the hostname of the node to ``controller``:: + + # hostnamectl set-hostname controller + +#. Edit the ``/etc/hosts`` file to contain the following:: + + # controller 10.0.0.11 controller + # compute1 10.0.0.31 compute1 + +Password summary +------------------------ + +The following table provides a list of services that require passwords +and their associated references in the guide: + ++----------------------------------------+--------------------------------------------------+ +| **Password name** | **Description** | ++----------------------------------------+--------------------------------------------------+ +| Database password (no variable used) | Root password for the database | ++----------------------------------------+--------------------------------------------------+ +| RABBIT_PASS | Password of user guest of RabbitMQ | ++----------------------------------------+--------------------------------------------------+ +| KEYSTONE_DBPASS | Database password of Identity service | ++----------------------------------------+--------------------------------------------------+ +| DEMO_PASS | Password of user demo | ++----------------------------------------+--------------------------------------------------+ +| ADMIN_PASS | Password of user admin | ++----------------------------------------+--------------------------------------------------+ +| GLANCE_DBPASS | Database password for Image Service | ++----------------------------------------+--------------------------------------------------+ +| GLANCE_PASS | Password of Image Service user glance | ++----------------------------------------+--------------------------------------------------+ +| NOVA_DBPASS | Database password for Compute service | ++----------------------------------------+--------------------------------------------------+ +| NOVA_PASS | Password of Compute service user nova | ++----------------------------------------+--------------------------------------------------+ +| DASH_DBPASS | Database password for the dashboard | ++----------------------------------------+--------------------------------------------------+ +| CINDER_DBPASS | Database password for the Block Storage service | ++----------------------------------------+--------------------------------------------------+ +| CINDER_PASS | Password of Block Storage service user cinder | ++----------------------------------------+--------------------------------------------------+ + +Next topic: :ref:`openstack_installing_bundles`. \ No newline at end of file diff --git a/source/_build/html/_sources/openstack_telemetry.txt b/source/_build/html/_sources/openstack_telemetry.txt new file mode 100644 index 00000000..51b6e257 --- /dev/null +++ b/source/_build/html/_sources/openstack_telemetry.txt @@ -0,0 +1,224 @@ +.. _openstack_telemetry: + +Telemetry +############################################################ + +Overview +--------- + +The Telemetry module performs the following functions: + +- Efficiently polls metering data related to OpenStack services; +- Collects event and metering data by monitoring notifications sent + from services; +- Publishes collected data to various targets, including data stores + and message queues; and +- Creates alarms when collected data breaks defined rules. + +Installing and configuring controller node +----------------------------------------------- + +This section describes how to install and configure the Telemetry +module, code-named ceilometer, on the controller node. The Telemetry +module uses separate agents to collect measurements from each OpenStack +service in your environment. + +Prerequisites +~~~~~~~~~~~~~~~ + +Before installing and configuring the ``telemetry`` module, install +MongoDB* and create a MongoDB database, service credentials, and API +endpoint. + +#. Install the MongoDB bundle:: + + # clr_bundle_add database-mongodb + +#. Create the ``/etc/mongodb/`` folder and the + ``/etc/mongodb/openstack.cnf`` file. +#. Configure the ``bind_ip`` key to use the management interface IP + address of the controller node:: + + bind_ip = 10.0.0.11 + +#. Start the database service and configure it to start when the system + boots with the following commands:: + + # systemctl enable mongodb.service + # systemctl start mongodb.service + +#. Create the ``ceilometer`` database. Replace *CEILOMETER_DBPASS* + with a suitable password:: + + # mongo --host controller --eval ' + db = db.getSiblingDB("ceilometer"); + db.createUser({user: "ceilometer", + pwd: "CEILOMETER_DBPASS", + roles: [ "readWrite", "dbAdmin" ]})' + + MongoDB shell version: 2.6.x + connecting to: controller:27017/test + Successfully added user: { "user" : "ceilometer", "roles" : [ "readWrite", "dbAdmin" ] } + +#. Source the ``admin`` credentials to gain access to admin-only CLI + commands:: + + $ source admin-openrc.sh + +#. To create the service credentials, complete these steps: + + * Create the ``ceilometer`` user:: + + $ openstack user create --password-prompt ceilometer + User Password: + Repeat User Password: + +----------+----------------------------------+ + | Field | Value | + +----------+----------------------------------+ + | email | None | + | enabled | True | + | id | b7657c9ea07a4556aef5d34cf70713a3 | + | name | ceilometer | + | username | ceilometer | + +----------+----------------------------------+ + + * Add the ``admin`` role to the ``ceilometer`` user:: + + $ openstack role add --project service --user ceilometer admin + +-------+----------------------------------+ + | Field | Value | + +-------+----------------------------------+ + | id | cd2cb9a39e874ea69e5d4b896eb16128 | + | name | admin | + +-------+----------------------------------+ + + * Create the ``ceilometer`` service entity:: + + $ openstack service create --name ceilometer \ + --description "Telemetry" metering + +-------------+----------------------------------+ + | Field | Value | + +-------------+----------------------------------+ + | description | Telemetry | + | enabled | True | + | id | 3405453b14da441ebb258edfeba96d83 | + | name | ceilometer | + | type | metering | + +-------------+----------------------------------+ + +#. Create the Telemetry module API endpoint:: + + $ openstack endpoint create \ + --publicurl http://controller:8777 \ + --internalurl http://controller:8777 \ + --adminurl http://controller:8777 \ + --region RegionOne \ + metering + +--------------+----------------------------------+ + | Field | Value | + +--------------+----------------------------------+ + | adminurl | http://controller:8777 | + | id | d3716d85b10d4e60a67a52c6af0068cd | + | internalurl | http://controller:8777 | + | publicurl | http://controller:8777 | + | region | RegionOne | + | service_id | 3405453b14da441ebb258edfeba96d83 | + | service_name | ceilometer | + | service_type | metering | + +--------------+----------------------------------+ + +Installing and configuring the Telemetry module components +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#. Install the OpenStack Telemetry Controller bundle:: + + # clr_bundle_add openstack-telemetry-controller + +#. Generate a random value to use as the telemetry secret:: + + $ openssl rand -hex 10 + +#. Custom configurations will be located at ``/etc/ceilometer``. + + * Create ``/etc/ceilometer`` directory:: + + mkdir /etc/ceilometer + + * Create the empty ceilometer configuration file:: + + /etc/ceilometer/ceilometer.conf + touch /etc/ceilometer/ceilometer.conf + +#. Edit the following file:\ ``/etc/ceilometer/ceilometer.conf``\ Then + complete the following actions: + + * In the ``[database]`` section, configure database access. Replace + *``CEILOMETER_DBPASS``* with the password you chose for the + Telemetry module database. You must escape special characters such + as ':', '/', '+', and '@' in the connection string in accordance + with RFC2396:: + + [database] + ... + connection = mongodb://ceilometer:CEILOMETER_DBPASS@controller:27017/ceilometer + + * In the ``[DEFAULT]`` and ``[oslo_messaging_rabbit]`` sections, + configure RabbitMQ message queue access. Replace *``RABBIT_PASS``* + with the password you chose for the ``openstack`` account in + RabbitMQ:: + + [DEFAULT] + ... + rpc_backend = rabbit + [oslo_messaging_rabbit] + rabbit_host = controller + rabbit_userid = openstack + rabbit_password = RABBIT_PASS + + * In the ``[DEFAULT]`` and ``[keystone_authtoken]`` sections, + configure Identity service access. Replace *``CEILOMETER_PASS``* + with the password you chose for the ``celiometer`` user in the + Identity service:: + + [DEFAULT] + ... + auth_strategy = keystone + [keystone_authtoken] + auth_uri = http://controller:5000/v2.0 + identity_uri = http://controller:35357 + admin_tenant_name = service + admin_user = ceilometer + admin_password = CEILOMETER_PASS + + * In the ``[service_credentials]`` section, configure service + credentials. Replace *``CEILOMETER_PASS``* with the password you + chose for the ``ceilometer`` user in the Identity service:: + + [service_credentials] + ... + os_auth_url = http://controller:5000/v2.0 + os_username = ceilometer + os_tenant_name = service + os_password = CEILOMETER_PASS + os_endpoint_type = internalURL + os_region_name = RegionOne + + * In the ``[publisher]`` section, configure the telemetry secret. + Replace *``TELEMETRY_SECRET``* with the telemetry secret that you + generated in a previous step:: + + [publisher] + ... + telemetry_secret = TELEMETRY_SECRET + +Finalizing installation +~~~~~~~~~~~~~~~~~~~~~~~~ + +* Start the Telemetry services and configure them to start when the system boots:: + + # systemctl enable ceilometer-api.service ceilometer-agent-notification.service ceilometer-agent-central.service ceilometer-collector.service \ + ceilometer-alarm-evaluator.service ceilometer-alarm-notifier.service + # systemctl start ceilometer-api.service ceilometer-agent-notification.service ceilometer-agent-central.service ceilometer-collector.service \ + ceilometer-alarm-evaluator.service ceilometer-alarm-notifier.service + +Next topic: :ref:`openstack_object_storage`. \ No newline at end of file diff --git a/source/_build/html/_sources/openstack_use_cases.txt b/source/_build/html/_sources/openstack_use_cases.txt new file mode 100644 index 00000000..fe69751f --- /dev/null +++ b/source/_build/html/_sources/openstack_use_cases.txt @@ -0,0 +1,27 @@ +.. _openstack_use_cases: + +OpenStack* use cases with Clear Linux* OS for Intel® Architecture +################################################################### + +The installation and configuration of a Cloud Management Platform +depends on use cases and associated architectural choices. + +OpenStack supports the following use cases: + +- *General purpose* -- A cloud built with common components that should + address about 80 percent of common use cases. + +- *Compute-focused* -- A cloud designed to address compute-intensive + workloads such as high performance computing (HPC). + +- *Storage-focused* -- A cloud focused on storage intensive workloads + such as data analytics with parallel file systems. + +- *Network-focused* -- A cloud depending on high performance and + reliable networking, such as a Content Delivery Network (CDN). + +Clear Linux OS for Intel Architecture is designed with all of these use +cases in mind, but the initial target is to enable only those services +required for Cloud. + +Next topic: :ref:`openstack_bundle_and_service_summary`. \ No newline at end of file diff --git a/source/_build/html/_sources/substitutions.txt b/source/_build/html/_sources/substitutions.txt new file mode 100644 index 00000000..d913bfcc --- /dev/null +++ b/source/_build/html/_sources/substitutions.txt @@ -0,0 +1,5 @@ +.. |codename| replace:: Zephyr Kernel + +.. |PM| replace:: Hirally Rodriguez Santiago + +.. |project| replace:: Zephyr Project diff --git a/source/_build/html/_sources/swupdate_about_sw_update.txt b/source/_build/html/_sources/swupdate_about_sw_update.txt new file mode 100644 index 00000000..18c83c93 --- /dev/null +++ b/source/_build/html/_sources/swupdate_about_sw_update.txt @@ -0,0 +1,105 @@ +About software update +################################################################ + +Linux*-based operating systems contain the code of several hundred, if +not thousands, of open source projects. To make this manageable, +distributions use a concept called "packages" to configure and compile +the source code of these projects into binaries, which can then be +logically installed. + +Many distributions then combine these compiled binaries into so-called +packages, resolving dependencies and providing everything needed to +install. This is the granularity at which typical distributions deploy +their software, enabling system administrators to install and update +each package individually or as a set, using tools such as "yum" and +"apt-get." + +The Clear way +------------- + +The Clear Linux OS for Intel® Architecture does things a bit +differently. While we use the concept of packages to manage compiling +source code into installable binaries, we do not deploy software through +packages as many distributions do. Instead, we provide "bundles" that +each contain a set of functionality for the system +administrator--functionality that is enabled by composing all the +required upstream open source projects into one logical unit: a bundle. + +There is another notable difference between package-based distributions +and the Clear Linux OS for Intel Architecture. On a package-based OS, a +system administrator can update each individual package or piece of +software to a newer (or older!) version. In the Clear Linux OS for Intel +Architecture, an update translates to an entirely new OS version, +containing one or many updates; it is not possible to update a piece of +the system while remaining on the same version of Clear Linux. + +Why would you want this? This may sound like a huge restriction or +limitation at first, but we consider this a great feature. Imagine a +cloud environment with many machines. In this case, it is desirable and +more advantageous to have a homogeneous set of software. + +With traditional distributions, to describe what version of software a +server is running, one might need to: + +- List and keep track of the current OS release (generally + uninformative about any singular packages or functionality) + +- Keep track of all packages and repositories used, updating those as + required to keep up to date + +- List and keep track of every package available and installed on the + system, none of which are directly tied to the current OS release + +This is done very well, but given the nearly endless combinations of +packages and versions of packages a server may have, it quickly becomes +non-trivial to define what "version" the system is and what software it +is running without explicitly going through each system and inspecting +every package. + +With the Clear Linux OS for Intel Architecture, we must keep track of: + +- One single number + +That number represents the current OS release, and it is sufficient to +describe the versions of all the software on the OS. Each build is +composed of a specific set of bundles made from a particular version of +packages. This matters on a daily basis to system administrators, who +need to determine which of their systems do not have the latest security +fixes, or which combinations of software have been tested with which +other pieces. Every release of the same number is guaranteed to contain +the same versions of software, so there is no ambiguity between two +systems running the same Clear Linux OS for Intel Architecture. + +Incredible update speeds +------------------------ + +Software updates with Clear Linux OS for Intel Architecture are also +efficient; bundles are only describing a set of files, and the update +technology only updates files that actually changed, using so-called +binary-delta technology for efficiency. Updating using this method is +different from operating systems that use packages as the unit of +deployment. In those operating systems, the entire package gets updated +when needed, even if only one small file in that package has changed. + +It is quite common for a full OS update fixing a security hole to be +only 15 kilobytes in total update size. If only several kilobytes need +to be changed, it does not make sense to re-download and reinstall an +entire package or suite of programs just to incorporate a miniscule (yet +important) update. Through binary deltas, the OS is able to update only +those bits that changed, yielding very small update content (deltas) +that can be applied exceedingly fast. One can then expect a major +security patch or core update to take seconds. + +We realize that while our definition of bundles makes sense to us, each +data center operator may have special needs and ideas. For that reason +we are working on completing a "mixer" tool, which would allow users of +Clear Linux OS for Intel Architecture to customize and add bundles and +their own software while still using the content of the operating +system, and its updates, as the base. This way system administrators can +focus on the pieces of their OS deployment that are custom to their +environment, while continuing to stay on a controlled update stream. + +Note: The software update technology for Clear Linux OS for Intel Architecture +was first presented at the Linux Plumbers conference in 2012. + + diff --git a/source/_build/html/_sources/swupdate_how_to_run_the_updater.txt b/source/_build/html/_sources/swupdate_how_to_run_the_updater.txt new file mode 100644 index 00000000..c57e02ed --- /dev/null +++ b/source/_build/html/_sources/swupdate_how_to_run_the_updater.txt @@ -0,0 +1,39 @@ +How to run the updater +############################################################ + +This section describes how to manually trigger the software update code in Clear Linux* OS for Intel® Architecture. + +Prerequisites +~~~~~~~~~~~~~ + +- System is up and running a Clear Linux OS for Intel + Architecture official build 300 or later. + +- Device is on a well-connected network. + +- Device is able to connect to release infrastructure. For example: + http://update.clearlinux.org/update/300/ + +Running the updater +~~~~~~~~~~~~~~~~~~~ + +#. Open a Terminal Emulator. + +#. Become root and trigger update by typing ``# swupd_update`` + +#. If the updater console output indicates a kernel update occurred, + then at your convenience reboot to begin using the new OS version. + +Updater options +~~~~~~~~~~~~~~~ + +Help options: + +- ``-h, --help`` Display help options. + +Application options: + +- ``-d, --download`` Download all content, but do not actually install + the update. + +- ``-v, --verbose`` Increase verbosity of log and console messages. diff --git a/source/_build/html/_static/ajax-loader.gif b/source/_build/html/_static/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..61faf8cab23993bd3e1560bff0668bd628642330 GIT binary patch literal 673 zcmZ?wbhEHb6krfw_{6~Q|Nno%(3)e{?)x>&1u}A`t?OF7Z|1gRivOgXi&7IyQd1Pl zGfOfQ60;I3a`F>X^fL3(@);C=vM_KlFfb_o=k{|A33hf2a5d61U}gjg=>Rd%XaNQW zW@Cw{|b%Y*pl8F?4B9 zlo4Fz*0kZGJabY|>}Okf0}CCg{u4`zEPY^pV?j2@h+|igy0+Kz6p;@SpM4s6)XEMg z#3Y4GX>Hjlml5ftdH$4x0JGdn8~MX(U~_^d!Hi)=HU{V%g+mi8#UGbE-*ao8f#h+S z2a0-5+vc7MU$e-NhmBjLIC1v|)9+Im8x1yacJ7{^tLX(ZhYi^rpmXm0`@ku9b53aN zEXH@Y3JaztblgpxbJt{AtE1ad1Ca>{v$rwwvK(>{m~Gf_=-Ro7Fk{#;i~+{{>QtvI yb2P8Zac~?~=sRA>$6{!(^3;ZP0TPFR(G_-UDU(8Jl0?(IXu$~#4A!880|o%~Al1tN literal 0 HcmV?d00001 diff --git a/source/_build/html/_static/alabaster.css b/source/_build/html/_static/alabaster.css new file mode 100644 index 00000000..07a9e2a4 --- /dev/null +++ b/source/_build/html/_static/alabaster.css @@ -0,0 +1,585 @@ + + + + + + + + + + + + + + + + + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; + font-size: 17px; + background-color: white; + color: #000; + margin: 0; + padding: 0; +} + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #ffffff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebar { + font-size: 14px; + line-height: 1.5; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: 'Garamond', 'Georgia', serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #999; + background: #999; + + text-align: left; + margin-left: 0; + width: 50%; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #FCC; + border: 1px solid #FAA; +} + +div.admonition tt.xref, div.admonition a tt { + border-bottom: 1px solid #fafafa; +} + +dd div.admonition { + margin-left: -60px; + padding-left: 60px; +} + +div.admonition p.admonition-title { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: white; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #eee; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.footnote td.label { + width: 0px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +dl dl pre { + margin-left: -90px; + padding-left: 90px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid white; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: white; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: white; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} \ No newline at end of file diff --git a/source/_build/html/_static/basic.css b/source/_build/html/_static/basic.css new file mode 100644 index 00000000..9fa77d88 --- /dev/null +++ b/source/_build/html/_static/basic.css @@ -0,0 +1,599 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + width: 170px; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + width: 30px; +} + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable dl, table.indextable dd { + margin-top: 0; + margin-bottom: 0; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- general body styles --------------------------------------------------- */ + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.field-list ul { + padding-left: 1em; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.field-list td, table.field-list th { + border: 0 !important; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, .highlighted { + background-color: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/source/_build/html/_static/comment-bright.png b/source/_build/html/_static/comment-bright.png new file mode 100644 index 0000000000000000000000000000000000000000..551517b8c83b76f734ff791f847829a760ad1903 GIT binary patch literal 3500 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 A2LJ#7 literal 0 HcmV?d00001 diff --git a/source/_build/html/_static/comment.png b/source/_build/html/_static/comment.png new file mode 100644 index 0000000000000000000000000000000000000000..92feb52b8824c6b0f59b658b1196c61de9162a95 GIT binary patch literal 3445 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 Xn!ZpXD%P(H00000NkvXXu0mjf= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span = document.createElement("span"); + span.className = className; + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this); + }); + } + } + return this.each(function() { + highlight(this); + }); +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated == 'undefined') + return string; + return (typeof translated == 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated == 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('

    ') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) == 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this == '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/source/_build/html/_static/down-pressed.png b/source/_build/html/_static/down-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..7c30d004b71b32bb2fc06b3bd4dc8278baab0946 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~&H|6fVxZ#d zAk65bF}ngN$X?><>&kwMor^(NtW3yF87Slz;1l8sq&LUMQwy<>&kwMol#tg zK_ydLmzem(vK1>2TzUEGl*lj!N<7$PCrdoWV0 z$w0*Ap!bZ4if7h;-yfL#MC0e;t{xY+$l~DX2EWYIPet1cohf^BdG+jXhtuq&W-0|c zKPmlKv-7OTjb}T)7@fTGd9y~u4{g8An;)c2U=w=nwQ7}zVDc>n+a literal 0 HcmV?d00001 diff --git a/source/_build/html/_static/file.png b/source/_build/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..254c60bfbe2715ae2edca48ebccfd074deb8031d GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJXMsm#F#`j)FbFd;%$g$s6l5>) z^mS#w%FV~i&ZxO9L3Zxqw8>dd4I&zcKG){Yx14xKr0

    ZQJ$m%mv17-NAAj}g)$7-<-@JMA z_U+TRK=AR}yLa#2zkmPX!-tO_KYsf3>Hq)#%qnY_1Fd8&3GxeO2wSmci|LJf=|BO- zByV>Yl`U*PX977no-U3d5|XS39sLdkFt8q|+|QqL_#ErUf6I%zFA7b%b>3$hFGGFs zc72AL|61pRJ1(+5wNdg|xP#*`gQ~lOnTFKiIjl#S3)+QV=h{~`9{M=hx#5uZ&-tIF sG!8onYS_8EFr8v&@CavkqYey&g)1epR*Fkm0PSV)boFyt=akR{044O6bN~PV literal 0 HcmV?d00001 diff --git a/source/_build/html/_static/images/bundles_overview.png b/source/_build/html/_static/images/bundles_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..c30de12914583f834a39d8f0b14c208edd1adc25 GIT binary patch literal 115841 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%0AT|LfT=O1bJUl8dLn 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

    Z0T%f@FRf_f*r%iHN>);Q0%ixo78Xr(YVe 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 JITD69{|8?l5pw_l literal 0 HcmV?d00001 diff --git a/source/_build/html/_static/images/gs_confirmation_screen.png b/source/_build/html/_static/images/gs_confirmation_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..2ddcaa8ab2778a17f90a643c8874e419b1b18961 GIT binary patch literal 42586 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 0 && j < len ? [ this[j] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: deletedIds.sort, + splice: deletedIds.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( support.ownLast ) { + for ( key in obj ) { + return hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call(obj) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Support: Android<4.1, IE<9 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( indexOf ) { + return indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + while ( j < len ) { + first[ i++ ] = second[ j++ ]; + } + + // Support: IE<9 + // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) + if ( len !== len ) { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: function() { + return +( new Date() ); + }, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v1.10.19 + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-04-18 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document (jQuery #6963) + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== strundefined && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsHTML = !isXML( doc ); + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent !== parent.top ) { + // IE11 does not have attachEvent, so all must suffer + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if getElementsByClassName can be trusted + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "
    "; + + // Support: Safari<4 + // Catch class over-caching + div.firstChild.className = "i"; + // Support: Opera<10 + // Catch gEBCN failure to find non-leading classes + return div.getElementsByClassName("i").length === 2; + }); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowclip^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + outerCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is no seed and only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome<14 +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; + }); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +}); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof rootjQuery.ready !== "undefined" ? + rootjQuery.ready( selector ) : + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.extend({ + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +jQuery.fn.extend({ + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.unique( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = jQuery.unique( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +}); +var rnotwhite = (/\S+/g); + + + +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + + } else if ( !(--remaining) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend({ + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +}); + +/** + * Clean-up method for dom ready events + */ +function detach() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } +} + +/** + * The ready event handler and self cleanup method + */ +function completed() { + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + + +var strundefined = typeof undefined; + + + +// Support: IE<9 +// Iteration over object's inherited properties before its own +var i; +for ( i in jQuery( support ) ) { + break; +} +support.ownLast = i !== "0"; + +// Note: most support tests are defined in their respective modules. +// false until the test is run +support.inlineBlockNeedsLayout = false; + +// Execute ASAP in case we need to set body.style.zoom +jQuery(function() { + // Minified: var a,b,c,d + var val, div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + // Return for frameset docs that don't have a body + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + if ( typeof div.style.zoom !== strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; + + support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; + if ( val ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); +}); + + + + +(function() { + var div = document.createElement( "div" ); + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +/** + * Determines whether an object can have data + */ +jQuery.acceptData = function( elem ) { + var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ], + nodeType = +elem.nodeType || 1; + + // Do not set data on non-element DOM nodes because it will not be cleared (#8335). + return nodeType !== 1 && nodeType !== 9 ? + false : + + // Nodes accept data unless otherwise specified; rejection can be conditional + !noData || noData !== true && elem.getAttribute("classid") === noData; +}; + + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + +function internalData( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = jQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + // Avoid exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // The following elements (space-suffixed to avoid Object.prototype collisions) + // throw uncatchable exceptions if you attempt to set expando properties + noData: { + "applet ": true, + "embed ": true, + // ...but Flash objects (which have this classid) *can* handle expandos + "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var i, name, data, + elem = this[0], + attrs = elem && elem.attributes; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return arguments.length > 1 ? + + // Sets one value + this.each(function() { + jQuery.data( this, key, value ); + }) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + + +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + }; + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; +}; +var rcheckableType = (/^(?:checkbox|radio)$/i); + + + +(function() { + // Minified: var a,b,c + var input = document.createElement( "input" ), + div = document.createElement( "div" ), + fragment = document.createDocumentFragment(); + + // Setup + div.innerHTML = "
    a"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName( "tbody" ).length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = + document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + input.type = "checkbox"; + input.checked = true; + fragment.appendChild( input ); + support.appendChecked = input.checked; + + // Make sure textarea (and checkbox) defaultValue is properly cloned + // Support: IE6-IE11+ + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // #11217 - WebKit loses check when the name is after the checked attribute + fragment.appendChild( div ); + div.innerHTML = ""; + + // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 + // old WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + support.noCloneEvent = true; + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } +})(); + + +(function() { + var i, eventName, + div = document.createElement( "div" ); + + // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event) + for ( i in { submit: true, change: true, focusin: true }) { + eventName = "on" + i; + + if ( !(support[ i + "Bubbles" ] = eventName in window) ) { + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + div.setAttribute( eventName, "t" ); + support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && jQuery.acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + // Support: IE < 9, Android < 4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + jQuery._removeData( doc, fix ); + } else { + jQuery._data( doc, fix, attaches ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
    ", "
    " ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
    " ], + tr: [ 2, "", "
    " ], + col: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
    ", "
    " ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!support.noCloneEvent || !support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted from table fragments + if ( !support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
    " && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + deletedIds.push( id ); + } + } + } + } + } +}); + +jQuery.fn.extend({ + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + remove: function( selector, keepData /* Internal Use Only */ ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var arg = arguments[ 0 ]; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + arg = this.parentNode; + + jQuery.cleanData( getAll( this ) ); + + if ( arg ) { + arg.replaceChild( elem, this ); + } + }); + + // Force removal if there was no new content (e.g., from empty arguments) + return arg && (arg.length || arg.nodeType) ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, self.html() ); + } + self.domManip( args, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[i], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + + +var iframe, + elemdisplay = {}; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var style, + elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + // getDefaultComputedStyle might be reliably used only on attached element + display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? + + // Use of this method is a temporary fix (more like optmization) until something better comes along, + // since it was removed from specification and supported only in FF + style.display : jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = (iframe || jQuery( "

    >4 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 OH`}(x=hF^8xA6z`v$384 literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/openstack_orchestration.doctree b/source/_build/doctrees/openstack_orchestration.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7b3c71a9a021ee735c3391a0ef1efce907387968 GIT binary patch literal 57967 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 literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/openstack_supporting-database.doctree b/source/_build/doctrees/openstack_supporting-database.doctree new file mode 100644 index 0000000000000000000000000000000000000000..313f3ff04ad2bbb51edbc874948e289987eed9ef GIT binary patch literal 10563 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 literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/openstack_supporting-messaging.doctree b/source/_build/doctrees/openstack_supporting-messaging.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b84b0c4e2e951e11be740c9892b20c597005741c GIT binary patch literal 10570 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 Qzt+k@DsZ|g54}DA2W2sxxc~qF literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/openstack_telemetry.doctree b/source/_build/doctrees/openstack_telemetry.doctree new file mode 100644 index 0000000000000000000000000000000000000000..30d2efc6db0d4dadae92c1f5d015564ad1380108 GIT binary patch literal 45808 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 literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/openstack_use_cases.doctree b/source/_build/doctrees/openstack_use_cases.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d9d06f5f00a21a78f2dc3228bf7079e7ebd8a992 GIT binary patch literal 8109 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 W2VPQjHvW18C3Oz}yV}8bi~j-N@BkYC literal 0 HcmV?d00001 diff --git a/source/_build/doctrees/substitutions.doctree b/source/_build/doctrees/substitutions.doctree new file mode 100644 index 0000000000000000000000000000000000000000..816b6abee226f5b7c81b85b4955f3710728c49fd GIT binary patch literal 2760 zcmai02X`Aq5O$o{mK0mILkgsTAqgmerO+YtUQ9%QOfcm*R(C7ylDpfR-8~n`0ioLT z-h2O<%$`oR{Q~1ylZeY$Fauz*wD~Ws@01;uvppbd9#sBq_eMKl^&|) zxSbx-Y|*Gp2OP)e50kTIbLLFx@XUH@d*?>TPniweN1;^$A)}BY#r+;0*i7$9zC=m8c)m_ypUV$k^43|L$??*L z82`89%fy7JWgV7v<|||zkPeEV4+@u=LpdIHhL@M=7##mgKIXVicvK^I!=f%G#gv#9 zM9Ae0vC|W~Jh9sodptpLULg*$OzfT8A}B6F(KN)x^Aqd9`;PDk;l47*tK9SFpI%Mx z9O}a!Cestgakc>5%(3MxW=p^)j&Fqekkl-SmS>(&p_aXjzclkCORQu)bsp}c=i$Ca z%oez}4sc&fxcAaK|Lqm8qad!&@dgL!f3Dt05jBg5GN_ZL4fjbyhV@81H+gt7)Pqbr zrTeAGZ)rm<|#yi_EvF4%>>s>kC4Hf#?SL!`E-V0M^Iqs;)AKWx}pNIFu^f>?u z>jyl15O!|5?iWW7dH66?18Iu@3_jxFoZ}Y82ay)F@F)eghH#ye;~ushtW;@BxF4er z8J0nxpr9ugv0iOm ztrE+Vuy%??88u9tSNL>}&op4ifC}GLIRQUy@L7U!0l8K>q^6OQ9Zv#D`FySo zLwzXq0~NatZjezTt#WS+;B;VwPV_PcFcGn&myx#Ue#kL|VQMTKsv)C3W?7tK*Fh}E z^&`H(BkavlVkivi{YhVOf&?g7WXlVZde%eoP?=3L`(Hj&8VE!R z%_Agal;R|d{Us-K)RdaZFpE=vOm}ZmZxBwM8m_2;-`VbdknlDKzR#JCnN{W_Xa|DULY8R~&sy zsUopSlCMr!WbjogE5`|qwjxDk#ILQw_I`u$orv))!E{pHAhy@(iA}`g8!(dD?(EI@ zCe%uEr|Y-KS|%G)gl|K&xH)Txgm+-l52axpqO#;=r43aogVbR--8i2`2aorK8y`|;|F3ACaIV$%|%xdM3Kc0SD@PC38#ihWPe1^3IVKB z@-b=N#MCu?%&3DJ{A3lzU8>jW^i!A_)al~lVl!Q~LM26=hJ2w#S4|5)bKNnqY{?h0 zCnEZ{_&LpWmGtln*nch^o2uYTflzmi%U`G9D;Sm`eobgqurX8Ltiry2x$%e>HBTg2 z;SV;BZ%NH1sfAVze&@mNLbWn6To?Nr4SV7~#P3&NJMCXoN&W91Tn8=aS?hy8wzCfG z+T6+eQ|70+q5ekmbB@1|t~RcS{ju?Dj=wcTh5inTgY#}?r?HsLXieDX)`Z`SaZ3vV ltw!Y*M>_qX2xA#p^2#8!C5~m>GhH*?+Me#I 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