trestle 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/.bowerrc +6 -0
 - data/.gitignore +14 -0
 - data/.rspec +2 -0
 - data/.travis.yml +4 -0
 - data/Gemfile +11 -0
 - data/LICENSE +165 -0
 - data/README.md +88 -0
 - data/Rakefile +6 -0
 - data/app/assets/images/trestle/textures/billie-holiday.png +0 -0
 - data/app/assets/images/trestle/textures/bright-squares.png +0 -0
 - data/app/assets/javascripts/trestle/_confirmation.js.coffee +18 -0
 - data/app/assets/javascripts/trestle/_datepicker.js.coffee +18 -0
 - data/app/assets/javascripts/trestle/_errors.js.coffee +8 -0
 - data/app/assets/javascripts/trestle/_form.js.coffee +4 -0
 - data/app/assets/javascripts/trestle/_gallery.js.coffee +21 -0
 - data/app/assets/javascripts/trestle/_select.js.coffee +7 -0
 - data/app/assets/javascripts/trestle/_sidebar.js.coffee +45 -0
 - data/app/assets/javascripts/trestle/_table.js.coffee +16 -0
 - data/app/assets/javascripts/trestle/_tabs.js.coffee +9 -0
 - data/app/assets/javascripts/trestle/_tooltips.js.coffee +2 -0
 - data/app/assets/javascripts/trestle/admin.js.coffee +22 -0
 - data/app/assets/javascripts/trestle/custom.js.coffee +4 -0
 - data/app/assets/stylesheets/trestle/_custom.scss +4 -0
 - data/app/assets/stylesheets/trestle/_support.scss +9 -0
 - data/app/assets/stylesheets/trestle/_variables.scss +4 -0
 - data/app/assets/stylesheets/trestle/admin.scss +20 -0
 - data/app/assets/stylesheets/trestle/components/_alerts.scss +59 -0
 - data/app/assets/stylesheets/trestle/components/_avatar.scss +18 -0
 - data/app/assets/stylesheets/trestle/components/_breadcrumbs.scss +14 -0
 - data/app/assets/stylesheets/trestle/components/_buttons.scss +13 -0
 - data/app/assets/stylesheets/trestle/components/_confirmation.scss +20 -0
 - data/app/assets/stylesheets/trestle/components/_content.scss +108 -0
 - data/app/assets/stylesheets/trestle/components/_datepicker.scss +91 -0
 - data/app/assets/stylesheets/trestle/components/_dropdown.scss +43 -0
 - data/app/assets/stylesheets/trestle/components/_fields.scss +28 -0
 - data/app/assets/stylesheets/trestle/components/_flex-grid.scss +16 -0
 - data/app/assets/stylesheets/trestle/components/_gallery.scss +19 -0
 - data/app/assets/stylesheets/trestle/components/_header.scss +16 -0
 - data/app/assets/stylesheets/trestle/components/_input-group.scss +11 -0
 - data/app/assets/stylesheets/trestle/components/_media-grid.scss +83 -0
 - data/app/assets/stylesheets/trestle/components/_navigation.scss +111 -0
 - data/app/assets/stylesheets/trestle/components/_pagination.scss +47 -0
 - data/app/assets/stylesheets/trestle/components/_popover.scss +8 -0
 - data/app/assets/stylesheets/trestle/components/_scopes.scss +41 -0
 - data/app/assets/stylesheets/trestle/components/_sidebar.scss +235 -0
 - data/app/assets/stylesheets/trestle/components/_sort.scss +31 -0
 - data/app/assets/stylesheets/trestle/components/_table.scss +80 -0
 - data/app/assets/stylesheets/trestle/components/_tabs.scss +85 -0
 - data/app/assets/stylesheets/trestle/components/_tags.scss +55 -0
 - data/app/assets/stylesheets/trestle/components/_timestamp.scss +13 -0
 - data/app/assets/stylesheets/trestle/components/_turbolinks.scss +3 -0
 - data/app/assets/stylesheets/trestle/components/_wells.scss +39 -0
 - data/app/assets/stylesheets/trestle/core/_defaults.scss +82 -0
 - data/app/assets/stylesheets/trestle/core/_layout.scss +74 -0
 - data/app/assets/stylesheets/trestle/core/_mixins.scss +43 -0
 - data/app/assets/stylesheets/trestle/core/_typography.scss +34 -0
 - data/app/controllers/trestle/application_controller.rb +16 -0
 - data/app/controllers/trestle/dashboard_controller.rb +15 -0
 - data/app/helpers/trestle/avatar_helper.rb +14 -0
 - data/app/helpers/trestle/display_helper.rb +7 -0
 - data/app/helpers/trestle/form_helper.rb +31 -0
 - data/app/helpers/trestle/grid_helper.rb +15 -0
 - data/app/helpers/trestle/hook_helper.rb +13 -0
 - data/app/helpers/trestle/icon_helper.rb +8 -0
 - data/app/helpers/trestle/navigation_helper.rb +10 -0
 - data/app/helpers/trestle/pagination_helper.rb +20 -0
 - data/app/helpers/trestle/params_helper.rb +7 -0
 - data/app/helpers/trestle/sort_helper.rb +56 -0
 - data/app/helpers/trestle/status_helper.rb +8 -0
 - data/app/helpers/trestle/tab_helper.rb +21 -0
 - data/app/helpers/trestle/table_helper.rb +10 -0
 - data/app/helpers/trestle/timestamp_helper.rb +18 -0
 - data/app/helpers/trestle/title_helper.rb +26 -0
 - data/app/helpers/trestle/url_helper.rb +30 -0
 - data/app/views/kaminari/trestle/_first_page.html.erb +11 -0
 - data/app/views/kaminari/trestle/_gap.html.erb +10 -0
 - data/app/views/kaminari/trestle/_last_page.html.erb +11 -0
 - data/app/views/kaminari/trestle/_page.html.erb +12 -0
 - data/app/views/kaminari/trestle/_paginator.html.erb +21 -0
 - data/app/views/layouts/trestle/admin.html.erb +56 -0
 - data/app/views/trestle/admin/index.html.erb +5 -0
 - data/app/views/trestle/application/_alert.html.erb +10 -0
 - data/app/views/trestle/application/_flash.html.erb +11 -0
 - data/app/views/trestle/application/_header.html.erb +25 -0
 - data/app/views/trestle/application/_layout.html.erb +19 -0
 - data/app/views/trestle/application/_tabs.html.erb +9 -0
 - data/app/views/trestle/application/_utilities.html.erb +5 -0
 - data/app/views/trestle/dashboard/index.html.erb +5 -0
 - data/app/views/trestle/resource/_form.html.erb +5 -0
 - data/app/views/trestle/resource/_scopes.html.erb +9 -0
 - data/app/views/trestle/resource/_table.html.erb +2 -0
 - data/app/views/trestle/resource/edit.html.erb +18 -0
 - data/app/views/trestle/resource/index.html.erb +13 -0
 - data/app/views/trestle/resource/new.html.erb +12 -0
 - data/app/views/trestle/resource/show.html.erb +18 -0
 - data/app/views/trestle/shared/_footer.html.erb +4 -0
 - data/app/views/trestle/shared/_header.html.erb +5 -0
 - data/app/views/trestle/shared/_sidebar.html.erb +37 -0
 - data/app/views/trestle/table/_pagination.html.erb +5 -0
 - data/app/views/trestle/table/_table.html.erb +23 -0
 - data/bin/console +14 -0
 - data/bin/setup +8 -0
 - data/bower.json +15 -0
 - data/config/locales/en.rb +18 -0
 - data/config/locales/en.yml +53 -0
 - data/config/routes.rb +7 -0
 - data/lib/generators/trestle/install/install_generator.rb +24 -0
 - data/lib/generators/trestle/install/templates/_custom.scss +8 -0
 - data/lib/generators/trestle/install/templates/_variables.scss +10 -0
 - data/lib/generators/trestle/install/templates/custom.js.coffee +7 -0
 - data/lib/generators/trestle/install/templates/trestle.rb.erb +87 -0
 - data/lib/generators/trestle/resource/resource_generator.rb +22 -0
 - data/lib/generators/trestle/resource/templates/admin.rb.erb +35 -0
 - data/lib/trestle.rb +60 -0
 - data/lib/trestle/adapters.rb +75 -0
 - data/lib/trestle/adapters/active_record_adapter.rb +68 -0
 - data/lib/trestle/adapters/draper_adapter.rb +13 -0
 - data/lib/trestle/admin.rb +67 -0
 - data/lib/trestle/admin/builder.rb +67 -0
 - data/lib/trestle/admin/controller.rb +24 -0
 - data/lib/trestle/attribute.rb +54 -0
 - data/lib/trestle/breadcrumb.rb +33 -0
 - data/lib/trestle/builder.rb +17 -0
 - data/lib/trestle/configurable.rb +66 -0
 - data/lib/trestle/configuration.rb +44 -0
 - data/lib/trestle/display.rb +20 -0
 - data/lib/trestle/engine.rb +49 -0
 - data/lib/trestle/form.rb +21 -0
 - data/lib/trestle/form/automatic.rb +33 -0
 - data/lib/trestle/form/builder.rb +45 -0
 - data/lib/trestle/form/field.rb +53 -0
 - data/lib/trestle/form/fields.rb +44 -0
 - data/lib/trestle/form/fields/check_box.rb +37 -0
 - data/lib/trestle/form/fields/collection_check_boxes.rb +30 -0
 - data/lib/trestle/form/fields/collection_radio_buttons.rb +30 -0
 - data/lib/trestle/form/fields/collection_select.rb +26 -0
 - data/lib/trestle/form/fields/color_field.rb +7 -0
 - data/lib/trestle/form/fields/date_field.rb +9 -0
 - data/lib/trestle/form/fields/date_picker.rb +12 -0
 - data/lib/trestle/form/fields/date_select.rb +27 -0
 - data/lib/trestle/form/fields/datetime_field.rb +10 -0
 - data/lib/trestle/form/fields/datetime_select.rb +27 -0
 - data/lib/trestle/form/fields/email_field.rb +7 -0
 - data/lib/trestle/form/fields/file_field.rb +13 -0
 - data/lib/trestle/form/fields/form_control.rb +38 -0
 - data/lib/trestle/form/fields/form_group.rb +42 -0
 - data/lib/trestle/form/fields/grouped_collection_select.rb +26 -0
 - data/lib/trestle/form/fields/month_field.rb +7 -0
 - data/lib/trestle/form/fields/number_field.rb +7 -0
 - data/lib/trestle/form/fields/password_field.rb +7 -0
 - data/lib/trestle/form/fields/radio_button.rb +32 -0
 - data/lib/trestle/form/fields/range_field.rb +13 -0
 - data/lib/trestle/form/fields/search_field.rb +7 -0
 - data/lib/trestle/form/fields/select.rb +55 -0
 - data/lib/trestle/form/fields/static_field.rb +29 -0
 - data/lib/trestle/form/fields/tag_select.rb +18 -0
 - data/lib/trestle/form/fields/telephone_field.rb +8 -0
 - data/lib/trestle/form/fields/text_area.rb +11 -0
 - data/lib/trestle/form/fields/text_field.rb +7 -0
 - data/lib/trestle/form/fields/time_field.rb +13 -0
 - data/lib/trestle/form/fields/time_select.rb +27 -0
 - data/lib/trestle/form/fields/time_zone_select.rb +26 -0
 - data/lib/trestle/form/fields/url_field.rb +7 -0
 - data/lib/trestle/form/fields/week_field.rb +7 -0
 - data/lib/trestle/form/renderer.rb +63 -0
 - data/lib/trestle/navigation.rb +36 -0
 - data/lib/trestle/navigation/block.rb +58 -0
 - data/lib/trestle/navigation/group.rb +67 -0
 - data/lib/trestle/navigation/item.rb +77 -0
 - data/lib/trestle/options.rb +21 -0
 - data/lib/trestle/reloader.rb +45 -0
 - data/lib/trestle/resource.rb +141 -0
 - data/lib/trestle/resource/builder.rb +83 -0
 - data/lib/trestle/resource/controller.rb +69 -0
 - data/lib/trestle/scope.rb +37 -0
 - data/lib/trestle/tab.rb +19 -0
 - data/lib/trestle/table.rb +56 -0
 - data/lib/trestle/table/actions_column.rb +66 -0
 - data/lib/trestle/table/automatic.rb +35 -0
 - data/lib/trestle/table/builder.rb +32 -0
 - data/lib/trestle/table/column.rb +120 -0
 - data/lib/trestle/table/row.rb +29 -0
 - data/lib/trestle/table/select_column.rb +33 -0
 - data/lib/trestle/version.rb +3 -0
 - data/sandbox/Rakefile +6 -0
 - data/sandbox/app/admin/form_admin.rb +76 -0
 - data/sandbox/app/admin/test_admin.rb +48 -0
 - data/sandbox/app/assets/config/manifest.js +5 -0
 - data/sandbox/app/assets/images/.keep +0 -0
 - data/sandbox/app/assets/javascripts/application.js +13 -0
 - data/sandbox/app/assets/javascripts/cable.js +13 -0
 - data/sandbox/app/assets/javascripts/channels/.keep +0 -0
 - data/sandbox/app/assets/javascripts/trestle/custom.js.coffee +7 -0
 - data/sandbox/app/assets/stylesheets/application.css +15 -0
 - data/sandbox/app/assets/stylesheets/trestle/_custom.scss +8 -0
 - data/sandbox/app/assets/stylesheets/trestle/_variables.scss +10 -0
 - data/sandbox/app/channels/application_cable/channel.rb +4 -0
 - data/sandbox/app/channels/application_cable/connection.rb +4 -0
 - data/sandbox/app/controllers/application_controller.rb +3 -0
 - data/sandbox/app/controllers/concerns/.keep +0 -0
 - data/sandbox/app/controllers/test_controller.rb +4 -0
 - data/sandbox/app/helpers/application_helper.rb +2 -0
 - data/sandbox/app/jobs/application_job.rb +2 -0
 - data/sandbox/app/mailers/application_mailer.rb +4 -0
 - data/sandbox/app/models/application_record.rb +3 -0
 - data/sandbox/app/models/color.rb +31 -0
 - data/sandbox/app/models/concerns/.keep +0 -0
 - data/sandbox/app/models/form_stub.rb +9 -0
 - data/sandbox/app/views/admin/form/_panels.html.haml +20 -0
 - data/sandbox/app/views/admin/form/_wells.html.haml +6 -0
 - data/sandbox/app/views/layouts/application.html.erb +14 -0
 - data/sandbox/app/views/layouts/mailer.html.erb +13 -0
 - data/sandbox/app/views/layouts/mailer.text.erb +1 -0
 - data/sandbox/app/views/test/index.html.haml +136 -0
 - data/sandbox/bin/bundle +3 -0
 - data/sandbox/bin/rails +4 -0
 - data/sandbox/bin/rake +4 -0
 - data/sandbox/bin/setup +34 -0
 - data/sandbox/bin/update +29 -0
 - data/sandbox/config.ru +5 -0
 - data/sandbox/config/application.rb +15 -0
 - data/sandbox/config/boot.rb +5 -0
 - data/sandbox/config/cable.yml +9 -0
 - data/sandbox/config/database.yml +25 -0
 - data/sandbox/config/environment.rb +5 -0
 - data/sandbox/config/environments/development.rb +54 -0
 - data/sandbox/config/environments/production.rb +86 -0
 - data/sandbox/config/environments/test.rb +42 -0
 - data/sandbox/config/initializers/application_controller_renderer.rb +6 -0
 - data/sandbox/config/initializers/assets.rb +11 -0
 - data/sandbox/config/initializers/backtrace_silencers.rb +7 -0
 - data/sandbox/config/initializers/cookies_serializer.rb +5 -0
 - data/sandbox/config/initializers/filter_parameter_logging.rb +4 -0
 - data/sandbox/config/initializers/inflections.rb +16 -0
 - data/sandbox/config/initializers/mime_types.rb +4 -0
 - data/sandbox/config/initializers/new_framework_defaults.rb +24 -0
 - data/sandbox/config/initializers/session_store.rb +3 -0
 - data/sandbox/config/initializers/trestle.rb +10 -0
 - data/sandbox/config/initializers/wrap_parameters.rb +14 -0
 - data/sandbox/config/locales/en.yml +23 -0
 - data/sandbox/config/puma.rb +47 -0
 - data/sandbox/config/routes.rb +3 -0
 - data/sandbox/config/secrets.yml +22 -0
 - data/sandbox/config/spring.rb +6 -0
 - data/sandbox/lib/assets/.keep +0 -0
 - data/sandbox/log/.keep +0 -0
 - data/sandbox/public/404.html +67 -0
 - data/sandbox/public/422.html +67 -0
 - data/sandbox/public/500.html +66 -0
 - data/sandbox/public/apple-touch-icon-precomposed.png +0 -0
 - data/sandbox/public/apple-touch-icon.png +0 -0
 - data/sandbox/public/favicon.ico +0 -0
 - data/trestle.gemspec +36 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-confirmation2/.bower.json +47 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-confirmation2/Gruntfile.js +106 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-confirmation2/README.md +19 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-confirmation2/bootstrap-confirmation.js +455 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-confirmation2/bootstrap-confirmation.min.js +7 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-confirmation2/bower.json +38 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-confirmation2/example/index.html +193 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-confirmation2/package.json +46 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/.bower.json +45 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/CHANGELOG.md +210 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/CONTRIBUTING.md +86 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/LICENSE +22 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/README.md +390 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.eot +0 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.svg +288 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap-sprockets.js +12 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap.js +2377 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap.min.js +7 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap/affix.js +162 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap/alert.js +94 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap/button.js +125 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap/carousel.js +237 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap/collapse.js +212 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap/dropdown.js +165 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap/modal.js +339 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap/popover.js +108 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap/scrollspy.js +172 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap/tab.js +155 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap/tooltip.js +520 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/javascripts/bootstrap/transition.js +59 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/_bootstrap-compass.scss +9 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/_bootstrap-mincer.scss +19 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/_bootstrap-sprockets.scss +9 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/_bootstrap.scss +56 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_alerts.scss +73 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_badges.scss +68 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_breadcrumbs.scss +28 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_button-groups.scss +244 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_buttons.scss +168 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_carousel.scss +270 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_close.scss +36 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_code.scss +69 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_component-animations.scss +37 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_dropdowns.scss +216 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_forms.scss +617 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_glyphicons.scss +307 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_grid.scss +84 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_input-groups.scss +171 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_jumbotron.scss +54 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_labels.scss +66 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_list-group.scss +130 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_media.scss +66 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_mixins.scss +40 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_modals.scss +150 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_navbar.scss +662 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_navs.scss +242 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_normalize.scss +424 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_pager.scss +54 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_pagination.scss +89 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_panels.scss +271 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_popovers.scss +131 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_print.scss +101 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_progress-bars.scss +87 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_responsive-embed.scss +35 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_responsive-utilities.scss +179 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_scaffolding.scss +161 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_tables.scss +234 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_theme.scss +291 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_thumbnails.scss +38 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_tooltip.scss +101 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_type.scss +298 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_utilities.scss +55 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_variables.scss +874 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/_wells.scss +29 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_alerts.scss +14 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_background-variant.scss +12 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_border-radius.scss +18 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_buttons.scss +65 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_center-block.scss +7 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_clearfix.scss +22 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_forms.scss +88 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_gradients.scss +58 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +81 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_grid.scss +122 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_hide-text.scss +21 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_image.scss +33 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_labels.scss +12 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_list-group.scss +32 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +10 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +9 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_opacity.scss +8 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_pagination.scss +24 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_panels.scss +24 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_progress-bar.scss +10 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +8 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_reset-text.scss +18 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_resize.scss +6 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +21 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_size.scss +10 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +9 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_table-row.scss +28 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +12 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_text-overflow.scss +8 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +222 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/bower.json +36 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/composer.json +35 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/eyeglass-exports.js +7 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/package.json +44 -0
 - data/vendor/assets/bower_components/trestle/bootstrap-sass/sache.json +5 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/.bower.json +37 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/CONTRIBUTING.md +40 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/ISSUE_TEMPLATE.md +13 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/LICENSE.md +21 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/README.md +114 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/bower.json +27 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/build.js +226 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/flatpickr.css +823 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/flatpickr.js +2301 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/flatpickr.min.css +13 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/flatpickr.min.js +2 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/ie.css +11 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/ar.js +14 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/bg.js +14 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/bn.js +14 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/cat.js +34 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/cs.js +20 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/cy.js +36 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/da.js +18 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/de.js +21 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/eo.js +26 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/es.js +20 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/et.js +26 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/fa.js +18 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/fi.js +20 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/fr.js +27 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/gr.js +29 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/he.js +14 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/hi.js +14 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/hr.js +17 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/hu.js +25 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/id.js +20 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/it.js +25 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/ja.js +14 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/ko.js +18 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/lt.js +25 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/lv.js +16 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/mk.js +19 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/ms.js +20 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/my.js +20 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/nl.js +27 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/no.js +24 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/pa.js +14 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/pl.js +18 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/pt.js +19 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/ro.js +23 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/ru.js +18 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/si.js +17 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/sk.js +21 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/sl.js +23 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/sq.js +16 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/sr.js +20 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/sv.js +23 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/th.js +25 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/tr.js +18 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/uk.js +17 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/vn.js +19 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/l10n/zh.js +22 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/plugins/confirmDate/confirmDate.css +24 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/plugins/confirmDate/confirmDate.js +47 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/plugins/labelPlugin/labelPlugin.js +15 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/plugins/weekSelect/weekSelect.js +56 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/rtl/flatpickr.min.css +13 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/rtl/themes/airbnb.rtl.css +946 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/rtl/themes/base16_flat.rtl.css +869 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/rtl/themes/confetti.rtl.css +883 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/rtl/themes/dark.rtl.css +869 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/rtl/themes/material_blue.rtl.css +883 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/rtl/themes/material_green.rtl.css +883 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/rtl/themes/material_orange.rtl.css +883 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/rtl/themes/material_red.rtl.css +883 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/themes/airbnb.css +900 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/themes/confetti.css +835 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/themes/dark.css +823 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/themes/light.css +838 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/themes/material_blue.css +835 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/themes/material_green.css +835 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/themes/material_orange.css +835 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/dist/themes/material_red.css +835 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/package.json +68 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/release +13 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/flatpickr.js +2748 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/ar.js +16 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/bg.js +16 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/bn.js +16 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/cat.js +31 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/cs.js +22 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/cy.js +46 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/da.js +20 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/de.js +23 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/eo.js +27 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/es.js +22 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/et.js +28 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/fa.js +20 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/fi.js +22 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/fr.js +31 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/gr.js +31 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/he.js +16 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/hi.js +16 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/hr.js +19 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/hu.js +27 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/id.js +22 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/it.js +27 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/ja.js +16 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/ko.js +20 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/lt.js +27 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/lv.js +17 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/mk.js +20 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/ms.js +22 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/my.js +22 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/nl.js +29 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/no.js +25 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/pa.js +16 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/pl.js +20 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/pt.js +19 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/ro.js +23 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/ru.js +18 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/si.js +17 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/sk.js +21 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/sl.js +23 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/sq.js +16 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/sr.js +20 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/sv.js +23 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/th.js +25 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/tr.js +18 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/uk.js +17 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/vn.js +19 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/l10n/zh.js +22 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/plugins/confirmDate/confirmDate.css +24 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/plugins/confirmDate/confirmDate.js +60 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/plugins/labelPlugin/labelPlugin.js +16 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/plugins/weekSelect/weekSelect.js +63 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/style/_vars.styl +34 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/style/flatpickr.styl +693 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/style/ie.styl +13 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/style/themes/airbnb.styl +78 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/style/themes/confetti.styl +18 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/style/themes/dark.styl +18 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/style/themes/light.styl +22 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/style/themes/material_blue.styl +18 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/style/themes/material_green.styl +18 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/style/themes/material_orange.styl +18 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/src/style/themes/material_red.styl +18 -0
 - data/vendor/assets/bower_components/trestle/flatpickr/yarn.lock +3967 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/.bower.json +36 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/.gitignore +33 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/.npmignore +42 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/HELP-US-OUT.txt +7 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/bower.json +22 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/css/font-awesome.css +2337 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/css/font-awesome.css.map +7 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/css/font-awesome.min.css +4 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/fonts/FontAwesome.otf +0 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/fonts/fontawesome-webfont.eot +0 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/fonts/fontawesome-webfont.svg +2671 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/fonts/fontawesome-webfont.woff +0 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/less/animated.less +34 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/less/bordered-pulled.less +25 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/less/core.less +12 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/less/fixed-width.less +6 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/less/font-awesome.less +18 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/less/icons.less +789 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/less/larger.less +13 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/less/list.less +19 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/less/mixins.less +60 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/less/path.less +15 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/less/rotated-flipped.less +20 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/less/screen-reader.less +5 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/less/stacked.less +20 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/less/variables.less +800 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/scss/_animated.scss +34 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/scss/_bordered-pulled.scss +25 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/scss/_core.scss +12 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/scss/_fixed-width.scss +6 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/scss/_icons.scss +789 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/scss/_larger.scss +13 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/scss/_list.scss +19 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/scss/_mixins.scss +60 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/scss/_path.scss +15 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/scss/_rotated-flipped.scss +20 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/scss/_screen-reader.scss +5 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/scss/_stacked.scss +20 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/scss/_variables.scss +800 -0
 - data/vendor/assets/bower_components/trestle/font-awesome/scss/font-awesome.scss +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/.bower.json +40 -0
 - data/vendor/assets/bower_components/trestle/ionicons/LICENSE +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/bower.json +31 -0
 - data/vendor/assets/bower_components/trestle/ionicons/cheatsheet.html +28009 -0
 - data/vendor/assets/bower_components/trestle/ionicons/component.json +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/composer.json +36 -0
 - data/vendor/assets/bower_components/trestle/ionicons/css/ionicons.css +1480 -0
 - data/vendor/assets/bower_components/trestle/ionicons/css/ionicons.min.css +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/fonts/ionicons.eot +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/fonts/ionicons.svg +2230 -0
 - data/vendor/assets/bower_components/trestle/ionicons/fonts/ionicons.ttf +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/fonts/ionicons.woff +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/less/_ionicons-font.less +27 -0
 - data/vendor/assets/bower_components/trestle/ionicons/less/_ionicons-icons.less +1473 -0
 - data/vendor/assets/bower_components/trestle/ionicons/less/_ionicons-variables.less +747 -0
 - data/vendor/assets/bower_components/trestle/ionicons/less/ionicons.less +3 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/alert-circled.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/alert.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-add-contact.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-add.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-alarm.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-archive.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-arrow-back.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-arrow-down-left.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-arrow-down-right.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-arrow-forward.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-arrow-up-left.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-arrow-up-right.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-battery.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-book.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-calendar.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-call.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-camera.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-chat.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-checkmark.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-clock.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-close.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-contact.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-contacts.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-data.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-developer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-display.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-download.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-drawer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-dropdown.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-earth.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-folder.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-forums.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-friends.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-hand.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-image.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-inbox.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-information.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-keypad.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-lightbulb.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-locate.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-location.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-mail.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-microphone.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-mixer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-more.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-note.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-playstore.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-printer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-promotion.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-reminder.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-remove.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-search.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-send.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-settings.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-share.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-social-user.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-social.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-sort.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-stair-drawer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-star.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-stopwatch.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-storage.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-system-back.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-system-home.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-system-windows.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-timer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-trash.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-user-menu.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-volume.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/android-wifi.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/aperture.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/archive.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-down-a.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-down-b.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-down-c.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-expand.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-graph-down-left.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-graph-down-right.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-graph-up-left.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-graph-up-right.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-left-a.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-left-b.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-left-c.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-move.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-resize.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-return-left.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-return-right.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-right-a.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-right-b.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-right-c.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-shrink.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-swap.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-up-a.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-up-b.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/arrow-up-c.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/asterisk.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/at.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/bag.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/battery-charging.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/battery-empty.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/battery-full.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/battery-half.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/battery-low.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/beaker.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/beer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/bluetooth.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/bonfire.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/bookmark.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/briefcase.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/bug.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/calculator.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/calendar.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/camera.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/card.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/cash.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/chatbox-working.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/chatbox.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/chatboxes.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/chatbubble-working.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/chatbubble.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/chatbubbles.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/checkmark-circled.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/checkmark-round.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/checkmark.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/chevron-down.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/chevron-left.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/chevron-right.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/chevron-up.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/clipboard.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/clock.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/close-circled.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/close-round.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/close.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/closed-captioning.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/cloud.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/code-download.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/code-working.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/code.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/coffee.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/compass.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/compose.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/connection-bars.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/contrast.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/cube.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/disc.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/document-text.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/document.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/drag.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/earth.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/edit.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/egg.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/eject.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/email.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/eye-disabled.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/eye.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/female.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/filing.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/film-marker.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/fireball.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/flag.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/flame.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/flash-off.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/flash.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/flask.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/folder.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/fork-repo.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/fork.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/forward.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/funnel.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/game-controller-a.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/game-controller-b.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/gear-a.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/gear-b.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/grid.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/hammer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/happy.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/headphone.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/heart-broken.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/heart.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/help-buoy.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/help-circled.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/help.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/home.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/icecream.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/icon-social-google-plus-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/icon-social-google-plus.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/image.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/images.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/information-circled.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/information.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ionic.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-alarm-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-alarm.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-albums-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-albums.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-americanfootball-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-americanfootball.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-analytics-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-analytics.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-arrow-back.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-arrow-down.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-arrow-forward.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-arrow-left.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-arrow-right.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-arrow-thin-down.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-arrow-thin-left.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-arrow-thin-right.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-arrow-thin-up.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-arrow-up.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-at-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-at.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-barcode-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-barcode.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-baseball-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-baseball.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-basketball-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-basketball.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-bell-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-bell.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-bolt-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-bolt.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-bookmarks-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-bookmarks.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-box-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-box.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-briefcase-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-briefcase.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-browsers-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-browsers.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-calculator-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-calculator.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-calendar-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-calendar.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-camera-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-camera.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-cart-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-cart.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-chatboxes-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-chatboxes.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-chatbubble-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-chatbubble.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-checkmark-empty.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-checkmark-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-checkmark.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-circle-filled.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-circle-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-clock-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-clock.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-close-empty.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-close-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-close.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-cloud-download-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-cloud-download.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-cloud-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-cloud-upload-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-cloud-upload.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-cloud.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-cloudy-night-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-cloudy-night.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-cloudy-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-cloudy.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-cog-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-cog.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-compose-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-compose.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-contact-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-contact.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-copy-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-copy.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-download-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-download.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-drag.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-email-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-email.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-expand.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-eye-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-eye.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-fastforward-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-fastforward.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-filing-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-filing.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-film-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-film.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-flag-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-flag.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-folder-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-folder.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-football-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-football.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-gear-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-gear.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-glasses-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-glasses.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-heart-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-heart.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-help-empty.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-help-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-help.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-home-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-home.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-infinite-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-infinite.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-information-empty.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-information-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-information.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-ionic-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-keypad-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-keypad.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-lightbulb-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-lightbulb.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-location-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-location.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-locked-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-locked.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-loop-strong.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-loop.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-medkit-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-medkit.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-mic-off.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-mic-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-mic.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-minus-empty.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-minus-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-minus.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-monitor-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-monitor.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-moon-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-moon.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-more-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-more.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-musical-note.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-musical-notes.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-navigate-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-navigate.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-paper-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-paper.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-paperplane-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-paperplane.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-partlysunny-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-partlysunny.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-pause-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-pause.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-paw-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-paw.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-people-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-people.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-person-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-person.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-personadd-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-personadd.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-photos-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-photos.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-pie-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-pie.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-play-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-play.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-plus-empty.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-plus-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-plus.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-pricetag-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-pricetag.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-pricetags-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-pricetags.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-printer-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-printer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-pulse-strong.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-pulse.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-rainy-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-rainy.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-recording-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-recording.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-redo-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-redo.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-refresh-empty.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-refresh-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-refresh.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-reload.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-reverse-camera-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-reverse-camera.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-rewind-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-rewind.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-search-strong.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-search.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-settings-strong.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-settings.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-shrink.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-skipbackward-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-skipbackward.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-skipforward-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-skipforward.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-snowy.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-speedometer-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-speedometer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-star-half.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-star-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-star.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-stopwatch-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-stopwatch.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-sunny-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-sunny.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-telephone-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-telephone.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-tennisball-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-tennisball.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-thunderstorm-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-thunderstorm.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-time-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-time.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-timer-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-timer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-toggle-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-toggle.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-trash-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-trash.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-undo-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-undo.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-unlocked-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-unlocked.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-upload-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-upload.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-videocam-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-videocam.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-volume-high.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-volume-low.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-wineglass-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-wineglass.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-world-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ios7-world.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ipad.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/iphone.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ipod.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/jet.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/key.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/knife.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/laptop.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/leaf.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/levels.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/lightbulb.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/link.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/load-a.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/load-b.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/load-c.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/load-d.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/location.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/locked.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/log-in.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/log-out.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/loop.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/magnet.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/male.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/man.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/map.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/medkit.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/merge.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/mic-a.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/mic-b.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/mic-c.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/minus-circled.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/minus-round.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/minus.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/model-s.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/monitor.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/more.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/mouse.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/music-note.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/navicon-round.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/navicon.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/navigate.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/network.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/no-smoking.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/nuclear.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/outlet.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/paper-airplane.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/paperclip.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/pause.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/person-add.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/person-stalker.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/person.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/pie-graph.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/pin.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/pinpoint.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/pizza.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/plane.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/planet.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/play.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/playstation.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/plus-circled.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/plus-round.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/plus.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/podium.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/pound.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/power.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/pricetag.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/pricetags.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/printer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/pull-request.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/qr-scanner.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/quote.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/radio-waves.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/record.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/refresh.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/reply-all.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/reply.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ribbon-a.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/ribbon-b.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/sad.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/scissors.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/search.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/settings.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/share.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/shuffle.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/skip-backward.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/skip-forward.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-android-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-android.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-apple-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-apple.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-bitcoin-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-bitcoin.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-buffer-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-buffer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-designernews-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-designernews.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-dribbble-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-dribbble.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-dropbox-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-dropbox.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-facebook-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-facebook.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-foursquare-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-foursquare.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-freebsd-devil.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-github-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-github.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-google-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-google.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-googleplus-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-googleplus.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-hackernews-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-hackernews.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-instagram-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-instagram.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-linkedin-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-linkedin.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-pinterest-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-pinterest.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-reddit-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-reddit.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-rss-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-rss.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-skype-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-skype.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-tumblr-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-tumblr.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-tux.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-twitter-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-twitter.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-usd-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-usd.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-vimeo-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-vimeo.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-windows-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-windows.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-wordpress-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-wordpress.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-yahoo-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-yahoo.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-youtube-outline.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/social-youtube.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/speakerphone.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/speedometer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/spoon.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/star.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/stats-bars.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/steam.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/stop.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/thermometer.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/thumbsdown.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/thumbsup.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/toggle-filled.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/toggle.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/trash-a.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/trash-b.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/trophy.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/umbrella.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/university.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/unlocked.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/upload.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/usb.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/videocamera.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/volume-high.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/volume-low.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/volume-medium.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/volume-mute.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/wand.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/waterdrop.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/wifi.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/wineglass.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/woman.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/wrench.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/png/512/xbox.png +0 -0
 - data/vendor/assets/bower_components/trestle/ionicons/readme.md +60 -0
 - data/vendor/assets/bower_components/trestle/ionicons/scss/_ionicons-font.scss +27 -0
 - data/vendor/assets/bower_components/trestle/ionicons/scss/_ionicons-icons.scss +1473 -0
 - data/vendor/assets/bower_components/trestle/ionicons/scss/_ionicons-variables.scss +741 -0
 - data/vendor/assets/bower_components/trestle/ionicons/scss/ionicons.scss +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/alert-circled.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/alert.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-add-circle.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-add.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-alarm-clock.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-alert.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-apps.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-archive.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-arrow-back.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-arrow-down.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-arrow-dropdown-circle.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-arrow-dropdown.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-arrow-dropleft-circle.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-arrow-dropleft.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-arrow-dropright-circle.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-arrow-dropright.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-arrow-dropup-circle.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-arrow-dropup.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-arrow-forward.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-arrow-up.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-attach.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-bar.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-bicycle.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-boat.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-bookmark.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-bulb.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-bus.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-calendar.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-call.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-camera.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-cancel.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-car.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-cart.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-chat.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-checkbox-blank.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-checkbox-outline-blank.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-checkbox-outline.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-checkbox.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-checkmark-circle.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-clipboard.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-close.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-cloud-circle.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-cloud-done.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-cloud-outline.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-cloud.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-color-palette.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-compass.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-contact.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-contacts.svg +26 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-contract.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-create.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-delete.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-desktop.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-document.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-done-all.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-done.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-download.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-drafts.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-exit.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-expand.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-favorite-outline.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-favorite.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-film.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-folder-open.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-folder.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-funnel.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-globe.svg +24 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-hand.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-hangout.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-happy.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-home.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-image.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-laptop.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-list.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-locate.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-lock.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-mail.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-map.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-menu.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-microphone-off.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-microphone.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-more-horizontal.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-more-vertical.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-navigate.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-notifications-none.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-notifications-off.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-notifications.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-open.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-options.svg +26 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-people.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-person-add.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-person.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-phone-landscape.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-phone-portrait.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-pin.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-plane.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-playstore.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-print.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-radio-button-off.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-radio-button-on.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-refresh.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-remove-circle.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-remove.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-restaurant.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-sad.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-search.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-send.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-settings.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-share-alt.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-share.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-star-half.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-star-outline.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-star.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-stopwatch.svg +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-subway.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-sunny.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-sync.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-textsms.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-time.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-train.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-unlock.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-upload.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-volume-down.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-volume-mute.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-volume-off.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-volume-up.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-walk.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-warning.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-watch.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/android-wifi.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/aperture.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/archive.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-down-a.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-down-b.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-down-c.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-expand.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-graph-down-left.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-graph-down-right.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-graph-up-left.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-graph-up-right.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-left-a.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-left-b.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-left-c.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-move.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-resize.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-return-left.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-return-right.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-right-a.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-right-b.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-right-c.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-shrink.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-swap.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-up-a.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-up-b.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/arrow-up-c.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/asterisk.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/at.svg +25 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/backspace-outline.svg +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/backspace.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/bag.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/battery-charging.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/battery-empty.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/battery-full.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/battery-half.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/battery-low.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/beaker.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/beer.svg +28 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/bluetooth.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/bonfire.svg +32 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/bookmark.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/bowtie.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/briefcase.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/bug.svg +30 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/calculator.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/calendar.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/camera.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/card.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/cash.svg +31 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/chatbox-working.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/chatbox.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/chatboxes.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/chatbubble-working.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/chatbubble.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/chatbubbles.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/checkmark-circled.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/checkmark-round.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/checkmark.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/chevron-down.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/chevron-left.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/chevron-right.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/chevron-up.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/clipboard.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/clock.svg +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/close-circled.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/close-round.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/close.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/closed-captioning.svg +31 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/cloud.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/code-download.svg +31 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/code-working.svg +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/code.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/coffee.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/compass.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/compose.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/connection-bars.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/contrast.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/crop.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/cube.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/disc.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/document-text.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/document.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/drag.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/earth.svg +44 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/easel.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/edit.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/egg.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/eject.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/email-unread.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/email.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/erlenmeyer-flask-bubbles.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/erlenmeyer-flask.svg +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/eye-disabled.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/eye.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/female.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/filing.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/film-marker.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/fireball.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/flag.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/flame.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/flash-off.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/flash.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/folder.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/fork-repo.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/fork.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/forward.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/funnel.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/gear-a.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/gear-b.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/grid.svg +32 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/hammer.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/happy-outline.svg +23 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/happy.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/headphone.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/heart-broken.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/heart.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/help-buoy.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/help-circled.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/help.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/home.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/icecream.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/image.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/images.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/information-circled.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/information.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ionic.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-alarm-outline.svg +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-alarm.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-albums-outline.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-albums.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-americanfootball-outline.svg +24 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-americanfootball.svg +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-analytics-outline.svg +24 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-analytics.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-arrow-back.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-arrow-down.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-arrow-forward.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-arrow-left.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-arrow-right.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-arrow-thin-down.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-arrow-thin-left.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-arrow-thin-right.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-arrow-thin-up.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-arrow-up.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-at-outline.svg +26 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-at.svg +24 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-barcode-outline.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-barcode.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-baseball-outline.svg +35 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-baseball.svg +27 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-basketball-outline.svg +25 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-basketball.svg +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-bell-outline.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-bell.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-body-outline.svg +27 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-body.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-bolt-outline.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-bolt.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-book-outline.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-book.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-bookmarks-outline.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-bookmarks.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-box-outline.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-box.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-briefcase-outline.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-briefcase.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-browsers-outline.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-browsers.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-calculator-outline.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-calculator.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-calendar-outline.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-calendar.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-camera-outline.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-camera.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-cart-outline.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-cart.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-chatboxes-outline.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-chatboxes.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-chatbubble-outline.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-chatbubble.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-checkmark-empty.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-checkmark-outline.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-checkmark.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-circle-filled.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-circle-outline.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-clock-outline.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-clock.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-close-empty.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-close-outline.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-close.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-cloud-download-outline.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-cloud-download.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-cloud-outline.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-cloud-upload-outline.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-cloud-upload.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-cloud.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-cloudy-night-outline.svg +24 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-cloudy-night.svg +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-cloudy-outline.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-cloudy.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-cog-outline.svg +29 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-cog.svg +23 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-color-filter-outline.svg +25 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-color-filter.svg +29 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-color-wand-outline.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-color-wand.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-compose-outline.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-compose.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-contact-outline.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-contact.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-copy-outline.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-copy.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-crop-strong.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-crop.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-download-outline.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-download.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-drag.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-email-outline.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-email.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-eye-outline.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-eye.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-fastforward-outline.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-fastforward.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-filing-outline.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-filing.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-film-outline.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-film.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-flag-outline.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-flag.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-flame-outline.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-flame.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-flask-outline.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-flask.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-flower-outline.svg +75 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-flower.svg +38 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-folder-outline.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-folder.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-football-outline.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-football.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-game-controller-a-outline.svg +26 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-game-controller-a.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-game-controller-b-outline.svg +35 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-game-controller-b.svg +23 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-gear-outline.svg +40 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-gear.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-glasses-outline.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-glasses.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-grid-view-outline.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-grid-view.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-heart-outline.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-heart.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-help-empty.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-help-outline.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-help.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-home-outline.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-home.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-infinite-outline.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-infinite.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-information-empty.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-information-outline.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-information.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-ionic-outline.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-keypad-outline.svg +28 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-keypad.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-lightbulb-outline.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-lightbulb.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-list-outline.svg +23 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-list.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-location-outline.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-location.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-locked-outline.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-locked.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-loop-strong.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-loop.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-medical-outline.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-medical.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-medkit-outline.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-medkit.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-mic-off.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-mic-outline.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-mic.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-minus-empty.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-minus-outline.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-minus.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-monitor-outline.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-monitor.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-moon-outline.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-moon.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-more-outline.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-more.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-musical-note.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-musical-notes.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-navigate-outline.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-navigate.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-nutrition-outline.svg +29 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-nutrition.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-paper-outline.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-paper.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-paperplane-outline.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-paperplane.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-partlysunny-outline.svg +33 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-partlysunny.svg +28 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-pause-outline.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-pause.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-paw-outline.svg +43 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-paw.svg +26 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-people-outline.svg +44 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-people.svg +29 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-person-outline.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-person.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-personadd-outline.svg +25 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-personadd.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-photos-outline.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-photos.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-pie-outline.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-pie.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-pint-outline.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-pint.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-play-outline.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-play.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-plus-empty.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-plus-outline.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-plus.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-pricetag-outline.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-pricetag.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-pricetags-outline.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-pricetags.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-printer-outline.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-printer.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-pulse-strong.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-pulse.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-rainy-outline.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-rainy.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-recording-outline.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-recording.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-redo-outline.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-redo.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-refresh-empty.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-refresh-outline.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-refresh.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-reload.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-reverse-camera-outline.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-reverse-camera.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-rewind-outline.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-rewind.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-rose-outline.svg +29 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-rose.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-search-strong.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-search.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-settings-strong.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-settings.svg +24 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-shuffle-strong.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-shuffle.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-skipbackward-outline.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-skipbackward.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-skipforward-outline.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-skipforward.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-snowy.svg +26 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-speedometer-outline.svg +24 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-speedometer.svg +28 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-star-half.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-star-outline.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-star.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-stopwatch-outline.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-stopwatch.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-sunny-outline.svg +27 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-sunny.svg +26 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-telephone-outline.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-telephone.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-tennisball-outline.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-tennisball.svg +25 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-thunderstorm-outline.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-thunderstorm.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-time-outline.svg +36 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-time.svg +27 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-timer-outline.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-timer.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-toggle-outline.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-toggle.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-trash-outline.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-trash.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-undo-outline.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-undo.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-unlocked-outline.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-unlocked.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-upload-outline.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-upload.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-videocam-outline.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-videocam.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-volume-high.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-volume-low.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-wineglass-outline.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-wineglass.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-world-outline.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ios-world.svg +29 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ipad.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/iphone.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ipod.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/jet.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/key.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/knife.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/laptop.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/leaf.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/levels.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/lightbulb.svg +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/link.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/load-a.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/load-b.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/load-c.svg +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/load-d.svg +28 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/location.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/lock-combination.svg +28 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/locked.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/log-in.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/log-out.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/loop.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/magnet.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/male.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/man.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/map.svg +30 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/medkit.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/merge.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/mic-a.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/mic-b.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/mic-c.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/minus-circled.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/minus-round.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/minus.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/model-s.svg +33 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/monitor.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/more.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/mouse.svg +24 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/music-note.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/navicon-round.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/navicon.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/navigate.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/network.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/no-smoking.svg +33 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/nuclear.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/outlet.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/paintbrush.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/paintbucket.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/paper-airplane.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/paperclip.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/pause.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/person-add.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/person-stalker.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/person.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/pie-graph.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/pin.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/pinpoint.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/pizza.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/plane.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/planet.svg +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/play.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/playstation.svg +27 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/plus-circled.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/plus-round.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/plus.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/podium.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/pound.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/power.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/pricetag.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/pricetags.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/printer.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/pull-request.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/qr-scanner.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/quote.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/radio-waves.svg +25 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/record.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/refresh.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/reply-all.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/reply.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ribbon-a.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/ribbon-b.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/sad-outline.svg +28 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/sad.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/scissors.svg +23 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/search.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/settings.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/share.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/shuffle.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/skip-backward.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/skip-forward.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-android-outline.svg +29 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-android.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-angular-outline.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-angular.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-apple-outline.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-apple.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-bitcoin-outline.svg +27 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-bitcoin.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-buffer-outline.svg +24 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-buffer.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-chrome-outline.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-chrome.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-codepen-outline.svg +26 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-codepen.svg +26 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-css3-outline.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-css3.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-designernews-outline.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-designernews.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-dribbble-outline.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-dribbble.svg +26 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-dropbox-outline.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-dropbox.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-euro-outline.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-euro.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-facebook-outline.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-facebook.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-foursquare-outline.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-foursquare.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-freebsd-devil.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-github-outline.svg +24 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-github.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-google-outline.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-google.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-googleplus-outline.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-googleplus.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-hackernews-outline.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-hackernews.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-html5-outline.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-html5.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-instagram-outline.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-instagram.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-javascript-outline.svg +27 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-javascript.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-linkedin-outline.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-linkedin.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-markdown.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-nodejs.svg +26 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-octocat.svg +28 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-pinterest-outline.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-pinterest.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-python.svg +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-reddit-outline.svg +26 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-reddit.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-rss-outline.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-rss.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-sass.svg +35 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-skype-outline.svg +26 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-skype.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-snapchat-outline.svg +42 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-snapchat.svg +31 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-tumblr-outline.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-tumblr.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-tux.svg +53 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-twitch-outline.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-twitch.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-twitter-outline.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-twitter.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-usd-outline.svg +44 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-usd.svg +24 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-vimeo-outline.svg +23 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-vimeo.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-whatsapp-outline.svg +25 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-whatsapp.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-windows-outline.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-windows.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-wordpress-outline.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-wordpress.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-yahoo-outline.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-yahoo.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-yen-outline.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-yen.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-youtube-outline.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/social-youtube.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/soup-can-outline.svg +28 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/soup-can.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/speakerphone.svg +19 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/speedometer.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/spoon.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/star.svg +7 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/stats-bars.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/steam.svg +20 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/stop.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/thermometer.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/thumbsdown.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/thumbsup.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/toggle-filled.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/toggle.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/transgender.svg +12 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/trash-a.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/trash-b.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/trophy.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/tshirt-outline.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/tshirt.svg +8 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/umbrella.svg +18 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/university.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/unlocked.svg +10 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/upload.svg +9 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/usb.svg +22 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/videocamera.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/volume-high.svg +15 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/volume-low.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/volume-medium.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/volume-mute.svg +14 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/wand.svg +17 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/waterdrop.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/wifi.svg +16 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/wineglass.svg +21 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/woman.svg +13 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/wrench.svg +11 -0
 - data/vendor/assets/bower_components/trestle/ionicons/src/xbox.svg +21 -0
 - data/vendor/assets/bower_components/trestle/jquery-ujs/.bower.json +32 -0
 - data/vendor/assets/bower_components/trestle/jquery-ujs/CONTRIBUTING.md +109 -0
 - data/vendor/assets/bower_components/trestle/jquery-ujs/MIT-LICENSE +20 -0
 - data/vendor/assets/bower_components/trestle/jquery-ujs/README.md +86 -0
 - data/vendor/assets/bower_components/trestle/jquery-ujs/RELEASE.md +23 -0
 - data/vendor/assets/bower_components/trestle/jquery-ujs/bower.json +19 -0
 - data/vendor/assets/bower_components/trestle/jquery-ujs/package.json +26 -0
 - data/vendor/assets/bower_components/trestle/jquery-ujs/src/rails.js +555 -0
 - data/vendor/assets/bower_components/trestle/jquery/.bower.json +25 -0
 - data/vendor/assets/bower_components/trestle/jquery/AUTHORS.txt +301 -0
 - data/vendor/assets/bower_components/trestle/jquery/LICENSE.txt +36 -0
 - data/vendor/assets/bower_components/trestle/jquery/README.md +67 -0
 - data/vendor/assets/bower_components/trestle/jquery/bower.json +14 -0
 - data/vendor/assets/bower_components/trestle/jquery/dist/core.js +476 -0
 - data/vendor/assets/bower_components/trestle/jquery/dist/jquery.js +10253 -0
 - data/vendor/assets/bower_components/trestle/jquery/dist/jquery.min.js +4 -0
 - data/vendor/assets/bower_components/trestle/jquery/dist/jquery.min.map +1 -0
 - data/vendor/assets/bower_components/trestle/jquery/dist/jquery.slim.js +8160 -0
 - data/vendor/assets/bower_components/trestle/jquery/dist/jquery.slim.min.js +4 -0
 - data/vendor/assets/bower_components/trestle/jquery/dist/jquery.slim.min.map +1 -0
 - data/vendor/assets/bower_components/trestle/jquery/external/sizzle/LICENSE.txt +36 -0
 - data/vendor/assets/bower_components/trestle/jquery/external/sizzle/dist/sizzle.js +2272 -0
 - data/vendor/assets/bower_components/trestle/jquery/external/sizzle/dist/sizzle.min.js +3 -0
 - data/vendor/assets/bower_components/trestle/jquery/external/sizzle/dist/sizzle.min.map +1 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/.eslintrc.json +5 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/ajax.js +855 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/ajax/jsonp.js +102 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/ajax/load.js +76 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/ajax/parseXML.js +30 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/ajax/script.js +77 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/ajax/var/location.js +5 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/ajax/var/nonce.js +7 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/ajax/var/rquery.js +5 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/ajax/xhr.js +169 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/attributes.js +13 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/attributes/attr.js +141 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/attributes/classes.js +174 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/attributes/prop.js +143 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/attributes/support.js +33 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/attributes/val.js +190 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/callbacks.js +234 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/core.js +476 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/core/DOMEval.js +16 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/core/access.js +70 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/core/init.js +128 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/core/nodeName.js +13 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/core/parseHTML.js +65 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/core/ready-no-deferred.js +96 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/core/ready.js +86 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/core/readyException.js +13 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/core/stripAndCollapse.js +14 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/core/support.js +20 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/core/var/rsingleTag.js +6 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/css.js +438 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/css/addGetHookIf.js +26 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/css/adjustCSS.js +71 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/css/curCSS.js +65 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/css/hiddenVisibleSelectors.js +15 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/css/showHide.js +105 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/css/support.js +89 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/css/var/cssExpand.js +5 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/css/var/getStyles.js +17 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/css/var/isHiddenWithinTree.js +34 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/css/var/rmargin.js +5 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/css/var/rnumnonpx.js +7 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/css/var/swap.js +26 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/data.js +179 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/data/Data.js +161 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/data/var/acceptData.js +19 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/data/var/dataPriv.js +7 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/data/var/dataUser.js +7 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/deferred.js +391 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/deferred/exceptionHook.js +21 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/deprecated.js +40 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/dimensions.js +56 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/effects.js +699 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/effects/Tween.js +123 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/effects/animatedSelector.js +15 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/event.js +746 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/event/ajax.js +22 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/event/alias.js +29 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/event/focusin.js +55 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/event/support.js +11 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/event/trigger.js +185 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/exports/amd.js +26 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/exports/global.js +34 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/jquery.js +41 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/manipulation.js +488 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/manipulation/_evalUrl.js +23 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/manipulation/buildFragment.js +104 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/manipulation/getAll.js +32 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/manipulation/setGlobalEval.js +22 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/manipulation/support.js +35 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/manipulation/var/rcheckableType.js +5 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/manipulation/var/rscriptType.js +5 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/manipulation/var/rtagName.js +5 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/manipulation/wrapMap.js +29 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/offset.js +229 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/queue.js +145 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/queue/delay.js +24 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/selector-native.js +237 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/selector-sizzle.js +19 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/selector.js +3 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/serialize.js +130 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/traversing.js +191 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/traversing/findFilter.js +106 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/traversing/var/dir.js +22 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/traversing/var/rneedsContext.js +8 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/traversing/var/siblings.js +17 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/ObjectFunctionString.js +7 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/arr.js +5 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/class2type.js +6 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/concat.js +7 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/document.js +5 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/documentElement.js +7 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/fnToString.js +7 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/getProto.js +5 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/hasOwn.js +7 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/indexOf.js +7 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/pnum.js +5 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/push.js +7 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/rcssNum.js +9 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/rnothtmlwhite.js +8 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/slice.js +7 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/support.js +6 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/var/toString.js +7 -0
 - data/vendor/assets/bower_components/trestle/jquery/src/wrap.js +77 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/.bower.json +27 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/.gitignore +24 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/.jshintrc +21 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/.travis.yml +7 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/Gruntfile.js +213 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/LICENSE +20 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/README.md +76 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/bower.json +16 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/composer.json +5 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/dist/jquery.magnific-popup.js +1860 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/dist/jquery.magnific-popup.min.js +4 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/dist/magnific-popup.css +351 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/magnific-popup.jquery.json +29 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/package.json +55 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/src/css/_settings.scss +44 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/src/css/main.scss +543 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/src/js/ajax.js +77 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/src/js/core.js +939 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/src/js/gallery.js +164 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/src/js/iframe.js +102 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/src/js/image.js +244 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/src/js/inline.js +66 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/src/js/retina.js +35 -0
 - data/vendor/assets/bower_components/trestle/magnific-popup/src/js/zoom.js +183 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/.bower.json +40 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/Gruntfile.js +224 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/LICENSE +21 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/README.md +154 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/bower.json +30 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/dist/select2-bootstrap.css +721 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/dist/select2-bootstrap.min.css +7 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/4.0.0.html +4 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/4.0.1.html +4 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/4.0.2.html +4 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/4.0.3.html +4 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_config.yml +8 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_includes/footer-links.html +7 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_includes/footer.html +10 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_includes/head.html +14 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_includes/navbar.html +31 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_includes/scripts.html +2 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_includes/select2-select.html +58 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_layouts/default.html +641 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_layouts/minimal.html +7 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_sass/_alert.sass +17 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_sass/_anchorjs.sass +6 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_sass/_buttons.sass +8 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_sass/_common.sass +25 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_sass/_extends.sass +4 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_sass/_footer.sass +27 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_sass/_home.sass +8 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_sass/_jumbotron.sass +36 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_sass/_mixins.sass +9 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_sass/_navbar.sass +4 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_sass/_select2-result-repository.sass +40 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/_sass/_variables.sass +1 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/css/bootstrap.min.css +6 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/css/gh-pages.sass +16 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/css/select2-bootstrap.css +721 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/favicon.ico +0 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/fonts/glyphicons-halflings-regular.eot +0 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/fonts/glyphicons-halflings-regular.svg +288 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/fonts/glyphicons-halflings-regular.ttf +0 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/fonts/glyphicons-halflings-regular.woff +0 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/fonts/glyphicons-halflings-regular.woff2 +0 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/images/logo.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/index.html +55 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/js/anchor.min.js +6 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/js/bootstrap.min.js +7 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/docs/js/respond.min.js +5 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/package.json +55 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/src/build.less +3 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/src/build.scss +3 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/src/select2-bootstrap.less +826 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/src/select2-bootstrap.scss +826 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/tests/less_test.js +25 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/tests/scss_test.js +25 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/tests/support/less.patch +669 -0
 - data/vendor/assets/bower_components/trestle/select2-bootstrap-theme/tests/support/scss.patch +4 -0
 - data/vendor/assets/bower_components/trestle/select2/.bower.json +23 -0
 - data/vendor/assets/bower_components/trestle/select2/.editorconfig +6 -0
 - data/vendor/assets/bower_components/trestle/select2/.gitignore +3 -0
 - data/vendor/assets/bower_components/trestle/select2/.jshintignore +4 -0
 - data/vendor/assets/bower_components/trestle/select2/.jshintrc +25 -0
 - data/vendor/assets/bower_components/trestle/select2/.travis.yml +22 -0
 - data/vendor/assets/bower_components/trestle/select2/CONTRIBUTING.md +204 -0
 - data/vendor/assets/bower_components/trestle/select2/Gruntfile.js +370 -0
 - data/vendor/assets/bower_components/trestle/select2/ISSUE_TEMPLATE.md +46 -0
 - data/vendor/assets/bower_components/trestle/select2/LICENSE.md +21 -0
 - data/vendor/assets/bower_components/trestle/select2/PULL_REQUEST_TEMPLATE.md +13 -0
 - data/vendor/assets/bower_components/trestle/select2/README.md +121 -0
 - data/vendor/assets/bower_components/trestle/select2/bower.json +12 -0
 - data/vendor/assets/bower_components/trestle/select2/component.json +19 -0
 - data/vendor/assets/bower_components/trestle/select2/composer.json +25 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/css/select2.css +484 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/css/select2.min.css +1 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/ar.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/az.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/bg.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/ca.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/cs.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/da.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/de.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/el.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/en.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/es.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/et.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/eu.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/fa.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/fi.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/fr.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/gl.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/he.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/hi.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/hr.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/hu.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/id.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/is.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/it.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/ja.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/km.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/ko.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/lt.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/lv.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/mk.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/ms.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/nb.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/nl.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/pl.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/pt-BR.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/pt.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/ro.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/ru.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/sk.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/sr-Cyrl.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/sr.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/sv.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/th.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/tr.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/uk.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/vi.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/zh-CN.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/i18n/zh-TW.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/select2.full.js +6436 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/select2.full.min.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/select2.js +5725 -0
 - data/vendor/assets/bower_components/trestle/select2/dist/js/select2.min.js +3 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/.gitignore +2 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/README.md +38 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/examples/basics.html +97 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/examples/data.html +123 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/examples/disabled-mode.html +43 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/examples/disabled-results.html +29 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/examples/hide-search.html +22 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/examples/localization-rtl-diacritics.html +82 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/examples/matcher.html +39 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/examples/multiple-max.html +24 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/examples/placeholders.html +36 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/examples/programmatic-control.html +155 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/examples/tags.html +29 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/examples/themes-templating-responsive-design.html +104 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/examples/tokenizer.html +32 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/footer.html +20 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/ga.html +9 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/head.html +31 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/js-source-states.html +62 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/nav/announcements-4.0.html +26 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/nav/examples.html +96 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/nav/options-old.html +55 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/nav/options.html +77 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/navigation.html +53 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/notice-previous.html +7 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options-old/adapters.html +209 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options-old/backwards-compatibility.html +200 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options-old/core-options.html +790 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options-old/dropdown.html +308 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options-old/events.html +50 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options-old/setting-default-options.html +37 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/compatibility.html +10 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/compatibility/initial-selection.html +50 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/compatibility/introduction.html +18 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/compatibility/matcher.html +50 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/compatibility/query-function.html +50 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/compatibility/text-input.html +32 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/core.html +9 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/core/amd-support.html +46 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/core/data-attributes.html +76 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/core/options.html +80 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/data.html +9 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/data/ajax.html +147 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/data/array.html +150 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/data/select.html +69 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/dropdown.html +10 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/dropdown/filtering.html +55 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/dropdown/placement.html +39 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/dropdown/selections.html +29 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/dropdown/tagging.html +89 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/events.html +8 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/events/internal.html +9 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/events/jquery.html +101 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/introduction.html +9 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/not-written.html +3 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/selections.html +10 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/selections/clearing-selections.html +34 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/selections/multiple.html +17 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/selections/placeholder.html +84 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/options/selections/templating.html +37 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_includes/social-buttons.html +10 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_layouts/default.html +57 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_layouts/home.html +23 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_alert.scss +47 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_anchorjs.scss +27 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_buttons.scss +20 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_code.scss +16 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_dl-panels.scss +24 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_examples.scss +91 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_featurette.scss +16 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_footer.scss +42 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_hamburger.scss +49 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_home.scss +31 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_jumbotron.scss +24 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_layout.scss +14 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_nav.scss +59 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_prettify.scss +50 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_result-repository.scss +62 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_sidenav.scss +152 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_social.scss +35 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_syntax-highlighting.scss +117 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/_typography.scss +6 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_alerts.scss +73 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_badges.scss +68 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_breadcrumbs.scss +28 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_button-groups.scss +244 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_buttons.scss +168 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_carousel.scss +270 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_close.scss +36 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_code.scss +69 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_component-animations.scss +37 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_dropdowns.scss +216 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_forms.scss +617 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_glyphicons.scss +307 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_grid.scss +84 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_input-groups.scss +171 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_jumbotron.scss +54 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_labels.scss +66 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_list-group.scss +130 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_media.scss +66 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_mixins.scss +40 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_modals.scss +150 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_navbar.scss +662 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_navs.scss +242 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_normalize.scss +424 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_pager.scss +54 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_pagination.scss +89 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_panels.scss +271 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_popovers.scss +131 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_print.scss +101 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_progress-bars.scss +87 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_responsive-embed.scss +35 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_responsive-utilities.scss +179 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_scaffolding.scss +161 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_tables.scss +234 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_theme.scss +291 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_thumbnails.scss +38 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_tooltip.scss +101 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_type.scss +298 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_utilities.scss +55 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_variables.scss +874 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/_wells.scss +29 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_alerts.scss +14 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_background-variant.scss +12 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_border-radius.scss +18 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_buttons.scss +65 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_center-block.scss +7 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_clearfix.scss +22 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_forms.scss +88 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_gradients.scss +58 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_grid-framework.scss +81 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_grid.scss +122 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_hide-text.scss +21 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_image.scss +33 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_labels.scss +12 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_list-group.scss +32 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_nav-divider.scss +10 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_nav-vertical-align.scss +9 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_opacity.scss +8 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_pagination.scss +24 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_panels.scss +24 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_progress-bar.scss +10 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_reset-filter.scss +8 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_reset-text.scss +18 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_resize.scss +6 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_responsive-visibility.scss +21 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_size.scss +10 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_tab-focus.scss +9 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_table-row.scss +28 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_text-emphasis.scss +12 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_text-overflow.scss +8 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/bootstrap/mixins/_vendor-prefixes.scss +222 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/font-awesome/_animated.scss +34 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/font-awesome/_bordered-pulled.scss +25 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/font-awesome/_core.scss +12 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/font-awesome/_fixed-width.scss +6 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/font-awesome/_icons.scss +697 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/font-awesome/_larger.scss +13 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/font-awesome/_list.scss +19 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/font-awesome/_mixins.scss +26 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/font-awesome/_path.scss +15 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/font-awesome/_rotated-flipped.scss +20 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/font-awesome/_stacked.scss +20 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/_sass/vendor/font-awesome/_variables.scss +708 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/announcements-4.0.html +752 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/browserconfig.xml +11 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/community.html +154 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/css/bootstrap.scss +51 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/css/font-awesome.scss +16 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/css/s2-docs.scss +24 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/examples.html +256 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/android-chrome-36x36.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/android-chrome-48x48.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/android-chrome-72x72.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/apple-touch-icon-57x57.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/apple-touch-icon-60x60.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/apple-touch-icon-72x72.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/apple-touch-icon-precomposed.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/apple-touch-icon.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/favicon-16x16.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/favicon-32x32.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/favicon.ico +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/logo.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/manifest.json +23 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/mstile-150x150.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/mstile-310x150.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/mstile-70x70.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/images/safari-pinned-tab.svg +17 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/index.html +237 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/options-old.html +37 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/options.html +37 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/fonts/FontAwesome.otf +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/fonts/fontawesome-webfont.eot +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/fonts/fontawesome-webfont.svg +655 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/fonts/fontawesome-webfont.ttf +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/fonts/fontawesome-webfont.woff +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/fonts/fontawesome-webfont.woff2 +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ak.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/al.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ar.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/az.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ca.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/co.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ct.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/de.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/fl.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ga.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/hi.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ia.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/id.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/il.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/in.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ks.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ky.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/la.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ma.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/md.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/me.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/mi.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/mn.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/mo.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ms.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/mt.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/nc.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/nd.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ne.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/nh.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/nj.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/nm.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/nv.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ny.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/oh.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ok.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/or.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/pa.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ri.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/sc.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/sd.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/tn.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/tx.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/ut.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/va.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/vt.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/wa.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/wi.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/wv.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/images/flags/wy.png +0 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/js/anchor.min.js +6 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/js/bootstrap.min.js +6 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/js/jquery.min.js +4 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/js/placeholders.jquery.min.js +2 -0
 - data/vendor/assets/bower_components/trestle/select2/docs/vendor/js/prettify.min.js +28 -0
 - data/vendor/assets/bower_components/trestle/select2/package.json +66 -0
 - data/vendor/assets/bower_components/trestle/select2/select2.jquery.json +32 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/banner.end.js +6 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/banner.start.js +6 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/jquery.mousewheel.shim.js +6 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/jquery.select2.js +57 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/jquery.shim.js +14 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/compat/containerCss.js +56 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/compat/dropdownCss.js +56 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/compat/initSelection.js +42 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/compat/inputData.js +127 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/compat/matcher.js +42 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/compat/query.js +26 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/compat/utils.js +43 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/core.js +612 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/data/ajax.js +109 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/data/array.js +79 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/data/base.js +40 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/data/maximumInputLength.js +31 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/data/maximumSelectionLength.js +31 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/data/minimumInputLength.js +30 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/data/select.js +285 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/data/tags.js +125 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/data/tokenizer.js +116 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/defaults.js +396 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/diacritics.js +847 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/dropdown.js +42 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/dropdown/attachBody.js +222 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/dropdown/attachContainer.js +18 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/dropdown/closeOnSelect.js +35 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/dropdown/hidePlaceholder.js +42 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/dropdown/infiniteScroll.js +89 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/dropdown/minimumResultsForSearch.js +39 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/dropdown/search.js +101 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/dropdown/selectOnClose.js +50 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/dropdown/stopPropagation.js +38 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/ar.js +36 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/az.js +27 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/bg.js +47 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/ca.js +52 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/cs.js +61 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/da.js +40 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/de.js +37 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/el.js +52 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/en.js +44 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/es.js +52 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/et.js +53 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/eu.js +51 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/fa.js +38 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/fi.js +27 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/fr.js +49 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/gl.js +51 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/he.js +56 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/hi.js +39 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/hr.js +44 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/hu.js +27 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/id.js +30 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/is.js +41 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/it.js +48 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/ja.js +36 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/km.js +36 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/ko.js +36 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/lt.js +52 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/lv.js +51 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/mk.js +47 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/ms.js +30 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/nb.js +38 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/nl.js +43 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/pl.js +45 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/pt-BR.js +46 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/pt.js +40 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/ro.js +46 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/ru.js +58 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/sk.js +56 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/sr-Cyrl.js +55 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/sr.js +55 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/sv.js +37 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/th.js +33 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/tr.js +33 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/uk.js +43 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/vi.js +37 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/zh-CN.js +36 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/i18n/zh-TW.js +33 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/keys.js +25 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/options.js +122 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/results.js +523 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/selection/allowClear.js +97 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/selection/base.js +158 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/selection/clickMask.js +29 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/selection/eventRelay.js +45 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/selection/multiple.js +109 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/selection/placeholder.js +49 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/selection/search.js +222 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/selection/single.js +99 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/selection/stopPropagation.js +38 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/translation.js +36 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/select2/utils.js +276 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/wrapper.end.js +12 -0
 - data/vendor/assets/bower_components/trestle/select2/src/js/wrapper.start.js +23 -0
 - data/vendor/assets/bower_components/trestle/select2/src/scss/_dropdown.scss +73 -0
 - data/vendor/assets/bower_components/trestle/select2/src/scss/_multiple.scss +35 -0
 - data/vendor/assets/bower_components/trestle/select2/src/scss/_single.scss +34 -0
 - data/vendor/assets/bower_components/trestle/select2/src/scss/core.scss +48 -0
 - data/vendor/assets/bower_components/trestle/select2/src/scss/mixins/_gradients.scss +13 -0
 - data/vendor/assets/bower_components/trestle/select2/src/scss/theme/classic/_defaults.scss +34 -0
 - data/vendor/assets/bower_components/trestle/select2/src/scss/theme/classic/_multiple.scss +93 -0
 - data/vendor/assets/bower_components/trestle/select2/src/scss/theme/classic/_single.scss +124 -0
 - data/vendor/assets/bower_components/trestle/select2/src/scss/theme/classic/layout.scss +64 -0
 - data/vendor/assets/bower_components/trestle/select2/src/scss/theme/default/_multiple.scss +98 -0
 - data/vendor/assets/bower_components/trestle/select2/src/scss/theme/default/_single.scss +83 -0
 - data/vendor/assets/bower_components/trestle/select2/src/scss/theme/default/layout.scss +97 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/a11y/search-tests.js +51 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/a11y/selection-tests.js +154 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/data/array-tests.js +318 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/data/base-tests.js +29 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/data/inputData-tests.js +158 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/data/maximumInputLength-tests.js +138 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/data/maximumSelectionLength-tests.js +202 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/data/minimumInputLength-tests.js +138 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/data/select-tests.js +457 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/data/tags-tests.js +261 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/data/tokenizer-tests.js +219 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/dropdown/dropdownCss-tests.js +104 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/dropdown/positioning-tests.js +177 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/dropdown/selectOnClose-tests.js +137 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/dropdown/stopPropagation-tests.js +33 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/helpers.js +46 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/integration.html +21 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/integration/dom-changes.js +257 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/integration/jquery-calls.js +30 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/integration/select2-methods.js +139 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/options/ajax-tests.js +32 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/options/data-tests.js +44 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/options/deprecated-tests.js +250 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/options/translation-tests.js +28 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/options/width-tests.js +66 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/results/focusing-tests.js +138 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/selection/allowClear-tests.js +218 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/selection/containerCss-tests.js +104 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/selection/multiple-tests.js +149 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/selection/placeholder-tests.js +74 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/selection/search-tests.js +191 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/selection/single-tests.js +117 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/selection/stopPropagation-tests.js +33 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/unit.html +95 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/utils/decorator-tests.js +189 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/utils/escapeMarkup-tests.js +36 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/vendor/jquery-1.7.2.js +9404 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/vendor/qunit-1.23.1.css +305 -0
 - data/vendor/assets/bower_components/trestle/select2/tests/vendor/qunit-1.23.1.js +4334 -0
 - data/vendor/assets/bower_components/trestle/select2/vendor/jquery-2.1.0.js +9111 -0
 - data/vendor/assets/javascripts/trestle/bootstrap-confirmation.js +1 -0
 - data/vendor/assets/javascripts/trestle/bootstrap.js +1 -0
 - data/vendor/assets/javascripts/trestle/flatpickr.js.erb +5 -0
 - data/vendor/assets/javascripts/trestle/jquery.js +1 -0
 - data/vendor/assets/javascripts/trestle/jquery_ujs.js +1 -0
 - data/vendor/assets/javascripts/trestle/magnific-popup.js +1 -0
 - data/vendor/assets/javascripts/trestle/select2.js +1 -0
 - data/vendor/assets/stylesheets/trestle/bootstrap.scss +4 -0
 - data/vendor/assets/stylesheets/trestle/flatpickr.scss +1 -0
 - data/vendor/assets/stylesheets/trestle/font-awesome.scss +26 -0
 - data/vendor/assets/stylesheets/trestle/ionicons.scss +32 -0
 - data/vendor/assets/stylesheets/trestle/magnific-popup.scss +1 -0
 - data/vendor/assets/stylesheets/trestle/select2.scss +2 -0
 - metadata +2794 -0
 
| 
         @@ -0,0 +1,305 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /*!
         
     | 
| 
      
 2 
     | 
    
         
            +
             * QUnit 1.23.1
         
     | 
| 
      
 3 
     | 
    
         
            +
             * https://qunitjs.com/
         
     | 
| 
      
 4 
     | 
    
         
            +
             *
         
     | 
| 
      
 5 
     | 
    
         
            +
             * Copyright jQuery Foundation and other contributors
         
     | 
| 
      
 6 
     | 
    
         
            +
             * Released under the MIT license
         
     | 
| 
      
 7 
     | 
    
         
            +
             * https://jquery.org/license
         
     | 
| 
      
 8 
     | 
    
         
            +
             *
         
     | 
| 
      
 9 
     | 
    
         
            +
             * Date: 2016-04-12T17:29Z
         
     | 
| 
      
 10 
     | 
    
         
            +
             */
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            /** Font Family and Sizes */
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            #qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult {
         
     | 
| 
      
 15 
     | 
    
         
            +
            	font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
         
     | 
| 
      
 16 
     | 
    
         
            +
            }
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            #qunit-testrunner-toolbar, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
         
     | 
| 
      
 19 
     | 
    
         
            +
            #qunit-tests { font-size: smaller; }
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            /** Resets */
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            #qunit-tests, #qunit-header, #qunit-banner, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
         
     | 
| 
      
 25 
     | 
    
         
            +
            	margin: 0;
         
     | 
| 
      
 26 
     | 
    
         
            +
            	padding: 0;
         
     | 
| 
      
 27 
     | 
    
         
            +
            }
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            /** Header */
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            #qunit-header {
         
     | 
| 
      
 33 
     | 
    
         
            +
            	padding: 0.5em 0 0.5em 1em;
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            	color: #8699A4;
         
     | 
| 
      
 36 
     | 
    
         
            +
            	background-color: #0D3349;
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            	font-size: 1.5em;
         
     | 
| 
      
 39 
     | 
    
         
            +
            	line-height: 1em;
         
     | 
| 
      
 40 
     | 
    
         
            +
            	font-weight: 400;
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            	border-radius: 5px 5px 0 0;
         
     | 
| 
      
 43 
     | 
    
         
            +
            }
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            #qunit-header a {
         
     | 
| 
      
 46 
     | 
    
         
            +
            	text-decoration: none;
         
     | 
| 
      
 47 
     | 
    
         
            +
            	color: #C2CCD1;
         
     | 
| 
      
 48 
     | 
    
         
            +
            }
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            #qunit-header a:hover,
         
     | 
| 
      
 51 
     | 
    
         
            +
            #qunit-header a:focus {
         
     | 
| 
      
 52 
     | 
    
         
            +
            	color: #FFF;
         
     | 
| 
      
 53 
     | 
    
         
            +
            }
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            #qunit-testrunner-toolbar label {
         
     | 
| 
      
 56 
     | 
    
         
            +
            	display: inline-block;
         
     | 
| 
      
 57 
     | 
    
         
            +
            	padding: 0 0.5em 0 0.1em;
         
     | 
| 
      
 58 
     | 
    
         
            +
            }
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
            #qunit-banner {
         
     | 
| 
      
 61 
     | 
    
         
            +
            	height: 5px;
         
     | 
| 
      
 62 
     | 
    
         
            +
            }
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
            #qunit-testrunner-toolbar {
         
     | 
| 
      
 65 
     | 
    
         
            +
            	padding: 0.5em 1em 0.5em 1em;
         
     | 
| 
      
 66 
     | 
    
         
            +
            	color: #5E740B;
         
     | 
| 
      
 67 
     | 
    
         
            +
            	background-color: #EEE;
         
     | 
| 
      
 68 
     | 
    
         
            +
            	overflow: hidden;
         
     | 
| 
      
 69 
     | 
    
         
            +
            }
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            #qunit-filteredTest {
         
     | 
| 
      
 72 
     | 
    
         
            +
            	padding: 0.5em 1em 0.5em 1em;
         
     | 
| 
      
 73 
     | 
    
         
            +
            	background-color: #F4FF77;
         
     | 
| 
      
 74 
     | 
    
         
            +
            	color: #366097;
         
     | 
| 
      
 75 
     | 
    
         
            +
            }
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            #qunit-userAgent {
         
     | 
| 
      
 78 
     | 
    
         
            +
            	padding: 0.5em 1em 0.5em 1em;
         
     | 
| 
      
 79 
     | 
    
         
            +
            	background-color: #2B81AF;
         
     | 
| 
      
 80 
     | 
    
         
            +
            	color: #FFF;
         
     | 
| 
      
 81 
     | 
    
         
            +
            	text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
         
     | 
| 
      
 82 
     | 
    
         
            +
            }
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            #qunit-modulefilter-container {
         
     | 
| 
      
 85 
     | 
    
         
            +
            	float: right;
         
     | 
| 
      
 86 
     | 
    
         
            +
            	padding: 0.2em;
         
     | 
| 
      
 87 
     | 
    
         
            +
            }
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            .qunit-url-config {
         
     | 
| 
      
 90 
     | 
    
         
            +
            	display: inline-block;
         
     | 
| 
      
 91 
     | 
    
         
            +
            	padding: 0.1em;
         
     | 
| 
      
 92 
     | 
    
         
            +
            }
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
            .qunit-filter {
         
     | 
| 
      
 95 
     | 
    
         
            +
            	display: block;
         
     | 
| 
      
 96 
     | 
    
         
            +
            	float: right;
         
     | 
| 
      
 97 
     | 
    
         
            +
            	margin-left: 1em;
         
     | 
| 
      
 98 
     | 
    
         
            +
            }
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
            /** Tests: Pass/Fail */
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
            #qunit-tests {
         
     | 
| 
      
 103 
     | 
    
         
            +
            	list-style-position: inside;
         
     | 
| 
      
 104 
     | 
    
         
            +
            }
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
            #qunit-tests li {
         
     | 
| 
      
 107 
     | 
    
         
            +
            	padding: 0.4em 1em 0.4em 1em;
         
     | 
| 
      
 108 
     | 
    
         
            +
            	border-bottom: 1px solid #FFF;
         
     | 
| 
      
 109 
     | 
    
         
            +
            	list-style-position: inside;
         
     | 
| 
      
 110 
     | 
    
         
            +
            }
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
            #qunit-tests > li {
         
     | 
| 
      
 113 
     | 
    
         
            +
            	display: none;
         
     | 
| 
      
 114 
     | 
    
         
            +
            }
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
            #qunit-tests li.running,
         
     | 
| 
      
 117 
     | 
    
         
            +
            #qunit-tests li.pass,
         
     | 
| 
      
 118 
     | 
    
         
            +
            #qunit-tests li.fail,
         
     | 
| 
      
 119 
     | 
    
         
            +
            #qunit-tests li.skipped {
         
     | 
| 
      
 120 
     | 
    
         
            +
            	display: list-item;
         
     | 
| 
      
 121 
     | 
    
         
            +
            }
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
            #qunit-tests.hidepass {
         
     | 
| 
      
 124 
     | 
    
         
            +
            	position: relative;
         
     | 
| 
      
 125 
     | 
    
         
            +
            }
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
            #qunit-tests.hidepass li.running,
         
     | 
| 
      
 128 
     | 
    
         
            +
            #qunit-tests.hidepass li.pass {
         
     | 
| 
      
 129 
     | 
    
         
            +
            	visibility: hidden;
         
     | 
| 
      
 130 
     | 
    
         
            +
            	position: absolute;
         
     | 
| 
      
 131 
     | 
    
         
            +
            	width:   0;
         
     | 
| 
      
 132 
     | 
    
         
            +
            	height:  0;
         
     | 
| 
      
 133 
     | 
    
         
            +
            	padding: 0;
         
     | 
| 
      
 134 
     | 
    
         
            +
            	border:  0;
         
     | 
| 
      
 135 
     | 
    
         
            +
            	margin:  0;
         
     | 
| 
      
 136 
     | 
    
         
            +
            }
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
            #qunit-tests li strong {
         
     | 
| 
      
 139 
     | 
    
         
            +
            	cursor: pointer;
         
     | 
| 
      
 140 
     | 
    
         
            +
            }
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
            #qunit-tests li.skipped strong {
         
     | 
| 
      
 143 
     | 
    
         
            +
            	cursor: default;
         
     | 
| 
      
 144 
     | 
    
         
            +
            }
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
            #qunit-tests li a {
         
     | 
| 
      
 147 
     | 
    
         
            +
            	padding: 0.5em;
         
     | 
| 
      
 148 
     | 
    
         
            +
            	color: #C2CCD1;
         
     | 
| 
      
 149 
     | 
    
         
            +
            	text-decoration: none;
         
     | 
| 
      
 150 
     | 
    
         
            +
            }
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
            #qunit-tests li p a {
         
     | 
| 
      
 153 
     | 
    
         
            +
            	padding: 0.25em;
         
     | 
| 
      
 154 
     | 
    
         
            +
            	color: #6B6464;
         
     | 
| 
      
 155 
     | 
    
         
            +
            }
         
     | 
| 
      
 156 
     | 
    
         
            +
            #qunit-tests li a:hover,
         
     | 
| 
      
 157 
     | 
    
         
            +
            #qunit-tests li a:focus {
         
     | 
| 
      
 158 
     | 
    
         
            +
            	color: #000;
         
     | 
| 
      
 159 
     | 
    
         
            +
            }
         
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
      
 161 
     | 
    
         
            +
            #qunit-tests li .runtime {
         
     | 
| 
      
 162 
     | 
    
         
            +
            	float: right;
         
     | 
| 
      
 163 
     | 
    
         
            +
            	font-size: smaller;
         
     | 
| 
      
 164 
     | 
    
         
            +
            }
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
            .qunit-assert-list {
         
     | 
| 
      
 167 
     | 
    
         
            +
            	margin-top: 0.5em;
         
     | 
| 
      
 168 
     | 
    
         
            +
            	padding: 0.5em;
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
            	background-color: #FFF;
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
            	border-radius: 5px;
         
     | 
| 
      
 173 
     | 
    
         
            +
            }
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
            .qunit-source {
         
     | 
| 
      
 176 
     | 
    
         
            +
            	margin: 0.6em 0 0.3em;
         
     | 
| 
      
 177 
     | 
    
         
            +
            }
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
            .qunit-collapsed {
         
     | 
| 
      
 180 
     | 
    
         
            +
            	display: none;
         
     | 
| 
      
 181 
     | 
    
         
            +
            }
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
            #qunit-tests table {
         
     | 
| 
      
 184 
     | 
    
         
            +
            	border-collapse: collapse;
         
     | 
| 
      
 185 
     | 
    
         
            +
            	margin-top: 0.2em;
         
     | 
| 
      
 186 
     | 
    
         
            +
            }
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
            #qunit-tests th {
         
     | 
| 
      
 189 
     | 
    
         
            +
            	text-align: right;
         
     | 
| 
      
 190 
     | 
    
         
            +
            	vertical-align: top;
         
     | 
| 
      
 191 
     | 
    
         
            +
            	padding: 0 0.5em 0 0;
         
     | 
| 
      
 192 
     | 
    
         
            +
            }
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
            #qunit-tests td {
         
     | 
| 
      
 195 
     | 
    
         
            +
            	vertical-align: top;
         
     | 
| 
      
 196 
     | 
    
         
            +
            }
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
            #qunit-tests pre {
         
     | 
| 
      
 199 
     | 
    
         
            +
            	margin: 0;
         
     | 
| 
      
 200 
     | 
    
         
            +
            	white-space: pre-wrap;
         
     | 
| 
      
 201 
     | 
    
         
            +
            	word-wrap: break-word;
         
     | 
| 
      
 202 
     | 
    
         
            +
            }
         
     | 
| 
      
 203 
     | 
    
         
            +
             
     | 
| 
      
 204 
     | 
    
         
            +
            #qunit-tests del {
         
     | 
| 
      
 205 
     | 
    
         
            +
            	background-color: #E0F2BE;
         
     | 
| 
      
 206 
     | 
    
         
            +
            	color: #374E0C;
         
     | 
| 
      
 207 
     | 
    
         
            +
            	text-decoration: none;
         
     | 
| 
      
 208 
     | 
    
         
            +
            }
         
     | 
| 
      
 209 
     | 
    
         
            +
             
     | 
| 
      
 210 
     | 
    
         
            +
            #qunit-tests ins {
         
     | 
| 
      
 211 
     | 
    
         
            +
            	background-color: #FFCACA;
         
     | 
| 
      
 212 
     | 
    
         
            +
            	color: #500;
         
     | 
| 
      
 213 
     | 
    
         
            +
            	text-decoration: none;
         
     | 
| 
      
 214 
     | 
    
         
            +
            }
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
      
 216 
     | 
    
         
            +
            /*** Test Counts */
         
     | 
| 
      
 217 
     | 
    
         
            +
             
     | 
| 
      
 218 
     | 
    
         
            +
            #qunit-tests b.counts                       { color: #000; }
         
     | 
| 
      
 219 
     | 
    
         
            +
            #qunit-tests b.passed                       { color: #5E740B; }
         
     | 
| 
      
 220 
     | 
    
         
            +
            #qunit-tests b.failed                       { color: #710909; }
         
     | 
| 
      
 221 
     | 
    
         
            +
             
     | 
| 
      
 222 
     | 
    
         
            +
            #qunit-tests li li {
         
     | 
| 
      
 223 
     | 
    
         
            +
            	padding: 5px;
         
     | 
| 
      
 224 
     | 
    
         
            +
            	background-color: #FFF;
         
     | 
| 
      
 225 
     | 
    
         
            +
            	border-bottom: none;
         
     | 
| 
      
 226 
     | 
    
         
            +
            	list-style-position: inside;
         
     | 
| 
      
 227 
     | 
    
         
            +
            }
         
     | 
| 
      
 228 
     | 
    
         
            +
             
     | 
| 
      
 229 
     | 
    
         
            +
            /*** Passing Styles */
         
     | 
| 
      
 230 
     | 
    
         
            +
             
     | 
| 
      
 231 
     | 
    
         
            +
            #qunit-tests li li.pass {
         
     | 
| 
      
 232 
     | 
    
         
            +
            	color: #3C510C;
         
     | 
| 
      
 233 
     | 
    
         
            +
            	background-color: #FFF;
         
     | 
| 
      
 234 
     | 
    
         
            +
            	border-left: 10px solid #C6E746;
         
     | 
| 
      
 235 
     | 
    
         
            +
            }
         
     | 
| 
      
 236 
     | 
    
         
            +
             
     | 
| 
      
 237 
     | 
    
         
            +
            #qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
         
     | 
| 
      
 238 
     | 
    
         
            +
            #qunit-tests .pass .test-name               { color: #366097; }
         
     | 
| 
      
 239 
     | 
    
         
            +
             
     | 
| 
      
 240 
     | 
    
         
            +
            #qunit-tests .pass .test-actual,
         
     | 
| 
      
 241 
     | 
    
         
            +
            #qunit-tests .pass .test-expected           { color: #999; }
         
     | 
| 
      
 242 
     | 
    
         
            +
             
     | 
| 
      
 243 
     | 
    
         
            +
            #qunit-banner.qunit-pass                    { background-color: #C6E746; }
         
     | 
| 
      
 244 
     | 
    
         
            +
             
     | 
| 
      
 245 
     | 
    
         
            +
            /*** Failing Styles */
         
     | 
| 
      
 246 
     | 
    
         
            +
             
     | 
| 
      
 247 
     | 
    
         
            +
            #qunit-tests li li.fail {
         
     | 
| 
      
 248 
     | 
    
         
            +
            	color: #710909;
         
     | 
| 
      
 249 
     | 
    
         
            +
            	background-color: #FFF;
         
     | 
| 
      
 250 
     | 
    
         
            +
            	border-left: 10px solid #EE5757;
         
     | 
| 
      
 251 
     | 
    
         
            +
            	white-space: pre;
         
     | 
| 
      
 252 
     | 
    
         
            +
            }
         
     | 
| 
      
 253 
     | 
    
         
            +
             
     | 
| 
      
 254 
     | 
    
         
            +
            #qunit-tests > li:last-child {
         
     | 
| 
      
 255 
     | 
    
         
            +
            	border-radius: 0 0 5px 5px;
         
     | 
| 
      
 256 
     | 
    
         
            +
            }
         
     | 
| 
      
 257 
     | 
    
         
            +
             
     | 
| 
      
 258 
     | 
    
         
            +
            #qunit-tests .fail                          { color: #000; background-color: #EE5757; }
         
     | 
| 
      
 259 
     | 
    
         
            +
            #qunit-tests .fail .test-name,
         
     | 
| 
      
 260 
     | 
    
         
            +
            #qunit-tests .fail .module-name             { color: #000; }
         
     | 
| 
      
 261 
     | 
    
         
            +
             
     | 
| 
      
 262 
     | 
    
         
            +
            #qunit-tests .fail .test-actual             { color: #EE5757; }
         
     | 
| 
      
 263 
     | 
    
         
            +
            #qunit-tests .fail .test-expected           { color: #008000; }
         
     | 
| 
      
 264 
     | 
    
         
            +
             
     | 
| 
      
 265 
     | 
    
         
            +
            #qunit-banner.qunit-fail                    { background-color: #EE5757; }
         
     | 
| 
      
 266 
     | 
    
         
            +
             
     | 
| 
      
 267 
     | 
    
         
            +
            /*** Skipped tests */
         
     | 
| 
      
 268 
     | 
    
         
            +
             
     | 
| 
      
 269 
     | 
    
         
            +
            #qunit-tests .skipped {
         
     | 
| 
      
 270 
     | 
    
         
            +
            	background-color: #EBECE9;
         
     | 
| 
      
 271 
     | 
    
         
            +
            }
         
     | 
| 
      
 272 
     | 
    
         
            +
             
     | 
| 
      
 273 
     | 
    
         
            +
            #qunit-tests .qunit-skipped-label {
         
     | 
| 
      
 274 
     | 
    
         
            +
            	background-color: #F4FF77;
         
     | 
| 
      
 275 
     | 
    
         
            +
            	display: inline-block;
         
     | 
| 
      
 276 
     | 
    
         
            +
            	font-style: normal;
         
     | 
| 
      
 277 
     | 
    
         
            +
            	color: #366097;
         
     | 
| 
      
 278 
     | 
    
         
            +
            	line-height: 1.8em;
         
     | 
| 
      
 279 
     | 
    
         
            +
            	padding: 0 0.5em;
         
     | 
| 
      
 280 
     | 
    
         
            +
            	margin: -0.4em 0.4em -0.4em 0;
         
     | 
| 
      
 281 
     | 
    
         
            +
            }
         
     | 
| 
      
 282 
     | 
    
         
            +
             
     | 
| 
      
 283 
     | 
    
         
            +
            /** Result */
         
     | 
| 
      
 284 
     | 
    
         
            +
             
     | 
| 
      
 285 
     | 
    
         
            +
            #qunit-testresult {
         
     | 
| 
      
 286 
     | 
    
         
            +
            	padding: 0.5em 1em 0.5em 1em;
         
     | 
| 
      
 287 
     | 
    
         
            +
             
     | 
| 
      
 288 
     | 
    
         
            +
            	color: #2B81AF;
         
     | 
| 
      
 289 
     | 
    
         
            +
            	background-color: #D2E0E6;
         
     | 
| 
      
 290 
     | 
    
         
            +
             
     | 
| 
      
 291 
     | 
    
         
            +
            	border-bottom: 1px solid #FFF;
         
     | 
| 
      
 292 
     | 
    
         
            +
            }
         
     | 
| 
      
 293 
     | 
    
         
            +
            #qunit-testresult .module-name {
         
     | 
| 
      
 294 
     | 
    
         
            +
            	font-weight: 700;
         
     | 
| 
      
 295 
     | 
    
         
            +
            }
         
     | 
| 
      
 296 
     | 
    
         
            +
             
     | 
| 
      
 297 
     | 
    
         
            +
            /** Fixture */
         
     | 
| 
      
 298 
     | 
    
         
            +
             
     | 
| 
      
 299 
     | 
    
         
            +
            #qunit-fixture {
         
     | 
| 
      
 300 
     | 
    
         
            +
            	position: absolute;
         
     | 
| 
      
 301 
     | 
    
         
            +
            	top: -10000px;
         
     | 
| 
      
 302 
     | 
    
         
            +
            	left: -10000px;
         
     | 
| 
      
 303 
     | 
    
         
            +
            	width: 1000px;
         
     | 
| 
      
 304 
     | 
    
         
            +
            	height: 1000px;
         
     | 
| 
      
 305 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -0,0 +1,4334 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /*!
         
     | 
| 
      
 2 
     | 
    
         
            +
             * QUnit 1.23.1
         
     | 
| 
      
 3 
     | 
    
         
            +
             * https://qunitjs.com/
         
     | 
| 
      
 4 
     | 
    
         
            +
             *
         
     | 
| 
      
 5 
     | 
    
         
            +
             * Copyright jQuery Foundation and other contributors
         
     | 
| 
      
 6 
     | 
    
         
            +
             * Released under the MIT license
         
     | 
| 
      
 7 
     | 
    
         
            +
             * https://jquery.org/license
         
     | 
| 
      
 8 
     | 
    
         
            +
             *
         
     | 
| 
      
 9 
     | 
    
         
            +
             * Date: 2016-04-12T17:29Z
         
     | 
| 
      
 10 
     | 
    
         
            +
             */
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            ( function( global ) {
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            var QUnit = {};
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            var Date = global.Date;
         
     | 
| 
      
 17 
     | 
    
         
            +
            var now = Date.now || function() {
         
     | 
| 
      
 18 
     | 
    
         
            +
            	return new Date().getTime();
         
     | 
| 
      
 19 
     | 
    
         
            +
            };
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            var setTimeout = global.setTimeout;
         
     | 
| 
      
 22 
     | 
    
         
            +
            var clearTimeout = global.clearTimeout;
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            // Store a local window from the global to allow direct references.
         
     | 
| 
      
 25 
     | 
    
         
            +
            var window = global.window;
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            var defined = {
         
     | 
| 
      
 28 
     | 
    
         
            +
            	document: window && window.document !== undefined,
         
     | 
| 
      
 29 
     | 
    
         
            +
            	setTimeout: setTimeout !== undefined,
         
     | 
| 
      
 30 
     | 
    
         
            +
            	sessionStorage: ( function() {
         
     | 
| 
      
 31 
     | 
    
         
            +
            		var x = "qunit-test-string";
         
     | 
| 
      
 32 
     | 
    
         
            +
            		try {
         
     | 
| 
      
 33 
     | 
    
         
            +
            			sessionStorage.setItem( x, x );
         
     | 
| 
      
 34 
     | 
    
         
            +
            			sessionStorage.removeItem( x );
         
     | 
| 
      
 35 
     | 
    
         
            +
            			return true;
         
     | 
| 
      
 36 
     | 
    
         
            +
            		} catch ( e ) {
         
     | 
| 
      
 37 
     | 
    
         
            +
            			return false;
         
     | 
| 
      
 38 
     | 
    
         
            +
            		}
         
     | 
| 
      
 39 
     | 
    
         
            +
            	}() )
         
     | 
| 
      
 40 
     | 
    
         
            +
            };
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            var fileName = ( sourceFromStacktrace( 0 ) || "" ).replace( /(:\d+)+\)?/, "" ).replace( /.+\//, "" );
         
     | 
| 
      
 43 
     | 
    
         
            +
            var globalStartCalled = false;
         
     | 
| 
      
 44 
     | 
    
         
            +
            var runStarted = false;
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            var toString = Object.prototype.toString,
         
     | 
| 
      
 47 
     | 
    
         
            +
            	hasOwn = Object.prototype.hasOwnProperty;
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            // Returns a new Array with the elements that are in a but not in b
         
     | 
| 
      
 50 
     | 
    
         
            +
            function diff( a, b ) {
         
     | 
| 
      
 51 
     | 
    
         
            +
            	var i, j,
         
     | 
| 
      
 52 
     | 
    
         
            +
            		result = a.slice();
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            	for ( i = 0; i < result.length; i++ ) {
         
     | 
| 
      
 55 
     | 
    
         
            +
            		for ( j = 0; j < b.length; j++ ) {
         
     | 
| 
      
 56 
     | 
    
         
            +
            			if ( result[ i ] === b[ j ] ) {
         
     | 
| 
      
 57 
     | 
    
         
            +
            				result.splice( i, 1 );
         
     | 
| 
      
 58 
     | 
    
         
            +
            				i--;
         
     | 
| 
      
 59 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 60 
     | 
    
         
            +
            			}
         
     | 
| 
      
 61 
     | 
    
         
            +
            		}
         
     | 
| 
      
 62 
     | 
    
         
            +
            	}
         
     | 
| 
      
 63 
     | 
    
         
            +
            	return result;
         
     | 
| 
      
 64 
     | 
    
         
            +
            }
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            // From jquery.js
         
     | 
| 
      
 67 
     | 
    
         
            +
            function inArray( elem, array ) {
         
     | 
| 
      
 68 
     | 
    
         
            +
            	if ( array.indexOf ) {
         
     | 
| 
      
 69 
     | 
    
         
            +
            		return array.indexOf( elem );
         
     | 
| 
      
 70 
     | 
    
         
            +
            	}
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
            	for ( var i = 0, length = array.length; i < length; i++ ) {
         
     | 
| 
      
 73 
     | 
    
         
            +
            		if ( array[ i ] === elem ) {
         
     | 
| 
      
 74 
     | 
    
         
            +
            			return i;
         
     | 
| 
      
 75 
     | 
    
         
            +
            		}
         
     | 
| 
      
 76 
     | 
    
         
            +
            	}
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
            	return -1;
         
     | 
| 
      
 79 
     | 
    
         
            +
            }
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
            /**
         
     | 
| 
      
 82 
     | 
    
         
            +
             * Makes a clone of an object using only Array or Object as base,
         
     | 
| 
      
 83 
     | 
    
         
            +
             * and copies over the own enumerable properties.
         
     | 
| 
      
 84 
     | 
    
         
            +
             *
         
     | 
| 
      
 85 
     | 
    
         
            +
             * @param {Object} obj
         
     | 
| 
      
 86 
     | 
    
         
            +
             * @return {Object} New object with only the own properties (recursively).
         
     | 
| 
      
 87 
     | 
    
         
            +
             */
         
     | 
| 
      
 88 
     | 
    
         
            +
            function objectValues ( obj ) {
         
     | 
| 
      
 89 
     | 
    
         
            +
            	var key, val,
         
     | 
| 
      
 90 
     | 
    
         
            +
            		vals = QUnit.is( "array", obj ) ? [] : {};
         
     | 
| 
      
 91 
     | 
    
         
            +
            	for ( key in obj ) {
         
     | 
| 
      
 92 
     | 
    
         
            +
            		if ( hasOwn.call( obj, key ) ) {
         
     | 
| 
      
 93 
     | 
    
         
            +
            			val = obj[ key ];
         
     | 
| 
      
 94 
     | 
    
         
            +
            			vals[ key ] = val === Object( val ) ? objectValues( val ) : val;
         
     | 
| 
      
 95 
     | 
    
         
            +
            		}
         
     | 
| 
      
 96 
     | 
    
         
            +
            	}
         
     | 
| 
      
 97 
     | 
    
         
            +
            	return vals;
         
     | 
| 
      
 98 
     | 
    
         
            +
            }
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
            function extend( a, b, undefOnly ) {
         
     | 
| 
      
 101 
     | 
    
         
            +
            	for ( var prop in b ) {
         
     | 
| 
      
 102 
     | 
    
         
            +
            		if ( hasOwn.call( b, prop ) ) {
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
            			// Avoid "Member not found" error in IE8 caused by messing with window.constructor
         
     | 
| 
      
 105 
     | 
    
         
            +
            			// This block runs on every environment, so `global` is being used instead of `window`
         
     | 
| 
      
 106 
     | 
    
         
            +
            			// to avoid errors on node.
         
     | 
| 
      
 107 
     | 
    
         
            +
            			if ( prop !== "constructor" || a !== global ) {
         
     | 
| 
      
 108 
     | 
    
         
            +
            				if ( b[ prop ] === undefined ) {
         
     | 
| 
      
 109 
     | 
    
         
            +
            					delete a[ prop ];
         
     | 
| 
      
 110 
     | 
    
         
            +
            				} else if ( !( undefOnly && typeof a[ prop ] !== "undefined" ) ) {
         
     | 
| 
      
 111 
     | 
    
         
            +
            					a[ prop ] = b[ prop ];
         
     | 
| 
      
 112 
     | 
    
         
            +
            				}
         
     | 
| 
      
 113 
     | 
    
         
            +
            			}
         
     | 
| 
      
 114 
     | 
    
         
            +
            		}
         
     | 
| 
      
 115 
     | 
    
         
            +
            	}
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
            	return a;
         
     | 
| 
      
 118 
     | 
    
         
            +
            }
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
            function objectType( obj ) {
         
     | 
| 
      
 121 
     | 
    
         
            +
            	if ( typeof obj === "undefined" ) {
         
     | 
| 
      
 122 
     | 
    
         
            +
            		return "undefined";
         
     | 
| 
      
 123 
     | 
    
         
            +
            	}
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
            	// Consider: typeof null === object
         
     | 
| 
      
 126 
     | 
    
         
            +
            	if ( obj === null ) {
         
     | 
| 
      
 127 
     | 
    
         
            +
            		return "null";
         
     | 
| 
      
 128 
     | 
    
         
            +
            	}
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
            	var match = toString.call( obj ).match( /^\[object\s(.*)\]$/ ),
         
     | 
| 
      
 131 
     | 
    
         
            +
            		type = match && match[ 1 ];
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
            	switch ( type ) {
         
     | 
| 
      
 134 
     | 
    
         
            +
            		case "Number":
         
     | 
| 
      
 135 
     | 
    
         
            +
            			if ( isNaN( obj ) ) {
         
     | 
| 
      
 136 
     | 
    
         
            +
            				return "nan";
         
     | 
| 
      
 137 
     | 
    
         
            +
            			}
         
     | 
| 
      
 138 
     | 
    
         
            +
            			return "number";
         
     | 
| 
      
 139 
     | 
    
         
            +
            		case "String":
         
     | 
| 
      
 140 
     | 
    
         
            +
            		case "Boolean":
         
     | 
| 
      
 141 
     | 
    
         
            +
            		case "Array":
         
     | 
| 
      
 142 
     | 
    
         
            +
            		case "Set":
         
     | 
| 
      
 143 
     | 
    
         
            +
            		case "Map":
         
     | 
| 
      
 144 
     | 
    
         
            +
            		case "Date":
         
     | 
| 
      
 145 
     | 
    
         
            +
            		case "RegExp":
         
     | 
| 
      
 146 
     | 
    
         
            +
            		case "Function":
         
     | 
| 
      
 147 
     | 
    
         
            +
            		case "Symbol":
         
     | 
| 
      
 148 
     | 
    
         
            +
            			return type.toLowerCase();
         
     | 
| 
      
 149 
     | 
    
         
            +
            	}
         
     | 
| 
      
 150 
     | 
    
         
            +
            	if ( typeof obj === "object" ) {
         
     | 
| 
      
 151 
     | 
    
         
            +
            		return "object";
         
     | 
| 
      
 152 
     | 
    
         
            +
            	}
         
     | 
| 
      
 153 
     | 
    
         
            +
            }
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
            // Safe object type checking
         
     | 
| 
      
 156 
     | 
    
         
            +
            function is( type, obj ) {
         
     | 
| 
      
 157 
     | 
    
         
            +
            	return QUnit.objectType( obj ) === type;
         
     | 
| 
      
 158 
     | 
    
         
            +
            }
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
            // Doesn't support IE6 to IE9, it will return undefined on these browsers
         
     | 
| 
      
 161 
     | 
    
         
            +
            // See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
         
     | 
| 
      
 162 
     | 
    
         
            +
            function extractStacktrace( e, offset ) {
         
     | 
| 
      
 163 
     | 
    
         
            +
            	offset = offset === undefined ? 4 : offset;
         
     | 
| 
      
 164 
     | 
    
         
            +
             
     | 
| 
      
 165 
     | 
    
         
            +
            	var stack, include, i;
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
            	if ( e.stack ) {
         
     | 
| 
      
 168 
     | 
    
         
            +
            		stack = e.stack.split( "\n" );
         
     | 
| 
      
 169 
     | 
    
         
            +
            		if ( /^error$/i.test( stack[ 0 ] ) ) {
         
     | 
| 
      
 170 
     | 
    
         
            +
            			stack.shift();
         
     | 
| 
      
 171 
     | 
    
         
            +
            		}
         
     | 
| 
      
 172 
     | 
    
         
            +
            		if ( fileName ) {
         
     | 
| 
      
 173 
     | 
    
         
            +
            			include = [];
         
     | 
| 
      
 174 
     | 
    
         
            +
            			for ( i = offset; i < stack.length; i++ ) {
         
     | 
| 
      
 175 
     | 
    
         
            +
            				if ( stack[ i ].indexOf( fileName ) !== -1 ) {
         
     | 
| 
      
 176 
     | 
    
         
            +
            					break;
         
     | 
| 
      
 177 
     | 
    
         
            +
            				}
         
     | 
| 
      
 178 
     | 
    
         
            +
            				include.push( stack[ i ] );
         
     | 
| 
      
 179 
     | 
    
         
            +
            			}
         
     | 
| 
      
 180 
     | 
    
         
            +
            			if ( include.length ) {
         
     | 
| 
      
 181 
     | 
    
         
            +
            				return include.join( "\n" );
         
     | 
| 
      
 182 
     | 
    
         
            +
            			}
         
     | 
| 
      
 183 
     | 
    
         
            +
            		}
         
     | 
| 
      
 184 
     | 
    
         
            +
            		return stack[ offset ];
         
     | 
| 
      
 185 
     | 
    
         
            +
             
     | 
| 
      
 186 
     | 
    
         
            +
            	// Support: Safari <=6 only
         
     | 
| 
      
 187 
     | 
    
         
            +
            	} else if ( e.sourceURL ) {
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
      
 189 
     | 
    
         
            +
            		// Exclude useless self-reference for generated Error objects
         
     | 
| 
      
 190 
     | 
    
         
            +
            		if ( /qunit.js$/.test( e.sourceURL ) ) {
         
     | 
| 
      
 191 
     | 
    
         
            +
            			return;
         
     | 
| 
      
 192 
     | 
    
         
            +
            		}
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
            		// For actual exceptions, this is useful
         
     | 
| 
      
 195 
     | 
    
         
            +
            		return e.sourceURL + ":" + e.line;
         
     | 
| 
      
 196 
     | 
    
         
            +
            	}
         
     | 
| 
      
 197 
     | 
    
         
            +
            }
         
     | 
| 
      
 198 
     | 
    
         
            +
             
     | 
| 
      
 199 
     | 
    
         
            +
            function sourceFromStacktrace( offset ) {
         
     | 
| 
      
 200 
     | 
    
         
            +
            	var error = new Error();
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
      
 202 
     | 
    
         
            +
            	// Support: Safari <=7 only, IE <=10 - 11 only
         
     | 
| 
      
 203 
     | 
    
         
            +
            	// Not all browsers generate the `stack` property for `new Error()`, see also #636
         
     | 
| 
      
 204 
     | 
    
         
            +
            	if ( !error.stack ) {
         
     | 
| 
      
 205 
     | 
    
         
            +
            		try {
         
     | 
| 
      
 206 
     | 
    
         
            +
            			throw error;
         
     | 
| 
      
 207 
     | 
    
         
            +
            		} catch ( err ) {
         
     | 
| 
      
 208 
     | 
    
         
            +
            			error = err;
         
     | 
| 
      
 209 
     | 
    
         
            +
            		}
         
     | 
| 
      
 210 
     | 
    
         
            +
            	}
         
     | 
| 
      
 211 
     | 
    
         
            +
             
     | 
| 
      
 212 
     | 
    
         
            +
            	return extractStacktrace( error, offset );
         
     | 
| 
      
 213 
     | 
    
         
            +
            }
         
     | 
| 
      
 214 
     | 
    
         
            +
             
     | 
| 
      
 215 
     | 
    
         
            +
            /**
         
     | 
| 
      
 216 
     | 
    
         
            +
             * Config object: Maintain internal state
         
     | 
| 
      
 217 
     | 
    
         
            +
             * Later exposed as QUnit.config
         
     | 
| 
      
 218 
     | 
    
         
            +
             * `config` initialized at top of scope
         
     | 
| 
      
 219 
     | 
    
         
            +
             */
         
     | 
| 
      
 220 
     | 
    
         
            +
            var config = {
         
     | 
| 
      
 221 
     | 
    
         
            +
             
     | 
| 
      
 222 
     | 
    
         
            +
            	// The queue of tests to run
         
     | 
| 
      
 223 
     | 
    
         
            +
            	queue: [],
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
            	// Block until document ready
         
     | 
| 
      
 226 
     | 
    
         
            +
            	blocking: true,
         
     | 
| 
      
 227 
     | 
    
         
            +
             
     | 
| 
      
 228 
     | 
    
         
            +
            	// By default, run previously failed tests first
         
     | 
| 
      
 229 
     | 
    
         
            +
            	// very useful in combination with "Hide passed tests" checked
         
     | 
| 
      
 230 
     | 
    
         
            +
            	reorder: true,
         
     | 
| 
      
 231 
     | 
    
         
            +
             
     | 
| 
      
 232 
     | 
    
         
            +
            	// By default, modify document.title when suite is done
         
     | 
| 
      
 233 
     | 
    
         
            +
            	altertitle: true,
         
     | 
| 
      
 234 
     | 
    
         
            +
             
     | 
| 
      
 235 
     | 
    
         
            +
            	// HTML Reporter: collapse every test except the first failing test
         
     | 
| 
      
 236 
     | 
    
         
            +
            	// If false, all failing tests will be expanded
         
     | 
| 
      
 237 
     | 
    
         
            +
            	collapse: true,
         
     | 
| 
      
 238 
     | 
    
         
            +
             
     | 
| 
      
 239 
     | 
    
         
            +
            	// By default, scroll to top of the page when suite is done
         
     | 
| 
      
 240 
     | 
    
         
            +
            	scrolltop: true,
         
     | 
| 
      
 241 
     | 
    
         
            +
             
     | 
| 
      
 242 
     | 
    
         
            +
            	// Depth up-to which object will be dumped
         
     | 
| 
      
 243 
     | 
    
         
            +
            	maxDepth: 5,
         
     | 
| 
      
 244 
     | 
    
         
            +
             
     | 
| 
      
 245 
     | 
    
         
            +
            	// When enabled, all tests must call expect()
         
     | 
| 
      
 246 
     | 
    
         
            +
            	requireExpects: false,
         
     | 
| 
      
 247 
     | 
    
         
            +
             
     | 
| 
      
 248 
     | 
    
         
            +
            	// Placeholder for user-configurable form-exposed URL parameters
         
     | 
| 
      
 249 
     | 
    
         
            +
            	urlConfig: [],
         
     | 
| 
      
 250 
     | 
    
         
            +
             
     | 
| 
      
 251 
     | 
    
         
            +
            	// Set of all modules.
         
     | 
| 
      
 252 
     | 
    
         
            +
            	modules: [],
         
     | 
| 
      
 253 
     | 
    
         
            +
             
     | 
| 
      
 254 
     | 
    
         
            +
            	// Stack of nested modules
         
     | 
| 
      
 255 
     | 
    
         
            +
            	moduleStack: [],
         
     | 
| 
      
 256 
     | 
    
         
            +
             
     | 
| 
      
 257 
     | 
    
         
            +
            	// The first unnamed module
         
     | 
| 
      
 258 
     | 
    
         
            +
            	currentModule: {
         
     | 
| 
      
 259 
     | 
    
         
            +
            		name: "",
         
     | 
| 
      
 260 
     | 
    
         
            +
            		tests: []
         
     | 
| 
      
 261 
     | 
    
         
            +
            	},
         
     | 
| 
      
 262 
     | 
    
         
            +
             
     | 
| 
      
 263 
     | 
    
         
            +
            	callbacks: {}
         
     | 
| 
      
 264 
     | 
    
         
            +
            };
         
     | 
| 
      
 265 
     | 
    
         
            +
             
     | 
| 
      
 266 
     | 
    
         
            +
            // Push a loose unnamed module to the modules collection
         
     | 
| 
      
 267 
     | 
    
         
            +
            config.modules.push( config.currentModule );
         
     | 
| 
      
 268 
     | 
    
         
            +
             
     | 
| 
      
 269 
     | 
    
         
            +
            var loggingCallbacks = {};
         
     | 
| 
      
 270 
     | 
    
         
            +
             
     | 
| 
      
 271 
     | 
    
         
            +
            // Register logging callbacks
         
     | 
| 
      
 272 
     | 
    
         
            +
            function registerLoggingCallbacks( obj ) {
         
     | 
| 
      
 273 
     | 
    
         
            +
            	var i, l, key,
         
     | 
| 
      
 274 
     | 
    
         
            +
            		callbackNames = [ "begin", "done", "log", "testStart", "testDone",
         
     | 
| 
      
 275 
     | 
    
         
            +
            			"moduleStart", "moduleDone" ];
         
     | 
| 
      
 276 
     | 
    
         
            +
             
     | 
| 
      
 277 
     | 
    
         
            +
            	function registerLoggingCallback( key ) {
         
     | 
| 
      
 278 
     | 
    
         
            +
            		var loggingCallback = function( callback ) {
         
     | 
| 
      
 279 
     | 
    
         
            +
            			if ( objectType( callback ) !== "function" ) {
         
     | 
| 
      
 280 
     | 
    
         
            +
            				throw new Error(
         
     | 
| 
      
 281 
     | 
    
         
            +
            					"QUnit logging methods require a callback function as their first parameters."
         
     | 
| 
      
 282 
     | 
    
         
            +
            				);
         
     | 
| 
      
 283 
     | 
    
         
            +
            			}
         
     | 
| 
      
 284 
     | 
    
         
            +
             
     | 
| 
      
 285 
     | 
    
         
            +
            			config.callbacks[ key ].push( callback );
         
     | 
| 
      
 286 
     | 
    
         
            +
            		};
         
     | 
| 
      
 287 
     | 
    
         
            +
             
     | 
| 
      
 288 
     | 
    
         
            +
            		// DEPRECATED: This will be removed on QUnit 2.0.0+
         
     | 
| 
      
 289 
     | 
    
         
            +
            		// Stores the registered functions allowing restoring
         
     | 
| 
      
 290 
     | 
    
         
            +
            		// at verifyLoggingCallbacks() if modified
         
     | 
| 
      
 291 
     | 
    
         
            +
            		loggingCallbacks[ key ] = loggingCallback;
         
     | 
| 
      
 292 
     | 
    
         
            +
             
     | 
| 
      
 293 
     | 
    
         
            +
            		return loggingCallback;
         
     | 
| 
      
 294 
     | 
    
         
            +
            	}
         
     | 
| 
      
 295 
     | 
    
         
            +
             
     | 
| 
      
 296 
     | 
    
         
            +
            	for ( i = 0, l = callbackNames.length; i < l; i++ ) {
         
     | 
| 
      
 297 
     | 
    
         
            +
            		key = callbackNames[ i ];
         
     | 
| 
      
 298 
     | 
    
         
            +
             
     | 
| 
      
 299 
     | 
    
         
            +
            		// Initialize key collection of logging callback
         
     | 
| 
      
 300 
     | 
    
         
            +
            		if ( objectType( config.callbacks[ key ] ) === "undefined" ) {
         
     | 
| 
      
 301 
     | 
    
         
            +
            			config.callbacks[ key ] = [];
         
     | 
| 
      
 302 
     | 
    
         
            +
            		}
         
     | 
| 
      
 303 
     | 
    
         
            +
             
     | 
| 
      
 304 
     | 
    
         
            +
            		obj[ key ] = registerLoggingCallback( key );
         
     | 
| 
      
 305 
     | 
    
         
            +
            	}
         
     | 
| 
      
 306 
     | 
    
         
            +
            }
         
     | 
| 
      
 307 
     | 
    
         
            +
             
     | 
| 
      
 308 
     | 
    
         
            +
            function runLoggingCallbacks( key, args ) {
         
     | 
| 
      
 309 
     | 
    
         
            +
            	var i, l, callbacks;
         
     | 
| 
      
 310 
     | 
    
         
            +
             
     | 
| 
      
 311 
     | 
    
         
            +
            	callbacks = config.callbacks[ key ];
         
     | 
| 
      
 312 
     | 
    
         
            +
            	for ( i = 0, l = callbacks.length; i < l; i++ ) {
         
     | 
| 
      
 313 
     | 
    
         
            +
            		callbacks[ i ]( args );
         
     | 
| 
      
 314 
     | 
    
         
            +
            	}
         
     | 
| 
      
 315 
     | 
    
         
            +
            }
         
     | 
| 
      
 316 
     | 
    
         
            +
             
     | 
| 
      
 317 
     | 
    
         
            +
            // DEPRECATED: This will be removed on 2.0.0+
         
     | 
| 
      
 318 
     | 
    
         
            +
            // This function verifies if the loggingCallbacks were modified by the user
         
     | 
| 
      
 319 
     | 
    
         
            +
            // If so, it will restore it, assign the given callback and print a console warning
         
     | 
| 
      
 320 
     | 
    
         
            +
            function verifyLoggingCallbacks() {
         
     | 
| 
      
 321 
     | 
    
         
            +
            	var loggingCallback, userCallback;
         
     | 
| 
      
 322 
     | 
    
         
            +
             
     | 
| 
      
 323 
     | 
    
         
            +
            	for ( loggingCallback in loggingCallbacks ) {
         
     | 
| 
      
 324 
     | 
    
         
            +
            		if ( QUnit[ loggingCallback ] !== loggingCallbacks[ loggingCallback ] ) {
         
     | 
| 
      
 325 
     | 
    
         
            +
             
     | 
| 
      
 326 
     | 
    
         
            +
            			userCallback = QUnit[ loggingCallback ];
         
     | 
| 
      
 327 
     | 
    
         
            +
             
     | 
| 
      
 328 
     | 
    
         
            +
            			// Restore the callback function
         
     | 
| 
      
 329 
     | 
    
         
            +
            			QUnit[ loggingCallback ] = loggingCallbacks[ loggingCallback ];
         
     | 
| 
      
 330 
     | 
    
         
            +
             
     | 
| 
      
 331 
     | 
    
         
            +
            			// Assign the deprecated given callback
         
     | 
| 
      
 332 
     | 
    
         
            +
            			QUnit[ loggingCallback ]( userCallback );
         
     | 
| 
      
 333 
     | 
    
         
            +
             
     | 
| 
      
 334 
     | 
    
         
            +
            			if ( global.console && global.console.warn ) {
         
     | 
| 
      
 335 
     | 
    
         
            +
            				global.console.warn(
         
     | 
| 
      
 336 
     | 
    
         
            +
            					"QUnit." + loggingCallback + " was replaced with a new value.\n" +
         
     | 
| 
      
 337 
     | 
    
         
            +
            					"Please, check out the documentation on how to apply logging callbacks.\n" +
         
     | 
| 
      
 338 
     | 
    
         
            +
            					"Reference: https://api.qunitjs.com/category/callbacks/"
         
     | 
| 
      
 339 
     | 
    
         
            +
            				);
         
     | 
| 
      
 340 
     | 
    
         
            +
            			}
         
     | 
| 
      
 341 
     | 
    
         
            +
            		}
         
     | 
| 
      
 342 
     | 
    
         
            +
            	}
         
     | 
| 
      
 343 
     | 
    
         
            +
            }
         
     | 
| 
      
 344 
     | 
    
         
            +
             
     | 
| 
      
 345 
     | 
    
         
            +
            ( function() {
         
     | 
| 
      
 346 
     | 
    
         
            +
            	if ( !defined.document ) {
         
     | 
| 
      
 347 
     | 
    
         
            +
            		return;
         
     | 
| 
      
 348 
     | 
    
         
            +
            	}
         
     | 
| 
      
 349 
     | 
    
         
            +
             
     | 
| 
      
 350 
     | 
    
         
            +
            	// `onErrorFnPrev` initialized at top of scope
         
     | 
| 
      
 351 
     | 
    
         
            +
            	// Preserve other handlers
         
     | 
| 
      
 352 
     | 
    
         
            +
            	var onErrorFnPrev = window.onerror;
         
     | 
| 
      
 353 
     | 
    
         
            +
             
     | 
| 
      
 354 
     | 
    
         
            +
            	// Cover uncaught exceptions
         
     | 
| 
      
 355 
     | 
    
         
            +
            	// Returning true will suppress the default browser handler,
         
     | 
| 
      
 356 
     | 
    
         
            +
            	// returning false will let it run.
         
     | 
| 
      
 357 
     | 
    
         
            +
            	window.onerror = function( error, filePath, linerNr ) {
         
     | 
| 
      
 358 
     | 
    
         
            +
            		var ret = false;
         
     | 
| 
      
 359 
     | 
    
         
            +
            		if ( onErrorFnPrev ) {
         
     | 
| 
      
 360 
     | 
    
         
            +
            			ret = onErrorFnPrev( error, filePath, linerNr );
         
     | 
| 
      
 361 
     | 
    
         
            +
            		}
         
     | 
| 
      
 362 
     | 
    
         
            +
             
     | 
| 
      
 363 
     | 
    
         
            +
            		// Treat return value as window.onerror itself does,
         
     | 
| 
      
 364 
     | 
    
         
            +
            		// Only do our handling if not suppressed.
         
     | 
| 
      
 365 
     | 
    
         
            +
            		if ( ret !== true ) {
         
     | 
| 
      
 366 
     | 
    
         
            +
            			if ( QUnit.config.current ) {
         
     | 
| 
      
 367 
     | 
    
         
            +
            				if ( QUnit.config.current.ignoreGlobalErrors ) {
         
     | 
| 
      
 368 
     | 
    
         
            +
            					return true;
         
     | 
| 
      
 369 
     | 
    
         
            +
            				}
         
     | 
| 
      
 370 
     | 
    
         
            +
            				QUnit.pushFailure( error, filePath + ":" + linerNr );
         
     | 
| 
      
 371 
     | 
    
         
            +
            			} else {
         
     | 
| 
      
 372 
     | 
    
         
            +
            				QUnit.test( "global failure", extend( function() {
         
     | 
| 
      
 373 
     | 
    
         
            +
            					QUnit.pushFailure( error, filePath + ":" + linerNr );
         
     | 
| 
      
 374 
     | 
    
         
            +
            				}, { validTest: true } ) );
         
     | 
| 
      
 375 
     | 
    
         
            +
            			}
         
     | 
| 
      
 376 
     | 
    
         
            +
            			return false;
         
     | 
| 
      
 377 
     | 
    
         
            +
            		}
         
     | 
| 
      
 378 
     | 
    
         
            +
             
     | 
| 
      
 379 
     | 
    
         
            +
            		return ret;
         
     | 
| 
      
 380 
     | 
    
         
            +
            	};
         
     | 
| 
      
 381 
     | 
    
         
            +
            }() );
         
     | 
| 
      
 382 
     | 
    
         
            +
             
     | 
| 
      
 383 
     | 
    
         
            +
            // Figure out if we're running the tests from a server or not
         
     | 
| 
      
 384 
     | 
    
         
            +
            QUnit.isLocal = !( defined.document && window.location.protocol !== "file:" );
         
     | 
| 
      
 385 
     | 
    
         
            +
             
     | 
| 
      
 386 
     | 
    
         
            +
            // Expose the current QUnit version
         
     | 
| 
      
 387 
     | 
    
         
            +
            QUnit.version = "1.23.1";
         
     | 
| 
      
 388 
     | 
    
         
            +
             
     | 
| 
      
 389 
     | 
    
         
            +
            extend( QUnit, {
         
     | 
| 
      
 390 
     | 
    
         
            +
             
     | 
| 
      
 391 
     | 
    
         
            +
            	// Call on start of module test to prepend name to all tests
         
     | 
| 
      
 392 
     | 
    
         
            +
            	module: function( name, testEnvironment, executeNow ) {
         
     | 
| 
      
 393 
     | 
    
         
            +
            		var module, moduleFns;
         
     | 
| 
      
 394 
     | 
    
         
            +
            		var currentModule = config.currentModule;
         
     | 
| 
      
 395 
     | 
    
         
            +
             
     | 
| 
      
 396 
     | 
    
         
            +
            		if ( arguments.length === 2 ) {
         
     | 
| 
      
 397 
     | 
    
         
            +
            			if ( objectType( testEnvironment ) === "function" ) {
         
     | 
| 
      
 398 
     | 
    
         
            +
            				executeNow = testEnvironment;
         
     | 
| 
      
 399 
     | 
    
         
            +
            				testEnvironment = undefined;
         
     | 
| 
      
 400 
     | 
    
         
            +
            			}
         
     | 
| 
      
 401 
     | 
    
         
            +
            		}
         
     | 
| 
      
 402 
     | 
    
         
            +
             
     | 
| 
      
 403 
     | 
    
         
            +
            		// DEPRECATED: handles setup/teardown functions,
         
     | 
| 
      
 404 
     | 
    
         
            +
            		// beforeEach and afterEach should be used instead
         
     | 
| 
      
 405 
     | 
    
         
            +
            		if ( testEnvironment && testEnvironment.setup ) {
         
     | 
| 
      
 406 
     | 
    
         
            +
            			testEnvironment.beforeEach = testEnvironment.setup;
         
     | 
| 
      
 407 
     | 
    
         
            +
            			delete testEnvironment.setup;
         
     | 
| 
      
 408 
     | 
    
         
            +
            		}
         
     | 
| 
      
 409 
     | 
    
         
            +
            		if ( testEnvironment && testEnvironment.teardown ) {
         
     | 
| 
      
 410 
     | 
    
         
            +
            			testEnvironment.afterEach = testEnvironment.teardown;
         
     | 
| 
      
 411 
     | 
    
         
            +
            			delete testEnvironment.teardown;
         
     | 
| 
      
 412 
     | 
    
         
            +
            		}
         
     | 
| 
      
 413 
     | 
    
         
            +
             
     | 
| 
      
 414 
     | 
    
         
            +
            		module = createModule();
         
     | 
| 
      
 415 
     | 
    
         
            +
             
     | 
| 
      
 416 
     | 
    
         
            +
            		moduleFns = {
         
     | 
| 
      
 417 
     | 
    
         
            +
            			beforeEach: setHook( module, "beforeEach" ),
         
     | 
| 
      
 418 
     | 
    
         
            +
            			afterEach: setHook( module, "afterEach" )
         
     | 
| 
      
 419 
     | 
    
         
            +
            		};
         
     | 
| 
      
 420 
     | 
    
         
            +
             
     | 
| 
      
 421 
     | 
    
         
            +
            		if ( objectType( executeNow ) === "function" ) {
         
     | 
| 
      
 422 
     | 
    
         
            +
            			config.moduleStack.push( module );
         
     | 
| 
      
 423 
     | 
    
         
            +
            			setCurrentModule( module );
         
     | 
| 
      
 424 
     | 
    
         
            +
            			executeNow.call( module.testEnvironment, moduleFns );
         
     | 
| 
      
 425 
     | 
    
         
            +
            			config.moduleStack.pop();
         
     | 
| 
      
 426 
     | 
    
         
            +
            			module = module.parentModule || currentModule;
         
     | 
| 
      
 427 
     | 
    
         
            +
            		}
         
     | 
| 
      
 428 
     | 
    
         
            +
             
     | 
| 
      
 429 
     | 
    
         
            +
            		setCurrentModule( module );
         
     | 
| 
      
 430 
     | 
    
         
            +
             
     | 
| 
      
 431 
     | 
    
         
            +
            		function createModule() {
         
     | 
| 
      
 432 
     | 
    
         
            +
            			var parentModule = config.moduleStack.length ?
         
     | 
| 
      
 433 
     | 
    
         
            +
            				config.moduleStack.slice( -1 )[ 0 ] : null;
         
     | 
| 
      
 434 
     | 
    
         
            +
            			var moduleName = parentModule !== null ?
         
     | 
| 
      
 435 
     | 
    
         
            +
            				[ parentModule.name, name ].join( " > " ) : name;
         
     | 
| 
      
 436 
     | 
    
         
            +
            			var module = {
         
     | 
| 
      
 437 
     | 
    
         
            +
            				name: moduleName,
         
     | 
| 
      
 438 
     | 
    
         
            +
            				parentModule: parentModule,
         
     | 
| 
      
 439 
     | 
    
         
            +
            				tests: [],
         
     | 
| 
      
 440 
     | 
    
         
            +
            				moduleId: generateHash( moduleName )
         
     | 
| 
      
 441 
     | 
    
         
            +
            			};
         
     | 
| 
      
 442 
     | 
    
         
            +
             
     | 
| 
      
 443 
     | 
    
         
            +
            			var env = {};
         
     | 
| 
      
 444 
     | 
    
         
            +
            			if ( parentModule ) {
         
     | 
| 
      
 445 
     | 
    
         
            +
            				extend( env, parentModule.testEnvironment );
         
     | 
| 
      
 446 
     | 
    
         
            +
            				delete env.beforeEach;
         
     | 
| 
      
 447 
     | 
    
         
            +
            				delete env.afterEach;
         
     | 
| 
      
 448 
     | 
    
         
            +
            			}
         
     | 
| 
      
 449 
     | 
    
         
            +
            			extend( env, testEnvironment );
         
     | 
| 
      
 450 
     | 
    
         
            +
            			module.testEnvironment = env;
         
     | 
| 
      
 451 
     | 
    
         
            +
             
     | 
| 
      
 452 
     | 
    
         
            +
            			config.modules.push( module );
         
     | 
| 
      
 453 
     | 
    
         
            +
            			return module;
         
     | 
| 
      
 454 
     | 
    
         
            +
            		}
         
     | 
| 
      
 455 
     | 
    
         
            +
             
     | 
| 
      
 456 
     | 
    
         
            +
            		function setCurrentModule( module ) {
         
     | 
| 
      
 457 
     | 
    
         
            +
            			config.currentModule = module;
         
     | 
| 
      
 458 
     | 
    
         
            +
            		}
         
     | 
| 
      
 459 
     | 
    
         
            +
             
     | 
| 
      
 460 
     | 
    
         
            +
            	},
         
     | 
| 
      
 461 
     | 
    
         
            +
             
     | 
| 
      
 462 
     | 
    
         
            +
            	// DEPRECATED: QUnit.asyncTest() will be removed in QUnit 2.0.
         
     | 
| 
      
 463 
     | 
    
         
            +
            	asyncTest: asyncTest,
         
     | 
| 
      
 464 
     | 
    
         
            +
             
     | 
| 
      
 465 
     | 
    
         
            +
            	test: test,
         
     | 
| 
      
 466 
     | 
    
         
            +
             
     | 
| 
      
 467 
     | 
    
         
            +
            	skip: skip,
         
     | 
| 
      
 468 
     | 
    
         
            +
             
     | 
| 
      
 469 
     | 
    
         
            +
            	only: only,
         
     | 
| 
      
 470 
     | 
    
         
            +
             
     | 
| 
      
 471 
     | 
    
         
            +
            	// DEPRECATED: The functionality of QUnit.start() will be altered in QUnit 2.0.
         
     | 
| 
      
 472 
     | 
    
         
            +
            	// In QUnit 2.0, invoking it will ONLY affect the `QUnit.config.autostart` blocking behavior.
         
     | 
| 
      
 473 
     | 
    
         
            +
            	start: function( count ) {
         
     | 
| 
      
 474 
     | 
    
         
            +
            		var globalStartAlreadyCalled = globalStartCalled;
         
     | 
| 
      
 475 
     | 
    
         
            +
             
     | 
| 
      
 476 
     | 
    
         
            +
            		if ( !config.current ) {
         
     | 
| 
      
 477 
     | 
    
         
            +
            			globalStartCalled = true;
         
     | 
| 
      
 478 
     | 
    
         
            +
             
     | 
| 
      
 479 
     | 
    
         
            +
            			if ( runStarted ) {
         
     | 
| 
      
 480 
     | 
    
         
            +
            				throw new Error( "Called start() outside of a test context while already started" );
         
     | 
| 
      
 481 
     | 
    
         
            +
            			} else if ( globalStartAlreadyCalled || count > 1 ) {
         
     | 
| 
      
 482 
     | 
    
         
            +
            				throw new Error( "Called start() outside of a test context too many times" );
         
     | 
| 
      
 483 
     | 
    
         
            +
            			} else if ( config.autostart ) {
         
     | 
| 
      
 484 
     | 
    
         
            +
            				throw new Error( "Called start() outside of a test context when " +
         
     | 
| 
      
 485 
     | 
    
         
            +
            					"QUnit.config.autostart was true" );
         
     | 
| 
      
 486 
     | 
    
         
            +
            			} else if ( !config.pageLoaded ) {
         
     | 
| 
      
 487 
     | 
    
         
            +
             
     | 
| 
      
 488 
     | 
    
         
            +
            				// The page isn't completely loaded yet, so bail out and let `QUnit.load` handle it
         
     | 
| 
      
 489 
     | 
    
         
            +
            				config.autostart = true;
         
     | 
| 
      
 490 
     | 
    
         
            +
            				return;
         
     | 
| 
      
 491 
     | 
    
         
            +
            			}
         
     | 
| 
      
 492 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 493 
     | 
    
         
            +
             
     | 
| 
      
 494 
     | 
    
         
            +
            			// If a test is running, adjust its semaphore
         
     | 
| 
      
 495 
     | 
    
         
            +
            			config.current.semaphore -= count || 1;
         
     | 
| 
      
 496 
     | 
    
         
            +
             
     | 
| 
      
 497 
     | 
    
         
            +
            			// If semaphore is non-numeric, throw error
         
     | 
| 
      
 498 
     | 
    
         
            +
            			if ( isNaN( config.current.semaphore ) ) {
         
     | 
| 
      
 499 
     | 
    
         
            +
            				config.current.semaphore = 0;
         
     | 
| 
      
 500 
     | 
    
         
            +
             
     | 
| 
      
 501 
     | 
    
         
            +
            				QUnit.pushFailure(
         
     | 
| 
      
 502 
     | 
    
         
            +
            					"Called start() with a non-numeric decrement.",
         
     | 
| 
      
 503 
     | 
    
         
            +
            					sourceFromStacktrace( 2 )
         
     | 
| 
      
 504 
     | 
    
         
            +
            				);
         
     | 
| 
      
 505 
     | 
    
         
            +
            				return;
         
     | 
| 
      
 506 
     | 
    
         
            +
            			}
         
     | 
| 
      
 507 
     | 
    
         
            +
             
     | 
| 
      
 508 
     | 
    
         
            +
            			// Don't start until equal number of stop-calls
         
     | 
| 
      
 509 
     | 
    
         
            +
            			if ( config.current.semaphore > 0 ) {
         
     | 
| 
      
 510 
     | 
    
         
            +
            				return;
         
     | 
| 
      
 511 
     | 
    
         
            +
            			}
         
     | 
| 
      
 512 
     | 
    
         
            +
             
     | 
| 
      
 513 
     | 
    
         
            +
            			// Throw an Error if start is called more often than stop
         
     | 
| 
      
 514 
     | 
    
         
            +
            			if ( config.current.semaphore < 0 ) {
         
     | 
| 
      
 515 
     | 
    
         
            +
            				config.current.semaphore = 0;
         
     | 
| 
      
 516 
     | 
    
         
            +
             
     | 
| 
      
 517 
     | 
    
         
            +
            				QUnit.pushFailure(
         
     | 
| 
      
 518 
     | 
    
         
            +
            					"Called start() while already started (test's semaphore was 0 already)",
         
     | 
| 
      
 519 
     | 
    
         
            +
            					sourceFromStacktrace( 2 )
         
     | 
| 
      
 520 
     | 
    
         
            +
            				);
         
     | 
| 
      
 521 
     | 
    
         
            +
            				return;
         
     | 
| 
      
 522 
     | 
    
         
            +
            			}
         
     | 
| 
      
 523 
     | 
    
         
            +
            		}
         
     | 
| 
      
 524 
     | 
    
         
            +
             
     | 
| 
      
 525 
     | 
    
         
            +
            		resumeProcessing();
         
     | 
| 
      
 526 
     | 
    
         
            +
            	},
         
     | 
| 
      
 527 
     | 
    
         
            +
             
     | 
| 
      
 528 
     | 
    
         
            +
            	// DEPRECATED: QUnit.stop() will be removed in QUnit 2.0.
         
     | 
| 
      
 529 
     | 
    
         
            +
            	stop: function( count ) {
         
     | 
| 
      
 530 
     | 
    
         
            +
             
     | 
| 
      
 531 
     | 
    
         
            +
            		// If there isn't a test running, don't allow QUnit.stop() to be called
         
     | 
| 
      
 532 
     | 
    
         
            +
            		if ( !config.current ) {
         
     | 
| 
      
 533 
     | 
    
         
            +
            			throw new Error( "Called stop() outside of a test context" );
         
     | 
| 
      
 534 
     | 
    
         
            +
            		}
         
     | 
| 
      
 535 
     | 
    
         
            +
             
     | 
| 
      
 536 
     | 
    
         
            +
            		// If a test is running, adjust its semaphore
         
     | 
| 
      
 537 
     | 
    
         
            +
            		config.current.semaphore += count || 1;
         
     | 
| 
      
 538 
     | 
    
         
            +
             
     | 
| 
      
 539 
     | 
    
         
            +
            		pauseProcessing();
         
     | 
| 
      
 540 
     | 
    
         
            +
            	},
         
     | 
| 
      
 541 
     | 
    
         
            +
             
     | 
| 
      
 542 
     | 
    
         
            +
            	config: config,
         
     | 
| 
      
 543 
     | 
    
         
            +
             
     | 
| 
      
 544 
     | 
    
         
            +
            	is: is,
         
     | 
| 
      
 545 
     | 
    
         
            +
             
     | 
| 
      
 546 
     | 
    
         
            +
            	objectType: objectType,
         
     | 
| 
      
 547 
     | 
    
         
            +
             
     | 
| 
      
 548 
     | 
    
         
            +
            	extend: extend,
         
     | 
| 
      
 549 
     | 
    
         
            +
             
     | 
| 
      
 550 
     | 
    
         
            +
            	load: function() {
         
     | 
| 
      
 551 
     | 
    
         
            +
            		config.pageLoaded = true;
         
     | 
| 
      
 552 
     | 
    
         
            +
             
     | 
| 
      
 553 
     | 
    
         
            +
            		// Initialize the configuration options
         
     | 
| 
      
 554 
     | 
    
         
            +
            		extend( config, {
         
     | 
| 
      
 555 
     | 
    
         
            +
            			stats: { all: 0, bad: 0 },
         
     | 
| 
      
 556 
     | 
    
         
            +
            			moduleStats: { all: 0, bad: 0 },
         
     | 
| 
      
 557 
     | 
    
         
            +
            			started: 0,
         
     | 
| 
      
 558 
     | 
    
         
            +
            			updateRate: 1000,
         
     | 
| 
      
 559 
     | 
    
         
            +
            			autostart: true,
         
     | 
| 
      
 560 
     | 
    
         
            +
            			filter: ""
         
     | 
| 
      
 561 
     | 
    
         
            +
            		}, true );
         
     | 
| 
      
 562 
     | 
    
         
            +
             
     | 
| 
      
 563 
     | 
    
         
            +
            		config.blocking = false;
         
     | 
| 
      
 564 
     | 
    
         
            +
             
     | 
| 
      
 565 
     | 
    
         
            +
            		if ( config.autostart ) {
         
     | 
| 
      
 566 
     | 
    
         
            +
            			resumeProcessing();
         
     | 
| 
      
 567 
     | 
    
         
            +
            		}
         
     | 
| 
      
 568 
     | 
    
         
            +
            	},
         
     | 
| 
      
 569 
     | 
    
         
            +
             
     | 
| 
      
 570 
     | 
    
         
            +
            	stack: function( offset ) {
         
     | 
| 
      
 571 
     | 
    
         
            +
            		offset = ( offset || 0 ) + 2;
         
     | 
| 
      
 572 
     | 
    
         
            +
            		return sourceFromStacktrace( offset );
         
     | 
| 
      
 573 
     | 
    
         
            +
            	}
         
     | 
| 
      
 574 
     | 
    
         
            +
            } );
         
     | 
| 
      
 575 
     | 
    
         
            +
             
     | 
| 
      
 576 
     | 
    
         
            +
            registerLoggingCallbacks( QUnit );
         
     | 
| 
      
 577 
     | 
    
         
            +
             
     | 
| 
      
 578 
     | 
    
         
            +
            function begin() {
         
     | 
| 
      
 579 
     | 
    
         
            +
            	var i, l,
         
     | 
| 
      
 580 
     | 
    
         
            +
            		modulesLog = [];
         
     | 
| 
      
 581 
     | 
    
         
            +
             
     | 
| 
      
 582 
     | 
    
         
            +
            	// If the test run hasn't officially begun yet
         
     | 
| 
      
 583 
     | 
    
         
            +
            	if ( !config.started ) {
         
     | 
| 
      
 584 
     | 
    
         
            +
             
     | 
| 
      
 585 
     | 
    
         
            +
            		// Record the time of the test run's beginning
         
     | 
| 
      
 586 
     | 
    
         
            +
            		config.started = now();
         
     | 
| 
      
 587 
     | 
    
         
            +
             
     | 
| 
      
 588 
     | 
    
         
            +
            		verifyLoggingCallbacks();
         
     | 
| 
      
 589 
     | 
    
         
            +
             
     | 
| 
      
 590 
     | 
    
         
            +
            		// Delete the loose unnamed module if unused.
         
     | 
| 
      
 591 
     | 
    
         
            +
            		if ( config.modules[ 0 ].name === "" && config.modules[ 0 ].tests.length === 0 ) {
         
     | 
| 
      
 592 
     | 
    
         
            +
            			config.modules.shift();
         
     | 
| 
      
 593 
     | 
    
         
            +
            		}
         
     | 
| 
      
 594 
     | 
    
         
            +
             
     | 
| 
      
 595 
     | 
    
         
            +
            		// Avoid unnecessary information by not logging modules' test environments
         
     | 
| 
      
 596 
     | 
    
         
            +
            		for ( i = 0, l = config.modules.length; i < l; i++ ) {
         
     | 
| 
      
 597 
     | 
    
         
            +
            			modulesLog.push( {
         
     | 
| 
      
 598 
     | 
    
         
            +
            				name: config.modules[ i ].name,
         
     | 
| 
      
 599 
     | 
    
         
            +
            				tests: config.modules[ i ].tests
         
     | 
| 
      
 600 
     | 
    
         
            +
            			} );
         
     | 
| 
      
 601 
     | 
    
         
            +
            		}
         
     | 
| 
      
 602 
     | 
    
         
            +
             
     | 
| 
      
 603 
     | 
    
         
            +
            		// The test run is officially beginning now
         
     | 
| 
      
 604 
     | 
    
         
            +
            		runLoggingCallbacks( "begin", {
         
     | 
| 
      
 605 
     | 
    
         
            +
            			totalTests: Test.count,
         
     | 
| 
      
 606 
     | 
    
         
            +
            			modules: modulesLog
         
     | 
| 
      
 607 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 608 
     | 
    
         
            +
            	}
         
     | 
| 
      
 609 
     | 
    
         
            +
             
     | 
| 
      
 610 
     | 
    
         
            +
            	config.blocking = false;
         
     | 
| 
      
 611 
     | 
    
         
            +
            	process( true );
         
     | 
| 
      
 612 
     | 
    
         
            +
            }
         
     | 
| 
      
 613 
     | 
    
         
            +
             
     | 
| 
      
 614 
     | 
    
         
            +
            function process( last ) {
         
     | 
| 
      
 615 
     | 
    
         
            +
            	function next() {
         
     | 
| 
      
 616 
     | 
    
         
            +
            		process( last );
         
     | 
| 
      
 617 
     | 
    
         
            +
            	}
         
     | 
| 
      
 618 
     | 
    
         
            +
            	var start = now();
         
     | 
| 
      
 619 
     | 
    
         
            +
            	config.depth = ( config.depth || 0 ) + 1;
         
     | 
| 
      
 620 
     | 
    
         
            +
             
     | 
| 
      
 621 
     | 
    
         
            +
            	while ( config.queue.length && !config.blocking ) {
         
     | 
| 
      
 622 
     | 
    
         
            +
            		if ( !defined.setTimeout || config.updateRate <= 0 ||
         
     | 
| 
      
 623 
     | 
    
         
            +
            				( ( now() - start ) < config.updateRate ) ) {
         
     | 
| 
      
 624 
     | 
    
         
            +
            			if ( config.current ) {
         
     | 
| 
      
 625 
     | 
    
         
            +
             
     | 
| 
      
 626 
     | 
    
         
            +
            				// Reset async tracking for each phase of the Test lifecycle
         
     | 
| 
      
 627 
     | 
    
         
            +
            				config.current.usedAsync = false;
         
     | 
| 
      
 628 
     | 
    
         
            +
            			}
         
     | 
| 
      
 629 
     | 
    
         
            +
            			config.queue.shift()();
         
     | 
| 
      
 630 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 631 
     | 
    
         
            +
            			setTimeout( next, 13 );
         
     | 
| 
      
 632 
     | 
    
         
            +
            			break;
         
     | 
| 
      
 633 
     | 
    
         
            +
            		}
         
     | 
| 
      
 634 
     | 
    
         
            +
            	}
         
     | 
| 
      
 635 
     | 
    
         
            +
            	config.depth--;
         
     | 
| 
      
 636 
     | 
    
         
            +
            	if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
         
     | 
| 
      
 637 
     | 
    
         
            +
            		done();
         
     | 
| 
      
 638 
     | 
    
         
            +
            	}
         
     | 
| 
      
 639 
     | 
    
         
            +
            }
         
     | 
| 
      
 640 
     | 
    
         
            +
             
     | 
| 
      
 641 
     | 
    
         
            +
            function pauseProcessing() {
         
     | 
| 
      
 642 
     | 
    
         
            +
            	config.blocking = true;
         
     | 
| 
      
 643 
     | 
    
         
            +
             
     | 
| 
      
 644 
     | 
    
         
            +
            	if ( config.testTimeout && defined.setTimeout ) {
         
     | 
| 
      
 645 
     | 
    
         
            +
            		clearTimeout( config.timeout );
         
     | 
| 
      
 646 
     | 
    
         
            +
            		config.timeout = setTimeout( function() {
         
     | 
| 
      
 647 
     | 
    
         
            +
            			if ( config.current ) {
         
     | 
| 
      
 648 
     | 
    
         
            +
            				config.current.semaphore = 0;
         
     | 
| 
      
 649 
     | 
    
         
            +
            				QUnit.pushFailure( "Test timed out", sourceFromStacktrace( 2 ) );
         
     | 
| 
      
 650 
     | 
    
         
            +
            			} else {
         
     | 
| 
      
 651 
     | 
    
         
            +
            				throw new Error( "Test timed out" );
         
     | 
| 
      
 652 
     | 
    
         
            +
            			}
         
     | 
| 
      
 653 
     | 
    
         
            +
            			resumeProcessing();
         
     | 
| 
      
 654 
     | 
    
         
            +
            		}, config.testTimeout );
         
     | 
| 
      
 655 
     | 
    
         
            +
            	}
         
     | 
| 
      
 656 
     | 
    
         
            +
            }
         
     | 
| 
      
 657 
     | 
    
         
            +
             
     | 
| 
      
 658 
     | 
    
         
            +
            function resumeProcessing() {
         
     | 
| 
      
 659 
     | 
    
         
            +
            	runStarted = true;
         
     | 
| 
      
 660 
     | 
    
         
            +
             
     | 
| 
      
 661 
     | 
    
         
            +
            	// A slight delay to allow this iteration of the event loop to finish (more assertions, etc.)
         
     | 
| 
      
 662 
     | 
    
         
            +
            	if ( defined.setTimeout ) {
         
     | 
| 
      
 663 
     | 
    
         
            +
            		setTimeout( function() {
         
     | 
| 
      
 664 
     | 
    
         
            +
            			if ( config.current && config.current.semaphore > 0 ) {
         
     | 
| 
      
 665 
     | 
    
         
            +
            				return;
         
     | 
| 
      
 666 
     | 
    
         
            +
            			}
         
     | 
| 
      
 667 
     | 
    
         
            +
            			if ( config.timeout ) {
         
     | 
| 
      
 668 
     | 
    
         
            +
            				clearTimeout( config.timeout );
         
     | 
| 
      
 669 
     | 
    
         
            +
            			}
         
     | 
| 
      
 670 
     | 
    
         
            +
             
     | 
| 
      
 671 
     | 
    
         
            +
            			begin();
         
     | 
| 
      
 672 
     | 
    
         
            +
            		}, 13 );
         
     | 
| 
      
 673 
     | 
    
         
            +
            	} else {
         
     | 
| 
      
 674 
     | 
    
         
            +
            		begin();
         
     | 
| 
      
 675 
     | 
    
         
            +
            	}
         
     | 
| 
      
 676 
     | 
    
         
            +
            }
         
     | 
| 
      
 677 
     | 
    
         
            +
             
     | 
| 
      
 678 
     | 
    
         
            +
            function done() {
         
     | 
| 
      
 679 
     | 
    
         
            +
            	var runtime, passed;
         
     | 
| 
      
 680 
     | 
    
         
            +
             
     | 
| 
      
 681 
     | 
    
         
            +
            	config.autorun = true;
         
     | 
| 
      
 682 
     | 
    
         
            +
             
     | 
| 
      
 683 
     | 
    
         
            +
            	// Log the last module results
         
     | 
| 
      
 684 
     | 
    
         
            +
            	if ( config.previousModule ) {
         
     | 
| 
      
 685 
     | 
    
         
            +
            		runLoggingCallbacks( "moduleDone", {
         
     | 
| 
      
 686 
     | 
    
         
            +
            			name: config.previousModule.name,
         
     | 
| 
      
 687 
     | 
    
         
            +
            			tests: config.previousModule.tests,
         
     | 
| 
      
 688 
     | 
    
         
            +
            			failed: config.moduleStats.bad,
         
     | 
| 
      
 689 
     | 
    
         
            +
            			passed: config.moduleStats.all - config.moduleStats.bad,
         
     | 
| 
      
 690 
     | 
    
         
            +
            			total: config.moduleStats.all,
         
     | 
| 
      
 691 
     | 
    
         
            +
            			runtime: now() - config.moduleStats.started
         
     | 
| 
      
 692 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 693 
     | 
    
         
            +
            	}
         
     | 
| 
      
 694 
     | 
    
         
            +
            	delete config.previousModule;
         
     | 
| 
      
 695 
     | 
    
         
            +
             
     | 
| 
      
 696 
     | 
    
         
            +
            	runtime = now() - config.started;
         
     | 
| 
      
 697 
     | 
    
         
            +
            	passed = config.stats.all - config.stats.bad;
         
     | 
| 
      
 698 
     | 
    
         
            +
             
     | 
| 
      
 699 
     | 
    
         
            +
            	runLoggingCallbacks( "done", {
         
     | 
| 
      
 700 
     | 
    
         
            +
            		failed: config.stats.bad,
         
     | 
| 
      
 701 
     | 
    
         
            +
            		passed: passed,
         
     | 
| 
      
 702 
     | 
    
         
            +
            		total: config.stats.all,
         
     | 
| 
      
 703 
     | 
    
         
            +
            		runtime: runtime
         
     | 
| 
      
 704 
     | 
    
         
            +
            	} );
         
     | 
| 
      
 705 
     | 
    
         
            +
            }
         
     | 
| 
      
 706 
     | 
    
         
            +
             
     | 
| 
      
 707 
     | 
    
         
            +
            function setHook( module, hookName ) {
         
     | 
| 
      
 708 
     | 
    
         
            +
            	if ( module.testEnvironment === undefined ) {
         
     | 
| 
      
 709 
     | 
    
         
            +
            		module.testEnvironment = {};
         
     | 
| 
      
 710 
     | 
    
         
            +
            	}
         
     | 
| 
      
 711 
     | 
    
         
            +
             
     | 
| 
      
 712 
     | 
    
         
            +
            	return function( callback ) {
         
     | 
| 
      
 713 
     | 
    
         
            +
            		module.testEnvironment[ hookName ] = callback;
         
     | 
| 
      
 714 
     | 
    
         
            +
            	};
         
     | 
| 
      
 715 
     | 
    
         
            +
            }
         
     | 
| 
      
 716 
     | 
    
         
            +
             
     | 
| 
      
 717 
     | 
    
         
            +
            var focused = false;
         
     | 
| 
      
 718 
     | 
    
         
            +
            var priorityCount = 0;
         
     | 
| 
      
 719 
     | 
    
         
            +
            var unitSampler;
         
     | 
| 
      
 720 
     | 
    
         
            +
             
     | 
| 
      
 721 
     | 
    
         
            +
            function Test( settings ) {
         
     | 
| 
      
 722 
     | 
    
         
            +
            	var i, l;
         
     | 
| 
      
 723 
     | 
    
         
            +
             
     | 
| 
      
 724 
     | 
    
         
            +
            	++Test.count;
         
     | 
| 
      
 725 
     | 
    
         
            +
             
     | 
| 
      
 726 
     | 
    
         
            +
            	extend( this, settings );
         
     | 
| 
      
 727 
     | 
    
         
            +
            	this.assertions = [];
         
     | 
| 
      
 728 
     | 
    
         
            +
            	this.semaphore = 0;
         
     | 
| 
      
 729 
     | 
    
         
            +
            	this.usedAsync = false;
         
     | 
| 
      
 730 
     | 
    
         
            +
            	this.module = config.currentModule;
         
     | 
| 
      
 731 
     | 
    
         
            +
            	this.stack = sourceFromStacktrace( 3 );
         
     | 
| 
      
 732 
     | 
    
         
            +
             
     | 
| 
      
 733 
     | 
    
         
            +
            	// Register unique strings
         
     | 
| 
      
 734 
     | 
    
         
            +
            	for ( i = 0, l = this.module.tests; i < l.length; i++ ) {
         
     | 
| 
      
 735 
     | 
    
         
            +
            		if ( this.module.tests[ i ].name === this.testName ) {
         
     | 
| 
      
 736 
     | 
    
         
            +
            			this.testName += " ";
         
     | 
| 
      
 737 
     | 
    
         
            +
            		}
         
     | 
| 
      
 738 
     | 
    
         
            +
            	}
         
     | 
| 
      
 739 
     | 
    
         
            +
             
     | 
| 
      
 740 
     | 
    
         
            +
            	this.testId = generateHash( this.module.name, this.testName );
         
     | 
| 
      
 741 
     | 
    
         
            +
             
     | 
| 
      
 742 
     | 
    
         
            +
            	this.module.tests.push( {
         
     | 
| 
      
 743 
     | 
    
         
            +
            		name: this.testName,
         
     | 
| 
      
 744 
     | 
    
         
            +
            		testId: this.testId
         
     | 
| 
      
 745 
     | 
    
         
            +
            	} );
         
     | 
| 
      
 746 
     | 
    
         
            +
             
     | 
| 
      
 747 
     | 
    
         
            +
            	if ( settings.skip ) {
         
     | 
| 
      
 748 
     | 
    
         
            +
             
     | 
| 
      
 749 
     | 
    
         
            +
            		// Skipped tests will fully ignore any sent callback
         
     | 
| 
      
 750 
     | 
    
         
            +
            		this.callback = function() {};
         
     | 
| 
      
 751 
     | 
    
         
            +
            		this.async = false;
         
     | 
| 
      
 752 
     | 
    
         
            +
            		this.expected = 0;
         
     | 
| 
      
 753 
     | 
    
         
            +
            	} else {
         
     | 
| 
      
 754 
     | 
    
         
            +
            		this.assert = new Assert( this );
         
     | 
| 
      
 755 
     | 
    
         
            +
            	}
         
     | 
| 
      
 756 
     | 
    
         
            +
            }
         
     | 
| 
      
 757 
     | 
    
         
            +
             
     | 
| 
      
 758 
     | 
    
         
            +
            Test.count = 0;
         
     | 
| 
      
 759 
     | 
    
         
            +
             
     | 
| 
      
 760 
     | 
    
         
            +
            Test.prototype = {
         
     | 
| 
      
 761 
     | 
    
         
            +
            	before: function() {
         
     | 
| 
      
 762 
     | 
    
         
            +
            		if (
         
     | 
| 
      
 763 
     | 
    
         
            +
             
     | 
| 
      
 764 
     | 
    
         
            +
            			// Emit moduleStart when we're switching from one module to another
         
     | 
| 
      
 765 
     | 
    
         
            +
            			this.module !== config.previousModule ||
         
     | 
| 
      
 766 
     | 
    
         
            +
             
     | 
| 
      
 767 
     | 
    
         
            +
            				// They could be equal (both undefined) but if the previousModule property doesn't
         
     | 
| 
      
 768 
     | 
    
         
            +
            				// yet exist it means this is the first test in a suite that isn't wrapped in a
         
     | 
| 
      
 769 
     | 
    
         
            +
            				// module, in which case we'll just emit a moduleStart event for 'undefined'.
         
     | 
| 
      
 770 
     | 
    
         
            +
            				// Without this, reporters can get testStart before moduleStart  which is a problem.
         
     | 
| 
      
 771 
     | 
    
         
            +
            				!hasOwn.call( config, "previousModule" )
         
     | 
| 
      
 772 
     | 
    
         
            +
            		) {
         
     | 
| 
      
 773 
     | 
    
         
            +
            			if ( hasOwn.call( config, "previousModule" ) ) {
         
     | 
| 
      
 774 
     | 
    
         
            +
            				runLoggingCallbacks( "moduleDone", {
         
     | 
| 
      
 775 
     | 
    
         
            +
            					name: config.previousModule.name,
         
     | 
| 
      
 776 
     | 
    
         
            +
            					tests: config.previousModule.tests,
         
     | 
| 
      
 777 
     | 
    
         
            +
            					failed: config.moduleStats.bad,
         
     | 
| 
      
 778 
     | 
    
         
            +
            					passed: config.moduleStats.all - config.moduleStats.bad,
         
     | 
| 
      
 779 
     | 
    
         
            +
            					total: config.moduleStats.all,
         
     | 
| 
      
 780 
     | 
    
         
            +
            					runtime: now() - config.moduleStats.started
         
     | 
| 
      
 781 
     | 
    
         
            +
            				} );
         
     | 
| 
      
 782 
     | 
    
         
            +
            			}
         
     | 
| 
      
 783 
     | 
    
         
            +
            			config.previousModule = this.module;
         
     | 
| 
      
 784 
     | 
    
         
            +
            			config.moduleStats = { all: 0, bad: 0, started: now() };
         
     | 
| 
      
 785 
     | 
    
         
            +
            			runLoggingCallbacks( "moduleStart", {
         
     | 
| 
      
 786 
     | 
    
         
            +
            				name: this.module.name,
         
     | 
| 
      
 787 
     | 
    
         
            +
            				tests: this.module.tests
         
     | 
| 
      
 788 
     | 
    
         
            +
            			} );
         
     | 
| 
      
 789 
     | 
    
         
            +
            		}
         
     | 
| 
      
 790 
     | 
    
         
            +
             
     | 
| 
      
 791 
     | 
    
         
            +
            		config.current = this;
         
     | 
| 
      
 792 
     | 
    
         
            +
             
     | 
| 
      
 793 
     | 
    
         
            +
            		if ( this.module.testEnvironment ) {
         
     | 
| 
      
 794 
     | 
    
         
            +
            			delete this.module.testEnvironment.beforeEach;
         
     | 
| 
      
 795 
     | 
    
         
            +
            			delete this.module.testEnvironment.afterEach;
         
     | 
| 
      
 796 
     | 
    
         
            +
            		}
         
     | 
| 
      
 797 
     | 
    
         
            +
            		this.testEnvironment = extend( {}, this.module.testEnvironment );
         
     | 
| 
      
 798 
     | 
    
         
            +
             
     | 
| 
      
 799 
     | 
    
         
            +
            		this.started = now();
         
     | 
| 
      
 800 
     | 
    
         
            +
            		runLoggingCallbacks( "testStart", {
         
     | 
| 
      
 801 
     | 
    
         
            +
            			name: this.testName,
         
     | 
| 
      
 802 
     | 
    
         
            +
            			module: this.module.name,
         
     | 
| 
      
 803 
     | 
    
         
            +
            			testId: this.testId
         
     | 
| 
      
 804 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 805 
     | 
    
         
            +
             
     | 
| 
      
 806 
     | 
    
         
            +
            		if ( !config.pollution ) {
         
     | 
| 
      
 807 
     | 
    
         
            +
            			saveGlobal();
         
     | 
| 
      
 808 
     | 
    
         
            +
            		}
         
     | 
| 
      
 809 
     | 
    
         
            +
            	},
         
     | 
| 
      
 810 
     | 
    
         
            +
             
     | 
| 
      
 811 
     | 
    
         
            +
            	run: function() {
         
     | 
| 
      
 812 
     | 
    
         
            +
            		var promise;
         
     | 
| 
      
 813 
     | 
    
         
            +
             
     | 
| 
      
 814 
     | 
    
         
            +
            		config.current = this;
         
     | 
| 
      
 815 
     | 
    
         
            +
             
     | 
| 
      
 816 
     | 
    
         
            +
            		if ( this.async ) {
         
     | 
| 
      
 817 
     | 
    
         
            +
            			QUnit.stop();
         
     | 
| 
      
 818 
     | 
    
         
            +
            		}
         
     | 
| 
      
 819 
     | 
    
         
            +
             
     | 
| 
      
 820 
     | 
    
         
            +
            		this.callbackStarted = now();
         
     | 
| 
      
 821 
     | 
    
         
            +
             
     | 
| 
      
 822 
     | 
    
         
            +
            		if ( config.notrycatch ) {
         
     | 
| 
      
 823 
     | 
    
         
            +
            			runTest( this );
         
     | 
| 
      
 824 
     | 
    
         
            +
            			return;
         
     | 
| 
      
 825 
     | 
    
         
            +
            		}
         
     | 
| 
      
 826 
     | 
    
         
            +
             
     | 
| 
      
 827 
     | 
    
         
            +
            		try {
         
     | 
| 
      
 828 
     | 
    
         
            +
            			runTest( this );
         
     | 
| 
      
 829 
     | 
    
         
            +
            		} catch ( e ) {
         
     | 
| 
      
 830 
     | 
    
         
            +
            			this.pushFailure( "Died on test #" + ( this.assertions.length + 1 ) + " " +
         
     | 
| 
      
 831 
     | 
    
         
            +
            				this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
         
     | 
| 
      
 832 
     | 
    
         
            +
             
     | 
| 
      
 833 
     | 
    
         
            +
            			// Else next test will carry the responsibility
         
     | 
| 
      
 834 
     | 
    
         
            +
            			saveGlobal();
         
     | 
| 
      
 835 
     | 
    
         
            +
             
     | 
| 
      
 836 
     | 
    
         
            +
            			// Restart the tests if they're blocking
         
     | 
| 
      
 837 
     | 
    
         
            +
            			if ( config.blocking ) {
         
     | 
| 
      
 838 
     | 
    
         
            +
            				QUnit.start();
         
     | 
| 
      
 839 
     | 
    
         
            +
            			}
         
     | 
| 
      
 840 
     | 
    
         
            +
            		}
         
     | 
| 
      
 841 
     | 
    
         
            +
             
     | 
| 
      
 842 
     | 
    
         
            +
            		function runTest( test ) {
         
     | 
| 
      
 843 
     | 
    
         
            +
            			promise = test.callback.call( test.testEnvironment, test.assert );
         
     | 
| 
      
 844 
     | 
    
         
            +
            			test.resolvePromise( promise );
         
     | 
| 
      
 845 
     | 
    
         
            +
            		}
         
     | 
| 
      
 846 
     | 
    
         
            +
            	},
         
     | 
| 
      
 847 
     | 
    
         
            +
             
     | 
| 
      
 848 
     | 
    
         
            +
            	after: function() {
         
     | 
| 
      
 849 
     | 
    
         
            +
            		checkPollution();
         
     | 
| 
      
 850 
     | 
    
         
            +
            	},
         
     | 
| 
      
 851 
     | 
    
         
            +
             
     | 
| 
      
 852 
     | 
    
         
            +
            	queueHook: function( hook, hookName ) {
         
     | 
| 
      
 853 
     | 
    
         
            +
            		var promise,
         
     | 
| 
      
 854 
     | 
    
         
            +
            			test = this;
         
     | 
| 
      
 855 
     | 
    
         
            +
            		return function runHook() {
         
     | 
| 
      
 856 
     | 
    
         
            +
            			config.current = test;
         
     | 
| 
      
 857 
     | 
    
         
            +
            			if ( config.notrycatch ) {
         
     | 
| 
      
 858 
     | 
    
         
            +
            				callHook();
         
     | 
| 
      
 859 
     | 
    
         
            +
            				return;
         
     | 
| 
      
 860 
     | 
    
         
            +
            			}
         
     | 
| 
      
 861 
     | 
    
         
            +
            			try {
         
     | 
| 
      
 862 
     | 
    
         
            +
            				callHook();
         
     | 
| 
      
 863 
     | 
    
         
            +
            			} catch ( error ) {
         
     | 
| 
      
 864 
     | 
    
         
            +
            				test.pushFailure( hookName + " failed on " + test.testName + ": " +
         
     | 
| 
      
 865 
     | 
    
         
            +
            				( error.message || error ), extractStacktrace( error, 0 ) );
         
     | 
| 
      
 866 
     | 
    
         
            +
            			}
         
     | 
| 
      
 867 
     | 
    
         
            +
             
     | 
| 
      
 868 
     | 
    
         
            +
            			function callHook() {
         
     | 
| 
      
 869 
     | 
    
         
            +
            				promise = hook.call( test.testEnvironment, test.assert );
         
     | 
| 
      
 870 
     | 
    
         
            +
            				test.resolvePromise( promise, hookName );
         
     | 
| 
      
 871 
     | 
    
         
            +
            			}
         
     | 
| 
      
 872 
     | 
    
         
            +
            		};
         
     | 
| 
      
 873 
     | 
    
         
            +
            	},
         
     | 
| 
      
 874 
     | 
    
         
            +
             
     | 
| 
      
 875 
     | 
    
         
            +
            	// Currently only used for module level hooks, can be used to add global level ones
         
     | 
| 
      
 876 
     | 
    
         
            +
            	hooks: function( handler ) {
         
     | 
| 
      
 877 
     | 
    
         
            +
            		var hooks = [];
         
     | 
| 
      
 878 
     | 
    
         
            +
             
     | 
| 
      
 879 
     | 
    
         
            +
            		function processHooks( test, module ) {
         
     | 
| 
      
 880 
     | 
    
         
            +
            			if ( module.parentModule ) {
         
     | 
| 
      
 881 
     | 
    
         
            +
            				processHooks( test, module.parentModule );
         
     | 
| 
      
 882 
     | 
    
         
            +
            			}
         
     | 
| 
      
 883 
     | 
    
         
            +
            			if ( module.testEnvironment &&
         
     | 
| 
      
 884 
     | 
    
         
            +
            				QUnit.objectType( module.testEnvironment[ handler ] ) === "function" ) {
         
     | 
| 
      
 885 
     | 
    
         
            +
            				hooks.push( test.queueHook( module.testEnvironment[ handler ], handler ) );
         
     | 
| 
      
 886 
     | 
    
         
            +
            			}
         
     | 
| 
      
 887 
     | 
    
         
            +
            		}
         
     | 
| 
      
 888 
     | 
    
         
            +
             
     | 
| 
      
 889 
     | 
    
         
            +
            		// Hooks are ignored on skipped tests
         
     | 
| 
      
 890 
     | 
    
         
            +
            		if ( !this.skip ) {
         
     | 
| 
      
 891 
     | 
    
         
            +
            			processHooks( this, this.module );
         
     | 
| 
      
 892 
     | 
    
         
            +
            		}
         
     | 
| 
      
 893 
     | 
    
         
            +
            		return hooks;
         
     | 
| 
      
 894 
     | 
    
         
            +
            	},
         
     | 
| 
      
 895 
     | 
    
         
            +
             
     | 
| 
      
 896 
     | 
    
         
            +
            	finish: function() {
         
     | 
| 
      
 897 
     | 
    
         
            +
            		config.current = this;
         
     | 
| 
      
 898 
     | 
    
         
            +
            		if ( config.requireExpects && this.expected === null ) {
         
     | 
| 
      
 899 
     | 
    
         
            +
            			this.pushFailure( "Expected number of assertions to be defined, but expect() was " +
         
     | 
| 
      
 900 
     | 
    
         
            +
            				"not called.", this.stack );
         
     | 
| 
      
 901 
     | 
    
         
            +
            		} else if ( this.expected !== null && this.expected !== this.assertions.length ) {
         
     | 
| 
      
 902 
     | 
    
         
            +
            			this.pushFailure( "Expected " + this.expected + " assertions, but " +
         
     | 
| 
      
 903 
     | 
    
         
            +
            				this.assertions.length + " were run", this.stack );
         
     | 
| 
      
 904 
     | 
    
         
            +
            		} else if ( this.expected === null && !this.assertions.length ) {
         
     | 
| 
      
 905 
     | 
    
         
            +
            			this.pushFailure( "Expected at least one assertion, but none were run - call " +
         
     | 
| 
      
 906 
     | 
    
         
            +
            				"expect(0) to accept zero assertions.", this.stack );
         
     | 
| 
      
 907 
     | 
    
         
            +
            		}
         
     | 
| 
      
 908 
     | 
    
         
            +
             
     | 
| 
      
 909 
     | 
    
         
            +
            		var i,
         
     | 
| 
      
 910 
     | 
    
         
            +
            			bad = 0;
         
     | 
| 
      
 911 
     | 
    
         
            +
             
     | 
| 
      
 912 
     | 
    
         
            +
            		this.runtime = now() - this.started;
         
     | 
| 
      
 913 
     | 
    
         
            +
            		config.stats.all += this.assertions.length;
         
     | 
| 
      
 914 
     | 
    
         
            +
            		config.moduleStats.all += this.assertions.length;
         
     | 
| 
      
 915 
     | 
    
         
            +
             
     | 
| 
      
 916 
     | 
    
         
            +
            		for ( i = 0; i < this.assertions.length; i++ ) {
         
     | 
| 
      
 917 
     | 
    
         
            +
            			if ( !this.assertions[ i ].result ) {
         
     | 
| 
      
 918 
     | 
    
         
            +
            				bad++;
         
     | 
| 
      
 919 
     | 
    
         
            +
            				config.stats.bad++;
         
     | 
| 
      
 920 
     | 
    
         
            +
            				config.moduleStats.bad++;
         
     | 
| 
      
 921 
     | 
    
         
            +
            			}
         
     | 
| 
      
 922 
     | 
    
         
            +
            		}
         
     | 
| 
      
 923 
     | 
    
         
            +
             
     | 
| 
      
 924 
     | 
    
         
            +
            		runLoggingCallbacks( "testDone", {
         
     | 
| 
      
 925 
     | 
    
         
            +
            			name: this.testName,
         
     | 
| 
      
 926 
     | 
    
         
            +
            			module: this.module.name,
         
     | 
| 
      
 927 
     | 
    
         
            +
            			skipped: !!this.skip,
         
     | 
| 
      
 928 
     | 
    
         
            +
            			failed: bad,
         
     | 
| 
      
 929 
     | 
    
         
            +
            			passed: this.assertions.length - bad,
         
     | 
| 
      
 930 
     | 
    
         
            +
            			total: this.assertions.length,
         
     | 
| 
      
 931 
     | 
    
         
            +
            			runtime: this.runtime,
         
     | 
| 
      
 932 
     | 
    
         
            +
             
     | 
| 
      
 933 
     | 
    
         
            +
            			// HTML Reporter use
         
     | 
| 
      
 934 
     | 
    
         
            +
            			assertions: this.assertions,
         
     | 
| 
      
 935 
     | 
    
         
            +
            			testId: this.testId,
         
     | 
| 
      
 936 
     | 
    
         
            +
             
     | 
| 
      
 937 
     | 
    
         
            +
            			// Source of Test
         
     | 
| 
      
 938 
     | 
    
         
            +
            			source: this.stack,
         
     | 
| 
      
 939 
     | 
    
         
            +
             
     | 
| 
      
 940 
     | 
    
         
            +
            			// DEPRECATED: this property will be removed in 2.0.0, use runtime instead
         
     | 
| 
      
 941 
     | 
    
         
            +
            			duration: this.runtime
         
     | 
| 
      
 942 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 943 
     | 
    
         
            +
             
     | 
| 
      
 944 
     | 
    
         
            +
            		// QUnit.reset() is deprecated and will be replaced for a new
         
     | 
| 
      
 945 
     | 
    
         
            +
            		// fixture reset function on QUnit 2.0/2.1.
         
     | 
| 
      
 946 
     | 
    
         
            +
            		// It's still called here for backwards compatibility handling
         
     | 
| 
      
 947 
     | 
    
         
            +
            		QUnit.reset();
         
     | 
| 
      
 948 
     | 
    
         
            +
             
     | 
| 
      
 949 
     | 
    
         
            +
            		config.current = undefined;
         
     | 
| 
      
 950 
     | 
    
         
            +
            	},
         
     | 
| 
      
 951 
     | 
    
         
            +
             
     | 
| 
      
 952 
     | 
    
         
            +
            	queue: function() {
         
     | 
| 
      
 953 
     | 
    
         
            +
            		var priority,
         
     | 
| 
      
 954 
     | 
    
         
            +
            			test = this;
         
     | 
| 
      
 955 
     | 
    
         
            +
             
     | 
| 
      
 956 
     | 
    
         
            +
            		if ( !this.valid() ) {
         
     | 
| 
      
 957 
     | 
    
         
            +
            			return;
         
     | 
| 
      
 958 
     | 
    
         
            +
            		}
         
     | 
| 
      
 959 
     | 
    
         
            +
             
     | 
| 
      
 960 
     | 
    
         
            +
            		function run() {
         
     | 
| 
      
 961 
     | 
    
         
            +
             
     | 
| 
      
 962 
     | 
    
         
            +
            			// Each of these can by async
         
     | 
| 
      
 963 
     | 
    
         
            +
            			synchronize( [
         
     | 
| 
      
 964 
     | 
    
         
            +
            				function() {
         
     | 
| 
      
 965 
     | 
    
         
            +
            					test.before();
         
     | 
| 
      
 966 
     | 
    
         
            +
            				},
         
     | 
| 
      
 967 
     | 
    
         
            +
             
     | 
| 
      
 968 
     | 
    
         
            +
            				test.hooks( "beforeEach" ),
         
     | 
| 
      
 969 
     | 
    
         
            +
            				function() {
         
     | 
| 
      
 970 
     | 
    
         
            +
            					test.run();
         
     | 
| 
      
 971 
     | 
    
         
            +
            				},
         
     | 
| 
      
 972 
     | 
    
         
            +
             
     | 
| 
      
 973 
     | 
    
         
            +
            				test.hooks( "afterEach" ).reverse(),
         
     | 
| 
      
 974 
     | 
    
         
            +
             
     | 
| 
      
 975 
     | 
    
         
            +
            				function() {
         
     | 
| 
      
 976 
     | 
    
         
            +
            					test.after();
         
     | 
| 
      
 977 
     | 
    
         
            +
            				},
         
     | 
| 
      
 978 
     | 
    
         
            +
            				function() {
         
     | 
| 
      
 979 
     | 
    
         
            +
            					test.finish();
         
     | 
| 
      
 980 
     | 
    
         
            +
            				}
         
     | 
| 
      
 981 
     | 
    
         
            +
            			] );
         
     | 
| 
      
 982 
     | 
    
         
            +
            		}
         
     | 
| 
      
 983 
     | 
    
         
            +
             
     | 
| 
      
 984 
     | 
    
         
            +
            		// Prioritize previously failed tests, detected from sessionStorage
         
     | 
| 
      
 985 
     | 
    
         
            +
            		priority = QUnit.config.reorder && defined.sessionStorage &&
         
     | 
| 
      
 986 
     | 
    
         
            +
            				+sessionStorage.getItem( "qunit-test-" + this.module.name + "-" + this.testName );
         
     | 
| 
      
 987 
     | 
    
         
            +
             
     | 
| 
      
 988 
     | 
    
         
            +
            		return synchronize( run, priority, config.seed );
         
     | 
| 
      
 989 
     | 
    
         
            +
            	},
         
     | 
| 
      
 990 
     | 
    
         
            +
             
     | 
| 
      
 991 
     | 
    
         
            +
            	pushResult: function( resultInfo ) {
         
     | 
| 
      
 992 
     | 
    
         
            +
             
     | 
| 
      
 993 
     | 
    
         
            +
            		// Destructure of resultInfo = { result, actual, expected, message, negative }
         
     | 
| 
      
 994 
     | 
    
         
            +
            		var source,
         
     | 
| 
      
 995 
     | 
    
         
            +
            			details = {
         
     | 
| 
      
 996 
     | 
    
         
            +
            				module: this.module.name,
         
     | 
| 
      
 997 
     | 
    
         
            +
            				name: this.testName,
         
     | 
| 
      
 998 
     | 
    
         
            +
            				result: resultInfo.result,
         
     | 
| 
      
 999 
     | 
    
         
            +
            				message: resultInfo.message,
         
     | 
| 
      
 1000 
     | 
    
         
            +
            				actual: resultInfo.actual,
         
     | 
| 
      
 1001 
     | 
    
         
            +
            				expected: resultInfo.expected,
         
     | 
| 
      
 1002 
     | 
    
         
            +
            				testId: this.testId,
         
     | 
| 
      
 1003 
     | 
    
         
            +
            				negative: resultInfo.negative || false,
         
     | 
| 
      
 1004 
     | 
    
         
            +
            				runtime: now() - this.started
         
     | 
| 
      
 1005 
     | 
    
         
            +
            			};
         
     | 
| 
      
 1006 
     | 
    
         
            +
             
     | 
| 
      
 1007 
     | 
    
         
            +
            		if ( !resultInfo.result ) {
         
     | 
| 
      
 1008 
     | 
    
         
            +
            			source = sourceFromStacktrace();
         
     | 
| 
      
 1009 
     | 
    
         
            +
             
     | 
| 
      
 1010 
     | 
    
         
            +
            			if ( source ) {
         
     | 
| 
      
 1011 
     | 
    
         
            +
            				details.source = source;
         
     | 
| 
      
 1012 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1013 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1014 
     | 
    
         
            +
             
     | 
| 
      
 1015 
     | 
    
         
            +
            		runLoggingCallbacks( "log", details );
         
     | 
| 
      
 1016 
     | 
    
         
            +
             
     | 
| 
      
 1017 
     | 
    
         
            +
            		this.assertions.push( {
         
     | 
| 
      
 1018 
     | 
    
         
            +
            			result: !!resultInfo.result,
         
     | 
| 
      
 1019 
     | 
    
         
            +
            			message: resultInfo.message
         
     | 
| 
      
 1020 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 1021 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1022 
     | 
    
         
            +
             
     | 
| 
      
 1023 
     | 
    
         
            +
            	pushFailure: function( message, source, actual ) {
         
     | 
| 
      
 1024 
     | 
    
         
            +
            		if ( !( this instanceof Test ) ) {
         
     | 
| 
      
 1025 
     | 
    
         
            +
            			throw new Error( "pushFailure() assertion outside test context, was " +
         
     | 
| 
      
 1026 
     | 
    
         
            +
            				sourceFromStacktrace( 2 ) );
         
     | 
| 
      
 1027 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1028 
     | 
    
         
            +
             
     | 
| 
      
 1029 
     | 
    
         
            +
            		var details = {
         
     | 
| 
      
 1030 
     | 
    
         
            +
            				module: this.module.name,
         
     | 
| 
      
 1031 
     | 
    
         
            +
            				name: this.testName,
         
     | 
| 
      
 1032 
     | 
    
         
            +
            				result: false,
         
     | 
| 
      
 1033 
     | 
    
         
            +
            				message: message || "error",
         
     | 
| 
      
 1034 
     | 
    
         
            +
            				actual: actual || null,
         
     | 
| 
      
 1035 
     | 
    
         
            +
            				testId: this.testId,
         
     | 
| 
      
 1036 
     | 
    
         
            +
            				runtime: now() - this.started
         
     | 
| 
      
 1037 
     | 
    
         
            +
            			};
         
     | 
| 
      
 1038 
     | 
    
         
            +
             
     | 
| 
      
 1039 
     | 
    
         
            +
            		if ( source ) {
         
     | 
| 
      
 1040 
     | 
    
         
            +
            			details.source = source;
         
     | 
| 
      
 1041 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1042 
     | 
    
         
            +
             
     | 
| 
      
 1043 
     | 
    
         
            +
            		runLoggingCallbacks( "log", details );
         
     | 
| 
      
 1044 
     | 
    
         
            +
             
     | 
| 
      
 1045 
     | 
    
         
            +
            		this.assertions.push( {
         
     | 
| 
      
 1046 
     | 
    
         
            +
            			result: false,
         
     | 
| 
      
 1047 
     | 
    
         
            +
            			message: message
         
     | 
| 
      
 1048 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 1049 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1050 
     | 
    
         
            +
             
     | 
| 
      
 1051 
     | 
    
         
            +
            	resolvePromise: function( promise, phase ) {
         
     | 
| 
      
 1052 
     | 
    
         
            +
            		var then, message,
         
     | 
| 
      
 1053 
     | 
    
         
            +
            			test = this;
         
     | 
| 
      
 1054 
     | 
    
         
            +
            		if ( promise != null ) {
         
     | 
| 
      
 1055 
     | 
    
         
            +
            			then = promise.then;
         
     | 
| 
      
 1056 
     | 
    
         
            +
            			if ( QUnit.objectType( then ) === "function" ) {
         
     | 
| 
      
 1057 
     | 
    
         
            +
            				QUnit.stop();
         
     | 
| 
      
 1058 
     | 
    
         
            +
            				then.call(
         
     | 
| 
      
 1059 
     | 
    
         
            +
            					promise,
         
     | 
| 
      
 1060 
     | 
    
         
            +
            					function() { QUnit.start(); },
         
     | 
| 
      
 1061 
     | 
    
         
            +
            					function( error ) {
         
     | 
| 
      
 1062 
     | 
    
         
            +
            						message = "Promise rejected " +
         
     | 
| 
      
 1063 
     | 
    
         
            +
            							( !phase ? "during" : phase.replace( /Each$/, "" ) ) +
         
     | 
| 
      
 1064 
     | 
    
         
            +
            							" " + test.testName + ": " + ( error.message || error );
         
     | 
| 
      
 1065 
     | 
    
         
            +
            						test.pushFailure( message, extractStacktrace( error, 0 ) );
         
     | 
| 
      
 1066 
     | 
    
         
            +
             
     | 
| 
      
 1067 
     | 
    
         
            +
            						// Else next test will carry the responsibility
         
     | 
| 
      
 1068 
     | 
    
         
            +
            						saveGlobal();
         
     | 
| 
      
 1069 
     | 
    
         
            +
             
     | 
| 
      
 1070 
     | 
    
         
            +
            						// Unblock
         
     | 
| 
      
 1071 
     | 
    
         
            +
            						QUnit.start();
         
     | 
| 
      
 1072 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1073 
     | 
    
         
            +
            				);
         
     | 
| 
      
 1074 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1075 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1076 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1077 
     | 
    
         
            +
             
     | 
| 
      
 1078 
     | 
    
         
            +
            	valid: function() {
         
     | 
| 
      
 1079 
     | 
    
         
            +
            		var filter = config.filter,
         
     | 
| 
      
 1080 
     | 
    
         
            +
            			regexFilter = /^(!?)\/([\w\W]*)\/(i?$)/.exec( filter ),
         
     | 
| 
      
 1081 
     | 
    
         
            +
            			module = config.module && config.module.toLowerCase(),
         
     | 
| 
      
 1082 
     | 
    
         
            +
            			fullName = ( this.module.name + ": " + this.testName );
         
     | 
| 
      
 1083 
     | 
    
         
            +
             
     | 
| 
      
 1084 
     | 
    
         
            +
            		function moduleChainNameMatch( testModule ) {
         
     | 
| 
      
 1085 
     | 
    
         
            +
            			var testModuleName = testModule.name ? testModule.name.toLowerCase() : null;
         
     | 
| 
      
 1086 
     | 
    
         
            +
            			if ( testModuleName === module ) {
         
     | 
| 
      
 1087 
     | 
    
         
            +
            				return true;
         
     | 
| 
      
 1088 
     | 
    
         
            +
            			} else if ( testModule.parentModule ) {
         
     | 
| 
      
 1089 
     | 
    
         
            +
            				return moduleChainNameMatch( testModule.parentModule );
         
     | 
| 
      
 1090 
     | 
    
         
            +
            			} else {
         
     | 
| 
      
 1091 
     | 
    
         
            +
            				return false;
         
     | 
| 
      
 1092 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1093 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1094 
     | 
    
         
            +
             
     | 
| 
      
 1095 
     | 
    
         
            +
            		function moduleChainIdMatch( testModule ) {
         
     | 
| 
      
 1096 
     | 
    
         
            +
            			return inArray( testModule.moduleId, config.moduleId ) > -1 ||
         
     | 
| 
      
 1097 
     | 
    
         
            +
            				testModule.parentModule && moduleChainIdMatch( testModule.parentModule );
         
     | 
| 
      
 1098 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1099 
     | 
    
         
            +
             
     | 
| 
      
 1100 
     | 
    
         
            +
            		// Internally-generated tests are always valid
         
     | 
| 
      
 1101 
     | 
    
         
            +
            		if ( this.callback && this.callback.validTest ) {
         
     | 
| 
      
 1102 
     | 
    
         
            +
            			return true;
         
     | 
| 
      
 1103 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1104 
     | 
    
         
            +
             
     | 
| 
      
 1105 
     | 
    
         
            +
            		if ( config.moduleId && config.moduleId.length > 0 &&
         
     | 
| 
      
 1106 
     | 
    
         
            +
            			!moduleChainIdMatch( this.module ) ) {
         
     | 
| 
      
 1107 
     | 
    
         
            +
             
     | 
| 
      
 1108 
     | 
    
         
            +
            			return false;
         
     | 
| 
      
 1109 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1110 
     | 
    
         
            +
             
     | 
| 
      
 1111 
     | 
    
         
            +
            		if ( config.testId && config.testId.length > 0 &&
         
     | 
| 
      
 1112 
     | 
    
         
            +
            			inArray( this.testId, config.testId ) < 0 ) {
         
     | 
| 
      
 1113 
     | 
    
         
            +
             
     | 
| 
      
 1114 
     | 
    
         
            +
            			return false;
         
     | 
| 
      
 1115 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1116 
     | 
    
         
            +
             
     | 
| 
      
 1117 
     | 
    
         
            +
            		if ( module && !moduleChainNameMatch( this.module ) ) {
         
     | 
| 
      
 1118 
     | 
    
         
            +
            			return false;
         
     | 
| 
      
 1119 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1120 
     | 
    
         
            +
             
     | 
| 
      
 1121 
     | 
    
         
            +
            		if ( !filter ) {
         
     | 
| 
      
 1122 
     | 
    
         
            +
            			return true;
         
     | 
| 
      
 1123 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1124 
     | 
    
         
            +
             
     | 
| 
      
 1125 
     | 
    
         
            +
            		return regexFilter ?
         
     | 
| 
      
 1126 
     | 
    
         
            +
            			this.regexFilter( !!regexFilter[ 1 ], regexFilter[ 2 ], regexFilter[ 3 ], fullName ) :
         
     | 
| 
      
 1127 
     | 
    
         
            +
            			this.stringFilter( filter, fullName );
         
     | 
| 
      
 1128 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1129 
     | 
    
         
            +
             
     | 
| 
      
 1130 
     | 
    
         
            +
            	regexFilter: function( exclude, pattern, flags, fullName ) {
         
     | 
| 
      
 1131 
     | 
    
         
            +
            		var regex = new RegExp( pattern, flags );
         
     | 
| 
      
 1132 
     | 
    
         
            +
            		var match = regex.test( fullName );
         
     | 
| 
      
 1133 
     | 
    
         
            +
             
     | 
| 
      
 1134 
     | 
    
         
            +
            		return match !== exclude;
         
     | 
| 
      
 1135 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1136 
     | 
    
         
            +
             
     | 
| 
      
 1137 
     | 
    
         
            +
            	stringFilter: function( filter, fullName ) {
         
     | 
| 
      
 1138 
     | 
    
         
            +
            		filter = filter.toLowerCase();
         
     | 
| 
      
 1139 
     | 
    
         
            +
            		fullName = fullName.toLowerCase();
         
     | 
| 
      
 1140 
     | 
    
         
            +
             
     | 
| 
      
 1141 
     | 
    
         
            +
            		var include = filter.charAt( 0 ) !== "!";
         
     | 
| 
      
 1142 
     | 
    
         
            +
            		if ( !include ) {
         
     | 
| 
      
 1143 
     | 
    
         
            +
            			filter = filter.slice( 1 );
         
     | 
| 
      
 1144 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1145 
     | 
    
         
            +
             
     | 
| 
      
 1146 
     | 
    
         
            +
            		// If the filter matches, we need to honour include
         
     | 
| 
      
 1147 
     | 
    
         
            +
            		if ( fullName.indexOf( filter ) !== -1 ) {
         
     | 
| 
      
 1148 
     | 
    
         
            +
            			return include;
         
     | 
| 
      
 1149 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1150 
     | 
    
         
            +
             
     | 
| 
      
 1151 
     | 
    
         
            +
            		// Otherwise, do the opposite
         
     | 
| 
      
 1152 
     | 
    
         
            +
            		return !include;
         
     | 
| 
      
 1153 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1154 
     | 
    
         
            +
            };
         
     | 
| 
      
 1155 
     | 
    
         
            +
             
     | 
| 
      
 1156 
     | 
    
         
            +
            // Resets the test setup. Useful for tests that modify the DOM.
         
     | 
| 
      
 1157 
     | 
    
         
            +
            /*
         
     | 
| 
      
 1158 
     | 
    
         
            +
            DEPRECATED: Use multiple tests instead of resetting inside a test.
         
     | 
| 
      
 1159 
     | 
    
         
            +
            Use testStart or testDone for custom cleanup.
         
     | 
| 
      
 1160 
     | 
    
         
            +
            This method will throw an error in 2.0, and will be removed in 2.1
         
     | 
| 
      
 1161 
     | 
    
         
            +
            */
         
     | 
| 
      
 1162 
     | 
    
         
            +
            QUnit.reset = function() {
         
     | 
| 
      
 1163 
     | 
    
         
            +
             
     | 
| 
      
 1164 
     | 
    
         
            +
            	// Return on non-browser environments
         
     | 
| 
      
 1165 
     | 
    
         
            +
            	// This is necessary to not break on node tests
         
     | 
| 
      
 1166 
     | 
    
         
            +
            	if ( !defined.document ) {
         
     | 
| 
      
 1167 
     | 
    
         
            +
            		return;
         
     | 
| 
      
 1168 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1169 
     | 
    
         
            +
             
     | 
| 
      
 1170 
     | 
    
         
            +
            	var fixture = defined.document && document.getElementById &&
         
     | 
| 
      
 1171 
     | 
    
         
            +
            			document.getElementById( "qunit-fixture" );
         
     | 
| 
      
 1172 
     | 
    
         
            +
             
     | 
| 
      
 1173 
     | 
    
         
            +
            	if ( fixture ) {
         
     | 
| 
      
 1174 
     | 
    
         
            +
            		fixture.innerHTML = config.fixture;
         
     | 
| 
      
 1175 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1176 
     | 
    
         
            +
            };
         
     | 
| 
      
 1177 
     | 
    
         
            +
             
     | 
| 
      
 1178 
     | 
    
         
            +
            QUnit.pushFailure = function() {
         
     | 
| 
      
 1179 
     | 
    
         
            +
            	if ( !QUnit.config.current ) {
         
     | 
| 
      
 1180 
     | 
    
         
            +
            		throw new Error( "pushFailure() assertion outside test context, in " +
         
     | 
| 
      
 1181 
     | 
    
         
            +
            			sourceFromStacktrace( 2 ) );
         
     | 
| 
      
 1182 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1183 
     | 
    
         
            +
             
     | 
| 
      
 1184 
     | 
    
         
            +
            	// Gets current test obj
         
     | 
| 
      
 1185 
     | 
    
         
            +
            	var currentTest = QUnit.config.current;
         
     | 
| 
      
 1186 
     | 
    
         
            +
             
     | 
| 
      
 1187 
     | 
    
         
            +
            	return currentTest.pushFailure.apply( currentTest, arguments );
         
     | 
| 
      
 1188 
     | 
    
         
            +
            };
         
     | 
| 
      
 1189 
     | 
    
         
            +
             
     | 
| 
      
 1190 
     | 
    
         
            +
            // Based on Java's String.hashCode, a simple but not
         
     | 
| 
      
 1191 
     | 
    
         
            +
            // rigorously collision resistant hashing function
         
     | 
| 
      
 1192 
     | 
    
         
            +
            function generateHash( module, testName ) {
         
     | 
| 
      
 1193 
     | 
    
         
            +
            	var hex,
         
     | 
| 
      
 1194 
     | 
    
         
            +
            		i = 0,
         
     | 
| 
      
 1195 
     | 
    
         
            +
            		hash = 0,
         
     | 
| 
      
 1196 
     | 
    
         
            +
            		str = module + "\x1C" + testName,
         
     | 
| 
      
 1197 
     | 
    
         
            +
            		len = str.length;
         
     | 
| 
      
 1198 
     | 
    
         
            +
             
     | 
| 
      
 1199 
     | 
    
         
            +
            	for ( ; i < len; i++ ) {
         
     | 
| 
      
 1200 
     | 
    
         
            +
            		hash  = ( ( hash << 5 ) - hash ) + str.charCodeAt( i );
         
     | 
| 
      
 1201 
     | 
    
         
            +
            		hash |= 0;
         
     | 
| 
      
 1202 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1203 
     | 
    
         
            +
             
     | 
| 
      
 1204 
     | 
    
         
            +
            	// Convert the possibly negative integer hash code into an 8 character hex string, which isn't
         
     | 
| 
      
 1205 
     | 
    
         
            +
            	// strictly necessary but increases user understanding that the id is a SHA-like hash
         
     | 
| 
      
 1206 
     | 
    
         
            +
            	hex = ( 0x100000000 + hash ).toString( 16 );
         
     | 
| 
      
 1207 
     | 
    
         
            +
            	if ( hex.length < 8 ) {
         
     | 
| 
      
 1208 
     | 
    
         
            +
            		hex = "0000000" + hex;
         
     | 
| 
      
 1209 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1210 
     | 
    
         
            +
             
     | 
| 
      
 1211 
     | 
    
         
            +
            	return hex.slice( -8 );
         
     | 
| 
      
 1212 
     | 
    
         
            +
            }
         
     | 
| 
      
 1213 
     | 
    
         
            +
             
     | 
| 
      
 1214 
     | 
    
         
            +
            function synchronize( callback, priority, seed ) {
         
     | 
| 
      
 1215 
     | 
    
         
            +
            	var last = !priority,
         
     | 
| 
      
 1216 
     | 
    
         
            +
            		index;
         
     | 
| 
      
 1217 
     | 
    
         
            +
             
     | 
| 
      
 1218 
     | 
    
         
            +
            	if ( QUnit.objectType( callback ) === "array" ) {
         
     | 
| 
      
 1219 
     | 
    
         
            +
            		while ( callback.length ) {
         
     | 
| 
      
 1220 
     | 
    
         
            +
            			synchronize( callback.shift() );
         
     | 
| 
      
 1221 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1222 
     | 
    
         
            +
            		return;
         
     | 
| 
      
 1223 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1224 
     | 
    
         
            +
             
     | 
| 
      
 1225 
     | 
    
         
            +
            	if ( priority ) {
         
     | 
| 
      
 1226 
     | 
    
         
            +
            		config.queue.splice( priorityCount++, 0, callback );
         
     | 
| 
      
 1227 
     | 
    
         
            +
            	} else if ( seed ) {
         
     | 
| 
      
 1228 
     | 
    
         
            +
            		if ( !unitSampler ) {
         
     | 
| 
      
 1229 
     | 
    
         
            +
            			unitSampler = unitSamplerGenerator( seed );
         
     | 
| 
      
 1230 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1231 
     | 
    
         
            +
             
     | 
| 
      
 1232 
     | 
    
         
            +
            		// Insert into a random position after all priority items
         
     | 
| 
      
 1233 
     | 
    
         
            +
            		index = Math.floor( unitSampler() * ( config.queue.length - priorityCount + 1 ) );
         
     | 
| 
      
 1234 
     | 
    
         
            +
            		config.queue.splice( priorityCount + index, 0, callback );
         
     | 
| 
      
 1235 
     | 
    
         
            +
            	} else {
         
     | 
| 
      
 1236 
     | 
    
         
            +
            		config.queue.push( callback );
         
     | 
| 
      
 1237 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1238 
     | 
    
         
            +
             
     | 
| 
      
 1239 
     | 
    
         
            +
            	if ( config.autorun && !config.blocking ) {
         
     | 
| 
      
 1240 
     | 
    
         
            +
            		process( last );
         
     | 
| 
      
 1241 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1242 
     | 
    
         
            +
            }
         
     | 
| 
      
 1243 
     | 
    
         
            +
             
     | 
| 
      
 1244 
     | 
    
         
            +
            function unitSamplerGenerator( seed ) {
         
     | 
| 
      
 1245 
     | 
    
         
            +
             
     | 
| 
      
 1246 
     | 
    
         
            +
            	// 32-bit xorshift, requires only a nonzero seed
         
     | 
| 
      
 1247 
     | 
    
         
            +
            	// http://excamera.com/sphinx/article-xorshift.html
         
     | 
| 
      
 1248 
     | 
    
         
            +
            	var sample = parseInt( generateHash( seed ), 16 ) || -1;
         
     | 
| 
      
 1249 
     | 
    
         
            +
            	return function() {
         
     | 
| 
      
 1250 
     | 
    
         
            +
            		sample ^= sample << 13;
         
     | 
| 
      
 1251 
     | 
    
         
            +
            		sample ^= sample >>> 17;
         
     | 
| 
      
 1252 
     | 
    
         
            +
            		sample ^= sample << 5;
         
     | 
| 
      
 1253 
     | 
    
         
            +
             
     | 
| 
      
 1254 
     | 
    
         
            +
            		// ECMAScript has no unsigned number type
         
     | 
| 
      
 1255 
     | 
    
         
            +
            		if ( sample < 0 ) {
         
     | 
| 
      
 1256 
     | 
    
         
            +
            			sample += 0x100000000;
         
     | 
| 
      
 1257 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1258 
     | 
    
         
            +
             
     | 
| 
      
 1259 
     | 
    
         
            +
            		return sample / 0x100000000;
         
     | 
| 
      
 1260 
     | 
    
         
            +
            	};
         
     | 
| 
      
 1261 
     | 
    
         
            +
            }
         
     | 
| 
      
 1262 
     | 
    
         
            +
             
     | 
| 
      
 1263 
     | 
    
         
            +
            function saveGlobal() {
         
     | 
| 
      
 1264 
     | 
    
         
            +
            	config.pollution = [];
         
     | 
| 
      
 1265 
     | 
    
         
            +
             
     | 
| 
      
 1266 
     | 
    
         
            +
            	if ( config.noglobals ) {
         
     | 
| 
      
 1267 
     | 
    
         
            +
            		for ( var key in global ) {
         
     | 
| 
      
 1268 
     | 
    
         
            +
            			if ( hasOwn.call( global, key ) ) {
         
     | 
| 
      
 1269 
     | 
    
         
            +
             
     | 
| 
      
 1270 
     | 
    
         
            +
            				// In Opera sometimes DOM element ids show up here, ignore them
         
     | 
| 
      
 1271 
     | 
    
         
            +
            				if ( /^qunit-test-output/.test( key ) ) {
         
     | 
| 
      
 1272 
     | 
    
         
            +
            					continue;
         
     | 
| 
      
 1273 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1274 
     | 
    
         
            +
            				config.pollution.push( key );
         
     | 
| 
      
 1275 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1276 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1277 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1278 
     | 
    
         
            +
            }
         
     | 
| 
      
 1279 
     | 
    
         
            +
             
     | 
| 
      
 1280 
     | 
    
         
            +
            function checkPollution() {
         
     | 
| 
      
 1281 
     | 
    
         
            +
            	var newGlobals,
         
     | 
| 
      
 1282 
     | 
    
         
            +
            		deletedGlobals,
         
     | 
| 
      
 1283 
     | 
    
         
            +
            		old = config.pollution;
         
     | 
| 
      
 1284 
     | 
    
         
            +
             
     | 
| 
      
 1285 
     | 
    
         
            +
            	saveGlobal();
         
     | 
| 
      
 1286 
     | 
    
         
            +
             
     | 
| 
      
 1287 
     | 
    
         
            +
            	newGlobals = diff( config.pollution, old );
         
     | 
| 
      
 1288 
     | 
    
         
            +
            	if ( newGlobals.length > 0 ) {
         
     | 
| 
      
 1289 
     | 
    
         
            +
            		QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join( ", " ) );
         
     | 
| 
      
 1290 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1291 
     | 
    
         
            +
             
     | 
| 
      
 1292 
     | 
    
         
            +
            	deletedGlobals = diff( old, config.pollution );
         
     | 
| 
      
 1293 
     | 
    
         
            +
            	if ( deletedGlobals.length > 0 ) {
         
     | 
| 
      
 1294 
     | 
    
         
            +
            		QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join( ", " ) );
         
     | 
| 
      
 1295 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1296 
     | 
    
         
            +
            }
         
     | 
| 
      
 1297 
     | 
    
         
            +
             
     | 
| 
      
 1298 
     | 
    
         
            +
            // Will be exposed as QUnit.asyncTest
         
     | 
| 
      
 1299 
     | 
    
         
            +
            function asyncTest( testName, expected, callback ) {
         
     | 
| 
      
 1300 
     | 
    
         
            +
            	if ( arguments.length === 2 ) {
         
     | 
| 
      
 1301 
     | 
    
         
            +
            		callback = expected;
         
     | 
| 
      
 1302 
     | 
    
         
            +
            		expected = null;
         
     | 
| 
      
 1303 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1304 
     | 
    
         
            +
             
     | 
| 
      
 1305 
     | 
    
         
            +
            	QUnit.test( testName, expected, callback, true );
         
     | 
| 
      
 1306 
     | 
    
         
            +
            }
         
     | 
| 
      
 1307 
     | 
    
         
            +
             
     | 
| 
      
 1308 
     | 
    
         
            +
            // Will be exposed as QUnit.test
         
     | 
| 
      
 1309 
     | 
    
         
            +
            function test( testName, expected, callback, async ) {
         
     | 
| 
      
 1310 
     | 
    
         
            +
            	if ( focused )  { return; }
         
     | 
| 
      
 1311 
     | 
    
         
            +
             
     | 
| 
      
 1312 
     | 
    
         
            +
            	var newTest;
         
     | 
| 
      
 1313 
     | 
    
         
            +
             
     | 
| 
      
 1314 
     | 
    
         
            +
            	if ( arguments.length === 2 ) {
         
     | 
| 
      
 1315 
     | 
    
         
            +
            		callback = expected;
         
     | 
| 
      
 1316 
     | 
    
         
            +
            		expected = null;
         
     | 
| 
      
 1317 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1318 
     | 
    
         
            +
             
     | 
| 
      
 1319 
     | 
    
         
            +
            	newTest = new Test( {
         
     | 
| 
      
 1320 
     | 
    
         
            +
            		testName: testName,
         
     | 
| 
      
 1321 
     | 
    
         
            +
            		expected: expected,
         
     | 
| 
      
 1322 
     | 
    
         
            +
            		async: async,
         
     | 
| 
      
 1323 
     | 
    
         
            +
            		callback: callback
         
     | 
| 
      
 1324 
     | 
    
         
            +
            	} );
         
     | 
| 
      
 1325 
     | 
    
         
            +
             
     | 
| 
      
 1326 
     | 
    
         
            +
            	newTest.queue();
         
     | 
| 
      
 1327 
     | 
    
         
            +
            }
         
     | 
| 
      
 1328 
     | 
    
         
            +
             
     | 
| 
      
 1329 
     | 
    
         
            +
            // Will be exposed as QUnit.skip
         
     | 
| 
      
 1330 
     | 
    
         
            +
            function skip( testName ) {
         
     | 
| 
      
 1331 
     | 
    
         
            +
            	if ( focused )  { return; }
         
     | 
| 
      
 1332 
     | 
    
         
            +
             
     | 
| 
      
 1333 
     | 
    
         
            +
            	var test = new Test( {
         
     | 
| 
      
 1334 
     | 
    
         
            +
            		testName: testName,
         
     | 
| 
      
 1335 
     | 
    
         
            +
            		skip: true
         
     | 
| 
      
 1336 
     | 
    
         
            +
            	} );
         
     | 
| 
      
 1337 
     | 
    
         
            +
             
     | 
| 
      
 1338 
     | 
    
         
            +
            	test.queue();
         
     | 
| 
      
 1339 
     | 
    
         
            +
            }
         
     | 
| 
      
 1340 
     | 
    
         
            +
             
     | 
| 
      
 1341 
     | 
    
         
            +
            // Will be exposed as QUnit.only
         
     | 
| 
      
 1342 
     | 
    
         
            +
            function only( testName, expected, callback, async ) {
         
     | 
| 
      
 1343 
     | 
    
         
            +
            	var newTest;
         
     | 
| 
      
 1344 
     | 
    
         
            +
             
     | 
| 
      
 1345 
     | 
    
         
            +
            	if ( focused )  { return; }
         
     | 
| 
      
 1346 
     | 
    
         
            +
             
     | 
| 
      
 1347 
     | 
    
         
            +
            	QUnit.config.queue.length = 0;
         
     | 
| 
      
 1348 
     | 
    
         
            +
            	focused = true;
         
     | 
| 
      
 1349 
     | 
    
         
            +
             
     | 
| 
      
 1350 
     | 
    
         
            +
            	if ( arguments.length === 2 ) {
         
     | 
| 
      
 1351 
     | 
    
         
            +
            		callback = expected;
         
     | 
| 
      
 1352 
     | 
    
         
            +
            		expected = null;
         
     | 
| 
      
 1353 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1354 
     | 
    
         
            +
             
     | 
| 
      
 1355 
     | 
    
         
            +
            	newTest = new Test( {
         
     | 
| 
      
 1356 
     | 
    
         
            +
            		testName: testName,
         
     | 
| 
      
 1357 
     | 
    
         
            +
            		expected: expected,
         
     | 
| 
      
 1358 
     | 
    
         
            +
            		async: async,
         
     | 
| 
      
 1359 
     | 
    
         
            +
            		callback: callback
         
     | 
| 
      
 1360 
     | 
    
         
            +
            	} );
         
     | 
| 
      
 1361 
     | 
    
         
            +
             
     | 
| 
      
 1362 
     | 
    
         
            +
            	newTest.queue();
         
     | 
| 
      
 1363 
     | 
    
         
            +
            }
         
     | 
| 
      
 1364 
     | 
    
         
            +
             
     | 
| 
      
 1365 
     | 
    
         
            +
            function Assert( testContext ) {
         
     | 
| 
      
 1366 
     | 
    
         
            +
            	this.test = testContext;
         
     | 
| 
      
 1367 
     | 
    
         
            +
            }
         
     | 
| 
      
 1368 
     | 
    
         
            +
             
     | 
| 
      
 1369 
     | 
    
         
            +
            // Assert helpers
         
     | 
| 
      
 1370 
     | 
    
         
            +
            QUnit.assert = Assert.prototype = {
         
     | 
| 
      
 1371 
     | 
    
         
            +
             
     | 
| 
      
 1372 
     | 
    
         
            +
            	// Specify the number of expected assertions to guarantee that failed test
         
     | 
| 
      
 1373 
     | 
    
         
            +
            	// (no assertions are run at all) don't slip through.
         
     | 
| 
      
 1374 
     | 
    
         
            +
            	expect: function( asserts ) {
         
     | 
| 
      
 1375 
     | 
    
         
            +
            		if ( arguments.length === 1 ) {
         
     | 
| 
      
 1376 
     | 
    
         
            +
            			this.test.expected = asserts;
         
     | 
| 
      
 1377 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 1378 
     | 
    
         
            +
            			return this.test.expected;
         
     | 
| 
      
 1379 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1380 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1381 
     | 
    
         
            +
             
     | 
| 
      
 1382 
     | 
    
         
            +
            	// Increment this Test's semaphore counter, then return a function that
         
     | 
| 
      
 1383 
     | 
    
         
            +
            	// decrements that counter a maximum of once.
         
     | 
| 
      
 1384 
     | 
    
         
            +
            	async: function( count ) {
         
     | 
| 
      
 1385 
     | 
    
         
            +
            		var test = this.test,
         
     | 
| 
      
 1386 
     | 
    
         
            +
            			popped = false,
         
     | 
| 
      
 1387 
     | 
    
         
            +
            			acceptCallCount = count;
         
     | 
| 
      
 1388 
     | 
    
         
            +
             
     | 
| 
      
 1389 
     | 
    
         
            +
            		if ( typeof acceptCallCount === "undefined" ) {
         
     | 
| 
      
 1390 
     | 
    
         
            +
            			acceptCallCount = 1;
         
     | 
| 
      
 1391 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1392 
     | 
    
         
            +
             
     | 
| 
      
 1393 
     | 
    
         
            +
            		test.semaphore += 1;
         
     | 
| 
      
 1394 
     | 
    
         
            +
            		test.usedAsync = true;
         
     | 
| 
      
 1395 
     | 
    
         
            +
            		pauseProcessing();
         
     | 
| 
      
 1396 
     | 
    
         
            +
             
     | 
| 
      
 1397 
     | 
    
         
            +
            		return function done() {
         
     | 
| 
      
 1398 
     | 
    
         
            +
             
     | 
| 
      
 1399 
     | 
    
         
            +
            			if ( popped ) {
         
     | 
| 
      
 1400 
     | 
    
         
            +
            				test.pushFailure( "Too many calls to the `assert.async` callback",
         
     | 
| 
      
 1401 
     | 
    
         
            +
            					sourceFromStacktrace( 2 ) );
         
     | 
| 
      
 1402 
     | 
    
         
            +
            				return;
         
     | 
| 
      
 1403 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1404 
     | 
    
         
            +
            			acceptCallCount -= 1;
         
     | 
| 
      
 1405 
     | 
    
         
            +
            			if ( acceptCallCount > 0 ) {
         
     | 
| 
      
 1406 
     | 
    
         
            +
            				return;
         
     | 
| 
      
 1407 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1408 
     | 
    
         
            +
             
     | 
| 
      
 1409 
     | 
    
         
            +
            			test.semaphore -= 1;
         
     | 
| 
      
 1410 
     | 
    
         
            +
            			popped = true;
         
     | 
| 
      
 1411 
     | 
    
         
            +
            			resumeProcessing();
         
     | 
| 
      
 1412 
     | 
    
         
            +
            		};
         
     | 
| 
      
 1413 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1414 
     | 
    
         
            +
             
     | 
| 
      
 1415 
     | 
    
         
            +
            	// Exports test.push() to the user API
         
     | 
| 
      
 1416 
     | 
    
         
            +
            	// Alias of pushResult.
         
     | 
| 
      
 1417 
     | 
    
         
            +
            	push: function( result, actual, expected, message, negative ) {
         
     | 
| 
      
 1418 
     | 
    
         
            +
            		var currentAssert = this instanceof Assert ? this : QUnit.config.current.assert;
         
     | 
| 
      
 1419 
     | 
    
         
            +
            		return currentAssert.pushResult( {
         
     | 
| 
      
 1420 
     | 
    
         
            +
            			result: result,
         
     | 
| 
      
 1421 
     | 
    
         
            +
            			actual: actual,
         
     | 
| 
      
 1422 
     | 
    
         
            +
            			expected: expected,
         
     | 
| 
      
 1423 
     | 
    
         
            +
            			message: message,
         
     | 
| 
      
 1424 
     | 
    
         
            +
            			negative: negative
         
     | 
| 
      
 1425 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 1426 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1427 
     | 
    
         
            +
             
     | 
| 
      
 1428 
     | 
    
         
            +
            	pushResult: function( resultInfo ) {
         
     | 
| 
      
 1429 
     | 
    
         
            +
             
     | 
| 
      
 1430 
     | 
    
         
            +
            		// Destructure of resultInfo = { result, actual, expected, message, negative }
         
     | 
| 
      
 1431 
     | 
    
         
            +
            		var assert = this,
         
     | 
| 
      
 1432 
     | 
    
         
            +
            			currentTest = ( assert instanceof Assert && assert.test ) || QUnit.config.current;
         
     | 
| 
      
 1433 
     | 
    
         
            +
             
     | 
| 
      
 1434 
     | 
    
         
            +
            		// Backwards compatibility fix.
         
     | 
| 
      
 1435 
     | 
    
         
            +
            		// Allows the direct use of global exported assertions and QUnit.assert.*
         
     | 
| 
      
 1436 
     | 
    
         
            +
            		// Although, it's use is not recommended as it can leak assertions
         
     | 
| 
      
 1437 
     | 
    
         
            +
            		// to other tests from async tests, because we only get a reference to the current test,
         
     | 
| 
      
 1438 
     | 
    
         
            +
            		// not exactly the test where assertion were intended to be called.
         
     | 
| 
      
 1439 
     | 
    
         
            +
            		if ( !currentTest ) {
         
     | 
| 
      
 1440 
     | 
    
         
            +
            			throw new Error( "assertion outside test context, in " + sourceFromStacktrace( 2 ) );
         
     | 
| 
      
 1441 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1442 
     | 
    
         
            +
             
     | 
| 
      
 1443 
     | 
    
         
            +
            		if ( currentTest.usedAsync === true && currentTest.semaphore === 0 ) {
         
     | 
| 
      
 1444 
     | 
    
         
            +
            			currentTest.pushFailure( "Assertion after the final `assert.async` was resolved",
         
     | 
| 
      
 1445 
     | 
    
         
            +
            				sourceFromStacktrace( 2 ) );
         
     | 
| 
      
 1446 
     | 
    
         
            +
             
     | 
| 
      
 1447 
     | 
    
         
            +
            			// Allow this assertion to continue running anyway...
         
     | 
| 
      
 1448 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1449 
     | 
    
         
            +
             
     | 
| 
      
 1450 
     | 
    
         
            +
            		if ( !( assert instanceof Assert ) ) {
         
     | 
| 
      
 1451 
     | 
    
         
            +
            			assert = currentTest.assert;
         
     | 
| 
      
 1452 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1453 
     | 
    
         
            +
             
     | 
| 
      
 1454 
     | 
    
         
            +
            		return assert.test.pushResult( resultInfo );
         
     | 
| 
      
 1455 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1456 
     | 
    
         
            +
             
     | 
| 
      
 1457 
     | 
    
         
            +
            	ok: function( result, message ) {
         
     | 
| 
      
 1458 
     | 
    
         
            +
            		message = message || ( result ? "okay" : "failed, expected argument to be truthy, was: " +
         
     | 
| 
      
 1459 
     | 
    
         
            +
            			QUnit.dump.parse( result ) );
         
     | 
| 
      
 1460 
     | 
    
         
            +
            		this.pushResult( {
         
     | 
| 
      
 1461 
     | 
    
         
            +
            			result: !!result,
         
     | 
| 
      
 1462 
     | 
    
         
            +
            			actual: result,
         
     | 
| 
      
 1463 
     | 
    
         
            +
            			expected: true,
         
     | 
| 
      
 1464 
     | 
    
         
            +
            			message: message
         
     | 
| 
      
 1465 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 1466 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1467 
     | 
    
         
            +
             
     | 
| 
      
 1468 
     | 
    
         
            +
            	notOk: function( result, message ) {
         
     | 
| 
      
 1469 
     | 
    
         
            +
            		message = message || ( !result ? "okay" : "failed, expected argument to be falsy, was: " +
         
     | 
| 
      
 1470 
     | 
    
         
            +
            			QUnit.dump.parse( result ) );
         
     | 
| 
      
 1471 
     | 
    
         
            +
            		this.pushResult( {
         
     | 
| 
      
 1472 
     | 
    
         
            +
            			result: !result,
         
     | 
| 
      
 1473 
     | 
    
         
            +
            			actual: result,
         
     | 
| 
      
 1474 
     | 
    
         
            +
            			expected: false,
         
     | 
| 
      
 1475 
     | 
    
         
            +
            			message: message
         
     | 
| 
      
 1476 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 1477 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1478 
     | 
    
         
            +
             
     | 
| 
      
 1479 
     | 
    
         
            +
            	equal: function( actual, expected, message ) {
         
     | 
| 
      
 1480 
     | 
    
         
            +
            		/*jshint eqeqeq:false */
         
     | 
| 
      
 1481 
     | 
    
         
            +
            		this.pushResult( {
         
     | 
| 
      
 1482 
     | 
    
         
            +
            			result: expected == actual,
         
     | 
| 
      
 1483 
     | 
    
         
            +
            			actual: actual,
         
     | 
| 
      
 1484 
     | 
    
         
            +
            			expected: expected,
         
     | 
| 
      
 1485 
     | 
    
         
            +
            			message: message
         
     | 
| 
      
 1486 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 1487 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1488 
     | 
    
         
            +
             
     | 
| 
      
 1489 
     | 
    
         
            +
            	notEqual: function( actual, expected, message ) {
         
     | 
| 
      
 1490 
     | 
    
         
            +
            		/*jshint eqeqeq:false */
         
     | 
| 
      
 1491 
     | 
    
         
            +
            		this.pushResult( {
         
     | 
| 
      
 1492 
     | 
    
         
            +
            			result: expected != actual,
         
     | 
| 
      
 1493 
     | 
    
         
            +
            			actual: actual,
         
     | 
| 
      
 1494 
     | 
    
         
            +
            			expected: expected,
         
     | 
| 
      
 1495 
     | 
    
         
            +
            			message: message,
         
     | 
| 
      
 1496 
     | 
    
         
            +
            			negative: true
         
     | 
| 
      
 1497 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 1498 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1499 
     | 
    
         
            +
             
     | 
| 
      
 1500 
     | 
    
         
            +
            	propEqual: function( actual, expected, message ) {
         
     | 
| 
      
 1501 
     | 
    
         
            +
            		actual = objectValues( actual );
         
     | 
| 
      
 1502 
     | 
    
         
            +
            		expected = objectValues( expected );
         
     | 
| 
      
 1503 
     | 
    
         
            +
            		this.pushResult( {
         
     | 
| 
      
 1504 
     | 
    
         
            +
            			result: QUnit.equiv( actual, expected ),
         
     | 
| 
      
 1505 
     | 
    
         
            +
            			actual: actual,
         
     | 
| 
      
 1506 
     | 
    
         
            +
            			expected: expected,
         
     | 
| 
      
 1507 
     | 
    
         
            +
            			message: message
         
     | 
| 
      
 1508 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 1509 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1510 
     | 
    
         
            +
             
     | 
| 
      
 1511 
     | 
    
         
            +
            	notPropEqual: function( actual, expected, message ) {
         
     | 
| 
      
 1512 
     | 
    
         
            +
            		actual = objectValues( actual );
         
     | 
| 
      
 1513 
     | 
    
         
            +
            		expected = objectValues( expected );
         
     | 
| 
      
 1514 
     | 
    
         
            +
            		this.pushResult( {
         
     | 
| 
      
 1515 
     | 
    
         
            +
            			result: !QUnit.equiv( actual, expected ),
         
     | 
| 
      
 1516 
     | 
    
         
            +
            			actual: actual,
         
     | 
| 
      
 1517 
     | 
    
         
            +
            			expected: expected,
         
     | 
| 
      
 1518 
     | 
    
         
            +
            			message: message,
         
     | 
| 
      
 1519 
     | 
    
         
            +
            			negative: true
         
     | 
| 
      
 1520 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 1521 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1522 
     | 
    
         
            +
             
     | 
| 
      
 1523 
     | 
    
         
            +
            	deepEqual: function( actual, expected, message ) {
         
     | 
| 
      
 1524 
     | 
    
         
            +
            		this.pushResult( {
         
     | 
| 
      
 1525 
     | 
    
         
            +
            			result: QUnit.equiv( actual, expected ),
         
     | 
| 
      
 1526 
     | 
    
         
            +
            			actual: actual,
         
     | 
| 
      
 1527 
     | 
    
         
            +
            			expected: expected,
         
     | 
| 
      
 1528 
     | 
    
         
            +
            			message: message
         
     | 
| 
      
 1529 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 1530 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1531 
     | 
    
         
            +
             
     | 
| 
      
 1532 
     | 
    
         
            +
            	notDeepEqual: function( actual, expected, message ) {
         
     | 
| 
      
 1533 
     | 
    
         
            +
            		this.pushResult( {
         
     | 
| 
      
 1534 
     | 
    
         
            +
            			result: !QUnit.equiv( actual, expected ),
         
     | 
| 
      
 1535 
     | 
    
         
            +
            			actual: actual,
         
     | 
| 
      
 1536 
     | 
    
         
            +
            			expected: expected,
         
     | 
| 
      
 1537 
     | 
    
         
            +
            			message: message,
         
     | 
| 
      
 1538 
     | 
    
         
            +
            			negative: true
         
     | 
| 
      
 1539 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 1540 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1541 
     | 
    
         
            +
             
     | 
| 
      
 1542 
     | 
    
         
            +
            	strictEqual: function( actual, expected, message ) {
         
     | 
| 
      
 1543 
     | 
    
         
            +
            		this.pushResult( {
         
     | 
| 
      
 1544 
     | 
    
         
            +
            			result: expected === actual,
         
     | 
| 
      
 1545 
     | 
    
         
            +
            			actual: actual,
         
     | 
| 
      
 1546 
     | 
    
         
            +
            			expected: expected,
         
     | 
| 
      
 1547 
     | 
    
         
            +
            			message: message
         
     | 
| 
      
 1548 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 1549 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1550 
     | 
    
         
            +
             
     | 
| 
      
 1551 
     | 
    
         
            +
            	notStrictEqual: function( actual, expected, message ) {
         
     | 
| 
      
 1552 
     | 
    
         
            +
            		this.pushResult( {
         
     | 
| 
      
 1553 
     | 
    
         
            +
            			result: expected !== actual,
         
     | 
| 
      
 1554 
     | 
    
         
            +
            			actual: actual,
         
     | 
| 
      
 1555 
     | 
    
         
            +
            			expected: expected,
         
     | 
| 
      
 1556 
     | 
    
         
            +
            			message: message,
         
     | 
| 
      
 1557 
     | 
    
         
            +
            			negative: true
         
     | 
| 
      
 1558 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 1559 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1560 
     | 
    
         
            +
             
     | 
| 
      
 1561 
     | 
    
         
            +
            	"throws": function( block, expected, message ) {
         
     | 
| 
      
 1562 
     | 
    
         
            +
            		var actual, expectedType,
         
     | 
| 
      
 1563 
     | 
    
         
            +
            			expectedOutput = expected,
         
     | 
| 
      
 1564 
     | 
    
         
            +
            			ok = false,
         
     | 
| 
      
 1565 
     | 
    
         
            +
            			currentTest = ( this instanceof Assert && this.test ) || QUnit.config.current;
         
     | 
| 
      
 1566 
     | 
    
         
            +
             
     | 
| 
      
 1567 
     | 
    
         
            +
            		// 'expected' is optional unless doing string comparison
         
     | 
| 
      
 1568 
     | 
    
         
            +
            		if ( message == null && typeof expected === "string" ) {
         
     | 
| 
      
 1569 
     | 
    
         
            +
            			message = expected;
         
     | 
| 
      
 1570 
     | 
    
         
            +
            			expected = null;
         
     | 
| 
      
 1571 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1572 
     | 
    
         
            +
             
     | 
| 
      
 1573 
     | 
    
         
            +
            		currentTest.ignoreGlobalErrors = true;
         
     | 
| 
      
 1574 
     | 
    
         
            +
            		try {
         
     | 
| 
      
 1575 
     | 
    
         
            +
            			block.call( currentTest.testEnvironment );
         
     | 
| 
      
 1576 
     | 
    
         
            +
            		} catch ( e ) {
         
     | 
| 
      
 1577 
     | 
    
         
            +
            			actual = e;
         
     | 
| 
      
 1578 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1579 
     | 
    
         
            +
            		currentTest.ignoreGlobalErrors = false;
         
     | 
| 
      
 1580 
     | 
    
         
            +
             
     | 
| 
      
 1581 
     | 
    
         
            +
            		if ( actual ) {
         
     | 
| 
      
 1582 
     | 
    
         
            +
            			expectedType = QUnit.objectType( expected );
         
     | 
| 
      
 1583 
     | 
    
         
            +
             
     | 
| 
      
 1584 
     | 
    
         
            +
            			// We don't want to validate thrown error
         
     | 
| 
      
 1585 
     | 
    
         
            +
            			if ( !expected ) {
         
     | 
| 
      
 1586 
     | 
    
         
            +
            				ok = true;
         
     | 
| 
      
 1587 
     | 
    
         
            +
            				expectedOutput = null;
         
     | 
| 
      
 1588 
     | 
    
         
            +
             
     | 
| 
      
 1589 
     | 
    
         
            +
            			// Expected is a regexp
         
     | 
| 
      
 1590 
     | 
    
         
            +
            			} else if ( expectedType === "regexp" ) {
         
     | 
| 
      
 1591 
     | 
    
         
            +
            				ok = expected.test( errorString( actual ) );
         
     | 
| 
      
 1592 
     | 
    
         
            +
             
     | 
| 
      
 1593 
     | 
    
         
            +
            			// Expected is a string
         
     | 
| 
      
 1594 
     | 
    
         
            +
            			} else if ( expectedType === "string" ) {
         
     | 
| 
      
 1595 
     | 
    
         
            +
            				ok = expected === errorString( actual );
         
     | 
| 
      
 1596 
     | 
    
         
            +
             
     | 
| 
      
 1597 
     | 
    
         
            +
            			// Expected is a constructor, maybe an Error constructor
         
     | 
| 
      
 1598 
     | 
    
         
            +
            			} else if ( expectedType === "function" && actual instanceof expected ) {
         
     | 
| 
      
 1599 
     | 
    
         
            +
            				ok = true;
         
     | 
| 
      
 1600 
     | 
    
         
            +
             
     | 
| 
      
 1601 
     | 
    
         
            +
            			// Expected is an Error object
         
     | 
| 
      
 1602 
     | 
    
         
            +
            			} else if ( expectedType === "object" ) {
         
     | 
| 
      
 1603 
     | 
    
         
            +
            				ok = actual instanceof expected.constructor &&
         
     | 
| 
      
 1604 
     | 
    
         
            +
            					actual.name === expected.name &&
         
     | 
| 
      
 1605 
     | 
    
         
            +
            					actual.message === expected.message;
         
     | 
| 
      
 1606 
     | 
    
         
            +
             
     | 
| 
      
 1607 
     | 
    
         
            +
            			// Expected is a validation function which returns true if validation passed
         
     | 
| 
      
 1608 
     | 
    
         
            +
            			} else if ( expectedType === "function" && expected.call( {}, actual ) === true ) {
         
     | 
| 
      
 1609 
     | 
    
         
            +
            				expectedOutput = null;
         
     | 
| 
      
 1610 
     | 
    
         
            +
            				ok = true;
         
     | 
| 
      
 1611 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1612 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1613 
     | 
    
         
            +
             
     | 
| 
      
 1614 
     | 
    
         
            +
            		currentTest.assert.pushResult( {
         
     | 
| 
      
 1615 
     | 
    
         
            +
            			result: ok,
         
     | 
| 
      
 1616 
     | 
    
         
            +
            			actual: actual,
         
     | 
| 
      
 1617 
     | 
    
         
            +
            			expected: expectedOutput,
         
     | 
| 
      
 1618 
     | 
    
         
            +
            			message: message
         
     | 
| 
      
 1619 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 1620 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1621 
     | 
    
         
            +
            };
         
     | 
| 
      
 1622 
     | 
    
         
            +
             
     | 
| 
      
 1623 
     | 
    
         
            +
            // Provide an alternative to assert.throws(), for environments that consider throws a reserved word
         
     | 
| 
      
 1624 
     | 
    
         
            +
            // Known to us are: Closure Compiler, Narwhal
         
     | 
| 
      
 1625 
     | 
    
         
            +
            ( function() {
         
     | 
| 
      
 1626 
     | 
    
         
            +
            	/*jshint sub:true */
         
     | 
| 
      
 1627 
     | 
    
         
            +
            	Assert.prototype.raises = Assert.prototype [ "throws" ]; //jscs:ignore requireDotNotation
         
     | 
| 
      
 1628 
     | 
    
         
            +
            }() );
         
     | 
| 
      
 1629 
     | 
    
         
            +
             
     | 
| 
      
 1630 
     | 
    
         
            +
            function errorString( error ) {
         
     | 
| 
      
 1631 
     | 
    
         
            +
            	var name, message,
         
     | 
| 
      
 1632 
     | 
    
         
            +
            		resultErrorString = error.toString();
         
     | 
| 
      
 1633 
     | 
    
         
            +
            	if ( resultErrorString.substring( 0, 7 ) === "[object" ) {
         
     | 
| 
      
 1634 
     | 
    
         
            +
            		name = error.name ? error.name.toString() : "Error";
         
     | 
| 
      
 1635 
     | 
    
         
            +
            		message = error.message ? error.message.toString() : "";
         
     | 
| 
      
 1636 
     | 
    
         
            +
            		if ( name && message ) {
         
     | 
| 
      
 1637 
     | 
    
         
            +
            			return name + ": " + message;
         
     | 
| 
      
 1638 
     | 
    
         
            +
            		} else if ( name ) {
         
     | 
| 
      
 1639 
     | 
    
         
            +
            			return name;
         
     | 
| 
      
 1640 
     | 
    
         
            +
            		} else if ( message ) {
         
     | 
| 
      
 1641 
     | 
    
         
            +
            			return message;
         
     | 
| 
      
 1642 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 1643 
     | 
    
         
            +
            			return "Error";
         
     | 
| 
      
 1644 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1645 
     | 
    
         
            +
            	} else {
         
     | 
| 
      
 1646 
     | 
    
         
            +
            		return resultErrorString;
         
     | 
| 
      
 1647 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1648 
     | 
    
         
            +
            }
         
     | 
| 
      
 1649 
     | 
    
         
            +
             
     | 
| 
      
 1650 
     | 
    
         
            +
            // Test for equality any JavaScript type.
         
     | 
| 
      
 1651 
     | 
    
         
            +
            // Author: Philippe Rathé <prathe@gmail.com>
         
     | 
| 
      
 1652 
     | 
    
         
            +
            QUnit.equiv = ( function() {
         
     | 
| 
      
 1653 
     | 
    
         
            +
             
     | 
| 
      
 1654 
     | 
    
         
            +
            	// Stack to decide between skip/abort functions
         
     | 
| 
      
 1655 
     | 
    
         
            +
            	var callers = [];
         
     | 
| 
      
 1656 
     | 
    
         
            +
             
     | 
| 
      
 1657 
     | 
    
         
            +
            	// Stack to avoiding loops from circular referencing
         
     | 
| 
      
 1658 
     | 
    
         
            +
            	var parents = [];
         
     | 
| 
      
 1659 
     | 
    
         
            +
            	var parentsB = [];
         
     | 
| 
      
 1660 
     | 
    
         
            +
             
     | 
| 
      
 1661 
     | 
    
         
            +
            	var getProto = Object.getPrototypeOf || function( obj ) {
         
     | 
| 
      
 1662 
     | 
    
         
            +
             
     | 
| 
      
 1663 
     | 
    
         
            +
            		/*jshint proto: true */
         
     | 
| 
      
 1664 
     | 
    
         
            +
            		return obj.__proto__;
         
     | 
| 
      
 1665 
     | 
    
         
            +
            	};
         
     | 
| 
      
 1666 
     | 
    
         
            +
             
     | 
| 
      
 1667 
     | 
    
         
            +
            	function useStrictEquality( b, a ) {
         
     | 
| 
      
 1668 
     | 
    
         
            +
             
     | 
| 
      
 1669 
     | 
    
         
            +
            		// To catch short annotation VS 'new' annotation of a declaration. e.g.:
         
     | 
| 
      
 1670 
     | 
    
         
            +
            		// `var i = 1;`
         
     | 
| 
      
 1671 
     | 
    
         
            +
            		// `var j = new Number(1);`
         
     | 
| 
      
 1672 
     | 
    
         
            +
            		if ( typeof a === "object" ) {
         
     | 
| 
      
 1673 
     | 
    
         
            +
            			a = a.valueOf();
         
     | 
| 
      
 1674 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1675 
     | 
    
         
            +
            		if ( typeof b === "object" ) {
         
     | 
| 
      
 1676 
     | 
    
         
            +
            			b = b.valueOf();
         
     | 
| 
      
 1677 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1678 
     | 
    
         
            +
             
     | 
| 
      
 1679 
     | 
    
         
            +
            		return a === b;
         
     | 
| 
      
 1680 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1681 
     | 
    
         
            +
             
     | 
| 
      
 1682 
     | 
    
         
            +
            	function compareConstructors( a, b ) {
         
     | 
| 
      
 1683 
     | 
    
         
            +
            		var protoA = getProto( a );
         
     | 
| 
      
 1684 
     | 
    
         
            +
            		var protoB = getProto( b );
         
     | 
| 
      
 1685 
     | 
    
         
            +
             
     | 
| 
      
 1686 
     | 
    
         
            +
            		// Comparing constructors is more strict than using `instanceof`
         
     | 
| 
      
 1687 
     | 
    
         
            +
            		if ( a.constructor === b.constructor ) {
         
     | 
| 
      
 1688 
     | 
    
         
            +
            			return true;
         
     | 
| 
      
 1689 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1690 
     | 
    
         
            +
             
     | 
| 
      
 1691 
     | 
    
         
            +
            		// Ref #851
         
     | 
| 
      
 1692 
     | 
    
         
            +
            		// If the obj prototype descends from a null constructor, treat it
         
     | 
| 
      
 1693 
     | 
    
         
            +
            		// as a null prototype.
         
     | 
| 
      
 1694 
     | 
    
         
            +
            		if ( protoA && protoA.constructor === null ) {
         
     | 
| 
      
 1695 
     | 
    
         
            +
            			protoA = null;
         
     | 
| 
      
 1696 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1697 
     | 
    
         
            +
            		if ( protoB && protoB.constructor === null ) {
         
     | 
| 
      
 1698 
     | 
    
         
            +
            			protoB = null;
         
     | 
| 
      
 1699 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1700 
     | 
    
         
            +
             
     | 
| 
      
 1701 
     | 
    
         
            +
            		// Allow objects with no prototype to be equivalent to
         
     | 
| 
      
 1702 
     | 
    
         
            +
            		// objects with Object as their constructor.
         
     | 
| 
      
 1703 
     | 
    
         
            +
            		if ( ( protoA === null && protoB === Object.prototype ) ||
         
     | 
| 
      
 1704 
     | 
    
         
            +
            				( protoB === null && protoA === Object.prototype ) ) {
         
     | 
| 
      
 1705 
     | 
    
         
            +
            			return true;
         
     | 
| 
      
 1706 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1707 
     | 
    
         
            +
             
     | 
| 
      
 1708 
     | 
    
         
            +
            		return false;
         
     | 
| 
      
 1709 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1710 
     | 
    
         
            +
             
     | 
| 
      
 1711 
     | 
    
         
            +
            	function getRegExpFlags( regexp ) {
         
     | 
| 
      
 1712 
     | 
    
         
            +
            		return "flags" in regexp ? regexp.flags : regexp.toString().match( /[gimuy]*$/ )[ 0 ];
         
     | 
| 
      
 1713 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1714 
     | 
    
         
            +
             
     | 
| 
      
 1715 
     | 
    
         
            +
            	var callbacks = {
         
     | 
| 
      
 1716 
     | 
    
         
            +
            		"string": useStrictEquality,
         
     | 
| 
      
 1717 
     | 
    
         
            +
            		"boolean": useStrictEquality,
         
     | 
| 
      
 1718 
     | 
    
         
            +
            		"number": useStrictEquality,
         
     | 
| 
      
 1719 
     | 
    
         
            +
            		"null": useStrictEquality,
         
     | 
| 
      
 1720 
     | 
    
         
            +
            		"undefined": useStrictEquality,
         
     | 
| 
      
 1721 
     | 
    
         
            +
            		"symbol": useStrictEquality,
         
     | 
| 
      
 1722 
     | 
    
         
            +
            		"date": useStrictEquality,
         
     | 
| 
      
 1723 
     | 
    
         
            +
             
     | 
| 
      
 1724 
     | 
    
         
            +
            		"nan": function() {
         
     | 
| 
      
 1725 
     | 
    
         
            +
            			return true;
         
     | 
| 
      
 1726 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1727 
     | 
    
         
            +
             
     | 
| 
      
 1728 
     | 
    
         
            +
            		"regexp": function( b, a ) {
         
     | 
| 
      
 1729 
     | 
    
         
            +
            			return a.source === b.source &&
         
     | 
| 
      
 1730 
     | 
    
         
            +
             
     | 
| 
      
 1731 
     | 
    
         
            +
            				// Include flags in the comparison
         
     | 
| 
      
 1732 
     | 
    
         
            +
            				getRegExpFlags( a ) === getRegExpFlags( b );
         
     | 
| 
      
 1733 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1734 
     | 
    
         
            +
             
     | 
| 
      
 1735 
     | 
    
         
            +
            		// - skip when the property is a method of an instance (OOP)
         
     | 
| 
      
 1736 
     | 
    
         
            +
            		// - abort otherwise,
         
     | 
| 
      
 1737 
     | 
    
         
            +
            		// initial === would have catch identical references anyway
         
     | 
| 
      
 1738 
     | 
    
         
            +
            		"function": function() {
         
     | 
| 
      
 1739 
     | 
    
         
            +
            			var caller = callers[ callers.length - 1 ];
         
     | 
| 
      
 1740 
     | 
    
         
            +
            			return caller !== Object && typeof caller !== "undefined";
         
     | 
| 
      
 1741 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1742 
     | 
    
         
            +
             
     | 
| 
      
 1743 
     | 
    
         
            +
            		"array": function( b, a ) {
         
     | 
| 
      
 1744 
     | 
    
         
            +
            			var i, j, len, loop, aCircular, bCircular;
         
     | 
| 
      
 1745 
     | 
    
         
            +
             
     | 
| 
      
 1746 
     | 
    
         
            +
            			len = a.length;
         
     | 
| 
      
 1747 
     | 
    
         
            +
            			if ( len !== b.length ) {
         
     | 
| 
      
 1748 
     | 
    
         
            +
             
     | 
| 
      
 1749 
     | 
    
         
            +
            				// Safe and faster
         
     | 
| 
      
 1750 
     | 
    
         
            +
            				return false;
         
     | 
| 
      
 1751 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1752 
     | 
    
         
            +
             
     | 
| 
      
 1753 
     | 
    
         
            +
            			// Track reference to avoid circular references
         
     | 
| 
      
 1754 
     | 
    
         
            +
            			parents.push( a );
         
     | 
| 
      
 1755 
     | 
    
         
            +
            			parentsB.push( b );
         
     | 
| 
      
 1756 
     | 
    
         
            +
            			for ( i = 0; i < len; i++ ) {
         
     | 
| 
      
 1757 
     | 
    
         
            +
            				loop = false;
         
     | 
| 
      
 1758 
     | 
    
         
            +
            				for ( j = 0; j < parents.length; j++ ) {
         
     | 
| 
      
 1759 
     | 
    
         
            +
            					aCircular = parents[ j ] === a[ i ];
         
     | 
| 
      
 1760 
     | 
    
         
            +
            					bCircular = parentsB[ j ] === b[ i ];
         
     | 
| 
      
 1761 
     | 
    
         
            +
            					if ( aCircular || bCircular ) {
         
     | 
| 
      
 1762 
     | 
    
         
            +
            						if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
         
     | 
| 
      
 1763 
     | 
    
         
            +
            							loop = true;
         
     | 
| 
      
 1764 
     | 
    
         
            +
            						} else {
         
     | 
| 
      
 1765 
     | 
    
         
            +
            							parents.pop();
         
     | 
| 
      
 1766 
     | 
    
         
            +
            							parentsB.pop();
         
     | 
| 
      
 1767 
     | 
    
         
            +
            							return false;
         
     | 
| 
      
 1768 
     | 
    
         
            +
            						}
         
     | 
| 
      
 1769 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1770 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1771 
     | 
    
         
            +
            				if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
         
     | 
| 
      
 1772 
     | 
    
         
            +
            					parents.pop();
         
     | 
| 
      
 1773 
     | 
    
         
            +
            					parentsB.pop();
         
     | 
| 
      
 1774 
     | 
    
         
            +
            					return false;
         
     | 
| 
      
 1775 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1776 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1777 
     | 
    
         
            +
            			parents.pop();
         
     | 
| 
      
 1778 
     | 
    
         
            +
            			parentsB.pop();
         
     | 
| 
      
 1779 
     | 
    
         
            +
            			return true;
         
     | 
| 
      
 1780 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1781 
     | 
    
         
            +
             
     | 
| 
      
 1782 
     | 
    
         
            +
            		"set": function( b, a ) {
         
     | 
| 
      
 1783 
     | 
    
         
            +
            			var innerEq,
         
     | 
| 
      
 1784 
     | 
    
         
            +
            				outerEq = true;
         
     | 
| 
      
 1785 
     | 
    
         
            +
             
     | 
| 
      
 1786 
     | 
    
         
            +
            			if ( a.size !== b.size ) {
         
     | 
| 
      
 1787 
     | 
    
         
            +
            				return false;
         
     | 
| 
      
 1788 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1789 
     | 
    
         
            +
             
     | 
| 
      
 1790 
     | 
    
         
            +
            			a.forEach( function( aVal ) {
         
     | 
| 
      
 1791 
     | 
    
         
            +
            				innerEq = false;
         
     | 
| 
      
 1792 
     | 
    
         
            +
             
     | 
| 
      
 1793 
     | 
    
         
            +
            				b.forEach( function( bVal ) {
         
     | 
| 
      
 1794 
     | 
    
         
            +
            					if ( innerEquiv( bVal, aVal ) ) {
         
     | 
| 
      
 1795 
     | 
    
         
            +
            						innerEq = true;
         
     | 
| 
      
 1796 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1797 
     | 
    
         
            +
            				} );
         
     | 
| 
      
 1798 
     | 
    
         
            +
             
     | 
| 
      
 1799 
     | 
    
         
            +
            				if ( !innerEq ) {
         
     | 
| 
      
 1800 
     | 
    
         
            +
            					outerEq = false;
         
     | 
| 
      
 1801 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1802 
     | 
    
         
            +
            			} );
         
     | 
| 
      
 1803 
     | 
    
         
            +
             
     | 
| 
      
 1804 
     | 
    
         
            +
            			return outerEq;
         
     | 
| 
      
 1805 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1806 
     | 
    
         
            +
             
     | 
| 
      
 1807 
     | 
    
         
            +
            		"map": function( b, a ) {
         
     | 
| 
      
 1808 
     | 
    
         
            +
            			var innerEq,
         
     | 
| 
      
 1809 
     | 
    
         
            +
            				outerEq = true;
         
     | 
| 
      
 1810 
     | 
    
         
            +
             
     | 
| 
      
 1811 
     | 
    
         
            +
            			if ( a.size !== b.size ) {
         
     | 
| 
      
 1812 
     | 
    
         
            +
            				return false;
         
     | 
| 
      
 1813 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1814 
     | 
    
         
            +
             
     | 
| 
      
 1815 
     | 
    
         
            +
            			a.forEach( function( aVal, aKey ) {
         
     | 
| 
      
 1816 
     | 
    
         
            +
            				innerEq = false;
         
     | 
| 
      
 1817 
     | 
    
         
            +
             
     | 
| 
      
 1818 
     | 
    
         
            +
            				b.forEach( function( bVal, bKey ) {
         
     | 
| 
      
 1819 
     | 
    
         
            +
            					if ( innerEquiv( [ bVal, bKey ], [ aVal, aKey ] ) ) {
         
     | 
| 
      
 1820 
     | 
    
         
            +
            						innerEq = true;
         
     | 
| 
      
 1821 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1822 
     | 
    
         
            +
            				} );
         
     | 
| 
      
 1823 
     | 
    
         
            +
             
     | 
| 
      
 1824 
     | 
    
         
            +
            				if ( !innerEq ) {
         
     | 
| 
      
 1825 
     | 
    
         
            +
            					outerEq = false;
         
     | 
| 
      
 1826 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1827 
     | 
    
         
            +
            			} );
         
     | 
| 
      
 1828 
     | 
    
         
            +
             
     | 
| 
      
 1829 
     | 
    
         
            +
            			return outerEq;
         
     | 
| 
      
 1830 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1831 
     | 
    
         
            +
             
     | 
| 
      
 1832 
     | 
    
         
            +
            		"object": function( b, a ) {
         
     | 
| 
      
 1833 
     | 
    
         
            +
            			var i, j, loop, aCircular, bCircular;
         
     | 
| 
      
 1834 
     | 
    
         
            +
             
     | 
| 
      
 1835 
     | 
    
         
            +
            			// Default to true
         
     | 
| 
      
 1836 
     | 
    
         
            +
            			var eq = true;
         
     | 
| 
      
 1837 
     | 
    
         
            +
            			var aProperties = [];
         
     | 
| 
      
 1838 
     | 
    
         
            +
            			var bProperties = [];
         
     | 
| 
      
 1839 
     | 
    
         
            +
             
     | 
| 
      
 1840 
     | 
    
         
            +
            			if ( compareConstructors( a, b ) === false ) {
         
     | 
| 
      
 1841 
     | 
    
         
            +
            				return false;
         
     | 
| 
      
 1842 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1843 
     | 
    
         
            +
             
     | 
| 
      
 1844 
     | 
    
         
            +
            			// Stack constructor before traversing properties
         
     | 
| 
      
 1845 
     | 
    
         
            +
            			callers.push( a.constructor );
         
     | 
| 
      
 1846 
     | 
    
         
            +
             
     | 
| 
      
 1847 
     | 
    
         
            +
            			// Track reference to avoid circular references
         
     | 
| 
      
 1848 
     | 
    
         
            +
            			parents.push( a );
         
     | 
| 
      
 1849 
     | 
    
         
            +
            			parentsB.push( b );
         
     | 
| 
      
 1850 
     | 
    
         
            +
             
     | 
| 
      
 1851 
     | 
    
         
            +
            			// Be strict: don't ensure hasOwnProperty and go deep
         
     | 
| 
      
 1852 
     | 
    
         
            +
            			for ( i in a ) {
         
     | 
| 
      
 1853 
     | 
    
         
            +
            				loop = false;
         
     | 
| 
      
 1854 
     | 
    
         
            +
            				for ( j = 0; j < parents.length; j++ ) {
         
     | 
| 
      
 1855 
     | 
    
         
            +
            					aCircular = parents[ j ] === a[ i ];
         
     | 
| 
      
 1856 
     | 
    
         
            +
            					bCircular = parentsB[ j ] === b[ i ];
         
     | 
| 
      
 1857 
     | 
    
         
            +
            					if ( aCircular || bCircular ) {
         
     | 
| 
      
 1858 
     | 
    
         
            +
            						if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
         
     | 
| 
      
 1859 
     | 
    
         
            +
            							loop = true;
         
     | 
| 
      
 1860 
     | 
    
         
            +
            						} else {
         
     | 
| 
      
 1861 
     | 
    
         
            +
            							eq = false;
         
     | 
| 
      
 1862 
     | 
    
         
            +
            							break;
         
     | 
| 
      
 1863 
     | 
    
         
            +
            						}
         
     | 
| 
      
 1864 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1865 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1866 
     | 
    
         
            +
            				aProperties.push( i );
         
     | 
| 
      
 1867 
     | 
    
         
            +
            				if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
         
     | 
| 
      
 1868 
     | 
    
         
            +
            					eq = false;
         
     | 
| 
      
 1869 
     | 
    
         
            +
            					break;
         
     | 
| 
      
 1870 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1871 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1872 
     | 
    
         
            +
             
     | 
| 
      
 1873 
     | 
    
         
            +
            			parents.pop();
         
     | 
| 
      
 1874 
     | 
    
         
            +
            			parentsB.pop();
         
     | 
| 
      
 1875 
     | 
    
         
            +
             
     | 
| 
      
 1876 
     | 
    
         
            +
            			// Unstack, we are done
         
     | 
| 
      
 1877 
     | 
    
         
            +
            			callers.pop();
         
     | 
| 
      
 1878 
     | 
    
         
            +
             
     | 
| 
      
 1879 
     | 
    
         
            +
            			for ( i in b ) {
         
     | 
| 
      
 1880 
     | 
    
         
            +
             
     | 
| 
      
 1881 
     | 
    
         
            +
            				// Collect b's properties
         
     | 
| 
      
 1882 
     | 
    
         
            +
            				bProperties.push( i );
         
     | 
| 
      
 1883 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1884 
     | 
    
         
            +
             
     | 
| 
      
 1885 
     | 
    
         
            +
            			// Ensures identical properties name
         
     | 
| 
      
 1886 
     | 
    
         
            +
            			return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
         
     | 
| 
      
 1887 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1888 
     | 
    
         
            +
            	};
         
     | 
| 
      
 1889 
     | 
    
         
            +
             
     | 
| 
      
 1890 
     | 
    
         
            +
            	function typeEquiv( a, b ) {
         
     | 
| 
      
 1891 
     | 
    
         
            +
            		var type = QUnit.objectType( a );
         
     | 
| 
      
 1892 
     | 
    
         
            +
            		return QUnit.objectType( b ) === type && callbacks[ type ]( b, a );
         
     | 
| 
      
 1893 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1894 
     | 
    
         
            +
             
     | 
| 
      
 1895 
     | 
    
         
            +
            	// The real equiv function
         
     | 
| 
      
 1896 
     | 
    
         
            +
            	function innerEquiv( a, b ) {
         
     | 
| 
      
 1897 
     | 
    
         
            +
             
     | 
| 
      
 1898 
     | 
    
         
            +
            		// We're done when there's nothing more to compare
         
     | 
| 
      
 1899 
     | 
    
         
            +
            		if ( arguments.length < 2 ) {
         
     | 
| 
      
 1900 
     | 
    
         
            +
            			return true;
         
     | 
| 
      
 1901 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1902 
     | 
    
         
            +
             
     | 
| 
      
 1903 
     | 
    
         
            +
            		// Require type-specific equality
         
     | 
| 
      
 1904 
     | 
    
         
            +
            		return ( a === b || typeEquiv( a, b ) ) &&
         
     | 
| 
      
 1905 
     | 
    
         
            +
             
     | 
| 
      
 1906 
     | 
    
         
            +
            			// ...across all consecutive argument pairs
         
     | 
| 
      
 1907 
     | 
    
         
            +
            			( arguments.length === 2 || innerEquiv.apply( this, [].slice.call( arguments, 1 ) ) );
         
     | 
| 
      
 1908 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1909 
     | 
    
         
            +
             
     | 
| 
      
 1910 
     | 
    
         
            +
            	return innerEquiv;
         
     | 
| 
      
 1911 
     | 
    
         
            +
            }() );
         
     | 
| 
      
 1912 
     | 
    
         
            +
             
     | 
| 
      
 1913 
     | 
    
         
            +
            // Based on jsDump by Ariel Flesler
         
     | 
| 
      
 1914 
     | 
    
         
            +
            // http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html
         
     | 
| 
      
 1915 
     | 
    
         
            +
            QUnit.dump = ( function() {
         
     | 
| 
      
 1916 
     | 
    
         
            +
            	function quote( str ) {
         
     | 
| 
      
 1917 
     | 
    
         
            +
            		return "\"" + str.toString().replace( /\\/g, "\\\\" ).replace( /"/g, "\\\"" ) + "\"";
         
     | 
| 
      
 1918 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1919 
     | 
    
         
            +
            	function literal( o ) {
         
     | 
| 
      
 1920 
     | 
    
         
            +
            		return o + "";
         
     | 
| 
      
 1921 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1922 
     | 
    
         
            +
            	function join( pre, arr, post ) {
         
     | 
| 
      
 1923 
     | 
    
         
            +
            		var s = dump.separator(),
         
     | 
| 
      
 1924 
     | 
    
         
            +
            			base = dump.indent(),
         
     | 
| 
      
 1925 
     | 
    
         
            +
            			inner = dump.indent( 1 );
         
     | 
| 
      
 1926 
     | 
    
         
            +
            		if ( arr.join ) {
         
     | 
| 
      
 1927 
     | 
    
         
            +
            			arr = arr.join( "," + s + inner );
         
     | 
| 
      
 1928 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1929 
     | 
    
         
            +
            		if ( !arr ) {
         
     | 
| 
      
 1930 
     | 
    
         
            +
            			return pre + post;
         
     | 
| 
      
 1931 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1932 
     | 
    
         
            +
            		return [ pre, inner + arr, base + post ].join( s );
         
     | 
| 
      
 1933 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1934 
     | 
    
         
            +
            	function array( arr, stack ) {
         
     | 
| 
      
 1935 
     | 
    
         
            +
            		var i = arr.length,
         
     | 
| 
      
 1936 
     | 
    
         
            +
            			ret = new Array( i );
         
     | 
| 
      
 1937 
     | 
    
         
            +
             
     | 
| 
      
 1938 
     | 
    
         
            +
            		if ( dump.maxDepth && dump.depth > dump.maxDepth ) {
         
     | 
| 
      
 1939 
     | 
    
         
            +
            			return "[object Array]";
         
     | 
| 
      
 1940 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1941 
     | 
    
         
            +
             
     | 
| 
      
 1942 
     | 
    
         
            +
            		this.up();
         
     | 
| 
      
 1943 
     | 
    
         
            +
            		while ( i-- ) {
         
     | 
| 
      
 1944 
     | 
    
         
            +
            			ret[ i ] = this.parse( arr[ i ], undefined, stack );
         
     | 
| 
      
 1945 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1946 
     | 
    
         
            +
            		this.down();
         
     | 
| 
      
 1947 
     | 
    
         
            +
            		return join( "[", ret, "]" );
         
     | 
| 
      
 1948 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1949 
     | 
    
         
            +
             
     | 
| 
      
 1950 
     | 
    
         
            +
            	var reName = /^function (\w+)/,
         
     | 
| 
      
 1951 
     | 
    
         
            +
            		dump = {
         
     | 
| 
      
 1952 
     | 
    
         
            +
             
     | 
| 
      
 1953 
     | 
    
         
            +
            			// The objType is used mostly internally, you can fix a (custom) type in advance
         
     | 
| 
      
 1954 
     | 
    
         
            +
            			parse: function( obj, objType, stack ) {
         
     | 
| 
      
 1955 
     | 
    
         
            +
            				stack = stack || [];
         
     | 
| 
      
 1956 
     | 
    
         
            +
            				var res, parser, parserType,
         
     | 
| 
      
 1957 
     | 
    
         
            +
            					inStack = inArray( obj, stack );
         
     | 
| 
      
 1958 
     | 
    
         
            +
             
     | 
| 
      
 1959 
     | 
    
         
            +
            				if ( inStack !== -1 ) {
         
     | 
| 
      
 1960 
     | 
    
         
            +
            					return "recursion(" + ( inStack - stack.length ) + ")";
         
     | 
| 
      
 1961 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1962 
     | 
    
         
            +
             
     | 
| 
      
 1963 
     | 
    
         
            +
            				objType = objType || this.typeOf( obj  );
         
     | 
| 
      
 1964 
     | 
    
         
            +
            				parser = this.parsers[ objType ];
         
     | 
| 
      
 1965 
     | 
    
         
            +
            				parserType = typeof parser;
         
     | 
| 
      
 1966 
     | 
    
         
            +
             
     | 
| 
      
 1967 
     | 
    
         
            +
            				if ( parserType === "function" ) {
         
     | 
| 
      
 1968 
     | 
    
         
            +
            					stack.push( obj );
         
     | 
| 
      
 1969 
     | 
    
         
            +
            					res = parser.call( this, obj, stack );
         
     | 
| 
      
 1970 
     | 
    
         
            +
            					stack.pop();
         
     | 
| 
      
 1971 
     | 
    
         
            +
            					return res;
         
     | 
| 
      
 1972 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1973 
     | 
    
         
            +
            				return ( parserType === "string" ) ? parser : this.parsers.error;
         
     | 
| 
      
 1974 
     | 
    
         
            +
            			},
         
     | 
| 
      
 1975 
     | 
    
         
            +
            			typeOf: function( obj ) {
         
     | 
| 
      
 1976 
     | 
    
         
            +
            				var type;
         
     | 
| 
      
 1977 
     | 
    
         
            +
            				if ( obj === null ) {
         
     | 
| 
      
 1978 
     | 
    
         
            +
            					type = "null";
         
     | 
| 
      
 1979 
     | 
    
         
            +
            				} else if ( typeof obj === "undefined" ) {
         
     | 
| 
      
 1980 
     | 
    
         
            +
            					type = "undefined";
         
     | 
| 
      
 1981 
     | 
    
         
            +
            				} else if ( QUnit.is( "regexp", obj ) ) {
         
     | 
| 
      
 1982 
     | 
    
         
            +
            					type = "regexp";
         
     | 
| 
      
 1983 
     | 
    
         
            +
            				} else if ( QUnit.is( "date", obj ) ) {
         
     | 
| 
      
 1984 
     | 
    
         
            +
            					type = "date";
         
     | 
| 
      
 1985 
     | 
    
         
            +
            				} else if ( QUnit.is( "function", obj ) ) {
         
     | 
| 
      
 1986 
     | 
    
         
            +
            					type = "function";
         
     | 
| 
      
 1987 
     | 
    
         
            +
            				} else if ( obj.setInterval !== undefined &&
         
     | 
| 
      
 1988 
     | 
    
         
            +
            						obj.document !== undefined &&
         
     | 
| 
      
 1989 
     | 
    
         
            +
            						obj.nodeType === undefined ) {
         
     | 
| 
      
 1990 
     | 
    
         
            +
            					type = "window";
         
     | 
| 
      
 1991 
     | 
    
         
            +
            				} else if ( obj.nodeType === 9 ) {
         
     | 
| 
      
 1992 
     | 
    
         
            +
            					type = "document";
         
     | 
| 
      
 1993 
     | 
    
         
            +
            				} else if ( obj.nodeType ) {
         
     | 
| 
      
 1994 
     | 
    
         
            +
            					type = "node";
         
     | 
| 
      
 1995 
     | 
    
         
            +
            				} else if (
         
     | 
| 
      
 1996 
     | 
    
         
            +
             
     | 
| 
      
 1997 
     | 
    
         
            +
            					// Native arrays
         
     | 
| 
      
 1998 
     | 
    
         
            +
            					toString.call( obj ) === "[object Array]" ||
         
     | 
| 
      
 1999 
     | 
    
         
            +
             
     | 
| 
      
 2000 
     | 
    
         
            +
            					// NodeList objects
         
     | 
| 
      
 2001 
     | 
    
         
            +
            					( typeof obj.length === "number" && obj.item !== undefined &&
         
     | 
| 
      
 2002 
     | 
    
         
            +
            					( obj.length ? obj.item( 0 ) === obj[ 0 ] : ( obj.item( 0 ) === null &&
         
     | 
| 
      
 2003 
     | 
    
         
            +
            					obj[ 0 ] === undefined ) ) )
         
     | 
| 
      
 2004 
     | 
    
         
            +
            				) {
         
     | 
| 
      
 2005 
     | 
    
         
            +
            					type = "array";
         
     | 
| 
      
 2006 
     | 
    
         
            +
            				} else if ( obj.constructor === Error.prototype.constructor ) {
         
     | 
| 
      
 2007 
     | 
    
         
            +
            					type = "error";
         
     | 
| 
      
 2008 
     | 
    
         
            +
            				} else {
         
     | 
| 
      
 2009 
     | 
    
         
            +
            					type = typeof obj;
         
     | 
| 
      
 2010 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2011 
     | 
    
         
            +
            				return type;
         
     | 
| 
      
 2012 
     | 
    
         
            +
            			},
         
     | 
| 
      
 2013 
     | 
    
         
            +
             
     | 
| 
      
 2014 
     | 
    
         
            +
            			separator: function() {
         
     | 
| 
      
 2015 
     | 
    
         
            +
            				return this.multiline ? this.HTML ? "<br />" : "\n" : this.HTML ? " " : " ";
         
     | 
| 
      
 2016 
     | 
    
         
            +
            			},
         
     | 
| 
      
 2017 
     | 
    
         
            +
             
     | 
| 
      
 2018 
     | 
    
         
            +
            			// Extra can be a number, shortcut for increasing-calling-decreasing
         
     | 
| 
      
 2019 
     | 
    
         
            +
            			indent: function( extra ) {
         
     | 
| 
      
 2020 
     | 
    
         
            +
            				if ( !this.multiline ) {
         
     | 
| 
      
 2021 
     | 
    
         
            +
            					return "";
         
     | 
| 
      
 2022 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2023 
     | 
    
         
            +
            				var chr = this.indentChar;
         
     | 
| 
      
 2024 
     | 
    
         
            +
            				if ( this.HTML ) {
         
     | 
| 
      
 2025 
     | 
    
         
            +
            					chr = chr.replace( /\t/g, "   " ).replace( / /g, " " );
         
     | 
| 
      
 2026 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2027 
     | 
    
         
            +
            				return new Array( this.depth + ( extra || 0 ) ).join( chr );
         
     | 
| 
      
 2028 
     | 
    
         
            +
            			},
         
     | 
| 
      
 2029 
     | 
    
         
            +
            			up: function( a ) {
         
     | 
| 
      
 2030 
     | 
    
         
            +
            				this.depth += a || 1;
         
     | 
| 
      
 2031 
     | 
    
         
            +
            			},
         
     | 
| 
      
 2032 
     | 
    
         
            +
            			down: function( a ) {
         
     | 
| 
      
 2033 
     | 
    
         
            +
            				this.depth -= a || 1;
         
     | 
| 
      
 2034 
     | 
    
         
            +
            			},
         
     | 
| 
      
 2035 
     | 
    
         
            +
            			setParser: function( name, parser ) {
         
     | 
| 
      
 2036 
     | 
    
         
            +
            				this.parsers[ name ] = parser;
         
     | 
| 
      
 2037 
     | 
    
         
            +
            			},
         
     | 
| 
      
 2038 
     | 
    
         
            +
             
     | 
| 
      
 2039 
     | 
    
         
            +
            			// The next 3 are exposed so you can use them
         
     | 
| 
      
 2040 
     | 
    
         
            +
            			quote: quote,
         
     | 
| 
      
 2041 
     | 
    
         
            +
            			literal: literal,
         
     | 
| 
      
 2042 
     | 
    
         
            +
            			join: join,
         
     | 
| 
      
 2043 
     | 
    
         
            +
            			depth: 1,
         
     | 
| 
      
 2044 
     | 
    
         
            +
            			maxDepth: QUnit.config.maxDepth,
         
     | 
| 
      
 2045 
     | 
    
         
            +
             
     | 
| 
      
 2046 
     | 
    
         
            +
            			// This is the list of parsers, to modify them, use dump.setParser
         
     | 
| 
      
 2047 
     | 
    
         
            +
            			parsers: {
         
     | 
| 
      
 2048 
     | 
    
         
            +
            				window: "[Window]",
         
     | 
| 
      
 2049 
     | 
    
         
            +
            				document: "[Document]",
         
     | 
| 
      
 2050 
     | 
    
         
            +
            				error: function( error ) {
         
     | 
| 
      
 2051 
     | 
    
         
            +
            					return "Error(\"" + error.message + "\")";
         
     | 
| 
      
 2052 
     | 
    
         
            +
            				},
         
     | 
| 
      
 2053 
     | 
    
         
            +
            				unknown: "[Unknown]",
         
     | 
| 
      
 2054 
     | 
    
         
            +
            				"null": "null",
         
     | 
| 
      
 2055 
     | 
    
         
            +
            				"undefined": "undefined",
         
     | 
| 
      
 2056 
     | 
    
         
            +
            				"function": function( fn ) {
         
     | 
| 
      
 2057 
     | 
    
         
            +
            					var ret = "function",
         
     | 
| 
      
 2058 
     | 
    
         
            +
             
     | 
| 
      
 2059 
     | 
    
         
            +
            						// Functions never have name in IE
         
     | 
| 
      
 2060 
     | 
    
         
            +
            						name = "name" in fn ? fn.name : ( reName.exec( fn ) || [] )[ 1 ];
         
     | 
| 
      
 2061 
     | 
    
         
            +
             
     | 
| 
      
 2062 
     | 
    
         
            +
            					if ( name ) {
         
     | 
| 
      
 2063 
     | 
    
         
            +
            						ret += " " + name;
         
     | 
| 
      
 2064 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2065 
     | 
    
         
            +
            					ret += "(";
         
     | 
| 
      
 2066 
     | 
    
         
            +
             
     | 
| 
      
 2067 
     | 
    
         
            +
            					ret = [ ret, dump.parse( fn, "functionArgs" ), "){" ].join( "" );
         
     | 
| 
      
 2068 
     | 
    
         
            +
            					return join( ret, dump.parse( fn, "functionCode" ), "}" );
         
     | 
| 
      
 2069 
     | 
    
         
            +
            				},
         
     | 
| 
      
 2070 
     | 
    
         
            +
            				array: array,
         
     | 
| 
      
 2071 
     | 
    
         
            +
            				nodelist: array,
         
     | 
| 
      
 2072 
     | 
    
         
            +
            				"arguments": array,
         
     | 
| 
      
 2073 
     | 
    
         
            +
            				object: function( map, stack ) {
         
     | 
| 
      
 2074 
     | 
    
         
            +
            					var keys, key, val, i, nonEnumerableProperties,
         
     | 
| 
      
 2075 
     | 
    
         
            +
            						ret = [];
         
     | 
| 
      
 2076 
     | 
    
         
            +
             
     | 
| 
      
 2077 
     | 
    
         
            +
            					if ( dump.maxDepth && dump.depth > dump.maxDepth ) {
         
     | 
| 
      
 2078 
     | 
    
         
            +
            						return "[object Object]";
         
     | 
| 
      
 2079 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2080 
     | 
    
         
            +
             
     | 
| 
      
 2081 
     | 
    
         
            +
            					dump.up();
         
     | 
| 
      
 2082 
     | 
    
         
            +
            					keys = [];
         
     | 
| 
      
 2083 
     | 
    
         
            +
            					for ( key in map ) {
         
     | 
| 
      
 2084 
     | 
    
         
            +
            						keys.push( key );
         
     | 
| 
      
 2085 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2086 
     | 
    
         
            +
             
     | 
| 
      
 2087 
     | 
    
         
            +
            					// Some properties are not always enumerable on Error objects.
         
     | 
| 
      
 2088 
     | 
    
         
            +
            					nonEnumerableProperties = [ "message", "name" ];
         
     | 
| 
      
 2089 
     | 
    
         
            +
            					for ( i in nonEnumerableProperties ) {
         
     | 
| 
      
 2090 
     | 
    
         
            +
            						key = nonEnumerableProperties[ i ];
         
     | 
| 
      
 2091 
     | 
    
         
            +
            						if ( key in map && inArray( key, keys ) < 0 ) {
         
     | 
| 
      
 2092 
     | 
    
         
            +
            							keys.push( key );
         
     | 
| 
      
 2093 
     | 
    
         
            +
            						}
         
     | 
| 
      
 2094 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2095 
     | 
    
         
            +
            					keys.sort();
         
     | 
| 
      
 2096 
     | 
    
         
            +
            					for ( i = 0; i < keys.length; i++ ) {
         
     | 
| 
      
 2097 
     | 
    
         
            +
            						key = keys[ i ];
         
     | 
| 
      
 2098 
     | 
    
         
            +
            						val = map[ key ];
         
     | 
| 
      
 2099 
     | 
    
         
            +
            						ret.push( dump.parse( key, "key" ) + ": " +
         
     | 
| 
      
 2100 
     | 
    
         
            +
            							dump.parse( val, undefined, stack ) );
         
     | 
| 
      
 2101 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2102 
     | 
    
         
            +
            					dump.down();
         
     | 
| 
      
 2103 
     | 
    
         
            +
            					return join( "{", ret, "}" );
         
     | 
| 
      
 2104 
     | 
    
         
            +
            				},
         
     | 
| 
      
 2105 
     | 
    
         
            +
            				node: function( node ) {
         
     | 
| 
      
 2106 
     | 
    
         
            +
            					var len, i, val,
         
     | 
| 
      
 2107 
     | 
    
         
            +
            						open = dump.HTML ? "<" : "<",
         
     | 
| 
      
 2108 
     | 
    
         
            +
            						close = dump.HTML ? ">" : ">",
         
     | 
| 
      
 2109 
     | 
    
         
            +
            						tag = node.nodeName.toLowerCase(),
         
     | 
| 
      
 2110 
     | 
    
         
            +
            						ret = open + tag,
         
     | 
| 
      
 2111 
     | 
    
         
            +
            						attrs = node.attributes;
         
     | 
| 
      
 2112 
     | 
    
         
            +
             
     | 
| 
      
 2113 
     | 
    
         
            +
            					if ( attrs ) {
         
     | 
| 
      
 2114 
     | 
    
         
            +
            						for ( i = 0, len = attrs.length; i < len; i++ ) {
         
     | 
| 
      
 2115 
     | 
    
         
            +
            							val = attrs[ i ].nodeValue;
         
     | 
| 
      
 2116 
     | 
    
         
            +
             
     | 
| 
      
 2117 
     | 
    
         
            +
            							// IE6 includes all attributes in .attributes, even ones not explicitly
         
     | 
| 
      
 2118 
     | 
    
         
            +
            							// set. Those have values like undefined, null, 0, false, "" or
         
     | 
| 
      
 2119 
     | 
    
         
            +
            							// "inherit".
         
     | 
| 
      
 2120 
     | 
    
         
            +
            							if ( val && val !== "inherit" ) {
         
     | 
| 
      
 2121 
     | 
    
         
            +
            								ret += " " + attrs[ i ].nodeName + "=" +
         
     | 
| 
      
 2122 
     | 
    
         
            +
            									dump.parse( val, "attribute" );
         
     | 
| 
      
 2123 
     | 
    
         
            +
            							}
         
     | 
| 
      
 2124 
     | 
    
         
            +
            						}
         
     | 
| 
      
 2125 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2126 
     | 
    
         
            +
            					ret += close;
         
     | 
| 
      
 2127 
     | 
    
         
            +
             
     | 
| 
      
 2128 
     | 
    
         
            +
            					// Show content of TextNode or CDATASection
         
     | 
| 
      
 2129 
     | 
    
         
            +
            					if ( node.nodeType === 3 || node.nodeType === 4 ) {
         
     | 
| 
      
 2130 
     | 
    
         
            +
            						ret += node.nodeValue;
         
     | 
| 
      
 2131 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2132 
     | 
    
         
            +
             
     | 
| 
      
 2133 
     | 
    
         
            +
            					return ret + open + "/" + tag + close;
         
     | 
| 
      
 2134 
     | 
    
         
            +
            				},
         
     | 
| 
      
 2135 
     | 
    
         
            +
             
     | 
| 
      
 2136 
     | 
    
         
            +
            				// Function calls it internally, it's the arguments part of the function
         
     | 
| 
      
 2137 
     | 
    
         
            +
            				functionArgs: function( fn ) {
         
     | 
| 
      
 2138 
     | 
    
         
            +
            					var args,
         
     | 
| 
      
 2139 
     | 
    
         
            +
            						l = fn.length;
         
     | 
| 
      
 2140 
     | 
    
         
            +
             
     | 
| 
      
 2141 
     | 
    
         
            +
            					if ( !l ) {
         
     | 
| 
      
 2142 
     | 
    
         
            +
            						return "";
         
     | 
| 
      
 2143 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2144 
     | 
    
         
            +
             
     | 
| 
      
 2145 
     | 
    
         
            +
            					args = new Array( l );
         
     | 
| 
      
 2146 
     | 
    
         
            +
            					while ( l-- ) {
         
     | 
| 
      
 2147 
     | 
    
         
            +
             
     | 
| 
      
 2148 
     | 
    
         
            +
            						// 97 is 'a'
         
     | 
| 
      
 2149 
     | 
    
         
            +
            						args[ l ] = String.fromCharCode( 97 + l );
         
     | 
| 
      
 2150 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2151 
     | 
    
         
            +
            					return " " + args.join( ", " ) + " ";
         
     | 
| 
      
 2152 
     | 
    
         
            +
            				},
         
     | 
| 
      
 2153 
     | 
    
         
            +
             
     | 
| 
      
 2154 
     | 
    
         
            +
            				// Object calls it internally, the key part of an item in a map
         
     | 
| 
      
 2155 
     | 
    
         
            +
            				key: quote,
         
     | 
| 
      
 2156 
     | 
    
         
            +
             
     | 
| 
      
 2157 
     | 
    
         
            +
            				// Function calls it internally, it's the content of the function
         
     | 
| 
      
 2158 
     | 
    
         
            +
            				functionCode: "[code]",
         
     | 
| 
      
 2159 
     | 
    
         
            +
             
     | 
| 
      
 2160 
     | 
    
         
            +
            				// Node calls it internally, it's a html attribute value
         
     | 
| 
      
 2161 
     | 
    
         
            +
            				attribute: quote,
         
     | 
| 
      
 2162 
     | 
    
         
            +
            				string: quote,
         
     | 
| 
      
 2163 
     | 
    
         
            +
            				date: quote,
         
     | 
| 
      
 2164 
     | 
    
         
            +
            				regexp: literal,
         
     | 
| 
      
 2165 
     | 
    
         
            +
            				number: literal,
         
     | 
| 
      
 2166 
     | 
    
         
            +
            				"boolean": literal
         
     | 
| 
      
 2167 
     | 
    
         
            +
            			},
         
     | 
| 
      
 2168 
     | 
    
         
            +
             
     | 
| 
      
 2169 
     | 
    
         
            +
            			// If true, entities are escaped ( <, >, \t, space and \n )
         
     | 
| 
      
 2170 
     | 
    
         
            +
            			HTML: false,
         
     | 
| 
      
 2171 
     | 
    
         
            +
             
     | 
| 
      
 2172 
     | 
    
         
            +
            			// Indentation unit
         
     | 
| 
      
 2173 
     | 
    
         
            +
            			indentChar: "  ",
         
     | 
| 
      
 2174 
     | 
    
         
            +
             
     | 
| 
      
 2175 
     | 
    
         
            +
            			// If true, items in a collection, are separated by a \n, else just a space.
         
     | 
| 
      
 2176 
     | 
    
         
            +
            			multiline: true
         
     | 
| 
      
 2177 
     | 
    
         
            +
            		};
         
     | 
| 
      
 2178 
     | 
    
         
            +
             
     | 
| 
      
 2179 
     | 
    
         
            +
            	return dump;
         
     | 
| 
      
 2180 
     | 
    
         
            +
            }() );
         
     | 
| 
      
 2181 
     | 
    
         
            +
             
     | 
| 
      
 2182 
     | 
    
         
            +
            // Back compat
         
     | 
| 
      
 2183 
     | 
    
         
            +
            QUnit.jsDump = QUnit.dump;
         
     | 
| 
      
 2184 
     | 
    
         
            +
             
     | 
| 
      
 2185 
     | 
    
         
            +
            // Deprecated
         
     | 
| 
      
 2186 
     | 
    
         
            +
            // Extend assert methods to QUnit for Backwards compatibility
         
     | 
| 
      
 2187 
     | 
    
         
            +
            ( function() {
         
     | 
| 
      
 2188 
     | 
    
         
            +
            	var i,
         
     | 
| 
      
 2189 
     | 
    
         
            +
            		assertions = Assert.prototype;
         
     | 
| 
      
 2190 
     | 
    
         
            +
             
     | 
| 
      
 2191 
     | 
    
         
            +
            	function applyCurrent( current ) {
         
     | 
| 
      
 2192 
     | 
    
         
            +
            		return function() {
         
     | 
| 
      
 2193 
     | 
    
         
            +
            			var assert = new Assert( QUnit.config.current );
         
     | 
| 
      
 2194 
     | 
    
         
            +
            			current.apply( assert, arguments );
         
     | 
| 
      
 2195 
     | 
    
         
            +
            		};
         
     | 
| 
      
 2196 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2197 
     | 
    
         
            +
             
     | 
| 
      
 2198 
     | 
    
         
            +
            	for ( i in assertions ) {
         
     | 
| 
      
 2199 
     | 
    
         
            +
            		QUnit[ i ] = applyCurrent( assertions[ i ] );
         
     | 
| 
      
 2200 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2201 
     | 
    
         
            +
            }() );
         
     | 
| 
      
 2202 
     | 
    
         
            +
             
     | 
| 
      
 2203 
     | 
    
         
            +
            // For browser, export only select globals
         
     | 
| 
      
 2204 
     | 
    
         
            +
            if ( defined.document ) {
         
     | 
| 
      
 2205 
     | 
    
         
            +
             
     | 
| 
      
 2206 
     | 
    
         
            +
            	( function() {
         
     | 
| 
      
 2207 
     | 
    
         
            +
            		var i, l,
         
     | 
| 
      
 2208 
     | 
    
         
            +
            			keys = [
         
     | 
| 
      
 2209 
     | 
    
         
            +
            				"test",
         
     | 
| 
      
 2210 
     | 
    
         
            +
            				"module",
         
     | 
| 
      
 2211 
     | 
    
         
            +
            				"expect",
         
     | 
| 
      
 2212 
     | 
    
         
            +
            				"asyncTest",
         
     | 
| 
      
 2213 
     | 
    
         
            +
            				"start",
         
     | 
| 
      
 2214 
     | 
    
         
            +
            				"stop",
         
     | 
| 
      
 2215 
     | 
    
         
            +
            				"ok",
         
     | 
| 
      
 2216 
     | 
    
         
            +
            				"notOk",
         
     | 
| 
      
 2217 
     | 
    
         
            +
            				"equal",
         
     | 
| 
      
 2218 
     | 
    
         
            +
            				"notEqual",
         
     | 
| 
      
 2219 
     | 
    
         
            +
            				"propEqual",
         
     | 
| 
      
 2220 
     | 
    
         
            +
            				"notPropEqual",
         
     | 
| 
      
 2221 
     | 
    
         
            +
            				"deepEqual",
         
     | 
| 
      
 2222 
     | 
    
         
            +
            				"notDeepEqual",
         
     | 
| 
      
 2223 
     | 
    
         
            +
            				"strictEqual",
         
     | 
| 
      
 2224 
     | 
    
         
            +
            				"notStrictEqual",
         
     | 
| 
      
 2225 
     | 
    
         
            +
            				"throws",
         
     | 
| 
      
 2226 
     | 
    
         
            +
            				"raises"
         
     | 
| 
      
 2227 
     | 
    
         
            +
            			];
         
     | 
| 
      
 2228 
     | 
    
         
            +
             
     | 
| 
      
 2229 
     | 
    
         
            +
            		for ( i = 0, l = keys.length; i < l; i++ ) {
         
     | 
| 
      
 2230 
     | 
    
         
            +
            			window[ keys[ i ] ] = QUnit[ keys[ i ] ];
         
     | 
| 
      
 2231 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2232 
     | 
    
         
            +
            	}() );
         
     | 
| 
      
 2233 
     | 
    
         
            +
             
     | 
| 
      
 2234 
     | 
    
         
            +
            	window.QUnit = QUnit;
         
     | 
| 
      
 2235 
     | 
    
         
            +
            }
         
     | 
| 
      
 2236 
     | 
    
         
            +
             
     | 
| 
      
 2237 
     | 
    
         
            +
            // For nodejs
         
     | 
| 
      
 2238 
     | 
    
         
            +
            if ( typeof module !== "undefined" && module && module.exports ) {
         
     | 
| 
      
 2239 
     | 
    
         
            +
            	module.exports = QUnit;
         
     | 
| 
      
 2240 
     | 
    
         
            +
             
     | 
| 
      
 2241 
     | 
    
         
            +
            	// For consistency with CommonJS environments' exports
         
     | 
| 
      
 2242 
     | 
    
         
            +
            	module.exports.QUnit = QUnit;
         
     | 
| 
      
 2243 
     | 
    
         
            +
            }
         
     | 
| 
      
 2244 
     | 
    
         
            +
             
     | 
| 
      
 2245 
     | 
    
         
            +
            // For CommonJS with exports, but without module.exports, like Rhino
         
     | 
| 
      
 2246 
     | 
    
         
            +
            if ( typeof exports !== "undefined" && exports ) {
         
     | 
| 
      
 2247 
     | 
    
         
            +
            	exports.QUnit = QUnit;
         
     | 
| 
      
 2248 
     | 
    
         
            +
            }
         
     | 
| 
      
 2249 
     | 
    
         
            +
             
     | 
| 
      
 2250 
     | 
    
         
            +
            if ( typeof define === "function" && define.amd ) {
         
     | 
| 
      
 2251 
     | 
    
         
            +
            	define( function() {
         
     | 
| 
      
 2252 
     | 
    
         
            +
            		return QUnit;
         
     | 
| 
      
 2253 
     | 
    
         
            +
            	} );
         
     | 
| 
      
 2254 
     | 
    
         
            +
            	QUnit.config.autostart = false;
         
     | 
| 
      
 2255 
     | 
    
         
            +
            }
         
     | 
| 
      
 2256 
     | 
    
         
            +
             
     | 
| 
      
 2257 
     | 
    
         
            +
            // Get a reference to the global object, like window in browsers
         
     | 
| 
      
 2258 
     | 
    
         
            +
            }( ( function() {
         
     | 
| 
      
 2259 
     | 
    
         
            +
            	return this;
         
     | 
| 
      
 2260 
     | 
    
         
            +
            }() ) ) );
         
     | 
| 
      
 2261 
     | 
    
         
            +
             
     | 
| 
      
 2262 
     | 
    
         
            +
            ( function() {
         
     | 
| 
      
 2263 
     | 
    
         
            +
             
     | 
| 
      
 2264 
     | 
    
         
            +
            // Only interact with URLs via window.location
         
     | 
| 
      
 2265 
     | 
    
         
            +
            var location = typeof window !== "undefined" && window.location;
         
     | 
| 
      
 2266 
     | 
    
         
            +
            if ( !location ) {
         
     | 
| 
      
 2267 
     | 
    
         
            +
            	return;
         
     | 
| 
      
 2268 
     | 
    
         
            +
            }
         
     | 
| 
      
 2269 
     | 
    
         
            +
             
     | 
| 
      
 2270 
     | 
    
         
            +
            var urlParams = getUrlParams();
         
     | 
| 
      
 2271 
     | 
    
         
            +
             
     | 
| 
      
 2272 
     | 
    
         
            +
            QUnit.urlParams = urlParams;
         
     | 
| 
      
 2273 
     | 
    
         
            +
             
     | 
| 
      
 2274 
     | 
    
         
            +
            // Match module/test by inclusion in an array
         
     | 
| 
      
 2275 
     | 
    
         
            +
            QUnit.config.moduleId = [].concat( urlParams.moduleId || [] );
         
     | 
| 
      
 2276 
     | 
    
         
            +
            QUnit.config.testId = [].concat( urlParams.testId || [] );
         
     | 
| 
      
 2277 
     | 
    
         
            +
             
     | 
| 
      
 2278 
     | 
    
         
            +
            // Exact case-insensitive match of the module name
         
     | 
| 
      
 2279 
     | 
    
         
            +
            QUnit.config.module = urlParams.module;
         
     | 
| 
      
 2280 
     | 
    
         
            +
             
     | 
| 
      
 2281 
     | 
    
         
            +
            // Regular expression or case-insenstive substring match against "moduleName: testName"
         
     | 
| 
      
 2282 
     | 
    
         
            +
            QUnit.config.filter = urlParams.filter;
         
     | 
| 
      
 2283 
     | 
    
         
            +
             
     | 
| 
      
 2284 
     | 
    
         
            +
            // Test order randomization
         
     | 
| 
      
 2285 
     | 
    
         
            +
            if ( urlParams.seed === true ) {
         
     | 
| 
      
 2286 
     | 
    
         
            +
             
     | 
| 
      
 2287 
     | 
    
         
            +
            	// Generate a random seed if the option is specified without a value
         
     | 
| 
      
 2288 
     | 
    
         
            +
            	QUnit.config.seed = Math.random().toString( 36 ).slice( 2 );
         
     | 
| 
      
 2289 
     | 
    
         
            +
            } else if ( urlParams.seed ) {
         
     | 
| 
      
 2290 
     | 
    
         
            +
            	QUnit.config.seed = urlParams.seed;
         
     | 
| 
      
 2291 
     | 
    
         
            +
            }
         
     | 
| 
      
 2292 
     | 
    
         
            +
             
     | 
| 
      
 2293 
     | 
    
         
            +
            // Add URL-parameter-mapped config values with UI form rendering data
         
     | 
| 
      
 2294 
     | 
    
         
            +
            QUnit.config.urlConfig.push(
         
     | 
| 
      
 2295 
     | 
    
         
            +
            	{
         
     | 
| 
      
 2296 
     | 
    
         
            +
            		id: "hidepassed",
         
     | 
| 
      
 2297 
     | 
    
         
            +
            		label: "Hide passed tests",
         
     | 
| 
      
 2298 
     | 
    
         
            +
            		tooltip: "Only show tests and assertions that fail. Stored as query-strings."
         
     | 
| 
      
 2299 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2300 
     | 
    
         
            +
            	{
         
     | 
| 
      
 2301 
     | 
    
         
            +
            		id: "noglobals",
         
     | 
| 
      
 2302 
     | 
    
         
            +
            		label: "Check for Globals",
         
     | 
| 
      
 2303 
     | 
    
         
            +
            		tooltip: "Enabling this will test if any test introduces new properties on the " +
         
     | 
| 
      
 2304 
     | 
    
         
            +
            			"global object (`window` in Browsers). Stored as query-strings."
         
     | 
| 
      
 2305 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2306 
     | 
    
         
            +
            	{
         
     | 
| 
      
 2307 
     | 
    
         
            +
            		id: "notrycatch",
         
     | 
| 
      
 2308 
     | 
    
         
            +
            		label: "No try-catch",
         
     | 
| 
      
 2309 
     | 
    
         
            +
            		tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging " +
         
     | 
| 
      
 2310 
     | 
    
         
            +
            			"exceptions in IE reasonable. Stored as query-strings."
         
     | 
| 
      
 2311 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2312 
     | 
    
         
            +
            );
         
     | 
| 
      
 2313 
     | 
    
         
            +
             
     | 
| 
      
 2314 
     | 
    
         
            +
            QUnit.begin( function() {
         
     | 
| 
      
 2315 
     | 
    
         
            +
            	var i, option,
         
     | 
| 
      
 2316 
     | 
    
         
            +
            		urlConfig = QUnit.config.urlConfig;
         
     | 
| 
      
 2317 
     | 
    
         
            +
             
     | 
| 
      
 2318 
     | 
    
         
            +
            	for ( i = 0; i < urlConfig.length; i++ ) {
         
     | 
| 
      
 2319 
     | 
    
         
            +
             
     | 
| 
      
 2320 
     | 
    
         
            +
            		// Options can be either strings or objects with nonempty "id" properties
         
     | 
| 
      
 2321 
     | 
    
         
            +
            		option = QUnit.config.urlConfig[ i ];
         
     | 
| 
      
 2322 
     | 
    
         
            +
            		if ( typeof option !== "string" ) {
         
     | 
| 
      
 2323 
     | 
    
         
            +
            			option = option.id;
         
     | 
| 
      
 2324 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2325 
     | 
    
         
            +
             
     | 
| 
      
 2326 
     | 
    
         
            +
            		if ( QUnit.config[ option ] === undefined ) {
         
     | 
| 
      
 2327 
     | 
    
         
            +
            			QUnit.config[ option ] = urlParams[ option ];
         
     | 
| 
      
 2328 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2329 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2330 
     | 
    
         
            +
            } );
         
     | 
| 
      
 2331 
     | 
    
         
            +
             
     | 
| 
      
 2332 
     | 
    
         
            +
            function getUrlParams() {
         
     | 
| 
      
 2333 
     | 
    
         
            +
            	var i, param, name, value;
         
     | 
| 
      
 2334 
     | 
    
         
            +
            	var urlParams = {};
         
     | 
| 
      
 2335 
     | 
    
         
            +
            	var params = location.search.slice( 1 ).split( "&" );
         
     | 
| 
      
 2336 
     | 
    
         
            +
            	var length = params.length;
         
     | 
| 
      
 2337 
     | 
    
         
            +
             
     | 
| 
      
 2338 
     | 
    
         
            +
            	for ( i = 0; i < length; i++ ) {
         
     | 
| 
      
 2339 
     | 
    
         
            +
            		if ( params[ i ] ) {
         
     | 
| 
      
 2340 
     | 
    
         
            +
            			param = params[ i ].split( "=" );
         
     | 
| 
      
 2341 
     | 
    
         
            +
            			name = decodeURIComponent( param[ 0 ] );
         
     | 
| 
      
 2342 
     | 
    
         
            +
             
     | 
| 
      
 2343 
     | 
    
         
            +
            			// Allow just a key to turn on a flag, e.g., test.html?noglobals
         
     | 
| 
      
 2344 
     | 
    
         
            +
            			value = param.length === 1 ||
         
     | 
| 
      
 2345 
     | 
    
         
            +
            				decodeURIComponent( param.slice( 1 ).join( "=" ) ) ;
         
     | 
| 
      
 2346 
     | 
    
         
            +
            			if ( urlParams[ name ] ) {
         
     | 
| 
      
 2347 
     | 
    
         
            +
            				urlParams[ name ] = [].concat( urlParams[ name ], value );
         
     | 
| 
      
 2348 
     | 
    
         
            +
            			} else {
         
     | 
| 
      
 2349 
     | 
    
         
            +
            				urlParams[ name ] = value;
         
     | 
| 
      
 2350 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2351 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2352 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2353 
     | 
    
         
            +
             
     | 
| 
      
 2354 
     | 
    
         
            +
            	return urlParams;
         
     | 
| 
      
 2355 
     | 
    
         
            +
            }
         
     | 
| 
      
 2356 
     | 
    
         
            +
             
     | 
| 
      
 2357 
     | 
    
         
            +
            // Don't load the HTML Reporter on non-browser environments
         
     | 
| 
      
 2358 
     | 
    
         
            +
            if ( typeof window === "undefined" || !window.document ) {
         
     | 
| 
      
 2359 
     | 
    
         
            +
            	return;
         
     | 
| 
      
 2360 
     | 
    
         
            +
            }
         
     | 
| 
      
 2361 
     | 
    
         
            +
             
     | 
| 
      
 2362 
     | 
    
         
            +
            // Deprecated QUnit.init - Ref #530
         
     | 
| 
      
 2363 
     | 
    
         
            +
            // Re-initialize the configuration options
         
     | 
| 
      
 2364 
     | 
    
         
            +
            QUnit.init = function() {
         
     | 
| 
      
 2365 
     | 
    
         
            +
            	var config = QUnit.config;
         
     | 
| 
      
 2366 
     | 
    
         
            +
             
     | 
| 
      
 2367 
     | 
    
         
            +
            	config.stats = { all: 0, bad: 0 };
         
     | 
| 
      
 2368 
     | 
    
         
            +
            	config.moduleStats = { all: 0, bad: 0 };
         
     | 
| 
      
 2369 
     | 
    
         
            +
            	config.started = 0;
         
     | 
| 
      
 2370 
     | 
    
         
            +
            	config.updateRate = 1000;
         
     | 
| 
      
 2371 
     | 
    
         
            +
            	config.blocking = false;
         
     | 
| 
      
 2372 
     | 
    
         
            +
            	config.autostart = true;
         
     | 
| 
      
 2373 
     | 
    
         
            +
            	config.autorun = false;
         
     | 
| 
      
 2374 
     | 
    
         
            +
            	config.filter = "";
         
     | 
| 
      
 2375 
     | 
    
         
            +
            	config.queue = [];
         
     | 
| 
      
 2376 
     | 
    
         
            +
             
     | 
| 
      
 2377 
     | 
    
         
            +
            	appendInterface();
         
     | 
| 
      
 2378 
     | 
    
         
            +
            };
         
     | 
| 
      
 2379 
     | 
    
         
            +
             
     | 
| 
      
 2380 
     | 
    
         
            +
            var config = QUnit.config,
         
     | 
| 
      
 2381 
     | 
    
         
            +
            	document = window.document,
         
     | 
| 
      
 2382 
     | 
    
         
            +
            	collapseNext = false,
         
     | 
| 
      
 2383 
     | 
    
         
            +
            	hasOwn = Object.prototype.hasOwnProperty,
         
     | 
| 
      
 2384 
     | 
    
         
            +
            	unfilteredUrl = setUrl( { filter: undefined, module: undefined,
         
     | 
| 
      
 2385 
     | 
    
         
            +
            		moduleId: undefined, testId: undefined } ),
         
     | 
| 
      
 2386 
     | 
    
         
            +
            	defined = {
         
     | 
| 
      
 2387 
     | 
    
         
            +
            		sessionStorage: ( function() {
         
     | 
| 
      
 2388 
     | 
    
         
            +
            			var x = "qunit-test-string";
         
     | 
| 
      
 2389 
     | 
    
         
            +
            			try {
         
     | 
| 
      
 2390 
     | 
    
         
            +
            				sessionStorage.setItem( x, x );
         
     | 
| 
      
 2391 
     | 
    
         
            +
            				sessionStorage.removeItem( x );
         
     | 
| 
      
 2392 
     | 
    
         
            +
            				return true;
         
     | 
| 
      
 2393 
     | 
    
         
            +
            			} catch ( e ) {
         
     | 
| 
      
 2394 
     | 
    
         
            +
            				return false;
         
     | 
| 
      
 2395 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2396 
     | 
    
         
            +
            		}() )
         
     | 
| 
      
 2397 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2398 
     | 
    
         
            +
            	modulesList = [];
         
     | 
| 
      
 2399 
     | 
    
         
            +
             
     | 
| 
      
 2400 
     | 
    
         
            +
            /**
         
     | 
| 
      
 2401 
     | 
    
         
            +
            * Escape text for attribute or text content.
         
     | 
| 
      
 2402 
     | 
    
         
            +
            */
         
     | 
| 
      
 2403 
     | 
    
         
            +
            function escapeText( s ) {
         
     | 
| 
      
 2404 
     | 
    
         
            +
            	if ( !s ) {
         
     | 
| 
      
 2405 
     | 
    
         
            +
            		return "";
         
     | 
| 
      
 2406 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2407 
     | 
    
         
            +
            	s = s + "";
         
     | 
| 
      
 2408 
     | 
    
         
            +
             
     | 
| 
      
 2409 
     | 
    
         
            +
            	// Both single quotes and double quotes (for attributes)
         
     | 
| 
      
 2410 
     | 
    
         
            +
            	return s.replace( /['"<>&]/g, function( s ) {
         
     | 
| 
      
 2411 
     | 
    
         
            +
            		switch ( s ) {
         
     | 
| 
      
 2412 
     | 
    
         
            +
            		case "'":
         
     | 
| 
      
 2413 
     | 
    
         
            +
            			return "'";
         
     | 
| 
      
 2414 
     | 
    
         
            +
            		case "\"":
         
     | 
| 
      
 2415 
     | 
    
         
            +
            			return """;
         
     | 
| 
      
 2416 
     | 
    
         
            +
            		case "<":
         
     | 
| 
      
 2417 
     | 
    
         
            +
            			return "<";
         
     | 
| 
      
 2418 
     | 
    
         
            +
            		case ">":
         
     | 
| 
      
 2419 
     | 
    
         
            +
            			return ">";
         
     | 
| 
      
 2420 
     | 
    
         
            +
            		case "&":
         
     | 
| 
      
 2421 
     | 
    
         
            +
            			return "&";
         
     | 
| 
      
 2422 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2423 
     | 
    
         
            +
            	} );
         
     | 
| 
      
 2424 
     | 
    
         
            +
            }
         
     | 
| 
      
 2425 
     | 
    
         
            +
             
     | 
| 
      
 2426 
     | 
    
         
            +
            /**
         
     | 
| 
      
 2427 
     | 
    
         
            +
             * @param {HTMLElement} elem
         
     | 
| 
      
 2428 
     | 
    
         
            +
             * @param {string} type
         
     | 
| 
      
 2429 
     | 
    
         
            +
             * @param {Function} fn
         
     | 
| 
      
 2430 
     | 
    
         
            +
             */
         
     | 
| 
      
 2431 
     | 
    
         
            +
            function addEvent( elem, type, fn ) {
         
     | 
| 
      
 2432 
     | 
    
         
            +
            	if ( elem.addEventListener ) {
         
     | 
| 
      
 2433 
     | 
    
         
            +
             
     | 
| 
      
 2434 
     | 
    
         
            +
            		// Standards-based browsers
         
     | 
| 
      
 2435 
     | 
    
         
            +
            		elem.addEventListener( type, fn, false );
         
     | 
| 
      
 2436 
     | 
    
         
            +
            	} else if ( elem.attachEvent ) {
         
     | 
| 
      
 2437 
     | 
    
         
            +
             
     | 
| 
      
 2438 
     | 
    
         
            +
            		// Support: IE <9
         
     | 
| 
      
 2439 
     | 
    
         
            +
            		elem.attachEvent( "on" + type, function() {
         
     | 
| 
      
 2440 
     | 
    
         
            +
            			var event = window.event;
         
     | 
| 
      
 2441 
     | 
    
         
            +
            			if ( !event.target ) {
         
     | 
| 
      
 2442 
     | 
    
         
            +
            				event.target = event.srcElement || document;
         
     | 
| 
      
 2443 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2444 
     | 
    
         
            +
             
     | 
| 
      
 2445 
     | 
    
         
            +
            			fn.call( elem, event );
         
     | 
| 
      
 2446 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 2447 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2448 
     | 
    
         
            +
            }
         
     | 
| 
      
 2449 
     | 
    
         
            +
             
     | 
| 
      
 2450 
     | 
    
         
            +
            /**
         
     | 
| 
      
 2451 
     | 
    
         
            +
             * @param {Array|NodeList} elems
         
     | 
| 
      
 2452 
     | 
    
         
            +
             * @param {string} type
         
     | 
| 
      
 2453 
     | 
    
         
            +
             * @param {Function} fn
         
     | 
| 
      
 2454 
     | 
    
         
            +
             */
         
     | 
| 
      
 2455 
     | 
    
         
            +
            function addEvents( elems, type, fn ) {
         
     | 
| 
      
 2456 
     | 
    
         
            +
            	var i = elems.length;
         
     | 
| 
      
 2457 
     | 
    
         
            +
            	while ( i-- ) {
         
     | 
| 
      
 2458 
     | 
    
         
            +
            		addEvent( elems[ i ], type, fn );
         
     | 
| 
      
 2459 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2460 
     | 
    
         
            +
            }
         
     | 
| 
      
 2461 
     | 
    
         
            +
             
     | 
| 
      
 2462 
     | 
    
         
            +
            function hasClass( elem, name ) {
         
     | 
| 
      
 2463 
     | 
    
         
            +
            	return ( " " + elem.className + " " ).indexOf( " " + name + " " ) >= 0;
         
     | 
| 
      
 2464 
     | 
    
         
            +
            }
         
     | 
| 
      
 2465 
     | 
    
         
            +
             
     | 
| 
      
 2466 
     | 
    
         
            +
            function addClass( elem, name ) {
         
     | 
| 
      
 2467 
     | 
    
         
            +
            	if ( !hasClass( elem, name ) ) {
         
     | 
| 
      
 2468 
     | 
    
         
            +
            		elem.className += ( elem.className ? " " : "" ) + name;
         
     | 
| 
      
 2469 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2470 
     | 
    
         
            +
            }
         
     | 
| 
      
 2471 
     | 
    
         
            +
             
     | 
| 
      
 2472 
     | 
    
         
            +
            function toggleClass( elem, name, force ) {
         
     | 
| 
      
 2473 
     | 
    
         
            +
            	if ( force || typeof force === "undefined" && !hasClass( elem, name ) ) {
         
     | 
| 
      
 2474 
     | 
    
         
            +
            		addClass( elem, name );
         
     | 
| 
      
 2475 
     | 
    
         
            +
            	} else {
         
     | 
| 
      
 2476 
     | 
    
         
            +
            		removeClass( elem, name );
         
     | 
| 
      
 2477 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2478 
     | 
    
         
            +
            }
         
     | 
| 
      
 2479 
     | 
    
         
            +
             
     | 
| 
      
 2480 
     | 
    
         
            +
            function removeClass( elem, name ) {
         
     | 
| 
      
 2481 
     | 
    
         
            +
            	var set = " " + elem.className + " ";
         
     | 
| 
      
 2482 
     | 
    
         
            +
             
     | 
| 
      
 2483 
     | 
    
         
            +
            	// Class name may appear multiple times
         
     | 
| 
      
 2484 
     | 
    
         
            +
            	while ( set.indexOf( " " + name + " " ) >= 0 ) {
         
     | 
| 
      
 2485 
     | 
    
         
            +
            		set = set.replace( " " + name + " ", " " );
         
     | 
| 
      
 2486 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2487 
     | 
    
         
            +
             
     | 
| 
      
 2488 
     | 
    
         
            +
            	// Trim for prettiness
         
     | 
| 
      
 2489 
     | 
    
         
            +
            	elem.className = typeof set.trim === "function" ? set.trim() : set.replace( /^\s+|\s+$/g, "" );
         
     | 
| 
      
 2490 
     | 
    
         
            +
            }
         
     | 
| 
      
 2491 
     | 
    
         
            +
             
     | 
| 
      
 2492 
     | 
    
         
            +
            function id( name ) {
         
     | 
| 
      
 2493 
     | 
    
         
            +
            	return document.getElementById && document.getElementById( name );
         
     | 
| 
      
 2494 
     | 
    
         
            +
            }
         
     | 
| 
      
 2495 
     | 
    
         
            +
             
     | 
| 
      
 2496 
     | 
    
         
            +
            function getUrlConfigHtml() {
         
     | 
| 
      
 2497 
     | 
    
         
            +
            	var i, j, val,
         
     | 
| 
      
 2498 
     | 
    
         
            +
            		escaped, escapedTooltip,
         
     | 
| 
      
 2499 
     | 
    
         
            +
            		selection = false,
         
     | 
| 
      
 2500 
     | 
    
         
            +
            		urlConfig = config.urlConfig,
         
     | 
| 
      
 2501 
     | 
    
         
            +
            		urlConfigHtml = "";
         
     | 
| 
      
 2502 
     | 
    
         
            +
             
     | 
| 
      
 2503 
     | 
    
         
            +
            	for ( i = 0; i < urlConfig.length; i++ ) {
         
     | 
| 
      
 2504 
     | 
    
         
            +
             
     | 
| 
      
 2505 
     | 
    
         
            +
            		// Options can be either strings or objects with nonempty "id" properties
         
     | 
| 
      
 2506 
     | 
    
         
            +
            		val = config.urlConfig[ i ];
         
     | 
| 
      
 2507 
     | 
    
         
            +
            		if ( typeof val === "string" ) {
         
     | 
| 
      
 2508 
     | 
    
         
            +
            			val = {
         
     | 
| 
      
 2509 
     | 
    
         
            +
            				id: val,
         
     | 
| 
      
 2510 
     | 
    
         
            +
            				label: val
         
     | 
| 
      
 2511 
     | 
    
         
            +
            			};
         
     | 
| 
      
 2512 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2513 
     | 
    
         
            +
             
     | 
| 
      
 2514 
     | 
    
         
            +
            		escaped = escapeText( val.id );
         
     | 
| 
      
 2515 
     | 
    
         
            +
            		escapedTooltip = escapeText( val.tooltip );
         
     | 
| 
      
 2516 
     | 
    
         
            +
             
     | 
| 
      
 2517 
     | 
    
         
            +
            		if ( !val.value || typeof val.value === "string" ) {
         
     | 
| 
      
 2518 
     | 
    
         
            +
            			urlConfigHtml += "<input id='qunit-urlconfig-" + escaped +
         
     | 
| 
      
 2519 
     | 
    
         
            +
            				"' name='" + escaped + "' type='checkbox'" +
         
     | 
| 
      
 2520 
     | 
    
         
            +
            				( val.value ? " value='" + escapeText( val.value ) + "'" : "" ) +
         
     | 
| 
      
 2521 
     | 
    
         
            +
            				( config[ val.id ] ? " checked='checked'" : "" ) +
         
     | 
| 
      
 2522 
     | 
    
         
            +
            				" title='" + escapedTooltip + "' /><label for='qunit-urlconfig-" + escaped +
         
     | 
| 
      
 2523 
     | 
    
         
            +
            				"' title='" + escapedTooltip + "'>" + val.label + "</label>";
         
     | 
| 
      
 2524 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 2525 
     | 
    
         
            +
            			urlConfigHtml += "<label for='qunit-urlconfig-" + escaped +
         
     | 
| 
      
 2526 
     | 
    
         
            +
            				"' title='" + escapedTooltip + "'>" + val.label +
         
     | 
| 
      
 2527 
     | 
    
         
            +
            				": </label><select id='qunit-urlconfig-" + escaped +
         
     | 
| 
      
 2528 
     | 
    
         
            +
            				"' name='" + escaped + "' title='" + escapedTooltip + "'><option></option>";
         
     | 
| 
      
 2529 
     | 
    
         
            +
             
     | 
| 
      
 2530 
     | 
    
         
            +
            			if ( QUnit.is( "array", val.value ) ) {
         
     | 
| 
      
 2531 
     | 
    
         
            +
            				for ( j = 0; j < val.value.length; j++ ) {
         
     | 
| 
      
 2532 
     | 
    
         
            +
            					escaped = escapeText( val.value[ j ] );
         
     | 
| 
      
 2533 
     | 
    
         
            +
            					urlConfigHtml += "<option value='" + escaped + "'" +
         
     | 
| 
      
 2534 
     | 
    
         
            +
            						( config[ val.id ] === val.value[ j ] ?
         
     | 
| 
      
 2535 
     | 
    
         
            +
            							( selection = true ) && " selected='selected'" : "" ) +
         
     | 
| 
      
 2536 
     | 
    
         
            +
            						">" + escaped + "</option>";
         
     | 
| 
      
 2537 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2538 
     | 
    
         
            +
            			} else {
         
     | 
| 
      
 2539 
     | 
    
         
            +
            				for ( j in val.value ) {
         
     | 
| 
      
 2540 
     | 
    
         
            +
            					if ( hasOwn.call( val.value, j ) ) {
         
     | 
| 
      
 2541 
     | 
    
         
            +
            						urlConfigHtml += "<option value='" + escapeText( j ) + "'" +
         
     | 
| 
      
 2542 
     | 
    
         
            +
            							( config[ val.id ] === j ?
         
     | 
| 
      
 2543 
     | 
    
         
            +
            								( selection = true ) && " selected='selected'" : "" ) +
         
     | 
| 
      
 2544 
     | 
    
         
            +
            							">" + escapeText( val.value[ j ] ) + "</option>";
         
     | 
| 
      
 2545 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2546 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2547 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2548 
     | 
    
         
            +
            			if ( config[ val.id ] && !selection ) {
         
     | 
| 
      
 2549 
     | 
    
         
            +
            				escaped = escapeText( config[ val.id ] );
         
     | 
| 
      
 2550 
     | 
    
         
            +
            				urlConfigHtml += "<option value='" + escaped +
         
     | 
| 
      
 2551 
     | 
    
         
            +
            					"' selected='selected' disabled='disabled'>" + escaped + "</option>";
         
     | 
| 
      
 2552 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2553 
     | 
    
         
            +
            			urlConfigHtml += "</select>";
         
     | 
| 
      
 2554 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2555 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2556 
     | 
    
         
            +
             
     | 
| 
      
 2557 
     | 
    
         
            +
            	return urlConfigHtml;
         
     | 
| 
      
 2558 
     | 
    
         
            +
            }
         
     | 
| 
      
 2559 
     | 
    
         
            +
             
     | 
| 
      
 2560 
     | 
    
         
            +
            // Handle "click" events on toolbar checkboxes and "change" for select menus.
         
     | 
| 
      
 2561 
     | 
    
         
            +
            // Updates the URL with the new state of `config.urlConfig` values.
         
     | 
| 
      
 2562 
     | 
    
         
            +
            function toolbarChanged() {
         
     | 
| 
      
 2563 
     | 
    
         
            +
            	var updatedUrl, value, tests,
         
     | 
| 
      
 2564 
     | 
    
         
            +
            		field = this,
         
     | 
| 
      
 2565 
     | 
    
         
            +
            		params = {};
         
     | 
| 
      
 2566 
     | 
    
         
            +
             
     | 
| 
      
 2567 
     | 
    
         
            +
            	// Detect if field is a select menu or a checkbox
         
     | 
| 
      
 2568 
     | 
    
         
            +
            	if ( "selectedIndex" in field ) {
         
     | 
| 
      
 2569 
     | 
    
         
            +
            		value = field.options[ field.selectedIndex ].value || undefined;
         
     | 
| 
      
 2570 
     | 
    
         
            +
            	} else {
         
     | 
| 
      
 2571 
     | 
    
         
            +
            		value = field.checked ? ( field.defaultValue || true ) : undefined;
         
     | 
| 
      
 2572 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2573 
     | 
    
         
            +
             
     | 
| 
      
 2574 
     | 
    
         
            +
            	params[ field.name ] = value;
         
     | 
| 
      
 2575 
     | 
    
         
            +
            	updatedUrl = setUrl( params );
         
     | 
| 
      
 2576 
     | 
    
         
            +
             
     | 
| 
      
 2577 
     | 
    
         
            +
            	// Check if we can apply the change without a page refresh
         
     | 
| 
      
 2578 
     | 
    
         
            +
            	if ( "hidepassed" === field.name && "replaceState" in window.history ) {
         
     | 
| 
      
 2579 
     | 
    
         
            +
            		QUnit.urlParams[ field.name ] = value;
         
     | 
| 
      
 2580 
     | 
    
         
            +
            		config[ field.name ] = value || false;
         
     | 
| 
      
 2581 
     | 
    
         
            +
            		tests = id( "qunit-tests" );
         
     | 
| 
      
 2582 
     | 
    
         
            +
            		if ( tests ) {
         
     | 
| 
      
 2583 
     | 
    
         
            +
            			toggleClass( tests, "hidepass", value || false );
         
     | 
| 
      
 2584 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2585 
     | 
    
         
            +
            		window.history.replaceState( null, "", updatedUrl );
         
     | 
| 
      
 2586 
     | 
    
         
            +
            	} else {
         
     | 
| 
      
 2587 
     | 
    
         
            +
            		window.location = updatedUrl;
         
     | 
| 
      
 2588 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2589 
     | 
    
         
            +
            }
         
     | 
| 
      
 2590 
     | 
    
         
            +
             
     | 
| 
      
 2591 
     | 
    
         
            +
            function setUrl( params ) {
         
     | 
| 
      
 2592 
     | 
    
         
            +
            	var key, arrValue, i,
         
     | 
| 
      
 2593 
     | 
    
         
            +
            		querystring = "?",
         
     | 
| 
      
 2594 
     | 
    
         
            +
            		location = window.location;
         
     | 
| 
      
 2595 
     | 
    
         
            +
             
     | 
| 
      
 2596 
     | 
    
         
            +
            	params = QUnit.extend( QUnit.extend( {}, QUnit.urlParams ), params );
         
     | 
| 
      
 2597 
     | 
    
         
            +
             
     | 
| 
      
 2598 
     | 
    
         
            +
            	for ( key in params ) {
         
     | 
| 
      
 2599 
     | 
    
         
            +
             
     | 
| 
      
 2600 
     | 
    
         
            +
            		// Skip inherited or undefined properties
         
     | 
| 
      
 2601 
     | 
    
         
            +
            		if ( hasOwn.call( params, key ) && params[ key ] !== undefined ) {
         
     | 
| 
      
 2602 
     | 
    
         
            +
             
     | 
| 
      
 2603 
     | 
    
         
            +
            			// Output a parameter for each value of this key (but usually just one)
         
     | 
| 
      
 2604 
     | 
    
         
            +
            			arrValue = [].concat( params[ key ] );
         
     | 
| 
      
 2605 
     | 
    
         
            +
            			for ( i = 0; i < arrValue.length; i++ ) {
         
     | 
| 
      
 2606 
     | 
    
         
            +
            				querystring += encodeURIComponent( key );
         
     | 
| 
      
 2607 
     | 
    
         
            +
            				if ( arrValue[ i ] !== true ) {
         
     | 
| 
      
 2608 
     | 
    
         
            +
            					querystring += "=" + encodeURIComponent( arrValue[ i ] );
         
     | 
| 
      
 2609 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2610 
     | 
    
         
            +
            				querystring += "&";
         
     | 
| 
      
 2611 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2612 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2613 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2614 
     | 
    
         
            +
            	return location.protocol + "//" + location.host +
         
     | 
| 
      
 2615 
     | 
    
         
            +
            		location.pathname + querystring.slice( 0, -1 );
         
     | 
| 
      
 2616 
     | 
    
         
            +
            }
         
     | 
| 
      
 2617 
     | 
    
         
            +
             
     | 
| 
      
 2618 
     | 
    
         
            +
            function applyUrlParams() {
         
     | 
| 
      
 2619 
     | 
    
         
            +
            	var selectedModule,
         
     | 
| 
      
 2620 
     | 
    
         
            +
            		modulesList = id( "qunit-modulefilter" ),
         
     | 
| 
      
 2621 
     | 
    
         
            +
            		filter = id( "qunit-filter-input" ).value;
         
     | 
| 
      
 2622 
     | 
    
         
            +
             
     | 
| 
      
 2623 
     | 
    
         
            +
            	selectedModule = modulesList ?
         
     | 
| 
      
 2624 
     | 
    
         
            +
            		decodeURIComponent( modulesList.options[ modulesList.selectedIndex ].value ) :
         
     | 
| 
      
 2625 
     | 
    
         
            +
            		undefined;
         
     | 
| 
      
 2626 
     | 
    
         
            +
             
     | 
| 
      
 2627 
     | 
    
         
            +
            	window.location = setUrl( {
         
     | 
| 
      
 2628 
     | 
    
         
            +
            		module: ( selectedModule === "" ) ? undefined : selectedModule,
         
     | 
| 
      
 2629 
     | 
    
         
            +
            		filter: ( filter === "" ) ? undefined : filter,
         
     | 
| 
      
 2630 
     | 
    
         
            +
             
     | 
| 
      
 2631 
     | 
    
         
            +
            		// Remove moduleId and testId filters
         
     | 
| 
      
 2632 
     | 
    
         
            +
            		moduleId: undefined,
         
     | 
| 
      
 2633 
     | 
    
         
            +
            		testId: undefined
         
     | 
| 
      
 2634 
     | 
    
         
            +
            	} );
         
     | 
| 
      
 2635 
     | 
    
         
            +
            }
         
     | 
| 
      
 2636 
     | 
    
         
            +
             
     | 
| 
      
 2637 
     | 
    
         
            +
            function toolbarUrlConfigContainer() {
         
     | 
| 
      
 2638 
     | 
    
         
            +
            	var urlConfigContainer = document.createElement( "span" );
         
     | 
| 
      
 2639 
     | 
    
         
            +
             
     | 
| 
      
 2640 
     | 
    
         
            +
            	urlConfigContainer.innerHTML = getUrlConfigHtml();
         
     | 
| 
      
 2641 
     | 
    
         
            +
            	addClass( urlConfigContainer, "qunit-url-config" );
         
     | 
| 
      
 2642 
     | 
    
         
            +
             
     | 
| 
      
 2643 
     | 
    
         
            +
            	// For oldIE support:
         
     | 
| 
      
 2644 
     | 
    
         
            +
            	// * Add handlers to the individual elements instead of the container
         
     | 
| 
      
 2645 
     | 
    
         
            +
            	// * Use "click" instead of "change" for checkboxes
         
     | 
| 
      
 2646 
     | 
    
         
            +
            	addEvents( urlConfigContainer.getElementsByTagName( "input" ), "click", toolbarChanged );
         
     | 
| 
      
 2647 
     | 
    
         
            +
            	addEvents( urlConfigContainer.getElementsByTagName( "select" ), "change", toolbarChanged );
         
     | 
| 
      
 2648 
     | 
    
         
            +
             
     | 
| 
      
 2649 
     | 
    
         
            +
            	return urlConfigContainer;
         
     | 
| 
      
 2650 
     | 
    
         
            +
            }
         
     | 
| 
      
 2651 
     | 
    
         
            +
             
     | 
| 
      
 2652 
     | 
    
         
            +
            function toolbarLooseFilter() {
         
     | 
| 
      
 2653 
     | 
    
         
            +
            	var filter = document.createElement( "form" ),
         
     | 
| 
      
 2654 
     | 
    
         
            +
            		label = document.createElement( "label" ),
         
     | 
| 
      
 2655 
     | 
    
         
            +
            		input = document.createElement( "input" ),
         
     | 
| 
      
 2656 
     | 
    
         
            +
            		button = document.createElement( "button" );
         
     | 
| 
      
 2657 
     | 
    
         
            +
             
     | 
| 
      
 2658 
     | 
    
         
            +
            	addClass( filter, "qunit-filter" );
         
     | 
| 
      
 2659 
     | 
    
         
            +
             
     | 
| 
      
 2660 
     | 
    
         
            +
            	label.innerHTML = "Filter: ";
         
     | 
| 
      
 2661 
     | 
    
         
            +
             
     | 
| 
      
 2662 
     | 
    
         
            +
            	input.type = "text";
         
     | 
| 
      
 2663 
     | 
    
         
            +
            	input.value = config.filter || "";
         
     | 
| 
      
 2664 
     | 
    
         
            +
            	input.name = "filter";
         
     | 
| 
      
 2665 
     | 
    
         
            +
            	input.id = "qunit-filter-input";
         
     | 
| 
      
 2666 
     | 
    
         
            +
             
     | 
| 
      
 2667 
     | 
    
         
            +
            	button.innerHTML = "Go";
         
     | 
| 
      
 2668 
     | 
    
         
            +
             
     | 
| 
      
 2669 
     | 
    
         
            +
            	label.appendChild( input );
         
     | 
| 
      
 2670 
     | 
    
         
            +
             
     | 
| 
      
 2671 
     | 
    
         
            +
            	filter.appendChild( label );
         
     | 
| 
      
 2672 
     | 
    
         
            +
            	filter.appendChild( button );
         
     | 
| 
      
 2673 
     | 
    
         
            +
            	addEvent( filter, "submit", function( ev ) {
         
     | 
| 
      
 2674 
     | 
    
         
            +
            		applyUrlParams();
         
     | 
| 
      
 2675 
     | 
    
         
            +
             
     | 
| 
      
 2676 
     | 
    
         
            +
            		if ( ev && ev.preventDefault ) {
         
     | 
| 
      
 2677 
     | 
    
         
            +
            			ev.preventDefault();
         
     | 
| 
      
 2678 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2679 
     | 
    
         
            +
             
     | 
| 
      
 2680 
     | 
    
         
            +
            		return false;
         
     | 
| 
      
 2681 
     | 
    
         
            +
            	} );
         
     | 
| 
      
 2682 
     | 
    
         
            +
             
     | 
| 
      
 2683 
     | 
    
         
            +
            	return filter;
         
     | 
| 
      
 2684 
     | 
    
         
            +
            }
         
     | 
| 
      
 2685 
     | 
    
         
            +
             
     | 
| 
      
 2686 
     | 
    
         
            +
            function toolbarModuleFilterHtml() {
         
     | 
| 
      
 2687 
     | 
    
         
            +
            	var i,
         
     | 
| 
      
 2688 
     | 
    
         
            +
            		moduleFilterHtml = "";
         
     | 
| 
      
 2689 
     | 
    
         
            +
             
     | 
| 
      
 2690 
     | 
    
         
            +
            	if ( !modulesList.length ) {
         
     | 
| 
      
 2691 
     | 
    
         
            +
            		return false;
         
     | 
| 
      
 2692 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2693 
     | 
    
         
            +
             
     | 
| 
      
 2694 
     | 
    
         
            +
            	moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label>" +
         
     | 
| 
      
 2695 
     | 
    
         
            +
            		"<select id='qunit-modulefilter' name='modulefilter'><option value='' " +
         
     | 
| 
      
 2696 
     | 
    
         
            +
            		( QUnit.urlParams.module === undefined ? "selected='selected'" : "" ) +
         
     | 
| 
      
 2697 
     | 
    
         
            +
            		">< All Modules ></option>";
         
     | 
| 
      
 2698 
     | 
    
         
            +
             
     | 
| 
      
 2699 
     | 
    
         
            +
            	for ( i = 0; i < modulesList.length; i++ ) {
         
     | 
| 
      
 2700 
     | 
    
         
            +
            		moduleFilterHtml += "<option value='" +
         
     | 
| 
      
 2701 
     | 
    
         
            +
            			escapeText( encodeURIComponent( modulesList[ i ] ) ) + "' " +
         
     | 
| 
      
 2702 
     | 
    
         
            +
            			( QUnit.urlParams.module === modulesList[ i ] ? "selected='selected'" : "" ) +
         
     | 
| 
      
 2703 
     | 
    
         
            +
            			">" + escapeText( modulesList[ i ] ) + "</option>";
         
     | 
| 
      
 2704 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2705 
     | 
    
         
            +
            	moduleFilterHtml += "</select>";
         
     | 
| 
      
 2706 
     | 
    
         
            +
             
     | 
| 
      
 2707 
     | 
    
         
            +
            	return moduleFilterHtml;
         
     | 
| 
      
 2708 
     | 
    
         
            +
            }
         
     | 
| 
      
 2709 
     | 
    
         
            +
             
     | 
| 
      
 2710 
     | 
    
         
            +
            function toolbarModuleFilter() {
         
     | 
| 
      
 2711 
     | 
    
         
            +
            	var toolbar = id( "qunit-testrunner-toolbar" ),
         
     | 
| 
      
 2712 
     | 
    
         
            +
            		moduleFilter = document.createElement( "span" ),
         
     | 
| 
      
 2713 
     | 
    
         
            +
            		moduleFilterHtml = toolbarModuleFilterHtml();
         
     | 
| 
      
 2714 
     | 
    
         
            +
             
     | 
| 
      
 2715 
     | 
    
         
            +
            	if ( !toolbar || !moduleFilterHtml ) {
         
     | 
| 
      
 2716 
     | 
    
         
            +
            		return false;
         
     | 
| 
      
 2717 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2718 
     | 
    
         
            +
             
     | 
| 
      
 2719 
     | 
    
         
            +
            	moduleFilter.setAttribute( "id", "qunit-modulefilter-container" );
         
     | 
| 
      
 2720 
     | 
    
         
            +
            	moduleFilter.innerHTML = moduleFilterHtml;
         
     | 
| 
      
 2721 
     | 
    
         
            +
             
     | 
| 
      
 2722 
     | 
    
         
            +
            	addEvent( moduleFilter.lastChild, "change", applyUrlParams );
         
     | 
| 
      
 2723 
     | 
    
         
            +
             
     | 
| 
      
 2724 
     | 
    
         
            +
            	toolbar.appendChild( moduleFilter );
         
     | 
| 
      
 2725 
     | 
    
         
            +
            }
         
     | 
| 
      
 2726 
     | 
    
         
            +
             
     | 
| 
      
 2727 
     | 
    
         
            +
            function appendToolbar() {
         
     | 
| 
      
 2728 
     | 
    
         
            +
            	var toolbar = id( "qunit-testrunner-toolbar" );
         
     | 
| 
      
 2729 
     | 
    
         
            +
             
     | 
| 
      
 2730 
     | 
    
         
            +
            	if ( toolbar ) {
         
     | 
| 
      
 2731 
     | 
    
         
            +
            		toolbar.appendChild( toolbarUrlConfigContainer() );
         
     | 
| 
      
 2732 
     | 
    
         
            +
            		toolbar.appendChild( toolbarLooseFilter() );
         
     | 
| 
      
 2733 
     | 
    
         
            +
            		toolbarModuleFilter();
         
     | 
| 
      
 2734 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2735 
     | 
    
         
            +
            }
         
     | 
| 
      
 2736 
     | 
    
         
            +
             
     | 
| 
      
 2737 
     | 
    
         
            +
            function appendHeader() {
         
     | 
| 
      
 2738 
     | 
    
         
            +
            	var header = id( "qunit-header" );
         
     | 
| 
      
 2739 
     | 
    
         
            +
             
     | 
| 
      
 2740 
     | 
    
         
            +
            	if ( header ) {
         
     | 
| 
      
 2741 
     | 
    
         
            +
            		header.innerHTML = "<a href='" + escapeText( unfilteredUrl ) + "'>" + header.innerHTML +
         
     | 
| 
      
 2742 
     | 
    
         
            +
            			"</a> ";
         
     | 
| 
      
 2743 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2744 
     | 
    
         
            +
            }
         
     | 
| 
      
 2745 
     | 
    
         
            +
             
     | 
| 
      
 2746 
     | 
    
         
            +
            function appendBanner() {
         
     | 
| 
      
 2747 
     | 
    
         
            +
            	var banner = id( "qunit-banner" );
         
     | 
| 
      
 2748 
     | 
    
         
            +
             
     | 
| 
      
 2749 
     | 
    
         
            +
            	if ( banner ) {
         
     | 
| 
      
 2750 
     | 
    
         
            +
            		banner.className = "";
         
     | 
| 
      
 2751 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2752 
     | 
    
         
            +
            }
         
     | 
| 
      
 2753 
     | 
    
         
            +
             
     | 
| 
      
 2754 
     | 
    
         
            +
            function appendTestResults() {
         
     | 
| 
      
 2755 
     | 
    
         
            +
            	var tests = id( "qunit-tests" ),
         
     | 
| 
      
 2756 
     | 
    
         
            +
            		result = id( "qunit-testresult" );
         
     | 
| 
      
 2757 
     | 
    
         
            +
             
     | 
| 
      
 2758 
     | 
    
         
            +
            	if ( result ) {
         
     | 
| 
      
 2759 
     | 
    
         
            +
            		result.parentNode.removeChild( result );
         
     | 
| 
      
 2760 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2761 
     | 
    
         
            +
             
     | 
| 
      
 2762 
     | 
    
         
            +
            	if ( tests ) {
         
     | 
| 
      
 2763 
     | 
    
         
            +
            		tests.innerHTML = "";
         
     | 
| 
      
 2764 
     | 
    
         
            +
            		result = document.createElement( "p" );
         
     | 
| 
      
 2765 
     | 
    
         
            +
            		result.id = "qunit-testresult";
         
     | 
| 
      
 2766 
     | 
    
         
            +
            		result.className = "result";
         
     | 
| 
      
 2767 
     | 
    
         
            +
            		tests.parentNode.insertBefore( result, tests );
         
     | 
| 
      
 2768 
     | 
    
         
            +
            		result.innerHTML = "Running...<br /> ";
         
     | 
| 
      
 2769 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2770 
     | 
    
         
            +
            }
         
     | 
| 
      
 2771 
     | 
    
         
            +
             
     | 
| 
      
 2772 
     | 
    
         
            +
            function storeFixture() {
         
     | 
| 
      
 2773 
     | 
    
         
            +
            	var fixture = id( "qunit-fixture" );
         
     | 
| 
      
 2774 
     | 
    
         
            +
            	if ( fixture ) {
         
     | 
| 
      
 2775 
     | 
    
         
            +
            		config.fixture = fixture.innerHTML;
         
     | 
| 
      
 2776 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2777 
     | 
    
         
            +
            }
         
     | 
| 
      
 2778 
     | 
    
         
            +
             
     | 
| 
      
 2779 
     | 
    
         
            +
            function appendFilteredTest() {
         
     | 
| 
      
 2780 
     | 
    
         
            +
            	var testId = QUnit.config.testId;
         
     | 
| 
      
 2781 
     | 
    
         
            +
            	if ( !testId || testId.length <= 0 ) {
         
     | 
| 
      
 2782 
     | 
    
         
            +
            		return "";
         
     | 
| 
      
 2783 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2784 
     | 
    
         
            +
            	return "<div id='qunit-filteredTest'>Rerunning selected tests: " +
         
     | 
| 
      
 2785 
     | 
    
         
            +
            		escapeText( testId.join( ", " ) ) +
         
     | 
| 
      
 2786 
     | 
    
         
            +
            		" <a id='qunit-clearFilter' href='" +
         
     | 
| 
      
 2787 
     | 
    
         
            +
            		escapeText( unfilteredUrl ) +
         
     | 
| 
      
 2788 
     | 
    
         
            +
            		"'>Run all tests</a></div>";
         
     | 
| 
      
 2789 
     | 
    
         
            +
            }
         
     | 
| 
      
 2790 
     | 
    
         
            +
             
     | 
| 
      
 2791 
     | 
    
         
            +
            function appendUserAgent() {
         
     | 
| 
      
 2792 
     | 
    
         
            +
            	var userAgent = id( "qunit-userAgent" );
         
     | 
| 
      
 2793 
     | 
    
         
            +
             
     | 
| 
      
 2794 
     | 
    
         
            +
            	if ( userAgent ) {
         
     | 
| 
      
 2795 
     | 
    
         
            +
            		userAgent.innerHTML = "";
         
     | 
| 
      
 2796 
     | 
    
         
            +
            		userAgent.appendChild(
         
     | 
| 
      
 2797 
     | 
    
         
            +
            			document.createTextNode(
         
     | 
| 
      
 2798 
     | 
    
         
            +
            				"QUnit " + QUnit.version + "; " + navigator.userAgent
         
     | 
| 
      
 2799 
     | 
    
         
            +
            			)
         
     | 
| 
      
 2800 
     | 
    
         
            +
            		);
         
     | 
| 
      
 2801 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2802 
     | 
    
         
            +
            }
         
     | 
| 
      
 2803 
     | 
    
         
            +
             
     | 
| 
      
 2804 
     | 
    
         
            +
            function appendInterface() {
         
     | 
| 
      
 2805 
     | 
    
         
            +
            	var qunit = id( "qunit" );
         
     | 
| 
      
 2806 
     | 
    
         
            +
             
     | 
| 
      
 2807 
     | 
    
         
            +
            	if ( qunit ) {
         
     | 
| 
      
 2808 
     | 
    
         
            +
            		qunit.innerHTML =
         
     | 
| 
      
 2809 
     | 
    
         
            +
            			"<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
         
     | 
| 
      
 2810 
     | 
    
         
            +
            			"<h2 id='qunit-banner'></h2>" +
         
     | 
| 
      
 2811 
     | 
    
         
            +
            			"<div id='qunit-testrunner-toolbar'></div>" +
         
     | 
| 
      
 2812 
     | 
    
         
            +
            			appendFilteredTest() +
         
     | 
| 
      
 2813 
     | 
    
         
            +
            			"<h2 id='qunit-userAgent'></h2>" +
         
     | 
| 
      
 2814 
     | 
    
         
            +
            			"<ol id='qunit-tests'></ol>";
         
     | 
| 
      
 2815 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2816 
     | 
    
         
            +
             
     | 
| 
      
 2817 
     | 
    
         
            +
            	appendHeader();
         
     | 
| 
      
 2818 
     | 
    
         
            +
            	appendBanner();
         
     | 
| 
      
 2819 
     | 
    
         
            +
            	appendTestResults();
         
     | 
| 
      
 2820 
     | 
    
         
            +
            	appendUserAgent();
         
     | 
| 
      
 2821 
     | 
    
         
            +
            	appendToolbar();
         
     | 
| 
      
 2822 
     | 
    
         
            +
            }
         
     | 
| 
      
 2823 
     | 
    
         
            +
             
     | 
| 
      
 2824 
     | 
    
         
            +
            function appendTestsList( modules ) {
         
     | 
| 
      
 2825 
     | 
    
         
            +
            	var i, l, x, z, test, moduleObj;
         
     | 
| 
      
 2826 
     | 
    
         
            +
             
     | 
| 
      
 2827 
     | 
    
         
            +
            	for ( i = 0, l = modules.length; i < l; i++ ) {
         
     | 
| 
      
 2828 
     | 
    
         
            +
            		moduleObj = modules[ i ];
         
     | 
| 
      
 2829 
     | 
    
         
            +
             
     | 
| 
      
 2830 
     | 
    
         
            +
            		for ( x = 0, z = moduleObj.tests.length; x < z; x++ ) {
         
     | 
| 
      
 2831 
     | 
    
         
            +
            			test = moduleObj.tests[ x ];
         
     | 
| 
      
 2832 
     | 
    
         
            +
             
     | 
| 
      
 2833 
     | 
    
         
            +
            			appendTest( test.name, test.testId, moduleObj.name );
         
     | 
| 
      
 2834 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2835 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2836 
     | 
    
         
            +
            }
         
     | 
| 
      
 2837 
     | 
    
         
            +
             
     | 
| 
      
 2838 
     | 
    
         
            +
            function appendTest( name, testId, moduleName ) {
         
     | 
| 
      
 2839 
     | 
    
         
            +
            	var title, rerunTrigger, testBlock, assertList,
         
     | 
| 
      
 2840 
     | 
    
         
            +
            		tests = id( "qunit-tests" );
         
     | 
| 
      
 2841 
     | 
    
         
            +
             
     | 
| 
      
 2842 
     | 
    
         
            +
            	if ( !tests ) {
         
     | 
| 
      
 2843 
     | 
    
         
            +
            		return;
         
     | 
| 
      
 2844 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2845 
     | 
    
         
            +
             
     | 
| 
      
 2846 
     | 
    
         
            +
            	title = document.createElement( "strong" );
         
     | 
| 
      
 2847 
     | 
    
         
            +
            	title.innerHTML = getNameHtml( name, moduleName );
         
     | 
| 
      
 2848 
     | 
    
         
            +
             
     | 
| 
      
 2849 
     | 
    
         
            +
            	rerunTrigger = document.createElement( "a" );
         
     | 
| 
      
 2850 
     | 
    
         
            +
            	rerunTrigger.innerHTML = "Rerun";
         
     | 
| 
      
 2851 
     | 
    
         
            +
            	rerunTrigger.href = setUrl( { testId: testId } );
         
     | 
| 
      
 2852 
     | 
    
         
            +
             
     | 
| 
      
 2853 
     | 
    
         
            +
            	testBlock = document.createElement( "li" );
         
     | 
| 
      
 2854 
     | 
    
         
            +
            	testBlock.appendChild( title );
         
     | 
| 
      
 2855 
     | 
    
         
            +
            	testBlock.appendChild( rerunTrigger );
         
     | 
| 
      
 2856 
     | 
    
         
            +
            	testBlock.id = "qunit-test-output-" + testId;
         
     | 
| 
      
 2857 
     | 
    
         
            +
             
     | 
| 
      
 2858 
     | 
    
         
            +
            	assertList = document.createElement( "ol" );
         
     | 
| 
      
 2859 
     | 
    
         
            +
            	assertList.className = "qunit-assert-list";
         
     | 
| 
      
 2860 
     | 
    
         
            +
             
     | 
| 
      
 2861 
     | 
    
         
            +
            	testBlock.appendChild( assertList );
         
     | 
| 
      
 2862 
     | 
    
         
            +
             
     | 
| 
      
 2863 
     | 
    
         
            +
            	tests.appendChild( testBlock );
         
     | 
| 
      
 2864 
     | 
    
         
            +
            }
         
     | 
| 
      
 2865 
     | 
    
         
            +
             
     | 
| 
      
 2866 
     | 
    
         
            +
            // HTML Reporter initialization and load
         
     | 
| 
      
 2867 
     | 
    
         
            +
            QUnit.begin( function( details ) {
         
     | 
| 
      
 2868 
     | 
    
         
            +
            	var i, moduleObj, tests;
         
     | 
| 
      
 2869 
     | 
    
         
            +
             
     | 
| 
      
 2870 
     | 
    
         
            +
            	// Sort modules by name for the picker
         
     | 
| 
      
 2871 
     | 
    
         
            +
            	for ( i = 0; i < details.modules.length; i++ ) {
         
     | 
| 
      
 2872 
     | 
    
         
            +
            		moduleObj = details.modules[ i ];
         
     | 
| 
      
 2873 
     | 
    
         
            +
            		if ( moduleObj.name ) {
         
     | 
| 
      
 2874 
     | 
    
         
            +
            			modulesList.push( moduleObj.name );
         
     | 
| 
      
 2875 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2876 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2877 
     | 
    
         
            +
            	modulesList.sort( function( a, b ) {
         
     | 
| 
      
 2878 
     | 
    
         
            +
            		return a.localeCompare( b );
         
     | 
| 
      
 2879 
     | 
    
         
            +
            	} );
         
     | 
| 
      
 2880 
     | 
    
         
            +
             
     | 
| 
      
 2881 
     | 
    
         
            +
            	// Capture fixture HTML from the page
         
     | 
| 
      
 2882 
     | 
    
         
            +
            	storeFixture();
         
     | 
| 
      
 2883 
     | 
    
         
            +
             
     | 
| 
      
 2884 
     | 
    
         
            +
            	// Initialize QUnit elements
         
     | 
| 
      
 2885 
     | 
    
         
            +
            	appendInterface();
         
     | 
| 
      
 2886 
     | 
    
         
            +
            	appendTestsList( details.modules );
         
     | 
| 
      
 2887 
     | 
    
         
            +
            	tests = id( "qunit-tests" );
         
     | 
| 
      
 2888 
     | 
    
         
            +
            	if ( tests && config.hidepassed ) {
         
     | 
| 
      
 2889 
     | 
    
         
            +
            		addClass( tests, "hidepass" );
         
     | 
| 
      
 2890 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2891 
     | 
    
         
            +
            } );
         
     | 
| 
      
 2892 
     | 
    
         
            +
             
     | 
| 
      
 2893 
     | 
    
         
            +
            QUnit.done( function( details ) {
         
     | 
| 
      
 2894 
     | 
    
         
            +
            	var i, key,
         
     | 
| 
      
 2895 
     | 
    
         
            +
            		banner = id( "qunit-banner" ),
         
     | 
| 
      
 2896 
     | 
    
         
            +
            		tests = id( "qunit-tests" ),
         
     | 
| 
      
 2897 
     | 
    
         
            +
            		html = [
         
     | 
| 
      
 2898 
     | 
    
         
            +
            			"Tests completed in ",
         
     | 
| 
      
 2899 
     | 
    
         
            +
            			details.runtime,
         
     | 
| 
      
 2900 
     | 
    
         
            +
            			" milliseconds.<br />",
         
     | 
| 
      
 2901 
     | 
    
         
            +
            			"<span class='passed'>",
         
     | 
| 
      
 2902 
     | 
    
         
            +
            			details.passed,
         
     | 
| 
      
 2903 
     | 
    
         
            +
            			"</span> assertions of <span class='total'>",
         
     | 
| 
      
 2904 
     | 
    
         
            +
            			details.total,
         
     | 
| 
      
 2905 
     | 
    
         
            +
            			"</span> passed, <span class='failed'>",
         
     | 
| 
      
 2906 
     | 
    
         
            +
            			details.failed,
         
     | 
| 
      
 2907 
     | 
    
         
            +
            			"</span> failed."
         
     | 
| 
      
 2908 
     | 
    
         
            +
            		].join( "" );
         
     | 
| 
      
 2909 
     | 
    
         
            +
             
     | 
| 
      
 2910 
     | 
    
         
            +
            	if ( banner ) {
         
     | 
| 
      
 2911 
     | 
    
         
            +
            		banner.className = details.failed ? "qunit-fail" : "qunit-pass";
         
     | 
| 
      
 2912 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2913 
     | 
    
         
            +
             
     | 
| 
      
 2914 
     | 
    
         
            +
            	if ( tests ) {
         
     | 
| 
      
 2915 
     | 
    
         
            +
            		id( "qunit-testresult" ).innerHTML = html;
         
     | 
| 
      
 2916 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2917 
     | 
    
         
            +
             
     | 
| 
      
 2918 
     | 
    
         
            +
            	if ( config.altertitle && document.title ) {
         
     | 
| 
      
 2919 
     | 
    
         
            +
             
     | 
| 
      
 2920 
     | 
    
         
            +
            		// Show ✖ for good, ✔ for bad suite result in title
         
     | 
| 
      
 2921 
     | 
    
         
            +
            		// use escape sequences in case file gets loaded with non-utf-8-charset
         
     | 
| 
      
 2922 
     | 
    
         
            +
            		document.title = [
         
     | 
| 
      
 2923 
     | 
    
         
            +
            			( details.failed ? "\u2716" : "\u2714" ),
         
     | 
| 
      
 2924 
     | 
    
         
            +
            			document.title.replace( /^[\u2714\u2716] /i, "" )
         
     | 
| 
      
 2925 
     | 
    
         
            +
            		].join( " " );
         
     | 
| 
      
 2926 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2927 
     | 
    
         
            +
             
     | 
| 
      
 2928 
     | 
    
         
            +
            	// Clear own sessionStorage items if all tests passed
         
     | 
| 
      
 2929 
     | 
    
         
            +
            	if ( config.reorder && defined.sessionStorage && details.failed === 0 ) {
         
     | 
| 
      
 2930 
     | 
    
         
            +
            		for ( i = 0; i < sessionStorage.length; i++ ) {
         
     | 
| 
      
 2931 
     | 
    
         
            +
            			key = sessionStorage.key( i++ );
         
     | 
| 
      
 2932 
     | 
    
         
            +
            			if ( key.indexOf( "qunit-test-" ) === 0 ) {
         
     | 
| 
      
 2933 
     | 
    
         
            +
            				sessionStorage.removeItem( key );
         
     | 
| 
      
 2934 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2935 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2936 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2937 
     | 
    
         
            +
             
     | 
| 
      
 2938 
     | 
    
         
            +
            	// Scroll back to top to show results
         
     | 
| 
      
 2939 
     | 
    
         
            +
            	if ( config.scrolltop && window.scrollTo ) {
         
     | 
| 
      
 2940 
     | 
    
         
            +
            		window.scrollTo( 0, 0 );
         
     | 
| 
      
 2941 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2942 
     | 
    
         
            +
            } );
         
     | 
| 
      
 2943 
     | 
    
         
            +
             
     | 
| 
      
 2944 
     | 
    
         
            +
            function getNameHtml( name, module ) {
         
     | 
| 
      
 2945 
     | 
    
         
            +
            	var nameHtml = "";
         
     | 
| 
      
 2946 
     | 
    
         
            +
             
     | 
| 
      
 2947 
     | 
    
         
            +
            	if ( module ) {
         
     | 
| 
      
 2948 
     | 
    
         
            +
            		nameHtml = "<span class='module-name'>" + escapeText( module ) + "</span>: ";
         
     | 
| 
      
 2949 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2950 
     | 
    
         
            +
             
     | 
| 
      
 2951 
     | 
    
         
            +
            	nameHtml += "<span class='test-name'>" + escapeText( name ) + "</span>";
         
     | 
| 
      
 2952 
     | 
    
         
            +
             
     | 
| 
      
 2953 
     | 
    
         
            +
            	return nameHtml;
         
     | 
| 
      
 2954 
     | 
    
         
            +
            }
         
     | 
| 
      
 2955 
     | 
    
         
            +
             
     | 
| 
      
 2956 
     | 
    
         
            +
            QUnit.testStart( function( details ) {
         
     | 
| 
      
 2957 
     | 
    
         
            +
            	var running, testBlock, bad;
         
     | 
| 
      
 2958 
     | 
    
         
            +
             
     | 
| 
      
 2959 
     | 
    
         
            +
            	testBlock = id( "qunit-test-output-" + details.testId );
         
     | 
| 
      
 2960 
     | 
    
         
            +
            	if ( testBlock ) {
         
     | 
| 
      
 2961 
     | 
    
         
            +
            		testBlock.className = "running";
         
     | 
| 
      
 2962 
     | 
    
         
            +
            	} else {
         
     | 
| 
      
 2963 
     | 
    
         
            +
             
     | 
| 
      
 2964 
     | 
    
         
            +
            		// Report later registered tests
         
     | 
| 
      
 2965 
     | 
    
         
            +
            		appendTest( details.name, details.testId, details.module );
         
     | 
| 
      
 2966 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2967 
     | 
    
         
            +
             
     | 
| 
      
 2968 
     | 
    
         
            +
            	running = id( "qunit-testresult" );
         
     | 
| 
      
 2969 
     | 
    
         
            +
            	if ( running ) {
         
     | 
| 
      
 2970 
     | 
    
         
            +
            		bad = QUnit.config.reorder && defined.sessionStorage &&
         
     | 
| 
      
 2971 
     | 
    
         
            +
            			+sessionStorage.getItem( "qunit-test-" + details.module + "-" + details.name );
         
     | 
| 
      
 2972 
     | 
    
         
            +
             
     | 
| 
      
 2973 
     | 
    
         
            +
            		running.innerHTML = ( bad ?
         
     | 
| 
      
 2974 
     | 
    
         
            +
            			"Rerunning previously failed test: <br />" :
         
     | 
| 
      
 2975 
     | 
    
         
            +
            			"Running: <br />" ) +
         
     | 
| 
      
 2976 
     | 
    
         
            +
            			getNameHtml( details.name, details.module );
         
     | 
| 
      
 2977 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2978 
     | 
    
         
            +
             
     | 
| 
      
 2979 
     | 
    
         
            +
            } );
         
     | 
| 
      
 2980 
     | 
    
         
            +
             
     | 
| 
      
 2981 
     | 
    
         
            +
            function stripHtml( string ) {
         
     | 
| 
      
 2982 
     | 
    
         
            +
             
     | 
| 
      
 2983 
     | 
    
         
            +
            	// Strip tags, html entity and whitespaces
         
     | 
| 
      
 2984 
     | 
    
         
            +
            	return string.replace( /<\/?[^>]+(>|$)/g, "" ).replace( /\"/g, "" ).replace( /\s+/g, "" );
         
     | 
| 
      
 2985 
     | 
    
         
            +
            }
         
     | 
| 
      
 2986 
     | 
    
         
            +
             
     | 
| 
      
 2987 
     | 
    
         
            +
            QUnit.log( function( details ) {
         
     | 
| 
      
 2988 
     | 
    
         
            +
            	var assertList, assertLi,
         
     | 
| 
      
 2989 
     | 
    
         
            +
            		message, expected, actual, diff,
         
     | 
| 
      
 2990 
     | 
    
         
            +
            		showDiff = false,
         
     | 
| 
      
 2991 
     | 
    
         
            +
            		testItem = id( "qunit-test-output-" + details.testId );
         
     | 
| 
      
 2992 
     | 
    
         
            +
             
     | 
| 
      
 2993 
     | 
    
         
            +
            	if ( !testItem ) {
         
     | 
| 
      
 2994 
     | 
    
         
            +
            		return;
         
     | 
| 
      
 2995 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2996 
     | 
    
         
            +
             
     | 
| 
      
 2997 
     | 
    
         
            +
            	message = escapeText( details.message ) || ( details.result ? "okay" : "failed" );
         
     | 
| 
      
 2998 
     | 
    
         
            +
            	message = "<span class='test-message'>" + message + "</span>";
         
     | 
| 
      
 2999 
     | 
    
         
            +
            	message += "<span class='runtime'>@ " + details.runtime + " ms</span>";
         
     | 
| 
      
 3000 
     | 
    
         
            +
             
     | 
| 
      
 3001 
     | 
    
         
            +
            	// The pushFailure doesn't provide details.expected
         
     | 
| 
      
 3002 
     | 
    
         
            +
            	// when it calls, it's implicit to also not show expected and diff stuff
         
     | 
| 
      
 3003 
     | 
    
         
            +
            	// Also, we need to check details.expected existence, as it can exist and be undefined
         
     | 
| 
      
 3004 
     | 
    
         
            +
            	if ( !details.result && hasOwn.call( details, "expected" ) ) {
         
     | 
| 
      
 3005 
     | 
    
         
            +
            		if ( details.negative ) {
         
     | 
| 
      
 3006 
     | 
    
         
            +
            			expected = "NOT " + QUnit.dump.parse( details.expected );
         
     | 
| 
      
 3007 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 3008 
     | 
    
         
            +
            			expected = QUnit.dump.parse( details.expected );
         
     | 
| 
      
 3009 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3010 
     | 
    
         
            +
             
     | 
| 
      
 3011 
     | 
    
         
            +
            		actual = QUnit.dump.parse( details.actual );
         
     | 
| 
      
 3012 
     | 
    
         
            +
            		message += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" +
         
     | 
| 
      
 3013 
     | 
    
         
            +
            			escapeText( expected ) +
         
     | 
| 
      
 3014 
     | 
    
         
            +
            			"</pre></td></tr>";
         
     | 
| 
      
 3015 
     | 
    
         
            +
             
     | 
| 
      
 3016 
     | 
    
         
            +
            		if ( actual !== expected ) {
         
     | 
| 
      
 3017 
     | 
    
         
            +
             
     | 
| 
      
 3018 
     | 
    
         
            +
            			message += "<tr class='test-actual'><th>Result: </th><td><pre>" +
         
     | 
| 
      
 3019 
     | 
    
         
            +
            				escapeText( actual ) + "</pre></td></tr>";
         
     | 
| 
      
 3020 
     | 
    
         
            +
             
     | 
| 
      
 3021 
     | 
    
         
            +
            			// Don't show diff if actual or expected are booleans
         
     | 
| 
      
 3022 
     | 
    
         
            +
            			if ( !( /^(true|false)$/.test( actual ) ) &&
         
     | 
| 
      
 3023 
     | 
    
         
            +
            					!( /^(true|false)$/.test( expected ) ) ) {
         
     | 
| 
      
 3024 
     | 
    
         
            +
            				diff = QUnit.diff( expected, actual );
         
     | 
| 
      
 3025 
     | 
    
         
            +
            				showDiff = stripHtml( diff ).length !==
         
     | 
| 
      
 3026 
     | 
    
         
            +
            					stripHtml( expected ).length +
         
     | 
| 
      
 3027 
     | 
    
         
            +
            					stripHtml( actual ).length;
         
     | 
| 
      
 3028 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3029 
     | 
    
         
            +
             
     | 
| 
      
 3030 
     | 
    
         
            +
            			// Don't show diff if expected and actual are totally different
         
     | 
| 
      
 3031 
     | 
    
         
            +
            			if ( showDiff ) {
         
     | 
| 
      
 3032 
     | 
    
         
            +
            				message += "<tr class='test-diff'><th>Diff: </th><td><pre>" +
         
     | 
| 
      
 3033 
     | 
    
         
            +
            					diff + "</pre></td></tr>";
         
     | 
| 
      
 3034 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3035 
     | 
    
         
            +
            		} else if ( expected.indexOf( "[object Array]" ) !== -1 ||
         
     | 
| 
      
 3036 
     | 
    
         
            +
            				expected.indexOf( "[object Object]" ) !== -1 ) {
         
     | 
| 
      
 3037 
     | 
    
         
            +
            			message += "<tr class='test-message'><th>Message: </th><td>" +
         
     | 
| 
      
 3038 
     | 
    
         
            +
            				"Diff suppressed as the depth of object is more than current max depth (" +
         
     | 
| 
      
 3039 
     | 
    
         
            +
            				QUnit.config.maxDepth + ").<p>Hint: Use <code>QUnit.dump.maxDepth</code> to " +
         
     | 
| 
      
 3040 
     | 
    
         
            +
            				" run with a higher max depth or <a href='" +
         
     | 
| 
      
 3041 
     | 
    
         
            +
            				escapeText( setUrl( { maxDepth: -1 } ) ) + "'>" +
         
     | 
| 
      
 3042 
     | 
    
         
            +
            				"Rerun</a> without max depth.</p></td></tr>";
         
     | 
| 
      
 3043 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 3044 
     | 
    
         
            +
            			message += "<tr class='test-message'><th>Message: </th><td>" +
         
     | 
| 
      
 3045 
     | 
    
         
            +
            				"Diff suppressed as the expected and actual results have an equivalent" +
         
     | 
| 
      
 3046 
     | 
    
         
            +
            				" serialization</td></tr>";
         
     | 
| 
      
 3047 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3048 
     | 
    
         
            +
             
     | 
| 
      
 3049 
     | 
    
         
            +
            		if ( details.source ) {
         
     | 
| 
      
 3050 
     | 
    
         
            +
            			message += "<tr class='test-source'><th>Source: </th><td><pre>" +
         
     | 
| 
      
 3051 
     | 
    
         
            +
            				escapeText( details.source ) + "</pre></td></tr>";
         
     | 
| 
      
 3052 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3053 
     | 
    
         
            +
             
     | 
| 
      
 3054 
     | 
    
         
            +
            		message += "</table>";
         
     | 
| 
      
 3055 
     | 
    
         
            +
             
     | 
| 
      
 3056 
     | 
    
         
            +
            	// This occurs when pushFailure is set and we have an extracted stack trace
         
     | 
| 
      
 3057 
     | 
    
         
            +
            	} else if ( !details.result && details.source ) {
         
     | 
| 
      
 3058 
     | 
    
         
            +
            		message += "<table>" +
         
     | 
| 
      
 3059 
     | 
    
         
            +
            			"<tr class='test-source'><th>Source: </th><td><pre>" +
         
     | 
| 
      
 3060 
     | 
    
         
            +
            			escapeText( details.source ) + "</pre></td></tr>" +
         
     | 
| 
      
 3061 
     | 
    
         
            +
            			"</table>";
         
     | 
| 
      
 3062 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3063 
     | 
    
         
            +
             
     | 
| 
      
 3064 
     | 
    
         
            +
            	assertList = testItem.getElementsByTagName( "ol" )[ 0 ];
         
     | 
| 
      
 3065 
     | 
    
         
            +
             
     | 
| 
      
 3066 
     | 
    
         
            +
            	assertLi = document.createElement( "li" );
         
     | 
| 
      
 3067 
     | 
    
         
            +
            	assertLi.className = details.result ? "pass" : "fail";
         
     | 
| 
      
 3068 
     | 
    
         
            +
            	assertLi.innerHTML = message;
         
     | 
| 
      
 3069 
     | 
    
         
            +
            	assertList.appendChild( assertLi );
         
     | 
| 
      
 3070 
     | 
    
         
            +
            } );
         
     | 
| 
      
 3071 
     | 
    
         
            +
             
     | 
| 
      
 3072 
     | 
    
         
            +
            QUnit.testDone( function( details ) {
         
     | 
| 
      
 3073 
     | 
    
         
            +
            	var testTitle, time, testItem, assertList,
         
     | 
| 
      
 3074 
     | 
    
         
            +
            		good, bad, testCounts, skipped, sourceName,
         
     | 
| 
      
 3075 
     | 
    
         
            +
            		tests = id( "qunit-tests" );
         
     | 
| 
      
 3076 
     | 
    
         
            +
             
     | 
| 
      
 3077 
     | 
    
         
            +
            	if ( !tests ) {
         
     | 
| 
      
 3078 
     | 
    
         
            +
            		return;
         
     | 
| 
      
 3079 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3080 
     | 
    
         
            +
             
     | 
| 
      
 3081 
     | 
    
         
            +
            	testItem = id( "qunit-test-output-" + details.testId );
         
     | 
| 
      
 3082 
     | 
    
         
            +
             
     | 
| 
      
 3083 
     | 
    
         
            +
            	assertList = testItem.getElementsByTagName( "ol" )[ 0 ];
         
     | 
| 
      
 3084 
     | 
    
         
            +
             
     | 
| 
      
 3085 
     | 
    
         
            +
            	good = details.passed;
         
     | 
| 
      
 3086 
     | 
    
         
            +
            	bad = details.failed;
         
     | 
| 
      
 3087 
     | 
    
         
            +
             
     | 
| 
      
 3088 
     | 
    
         
            +
            	// Store result when possible
         
     | 
| 
      
 3089 
     | 
    
         
            +
            	if ( config.reorder && defined.sessionStorage ) {
         
     | 
| 
      
 3090 
     | 
    
         
            +
            		if ( bad ) {
         
     | 
| 
      
 3091 
     | 
    
         
            +
            			sessionStorage.setItem( "qunit-test-" + details.module + "-" + details.name, bad );
         
     | 
| 
      
 3092 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 3093 
     | 
    
         
            +
            			sessionStorage.removeItem( "qunit-test-" + details.module + "-" + details.name );
         
     | 
| 
      
 3094 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3095 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3096 
     | 
    
         
            +
             
     | 
| 
      
 3097 
     | 
    
         
            +
            	if ( bad === 0 ) {
         
     | 
| 
      
 3098 
     | 
    
         
            +
             
     | 
| 
      
 3099 
     | 
    
         
            +
            		// Collapse the passing tests
         
     | 
| 
      
 3100 
     | 
    
         
            +
            		addClass( assertList, "qunit-collapsed" );
         
     | 
| 
      
 3101 
     | 
    
         
            +
            	} else if ( bad && config.collapse && !collapseNext ) {
         
     | 
| 
      
 3102 
     | 
    
         
            +
             
     | 
| 
      
 3103 
     | 
    
         
            +
            		// Skip collapsing the first failing test
         
     | 
| 
      
 3104 
     | 
    
         
            +
            		collapseNext = true;
         
     | 
| 
      
 3105 
     | 
    
         
            +
            	} else {
         
     | 
| 
      
 3106 
     | 
    
         
            +
             
     | 
| 
      
 3107 
     | 
    
         
            +
            		// Collapse remaining tests
         
     | 
| 
      
 3108 
     | 
    
         
            +
            		addClass( assertList, "qunit-collapsed" );
         
     | 
| 
      
 3109 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3110 
     | 
    
         
            +
             
     | 
| 
      
 3111 
     | 
    
         
            +
            	// The testItem.firstChild is the test name
         
     | 
| 
      
 3112 
     | 
    
         
            +
            	testTitle = testItem.firstChild;
         
     | 
| 
      
 3113 
     | 
    
         
            +
             
     | 
| 
      
 3114 
     | 
    
         
            +
            	testCounts = bad ?
         
     | 
| 
      
 3115 
     | 
    
         
            +
            		"<b class='failed'>" + bad + "</b>, " + "<b class='passed'>" + good + "</b>, " :
         
     | 
| 
      
 3116 
     | 
    
         
            +
            		"";
         
     | 
| 
      
 3117 
     | 
    
         
            +
             
     | 
| 
      
 3118 
     | 
    
         
            +
            	testTitle.innerHTML += " <b class='counts'>(" + testCounts +
         
     | 
| 
      
 3119 
     | 
    
         
            +
            		details.assertions.length + ")</b>";
         
     | 
| 
      
 3120 
     | 
    
         
            +
             
     | 
| 
      
 3121 
     | 
    
         
            +
            	if ( details.skipped ) {
         
     | 
| 
      
 3122 
     | 
    
         
            +
            		testItem.className = "skipped";
         
     | 
| 
      
 3123 
     | 
    
         
            +
            		skipped = document.createElement( "em" );
         
     | 
| 
      
 3124 
     | 
    
         
            +
            		skipped.className = "qunit-skipped-label";
         
     | 
| 
      
 3125 
     | 
    
         
            +
            		skipped.innerHTML = "skipped";
         
     | 
| 
      
 3126 
     | 
    
         
            +
            		testItem.insertBefore( skipped, testTitle );
         
     | 
| 
      
 3127 
     | 
    
         
            +
            	} else {
         
     | 
| 
      
 3128 
     | 
    
         
            +
            		addEvent( testTitle, "click", function() {
         
     | 
| 
      
 3129 
     | 
    
         
            +
            			toggleClass( assertList, "qunit-collapsed" );
         
     | 
| 
      
 3130 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 3131 
     | 
    
         
            +
             
     | 
| 
      
 3132 
     | 
    
         
            +
            		testItem.className = bad ? "fail" : "pass";
         
     | 
| 
      
 3133 
     | 
    
         
            +
             
     | 
| 
      
 3134 
     | 
    
         
            +
            		time = document.createElement( "span" );
         
     | 
| 
      
 3135 
     | 
    
         
            +
            		time.className = "runtime";
         
     | 
| 
      
 3136 
     | 
    
         
            +
            		time.innerHTML = details.runtime + " ms";
         
     | 
| 
      
 3137 
     | 
    
         
            +
            		testItem.insertBefore( time, assertList );
         
     | 
| 
      
 3138 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3139 
     | 
    
         
            +
             
     | 
| 
      
 3140 
     | 
    
         
            +
            	// Show the source of the test when showing assertions
         
     | 
| 
      
 3141 
     | 
    
         
            +
            	if ( details.source ) {
         
     | 
| 
      
 3142 
     | 
    
         
            +
            		sourceName = document.createElement( "p" );
         
     | 
| 
      
 3143 
     | 
    
         
            +
            		sourceName.innerHTML = "<strong>Source: </strong>" + details.source;
         
     | 
| 
      
 3144 
     | 
    
         
            +
            		addClass( sourceName, "qunit-source" );
         
     | 
| 
      
 3145 
     | 
    
         
            +
            		if ( bad === 0 ) {
         
     | 
| 
      
 3146 
     | 
    
         
            +
            			addClass( sourceName, "qunit-collapsed" );
         
     | 
| 
      
 3147 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3148 
     | 
    
         
            +
            		addEvent( testTitle, "click", function() {
         
     | 
| 
      
 3149 
     | 
    
         
            +
            			toggleClass( sourceName, "qunit-collapsed" );
         
     | 
| 
      
 3150 
     | 
    
         
            +
            		} );
         
     | 
| 
      
 3151 
     | 
    
         
            +
            		testItem.appendChild( sourceName );
         
     | 
| 
      
 3152 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3153 
     | 
    
         
            +
            } );
         
     | 
| 
      
 3154 
     | 
    
         
            +
             
     | 
| 
      
 3155 
     | 
    
         
            +
            // Avoid readyState issue with phantomjs
         
     | 
| 
      
 3156 
     | 
    
         
            +
            // Ref: #818
         
     | 
| 
      
 3157 
     | 
    
         
            +
            var notPhantom = ( function( p ) {
         
     | 
| 
      
 3158 
     | 
    
         
            +
            	return !( p && p.version && p.version.major > 0 );
         
     | 
| 
      
 3159 
     | 
    
         
            +
            } )( window.phantom );
         
     | 
| 
      
 3160 
     | 
    
         
            +
             
     | 
| 
      
 3161 
     | 
    
         
            +
            if ( notPhantom && document.readyState === "complete" ) {
         
     | 
| 
      
 3162 
     | 
    
         
            +
            	QUnit.load();
         
     | 
| 
      
 3163 
     | 
    
         
            +
            } else {
         
     | 
| 
      
 3164 
     | 
    
         
            +
            	addEvent( window, "load", QUnit.load );
         
     | 
| 
      
 3165 
     | 
    
         
            +
            }
         
     | 
| 
      
 3166 
     | 
    
         
            +
             
     | 
| 
      
 3167 
     | 
    
         
            +
            /*
         
     | 
| 
      
 3168 
     | 
    
         
            +
             * This file is a modified version of google-diff-match-patch's JavaScript implementation
         
     | 
| 
      
 3169 
     | 
    
         
            +
             * (https://code.google.com/p/google-diff-match-patch/source/browse/trunk/javascript/diff_match_patch_uncompressed.js),
         
     | 
| 
      
 3170 
     | 
    
         
            +
             * modifications are licensed as more fully set forth in LICENSE.txt.
         
     | 
| 
      
 3171 
     | 
    
         
            +
             *
         
     | 
| 
      
 3172 
     | 
    
         
            +
             * The original source of google-diff-match-patch is attributable and licensed as follows:
         
     | 
| 
      
 3173 
     | 
    
         
            +
             *
         
     | 
| 
      
 3174 
     | 
    
         
            +
             * Copyright 2006 Google Inc.
         
     | 
| 
      
 3175 
     | 
    
         
            +
             * https://code.google.com/p/google-diff-match-patch/
         
     | 
| 
      
 3176 
     | 
    
         
            +
             *
         
     | 
| 
      
 3177 
     | 
    
         
            +
             * Licensed under the Apache License, Version 2.0 (the "License");
         
     | 
| 
      
 3178 
     | 
    
         
            +
             * you may not use this file except in compliance with the License.
         
     | 
| 
      
 3179 
     | 
    
         
            +
             * You may obtain a copy of the License at
         
     | 
| 
      
 3180 
     | 
    
         
            +
             *
         
     | 
| 
      
 3181 
     | 
    
         
            +
             * https://www.apache.org/licenses/LICENSE-2.0
         
     | 
| 
      
 3182 
     | 
    
         
            +
             *
         
     | 
| 
      
 3183 
     | 
    
         
            +
             * Unless required by applicable law or agreed to in writing, software
         
     | 
| 
      
 3184 
     | 
    
         
            +
             * distributed under the License is distributed on an "AS IS" BASIS,
         
     | 
| 
      
 3185 
     | 
    
         
            +
             * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         
     | 
| 
      
 3186 
     | 
    
         
            +
             * See the License for the specific language governing permissions and
         
     | 
| 
      
 3187 
     | 
    
         
            +
             * limitations under the License.
         
     | 
| 
      
 3188 
     | 
    
         
            +
             *
         
     | 
| 
      
 3189 
     | 
    
         
            +
             * More Info:
         
     | 
| 
      
 3190 
     | 
    
         
            +
             *  https://code.google.com/p/google-diff-match-patch/
         
     | 
| 
      
 3191 
     | 
    
         
            +
             *
         
     | 
| 
      
 3192 
     | 
    
         
            +
             * Usage: QUnit.diff(expected, actual)
         
     | 
| 
      
 3193 
     | 
    
         
            +
             *
         
     | 
| 
      
 3194 
     | 
    
         
            +
             */
         
     | 
| 
      
 3195 
     | 
    
         
            +
            QUnit.diff = ( function() {
         
     | 
| 
      
 3196 
     | 
    
         
            +
            	function DiffMatchPatch() {
         
     | 
| 
      
 3197 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3198 
     | 
    
         
            +
             
     | 
| 
      
 3199 
     | 
    
         
            +
            	//  DIFF FUNCTIONS
         
     | 
| 
      
 3200 
     | 
    
         
            +
             
     | 
| 
      
 3201 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 3202 
     | 
    
         
            +
            	 * The data structure representing a diff is an array of tuples:
         
     | 
| 
      
 3203 
     | 
    
         
            +
            	 * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]
         
     | 
| 
      
 3204 
     | 
    
         
            +
            	 * which means: delete 'Hello', add 'Goodbye' and keep ' world.'
         
     | 
| 
      
 3205 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 3206 
     | 
    
         
            +
            	var DIFF_DELETE = -1,
         
     | 
| 
      
 3207 
     | 
    
         
            +
            		DIFF_INSERT = 1,
         
     | 
| 
      
 3208 
     | 
    
         
            +
            		DIFF_EQUAL = 0;
         
     | 
| 
      
 3209 
     | 
    
         
            +
             
     | 
| 
      
 3210 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 3211 
     | 
    
         
            +
            	 * Find the differences between two texts.  Simplifies the problem by stripping
         
     | 
| 
      
 3212 
     | 
    
         
            +
            	 * any common prefix or suffix off the texts before diffing.
         
     | 
| 
      
 3213 
     | 
    
         
            +
            	 * @param {string} text1 Old string to be diffed.
         
     | 
| 
      
 3214 
     | 
    
         
            +
            	 * @param {string} text2 New string to be diffed.
         
     | 
| 
      
 3215 
     | 
    
         
            +
            	 * @param {boolean=} optChecklines Optional speedup flag. If present and false,
         
     | 
| 
      
 3216 
     | 
    
         
            +
            	 *     then don't run a line-level diff first to identify the changed areas.
         
     | 
| 
      
 3217 
     | 
    
         
            +
            	 *     Defaults to true, which does a faster, slightly less optimal diff.
         
     | 
| 
      
 3218 
     | 
    
         
            +
            	 * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
         
     | 
| 
      
 3219 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 3220 
     | 
    
         
            +
            	DiffMatchPatch.prototype.DiffMain = function( text1, text2, optChecklines ) {
         
     | 
| 
      
 3221 
     | 
    
         
            +
            		var deadline, checklines, commonlength,
         
     | 
| 
      
 3222 
     | 
    
         
            +
            			commonprefix, commonsuffix, diffs;
         
     | 
| 
      
 3223 
     | 
    
         
            +
             
     | 
| 
      
 3224 
     | 
    
         
            +
            		// The diff must be complete in up to 1 second.
         
     | 
| 
      
 3225 
     | 
    
         
            +
            		deadline = ( new Date() ).getTime() + 1000;
         
     | 
| 
      
 3226 
     | 
    
         
            +
             
     | 
| 
      
 3227 
     | 
    
         
            +
            		// Check for null inputs.
         
     | 
| 
      
 3228 
     | 
    
         
            +
            		if ( text1 === null || text2 === null ) {
         
     | 
| 
      
 3229 
     | 
    
         
            +
            			throw new Error( "Null input. (DiffMain)" );
         
     | 
| 
      
 3230 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3231 
     | 
    
         
            +
             
     | 
| 
      
 3232 
     | 
    
         
            +
            		// Check for equality (speedup).
         
     | 
| 
      
 3233 
     | 
    
         
            +
            		if ( text1 === text2 ) {
         
     | 
| 
      
 3234 
     | 
    
         
            +
            			if ( text1 ) {
         
     | 
| 
      
 3235 
     | 
    
         
            +
            				return [
         
     | 
| 
      
 3236 
     | 
    
         
            +
            					[ DIFF_EQUAL, text1 ]
         
     | 
| 
      
 3237 
     | 
    
         
            +
            				];
         
     | 
| 
      
 3238 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3239 
     | 
    
         
            +
            			return [];
         
     | 
| 
      
 3240 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3241 
     | 
    
         
            +
             
     | 
| 
      
 3242 
     | 
    
         
            +
            		if ( typeof optChecklines === "undefined" ) {
         
     | 
| 
      
 3243 
     | 
    
         
            +
            			optChecklines = true;
         
     | 
| 
      
 3244 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3245 
     | 
    
         
            +
             
     | 
| 
      
 3246 
     | 
    
         
            +
            		checklines = optChecklines;
         
     | 
| 
      
 3247 
     | 
    
         
            +
             
     | 
| 
      
 3248 
     | 
    
         
            +
            		// Trim off common prefix (speedup).
         
     | 
| 
      
 3249 
     | 
    
         
            +
            		commonlength = this.diffCommonPrefix( text1, text2 );
         
     | 
| 
      
 3250 
     | 
    
         
            +
            		commonprefix = text1.substring( 0, commonlength );
         
     | 
| 
      
 3251 
     | 
    
         
            +
            		text1 = text1.substring( commonlength );
         
     | 
| 
      
 3252 
     | 
    
         
            +
            		text2 = text2.substring( commonlength );
         
     | 
| 
      
 3253 
     | 
    
         
            +
             
     | 
| 
      
 3254 
     | 
    
         
            +
            		// Trim off common suffix (speedup).
         
     | 
| 
      
 3255 
     | 
    
         
            +
            		commonlength = this.diffCommonSuffix( text1, text2 );
         
     | 
| 
      
 3256 
     | 
    
         
            +
            		commonsuffix = text1.substring( text1.length - commonlength );
         
     | 
| 
      
 3257 
     | 
    
         
            +
            		text1 = text1.substring( 0, text1.length - commonlength );
         
     | 
| 
      
 3258 
     | 
    
         
            +
            		text2 = text2.substring( 0, text2.length - commonlength );
         
     | 
| 
      
 3259 
     | 
    
         
            +
             
     | 
| 
      
 3260 
     | 
    
         
            +
            		// Compute the diff on the middle block.
         
     | 
| 
      
 3261 
     | 
    
         
            +
            		diffs = this.diffCompute( text1, text2, checklines, deadline );
         
     | 
| 
      
 3262 
     | 
    
         
            +
             
     | 
| 
      
 3263 
     | 
    
         
            +
            		// Restore the prefix and suffix.
         
     | 
| 
      
 3264 
     | 
    
         
            +
            		if ( commonprefix ) {
         
     | 
| 
      
 3265 
     | 
    
         
            +
            			diffs.unshift( [ DIFF_EQUAL, commonprefix ] );
         
     | 
| 
      
 3266 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3267 
     | 
    
         
            +
            		if ( commonsuffix ) {
         
     | 
| 
      
 3268 
     | 
    
         
            +
            			diffs.push( [ DIFF_EQUAL, commonsuffix ] );
         
     | 
| 
      
 3269 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3270 
     | 
    
         
            +
            		this.diffCleanupMerge( diffs );
         
     | 
| 
      
 3271 
     | 
    
         
            +
            		return diffs;
         
     | 
| 
      
 3272 
     | 
    
         
            +
            	};
         
     | 
| 
      
 3273 
     | 
    
         
            +
             
     | 
| 
      
 3274 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 3275 
     | 
    
         
            +
            	 * Reduce the number of edits by eliminating operationally trivial equalities.
         
     | 
| 
      
 3276 
     | 
    
         
            +
            	 * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
         
     | 
| 
      
 3277 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 3278 
     | 
    
         
            +
            	DiffMatchPatch.prototype.diffCleanupEfficiency = function( diffs ) {
         
     | 
| 
      
 3279 
     | 
    
         
            +
            		var changes, equalities, equalitiesLength, lastequality,
         
     | 
| 
      
 3280 
     | 
    
         
            +
            			pointer, preIns, preDel, postIns, postDel;
         
     | 
| 
      
 3281 
     | 
    
         
            +
            		changes = false;
         
     | 
| 
      
 3282 
     | 
    
         
            +
            		equalities = []; // Stack of indices where equalities are found.
         
     | 
| 
      
 3283 
     | 
    
         
            +
            		equalitiesLength = 0; // Keeping our own length var is faster in JS.
         
     | 
| 
      
 3284 
     | 
    
         
            +
            		/** @type {?string} */
         
     | 
| 
      
 3285 
     | 
    
         
            +
            		lastequality = null;
         
     | 
| 
      
 3286 
     | 
    
         
            +
             
     | 
| 
      
 3287 
     | 
    
         
            +
            		// Always equal to diffs[equalities[equalitiesLength - 1]][1]
         
     | 
| 
      
 3288 
     | 
    
         
            +
            		pointer = 0; // Index of current position.
         
     | 
| 
      
 3289 
     | 
    
         
            +
             
     | 
| 
      
 3290 
     | 
    
         
            +
            		// Is there an insertion operation before the last equality.
         
     | 
| 
      
 3291 
     | 
    
         
            +
            		preIns = false;
         
     | 
| 
      
 3292 
     | 
    
         
            +
             
     | 
| 
      
 3293 
     | 
    
         
            +
            		// Is there a deletion operation before the last equality.
         
     | 
| 
      
 3294 
     | 
    
         
            +
            		preDel = false;
         
     | 
| 
      
 3295 
     | 
    
         
            +
             
     | 
| 
      
 3296 
     | 
    
         
            +
            		// Is there an insertion operation after the last equality.
         
     | 
| 
      
 3297 
     | 
    
         
            +
            		postIns = false;
         
     | 
| 
      
 3298 
     | 
    
         
            +
             
     | 
| 
      
 3299 
     | 
    
         
            +
            		// Is there a deletion operation after the last equality.
         
     | 
| 
      
 3300 
     | 
    
         
            +
            		postDel = false;
         
     | 
| 
      
 3301 
     | 
    
         
            +
            		while ( pointer < diffs.length ) {
         
     | 
| 
      
 3302 
     | 
    
         
            +
             
     | 
| 
      
 3303 
     | 
    
         
            +
            			// Equality found.
         
     | 
| 
      
 3304 
     | 
    
         
            +
            			if ( diffs[ pointer ][ 0 ] === DIFF_EQUAL ) {
         
     | 
| 
      
 3305 
     | 
    
         
            +
            				if ( diffs[ pointer ][ 1 ].length < 4 && ( postIns || postDel ) ) {
         
     | 
| 
      
 3306 
     | 
    
         
            +
             
     | 
| 
      
 3307 
     | 
    
         
            +
            					// Candidate found.
         
     | 
| 
      
 3308 
     | 
    
         
            +
            					equalities[ equalitiesLength++ ] = pointer;
         
     | 
| 
      
 3309 
     | 
    
         
            +
            					preIns = postIns;
         
     | 
| 
      
 3310 
     | 
    
         
            +
            					preDel = postDel;
         
     | 
| 
      
 3311 
     | 
    
         
            +
            					lastequality = diffs[ pointer ][ 1 ];
         
     | 
| 
      
 3312 
     | 
    
         
            +
            				} else {
         
     | 
| 
      
 3313 
     | 
    
         
            +
             
     | 
| 
      
 3314 
     | 
    
         
            +
            					// Not a candidate, and can never become one.
         
     | 
| 
      
 3315 
     | 
    
         
            +
            					equalitiesLength = 0;
         
     | 
| 
      
 3316 
     | 
    
         
            +
            					lastequality = null;
         
     | 
| 
      
 3317 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3318 
     | 
    
         
            +
            				postIns = postDel = false;
         
     | 
| 
      
 3319 
     | 
    
         
            +
             
     | 
| 
      
 3320 
     | 
    
         
            +
            			// An insertion or deletion.
         
     | 
| 
      
 3321 
     | 
    
         
            +
            			} else {
         
     | 
| 
      
 3322 
     | 
    
         
            +
             
     | 
| 
      
 3323 
     | 
    
         
            +
            				if ( diffs[ pointer ][ 0 ] === DIFF_DELETE ) {
         
     | 
| 
      
 3324 
     | 
    
         
            +
            					postDel = true;
         
     | 
| 
      
 3325 
     | 
    
         
            +
            				} else {
         
     | 
| 
      
 3326 
     | 
    
         
            +
            					postIns = true;
         
     | 
| 
      
 3327 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3328 
     | 
    
         
            +
             
     | 
| 
      
 3329 
     | 
    
         
            +
            				/*
         
     | 
| 
      
 3330 
     | 
    
         
            +
            				 * Five types to be split:
         
     | 
| 
      
 3331 
     | 
    
         
            +
            				 * <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>
         
     | 
| 
      
 3332 
     | 
    
         
            +
            				 * <ins>A</ins>X<ins>C</ins><del>D</del>
         
     | 
| 
      
 3333 
     | 
    
         
            +
            				 * <ins>A</ins><del>B</del>X<ins>C</ins>
         
     | 
| 
      
 3334 
     | 
    
         
            +
            				 * <ins>A</del>X<ins>C</ins><del>D</del>
         
     | 
| 
      
 3335 
     | 
    
         
            +
            				 * <ins>A</ins><del>B</del>X<del>C</del>
         
     | 
| 
      
 3336 
     | 
    
         
            +
            				 */
         
     | 
| 
      
 3337 
     | 
    
         
            +
            				if ( lastequality && ( ( preIns && preDel && postIns && postDel ) ||
         
     | 
| 
      
 3338 
     | 
    
         
            +
            						( ( lastequality.length < 2 ) &&
         
     | 
| 
      
 3339 
     | 
    
         
            +
            						( preIns + preDel + postIns + postDel ) === 3 ) ) ) {
         
     | 
| 
      
 3340 
     | 
    
         
            +
             
     | 
| 
      
 3341 
     | 
    
         
            +
            					// Duplicate record.
         
     | 
| 
      
 3342 
     | 
    
         
            +
            					diffs.splice(
         
     | 
| 
      
 3343 
     | 
    
         
            +
            						equalities[ equalitiesLength - 1 ],
         
     | 
| 
      
 3344 
     | 
    
         
            +
            						0,
         
     | 
| 
      
 3345 
     | 
    
         
            +
            						[ DIFF_DELETE, lastequality ]
         
     | 
| 
      
 3346 
     | 
    
         
            +
            					);
         
     | 
| 
      
 3347 
     | 
    
         
            +
             
     | 
| 
      
 3348 
     | 
    
         
            +
            					// Change second copy to insert.
         
     | 
| 
      
 3349 
     | 
    
         
            +
            					diffs[ equalities[ equalitiesLength - 1 ] + 1 ][ 0 ] = DIFF_INSERT;
         
     | 
| 
      
 3350 
     | 
    
         
            +
            					equalitiesLength--; // Throw away the equality we just deleted;
         
     | 
| 
      
 3351 
     | 
    
         
            +
            					lastequality = null;
         
     | 
| 
      
 3352 
     | 
    
         
            +
            					if ( preIns && preDel ) {
         
     | 
| 
      
 3353 
     | 
    
         
            +
             
     | 
| 
      
 3354 
     | 
    
         
            +
            						// No changes made which could affect previous entry, keep going.
         
     | 
| 
      
 3355 
     | 
    
         
            +
            						postIns = postDel = true;
         
     | 
| 
      
 3356 
     | 
    
         
            +
            						equalitiesLength = 0;
         
     | 
| 
      
 3357 
     | 
    
         
            +
            					} else {
         
     | 
| 
      
 3358 
     | 
    
         
            +
            						equalitiesLength--; // Throw away the previous equality.
         
     | 
| 
      
 3359 
     | 
    
         
            +
            						pointer = equalitiesLength > 0 ? equalities[ equalitiesLength - 1 ] : -1;
         
     | 
| 
      
 3360 
     | 
    
         
            +
            						postIns = postDel = false;
         
     | 
| 
      
 3361 
     | 
    
         
            +
            					}
         
     | 
| 
      
 3362 
     | 
    
         
            +
            					changes = true;
         
     | 
| 
      
 3363 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3364 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3365 
     | 
    
         
            +
            			pointer++;
         
     | 
| 
      
 3366 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3367 
     | 
    
         
            +
             
     | 
| 
      
 3368 
     | 
    
         
            +
            		if ( changes ) {
         
     | 
| 
      
 3369 
     | 
    
         
            +
            			this.diffCleanupMerge( diffs );
         
     | 
| 
      
 3370 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3371 
     | 
    
         
            +
            	};
         
     | 
| 
      
 3372 
     | 
    
         
            +
             
     | 
| 
      
 3373 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 3374 
     | 
    
         
            +
            	 * Convert a diff array into a pretty HTML report.
         
     | 
| 
      
 3375 
     | 
    
         
            +
            	 * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
         
     | 
| 
      
 3376 
     | 
    
         
            +
            	 * @param {integer} string to be beautified.
         
     | 
| 
      
 3377 
     | 
    
         
            +
            	 * @return {string} HTML representation.
         
     | 
| 
      
 3378 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 3379 
     | 
    
         
            +
            	DiffMatchPatch.prototype.diffPrettyHtml = function( diffs ) {
         
     | 
| 
      
 3380 
     | 
    
         
            +
            		var op, data, x,
         
     | 
| 
      
 3381 
     | 
    
         
            +
            			html = [];
         
     | 
| 
      
 3382 
     | 
    
         
            +
            		for ( x = 0; x < diffs.length; x++ ) {
         
     | 
| 
      
 3383 
     | 
    
         
            +
            			op = diffs[ x ][ 0 ]; // Operation (insert, delete, equal)
         
     | 
| 
      
 3384 
     | 
    
         
            +
            			data = diffs[ x ][ 1 ]; // Text of change.
         
     | 
| 
      
 3385 
     | 
    
         
            +
            			switch ( op ) {
         
     | 
| 
      
 3386 
     | 
    
         
            +
            			case DIFF_INSERT:
         
     | 
| 
      
 3387 
     | 
    
         
            +
            				html[ x ] = "<ins>" + escapeText( data ) + "</ins>";
         
     | 
| 
      
 3388 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 3389 
     | 
    
         
            +
            			case DIFF_DELETE:
         
     | 
| 
      
 3390 
     | 
    
         
            +
            				html[ x ] = "<del>" + escapeText( data ) + "</del>";
         
     | 
| 
      
 3391 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 3392 
     | 
    
         
            +
            			case DIFF_EQUAL:
         
     | 
| 
      
 3393 
     | 
    
         
            +
            				html[ x ] = "<span>" + escapeText( data ) + "</span>";
         
     | 
| 
      
 3394 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 3395 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3396 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3397 
     | 
    
         
            +
            		return html.join( "" );
         
     | 
| 
      
 3398 
     | 
    
         
            +
            	};
         
     | 
| 
      
 3399 
     | 
    
         
            +
             
     | 
| 
      
 3400 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 3401 
     | 
    
         
            +
            	 * Determine the common prefix of two strings.
         
     | 
| 
      
 3402 
     | 
    
         
            +
            	 * @param {string} text1 First string.
         
     | 
| 
      
 3403 
     | 
    
         
            +
            	 * @param {string} text2 Second string.
         
     | 
| 
      
 3404 
     | 
    
         
            +
            	 * @return {number} The number of characters common to the start of each
         
     | 
| 
      
 3405 
     | 
    
         
            +
            	 *     string.
         
     | 
| 
      
 3406 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 3407 
     | 
    
         
            +
            	DiffMatchPatch.prototype.diffCommonPrefix = function( text1, text2 ) {
         
     | 
| 
      
 3408 
     | 
    
         
            +
            		var pointermid, pointermax, pointermin, pointerstart;
         
     | 
| 
      
 3409 
     | 
    
         
            +
             
     | 
| 
      
 3410 
     | 
    
         
            +
            		// Quick check for common null cases.
         
     | 
| 
      
 3411 
     | 
    
         
            +
            		if ( !text1 || !text2 || text1.charAt( 0 ) !== text2.charAt( 0 ) ) {
         
     | 
| 
      
 3412 
     | 
    
         
            +
            			return 0;
         
     | 
| 
      
 3413 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3414 
     | 
    
         
            +
             
     | 
| 
      
 3415 
     | 
    
         
            +
            		// Binary search.
         
     | 
| 
      
 3416 
     | 
    
         
            +
            		// Performance analysis: https://neil.fraser.name/news/2007/10/09/
         
     | 
| 
      
 3417 
     | 
    
         
            +
            		pointermin = 0;
         
     | 
| 
      
 3418 
     | 
    
         
            +
            		pointermax = Math.min( text1.length, text2.length );
         
     | 
| 
      
 3419 
     | 
    
         
            +
            		pointermid = pointermax;
         
     | 
| 
      
 3420 
     | 
    
         
            +
            		pointerstart = 0;
         
     | 
| 
      
 3421 
     | 
    
         
            +
            		while ( pointermin < pointermid ) {
         
     | 
| 
      
 3422 
     | 
    
         
            +
            			if ( text1.substring( pointerstart, pointermid ) ===
         
     | 
| 
      
 3423 
     | 
    
         
            +
            					text2.substring( pointerstart, pointermid ) ) {
         
     | 
| 
      
 3424 
     | 
    
         
            +
            				pointermin = pointermid;
         
     | 
| 
      
 3425 
     | 
    
         
            +
            				pointerstart = pointermin;
         
     | 
| 
      
 3426 
     | 
    
         
            +
            			} else {
         
     | 
| 
      
 3427 
     | 
    
         
            +
            				pointermax = pointermid;
         
     | 
| 
      
 3428 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3429 
     | 
    
         
            +
            			pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin );
         
     | 
| 
      
 3430 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3431 
     | 
    
         
            +
            		return pointermid;
         
     | 
| 
      
 3432 
     | 
    
         
            +
            	};
         
     | 
| 
      
 3433 
     | 
    
         
            +
             
     | 
| 
      
 3434 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 3435 
     | 
    
         
            +
            	 * Determine the common suffix of two strings.
         
     | 
| 
      
 3436 
     | 
    
         
            +
            	 * @param {string} text1 First string.
         
     | 
| 
      
 3437 
     | 
    
         
            +
            	 * @param {string} text2 Second string.
         
     | 
| 
      
 3438 
     | 
    
         
            +
            	 * @return {number} The number of characters common to the end of each string.
         
     | 
| 
      
 3439 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 3440 
     | 
    
         
            +
            	DiffMatchPatch.prototype.diffCommonSuffix = function( text1, text2 ) {
         
     | 
| 
      
 3441 
     | 
    
         
            +
            		var pointermid, pointermax, pointermin, pointerend;
         
     | 
| 
      
 3442 
     | 
    
         
            +
             
     | 
| 
      
 3443 
     | 
    
         
            +
            		// Quick check for common null cases.
         
     | 
| 
      
 3444 
     | 
    
         
            +
            		if ( !text1 ||
         
     | 
| 
      
 3445 
     | 
    
         
            +
            				!text2 ||
         
     | 
| 
      
 3446 
     | 
    
         
            +
            				text1.charAt( text1.length - 1 ) !== text2.charAt( text2.length - 1 ) ) {
         
     | 
| 
      
 3447 
     | 
    
         
            +
            			return 0;
         
     | 
| 
      
 3448 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3449 
     | 
    
         
            +
             
     | 
| 
      
 3450 
     | 
    
         
            +
            		// Binary search.
         
     | 
| 
      
 3451 
     | 
    
         
            +
            		// Performance analysis: https://neil.fraser.name/news/2007/10/09/
         
     | 
| 
      
 3452 
     | 
    
         
            +
            		pointermin = 0;
         
     | 
| 
      
 3453 
     | 
    
         
            +
            		pointermax = Math.min( text1.length, text2.length );
         
     | 
| 
      
 3454 
     | 
    
         
            +
            		pointermid = pointermax;
         
     | 
| 
      
 3455 
     | 
    
         
            +
            		pointerend = 0;
         
     | 
| 
      
 3456 
     | 
    
         
            +
            		while ( pointermin < pointermid ) {
         
     | 
| 
      
 3457 
     | 
    
         
            +
            			if ( text1.substring( text1.length - pointermid, text1.length - pointerend ) ===
         
     | 
| 
      
 3458 
     | 
    
         
            +
            					text2.substring( text2.length - pointermid, text2.length - pointerend ) ) {
         
     | 
| 
      
 3459 
     | 
    
         
            +
            				pointermin = pointermid;
         
     | 
| 
      
 3460 
     | 
    
         
            +
            				pointerend = pointermin;
         
     | 
| 
      
 3461 
     | 
    
         
            +
            			} else {
         
     | 
| 
      
 3462 
     | 
    
         
            +
            				pointermax = pointermid;
         
     | 
| 
      
 3463 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3464 
     | 
    
         
            +
            			pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin );
         
     | 
| 
      
 3465 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3466 
     | 
    
         
            +
            		return pointermid;
         
     | 
| 
      
 3467 
     | 
    
         
            +
            	};
         
     | 
| 
      
 3468 
     | 
    
         
            +
             
     | 
| 
      
 3469 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 3470 
     | 
    
         
            +
            	 * Find the differences between two texts.  Assumes that the texts do not
         
     | 
| 
      
 3471 
     | 
    
         
            +
            	 * have any common prefix or suffix.
         
     | 
| 
      
 3472 
     | 
    
         
            +
            	 * @param {string} text1 Old string to be diffed.
         
     | 
| 
      
 3473 
     | 
    
         
            +
            	 * @param {string} text2 New string to be diffed.
         
     | 
| 
      
 3474 
     | 
    
         
            +
            	 * @param {boolean} checklines Speedup flag.  If false, then don't run a
         
     | 
| 
      
 3475 
     | 
    
         
            +
            	 *     line-level diff first to identify the changed areas.
         
     | 
| 
      
 3476 
     | 
    
         
            +
            	 *     If true, then run a faster, slightly less optimal diff.
         
     | 
| 
      
 3477 
     | 
    
         
            +
            	 * @param {number} deadline Time when the diff should be complete by.
         
     | 
| 
      
 3478 
     | 
    
         
            +
            	 * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
         
     | 
| 
      
 3479 
     | 
    
         
            +
            	 * @private
         
     | 
| 
      
 3480 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 3481 
     | 
    
         
            +
            	DiffMatchPatch.prototype.diffCompute = function( text1, text2, checklines, deadline ) {
         
     | 
| 
      
 3482 
     | 
    
         
            +
            		var diffs, longtext, shorttext, i, hm,
         
     | 
| 
      
 3483 
     | 
    
         
            +
            			text1A, text2A, text1B, text2B,
         
     | 
| 
      
 3484 
     | 
    
         
            +
            			midCommon, diffsA, diffsB;
         
     | 
| 
      
 3485 
     | 
    
         
            +
             
     | 
| 
      
 3486 
     | 
    
         
            +
            		if ( !text1 ) {
         
     | 
| 
      
 3487 
     | 
    
         
            +
             
     | 
| 
      
 3488 
     | 
    
         
            +
            			// Just add some text (speedup).
         
     | 
| 
      
 3489 
     | 
    
         
            +
            			return [
         
     | 
| 
      
 3490 
     | 
    
         
            +
            				[ DIFF_INSERT, text2 ]
         
     | 
| 
      
 3491 
     | 
    
         
            +
            			];
         
     | 
| 
      
 3492 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3493 
     | 
    
         
            +
             
     | 
| 
      
 3494 
     | 
    
         
            +
            		if ( !text2 ) {
         
     | 
| 
      
 3495 
     | 
    
         
            +
             
     | 
| 
      
 3496 
     | 
    
         
            +
            			// Just delete some text (speedup).
         
     | 
| 
      
 3497 
     | 
    
         
            +
            			return [
         
     | 
| 
      
 3498 
     | 
    
         
            +
            				[ DIFF_DELETE, text1 ]
         
     | 
| 
      
 3499 
     | 
    
         
            +
            			];
         
     | 
| 
      
 3500 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3501 
     | 
    
         
            +
             
     | 
| 
      
 3502 
     | 
    
         
            +
            		longtext = text1.length > text2.length ? text1 : text2;
         
     | 
| 
      
 3503 
     | 
    
         
            +
            		shorttext = text1.length > text2.length ? text2 : text1;
         
     | 
| 
      
 3504 
     | 
    
         
            +
            		i = longtext.indexOf( shorttext );
         
     | 
| 
      
 3505 
     | 
    
         
            +
            		if ( i !== -1 ) {
         
     | 
| 
      
 3506 
     | 
    
         
            +
             
     | 
| 
      
 3507 
     | 
    
         
            +
            			// Shorter text is inside the longer text (speedup).
         
     | 
| 
      
 3508 
     | 
    
         
            +
            			diffs = [
         
     | 
| 
      
 3509 
     | 
    
         
            +
            				[ DIFF_INSERT, longtext.substring( 0, i ) ],
         
     | 
| 
      
 3510 
     | 
    
         
            +
            				[ DIFF_EQUAL, shorttext ],
         
     | 
| 
      
 3511 
     | 
    
         
            +
            				[ DIFF_INSERT, longtext.substring( i + shorttext.length ) ]
         
     | 
| 
      
 3512 
     | 
    
         
            +
            			];
         
     | 
| 
      
 3513 
     | 
    
         
            +
             
     | 
| 
      
 3514 
     | 
    
         
            +
            			// Swap insertions for deletions if diff is reversed.
         
     | 
| 
      
 3515 
     | 
    
         
            +
            			if ( text1.length > text2.length ) {
         
     | 
| 
      
 3516 
     | 
    
         
            +
            				diffs[ 0 ][ 0 ] = diffs[ 2 ][ 0 ] = DIFF_DELETE;
         
     | 
| 
      
 3517 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3518 
     | 
    
         
            +
            			return diffs;
         
     | 
| 
      
 3519 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3520 
     | 
    
         
            +
             
     | 
| 
      
 3521 
     | 
    
         
            +
            		if ( shorttext.length === 1 ) {
         
     | 
| 
      
 3522 
     | 
    
         
            +
             
     | 
| 
      
 3523 
     | 
    
         
            +
            			// Single character string.
         
     | 
| 
      
 3524 
     | 
    
         
            +
            			// After the previous speedup, the character can't be an equality.
         
     | 
| 
      
 3525 
     | 
    
         
            +
            			return [
         
     | 
| 
      
 3526 
     | 
    
         
            +
            				[ DIFF_DELETE, text1 ],
         
     | 
| 
      
 3527 
     | 
    
         
            +
            				[ DIFF_INSERT, text2 ]
         
     | 
| 
      
 3528 
     | 
    
         
            +
            			];
         
     | 
| 
      
 3529 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3530 
     | 
    
         
            +
             
     | 
| 
      
 3531 
     | 
    
         
            +
            		// Check to see if the problem can be split in two.
         
     | 
| 
      
 3532 
     | 
    
         
            +
            		hm = this.diffHalfMatch( text1, text2 );
         
     | 
| 
      
 3533 
     | 
    
         
            +
            		if ( hm ) {
         
     | 
| 
      
 3534 
     | 
    
         
            +
             
     | 
| 
      
 3535 
     | 
    
         
            +
            			// A half-match was found, sort out the return data.
         
     | 
| 
      
 3536 
     | 
    
         
            +
            			text1A = hm[ 0 ];
         
     | 
| 
      
 3537 
     | 
    
         
            +
            			text1B = hm[ 1 ];
         
     | 
| 
      
 3538 
     | 
    
         
            +
            			text2A = hm[ 2 ];
         
     | 
| 
      
 3539 
     | 
    
         
            +
            			text2B = hm[ 3 ];
         
     | 
| 
      
 3540 
     | 
    
         
            +
            			midCommon = hm[ 4 ];
         
     | 
| 
      
 3541 
     | 
    
         
            +
             
     | 
| 
      
 3542 
     | 
    
         
            +
            			// Send both pairs off for separate processing.
         
     | 
| 
      
 3543 
     | 
    
         
            +
            			diffsA = this.DiffMain( text1A, text2A, checklines, deadline );
         
     | 
| 
      
 3544 
     | 
    
         
            +
            			diffsB = this.DiffMain( text1B, text2B, checklines, deadline );
         
     | 
| 
      
 3545 
     | 
    
         
            +
             
     | 
| 
      
 3546 
     | 
    
         
            +
            			// Merge the results.
         
     | 
| 
      
 3547 
     | 
    
         
            +
            			return diffsA.concat( [
         
     | 
| 
      
 3548 
     | 
    
         
            +
            				[ DIFF_EQUAL, midCommon ]
         
     | 
| 
      
 3549 
     | 
    
         
            +
            			], diffsB );
         
     | 
| 
      
 3550 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3551 
     | 
    
         
            +
             
     | 
| 
      
 3552 
     | 
    
         
            +
            		if ( checklines && text1.length > 100 && text2.length > 100 ) {
         
     | 
| 
      
 3553 
     | 
    
         
            +
            			return this.diffLineMode( text1, text2, deadline );
         
     | 
| 
      
 3554 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3555 
     | 
    
         
            +
             
     | 
| 
      
 3556 
     | 
    
         
            +
            		return this.diffBisect( text1, text2, deadline );
         
     | 
| 
      
 3557 
     | 
    
         
            +
            	};
         
     | 
| 
      
 3558 
     | 
    
         
            +
             
     | 
| 
      
 3559 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 3560 
     | 
    
         
            +
            	 * Do the two texts share a substring which is at least half the length of the
         
     | 
| 
      
 3561 
     | 
    
         
            +
            	 * longer text?
         
     | 
| 
      
 3562 
     | 
    
         
            +
            	 * This speedup can produce non-minimal diffs.
         
     | 
| 
      
 3563 
     | 
    
         
            +
            	 * @param {string} text1 First string.
         
     | 
| 
      
 3564 
     | 
    
         
            +
            	 * @param {string} text2 Second string.
         
     | 
| 
      
 3565 
     | 
    
         
            +
            	 * @return {Array.<string>} Five element Array, containing the prefix of
         
     | 
| 
      
 3566 
     | 
    
         
            +
            	 *     text1, the suffix of text1, the prefix of text2, the suffix of
         
     | 
| 
      
 3567 
     | 
    
         
            +
            	 *     text2 and the common middle.  Or null if there was no match.
         
     | 
| 
      
 3568 
     | 
    
         
            +
            	 * @private
         
     | 
| 
      
 3569 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 3570 
     | 
    
         
            +
            	DiffMatchPatch.prototype.diffHalfMatch = function( text1, text2 ) {
         
     | 
| 
      
 3571 
     | 
    
         
            +
            		var longtext, shorttext, dmp,
         
     | 
| 
      
 3572 
     | 
    
         
            +
            			text1A, text2B, text2A, text1B, midCommon,
         
     | 
| 
      
 3573 
     | 
    
         
            +
            			hm1, hm2, hm;
         
     | 
| 
      
 3574 
     | 
    
         
            +
             
     | 
| 
      
 3575 
     | 
    
         
            +
            		longtext = text1.length > text2.length ? text1 : text2;
         
     | 
| 
      
 3576 
     | 
    
         
            +
            		shorttext = text1.length > text2.length ? text2 : text1;
         
     | 
| 
      
 3577 
     | 
    
         
            +
            		if ( longtext.length < 4 || shorttext.length * 2 < longtext.length ) {
         
     | 
| 
      
 3578 
     | 
    
         
            +
            			return null; // Pointless.
         
     | 
| 
      
 3579 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3580 
     | 
    
         
            +
            		dmp = this; // 'this' becomes 'window' in a closure.
         
     | 
| 
      
 3581 
     | 
    
         
            +
             
     | 
| 
      
 3582 
     | 
    
         
            +
            		/**
         
     | 
| 
      
 3583 
     | 
    
         
            +
            		 * Does a substring of shorttext exist within longtext such that the substring
         
     | 
| 
      
 3584 
     | 
    
         
            +
            		 * is at least half the length of longtext?
         
     | 
| 
      
 3585 
     | 
    
         
            +
            		 * Closure, but does not reference any external variables.
         
     | 
| 
      
 3586 
     | 
    
         
            +
            		 * @param {string} longtext Longer string.
         
     | 
| 
      
 3587 
     | 
    
         
            +
            		 * @param {string} shorttext Shorter string.
         
     | 
| 
      
 3588 
     | 
    
         
            +
            		 * @param {number} i Start index of quarter length substring within longtext.
         
     | 
| 
      
 3589 
     | 
    
         
            +
            		 * @return {Array.<string>} Five element Array, containing the prefix of
         
     | 
| 
      
 3590 
     | 
    
         
            +
            		 *     longtext, the suffix of longtext, the prefix of shorttext, the suffix
         
     | 
| 
      
 3591 
     | 
    
         
            +
            		 *     of shorttext and the common middle.  Or null if there was no match.
         
     | 
| 
      
 3592 
     | 
    
         
            +
            		 * @private
         
     | 
| 
      
 3593 
     | 
    
         
            +
            		 */
         
     | 
| 
      
 3594 
     | 
    
         
            +
            		function diffHalfMatchI( longtext, shorttext, i ) {
         
     | 
| 
      
 3595 
     | 
    
         
            +
            			var seed, j, bestCommon, prefixLength, suffixLength,
         
     | 
| 
      
 3596 
     | 
    
         
            +
            				bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB;
         
     | 
| 
      
 3597 
     | 
    
         
            +
             
     | 
| 
      
 3598 
     | 
    
         
            +
            			// Start with a 1/4 length substring at position i as a seed.
         
     | 
| 
      
 3599 
     | 
    
         
            +
            			seed = longtext.substring( i, i + Math.floor( longtext.length / 4 ) );
         
     | 
| 
      
 3600 
     | 
    
         
            +
            			j = -1;
         
     | 
| 
      
 3601 
     | 
    
         
            +
            			bestCommon = "";
         
     | 
| 
      
 3602 
     | 
    
         
            +
            			while ( ( j = shorttext.indexOf( seed, j + 1 ) ) !== -1 ) {
         
     | 
| 
      
 3603 
     | 
    
         
            +
            				prefixLength = dmp.diffCommonPrefix( longtext.substring( i ),
         
     | 
| 
      
 3604 
     | 
    
         
            +
            					shorttext.substring( j ) );
         
     | 
| 
      
 3605 
     | 
    
         
            +
            				suffixLength = dmp.diffCommonSuffix( longtext.substring( 0, i ),
         
     | 
| 
      
 3606 
     | 
    
         
            +
            					shorttext.substring( 0, j ) );
         
     | 
| 
      
 3607 
     | 
    
         
            +
            				if ( bestCommon.length < suffixLength + prefixLength ) {
         
     | 
| 
      
 3608 
     | 
    
         
            +
            					bestCommon = shorttext.substring( j - suffixLength, j ) +
         
     | 
| 
      
 3609 
     | 
    
         
            +
            						shorttext.substring( j, j + prefixLength );
         
     | 
| 
      
 3610 
     | 
    
         
            +
            					bestLongtextA = longtext.substring( 0, i - suffixLength );
         
     | 
| 
      
 3611 
     | 
    
         
            +
            					bestLongtextB = longtext.substring( i + prefixLength );
         
     | 
| 
      
 3612 
     | 
    
         
            +
            					bestShorttextA = shorttext.substring( 0, j - suffixLength );
         
     | 
| 
      
 3613 
     | 
    
         
            +
            					bestShorttextB = shorttext.substring( j + prefixLength );
         
     | 
| 
      
 3614 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3615 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3616 
     | 
    
         
            +
            			if ( bestCommon.length * 2 >= longtext.length ) {
         
     | 
| 
      
 3617 
     | 
    
         
            +
            				return [ bestLongtextA, bestLongtextB,
         
     | 
| 
      
 3618 
     | 
    
         
            +
            					bestShorttextA, bestShorttextB, bestCommon
         
     | 
| 
      
 3619 
     | 
    
         
            +
            				];
         
     | 
| 
      
 3620 
     | 
    
         
            +
            			} else {
         
     | 
| 
      
 3621 
     | 
    
         
            +
            				return null;
         
     | 
| 
      
 3622 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3623 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3624 
     | 
    
         
            +
             
     | 
| 
      
 3625 
     | 
    
         
            +
            		// First check if the second quarter is the seed for a half-match.
         
     | 
| 
      
 3626 
     | 
    
         
            +
            		hm1 = diffHalfMatchI( longtext, shorttext,
         
     | 
| 
      
 3627 
     | 
    
         
            +
            			Math.ceil( longtext.length / 4 ) );
         
     | 
| 
      
 3628 
     | 
    
         
            +
             
     | 
| 
      
 3629 
     | 
    
         
            +
            		// Check again based on the third quarter.
         
     | 
| 
      
 3630 
     | 
    
         
            +
            		hm2 = diffHalfMatchI( longtext, shorttext,
         
     | 
| 
      
 3631 
     | 
    
         
            +
            			Math.ceil( longtext.length / 2 ) );
         
     | 
| 
      
 3632 
     | 
    
         
            +
            		if ( !hm1 && !hm2 ) {
         
     | 
| 
      
 3633 
     | 
    
         
            +
            			return null;
         
     | 
| 
      
 3634 
     | 
    
         
            +
            		} else if ( !hm2 ) {
         
     | 
| 
      
 3635 
     | 
    
         
            +
            			hm = hm1;
         
     | 
| 
      
 3636 
     | 
    
         
            +
            		} else if ( !hm1 ) {
         
     | 
| 
      
 3637 
     | 
    
         
            +
            			hm = hm2;
         
     | 
| 
      
 3638 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 3639 
     | 
    
         
            +
             
     | 
| 
      
 3640 
     | 
    
         
            +
            			// Both matched.  Select the longest.
         
     | 
| 
      
 3641 
     | 
    
         
            +
            			hm = hm1[ 4 ].length > hm2[ 4 ].length ? hm1 : hm2;
         
     | 
| 
      
 3642 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3643 
     | 
    
         
            +
             
     | 
| 
      
 3644 
     | 
    
         
            +
            		// A half-match was found, sort out the return data.
         
     | 
| 
      
 3645 
     | 
    
         
            +
            		text1A, text1B, text2A, text2B;
         
     | 
| 
      
 3646 
     | 
    
         
            +
            		if ( text1.length > text2.length ) {
         
     | 
| 
      
 3647 
     | 
    
         
            +
            			text1A = hm[ 0 ];
         
     | 
| 
      
 3648 
     | 
    
         
            +
            			text1B = hm[ 1 ];
         
     | 
| 
      
 3649 
     | 
    
         
            +
            			text2A = hm[ 2 ];
         
     | 
| 
      
 3650 
     | 
    
         
            +
            			text2B = hm[ 3 ];
         
     | 
| 
      
 3651 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 3652 
     | 
    
         
            +
            			text2A = hm[ 0 ];
         
     | 
| 
      
 3653 
     | 
    
         
            +
            			text2B = hm[ 1 ];
         
     | 
| 
      
 3654 
     | 
    
         
            +
            			text1A = hm[ 2 ];
         
     | 
| 
      
 3655 
     | 
    
         
            +
            			text1B = hm[ 3 ];
         
     | 
| 
      
 3656 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3657 
     | 
    
         
            +
            		midCommon = hm[ 4 ];
         
     | 
| 
      
 3658 
     | 
    
         
            +
            		return [ text1A, text1B, text2A, text2B, midCommon ];
         
     | 
| 
      
 3659 
     | 
    
         
            +
            	};
         
     | 
| 
      
 3660 
     | 
    
         
            +
             
     | 
| 
      
 3661 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 3662 
     | 
    
         
            +
            	 * Do a quick line-level diff on both strings, then rediff the parts for
         
     | 
| 
      
 3663 
     | 
    
         
            +
            	 * greater accuracy.
         
     | 
| 
      
 3664 
     | 
    
         
            +
            	 * This speedup can produce non-minimal diffs.
         
     | 
| 
      
 3665 
     | 
    
         
            +
            	 * @param {string} text1 Old string to be diffed.
         
     | 
| 
      
 3666 
     | 
    
         
            +
            	 * @param {string} text2 New string to be diffed.
         
     | 
| 
      
 3667 
     | 
    
         
            +
            	 * @param {number} deadline Time when the diff should be complete by.
         
     | 
| 
      
 3668 
     | 
    
         
            +
            	 * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
         
     | 
| 
      
 3669 
     | 
    
         
            +
            	 * @private
         
     | 
| 
      
 3670 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 3671 
     | 
    
         
            +
            	DiffMatchPatch.prototype.diffLineMode = function( text1, text2, deadline ) {
         
     | 
| 
      
 3672 
     | 
    
         
            +
            		var a, diffs, linearray, pointer, countInsert,
         
     | 
| 
      
 3673 
     | 
    
         
            +
            			countDelete, textInsert, textDelete, j;
         
     | 
| 
      
 3674 
     | 
    
         
            +
             
     | 
| 
      
 3675 
     | 
    
         
            +
            		// Scan the text on a line-by-line basis first.
         
     | 
| 
      
 3676 
     | 
    
         
            +
            		a = this.diffLinesToChars( text1, text2 );
         
     | 
| 
      
 3677 
     | 
    
         
            +
            		text1 = a.chars1;
         
     | 
| 
      
 3678 
     | 
    
         
            +
            		text2 = a.chars2;
         
     | 
| 
      
 3679 
     | 
    
         
            +
            		linearray = a.lineArray;
         
     | 
| 
      
 3680 
     | 
    
         
            +
             
     | 
| 
      
 3681 
     | 
    
         
            +
            		diffs = this.DiffMain( text1, text2, false, deadline );
         
     | 
| 
      
 3682 
     | 
    
         
            +
             
     | 
| 
      
 3683 
     | 
    
         
            +
            		// Convert the diff back to original text.
         
     | 
| 
      
 3684 
     | 
    
         
            +
            		this.diffCharsToLines( diffs, linearray );
         
     | 
| 
      
 3685 
     | 
    
         
            +
             
     | 
| 
      
 3686 
     | 
    
         
            +
            		// Eliminate freak matches (e.g. blank lines)
         
     | 
| 
      
 3687 
     | 
    
         
            +
            		this.diffCleanupSemantic( diffs );
         
     | 
| 
      
 3688 
     | 
    
         
            +
             
     | 
| 
      
 3689 
     | 
    
         
            +
            		// Rediff any replacement blocks, this time character-by-character.
         
     | 
| 
      
 3690 
     | 
    
         
            +
            		// Add a dummy entry at the end.
         
     | 
| 
      
 3691 
     | 
    
         
            +
            		diffs.push( [ DIFF_EQUAL, "" ] );
         
     | 
| 
      
 3692 
     | 
    
         
            +
            		pointer = 0;
         
     | 
| 
      
 3693 
     | 
    
         
            +
            		countDelete = 0;
         
     | 
| 
      
 3694 
     | 
    
         
            +
            		countInsert = 0;
         
     | 
| 
      
 3695 
     | 
    
         
            +
            		textDelete = "";
         
     | 
| 
      
 3696 
     | 
    
         
            +
            		textInsert = "";
         
     | 
| 
      
 3697 
     | 
    
         
            +
            		while ( pointer < diffs.length ) {
         
     | 
| 
      
 3698 
     | 
    
         
            +
            			switch ( diffs[ pointer ][ 0 ] ) {
         
     | 
| 
      
 3699 
     | 
    
         
            +
            			case DIFF_INSERT:
         
     | 
| 
      
 3700 
     | 
    
         
            +
            				countInsert++;
         
     | 
| 
      
 3701 
     | 
    
         
            +
            				textInsert += diffs[ pointer ][ 1 ];
         
     | 
| 
      
 3702 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 3703 
     | 
    
         
            +
            			case DIFF_DELETE:
         
     | 
| 
      
 3704 
     | 
    
         
            +
            				countDelete++;
         
     | 
| 
      
 3705 
     | 
    
         
            +
            				textDelete += diffs[ pointer ][ 1 ];
         
     | 
| 
      
 3706 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 3707 
     | 
    
         
            +
            			case DIFF_EQUAL:
         
     | 
| 
      
 3708 
     | 
    
         
            +
             
     | 
| 
      
 3709 
     | 
    
         
            +
            				// Upon reaching an equality, check for prior redundancies.
         
     | 
| 
      
 3710 
     | 
    
         
            +
            				if ( countDelete >= 1 && countInsert >= 1 ) {
         
     | 
| 
      
 3711 
     | 
    
         
            +
             
     | 
| 
      
 3712 
     | 
    
         
            +
            					// Delete the offending records and add the merged ones.
         
     | 
| 
      
 3713 
     | 
    
         
            +
            					diffs.splice( pointer - countDelete - countInsert,
         
     | 
| 
      
 3714 
     | 
    
         
            +
            						countDelete + countInsert );
         
     | 
| 
      
 3715 
     | 
    
         
            +
            					pointer = pointer - countDelete - countInsert;
         
     | 
| 
      
 3716 
     | 
    
         
            +
            					a = this.DiffMain( textDelete, textInsert, false, deadline );
         
     | 
| 
      
 3717 
     | 
    
         
            +
            					for ( j = a.length - 1; j >= 0; j-- ) {
         
     | 
| 
      
 3718 
     | 
    
         
            +
            						diffs.splice( pointer, 0, a[ j ] );
         
     | 
| 
      
 3719 
     | 
    
         
            +
            					}
         
     | 
| 
      
 3720 
     | 
    
         
            +
            					pointer = pointer + a.length;
         
     | 
| 
      
 3721 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3722 
     | 
    
         
            +
            				countInsert = 0;
         
     | 
| 
      
 3723 
     | 
    
         
            +
            				countDelete = 0;
         
     | 
| 
      
 3724 
     | 
    
         
            +
            				textDelete = "";
         
     | 
| 
      
 3725 
     | 
    
         
            +
            				textInsert = "";
         
     | 
| 
      
 3726 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 3727 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3728 
     | 
    
         
            +
            			pointer++;
         
     | 
| 
      
 3729 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3730 
     | 
    
         
            +
            		diffs.pop(); // Remove the dummy entry at the end.
         
     | 
| 
      
 3731 
     | 
    
         
            +
             
     | 
| 
      
 3732 
     | 
    
         
            +
            		return diffs;
         
     | 
| 
      
 3733 
     | 
    
         
            +
            	};
         
     | 
| 
      
 3734 
     | 
    
         
            +
             
     | 
| 
      
 3735 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 3736 
     | 
    
         
            +
            	 * Find the 'middle snake' of a diff, split the problem in two
         
     | 
| 
      
 3737 
     | 
    
         
            +
            	 * and return the recursively constructed diff.
         
     | 
| 
      
 3738 
     | 
    
         
            +
            	 * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.
         
     | 
| 
      
 3739 
     | 
    
         
            +
            	 * @param {string} text1 Old string to be diffed.
         
     | 
| 
      
 3740 
     | 
    
         
            +
            	 * @param {string} text2 New string to be diffed.
         
     | 
| 
      
 3741 
     | 
    
         
            +
            	 * @param {number} deadline Time at which to bail if not yet complete.
         
     | 
| 
      
 3742 
     | 
    
         
            +
            	 * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
         
     | 
| 
      
 3743 
     | 
    
         
            +
            	 * @private
         
     | 
| 
      
 3744 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 3745 
     | 
    
         
            +
            	DiffMatchPatch.prototype.diffBisect = function( text1, text2, deadline ) {
         
     | 
| 
      
 3746 
     | 
    
         
            +
            		var text1Length, text2Length, maxD, vOffset, vLength,
         
     | 
| 
      
 3747 
     | 
    
         
            +
            			v1, v2, x, delta, front, k1start, k1end, k2start,
         
     | 
| 
      
 3748 
     | 
    
         
            +
            			k2end, k2Offset, k1Offset, x1, x2, y1, y2, d, k1, k2;
         
     | 
| 
      
 3749 
     | 
    
         
            +
             
     | 
| 
      
 3750 
     | 
    
         
            +
            		// Cache the text lengths to prevent multiple calls.
         
     | 
| 
      
 3751 
     | 
    
         
            +
            		text1Length = text1.length;
         
     | 
| 
      
 3752 
     | 
    
         
            +
            		text2Length = text2.length;
         
     | 
| 
      
 3753 
     | 
    
         
            +
            		maxD = Math.ceil( ( text1Length + text2Length ) / 2 );
         
     | 
| 
      
 3754 
     | 
    
         
            +
            		vOffset = maxD;
         
     | 
| 
      
 3755 
     | 
    
         
            +
            		vLength = 2 * maxD;
         
     | 
| 
      
 3756 
     | 
    
         
            +
            		v1 = new Array( vLength );
         
     | 
| 
      
 3757 
     | 
    
         
            +
            		v2 = new Array( vLength );
         
     | 
| 
      
 3758 
     | 
    
         
            +
             
     | 
| 
      
 3759 
     | 
    
         
            +
            		// Setting all elements to -1 is faster in Chrome & Firefox than mixing
         
     | 
| 
      
 3760 
     | 
    
         
            +
            		// integers and undefined.
         
     | 
| 
      
 3761 
     | 
    
         
            +
            		for ( x = 0; x < vLength; x++ ) {
         
     | 
| 
      
 3762 
     | 
    
         
            +
            			v1[ x ] = -1;
         
     | 
| 
      
 3763 
     | 
    
         
            +
            			v2[ x ] = -1;
         
     | 
| 
      
 3764 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3765 
     | 
    
         
            +
            		v1[ vOffset + 1 ] = 0;
         
     | 
| 
      
 3766 
     | 
    
         
            +
            		v2[ vOffset + 1 ] = 0;
         
     | 
| 
      
 3767 
     | 
    
         
            +
            		delta = text1Length - text2Length;
         
     | 
| 
      
 3768 
     | 
    
         
            +
             
     | 
| 
      
 3769 
     | 
    
         
            +
            		// If the total number of characters is odd, then the front path will collide
         
     | 
| 
      
 3770 
     | 
    
         
            +
            		// with the reverse path.
         
     | 
| 
      
 3771 
     | 
    
         
            +
            		front = ( delta % 2 !== 0 );
         
     | 
| 
      
 3772 
     | 
    
         
            +
             
     | 
| 
      
 3773 
     | 
    
         
            +
            		// Offsets for start and end of k loop.
         
     | 
| 
      
 3774 
     | 
    
         
            +
            		// Prevents mapping of space beyond the grid.
         
     | 
| 
      
 3775 
     | 
    
         
            +
            		k1start = 0;
         
     | 
| 
      
 3776 
     | 
    
         
            +
            		k1end = 0;
         
     | 
| 
      
 3777 
     | 
    
         
            +
            		k2start = 0;
         
     | 
| 
      
 3778 
     | 
    
         
            +
            		k2end = 0;
         
     | 
| 
      
 3779 
     | 
    
         
            +
            		for ( d = 0; d < maxD; d++ ) {
         
     | 
| 
      
 3780 
     | 
    
         
            +
             
     | 
| 
      
 3781 
     | 
    
         
            +
            			// Bail out if deadline is reached.
         
     | 
| 
      
 3782 
     | 
    
         
            +
            			if ( ( new Date() ).getTime() > deadline ) {
         
     | 
| 
      
 3783 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 3784 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3785 
     | 
    
         
            +
             
     | 
| 
      
 3786 
     | 
    
         
            +
            			// Walk the front path one step.
         
     | 
| 
      
 3787 
     | 
    
         
            +
            			for ( k1 = -d + k1start; k1 <= d - k1end; k1 += 2 ) {
         
     | 
| 
      
 3788 
     | 
    
         
            +
            				k1Offset = vOffset + k1;
         
     | 
| 
      
 3789 
     | 
    
         
            +
            				if ( k1 === -d || ( k1 !== d && v1[ k1Offset - 1 ] < v1[ k1Offset + 1 ] ) ) {
         
     | 
| 
      
 3790 
     | 
    
         
            +
            					x1 = v1[ k1Offset + 1 ];
         
     | 
| 
      
 3791 
     | 
    
         
            +
            				} else {
         
     | 
| 
      
 3792 
     | 
    
         
            +
            					x1 = v1[ k1Offset - 1 ] + 1;
         
     | 
| 
      
 3793 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3794 
     | 
    
         
            +
            				y1 = x1 - k1;
         
     | 
| 
      
 3795 
     | 
    
         
            +
            				while ( x1 < text1Length && y1 < text2Length &&
         
     | 
| 
      
 3796 
     | 
    
         
            +
            					text1.charAt( x1 ) === text2.charAt( y1 ) ) {
         
     | 
| 
      
 3797 
     | 
    
         
            +
            					x1++;
         
     | 
| 
      
 3798 
     | 
    
         
            +
            					y1++;
         
     | 
| 
      
 3799 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3800 
     | 
    
         
            +
            				v1[ k1Offset ] = x1;
         
     | 
| 
      
 3801 
     | 
    
         
            +
            				if ( x1 > text1Length ) {
         
     | 
| 
      
 3802 
     | 
    
         
            +
             
     | 
| 
      
 3803 
     | 
    
         
            +
            					// Ran off the right of the graph.
         
     | 
| 
      
 3804 
     | 
    
         
            +
            					k1end += 2;
         
     | 
| 
      
 3805 
     | 
    
         
            +
            				} else if ( y1 > text2Length ) {
         
     | 
| 
      
 3806 
     | 
    
         
            +
             
     | 
| 
      
 3807 
     | 
    
         
            +
            					// Ran off the bottom of the graph.
         
     | 
| 
      
 3808 
     | 
    
         
            +
            					k1start += 2;
         
     | 
| 
      
 3809 
     | 
    
         
            +
            				} else if ( front ) {
         
     | 
| 
      
 3810 
     | 
    
         
            +
            					k2Offset = vOffset + delta - k1;
         
     | 
| 
      
 3811 
     | 
    
         
            +
            					if ( k2Offset >= 0 && k2Offset < vLength && v2[ k2Offset ] !== -1 ) {
         
     | 
| 
      
 3812 
     | 
    
         
            +
             
     | 
| 
      
 3813 
     | 
    
         
            +
            						// Mirror x2 onto top-left coordinate system.
         
     | 
| 
      
 3814 
     | 
    
         
            +
            						x2 = text1Length - v2[ k2Offset ];
         
     | 
| 
      
 3815 
     | 
    
         
            +
            						if ( x1 >= x2 ) {
         
     | 
| 
      
 3816 
     | 
    
         
            +
             
     | 
| 
      
 3817 
     | 
    
         
            +
            							// Overlap detected.
         
     | 
| 
      
 3818 
     | 
    
         
            +
            							return this.diffBisectSplit( text1, text2, x1, y1, deadline );
         
     | 
| 
      
 3819 
     | 
    
         
            +
            						}
         
     | 
| 
      
 3820 
     | 
    
         
            +
            					}
         
     | 
| 
      
 3821 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3822 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3823 
     | 
    
         
            +
             
     | 
| 
      
 3824 
     | 
    
         
            +
            			// Walk the reverse path one step.
         
     | 
| 
      
 3825 
     | 
    
         
            +
            			for ( k2 = -d + k2start; k2 <= d - k2end; k2 += 2 ) {
         
     | 
| 
      
 3826 
     | 
    
         
            +
            				k2Offset = vOffset + k2;
         
     | 
| 
      
 3827 
     | 
    
         
            +
            				if ( k2 === -d || ( k2 !== d && v2[ k2Offset - 1 ] < v2[ k2Offset + 1 ] ) ) {
         
     | 
| 
      
 3828 
     | 
    
         
            +
            					x2 = v2[ k2Offset + 1 ];
         
     | 
| 
      
 3829 
     | 
    
         
            +
            				} else {
         
     | 
| 
      
 3830 
     | 
    
         
            +
            					x2 = v2[ k2Offset - 1 ] + 1;
         
     | 
| 
      
 3831 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3832 
     | 
    
         
            +
            				y2 = x2 - k2;
         
     | 
| 
      
 3833 
     | 
    
         
            +
            				while ( x2 < text1Length && y2 < text2Length &&
         
     | 
| 
      
 3834 
     | 
    
         
            +
            					text1.charAt( text1Length - x2 - 1 ) ===
         
     | 
| 
      
 3835 
     | 
    
         
            +
            					text2.charAt( text2Length - y2 - 1 ) ) {
         
     | 
| 
      
 3836 
     | 
    
         
            +
            					x2++;
         
     | 
| 
      
 3837 
     | 
    
         
            +
            					y2++;
         
     | 
| 
      
 3838 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3839 
     | 
    
         
            +
            				v2[ k2Offset ] = x2;
         
     | 
| 
      
 3840 
     | 
    
         
            +
            				if ( x2 > text1Length ) {
         
     | 
| 
      
 3841 
     | 
    
         
            +
             
     | 
| 
      
 3842 
     | 
    
         
            +
            					// Ran off the left of the graph.
         
     | 
| 
      
 3843 
     | 
    
         
            +
            					k2end += 2;
         
     | 
| 
      
 3844 
     | 
    
         
            +
            				} else if ( y2 > text2Length ) {
         
     | 
| 
      
 3845 
     | 
    
         
            +
             
     | 
| 
      
 3846 
     | 
    
         
            +
            					// Ran off the top of the graph.
         
     | 
| 
      
 3847 
     | 
    
         
            +
            					k2start += 2;
         
     | 
| 
      
 3848 
     | 
    
         
            +
            				} else if ( !front ) {
         
     | 
| 
      
 3849 
     | 
    
         
            +
            					k1Offset = vOffset + delta - k2;
         
     | 
| 
      
 3850 
     | 
    
         
            +
            					if ( k1Offset >= 0 && k1Offset < vLength && v1[ k1Offset ] !== -1 ) {
         
     | 
| 
      
 3851 
     | 
    
         
            +
            						x1 = v1[ k1Offset ];
         
     | 
| 
      
 3852 
     | 
    
         
            +
            						y1 = vOffset + x1 - k1Offset;
         
     | 
| 
      
 3853 
     | 
    
         
            +
             
     | 
| 
      
 3854 
     | 
    
         
            +
            						// Mirror x2 onto top-left coordinate system.
         
     | 
| 
      
 3855 
     | 
    
         
            +
            						x2 = text1Length - x2;
         
     | 
| 
      
 3856 
     | 
    
         
            +
            						if ( x1 >= x2 ) {
         
     | 
| 
      
 3857 
     | 
    
         
            +
             
     | 
| 
      
 3858 
     | 
    
         
            +
            							// Overlap detected.
         
     | 
| 
      
 3859 
     | 
    
         
            +
            							return this.diffBisectSplit( text1, text2, x1, y1, deadline );
         
     | 
| 
      
 3860 
     | 
    
         
            +
            						}
         
     | 
| 
      
 3861 
     | 
    
         
            +
            					}
         
     | 
| 
      
 3862 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3863 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3864 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3865 
     | 
    
         
            +
             
     | 
| 
      
 3866 
     | 
    
         
            +
            		// Diff took too long and hit the deadline or
         
     | 
| 
      
 3867 
     | 
    
         
            +
            		// number of diffs equals number of characters, no commonality at all.
         
     | 
| 
      
 3868 
     | 
    
         
            +
            		return [
         
     | 
| 
      
 3869 
     | 
    
         
            +
            			[ DIFF_DELETE, text1 ],
         
     | 
| 
      
 3870 
     | 
    
         
            +
            			[ DIFF_INSERT, text2 ]
         
     | 
| 
      
 3871 
     | 
    
         
            +
            		];
         
     | 
| 
      
 3872 
     | 
    
         
            +
            	};
         
     | 
| 
      
 3873 
     | 
    
         
            +
             
     | 
| 
      
 3874 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 3875 
     | 
    
         
            +
            	 * Given the location of the 'middle snake', split the diff in two parts
         
     | 
| 
      
 3876 
     | 
    
         
            +
            	 * and recurse.
         
     | 
| 
      
 3877 
     | 
    
         
            +
            	 * @param {string} text1 Old string to be diffed.
         
     | 
| 
      
 3878 
     | 
    
         
            +
            	 * @param {string} text2 New string to be diffed.
         
     | 
| 
      
 3879 
     | 
    
         
            +
            	 * @param {number} x Index of split point in text1.
         
     | 
| 
      
 3880 
     | 
    
         
            +
            	 * @param {number} y Index of split point in text2.
         
     | 
| 
      
 3881 
     | 
    
         
            +
            	 * @param {number} deadline Time at which to bail if not yet complete.
         
     | 
| 
      
 3882 
     | 
    
         
            +
            	 * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
         
     | 
| 
      
 3883 
     | 
    
         
            +
            	 * @private
         
     | 
| 
      
 3884 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 3885 
     | 
    
         
            +
            	DiffMatchPatch.prototype.diffBisectSplit = function( text1, text2, x, y, deadline ) {
         
     | 
| 
      
 3886 
     | 
    
         
            +
            		var text1a, text1b, text2a, text2b, diffs, diffsb;
         
     | 
| 
      
 3887 
     | 
    
         
            +
            		text1a = text1.substring( 0, x );
         
     | 
| 
      
 3888 
     | 
    
         
            +
            		text2a = text2.substring( 0, y );
         
     | 
| 
      
 3889 
     | 
    
         
            +
            		text1b = text1.substring( x );
         
     | 
| 
      
 3890 
     | 
    
         
            +
            		text2b = text2.substring( y );
         
     | 
| 
      
 3891 
     | 
    
         
            +
             
     | 
| 
      
 3892 
     | 
    
         
            +
            		// Compute both diffs serially.
         
     | 
| 
      
 3893 
     | 
    
         
            +
            		diffs = this.DiffMain( text1a, text2a, false, deadline );
         
     | 
| 
      
 3894 
     | 
    
         
            +
            		diffsb = this.DiffMain( text1b, text2b, false, deadline );
         
     | 
| 
      
 3895 
     | 
    
         
            +
             
     | 
| 
      
 3896 
     | 
    
         
            +
            		return diffs.concat( diffsb );
         
     | 
| 
      
 3897 
     | 
    
         
            +
            	};
         
     | 
| 
      
 3898 
     | 
    
         
            +
             
     | 
| 
      
 3899 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 3900 
     | 
    
         
            +
            	 * Reduce the number of edits by eliminating semantically trivial equalities.
         
     | 
| 
      
 3901 
     | 
    
         
            +
            	 * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
         
     | 
| 
      
 3902 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 3903 
     | 
    
         
            +
            	DiffMatchPatch.prototype.diffCleanupSemantic = function( diffs ) {
         
     | 
| 
      
 3904 
     | 
    
         
            +
            		var changes, equalities, equalitiesLength, lastequality,
         
     | 
| 
      
 3905 
     | 
    
         
            +
            			pointer, lengthInsertions2, lengthDeletions2, lengthInsertions1,
         
     | 
| 
      
 3906 
     | 
    
         
            +
            			lengthDeletions1, deletion, insertion, overlapLength1, overlapLength2;
         
     | 
| 
      
 3907 
     | 
    
         
            +
            		changes = false;
         
     | 
| 
      
 3908 
     | 
    
         
            +
            		equalities = []; // Stack of indices where equalities are found.
         
     | 
| 
      
 3909 
     | 
    
         
            +
            		equalitiesLength = 0; // Keeping our own length var is faster in JS.
         
     | 
| 
      
 3910 
     | 
    
         
            +
            		/** @type {?string} */
         
     | 
| 
      
 3911 
     | 
    
         
            +
            		lastequality = null;
         
     | 
| 
      
 3912 
     | 
    
         
            +
             
     | 
| 
      
 3913 
     | 
    
         
            +
            		// Always equal to diffs[equalities[equalitiesLength - 1]][1]
         
     | 
| 
      
 3914 
     | 
    
         
            +
            		pointer = 0; // Index of current position.
         
     | 
| 
      
 3915 
     | 
    
         
            +
             
     | 
| 
      
 3916 
     | 
    
         
            +
            		// Number of characters that changed prior to the equality.
         
     | 
| 
      
 3917 
     | 
    
         
            +
            		lengthInsertions1 = 0;
         
     | 
| 
      
 3918 
     | 
    
         
            +
            		lengthDeletions1 = 0;
         
     | 
| 
      
 3919 
     | 
    
         
            +
             
     | 
| 
      
 3920 
     | 
    
         
            +
            		// Number of characters that changed after the equality.
         
     | 
| 
      
 3921 
     | 
    
         
            +
            		lengthInsertions2 = 0;
         
     | 
| 
      
 3922 
     | 
    
         
            +
            		lengthDeletions2 = 0;
         
     | 
| 
      
 3923 
     | 
    
         
            +
            		while ( pointer < diffs.length ) {
         
     | 
| 
      
 3924 
     | 
    
         
            +
            			if ( diffs[ pointer ][ 0 ] === DIFF_EQUAL ) { // Equality found.
         
     | 
| 
      
 3925 
     | 
    
         
            +
            				equalities[ equalitiesLength++ ] = pointer;
         
     | 
| 
      
 3926 
     | 
    
         
            +
            				lengthInsertions1 = lengthInsertions2;
         
     | 
| 
      
 3927 
     | 
    
         
            +
            				lengthDeletions1 = lengthDeletions2;
         
     | 
| 
      
 3928 
     | 
    
         
            +
            				lengthInsertions2 = 0;
         
     | 
| 
      
 3929 
     | 
    
         
            +
            				lengthDeletions2 = 0;
         
     | 
| 
      
 3930 
     | 
    
         
            +
            				lastequality = diffs[ pointer ][ 1 ];
         
     | 
| 
      
 3931 
     | 
    
         
            +
            			} else { // An insertion or deletion.
         
     | 
| 
      
 3932 
     | 
    
         
            +
            				if ( diffs[ pointer ][ 0 ] === DIFF_INSERT ) {
         
     | 
| 
      
 3933 
     | 
    
         
            +
            					lengthInsertions2 += diffs[ pointer ][ 1 ].length;
         
     | 
| 
      
 3934 
     | 
    
         
            +
            				} else {
         
     | 
| 
      
 3935 
     | 
    
         
            +
            					lengthDeletions2 += diffs[ pointer ][ 1 ].length;
         
     | 
| 
      
 3936 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3937 
     | 
    
         
            +
             
     | 
| 
      
 3938 
     | 
    
         
            +
            				// Eliminate an equality that is smaller or equal to the edits on both
         
     | 
| 
      
 3939 
     | 
    
         
            +
            				// sides of it.
         
     | 
| 
      
 3940 
     | 
    
         
            +
            				if ( lastequality && ( lastequality.length <=
         
     | 
| 
      
 3941 
     | 
    
         
            +
            						Math.max( lengthInsertions1, lengthDeletions1 ) ) &&
         
     | 
| 
      
 3942 
     | 
    
         
            +
            						( lastequality.length <= Math.max( lengthInsertions2,
         
     | 
| 
      
 3943 
     | 
    
         
            +
            							lengthDeletions2 ) ) ) {
         
     | 
| 
      
 3944 
     | 
    
         
            +
             
     | 
| 
      
 3945 
     | 
    
         
            +
            					// Duplicate record.
         
     | 
| 
      
 3946 
     | 
    
         
            +
            					diffs.splice(
         
     | 
| 
      
 3947 
     | 
    
         
            +
            						equalities[ equalitiesLength - 1 ],
         
     | 
| 
      
 3948 
     | 
    
         
            +
            						0,
         
     | 
| 
      
 3949 
     | 
    
         
            +
            						[ DIFF_DELETE, lastequality ]
         
     | 
| 
      
 3950 
     | 
    
         
            +
            					);
         
     | 
| 
      
 3951 
     | 
    
         
            +
             
     | 
| 
      
 3952 
     | 
    
         
            +
            					// Change second copy to insert.
         
     | 
| 
      
 3953 
     | 
    
         
            +
            					diffs[ equalities[ equalitiesLength - 1 ] + 1 ][ 0 ] = DIFF_INSERT;
         
     | 
| 
      
 3954 
     | 
    
         
            +
             
     | 
| 
      
 3955 
     | 
    
         
            +
            					// Throw away the equality we just deleted.
         
     | 
| 
      
 3956 
     | 
    
         
            +
            					equalitiesLength--;
         
     | 
| 
      
 3957 
     | 
    
         
            +
             
     | 
| 
      
 3958 
     | 
    
         
            +
            					// Throw away the previous equality (it needs to be reevaluated).
         
     | 
| 
      
 3959 
     | 
    
         
            +
            					equalitiesLength--;
         
     | 
| 
      
 3960 
     | 
    
         
            +
            					pointer = equalitiesLength > 0 ? equalities[ equalitiesLength - 1 ] : -1;
         
     | 
| 
      
 3961 
     | 
    
         
            +
             
     | 
| 
      
 3962 
     | 
    
         
            +
            					// Reset the counters.
         
     | 
| 
      
 3963 
     | 
    
         
            +
            					lengthInsertions1 = 0;
         
     | 
| 
      
 3964 
     | 
    
         
            +
            					lengthDeletions1 = 0;
         
     | 
| 
      
 3965 
     | 
    
         
            +
            					lengthInsertions2 = 0;
         
     | 
| 
      
 3966 
     | 
    
         
            +
            					lengthDeletions2 = 0;
         
     | 
| 
      
 3967 
     | 
    
         
            +
            					lastequality = null;
         
     | 
| 
      
 3968 
     | 
    
         
            +
            					changes = true;
         
     | 
| 
      
 3969 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3970 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3971 
     | 
    
         
            +
            			pointer++;
         
     | 
| 
      
 3972 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3973 
     | 
    
         
            +
             
     | 
| 
      
 3974 
     | 
    
         
            +
            		// Normalize the diff.
         
     | 
| 
      
 3975 
     | 
    
         
            +
            		if ( changes ) {
         
     | 
| 
      
 3976 
     | 
    
         
            +
            			this.diffCleanupMerge( diffs );
         
     | 
| 
      
 3977 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3978 
     | 
    
         
            +
             
     | 
| 
      
 3979 
     | 
    
         
            +
            		// Find any overlaps between deletions and insertions.
         
     | 
| 
      
 3980 
     | 
    
         
            +
            		// e.g: <del>abcxxx</del><ins>xxxdef</ins>
         
     | 
| 
      
 3981 
     | 
    
         
            +
            		//   -> <del>abc</del>xxx<ins>def</ins>
         
     | 
| 
      
 3982 
     | 
    
         
            +
            		// e.g: <del>xxxabc</del><ins>defxxx</ins>
         
     | 
| 
      
 3983 
     | 
    
         
            +
            		//   -> <ins>def</ins>xxx<del>abc</del>
         
     | 
| 
      
 3984 
     | 
    
         
            +
            		// Only extract an overlap if it is as big as the edit ahead or behind it.
         
     | 
| 
      
 3985 
     | 
    
         
            +
            		pointer = 1;
         
     | 
| 
      
 3986 
     | 
    
         
            +
            		while ( pointer < diffs.length ) {
         
     | 
| 
      
 3987 
     | 
    
         
            +
            			if ( diffs[ pointer - 1 ][ 0 ] === DIFF_DELETE &&
         
     | 
| 
      
 3988 
     | 
    
         
            +
            					diffs[ pointer ][ 0 ] === DIFF_INSERT ) {
         
     | 
| 
      
 3989 
     | 
    
         
            +
            				deletion = diffs[ pointer - 1 ][ 1 ];
         
     | 
| 
      
 3990 
     | 
    
         
            +
            				insertion = diffs[ pointer ][ 1 ];
         
     | 
| 
      
 3991 
     | 
    
         
            +
            				overlapLength1 = this.diffCommonOverlap( deletion, insertion );
         
     | 
| 
      
 3992 
     | 
    
         
            +
            				overlapLength2 = this.diffCommonOverlap( insertion, deletion );
         
     | 
| 
      
 3993 
     | 
    
         
            +
            				if ( overlapLength1 >= overlapLength2 ) {
         
     | 
| 
      
 3994 
     | 
    
         
            +
            					if ( overlapLength1 >= deletion.length / 2 ||
         
     | 
| 
      
 3995 
     | 
    
         
            +
            							overlapLength1 >= insertion.length / 2 ) {
         
     | 
| 
      
 3996 
     | 
    
         
            +
             
     | 
| 
      
 3997 
     | 
    
         
            +
            						// Overlap found.  Insert an equality and trim the surrounding edits.
         
     | 
| 
      
 3998 
     | 
    
         
            +
            						diffs.splice(
         
     | 
| 
      
 3999 
     | 
    
         
            +
            							pointer,
         
     | 
| 
      
 4000 
     | 
    
         
            +
            							0,
         
     | 
| 
      
 4001 
     | 
    
         
            +
            							[ DIFF_EQUAL, insertion.substring( 0, overlapLength1 ) ]
         
     | 
| 
      
 4002 
     | 
    
         
            +
            						);
         
     | 
| 
      
 4003 
     | 
    
         
            +
            						diffs[ pointer - 1 ][ 1 ] =
         
     | 
| 
      
 4004 
     | 
    
         
            +
            							deletion.substring( 0, deletion.length - overlapLength1 );
         
     | 
| 
      
 4005 
     | 
    
         
            +
            						diffs[ pointer + 1 ][ 1 ] = insertion.substring( overlapLength1 );
         
     | 
| 
      
 4006 
     | 
    
         
            +
            						pointer++;
         
     | 
| 
      
 4007 
     | 
    
         
            +
            					}
         
     | 
| 
      
 4008 
     | 
    
         
            +
            				} else {
         
     | 
| 
      
 4009 
     | 
    
         
            +
            					if ( overlapLength2 >= deletion.length / 2 ||
         
     | 
| 
      
 4010 
     | 
    
         
            +
            							overlapLength2 >= insertion.length / 2 ) {
         
     | 
| 
      
 4011 
     | 
    
         
            +
             
     | 
| 
      
 4012 
     | 
    
         
            +
            						// Reverse overlap found.
         
     | 
| 
      
 4013 
     | 
    
         
            +
            						// Insert an equality and swap and trim the surrounding edits.
         
     | 
| 
      
 4014 
     | 
    
         
            +
            						diffs.splice(
         
     | 
| 
      
 4015 
     | 
    
         
            +
            							pointer,
         
     | 
| 
      
 4016 
     | 
    
         
            +
            							0,
         
     | 
| 
      
 4017 
     | 
    
         
            +
            							[ DIFF_EQUAL, deletion.substring( 0, overlapLength2 ) ]
         
     | 
| 
      
 4018 
     | 
    
         
            +
            						);
         
     | 
| 
      
 4019 
     | 
    
         
            +
             
     | 
| 
      
 4020 
     | 
    
         
            +
            						diffs[ pointer - 1 ][ 0 ] = DIFF_INSERT;
         
     | 
| 
      
 4021 
     | 
    
         
            +
            						diffs[ pointer - 1 ][ 1 ] =
         
     | 
| 
      
 4022 
     | 
    
         
            +
            							insertion.substring( 0, insertion.length - overlapLength2 );
         
     | 
| 
      
 4023 
     | 
    
         
            +
            						diffs[ pointer + 1 ][ 0 ] = DIFF_DELETE;
         
     | 
| 
      
 4024 
     | 
    
         
            +
            						diffs[ pointer + 1 ][ 1 ] =
         
     | 
| 
      
 4025 
     | 
    
         
            +
            							deletion.substring( overlapLength2 );
         
     | 
| 
      
 4026 
     | 
    
         
            +
            						pointer++;
         
     | 
| 
      
 4027 
     | 
    
         
            +
            					}
         
     | 
| 
      
 4028 
     | 
    
         
            +
            				}
         
     | 
| 
      
 4029 
     | 
    
         
            +
            				pointer++;
         
     | 
| 
      
 4030 
     | 
    
         
            +
            			}
         
     | 
| 
      
 4031 
     | 
    
         
            +
            			pointer++;
         
     | 
| 
      
 4032 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4033 
     | 
    
         
            +
            	};
         
     | 
| 
      
 4034 
     | 
    
         
            +
             
     | 
| 
      
 4035 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 4036 
     | 
    
         
            +
            	 * Determine if the suffix of one string is the prefix of another.
         
     | 
| 
      
 4037 
     | 
    
         
            +
            	 * @param {string} text1 First string.
         
     | 
| 
      
 4038 
     | 
    
         
            +
            	 * @param {string} text2 Second string.
         
     | 
| 
      
 4039 
     | 
    
         
            +
            	 * @return {number} The number of characters common to the end of the first
         
     | 
| 
      
 4040 
     | 
    
         
            +
            	 *     string and the start of the second string.
         
     | 
| 
      
 4041 
     | 
    
         
            +
            	 * @private
         
     | 
| 
      
 4042 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 4043 
     | 
    
         
            +
            	DiffMatchPatch.prototype.diffCommonOverlap = function( text1, text2 ) {
         
     | 
| 
      
 4044 
     | 
    
         
            +
            		var text1Length, text2Length, textLength,
         
     | 
| 
      
 4045 
     | 
    
         
            +
            			best, length, pattern, found;
         
     | 
| 
      
 4046 
     | 
    
         
            +
             
     | 
| 
      
 4047 
     | 
    
         
            +
            		// Cache the text lengths to prevent multiple calls.
         
     | 
| 
      
 4048 
     | 
    
         
            +
            		text1Length = text1.length;
         
     | 
| 
      
 4049 
     | 
    
         
            +
            		text2Length = text2.length;
         
     | 
| 
      
 4050 
     | 
    
         
            +
             
     | 
| 
      
 4051 
     | 
    
         
            +
            		// Eliminate the null case.
         
     | 
| 
      
 4052 
     | 
    
         
            +
            		if ( text1Length === 0 || text2Length === 0 ) {
         
     | 
| 
      
 4053 
     | 
    
         
            +
            			return 0;
         
     | 
| 
      
 4054 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4055 
     | 
    
         
            +
             
     | 
| 
      
 4056 
     | 
    
         
            +
            		// Truncate the longer string.
         
     | 
| 
      
 4057 
     | 
    
         
            +
            		if ( text1Length > text2Length ) {
         
     | 
| 
      
 4058 
     | 
    
         
            +
            			text1 = text1.substring( text1Length - text2Length );
         
     | 
| 
      
 4059 
     | 
    
         
            +
            		} else if ( text1Length < text2Length ) {
         
     | 
| 
      
 4060 
     | 
    
         
            +
            			text2 = text2.substring( 0, text1Length );
         
     | 
| 
      
 4061 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4062 
     | 
    
         
            +
            		textLength = Math.min( text1Length, text2Length );
         
     | 
| 
      
 4063 
     | 
    
         
            +
             
     | 
| 
      
 4064 
     | 
    
         
            +
            		// Quick check for the worst case.
         
     | 
| 
      
 4065 
     | 
    
         
            +
            		if ( text1 === text2 ) {
         
     | 
| 
      
 4066 
     | 
    
         
            +
            			return textLength;
         
     | 
| 
      
 4067 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4068 
     | 
    
         
            +
             
     | 
| 
      
 4069 
     | 
    
         
            +
            		// Start by looking for a single character match
         
     | 
| 
      
 4070 
     | 
    
         
            +
            		// and increase length until no match is found.
         
     | 
| 
      
 4071 
     | 
    
         
            +
            		// Performance analysis: https://neil.fraser.name/news/2010/11/04/
         
     | 
| 
      
 4072 
     | 
    
         
            +
            		best = 0;
         
     | 
| 
      
 4073 
     | 
    
         
            +
            		length = 1;
         
     | 
| 
      
 4074 
     | 
    
         
            +
            		while ( true ) {
         
     | 
| 
      
 4075 
     | 
    
         
            +
            			pattern = text1.substring( textLength - length );
         
     | 
| 
      
 4076 
     | 
    
         
            +
            			found = text2.indexOf( pattern );
         
     | 
| 
      
 4077 
     | 
    
         
            +
            			if ( found === -1 ) {
         
     | 
| 
      
 4078 
     | 
    
         
            +
            				return best;
         
     | 
| 
      
 4079 
     | 
    
         
            +
            			}
         
     | 
| 
      
 4080 
     | 
    
         
            +
            			length += found;
         
     | 
| 
      
 4081 
     | 
    
         
            +
            			if ( found === 0 || text1.substring( textLength - length ) ===
         
     | 
| 
      
 4082 
     | 
    
         
            +
            					text2.substring( 0, length ) ) {
         
     | 
| 
      
 4083 
     | 
    
         
            +
            				best = length;
         
     | 
| 
      
 4084 
     | 
    
         
            +
            				length++;
         
     | 
| 
      
 4085 
     | 
    
         
            +
            			}
         
     | 
| 
      
 4086 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4087 
     | 
    
         
            +
            	};
         
     | 
| 
      
 4088 
     | 
    
         
            +
             
     | 
| 
      
 4089 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 4090 
     | 
    
         
            +
            	 * Split two texts into an array of strings.  Reduce the texts to a string of
         
     | 
| 
      
 4091 
     | 
    
         
            +
            	 * hashes where each Unicode character represents one line.
         
     | 
| 
      
 4092 
     | 
    
         
            +
            	 * @param {string} text1 First string.
         
     | 
| 
      
 4093 
     | 
    
         
            +
            	 * @param {string} text2 Second string.
         
     | 
| 
      
 4094 
     | 
    
         
            +
            	 * @return {{chars1: string, chars2: string, lineArray: !Array.<string>}}
         
     | 
| 
      
 4095 
     | 
    
         
            +
            	 *     An object containing the encoded text1, the encoded text2 and
         
     | 
| 
      
 4096 
     | 
    
         
            +
            	 *     the array of unique strings.
         
     | 
| 
      
 4097 
     | 
    
         
            +
            	 *     The zeroth element of the array of unique strings is intentionally blank.
         
     | 
| 
      
 4098 
     | 
    
         
            +
            	 * @private
         
     | 
| 
      
 4099 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 4100 
     | 
    
         
            +
            	DiffMatchPatch.prototype.diffLinesToChars = function( text1, text2 ) {
         
     | 
| 
      
 4101 
     | 
    
         
            +
            		var lineArray, lineHash, chars1, chars2;
         
     | 
| 
      
 4102 
     | 
    
         
            +
            		lineArray = []; // E.g. lineArray[4] === 'Hello\n'
         
     | 
| 
      
 4103 
     | 
    
         
            +
            		lineHash = {};  // E.g. lineHash['Hello\n'] === 4
         
     | 
| 
      
 4104 
     | 
    
         
            +
             
     | 
| 
      
 4105 
     | 
    
         
            +
            		// '\x00' is a valid character, but various debuggers don't like it.
         
     | 
| 
      
 4106 
     | 
    
         
            +
            		// So we'll insert a junk entry to avoid generating a null character.
         
     | 
| 
      
 4107 
     | 
    
         
            +
            		lineArray[ 0 ] = "";
         
     | 
| 
      
 4108 
     | 
    
         
            +
             
     | 
| 
      
 4109 
     | 
    
         
            +
            		/**
         
     | 
| 
      
 4110 
     | 
    
         
            +
            		 * Split a text into an array of strings.  Reduce the texts to a string of
         
     | 
| 
      
 4111 
     | 
    
         
            +
            		 * hashes where each Unicode character represents one line.
         
     | 
| 
      
 4112 
     | 
    
         
            +
            		 * Modifies linearray and linehash through being a closure.
         
     | 
| 
      
 4113 
     | 
    
         
            +
            		 * @param {string} text String to encode.
         
     | 
| 
      
 4114 
     | 
    
         
            +
            		 * @return {string} Encoded string.
         
     | 
| 
      
 4115 
     | 
    
         
            +
            		 * @private
         
     | 
| 
      
 4116 
     | 
    
         
            +
            		 */
         
     | 
| 
      
 4117 
     | 
    
         
            +
            		function diffLinesToCharsMunge( text ) {
         
     | 
| 
      
 4118 
     | 
    
         
            +
            			var chars, lineStart, lineEnd, lineArrayLength, line;
         
     | 
| 
      
 4119 
     | 
    
         
            +
            			chars = "";
         
     | 
| 
      
 4120 
     | 
    
         
            +
             
     | 
| 
      
 4121 
     | 
    
         
            +
            			// Walk the text, pulling out a substring for each line.
         
     | 
| 
      
 4122 
     | 
    
         
            +
            			// text.split('\n') would would temporarily double our memory footprint.
         
     | 
| 
      
 4123 
     | 
    
         
            +
            			// Modifying text would create many large strings to garbage collect.
         
     | 
| 
      
 4124 
     | 
    
         
            +
            			lineStart = 0;
         
     | 
| 
      
 4125 
     | 
    
         
            +
            			lineEnd = -1;
         
     | 
| 
      
 4126 
     | 
    
         
            +
             
     | 
| 
      
 4127 
     | 
    
         
            +
            			// Keeping our own length variable is faster than looking it up.
         
     | 
| 
      
 4128 
     | 
    
         
            +
            			lineArrayLength = lineArray.length;
         
     | 
| 
      
 4129 
     | 
    
         
            +
            			while ( lineEnd < text.length - 1 ) {
         
     | 
| 
      
 4130 
     | 
    
         
            +
            				lineEnd = text.indexOf( "\n", lineStart );
         
     | 
| 
      
 4131 
     | 
    
         
            +
            				if ( lineEnd === -1 ) {
         
     | 
| 
      
 4132 
     | 
    
         
            +
            					lineEnd = text.length - 1;
         
     | 
| 
      
 4133 
     | 
    
         
            +
            				}
         
     | 
| 
      
 4134 
     | 
    
         
            +
            				line = text.substring( lineStart, lineEnd + 1 );
         
     | 
| 
      
 4135 
     | 
    
         
            +
            				lineStart = lineEnd + 1;
         
     | 
| 
      
 4136 
     | 
    
         
            +
             
     | 
| 
      
 4137 
     | 
    
         
            +
            				if ( lineHash.hasOwnProperty ? lineHash.hasOwnProperty( line ) :
         
     | 
| 
      
 4138 
     | 
    
         
            +
            							( lineHash[ line ] !== undefined ) ) {
         
     | 
| 
      
 4139 
     | 
    
         
            +
            					chars += String.fromCharCode( lineHash[ line ] );
         
     | 
| 
      
 4140 
     | 
    
         
            +
            				} else {
         
     | 
| 
      
 4141 
     | 
    
         
            +
            					chars += String.fromCharCode( lineArrayLength );
         
     | 
| 
      
 4142 
     | 
    
         
            +
            					lineHash[ line ] = lineArrayLength;
         
     | 
| 
      
 4143 
     | 
    
         
            +
            					lineArray[ lineArrayLength++ ] = line;
         
     | 
| 
      
 4144 
     | 
    
         
            +
            				}
         
     | 
| 
      
 4145 
     | 
    
         
            +
            			}
         
     | 
| 
      
 4146 
     | 
    
         
            +
            			return chars;
         
     | 
| 
      
 4147 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4148 
     | 
    
         
            +
             
     | 
| 
      
 4149 
     | 
    
         
            +
            		chars1 = diffLinesToCharsMunge( text1 );
         
     | 
| 
      
 4150 
     | 
    
         
            +
            		chars2 = diffLinesToCharsMunge( text2 );
         
     | 
| 
      
 4151 
     | 
    
         
            +
            		return {
         
     | 
| 
      
 4152 
     | 
    
         
            +
            			chars1: chars1,
         
     | 
| 
      
 4153 
     | 
    
         
            +
            			chars2: chars2,
         
     | 
| 
      
 4154 
     | 
    
         
            +
            			lineArray: lineArray
         
     | 
| 
      
 4155 
     | 
    
         
            +
            		};
         
     | 
| 
      
 4156 
     | 
    
         
            +
            	};
         
     | 
| 
      
 4157 
     | 
    
         
            +
             
     | 
| 
      
 4158 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 4159 
     | 
    
         
            +
            	 * Rehydrate the text in a diff from a string of line hashes to real lines of
         
     | 
| 
      
 4160 
     | 
    
         
            +
            	 * text.
         
     | 
| 
      
 4161 
     | 
    
         
            +
            	 * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
         
     | 
| 
      
 4162 
     | 
    
         
            +
            	 * @param {!Array.<string>} lineArray Array of unique strings.
         
     | 
| 
      
 4163 
     | 
    
         
            +
            	 * @private
         
     | 
| 
      
 4164 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 4165 
     | 
    
         
            +
            	DiffMatchPatch.prototype.diffCharsToLines = function( diffs, lineArray ) {
         
     | 
| 
      
 4166 
     | 
    
         
            +
            		var x, chars, text, y;
         
     | 
| 
      
 4167 
     | 
    
         
            +
            		for ( x = 0; x < diffs.length; x++ ) {
         
     | 
| 
      
 4168 
     | 
    
         
            +
            			chars = diffs[ x ][ 1 ];
         
     | 
| 
      
 4169 
     | 
    
         
            +
            			text = [];
         
     | 
| 
      
 4170 
     | 
    
         
            +
            			for ( y = 0; y < chars.length; y++ ) {
         
     | 
| 
      
 4171 
     | 
    
         
            +
            				text[ y ] = lineArray[ chars.charCodeAt( y ) ];
         
     | 
| 
      
 4172 
     | 
    
         
            +
            			}
         
     | 
| 
      
 4173 
     | 
    
         
            +
            			diffs[ x ][ 1 ] = text.join( "" );
         
     | 
| 
      
 4174 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4175 
     | 
    
         
            +
            	};
         
     | 
| 
      
 4176 
     | 
    
         
            +
             
     | 
| 
      
 4177 
     | 
    
         
            +
            	/**
         
     | 
| 
      
 4178 
     | 
    
         
            +
            	 * Reorder and merge like edit sections.  Merge equalities.
         
     | 
| 
      
 4179 
     | 
    
         
            +
            	 * Any edit section can move as long as it doesn't cross an equality.
         
     | 
| 
      
 4180 
     | 
    
         
            +
            	 * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
         
     | 
| 
      
 4181 
     | 
    
         
            +
            	 */
         
     | 
| 
      
 4182 
     | 
    
         
            +
            	DiffMatchPatch.prototype.diffCleanupMerge = function( diffs ) {
         
     | 
| 
      
 4183 
     | 
    
         
            +
            		var pointer, countDelete, countInsert, textInsert, textDelete,
         
     | 
| 
      
 4184 
     | 
    
         
            +
            			commonlength, changes, diffPointer, position;
         
     | 
| 
      
 4185 
     | 
    
         
            +
            		diffs.push( [ DIFF_EQUAL, "" ] ); // Add a dummy entry at the end.
         
     | 
| 
      
 4186 
     | 
    
         
            +
            		pointer = 0;
         
     | 
| 
      
 4187 
     | 
    
         
            +
            		countDelete = 0;
         
     | 
| 
      
 4188 
     | 
    
         
            +
            		countInsert = 0;
         
     | 
| 
      
 4189 
     | 
    
         
            +
            		textDelete = "";
         
     | 
| 
      
 4190 
     | 
    
         
            +
            		textInsert = "";
         
     | 
| 
      
 4191 
     | 
    
         
            +
            		commonlength;
         
     | 
| 
      
 4192 
     | 
    
         
            +
            		while ( pointer < diffs.length ) {
         
     | 
| 
      
 4193 
     | 
    
         
            +
            			switch ( diffs[ pointer ][ 0 ] ) {
         
     | 
| 
      
 4194 
     | 
    
         
            +
            			case DIFF_INSERT:
         
     | 
| 
      
 4195 
     | 
    
         
            +
            				countInsert++;
         
     | 
| 
      
 4196 
     | 
    
         
            +
            				textInsert += diffs[ pointer ][ 1 ];
         
     | 
| 
      
 4197 
     | 
    
         
            +
            				pointer++;
         
     | 
| 
      
 4198 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 4199 
     | 
    
         
            +
            			case DIFF_DELETE:
         
     | 
| 
      
 4200 
     | 
    
         
            +
            				countDelete++;
         
     | 
| 
      
 4201 
     | 
    
         
            +
            				textDelete += diffs[ pointer ][ 1 ];
         
     | 
| 
      
 4202 
     | 
    
         
            +
            				pointer++;
         
     | 
| 
      
 4203 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 4204 
     | 
    
         
            +
            			case DIFF_EQUAL:
         
     | 
| 
      
 4205 
     | 
    
         
            +
             
     | 
| 
      
 4206 
     | 
    
         
            +
            				// Upon reaching an equality, check for prior redundancies.
         
     | 
| 
      
 4207 
     | 
    
         
            +
            				if ( countDelete + countInsert > 1 ) {
         
     | 
| 
      
 4208 
     | 
    
         
            +
            					if ( countDelete !== 0 && countInsert !== 0 ) {
         
     | 
| 
      
 4209 
     | 
    
         
            +
             
     | 
| 
      
 4210 
     | 
    
         
            +
            						// Factor out any common prefixes.
         
     | 
| 
      
 4211 
     | 
    
         
            +
            						commonlength = this.diffCommonPrefix( textInsert, textDelete );
         
     | 
| 
      
 4212 
     | 
    
         
            +
            						if ( commonlength !== 0 ) {
         
     | 
| 
      
 4213 
     | 
    
         
            +
            							if ( ( pointer - countDelete - countInsert ) > 0 &&
         
     | 
| 
      
 4214 
     | 
    
         
            +
            									diffs[ pointer - countDelete - countInsert - 1 ][ 0 ] ===
         
     | 
| 
      
 4215 
     | 
    
         
            +
            									DIFF_EQUAL ) {
         
     | 
| 
      
 4216 
     | 
    
         
            +
            								diffs[ pointer - countDelete - countInsert - 1 ][ 1 ] +=
         
     | 
| 
      
 4217 
     | 
    
         
            +
            									textInsert.substring( 0, commonlength );
         
     | 
| 
      
 4218 
     | 
    
         
            +
            							} else {
         
     | 
| 
      
 4219 
     | 
    
         
            +
            								diffs.splice( 0, 0, [ DIFF_EQUAL,
         
     | 
| 
      
 4220 
     | 
    
         
            +
            									textInsert.substring( 0, commonlength )
         
     | 
| 
      
 4221 
     | 
    
         
            +
            								] );
         
     | 
| 
      
 4222 
     | 
    
         
            +
            								pointer++;
         
     | 
| 
      
 4223 
     | 
    
         
            +
            							}
         
     | 
| 
      
 4224 
     | 
    
         
            +
            							textInsert = textInsert.substring( commonlength );
         
     | 
| 
      
 4225 
     | 
    
         
            +
            							textDelete = textDelete.substring( commonlength );
         
     | 
| 
      
 4226 
     | 
    
         
            +
            						}
         
     | 
| 
      
 4227 
     | 
    
         
            +
             
     | 
| 
      
 4228 
     | 
    
         
            +
            						// Factor out any common suffixies.
         
     | 
| 
      
 4229 
     | 
    
         
            +
            						commonlength = this.diffCommonSuffix( textInsert, textDelete );
         
     | 
| 
      
 4230 
     | 
    
         
            +
            						if ( commonlength !== 0 ) {
         
     | 
| 
      
 4231 
     | 
    
         
            +
            							diffs[ pointer ][ 1 ] = textInsert.substring( textInsert.length -
         
     | 
| 
      
 4232 
     | 
    
         
            +
            									commonlength ) + diffs[ pointer ][ 1 ];
         
     | 
| 
      
 4233 
     | 
    
         
            +
            							textInsert = textInsert.substring( 0, textInsert.length -
         
     | 
| 
      
 4234 
     | 
    
         
            +
            								commonlength );
         
     | 
| 
      
 4235 
     | 
    
         
            +
            							textDelete = textDelete.substring( 0, textDelete.length -
         
     | 
| 
      
 4236 
     | 
    
         
            +
            								commonlength );
         
     | 
| 
      
 4237 
     | 
    
         
            +
            						}
         
     | 
| 
      
 4238 
     | 
    
         
            +
            					}
         
     | 
| 
      
 4239 
     | 
    
         
            +
             
     | 
| 
      
 4240 
     | 
    
         
            +
            					// Delete the offending records and add the merged ones.
         
     | 
| 
      
 4241 
     | 
    
         
            +
            					if ( countDelete === 0 ) {
         
     | 
| 
      
 4242 
     | 
    
         
            +
            						diffs.splice( pointer - countInsert,
         
     | 
| 
      
 4243 
     | 
    
         
            +
            							countDelete + countInsert, [ DIFF_INSERT, textInsert ] );
         
     | 
| 
      
 4244 
     | 
    
         
            +
            					} else if ( countInsert === 0 ) {
         
     | 
| 
      
 4245 
     | 
    
         
            +
            						diffs.splice( pointer - countDelete,
         
     | 
| 
      
 4246 
     | 
    
         
            +
            							countDelete + countInsert, [ DIFF_DELETE, textDelete ] );
         
     | 
| 
      
 4247 
     | 
    
         
            +
            					} else {
         
     | 
| 
      
 4248 
     | 
    
         
            +
            						diffs.splice(
         
     | 
| 
      
 4249 
     | 
    
         
            +
            							pointer - countDelete - countInsert,
         
     | 
| 
      
 4250 
     | 
    
         
            +
            							countDelete + countInsert,
         
     | 
| 
      
 4251 
     | 
    
         
            +
            							[ DIFF_DELETE, textDelete ], [ DIFF_INSERT, textInsert ]
         
     | 
| 
      
 4252 
     | 
    
         
            +
            						);
         
     | 
| 
      
 4253 
     | 
    
         
            +
            					}
         
     | 
| 
      
 4254 
     | 
    
         
            +
            					pointer = pointer - countDelete - countInsert +
         
     | 
| 
      
 4255 
     | 
    
         
            +
            						( countDelete ? 1 : 0 ) + ( countInsert ? 1 : 0 ) + 1;
         
     | 
| 
      
 4256 
     | 
    
         
            +
            				} else if ( pointer !== 0 && diffs[ pointer - 1 ][ 0 ] === DIFF_EQUAL ) {
         
     | 
| 
      
 4257 
     | 
    
         
            +
             
     | 
| 
      
 4258 
     | 
    
         
            +
            					// Merge this equality with the previous one.
         
     | 
| 
      
 4259 
     | 
    
         
            +
            					diffs[ pointer - 1 ][ 1 ] += diffs[ pointer ][ 1 ];
         
     | 
| 
      
 4260 
     | 
    
         
            +
            					diffs.splice( pointer, 1 );
         
     | 
| 
      
 4261 
     | 
    
         
            +
            				} else {
         
     | 
| 
      
 4262 
     | 
    
         
            +
            					pointer++;
         
     | 
| 
      
 4263 
     | 
    
         
            +
            				}
         
     | 
| 
      
 4264 
     | 
    
         
            +
            				countInsert = 0;
         
     | 
| 
      
 4265 
     | 
    
         
            +
            				countDelete = 0;
         
     | 
| 
      
 4266 
     | 
    
         
            +
            				textDelete = "";
         
     | 
| 
      
 4267 
     | 
    
         
            +
            				textInsert = "";
         
     | 
| 
      
 4268 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 4269 
     | 
    
         
            +
            			}
         
     | 
| 
      
 4270 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4271 
     | 
    
         
            +
            		if ( diffs[ diffs.length - 1 ][ 1 ] === "" ) {
         
     | 
| 
      
 4272 
     | 
    
         
            +
            			diffs.pop(); // Remove the dummy entry at the end.
         
     | 
| 
      
 4273 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4274 
     | 
    
         
            +
             
     | 
| 
      
 4275 
     | 
    
         
            +
            		// Second pass: look for single edits surrounded on both sides by equalities
         
     | 
| 
      
 4276 
     | 
    
         
            +
            		// which can be shifted sideways to eliminate an equality.
         
     | 
| 
      
 4277 
     | 
    
         
            +
            		// e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC
         
     | 
| 
      
 4278 
     | 
    
         
            +
            		changes = false;
         
     | 
| 
      
 4279 
     | 
    
         
            +
            		pointer = 1;
         
     | 
| 
      
 4280 
     | 
    
         
            +
             
     | 
| 
      
 4281 
     | 
    
         
            +
            		// Intentionally ignore the first and last element (don't need checking).
         
     | 
| 
      
 4282 
     | 
    
         
            +
            		while ( pointer < diffs.length - 1 ) {
         
     | 
| 
      
 4283 
     | 
    
         
            +
            			if ( diffs[ pointer - 1 ][ 0 ] === DIFF_EQUAL &&
         
     | 
| 
      
 4284 
     | 
    
         
            +
            					diffs[ pointer + 1 ][ 0 ] === DIFF_EQUAL ) {
         
     | 
| 
      
 4285 
     | 
    
         
            +
             
     | 
| 
      
 4286 
     | 
    
         
            +
            				diffPointer = diffs[ pointer ][ 1 ];
         
     | 
| 
      
 4287 
     | 
    
         
            +
            				position = diffPointer.substring(
         
     | 
| 
      
 4288 
     | 
    
         
            +
            					diffPointer.length - diffs[ pointer - 1 ][ 1 ].length
         
     | 
| 
      
 4289 
     | 
    
         
            +
            				);
         
     | 
| 
      
 4290 
     | 
    
         
            +
             
     | 
| 
      
 4291 
     | 
    
         
            +
            				// This is a single edit surrounded by equalities.
         
     | 
| 
      
 4292 
     | 
    
         
            +
            				if ( position === diffs[ pointer - 1 ][ 1 ] ) {
         
     | 
| 
      
 4293 
     | 
    
         
            +
             
     | 
| 
      
 4294 
     | 
    
         
            +
            					// Shift the edit over the previous equality.
         
     | 
| 
      
 4295 
     | 
    
         
            +
            					diffs[ pointer ][ 1 ] = diffs[ pointer - 1 ][ 1 ] +
         
     | 
| 
      
 4296 
     | 
    
         
            +
            						diffs[ pointer ][ 1 ].substring( 0, diffs[ pointer ][ 1 ].length -
         
     | 
| 
      
 4297 
     | 
    
         
            +
            							diffs[ pointer - 1 ][ 1 ].length );
         
     | 
| 
      
 4298 
     | 
    
         
            +
            					diffs[ pointer + 1 ][ 1 ] =
         
     | 
| 
      
 4299 
     | 
    
         
            +
            						diffs[ pointer - 1 ][ 1 ] + diffs[ pointer + 1 ][ 1 ];
         
     | 
| 
      
 4300 
     | 
    
         
            +
            					diffs.splice( pointer - 1, 1 );
         
     | 
| 
      
 4301 
     | 
    
         
            +
            					changes = true;
         
     | 
| 
      
 4302 
     | 
    
         
            +
            				} else if ( diffPointer.substring( 0, diffs[ pointer + 1 ][ 1 ].length ) ===
         
     | 
| 
      
 4303 
     | 
    
         
            +
            						diffs[ pointer + 1 ][ 1 ] ) {
         
     | 
| 
      
 4304 
     | 
    
         
            +
             
     | 
| 
      
 4305 
     | 
    
         
            +
            					// Shift the edit over the next equality.
         
     | 
| 
      
 4306 
     | 
    
         
            +
            					diffs[ pointer - 1 ][ 1 ] += diffs[ pointer + 1 ][ 1 ];
         
     | 
| 
      
 4307 
     | 
    
         
            +
            					diffs[ pointer ][ 1 ] =
         
     | 
| 
      
 4308 
     | 
    
         
            +
            						diffs[ pointer ][ 1 ].substring( diffs[ pointer + 1 ][ 1 ].length ) +
         
     | 
| 
      
 4309 
     | 
    
         
            +
            						diffs[ pointer + 1 ][ 1 ];
         
     | 
| 
      
 4310 
     | 
    
         
            +
            					diffs.splice( pointer + 1, 1 );
         
     | 
| 
      
 4311 
     | 
    
         
            +
            					changes = true;
         
     | 
| 
      
 4312 
     | 
    
         
            +
            				}
         
     | 
| 
      
 4313 
     | 
    
         
            +
            			}
         
     | 
| 
      
 4314 
     | 
    
         
            +
            			pointer++;
         
     | 
| 
      
 4315 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4316 
     | 
    
         
            +
             
     | 
| 
      
 4317 
     | 
    
         
            +
            		// If shifts were made, the diff needs reordering and another shift sweep.
         
     | 
| 
      
 4318 
     | 
    
         
            +
            		if ( changes ) {
         
     | 
| 
      
 4319 
     | 
    
         
            +
            			this.diffCleanupMerge( diffs );
         
     | 
| 
      
 4320 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4321 
     | 
    
         
            +
            	};
         
     | 
| 
      
 4322 
     | 
    
         
            +
             
     | 
| 
      
 4323 
     | 
    
         
            +
            	return function( o, n ) {
         
     | 
| 
      
 4324 
     | 
    
         
            +
            		var diff, output, text;
         
     | 
| 
      
 4325 
     | 
    
         
            +
            		diff = new DiffMatchPatch();
         
     | 
| 
      
 4326 
     | 
    
         
            +
            		output = diff.DiffMain( o, n );
         
     | 
| 
      
 4327 
     | 
    
         
            +
            		diff.diffCleanupEfficiency( output );
         
     | 
| 
      
 4328 
     | 
    
         
            +
            		text = diff.diffPrettyHtml( output );
         
     | 
| 
      
 4329 
     | 
    
         
            +
             
     | 
| 
      
 4330 
     | 
    
         
            +
            		return text;
         
     | 
| 
      
 4331 
     | 
    
         
            +
            	};
         
     | 
| 
      
 4332 
     | 
    
         
            +
            }() );
         
     | 
| 
      
 4333 
     | 
    
         
            +
             
     | 
| 
      
 4334 
     | 
    
         
            +
            }() );
         
     |