Bug 1291312 - Update web-platform-tests to revision 7a6a5c9f436730f86123e6f48a44bf1b7ba5654f, a=testonly
☠☠ backed out by b9a1e78400a2 ☠ ☠
authorJames Graham <james@hoppipolla.co.uk>
Mon, 01 Aug 2016 16:46:47 +0100
changeset 307774 6fbdadb91edf0ecb6ca874579a761e466dd661fe
parent 307773 dcae241857b185f583f6c3f568b1bd3b1b52de41
child 307775 9c3ff4fe0ebbf713a60c0f29d53bfc7a4ae2bbd8
push id80166
push userjames@hoppipolla.co.uk
push dateTue, 02 Aug 2016 15:52:37 +0000
treeherdermozilla-inbound@9c3ff4fe0ebb [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerstestonly
bugs1291312
milestone51.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1291312 - Update web-platform-tests to revision 7a6a5c9f436730f86123e6f48a44bf1b7ba5654f, a=testonly MozReview-Commit-ID: 2Z26QRXPNuK
testing/web-platform/meta/MANIFEST.json
testing/web-platform/meta/mozilla-sync
testing/web-platform/tests/2dcontext/tools/gentest.py
testing/web-platform/tests/2dcontext/tools/specextract.py
testing/web-platform/tests/FileAPI/idlharness.idl
testing/web-platform/tests/FileAPI/idlharness.worker.js
testing/web-platform/tests/WebCryptoAPI/digest/digest.js
testing/web-platform/tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.js
testing/web-platform/tests/XMLHttpRequest/XMLHttpRequest-withCredentials.html
testing/web-platform/tests/XMLHttpRequest/XMLHttpRequest-withCredentials.js
testing/web-platform/tests/XMLHttpRequest/XMLHttpRequest-withCredentials.worker.js
testing/web-platform/tests/XMLHttpRequest/open-url-multi-window.htm
testing/web-platform/tests/XMLHttpRequest/resources/last-modified.py
testing/web-platform/tests/XMLHttpRequest/responsexml-basic.htm
testing/web-platform/tests/XMLHttpRequest/send-blob-with-no-mime-type.html
testing/web-platform/tests/annotation-model/.editorconfig
testing/web-platform/tests/annotation-model/CONTRIBUTING.md
testing/web-platform/tests/annotation-model/OWNERS
testing/web-platform/tests/annotation-model/README.md
testing/web-platform/tests/annotation-model/TODO
testing/web-platform/tests/annotation-model/definitions/.gitignore
testing/web-platform/tests/annotation-model/definitions/choiceSet.json
testing/web-platform/tests/annotation-model/definitions/externalWebResource.json
testing/web-platform/tests/annotation-model/definitions/specificResource.json
testing/web-platform/tests/annotation-model/definitions/stringUri.json
testing/web-platform/tests/annotation-model/definitions/textualBody.json
testing/web-platform/tests/annotation-model/examples/README.md
testing/web-platform/tests/annotation-model/examples/example1-manual.html
testing/web-platform/tests/annotation-model/examples/example1.test
testing/web-platform/tests/annotation-model/examples/example2-manual.html
testing/web-platform/tests/annotation-model/examples/example2.test
testing/web-platform/tests/annotation-model/examples/exampleContext.json
testing/web-platform/tests/annotation-model/examples/exampleTarget.json
testing/web-platform/tests/annotation-model/scripts/JSONtest.js
testing/web-platform/tests/annotation-model/scripts/ajv.min.js
testing/web-platform/tests/annotation-model/scripts/ajv.min.js.map
testing/web-platform/tests/annotation-model/tools/make_tests.py
testing/web-platform/tests/annotation-model/tools/template
testing/web-platform/tests/annotation-model/tools/tests/README.md
testing/web-platform/tests/custom-elements/custom-elements-registry/define.html
testing/web-platform/tests/docs/test-format-guidelines.md
testing/web-platform/tests/domparsing/DOMParser-parseFromString-html.html
testing/web-platform/tests/domparsing/DOMParser-parseFromString-xml.html
testing/web-platform/tests/encrypted-media/EncryptedMediaExtensions.idl
testing/web-platform/tests/encrypted-media/Google/encrypted-media-async-creation-with-gc.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-async-setcert-with-gc.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-check-init-data-type.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-clear-key-invalid-license.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-clearkey-update-non-ascii-input.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-events.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-generate-request-disallowed-input.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-keystatuses-multiple-sessions.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-keystatuses-multiple-updates.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-keystatuses.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-lifetime-mediakeys-with-session.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-lifetime-mediakeys.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-lifetime-mediakeysession-reference.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-lifetime-mediakeysession-release-noreference.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-lifetime-mediakeysession-release.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-lifetime-multiple-mediakeys.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-lifetime-reload.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-not-callable-after-createsession.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-onencrypted.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-playback-encrypted-and-clear-sources.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-playback-multiple-sessions.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-playback-setmediakeys-after-src.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-playback-setmediakeys-before-src.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-playback-two-videos.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-requestmediakeysystemaccess.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-reset-src-after-setmediakeys.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-session-closed-event.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-setmediakeys-again-after-playback.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-setmediakeys-again-after-resetting-src.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-setmediakeys-at-same-time.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-different-mediakeys.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-the-same-mediakeys.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-setmediakeys-to-multiple-video-elements.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-setmediakeys.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-syntax.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-unique-origin.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-update-disallowed-input.html
testing/web-platform/tests/encrypted-media/Google/encrypted-media-utils.js
testing/web-platform/tests/encrypted-media/Google/encrypted-media-waiting-for-a-key.html
testing/web-platform/tests/encrypted-media/Google/test-encrypted-different-av-keys.webm
testing/web-platform/tests/encrypted-media/Google/test-encrypted.webm
testing/web-platform/tests/encrypted-media/Google/webm/test-encrypted-different-av-keys.webm
testing/web-platform/tests/encrypted-media/Google/webm/test-encrypted.webm
testing/web-platform/tests/encrypted-media/Google/webm/test.webm
testing/web-platform/tests/encrypted-media/clearkey-check-initdata-type.html
testing/web-platform/tests/encrypted-media/clearkey-events.html
testing/web-platform/tests/encrypted-media/clearkey-generate-request-disallowed-input.html
testing/web-platform/tests/encrypted-media/clearkey-keystatuses-multiple-sessions.html
testing/web-platform/tests/encrypted-media/clearkey-mp4-playback-persistent-usage-record-events.html
testing/web-platform/tests/encrypted-media/clearkey-mp4-playback-persistent-usage-record.html
testing/web-platform/tests/encrypted-media/clearkey-mp4-playback-retrieve-persistent-usage-record.html
testing/web-platform/tests/encrypted-media/clearkey-mp4-playback-temporary-events.html
testing/web-platform/tests/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential.html
testing/web-platform/tests/encrypted-media/clearkey-mp4-playback-temporary-multikey.html
testing/web-platform/tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-first.html
testing/web-platform/tests/encrypted-media/clearkey-mp4-playback-temporary-two-videos.html
testing/web-platform/tests/encrypted-media/clearkey-mp4-playback-temporary.html
testing/web-platform/tests/encrypted-media/clearkey-not-callable-after-createsession.html
testing/web-platform/tests/encrypted-media/content/audio_aac-lc_128k_2keys_bis.mp4
testing/web-platform/tests/encrypted-media/content/audio_aac-lc_128k_dashinit.mp4
testing/web-platform/tests/encrypted-media/content/audio_aac-lc_128k_enc_dashinit.mp4
testing/web-platform/tests/encrypted-media/content/content-metadata.js
testing/web-platform/tests/encrypted-media/content/drmconfig.json
testing/web-platform/tests/encrypted-media/content/video_512x288_h264-360k_dashinit.mp4
testing/web-platform/tests/encrypted-media/content/video_512x288_h264-360k_enc_2keys_bis.mp4
testing/web-platform/tests/encrypted-media/content/video_512x288_h264-360k_enc_dashinit.mp4
testing/web-platform/tests/encrypted-media/drm-check-initdata-type.html
testing/web-platform/tests/encrypted-media/drm-events.html
testing/web-platform/tests/encrypted-media/drm-generate-request-disallowed-input.html
testing/web-platform/tests/encrypted-media/drm-keystatuses-multiple-sessions.html
testing/web-platform/tests/encrypted-media/drm-mp4-playback-temporary-events.html
testing/web-platform/tests/encrypted-media/drm-mp4-playback-temporary-multikey-sequential.html
testing/web-platform/tests/encrypted-media/drm-mp4-playback-temporary-multikey.html
testing/web-platform/tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-first.html
testing/web-platform/tests/encrypted-media/drm-mp4-playback-temporary-two-videos.html
testing/web-platform/tests/encrypted-media/drm-mp4-playback-temporary.html
testing/web-platform/tests/encrypted-media/drm-not-callable-after-createsession.html
testing/web-platform/tests/encrypted-media/idlharness.html
testing/web-platform/tests/encrypted-media/polyfill/Makefile
testing/web-platform/tests/encrypted-media/polyfill/cast-polyfill.js
testing/web-platform/tests/encrypted-media/polyfill/chrome-polyfill.js
testing/web-platform/tests/encrypted-media/polyfill/clearkey-polyfill.js
testing/web-platform/tests/encrypted-media/polyfill/firefox-polyfill.js
testing/web-platform/tests/encrypted-media/resources/retrieve-persistent-usage-record.html
testing/web-platform/tests/encrypted-media/scripts/check-initdata-type.js
testing/web-platform/tests/encrypted-media/scripts/events.js
testing/web-platform/tests/encrypted-media/scripts/generate-request-disallowed-input.js
testing/web-platform/tests/encrypted-media/scripts/keystatuses-multiple-sessions.js
testing/web-platform/tests/encrypted-media/scripts/not-callable-after-createsession.js
testing/web-platform/tests/encrypted-media/scripts/playback-persistent-usage-record-events.js
testing/web-platform/tests/encrypted-media/scripts/playback-persistent-usage-record.js
testing/web-platform/tests/encrypted-media/scripts/playback-retrieve-persistent-usage-record.js
testing/web-platform/tests/encrypted-media/scripts/playback-temporary-events.js
testing/web-platform/tests/encrypted-media/scripts/playback-temporary-multikey-multisession.js
testing/web-platform/tests/encrypted-media/scripts/playback-temporary-multikey.js
testing/web-platform/tests/encrypted-media/scripts/playback-temporary-setMediaKeys-first.js
testing/web-platform/tests/encrypted-media/scripts/playback-temporary-two-videos.js
testing/web-platform/tests/encrypted-media/scripts/playback-temporary.js
testing/web-platform/tests/encrypted-media/util/clearkey-messagehandler.js
testing/web-platform/tests/encrypted-media/util/drmtoday-messagehandler.js
testing/web-platform/tests/encrypted-media/util/fetch.js
testing/web-platform/tests/encrypted-media/util/testmediasource.js
testing/web-platform/tests/encrypted-media/util/utf8.js
testing/web-platform/tests/encrypted-media/util/utils.js
testing/web-platform/tests/eventsource/resources/cors.py
testing/web-platform/tests/fetch/api/basic/integrity.js
testing/web-platform/tests/fetch/api/basic/mode-no-cors.js
testing/web-platform/tests/fetch/api/basic/mode-same-origin-worker.html
testing/web-platform/tests/fetch/api/basic/mode-same-origin.html
testing/web-platform/tests/fetch/api/basic/mode-same-origin.js
testing/web-platform/tests/fetch/api/basic/request-head-worker.html
testing/web-platform/tests/fetch/api/basic/request-head.html
testing/web-platform/tests/fetch/api/basic/request-head.js
testing/web-platform/tests/fetch/api/basic/response-url-worker.html
testing/web-platform/tests/fetch/api/basic/response-url.html
testing/web-platform/tests/fetch/api/basic/response-url.js
testing/web-platform/tests/fetch/api/cors/cors-basic-worker.html
testing/web-platform/tests/fetch/api/cors/cors-basic.html
testing/web-platform/tests/fetch/api/cors/cors-basic.js
testing/web-platform/tests/fetch/api/cors/cors-cookies-worker.html
testing/web-platform/tests/fetch/api/cors/cors-cookies.html
testing/web-platform/tests/fetch/api/cors/cors-cookies.js
testing/web-platform/tests/fetch/api/cors/cors-filtering.js
testing/web-platform/tests/fetch/api/cors/cors-multiple-origins.js
testing/web-platform/tests/fetch/api/cors/cors-no-preflight-worker.html
testing/web-platform/tests/fetch/api/cors/cors-no-preflight.html
testing/web-platform/tests/fetch/api/cors/cors-no-preflight.js
testing/web-platform/tests/fetch/api/cors/cors-origin-worker.html
testing/web-platform/tests/fetch/api/cors/cors-origin.html
testing/web-platform/tests/fetch/api/cors/cors-origin.js
testing/web-platform/tests/fetch/api/cors/cors-preflight-redirect-worker.html
testing/web-platform/tests/fetch/api/cors/cors-preflight-redirect.html
testing/web-platform/tests/fetch/api/cors/cors-preflight-redirect.js
testing/web-platform/tests/fetch/api/cors/cors-preflight-referrer-worker.html
testing/web-platform/tests/fetch/api/cors/cors-preflight-referrer.html
testing/web-platform/tests/fetch/api/cors/cors-preflight-referrer.js
testing/web-platform/tests/fetch/api/cors/cors-preflight-status-worker.html
testing/web-platform/tests/fetch/api/cors/cors-preflight-status.html
testing/web-platform/tests/fetch/api/cors/cors-preflight-status.js
testing/web-platform/tests/fetch/api/cors/cors-preflight.js
testing/web-platform/tests/fetch/api/cors/cors-redirect-credentials.html
testing/web-platform/tests/fetch/api/cors/cors-redirect-credentials.js
testing/web-platform/tests/fetch/api/cors/cors-redirect-worker.html
testing/web-platform/tests/fetch/api/cors/cors-redirect.html
testing/web-platform/tests/fetch/api/cors/cors-redirect.js
testing/web-platform/tests/fetch/api/headers/headers-basic.html
testing/web-platform/tests/fetch/api/request/request-cache.html
testing/web-platform/tests/fetch/api/request/request-init-002.html
testing/web-platform/tests/fetch/api/request/request-init-003.sub.html
testing/web-platform/tests/fetch/api/request/resources/get-host-info.sub.js
testing/web-platform/tests/fetch/api/resources/get-host-info.sub.js
testing/web-platform/tests/fetch/api/resources/utils.js
testing/web-platform/tests/fetch/api/response/response-clone.html
testing/web-platform/tests/html/browsers/browsing-the-web/navigating-across-documents/empty_fragment.html
testing/web-platform/tests/html/browsers/browsing-the-web/navigating-across-documents/empty_fragment_iframe.html
testing/web-platform/tests/html/dom/interfaces.html
testing/web-platform/tests/html/semantics/document-metadata/the-link-element/document-without-browsing-context.html
testing/web-platform/tests/html/semantics/document-metadata/the-link-element/link-style-error-01.html
testing/web-platform/tests/html/semantics/document-metadata/the-link-element/stylesheet.py
testing/web-platform/tests/html/semantics/embedded-content/the-img-element/invalid-src.html
testing/web-platform/tests/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange.html
testing/web-platform/tests/html/semantics/grouping-content/the-li-element/grouping-li.html
testing/web-platform/tests/html/semantics/interactive-elements/the-dialog-element/dialog-open.html
testing/web-platform/tests/html/semantics/scripting-1/the-script-element/script-charset-03.html
testing/web-platform/tests/html/semantics/scripting-1/the-script-element/script-not-executed-after-shutdown-child.html
testing/web-platform/tests/html/semantics/scripting-1/the-script-element/script-not-executed-after-shutdown.html
testing/web-platform/tests/html/semantics/scripting-1/the-script-element/script-not-executed-after-shutdown.js
testing/web-platform/tests/html/semantics/tabular-data/the-table-element/remove-row.html
testing/web-platform/tests/html/tools/update_html5lib_tests.py
testing/web-platform/tests/lint.whitelist
testing/web-platform/tests/mixed-content/generic/tools/common_paths.py
testing/web-platform/tests/payment-request/OWNERS
testing/web-platform/tests/pointerevents/OWNERS
testing/web-platform/tests/pointerevents/README.md
testing/web-platform/tests/pointerevents/pointerevent_attributes_mouse-manual.html
testing/web-platform/tests/pointerevents/pointerevent_button_attribute_mouse-manual.html
testing/web-platform/tests/pointerevents/pointerevent_multiple_primary_pointers_boundary_events-manual.html
testing/web-platform/tests/pointerevents/pointerevent_pointerId_scope-manual.html
testing/web-platform/tests/pointerevents/pointerevent_properties_mouse-manual.html
testing/web-platform/tests/pointerevents/pointerevent_styles.css
testing/web-platform/tests/pointerevents/pointerevent_support.js
testing/web-platform/tests/pointerevents/pointerevent_suppress_compat_events_on_click.html
testing/web-platform/tests/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse.html
testing/web-platform/tests/pointerevents/pointerevent_touch-action-button-test_touch-manual.html
testing/web-platform/tests/pointerevents/pointerevent_touch-action-svg-test_touch-manual.html
testing/web-platform/tests/pointerevents/resources/pointerevent_pointerId_scope-iframe.html
testing/web-platform/tests/presentation-api/controlling-ua/idlharness.html
testing/web-platform/tests/presentation-api/receiving-ua/idlharness.html
testing/web-platform/tests/referrer-policy/generic/subresource/subresource.py
testing/web-platform/tests/referrer-policy/generic/tools/common_paths.py
testing/web-platform/tests/resources/idlharness.js
testing/web-platform/tests/resources/testharness.js
testing/web-platform/tests/service-workers/tools/blink-import.py
testing/web-platform/tests/shadow-dom/leaktests/html-collection.html
testing/web-platform/tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-001.html
testing/web-platform/tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-002.html
testing/web-platform/tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-003.html
testing/web-platform/tests/shadow-dom/untriaged/user-interaction/focus-navigation/test-004.html
testing/web-platform/tests/streams/readable-streams/bad-strategies.js
testing/web-platform/tests/tools/lint/lint.py
testing/web-platform/tests/tools/manifest/sourcefile.py
testing/web-platform/tests/tools/manifest/tests/test_manifest.py
testing/web-platform/tests/tools/runner/index.html
testing/web-platform/tests/tools/runner/report.py
testing/web-platform/tests/tools/runner/runner.css
testing/web-platform/tests/tools/runner/runner.js
testing/web-platform/tests/tools/serve/serve.py
testing/web-platform/tests/tools/setup.cfg
testing/web-platform/tests/tools/sslutils/openssl.py
testing/web-platform/tests/web-animations/README.md
testing/web-platform/tests/web-animations/interfaces/Animation/cancel.html
testing/web-platform/tests/web-animations/interfaces/Animation/constructor.html
testing/web-platform/tests/web-animations/interfaces/AnimationTimeline/document-timeline.html
testing/web-platform/tests/web-animations/interfaces/AnimationTimeline/idlharness.html
testing/web-platform/tests/web-animations/interfaces/DocumentTimeline/idlharness.html
testing/web-platform/tests/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument.html
testing/web-platform/tests/web-animations/resources/keyframe-utils.js
testing/web-platform/tests/web-animations/timing-model/timelines/default-document-timeline.html
testing/web-platform/tests/webgl/tools/import-conformance-tests.py
testing/web-platform/tests/webvtt/webvtt-file-format-parsing/webvtt-cue-text-parsing-rules/buildtests.py
testing/web-platform/tests/workers/constructors/Worker/DedicatedWorkerGlobalScope-members.html
testing/web-platform/tests/workers/constructors/Worker/DedicatedWorkerGlobalScope-members.worker.js
testing/web-platform/tests/workers/constructors/Worker/expected-self-properties.html
testing/web-platform/tests/workers/constructors/Worker/expected-self-properties.worker.js
testing/web-platform/tests/workers/constructors/Worker/terminate.html
testing/web-platform/tests/workers/constructors/Worker/unexpected-self-properties.html
testing/web-platform/tests/workers/constructors/Worker/unexpected-self-properties.worker.js
testing/web-platform/tests/workers/interfaces.idl
testing/web-platform/tests/workers/workers.js
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -93,16 +93,24 @@
         "path": "XMLHttpRequest/send-authentication-prompt-2-manual.htm",
         "url": "/XMLHttpRequest/send-authentication-prompt-2-manual.htm"
       },
       {
         "path": "XMLHttpRequest/send-authentication-prompt-manual.htm",
         "url": "/XMLHttpRequest/send-authentication-prompt-manual.htm"
       },
       {
+        "path": "annotation-model/examples/example1-manual.html",
+        "url": "/annotation-model/examples/example1-manual.html"
+      },
+      {
+        "path": "annotation-model/examples/example2-manual.html",
+        "url": "/annotation-model/examples/example2-manual.html"
+      },
+      {
         "path": "battery-status/battery-charging-manual.html",
         "url": "/battery-status/battery-charging-manual.html"
       },
       {
         "path": "battery-status/battery-discharging-manual.html",
         "url": "/battery-status/battery-discharging-manual.html"
       },
       {
@@ -925,18 +933,18 @@
         "path": "page-visibility/test_minimize-manual.html",
         "url": "/page-visibility/test_minimize-manual.html"
       },
       {
         "path": "page-visibility/test_tab_state_change-manual.html",
         "url": "/page-visibility/test_tab_state_change-manual.html"
       },
       {
-        "path": "pointerevents/pointerevent_button_attribute_mouse-manual.html",
-        "url": "/pointerevents/pointerevent_button_attribute_mouse-manual.html"
+        "path": "pointerevents/pointerevent_attributes_mouse-manual.html",
+        "url": "/pointerevents/pointerevent_attributes_mouse-manual.html"
       },
       {
         "path": "pointerevents/pointerevent_capture_mouse-manual.html",
         "url": "/pointerevents/pointerevent_capture_mouse-manual.html"
       },
       {
         "path": "pointerevents/pointerevent_capture_suppressing_mouse-manual.html",
         "url": "/pointerevents/pointerevent_capture_suppressing_mouse-manual.html"
@@ -953,16 +961,24 @@
         "path": "pointerevents/pointerevent_lostpointercapture_for_disconnected_node-manual.html",
         "url": "/pointerevents/pointerevent_lostpointercapture_for_disconnected_node-manual.html"
       },
       {
         "path": "pointerevents/pointerevent_lostpointercapture_is_first-manual.html",
         "url": "/pointerevents/pointerevent_lostpointercapture_is_first-manual.html"
       },
       {
+        "path": "pointerevents/pointerevent_multiple_primary_pointers_boundary_events-manual.html",
+        "url": "/pointerevents/pointerevent_multiple_primary_pointers_boundary_events-manual.html"
+      },
+      {
+        "path": "pointerevents/pointerevent_pointerId_scope-manual.html",
+        "url": "/pointerevents/pointerevent_pointerId_scope-manual.html"
+      },
+      {
         "path": "pointerevents/pointerevent_pointercancel_touch-manual.html",
         "url": "/pointerevents/pointerevent_pointercancel_touch-manual.html"
       },
       {
         "path": "pointerevents/pointerevent_pointerdown-manual.html",
         "url": "/pointerevents/pointerevent_pointerdown-manual.html"
       },
       {
@@ -1065,20 +1081,16 @@
         "path": "pointerevents/pointerevent_pointerup_isprimary_same_as_pointerdown-manual.html",
         "url": "/pointerevents/pointerevent_pointerup_isprimary_same_as_pointerdown-manual.html"
       },
       {
         "path": "pointerevents/pointerevent_pointerup_pointertype-manual.html",
         "url": "/pointerevents/pointerevent_pointerup_pointertype-manual.html"
       },
       {
-        "path": "pointerevents/pointerevent_properties_mouse-manual.html",
-        "url": "/pointerevents/pointerevent_properties_mouse-manual.html"
-      },
-      {
         "path": "pointerevents/pointerevent_releasepointercapture_events_to_original_target-manual.html",
         "url": "/pointerevents/pointerevent_releasepointercapture_events_to_original_target-manual.html"
       },
       {
         "path": "pointerevents/pointerevent_releasepointercapture_invalid_pointerid-manual.html",
         "url": "/pointerevents/pointerevent_releasepointercapture_invalid_pointerid-manual.html"
       },
       {
@@ -9049,16 +9061,20 @@
         "path": "2dcontext/drawing-text-to-the-canvas/2d.text.draw.align.start.rtl.html",
         "url": "/2dcontext/drawing-text-to-the-canvas/2d.text.draw.align.start.rtl.html"
       },
       {
         "path": "2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html",
         "url": "/2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html"
       },
       {
+        "path": "2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.NaN.html",
+        "url": "/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.NaN.html"
+      },
+      {
         "path": "2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.bound.html",
         "url": "/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.bound.html"
       },
       {
         "path": "2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.fontface.html",
         "url": "/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.fontface.html"
       },
       {
@@ -12525,22 +12541,22 @@
         "path": "WebIDL/ecmascript-binding/interface-object.html",
         "url": "/WebIDL/ecmascript-binding/interface-object.html"
       },
       {
         "path": "XMLHttpRequest/FormData-append.html",
         "url": "/XMLHttpRequest/FormData-append.html"
       },
       {
-        "path": "XMLHttpRequest/XMLHttpRequest-withCredentials.html",
-        "url": "/XMLHttpRequest/XMLHttpRequest-withCredentials.html"
-      },
-      {
-        "path": "XMLHttpRequest/XMLHttpRequest-withCredentials.worker.js",
-        "url": "/XMLHttpRequest/XMLHttpRequest-withCredentials.worker"
+        "path": "XMLHttpRequest/XMLHttpRequest-withCredentials.any.js",
+        "url": "/XMLHttpRequest/XMLHttpRequest-withCredentials.any.html"
+      },
+      {
+        "path": "XMLHttpRequest/XMLHttpRequest-withCredentials.any.js",
+        "url": "/XMLHttpRequest/XMLHttpRequest-withCredentials.any.worker"
       },
       {
         "path": "XMLHttpRequest/abort-after-receive.htm",
         "url": "/XMLHttpRequest/abort-after-receive.htm"
       },
       {
         "path": "XMLHttpRequest/abort-after-send.htm",
         "url": "/XMLHttpRequest/abort-after-send.htm"
@@ -12705,16 +12721,20 @@
         "path": "XMLHttpRequest/getresponseheader-special-characters.htm",
         "url": "/XMLHttpRequest/getresponseheader-special-characters.htm"
       },
       {
         "path": "XMLHttpRequest/getresponseheader-unsent-opened-state.htm",
         "url": "/XMLHttpRequest/getresponseheader-unsent-opened-state.htm"
       },
       {
+        "path": "XMLHttpRequest/headers-normalize-response.htm",
+        "url": "/XMLHttpRequest/headers-normalize-response.htm"
+      },
+      {
         "path": "XMLHttpRequest/interfaces.html",
         "url": "/XMLHttpRequest/interfaces.html"
       },
       {
         "path": "XMLHttpRequest/open-after-abort.htm",
         "url": "/XMLHttpRequest/open-after-abort.htm"
       },
       {
@@ -12993,16 +13013,20 @@
         "path": "XMLHttpRequest/send-authentication-cors-basic-setrequestheader.htm",
         "url": "/XMLHttpRequest/send-authentication-cors-basic-setrequestheader.htm"
       },
       {
         "path": "XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred.htm",
         "url": "/XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred.htm"
       },
       {
+        "path": "XMLHttpRequest/send-blob-with-no-mime-type.html",
+        "url": "/XMLHttpRequest/send-blob-with-no-mime-type.html"
+      },
+      {
         "path": "XMLHttpRequest/send-conditional.htm",
         "url": "/XMLHttpRequest/send-conditional.htm"
       },
       {
         "path": "XMLHttpRequest/send-content-type-charset.htm",
         "url": "/XMLHttpRequest/send-content-type-charset.htm"
       },
       {
@@ -14317,16 +14341,20 @@
         "path": "dom/collections/domstringmap-supported-property-names.html",
         "url": "/dom/collections/domstringmap-supported-property-names.html"
       },
       {
         "path": "dom/collections/namednodemap-supported-property-names.html",
         "url": "/dom/collections/namednodemap-supported-property-names.html"
       },
       {
+        "path": "dom/events/AddEventListenerOptions-once.html",
+        "url": "/dom/events/AddEventListenerOptions-once.html"
+      },
+      {
         "path": "dom/events/AddEventListenerOptions-passive.html",
         "url": "/dom/events/AddEventListenerOptions-passive.html"
       },
       {
         "path": "dom/events/CustomEvent.html",
         "url": "/dom/events/CustomEvent.html"
       },
       {
@@ -14469,16 +14497,20 @@
         "path": "dom/interfaces.html",
         "url": "/dom/interfaces.html"
       },
       {
         "path": "dom/lists/DOMTokenList-coverage-for-attributes.html",
         "url": "/dom/lists/DOMTokenList-coverage-for-attributes.html"
       },
       {
+        "path": "dom/lists/DOMTokenList-iteration.html",
+        "url": "/dom/lists/DOMTokenList-iteration.html"
+      },
+      {
         "path": "dom/lists/DOMTokenList-stringifier.html",
         "url": "/dom/lists/DOMTokenList-stringifier.html"
       },
       {
         "path": "dom/lists/DOMTokenList-value.html",
         "url": "/dom/lists/DOMTokenList-value.html"
       },
       {
@@ -15545,16 +15577,172 @@
         "path": "encoding/textencoder-constructor-non-utf.html",
         "url": "/encoding/textencoder-constructor-non-utf.html"
       },
       {
         "path": "encoding/textencoder-utf16-surrogates.html",
         "url": "/encoding/textencoder-utf16-surrogates.html"
       },
       {
+        "path": "encrypted-media/Google/encrypted-media-async-creation-with-gc.html",
+        "url": "/encrypted-media/Google/encrypted-media-async-creation-with-gc.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-async-setcert-with-gc.html",
+        "url": "/encrypted-media/Google/encrypted-media-async-setcert-with-gc.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-check-init-data-type.html",
+        "url": "/encrypted-media/Google/encrypted-media-check-init-data-type.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-clear-key-invalid-license.html",
+        "url": "/encrypted-media/Google/encrypted-media-clear-key-invalid-license.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-clearkey-update-non-ascii-input.html",
+        "url": "/encrypted-media/Google/encrypted-media-clearkey-update-non-ascii-input.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-events.html",
+        "url": "/encrypted-media/Google/encrypted-media-events.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-generate-request-disallowed-input.html",
+        "url": "/encrypted-media/Google/encrypted-media-generate-request-disallowed-input.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-keystatuses-multiple-sessions.html",
+        "url": "/encrypted-media/Google/encrypted-media-keystatuses-multiple-sessions.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-keystatuses-multiple-updates.html",
+        "url": "/encrypted-media/Google/encrypted-media-keystatuses-multiple-updates.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-keystatuses.html",
+        "url": "/encrypted-media/Google/encrypted-media-keystatuses.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-lifetime-mediakeys-with-session.html",
+        "url": "/encrypted-media/Google/encrypted-media-lifetime-mediakeys-with-session.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-lifetime-mediakeys.html",
+        "url": "/encrypted-media/Google/encrypted-media-lifetime-mediakeys.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-lifetime-mediakeysession-reference.html",
+        "url": "/encrypted-media/Google/encrypted-media-lifetime-mediakeysession-reference.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-lifetime-mediakeysession-release-noreference.html",
+        "url": "/encrypted-media/Google/encrypted-media-lifetime-mediakeysession-release-noreference.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-lifetime-mediakeysession-release.html",
+        "url": "/encrypted-media/Google/encrypted-media-lifetime-mediakeysession-release.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-lifetime-multiple-mediakeys.html",
+        "url": "/encrypted-media/Google/encrypted-media-lifetime-multiple-mediakeys.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-lifetime-reload.html",
+        "url": "/encrypted-media/Google/encrypted-media-lifetime-reload.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-not-callable-after-createsession.html",
+        "url": "/encrypted-media/Google/encrypted-media-not-callable-after-createsession.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-onencrypted.html",
+        "url": "/encrypted-media/Google/encrypted-media-onencrypted.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-playback-encrypted-and-clear-sources.html",
+        "url": "/encrypted-media/Google/encrypted-media-playback-encrypted-and-clear-sources.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-playback-multiple-sessions.html",
+        "url": "/encrypted-media/Google/encrypted-media-playback-multiple-sessions.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-playback-setmediakeys-after-src.html",
+        "url": "/encrypted-media/Google/encrypted-media-playback-setmediakeys-after-src.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-playback-setmediakeys-before-src.html",
+        "url": "/encrypted-media/Google/encrypted-media-playback-setmediakeys-before-src.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-playback-two-videos.html",
+        "url": "/encrypted-media/Google/encrypted-media-playback-two-videos.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-requestmediakeysystemaccess.html",
+        "url": "/encrypted-media/Google/encrypted-media-requestmediakeysystemaccess.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-reset-src-after-setmediakeys.html",
+        "url": "/encrypted-media/Google/encrypted-media-reset-src-after-setmediakeys.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-session-closed-event.html",
+        "url": "/encrypted-media/Google/encrypted-media-session-closed-event.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-setmediakeys-again-after-playback.html",
+        "url": "/encrypted-media/Google/encrypted-media-setmediakeys-again-after-playback.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-setmediakeys-again-after-resetting-src.html",
+        "url": "/encrypted-media/Google/encrypted-media-setmediakeys-again-after-resetting-src.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-setmediakeys-at-same-time.html",
+        "url": "/encrypted-media/Google/encrypted-media-setmediakeys-at-same-time.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-different-mediakeys.html",
+        "url": "/encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-different-mediakeys.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-the-same-mediakeys.html",
+        "url": "/encrypted-media/Google/encrypted-media-setmediakeys-multiple-times-with-the-same-mediakeys.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-setmediakeys-to-multiple-video-elements.html",
+        "url": "/encrypted-media/Google/encrypted-media-setmediakeys-to-multiple-video-elements.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-setmediakeys.html",
+        "url": "/encrypted-media/Google/encrypted-media-setmediakeys.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-syntax.html",
+        "url": "/encrypted-media/Google/encrypted-media-syntax.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-unique-origin.html",
+        "url": "/encrypted-media/Google/encrypted-media-unique-origin.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-update-disallowed-input.html",
+        "url": "/encrypted-media/Google/encrypted-media-update-disallowed-input.html"
+      },
+      {
+        "path": "encrypted-media/Google/encrypted-media-waiting-for-a-key.html",
+        "url": "/encrypted-media/Google/encrypted-media-waiting-for-a-key.html"
+      },
+      {
+        "path": "encrypted-media/idlharness.html",
+        "url": "/encrypted-media/idlharness.html"
+      },
+      {
         "path": "eventsource/dedicated-worker/eventsource-close.htm",
         "url": "/eventsource/dedicated-worker/eventsource-close.htm"
       },
       {
         "path": "eventsource/dedicated-worker/eventsource-constructor-url-bogus.htm",
         "url": "/eventsource/dedicated-worker/eventsource-constructor-url-bogus.htm"
       },
       {
@@ -15809,24 +15997,44 @@
         "path": "fetch/api/basic/request-forbidden-headers-worker.html",
         "url": "/fetch/api/basic/request-forbidden-headers-worker.html"
       },
       {
         "path": "fetch/api/basic/request-forbidden-headers.html",
         "url": "/fetch/api/basic/request-forbidden-headers.html"
       },
       {
+        "path": "fetch/api/basic/request-head-worker.html",
+        "url": "/fetch/api/basic/request-head-worker.html"
+      },
+      {
+        "path": "fetch/api/basic/request-head.html",
+        "url": "/fetch/api/basic/request-head.html"
+      },
+      {
         "path": "fetch/api/basic/request-headers-worker.html",
         "url": "/fetch/api/basic/request-headers-worker.html"
       },
       {
         "path": "fetch/api/basic/request-headers.html",
         "url": "/fetch/api/basic/request-headers.html"
       },
       {
+        "path": "fetch/api/basic/request-referrer.html",
+        "url": "/fetch/api/basic/request-referrer.html"
+      },
+      {
+        "path": "fetch/api/basic/response-url-worker.html",
+        "url": "/fetch/api/basic/response-url-worker.html"
+      },
+      {
+        "path": "fetch/api/basic/response-url.html",
+        "url": "/fetch/api/basic/response-url.html"
+      },
+      {
         "path": "fetch/api/basic/scheme-about-worker.html",
         "url": "/fetch/api/basic/scheme-about-worker.html"
       },
       {
         "path": "fetch/api/basic/scheme-about.html",
         "url": "/fetch/api/basic/scheme-about.html"
       },
       {
@@ -16013,16 +16221,24 @@
         "path": "fetch/api/policies/referrer-no-referrer-worker.html",
         "url": "/fetch/api/policies/referrer-no-referrer-worker.html"
       },
       {
         "path": "fetch/api/policies/referrer-no-referrer.html",
         "url": "/fetch/api/policies/referrer-no-referrer.html"
       },
       {
+        "path": "fetch/api/policies/referrer-origin-when-cross-origin-worker.html",
+        "url": "/fetch/api/policies/referrer-origin-when-cross-origin-worker.html"
+      },
+      {
+        "path": "fetch/api/policies/referrer-origin-when-cross-origin.html",
+        "url": "/fetch/api/policies/referrer-origin-when-cross-origin.html"
+      },
+      {
         "path": "fetch/api/policies/referrer-origin-worker.html",
         "url": "/fetch/api/policies/referrer-origin-worker.html"
       },
       {
         "path": "fetch/api/policies/referrer-origin.html",
         "url": "/fetch/api/policies/referrer-origin.html"
       },
       {
@@ -16409,16 +16625,20 @@
         "path": "html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location.html",
         "url": "/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location.html"
       },
       {
         "path": "html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit.html",
         "url": "/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit.html"
       },
       {
+        "path": "html/browsers/browsing-the-web/navigating-across-documents/empty_fragment.html",
+        "url": "/html/browsers/browsing-the-web/navigating-across-documents/empty_fragment.html"
+      },
+      {
         "path": "html/browsers/browsing-the-web/navigating-across-documents/javascript-url-query-fragment-components.html",
         "url": "/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-query-fragment-components.html"
       },
       {
         "path": "html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling.html",
         "url": "/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling.html"
       },
       {
@@ -17921,16 +18141,20 @@
         "path": "html/semantics/document-metadata/the-base-element/base_multiple.html",
         "url": "/html/semantics/document-metadata/the-base-element/base_multiple.html"
       },
       {
         "path": "html/semantics/document-metadata/the-base-element/base_srcdoc.html",
         "url": "/html/semantics/document-metadata/the-base-element/base_srcdoc.html"
       },
       {
+        "path": "html/semantics/document-metadata/the-link-element/document-without-browsing-context.html",
+        "url": "/html/semantics/document-metadata/the-link-element/document-without-browsing-context.html"
+      },
+      {
         "path": "html/semantics/document-metadata/the-link-element/link-load-event.html",
         "url": "/html/semantics/document-metadata/the-link-element/link-load-event.html"
       },
       {
         "path": "html/semantics/document-metadata/the-link-element/link-rellist.html",
         "url": "/html/semantics/document-metadata/the-link-element/link-rellist.html"
       },
       {
@@ -19261,16 +19485,20 @@
         "path": "html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html",
         "url": "/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html"
       },
       {
         "path": "html/semantics/embedded-content/the-img-element/img.complete.html",
         "url": "/html/semantics/embedded-content/the-img-element/img.complete.html"
       },
       {
+        "path": "html/semantics/embedded-content/the-img-element/invalid-src.html",
+        "url": "/html/semantics/embedded-content/the-img-element/invalid-src.html"
+      },
+      {
         "path": "html/semantics/embedded-content/the-img-element/relevant-mutations.html",
         "url": "/html/semantics/embedded-content/the-img-element/relevant-mutations.html"
       },
       {
         "path": "html/semantics/embedded-content/the-img-element/srcset/parse-a-srcset-attribute.html",
         "url": "/html/semantics/embedded-content/the-img-element/srcset/parse-a-srcset-attribute.html"
       },
       {
@@ -19773,16 +20001,20 @@
         "path": "html/semantics/interactive-elements/the-details-element/toggleEvent.html",
         "url": "/html/semantics/interactive-elements/the-details-element/toggleEvent.html"
       },
       {
         "path": "html/semantics/interactive-elements/the-dialog-element/dialog-close.html",
         "url": "/html/semantics/interactive-elements/the-dialog-element/dialog-close.html"
       },
       {
+        "path": "html/semantics/interactive-elements/the-dialog-element/dialog-open.html",
+        "url": "/html/semantics/interactive-elements/the-dialog-element/dialog-open.html"
+      },
+      {
         "path": "html/semantics/interactive-elements/the-dialog-element/dialog-showModal.html",
         "url": "/html/semantics/interactive-elements/the-dialog-element/dialog-showModal.html"
       },
       {
         "path": "html/semantics/interfaces.html",
         "url": "/html/semantics/interfaces.html"
       },
       {
@@ -19861,16 +20093,20 @@
         "path": "html/semantics/scripting-1/the-script-element/script-charset-01.html",
         "url": "/html/semantics/scripting-1/the-script-element/script-charset-01.html"
       },
       {
         "path": "html/semantics/scripting-1/the-script-element/script-charset-02.html",
         "url": "/html/semantics/scripting-1/the-script-element/script-charset-02.html"
       },
       {
+        "path": "html/semantics/scripting-1/the-script-element/script-charset-03.html",
+        "url": "/html/semantics/scripting-1/the-script-element/script-charset-03.html"
+      },
+      {
         "path": "html/semantics/scripting-1/the-script-element/script-for-event-xhtml.xhtml",
         "url": "/html/semantics/scripting-1/the-script-element/script-for-event-xhtml.xhtml"
       },
       {
         "path": "html/semantics/scripting-1/the-script-element/script-for-event.html",
         "url": "/html/semantics/scripting-1/the-script-element/script-for-event.html"
       },
       {
@@ -19885,16 +20121,20 @@
         "path": "html/semantics/scripting-1/the-script-element/script-languages-02.html",
         "url": "/html/semantics/scripting-1/the-script-element/script-languages-02.html"
       },
       {
         "path": "html/semantics/scripting-1/the-script-element/script-noembed-noframes-iframe.xhtml",
         "url": "/html/semantics/scripting-1/the-script-element/script-noembed-noframes-iframe.xhtml"
       },
       {
+        "path": "html/semantics/scripting-1/the-script-element/script-not-executed-after-shutdown.html",
+        "url": "/html/semantics/scripting-1/the-script-element/script-not-executed-after-shutdown.html"
+      },
+      {
         "path": "html/semantics/scripting-1/the-script-element/script-not-found-not-executed.html",
         "url": "/html/semantics/scripting-1/the-script-element/script-not-found-not-executed.html"
       },
       {
         "path": "html/semantics/scripting-1/the-script-element/script-onload-string.html",
         "url": "/html/semantics/scripting-1/the-script-element/script-onload-string.html"
       },
       {
@@ -20073,16 +20313,20 @@
         "path": "html/semantics/tabular-data/the-table-element/insertRow-method-02.html",
         "url": "/html/semantics/tabular-data/the-table-element/insertRow-method-02.html"
       },
       {
         "path": "html/semantics/tabular-data/the-table-element/insertRow-method-03.html",
         "url": "/html/semantics/tabular-data/the-table-element/insertRow-method-03.html"
       },
       {
+        "path": "html/semantics/tabular-data/the-table-element/remove-row.html",
+        "url": "/html/semantics/tabular-data/the-table-element/remove-row.html"
+      },
+      {
         "path": "html/semantics/tabular-data/the-table-element/tBodies.html",
         "url": "/html/semantics/tabular-data/the-table-element/tBodies.html"
       },
       {
         "path": "html/semantics/tabular-data/the-table-element/tFoot.html",
         "url": "/html/semantics/tabular-data/the-table-element/tFoot.html"
       },
       {
@@ -23041,16 +23285,24 @@
         "path": "pointerevents/pointerevent_constructor.html",
         "url": "/pointerevents/pointerevent_constructor.html"
       },
       {
         "path": "pointerevents/pointerevent_pointermove-on-chorded-mouse-button.html",
         "url": "/pointerevents/pointerevent_pointermove-on-chorded-mouse-button.html"
       },
       {
+        "path": "pointerevents/pointerevent_suppress_compat_events_on_click.html",
+        "url": "/pointerevents/pointerevent_suppress_compat_events_on_click.html"
+      },
+      {
+        "path": "pointerevents/pointerevent_suppress_compat_events_on_drag_mouse.html",
+        "url": "/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse.html"
+      },
+      {
         "path": "pointerevents/pointerevent_touch-action-illegal.html",
         "url": "/pointerevents/pointerevent_touch-action-illegal.html"
       },
       {
         "path": "pointerevents/pointerevent_touch-action-verification.html",
         "url": "/pointerevents/pointerevent_touch-action-verification.html"
       },
       {
@@ -29145,32 +29397,40 @@
         "path": "service-workers/service-worker/activate-event-after-install-state-change.https.html",
         "url": "/service-workers/service-worker/activate-event-after-install-state-change.https.html"
       },
       {
         "path": "service-workers/service-worker/activation-after-registration.https.html",
         "url": "/service-workers/service-worker/activation-after-registration.https.html"
       },
       {
+        "path": "service-workers/service-worker/activation.https.html",
+        "url": "/service-workers/service-worker/activation.https.html"
+      },
+      {
         "path": "service-workers/service-worker/active.https.html",
         "url": "/service-workers/service-worker/active.https.html"
       },
       {
         "path": "service-workers/service-worker/appcache-ordering-main.https.html",
         "url": "/service-workers/service-worker/appcache-ordering-main.https.html"
       },
       {
         "path": "service-workers/service-worker/claim-not-using-registration.https.html",
         "url": "/service-workers/service-worker/claim-not-using-registration.https.html"
       },
       {
         "path": "service-workers/service-worker/claim-using-registration.https.html",
         "url": "/service-workers/service-worker/claim-using-registration.https.html"
       },
       {
+        "path": "service-workers/service-worker/client-navigate.https.html",
+        "url": "/service-workers/service-worker/client-navigate.https.html"
+      },
+      {
         "path": "service-workers/service-worker/clients-get-cross-origin.https.html",
         "url": "/service-workers/service-worker/clients-get-cross-origin.https.html"
       },
       {
         "path": "service-workers/service-worker/clients-get.https.html",
         "url": "/service-workers/service-worker/clients-get.https.html"
       },
       {
@@ -29181,16 +29441,20 @@
         "path": "service-workers/service-worker/clients-matchall-include-uncontrolled.https.html",
         "url": "/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html"
       },
       {
         "path": "service-workers/service-worker/clients-matchall.https.html",
         "url": "/service-workers/service-worker/clients-matchall.https.html"
       },
       {
+        "path": "service-workers/service-worker/controller-on-disconnect.https.html",
+        "url": "/service-workers/service-worker/controller-on-disconnect.https.html"
+      },
+      {
         "path": "service-workers/service-worker/controller-on-load.https.html",
         "url": "/service-workers/service-worker/controller-on-load.https.html"
       },
       {
         "path": "service-workers/service-worker/controller-on-reload.https.html",
         "url": "/service-workers/service-worker/controller-on-reload.https.html"
       },
       {
@@ -29749,32 +30013,16 @@
         "path": "shadow-dom/untriaged/user-interaction/active-element/test-002.html",
         "url": "/shadow-dom/untriaged/user-interaction/active-element/test-002.html"
       },
       {
         "path": "shadow-dom/untriaged/user-interaction/editing/inheritance-of-content-editable-001.html",
         "url": "/shadow-dom/untriaged/user-interaction/editing/inheritance-of-content-editable-001.html"
       },
       {
-        "path": "shadow-dom/untriaged/user-interaction/focus-navigation/test-001.html",
-        "url": "/shadow-dom/untriaged/user-interaction/focus-navigation/test-001.html"
-      },
-      {
-        "path": "shadow-dom/untriaged/user-interaction/focus-navigation/test-002.html",
-        "url": "/shadow-dom/untriaged/user-interaction/focus-navigation/test-002.html"
-      },
-      {
-        "path": "shadow-dom/untriaged/user-interaction/focus-navigation/test-003.html",
-        "url": "/shadow-dom/untriaged/user-interaction/focus-navigation/test-003.html"
-      },
-      {
-        "path": "shadow-dom/untriaged/user-interaction/focus-navigation/test-004.html",
-        "url": "/shadow-dom/untriaged/user-interaction/focus-navigation/test-004.html"
-      },
-      {
         "path": "shadow-dom/untriaged/user-interaction/ranges-and-selections/test-001.html",
         "url": "/shadow-dom/untriaged/user-interaction/ranges-and-selections/test-001.html"
       },
       {
         "path": "shadow-dom/untriaged/user-interaction/ranges-and-selections/test-002.html",
         "url": "/shadow-dom/untriaged/user-interaction/ranges-and-selections/test-002.html"
       },
       {
@@ -30261,16 +30509,20 @@
         "path": "webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html",
         "url": "/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest.html"
       },
       {
         "path": "webaudio/the-audio-api/the-offlineaudiocontext-interface/current-time-block-size.html",
         "url": "/webaudio/the-audio-api/the-offlineaudiocontext-interface/current-time-block-size.html"
       },
       {
+        "path": "webaudio/the-audio-api/the-pannernode-interface/test-pannernode-automation.html",
+        "url": "/webaudio/the-audio-api/the-pannernode-interface/test-pannernode-automation.html"
+      },
+      {
         "path": "webdriver/interface.html",
         "url": "/webdriver/interface.html"
       },
       {
         "path": "webgl/bufferSubData.html",
         "url": "/webgl/bufferSubData.html"
       },
       {
@@ -34993,34 +35245,34 @@
         "path": "workers/constructors/Worker/AbstractWorker.onerror.html",
         "url": "/workers/constructors/Worker/AbstractWorker.onerror.html"
       },
       {
         "path": "workers/constructors/Worker/Blob-url.html",
         "url": "/workers/constructors/Worker/Blob-url.html"
       },
       {
-        "path": "workers/constructors/Worker/DedicatedWorkerGlobalScope-members.html",
-        "url": "/workers/constructors/Worker/DedicatedWorkerGlobalScope-members.html"
+        "path": "workers/constructors/Worker/DedicatedWorkerGlobalScope-members.worker.js",
+        "url": "/workers/constructors/Worker/DedicatedWorkerGlobalScope-members.worker"
       },
       {
         "path": "workers/constructors/Worker/ctor-1.html",
         "url": "/workers/constructors/Worker/ctor-1.html"
       },
       {
         "path": "workers/constructors/Worker/ctor-null.html",
         "url": "/workers/constructors/Worker/ctor-null.html"
       },
       {
         "path": "workers/constructors/Worker/ctor-undefined.html",
         "url": "/workers/constructors/Worker/ctor-undefined.html"
       },
       {
-        "path": "workers/constructors/Worker/expected-self-properties.html",
-        "url": "/workers/constructors/Worker/expected-self-properties.html"
+        "path": "workers/constructors/Worker/expected-self-properties.worker.js",
+        "url": "/workers/constructors/Worker/expected-self-properties.worker"
       },
       {
         "path": "workers/constructors/Worker/no-arguments-ctor.html",
         "url": "/workers/constructors/Worker/no-arguments-ctor.html"
       },
       {
         "path": "workers/constructors/Worker/resolve-empty-string.html",
         "url": "/workers/constructors/Worker/resolve-empty-string.html"
@@ -35029,18 +35281,18 @@
         "path": "workers/constructors/Worker/same-origin.html",
         "url": "/workers/constructors/Worker/same-origin.html"
       },
       {
         "path": "workers/constructors/Worker/terminate.html",
         "url": "/workers/constructors/Worker/terminate.html"
       },
       {
-        "path": "workers/constructors/Worker/unexpected-self-properties.html",
-        "url": "/workers/constructors/Worker/unexpected-self-properties.html"
+        "path": "workers/constructors/Worker/unexpected-self-properties.worker.js",
+        "url": "/workers/constructors/Worker/unexpected-self-properties.worker"
       },
       {
         "path": "workers/constructors/Worker/unresolvable-url.html",
         "url": "/workers/constructors/Worker/unresolvable-url.html"
       },
       {
         "path": "workers/constructors/Worker/use-base-url.html",
         "url": "/workers/constructors/Worker/use-base-url.html"
@@ -35852,16 +36104,141 @@
         "url": "/encoding/api-invalid-label.html"
       },
       {
         "path": "encoding/single-byte-decoder.html",
         "timeout": "long",
         "url": "/encoding/single-byte-decoder.html"
       },
       {
+        "path": "encrypted-media/clearkey-check-initdata-type.html",
+        "timeout": "long",
+        "url": "/encrypted-media/clearkey-check-initdata-type.html"
+      },
+      {
+        "path": "encrypted-media/clearkey-events.html",
+        "timeout": "long",
+        "url": "/encrypted-media/clearkey-events.html"
+      },
+      {
+        "path": "encrypted-media/clearkey-generate-request-disallowed-input.html",
+        "timeout": "long",
+        "url": "/encrypted-media/clearkey-generate-request-disallowed-input.html"
+      },
+      {
+        "path": "encrypted-media/clearkey-keystatuses-multiple-sessions.html",
+        "timeout": "long",
+        "url": "/encrypted-media/clearkey-keystatuses-multiple-sessions.html"
+      },
+      {
+        "path": "encrypted-media/clearkey-mp4-playback-persistent-usage-record-events.html",
+        "timeout": "long",
+        "url": "/encrypted-media/clearkey-mp4-playback-persistent-usage-record-events.html"
+      },
+      {
+        "path": "encrypted-media/clearkey-mp4-playback-persistent-usage-record.html",
+        "timeout": "long",
+        "url": "/encrypted-media/clearkey-mp4-playback-persistent-usage-record.html"
+      },
+      {
+        "path": "encrypted-media/clearkey-mp4-playback-retrieve-persistent-usage-record.html",
+        "timeout": "long",
+        "url": "/encrypted-media/clearkey-mp4-playback-retrieve-persistent-usage-record.html"
+      },
+      {
+        "path": "encrypted-media/clearkey-mp4-playback-temporary-events.html",
+        "timeout": "long",
+        "url": "/encrypted-media/clearkey-mp4-playback-temporary-events.html"
+      },
+      {
+        "path": "encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential.html",
+        "timeout": "long",
+        "url": "/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential.html"
+      },
+      {
+        "path": "encrypted-media/clearkey-mp4-playback-temporary-multikey.html",
+        "timeout": "long",
+        "url": "/encrypted-media/clearkey-mp4-playback-temporary-multikey.html"
+      },
+      {
+        "path": "encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-first.html",
+        "timeout": "long",
+        "url": "/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-first.html"
+      },
+      {
+        "path": "encrypted-media/clearkey-mp4-playback-temporary-two-videos.html",
+        "timeout": "long",
+        "url": "/encrypted-media/clearkey-mp4-playback-temporary-two-videos.html"
+      },
+      {
+        "path": "encrypted-media/clearkey-mp4-playback-temporary.html",
+        "timeout": "long",
+        "url": "/encrypted-media/clearkey-mp4-playback-temporary.html"
+      },
+      {
+        "path": "encrypted-media/clearkey-not-callable-after-createsession.html",
+        "timeout": "long",
+        "url": "/encrypted-media/clearkey-not-callable-after-createsession.html"
+      },
+      {
+        "path": "encrypted-media/drm-check-initdata-type.html",
+        "timeout": "long",
+        "url": "/encrypted-media/drm-check-initdata-type.html"
+      },
+      {
+        "path": "encrypted-media/drm-events.html",
+        "timeout": "long",
+        "url": "/encrypted-media/drm-events.html"
+      },
+      {
+        "path": "encrypted-media/drm-generate-request-disallowed-input.html",
+        "timeout": "long",
+        "url": "/encrypted-media/drm-generate-request-disallowed-input.html"
+      },
+      {
+        "path": "encrypted-media/drm-keystatuses-multiple-sessions.html",
+        "timeout": "long",
+        "url": "/encrypted-media/drm-keystatuses-multiple-sessions.html"
+      },
+      {
+        "path": "encrypted-media/drm-mp4-playback-temporary-events.html",
+        "timeout": "long",
+        "url": "/encrypted-media/drm-mp4-playback-temporary-events.html"
+      },
+      {
+        "path": "encrypted-media/drm-mp4-playback-temporary-multikey-sequential.html",
+        "timeout": "long",
+        "url": "/encrypted-media/drm-mp4-playback-temporary-multikey-sequential.html"
+      },
+      {
+        "path": "encrypted-media/drm-mp4-playback-temporary-multikey.html",
+        "timeout": "long",
+        "url": "/encrypted-media/drm-mp4-playback-temporary-multikey.html"
+      },
+      {
+        "path": "encrypted-media/drm-mp4-playback-temporary-setMediaKeys-first.html",
+        "timeout": "long",
+        "url": "/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-first.html"
+      },
+      {
+        "path": "encrypted-media/drm-mp4-playback-temporary-two-videos.html",
+        "timeout": "long",
+        "url": "/encrypted-media/drm-mp4-playback-temporary-two-videos.html"
+      },
+      {
+        "path": "encrypted-media/drm-mp4-playback-temporary.html",
+        "timeout": "long",
+        "url": "/encrypted-media/drm-mp4-playback-temporary.html"
+      },
+      {
+        "path": "encrypted-media/drm-not-callable-after-createsession.html",
+        "timeout": "long",
+        "url": "/encrypted-media/drm-not-callable-after-createsession.html"
+      },
+      {
         "path": "eventsource/dedicated-worker/eventsource-constructor-non-same-origin.htm",
         "timeout": "long",
         "url": "/eventsource/dedicated-worker/eventsource-constructor-non-same-origin.htm"
       },
       {
         "path": "eventsource/eventsource-constructor-non-same-origin.htm",
         "timeout": "long",
         "url": "/eventsource/eventsource-constructor-non-same-origin.htm"
@@ -37164,20 +37541,17 @@
       },
       {
         "path": "webdriver/navigation.py",
         "url": "/webdriver/navigation.py"
       }
     ]
   },
   "local_changes": {
-    "deleted": [
-      "web-animations/interfaces/AnimationTimeline/idlharness.html",
-      "web-animations/interfaces/AnimationTimeline/document-timeline.html"
-    ],
+    "deleted": [],
     "deleted_reftests": {},
     "items": {
       "reftest": {
         "html/semantics/grouping-content/the-ol-element/reversed-1a.html": [
           {
             "path": "html/semantics/grouping-content/the-ol-element/reversed-1a.html",
             "references": [
               [
@@ -37219,96 +37593,16 @@
               [
                 "/html/semantics/grouping-content/the-ol-element/reversed-1-ref.html",
                 "=="
               ]
             ],
             "url": "/html/semantics/grouping-content/the-ol-element/reversed-1d.html"
           }
         ]
-      },
-      "testharness": {
-        "2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.NaN.html": [
-          {
-            "path": "2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.NaN.html",
-            "url": "/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.NaN.html"
-          }
-        ],
-        "XMLHttpRequest/headers-normalize-response.htm": [
-          {
-            "path": "XMLHttpRequest/headers-normalize-response.htm",
-            "url": "/XMLHttpRequest/headers-normalize-response.htm"
-          }
-        ],
-        "dom/events/AddEventListenerOptions-once.html": [
-          {
-            "path": "dom/events/AddEventListenerOptions-once.html",
-            "url": "/dom/events/AddEventListenerOptions-once.html"
-          }
-        ],
-        "dom/lists/DOMTokenList-iteration.html": [
-          {
-            "path": "dom/lists/DOMTokenList-iteration.html",
-            "url": "/dom/lists/DOMTokenList-iteration.html"
-          }
-        ],
-        "fetch/api/basic/request-referrer.html": [
-          {
-            "path": "fetch/api/basic/request-referrer.html",
-            "url": "/fetch/api/basic/request-referrer.html"
-          }
-        ],
-        "fetch/api/policies/referrer-origin-when-cross-origin-worker.html": [
-          {
-            "path": "fetch/api/policies/referrer-origin-when-cross-origin-worker.html",
-            "url": "/fetch/api/policies/referrer-origin-when-cross-origin-worker.html"
-          }
-        ],
-        "fetch/api/policies/referrer-origin-when-cross-origin.html": [
-          {
-            "path": "fetch/api/policies/referrer-origin-when-cross-origin.html",
-            "url": "/fetch/api/policies/referrer-origin-when-cross-origin.html"
-          }
-        ],
-        "service-workers/service-worker/activation.https.html": [
-          {
-            "path": "service-workers/service-worker/activation.https.html",
-            "url": "/service-workers/service-worker/activation.https.html"
-          }
-        ],
-        "service-workers/service-worker/client-navigate.https.html": [
-          {
-            "path": "service-workers/service-worker/client-navigate.https.html",
-            "url": "/service-workers/service-worker/client-navigate.https.html"
-          }
-        ],
-        "service-workers/service-worker/controller-on-disconnect.https.html": [
-          {
-            "path": "service-workers/service-worker/controller-on-disconnect.https.html",
-            "url": "/service-workers/service-worker/controller-on-disconnect.https.html"
-          }
-        ],
-        "web-animations/interfaces/DocumentTimeline/idlharness.html": [
-          {
-            "path": "web-animations/interfaces/DocumentTimeline/idlharness.html",
-            "url": "/web-animations/interfaces/DocumentTimeline/idlharness.html"
-          }
-        ],
-        "web-animations/timing-model/timelines/default-document-timeline.html": [
-          {
-            "path": "web-animations/timing-model/timelines/default-document-timeline.html",
-            "url": "/web-animations/timing-model/timelines/default-document-timeline.html"
-          }
-        ],
-        "webaudio/the-audio-api/the-pannernode-interface/test-pannernode-automation.html": [
-          {
-            "path": "webaudio/the-audio-api/the-pannernode-interface/test-pannernode-automation.html",
-            "url": "/webaudio/the-audio-api/the-pannernode-interface/test-pannernode-automation.html"
-          }
-        ]
       }
     },
     "reftest_nodes": {
       "html/semantics/grouping-content/the-ol-element/reversed-1a.html": [
         {
           "path": "html/semantics/grouping-content/the-ol-element/reversed-1a.html",
           "references": [
             [
@@ -43690,12 +43984,12 @@
             "/webvtt/rendering/cues-with-video/processing-model/too_many_cues_wrapped-ref.html",
             "=="
           ]
         ],
         "url": "/webvtt/rendering/cues-with-video/processing-model/too_many_cues_wrapped.html"
       }
     ]
   },
-  "rev": "6744ac43d76207bdd1ececa4b91c9bfeef3ad522",
+  "rev": "7a6a5c9f436730f86123e6f48a44bf1b7ba5654f",
   "url_base": "/",
   "version": 3
 }
--- a/testing/web-platform/meta/mozilla-sync
+++ b/testing/web-platform/meta/mozilla-sync
@@ -1,1 +1,1 @@
-c16304ae0ddedde913c21f64f7a037311a702c6a
\ No newline at end of file
+41a1810c95089690ccfc3c1ea48b2ee82cd725b0
\ No newline at end of file
--- a/testing/web-platform/tests/2dcontext/tools/gentest.py
+++ b/testing/web-platform/tests/2dcontext/tools/gentest.py
@@ -123,28 +123,28 @@ def expand_nonfinite(method, argstr, tai
     return '\n'.join('%s(%s)%s' % (method, ', '.join(c), tail) for c in calls)
 
 # Run with --test argument to run unit tests
 if len(sys.argv) > 1 and sys.argv[1] == '--test':
     import doctest
     doctest.testmod()
     sys.exit()
 
-templates = yaml.load(open('templates.yaml').read())
-name_mapping = yaml.load(open('name2dir.yaml').read())
+templates = yaml.load(open('templates.yaml', "r").read())
+name_mapping = yaml.load(open('name2dir.yaml', "r").read())
 
 spec_assertions = []
-for s in yaml.load(open('spec.yaml').read())['assertions']:
+for s in yaml.load(open('spec.yaml', "r").read())['assertions']:
     if 'meta' in s:
         eval(compile(s['meta'], '<meta spec assertion>', 'exec'), {}, {'assertions':spec_assertions})
     else:
         spec_assertions.append(s)
 
 tests = []
-for t in sum([ yaml.load(open(f).read()) for f in ['tests.yaml', 'tests2d.yaml', 'tests2dtext.yaml']], []):
+for t in sum([ yaml.load(open(f, "r").read()) for f in ['tests.yaml', 'tests2d.yaml', 'tests2dtext.yaml']], []):
     if 'DISABLED' in t:
         continue
     if 'meta' in t:
         eval(compile(t['meta'], '<meta test>', 'exec'), {}, {'tests':tests})
     else:
         tests.append(t)
 
 category_names = []
@@ -538,17 +538,17 @@ def write_results():
     for item in category_contents_all['.']: results[item] = {}
 
     f = open('%s/results.html' % MISCOUTPUTDIR, 'w')
     f.write(templates['results'])
 
     if not os.path.exists('results.yaml'):
         print "Can't find results.yaml"
     else:
-        for resultset in yaml.load(open('results.yaml').read()):
+        for resultset in yaml.load(open('results.yaml', "r").read()):
             #title = "%s (%s)" % (resultset['ua'], resultset['time'])
             title = resultset['name']
             #assert title not in uas # don't allow repetitions
             if title not in uas:
                 uas.append(title)
                 uastrings[title] = resultset['ua']
             else:
                 assert uastrings[title] == resultset['ua']
--- a/testing/web-platform/tests/2dcontext/tools/specextract.py
+++ b/testing/web-platform/tests/2dcontext/tools/specextract.py
@@ -4,17 +4,17 @@ import html5lib.treebuilders.dom
 # Expected use:
 #   curl --compressed http://www.whatwg.org/specs/web-apps/current-work/ >current-work
 #   python specextract.py
 #
 # Generates current-work-canvas.xhtml, for use by gentest.py to create the annotated spec document
 
 def extract():
     parser = html5lib.html5parser.HTMLParser(tree=html5lib.treebuilders.dom.TreeBuilder)
-    doc = parser.parse(open('current-work'), encoding='utf-8')
+    doc = parser.parse(open('current-work', "r"), encoding='utf-8')
 
     head = doc.getElementsByTagName('head')[0]
     for n in head.childNodes:
         if n.tagName == 'script':
             head.removeChild(n)
 
     header = doc.getElementsByTagName('header')[0]
     #thecanvas = doc.getElementById('the-canvas') # doesn't work (?!)
--- a/testing/web-platform/tests/FileAPI/idlharness.idl
+++ b/testing/web-platform/tests/FileAPI/idlharness.idl
@@ -74,8 +74,18 @@ interface FileReader: EventTarget {
 
 partial interface URL {
 
   static DOMString createObjectURL(Blob blob);
   static DOMString createFor(Blob blob);
   static void revokeObjectURL(DOMString url);
 
 };
+
+[Constructor, Exposed=Worker]
+interface FileReaderSync {
+
+  // Synchronously return strings
+
+  ArrayBuffer readAsArrayBuffer(Blob blob);
+  DOMString readAsText(Blob blob, optional DOMString label);
+  DOMString readAsDataURL(Blob blob);
+};
--- a/testing/web-platform/tests/FileAPI/idlharness.worker.js
+++ b/testing/web-platform/tests/FileAPI/idlharness.worker.js
@@ -13,30 +13,17 @@ request.onload = function() {
     idl_array.add_untested_idls("interface ArrayBuffer {};");
     idl_array.add_untested_idls("interface ArrayBufferView {};");
     idl_array.add_untested_idls("interface URL {};");
     idl_array.add_untested_idls("interface EventTarget {};");
     idl_array.add_untested_idls("interface Event {};");
     idl_array.add_untested_idls("[TreatNonCallableAsNull] callback EventHandlerNonNull = any (Event event);");
     idl_array.add_untested_idls("typedef EventHandlerNonNull? EventHandler;");
 
-
-    var worker_idls =
-            '[Constructor, Exposed=Worker]\n' +
-            'interface FileReaderSync {\n' +
-            '\n' +
-            '  // Synchronously return strings\n' +
-            '\n' +
-            '  ArrayBuffer readAsArrayBuffer(Blob blob);\n' +
-            '  DOMString readAsText(Blob blob, optional DOMString label);\n' +
-            '  DOMString readAsDataURL(Blob blob);\n' +
-            '};';
-
     idl_array.add_idls(idls);
-    idl_array.add_idls(worker_idls);
 
     idl_array.add_objects({
         Blob: ['new Blob(["TEST"])'],
         File: ['new File(["myFileBits"], "myFileName")'],
         FileReader: ['new FileReader()'],
         FileReaderSync: ['new FileReaderSync()']
     });
 
--- a/testing/web-platform/tests/WebCryptoAPI/digest/digest.js
+++ b/testing/web-platform/tests/WebCryptoAPI/digest/digest.js
@@ -103,17 +103,17 @@ function run_test() {
     Object.keys(sourceData).forEach(function(size) {
         badNames.forEach(function(badName) {
 
             promise_test(function(test) {
                 var promise = subtle.digest({name: badName}, sourceData[size])
                 .then(function(result) {
                     assert_unreached("digest() should not have worked for " + alg + ":" + size);
                 }, function(err) {
-                    assert_equals(err.message, "OperationError", "Bad algorithm name should cause OperationError")
+                    assert_equals(err.name, "NotSupportedError", "Bad algorithm name should cause NotSupportedError")
                 });
 
                 return promise;
             }, badName + " with " + size);
 
         });
     });
 
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.js
@@ -0,0 +1,40 @@
+test(function() {
+  var client = new XMLHttpRequest()
+  assert_false(client.withCredentials, "withCredentials defaults to false")
+  client.withCredentials = true
+  assert_true(client.withCredentials, "is true after setting")
+}, "default value is false, set value is true")
+
+test(function() {
+  var client = new XMLHttpRequest()
+  client.open("GET", "resources/delay.py?ms=1000", true)
+  client.withCredentials = true
+  assert_true(client.withCredentials, "set in OPEN state")
+}, "can also be set in OPEN state")
+
+test(function() {
+  var client = new XMLHttpRequest()
+  client.open("GET", "resources/delay.py?ms=1000", false)
+  client.withCredentials = true
+  assert_true(client.withCredentials, "set in OPEN state")
+}, "setting on synchronous XHR")
+
+async_test(function() {
+  var client = new XMLHttpRequest()
+  client.open("GET", "resources/delay.py?ms=1000")
+  client.send()
+  assert_throws("InvalidStateError", function() { client.withCredentials = true })
+  client.onreadystatechange = this.step_func(function() {
+    assert_throws("InvalidStateError", function() { client.withCredentials = true })
+    if (client.readyState === 4) {
+      this.done()
+    }
+  })
+}, "setting withCredentials when not in UNSENT, OPENED state (asynchronous)")
+
+test(function() {
+  var client = new XMLHttpRequest()
+  client.open("GET", "resources/delay.py?ms=1000", false)
+  client.send();
+  assert_throws("InvalidStateError", function() { client.withCredentials = true })
+}, "setting withCredentials when in DONE state (synchronous)")
deleted file mode 100644
--- a/testing/web-platform/tests/XMLHttpRequest/XMLHttpRequest-withCredentials.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!doctype html>
-<meta charset=utf-8>
-<title>XMLHttpRequest#withCredentials</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src=XMLHttpRequest-withCredentials.js></script>
-<link rel="help" href="https://xhr.spec.whatwg.org/#the-withcredentials-attribute"
-      data-tested-assertations="following::ol/li[1] following::ol/li[2]
-                                following::ol/li[3] following::ol/li[4]">
-<div id="log"></div>
-<script>
-test_withCredentials(false)
-</script>
deleted file mode 100644
--- a/testing/web-platform/tests/XMLHttpRequest/XMLHttpRequest-withCredentials.js
+++ /dev/null
@@ -1,42 +0,0 @@
-function test_withCredentials(worker) {
-  test(function() {
-    var client = new XMLHttpRequest()
-    assert_false(client.withCredentials, "withCredentials defaults to false")
-    client.withCredentials = true
-    assert_true(client.withCredentials, "is true after setting")
-  }, "default value is false, set value is true")
-
-  test(function() {
-    var client = new XMLHttpRequest()
-    client.open("GET", "resources/delay.py?ms=1000", true)
-    client.withCredentials = true
-    assert_true(client.withCredentials, "set in OPEN state")
-  }, "can also be set in OPEN state")
-
-  test(function() {
-    var client = new XMLHttpRequest()
-    client.open("GET", "resources/delay.py?ms=1000", false)
-    client.withCredentials = true
-    assert_true(client.withCredentials, "set in OPEN state")
-  }, "setting on synchronous XHR")
-
-  async_test(function() {
-    var client = new XMLHttpRequest()
-    client.open("GET", "resources/delay.py?ms=1000")
-    client.send()
-    assert_throws("InvalidStateError", function() { client.withCredentials = true })
-    client.onreadystatechange = this.step_func(function() {
-      assert_throws("InvalidStateError", function() { client.withCredentials = true })
-      if (client.readyState === 4) {
-        this.done()
-      }
-    })
-  }, "setting withCredentials when not in UNSENT, OPENED state (asynchronous)")
-
-  test(function() {
-    var client = new XMLHttpRequest()
-    client.open("GET", "resources/delay.py?ms=1000", false)
-    client.send();
-    assert_throws("InvalidStateError", function() { client.withCredentials = true })
-  }, "setting withCredentials when in DONE state (synchronous)")
-}
deleted file mode 100644
--- a/testing/web-platform/tests/XMLHttpRequest/XMLHttpRequest-withCredentials.worker.js
+++ /dev/null
@@ -1,4 +0,0 @@
-importScripts("/resources/testharness.js")
-importScripts("XMLHttpRequest-withCredentials.js")
-test_withCredentials(true);
-done()
--- a/testing/web-platform/tests/XMLHttpRequest/open-url-multi-window.htm
+++ b/testing/web-platform/tests/XMLHttpRequest/open-url-multi-window.htm
@@ -10,19 +10,20 @@
     <div id="log"></div>
     <script>
       var test = async_test()
       function init() {
         test.step(function() {
           var client = new self[0].XMLHttpRequest()
           client.onreadystatechange = function() {
             test.step(function() {
-              if(client.readyState == 4)
+              if(client.readyState == 4) {
                 assert_equals(client.responseText, "bottom\n")
                 test.done()
+              }
             })
           }
           client.open("GET", "folder.txt")
           client.send("")
         })
       }
     </script>
     <iframe src="resources/init.htm"></iframe>
--- a/testing/web-platform/tests/XMLHttpRequest/resources/last-modified.py
+++ b/testing/web-platform/tests/XMLHttpRequest/resources/last-modified.py
@@ -1,7 +1,7 @@
 def main(request, response):
     import datetime, os
     srcpath = os.path.join(os.path.dirname(__file__), "well-formed.xml")
     srcmoddt = datetime.datetime.fromtimestamp(os.path.getmtime(srcpath))
     response.headers.set("Last-Modified", srcmoddt.strftime("%a, %d %b %Y %H:%M:%S GMT"))
     response.headers.set("Content-Type", "application/xml")
-    return open(srcpath).read()
+    return open(srcpath, "r").read()
--- a/testing/web-platform/tests/XMLHttpRequest/responsexml-basic.htm
+++ b/testing/web-platform/tests/XMLHttpRequest/responsexml-basic.htm
@@ -14,17 +14,17 @@
         var client = new XMLHttpRequest()
         assert_equals(client.responseXML, null)
         client.open("GET", "resources/well-formed.xml", false)
         assert_equals(client.responseXML, null)
         client.send(null)
         assert_equals(client.responseXML.documentElement.localName, "html", 'localName is html')
         assert_equals(client.responseXML.documentElement.childNodes.length, 5, 'childNodes is 5')
         assert_equals(client.responseXML.getElementById("n1").localName, client.responseXML.documentElement.childNodes[1].localName)
-        assert_equals(client.responseXML.getElementById("n2"), null, 'getElementById("n2")')
+        assert_equals(client.responseXML.getElementById("n2"), client.responseXML.documentElement.childrenNodes[3], 'getElementById("n2")')
         assert_equals(client.responseXML.getElementsByTagName("p")[1].namespaceURI, "namespacesarejuststrings", 'namespaceURI')
       })
       test(function() {
         var client = new XMLHttpRequest()
         client.open("GET", "resources/status.py?type=application/xml", false)
         client.send(null)
         assert_equals(client.responseXML, null)
       }, 'responseXML on empty response documents')
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/XMLHttpRequest/send-blob-with-no-mime-type.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[4]/dl[1]/dd[2]/p[3]"/>
+    <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute"  data-tested-assertations="following::ol[1]/li[3]"/>
+    <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute"  data-tested-assertations="following::ol[1]/li[4]"/>
+    <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute"  data-tested-assertations="following::a[contains(@href,'#blob-response-entity-body')]/.."/>
+
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <title>XMLHttpRequest: The send() method: Blob data with no mime type</title>
+</head>
+
+<body>
+    <div id="log"></div>
+
+    <script type="text/javascript">
+        var blobTests = [
+            ["no mime type", new Blob(["data"])],
+            ["invalid mime type", new Blob(["data"], {type: "Invalid \r\n mime \r\n type"})]
+        ];
+
+        blobTests.forEach(function(item){
+            test(function() {
+                var xhr = new XMLHttpRequest();
+                xhr.open("POST", "./resources/content.py", false);
+                xhr.send(item[1]);
+
+                assert_equals(xhr.getResponseHeader("X-Request-Content-Length"), "4");
+                assert_equals(xhr.getResponseHeader("X-Request-Content-Type"), "NO");
+            }, "Synchronous blob loading with " + item[0]);
+
+            var atest = async_test("Asynchronous blob loading with " + item[0]);
+            atest.step(function() {
+                var xhr = new XMLHttpRequest();
+                xhr.onreadystatechange = function() {
+                    if (xhr.readyState == 4) {
+                        atest.step(function() {
+                            assert_equals(xhr.getResponseHeader("X-Request-Content-Length"), "4");
+                            assert_equals(xhr.getResponseHeader("X-Request-Content-Type"), "NO");
+                        });
+                        atest.done();
+                    }
+                }
+                xhr.open("POST", "./resources/content.py", true);
+                xhr.send(item[1]);
+            });
+        });
+    </script>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/.editorconfig
@@ -0,0 +1,10 @@
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/CONTRIBUTING.md
@@ -0,0 +1,370 @@
+Annotation-model: Guidelines for Contributing Tests
+===================================================
+
+This document describes the method people should use for authoring tests and
+integrating them into the repository.  Anyone is welcome to submit new tests to
+this collection.  If you do, please create the tests following the guidelines
+below.  Then submit them as a pull request so they can be evaluated
+
+Structure
+---------
+
+Tests are organized by major section of the Annotation Model specification.  The
+folders associated with these are:
+
+* annotations
+* bodiesTargets
+* collections
+* specificResources
+  * selectors
+  * states
+
+Within these folders, special files ending with the suffix ".test" provide the source
+for the test as a set of declarative assertions about the required shape of the conforming
+JSON object.  These files are transformed using a test generation tool into ".html" files
+that are then accessed by the Web Platform Test framework.
+
+There are a few other folders that provide supporting materials for the tests:
+
+* common - assertionObjects, conditionObjects, and other supporting materials
+* definitions - JSON Schema definitions that can be referenced
+* scripts - JavaScript that are included by tests
+* tools - supporting scripts and files
+
+NOTE: The files in the definitions folder are expected to be JSON Schema
+definitions - basically commonly used concepts that are referenced by other JSON
+Schema files in the system.  All of these 'definitions' are preloaded by the
+system before any other parts of a test are processed.
+
+Test Cases
+----------
+
+Each test is expressed as a simple (or complex) requirement in a test file.
+For each section of the document, the requirement is represented as a structure
+that describes the nature of the test, and then includes or references minimal
+JSON Schema that test the assertions implied by the requirement.
+
+The structure of a test case is defined using a [JSON-LD
+Context](JSONtest-v1.jsonld).  That context defines the following terms:
+
+|Keyword        | Values          | Meaning
+|---------------|-----------------|---------
+|name           | string          | The name of this test for display purposes
+|description    | string          | A long self-describing paragraph that explains the purpose of the test and the expected input
+|ref            | URI             | An optional reference to the portion of the specification to which the test relates
+|testType       | `automated`, `manual`, `ref` | The type of test - this informs [WPT](https://github.com/w3c/web-platform-tests) how the test should be controlled and presented
+|assertions     | list of URI, List @@@ATRISK@@@, or AssertionObject | The ordered collection of tests the input should be run against. See [JSON Schema Usage](#jsonSchema) for the structure of the objects.  URI is relative to the top level folder of the test collection if it has a slash; relative to the current directory if it does not. @@@@ATRISK@@@@ Lists can be nested to define groups of sub-tests.  Assertions / groups can be conditionally skipped.  See [Assertion Lists](#assertionLists) for more details.
+
+Each test case has a suffix of `.test` and a shape like:
+
+<pre>
+{
+  "@context": "https://www.w3.org/ns/JSONtest-v1.jsonld",
+  "name": "Verify annotation conforms to the model",
+  "description": "Supply an example annotation that conforms to the basic structure.",
+  "ref": "https://www.w3.org/TR/annotation-model/#model",
+  "testType": "manual",
+  "assertions": [
+    "common/has_context.json",
+    "common/has_id.json",
+    {
+      "$schema": "http://json-schema.org/draft-04/schema#",
+      "title": "Verify annotation has target",
+      "type": "object",
+      "expectedResult": "valid",
+      "errorMessage": "The object was missing a required 'target' property",
+      "properties": {
+        "target": {
+          "anyOf": [
+          {
+            "type": "string"
+          },
+          {
+            "type": "array",
+            "anyOf": [
+            {
+              "type": "string"
+            }
+            ]
+          }
+          ],
+            "not": {"type": "object"}
+        }
+      },
+      "required": ["target"]
+    }
+  ]
+}
+</pre>
+
+External references are used when the "assertion" is a common one that needs to
+be checked on many different test cases (e.g., that there is an @context in the
+supplied annotation).
+
+### <a id="assertionLists">Assertion Lists</a> ###
+
+The `assertion` list is an ordered list of assertions that will be evaluated
+against the submitted content. The list is *required*, and MUST have at least
+one entry. Entries in the list have the following types:
+
+* AssertionObject
+
+An in-line Object as defined in the section [Assertion
+Objects](#assertionObjects).
+* URI
+
+A relative or absolute URI that references a AssertionObject in a .json file.
+If the URI is relative but contains no slashes, then it is considered to be
+in the current directory.  If the URI is relative, contains slashes, but
+**does not start with a slash** then it is considered relative to the top of
+the tree of the current test collection (e.g., `annotation-model`).
+* List @@@ATRISK@@@
+
+A nested Assertion List.  While nested Assertion Lists are optional, if one
+is present it MUST have at least one entry.  Entries are as in this list.
+Assertion Lists can be nested to any depth (but don't do that - it would be
+too hard to maintain).
+
+
+<a id="assertionObjects">Assertion Objects</a>
+-----------------
+
+In this collection of tests, Assertion Objects can be contained inline in the
+`.test` files or contained in external files with the suffix `.json`.  The
+vocabularly and structure is as defined in [JSON Schema
+v4](http://json-schema.org/documentation.html) augmented with some additional
+properties defined in this section.
+
+In general each JSON Schema definition provided in this test suite should be as
+minimal as possible.  This promotes clarity and increases the likelihood that
+it is correct.  While it is ---possible--- to create JSON Schema files that
+enforce many different requirements on a data model, it increases the
+complexity and can also reduce the atomicity of tests / sub-tests (because a
+    test ends up testing more than one thing).  Please try to avoid creating
+complex JSON Schema.  (A notable exception is the situation where multiple
+    properties of a structure are interdependent.)
+
+Tools such as [the JSON Schema Creator](http://jsonschema.net/) may be helpful
+in creating schema snippets that can be integrated into JSONtest Assertion
+Objects.  Remember that the JSON Schema you create should be as permissive as
+possible to address the various shapes that a give property might take (e.g., a
+    'foo' might be a string or an object that contains sub-properties that express
+    the string, or an array of 1 or more objects with those sub-properties).
+
+In addition to the validation keys defined in JSON Schema v4, Schema files in
+this collection are also permitted to use the following keywords:
+
+|Keyword        | Values          | Meaning |
+|---------------|-----------------|---------|
+|onUnexpectedResult   | `failAndContinue`, `failAndSkip`, `failAndAbort`, `passAndContinue`, `passAndSkip`, `passAndAbort` | Action to take when the result is not as expected. Default is `failAndContinue` |
+|assertionType  | `must`, `may`, `should` | Informs the system about the severity of a failure. The default is `must` |
+|assertionFile | URI      | An external file that contains an assertion SCHEMA.  When this value is supplied, and local properties will override the ones loaded from the external file.
+|errorMessage   | string          | A human readable explanation of what it means if the test fails.  |
+|expectedResult | `valid`, `invalid`  | Tells the framework whether validating against this schema is expected to succeed or fail.  The default is `valid` |
+
+
+### Example Assertion Object ###
+
+<pre>
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+    "title": "Verify annotation has @context",
+    "type": "object",
+    "expectedResult" : "valid",
+    "properties": {
+      "@context": {
+        "anyOf": [
+        {
+          "type": "string"
+        },
+        {
+          "type": "array",
+          "anyOf": [
+          {
+            "type": "string"
+          }
+          ]
+        }
+        ],
+          "not": {"type": "object"}
+      }
+    },
+    "required": ["@context"]
+}
+</pre>
+
+Note that in the case where a feature is *optional* the JSON Schema MUST be
+crafted such that if the attribute is permitted to be missing from the content
+(so that the result is `true`), but when the attribute is present in the
+content it conforms to any requirements.
+
+
+
+<a id="conditionObjects">Condition Objects</a>
+-----------------
+
+A Condition Object is a sub-class of an Assertion Object.  It allows the
+specification of the evaluation strategy for the assertions referenced by the
+object.  An object is a Condition Object IFF it has a `assertions` property. In
+this case, there MUST NOT be an `assertionFile` property.
+
+
+|Keyword        | Values          | Meaning |
+|---------------|-----------------|---------|
+|compareWith    | `and`, `or` | How should the result of any referenced assertions be compared.  Defaults to `and`.  Note that this implies there is also an assertions property with a nested list of assertions to compare. |
+|assertions     | a list of assertions as in a Test Case above. This is required if there is a compareWith property |
+
+
+An example of a test that would pass if there were an `@context` OR there were an `@id`:
+
+<pre>
+{
+  "@context": "https://www.w3.org/ns/JSONtest-v1.jsonld",
+    "name": "A test that has an 'or' clause",
+    "description": "A complex test that uses or-ing among a list of assertions",
+    "ref": "https://www.w3.org/TR/annotation-model/#model",
+    "testType": "manual",
+    "assertions": [
+    { "$schema": "http://json-schema.org/draft-04/schema#",
+      "title": "must have context or id",
+      "description": "A more complex example that allows one of many options to pass",
+      "assertions": [
+      { "title": "Condition Object",
+        "description": "A pseudo-test that will get a result from the aggregate of its children",
+        "assertionType": "must",
+        "expectedResult": "valid",
+        "errorMessage": "Error: None of the various options were present",
+        "compareWith": "or",
+        "assertions": [
+          "common/has_context.json",
+        "common/has_id.json"
+        ]
+      }
+      ]
+    }
+    ]
+}
+</pre>
+
+
+Command Line Tools
+------------------
+
+### Building the Test Files ###
+
+The actual .html test case files are generated using the script
+tools/make_tests.py.  This script will search the directory heriarchy looking for
+files ending on `.test` and creating `.html` files from them using the template in
+the tools folder.  If you want to regenerate the examples too, supply the
+`--examples` option to the script.
+
+Note that when submitting tests to the repository, the `.html` versions must be
+included.
+
+### Testing the Tests ###
+
+### Driving Tests with Input Files ###
+
+Complex Examples
+----------------
+
+This section is a collection of more complex examples to illustrate the
+expressive power of the [Assertion List](#assertionLists) structure.  These can
+be used as templates for creating actual `.test` files.
+
+### Including and Overriding an Assertion ###
+
+Assertions can be contained in external `.json` files.  It is possible for an
+object in an Assertion List to include the external file and override one or
+more of its properties:
+
+<pre>
+{
+  "@context": "https://www.w3.org/ns/JSONtest-v1.jsonld",
+    "name": "Permit no target property",
+    "description": "Ensure there is no 'target' property when there is a 'randomName' property in the Annotation",
+    "assertions": [
+    {
+      "$schema": "http://json-schema.org/draft-04/schema#",
+      "title": "Verify annotation has randomName",
+      "type": "object",
+      "properties": {
+        "randomName": {
+          "type": "string"
+        }
+      },
+      "required": ["randomName"]
+    },
+    { "assertionFile" : "common/target.json",
+      "title" : "Require target to be missing",
+      "expectedResult" : "invalid",
+      "errorMessage" : "The target MUST not be present when 'randomName' is also present",
+    }
+    ]
+}
+</pre>
+
+### Nested Assertion Collections with Skip ###
+
+Assertion Lists can be nested within Assertion Lists.  This feature, combined
+with the `onUnexpectedResult` property, makes it possible to skip a collection
+of tests when an assertion in the list is not satisfied:
+
+<pre>
+{
+  "@context": "https://www.w3.org/ns/JSONtest-v1.jsonld",
+    "name": "If there is no 'target' property, skip some tests",
+    "description": "When 'target' is not present, other properties related to 'target' are not required",
+    "assertions": [
+      "common/context.json",
+    [
+    { "assertionFile" : "common/target.json",
+      "errorMessage" : "Target was not present so skip the rest of this section",
+      "onUnexpectedResult" : "failAndSkip"
+    },
+    "sometest.json",
+    "sometest2.json",
+    "sometest3.json"
+    ]
+    ]
+} ;
+</pre>
+
+### Assertion that finds a specific @context Value ###
+
+Sometimes you want a property to be flexible, but to have one and only one of a
+specific value.  This is especially true with, for example, @context in JSON-LD.
+One way you might do this is:
+
+<pre>
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+    "title": "Verify a specific @context",
+    "type": "object",
+    "expectedResult" : "valid",
+    "properties": {
+      "@context": {
+        "anyOf": [
+        {
+          "type": "string"
+            "enum": [ "http://www.w3.org/ns/anno.jsonld" ]
+        },
+        {
+          "type": "array",
+          "minitems": "1",
+          "uniqueItems": true,
+          "additionalItems": true,
+          "items" : [
+          { "type": "string",
+            "enum": [ "http://www.w3.org/ns/anno.jsonld" ]
+          }
+          ]
+        }
+        ],
+          "not": {"type": "object"}
+      }
+    },
+    "required": ["@context"]
+}
+
+</pre>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/OWNERS
@@ -0,0 +1,2 @@
+@halindrome
+@bigbluehat
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/README.md
@@ -0,0 +1,81 @@
+Annotation-model: Tests for the Web Annotation Data Model
+=========================================================
+
+The [Web Annotation Data Model](https://www.w3.org/TR/annotation-model)
+specification presents a JSON-oriented collection of terms and structure that
+permit the sharing of annotations about other content.
+
+The purpose of these tests is to help validate that each of the structural
+requirements expressed in the Data Model specification are properly supported
+by implementations.
+
+The general approach for this testing is to enable both manual and automated
+testing. However, since the specification has no actual user interface
+requirements, there is no general automation mechanism that can be presented
+for clients.  Instead, the automation mechanism is one where client
+implementors could take advantage of the plumbing we provide here to push their
+data into the tests and collect the results of the testing.  This assumes
+knowledge of the requirements of each test / collection of tests so that the
+input data is relevant.  Each test or test collection contains information
+sufficient for the task.
+
+Running Tests
+-------------
+
+In the case of this test collection, we will be initially creating manual
+tests.  These will automatically determine pass or fail and generate output for
+the main WPT window.  The plan is to minimize the number of such tests to
+ease the burden on the testers while still exercising all the features.
+
+The workflow for running these tests is something like:
+
+1. Start up the test driver window and select the annotation-model tests -
+   click "Start"
+2. A window pops up that shows a test - the description of which tells the
+   tester what input is expected.  The window contains a textarea into which
+   the input can be typed / pasted, along with a button to click to start
+   testing that input.
+3. The tester (presumably in another window) brings up their annotation client
+   and uses it to generate an annotation that supplies the requested structure.
+   They then copy / paste that into the aforementioned textarea and select the
+   button.
+4. The test runs.  Success or failure is determined and reported to the test
+   driver window, which then cycles to the next test in the sequence.
+5. Repeat steps 2-4 until done.
+6. Download the JSON format report of test results, which can then be visually
+   inspected, reported on using various tools, or passed on to W3C for
+   evaluation and collection in the Implementation Report via github.
+
+**Remember that while these tests are written to help exercise implementations,
+their other (important) purpose is to increase confidence that there are
+interoperable implementations.** So, implementers are our audience, but these
+tests are not meant to be a comprehensive collection of tests for a client that
+might implement the Recommendation.  The bulk of the tests are manual because
+there are no UI requirements in the Recommendation that would make it possible
+to effectively stimulate every client portably.
+
+Having said that, because the structure of these "manual" tests is very rigid,
+it is possible for an implementer who understands test automation to use an
+open source tool such as [Selenium](http://www.seleniumhq.org/) to run these
+"manual" tests against their implementation - exercising their implementation
+against content they provide to create annotations and feed the data into our
+test input field and run the test.
+
+Capturing and Reporting Results
+-------------------------------
+
+As tests are run against implementations, if the results of testing are
+submitted to [test-results](https://github.com/w3c/test-results/) then they will
+be automatically included in documents generated by
+[wptreport](https://www.github.com/w3c/wptreport). The same tool can be used
+locally to view reports about recorded results.
+
+
+Automating Test Execution
+-------------------------
+
+Writing Tests
+-------------
+
+If you are interested in writing tests for this environment, see the
+associated [CONTRIBUTING](CONTRIBUTING.md) document.
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/TODO
@@ -0,0 +1,18 @@
+Things still to be developed:
+
+Script to run .jsonld files in tools/tests against .test files
+
+Script to batch run submitted .jsonld files from an implementation against .test
+files
+
+Websocket communication to runner tests with a corresponding listener that an
+implementation could use to auto-submit jsonld into the "manual" tests
+
+Change JSONtest logic so that it loads all of the required external files during
+initialization so that it can populate the list of assertions for the HTML in a
+manual test.  Use Promises and Promise.all() to achieve this.
+
+Add a Skip option to tools/runner
+
+Add a tuple mode for evaluating RDF declaratively as well.
+
new file mode 100644
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/definitions/choiceSet.json
@@ -0,0 +1,18 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "id" : "choiceSet.json",
+  "type": "object",
+  "properties":
+  {
+    "type":
+    {
+      "type": "string",
+      "enum": ["Choice", "Composite", "List", "Independents"]
+    },
+    "items" :
+    {
+      "type" : "array"
+    }
+  },
+  "required": [ "type", "items" ]
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/definitions/externalWebResource.json
@@ -0,0 +1,13 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "id" : "externalWebResource.json",
+  "type": "object",
+  "properties":
+  {
+    "id":
+    {
+      "$ref": "stringUri.json#"
+    }
+  },
+  "required": [ "id" ]
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/definitions/specificResource.json
@@ -0,0 +1,17 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "id" : "specificResource.json",
+  "type": "object",
+  "properties":
+  {
+    "source":
+    {
+      "type": ["string", "object" ],
+      "oneOf": [
+      { "$ref": "stringUri.json#" },
+      { "$ref": "externalWebResource.json#"}
+      ]
+    }
+  },
+  "required": ["source"]
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/definitions/stringUri.json
@@ -0,0 +1,6 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "id" : "stringUri.json",
+  "type": "string",
+  "format": "uri"
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/definitions/textualBody.json
@@ -0,0 +1,13 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "id" : "textualBody.json",
+  "type": "object",
+  "properties":
+  {
+    "value":
+    {
+      "type": "string"
+    }
+  },
+  "required": [ "value" ]
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/examples/README.md
@@ -0,0 +1,9 @@
+Example Tests
+=============
+
+The tests in this folder are examples to show how the framework
+should be used.  They are NOT intended for conformance testing use, and
+tools/make_tests.py will not generate the tests in this folder without the
+`--examples` option.
+
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/examples/example1-manual.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html>
+<head>
+<title>Verify annotation conforms to the model</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/annotation-model/scripts/ajv.min.js"></script>
+<script src="/annotation-model/scripts/JSONtest.js"></script>
+<script>
+setup({explicit_timeout: true, explicit_done: true });
+
+var theDefinitions=[
+  "definitions/specificResource.json",
+  "definitions/stringUri.json",
+  "definitions/choiceSet.json",
+  "definitions/externalWebResource.json",
+  "definitions/textualBody.json"
+];
+
+var theTestFile="example1.test";
+
+var runningTest = new JSONtest( {
+    "testInput"   : "annotation-input",
+    "runTest"     : "annotation-run",
+    "closeWindow" : "annotation-close",
+    "schemaDefs"  : theDefinitions,
+    "testFile"    : theTestFile
+} ) ;
+
+</script>
+</head>
+<body>
+<p>Fill the textarea below with  JSON output from your annotation client
+implementation that supports the following criteria:</p>
+<div id="testDescription"></div>
+<p>Specifically, the following assertions will be evaluated:</p>
+<div id="assertion"></div>
+<form name="annotation" id="annotation">
+    <textarea name="annotation-input" id="annotation-input" style="width: 90%; height: 10em" >
+    </textarea>
+    <p><input type="button" id="annotation-run" name="Loading..." value="Loading...">
+       <input style="display: none" type="button" id="annotation-close"
+       name="Close" value="Close"></p>
+</form>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/examples/example1.test
@@ -0,0 +1,10 @@
+{
+  "@context": "https://www.w3.org/ns/JSONtest-v1.jsonld",
+  "name": "Verify annotation conforms to the model",
+  "description": "Supply an example annotation that conforms to the basic structure.",
+  "ref": "https://www.w3.org/TR/annotation-model/#model",
+  "assertions": [
+    "exampleContext.json",
+    "exampleTarget.json"
+  ]
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/examples/example2-manual.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html>
+<head>
+<title>A test that has an 'or' clause</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/annotation-model/scripts/ajv.min.js"></script>
+<script src="/annotation-model/scripts/JSONtest.js"></script>
+<script>
+setup({explicit_timeout: true, explicit_done: true });
+
+var theDefinitions=[
+  "definitions/specificResource.json",
+  "definitions/stringUri.json",
+  "definitions/choiceSet.json",
+  "definitions/externalWebResource.json",
+  "definitions/textualBody.json"
+];
+
+var theTestFile="example2.test";
+
+var runningTest = new JSONtest( {
+    "testInput"   : "annotation-input",
+    "runTest"     : "annotation-run",
+    "closeWindow" : "annotation-close",
+    "schemaDefs"  : theDefinitions,
+    "testFile"    : theTestFile
+} ) ;
+
+</script>
+</head>
+<body>
+<p>Fill the textarea below with  JSON output from your annotation client
+implementation that supports the following criteria:</p>
+<div id="testDescription"></div>
+<p>Specifically, the following assertions will be evaluated:</p>
+<div id="assertion"></div>
+<form name="annotation" id="annotation">
+    <textarea name="annotation-input" id="annotation-input" style="width: 90%; height: 10em" >
+    </textarea>
+    <p><input type="button" id="annotation-run" name="Loading..." value="Loading...">
+       <input style="display: none" type="button" id="annotation-close"
+       name="Close" value="Close"></p>
+</form>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/examples/example2.test
@@ -0,0 +1,42 @@
+{
+  "@context": "https://www.w3.org/ns/JSONtest-v1.jsonld",
+    "name": "A test that has an 'or' clause",
+    "description": "This is a complex test that uses or-ing among a list of assertions.",
+    "ref": "https://www.w3.org/TR/annotation-model/#model",
+    "testType": "manual",
+    "assertions":
+      { "title": "Condition Object",
+        "description": "A pseudo-test that will get a result from the aggregate of its children",
+        "assertionType": "must",
+        "expectedResult": "valid",
+        "errorMessage": "Error: None of the various options were present",
+        "compareWith": "or",
+        "assertions": [
+        {
+          "$schema": "http://json-schema.org/draft-04/schema#",
+          "title": "'The Annotation must have 1 or more @context values' (Section 3.1)",
+          "assertionType": "must",
+          "expectedResult": "valid",
+          "errorMessage": "Error: Annotation does not have an @context property.",
+          "type": "object",
+          "properties": {
+            "@context": {}
+          },
+          "required": ["@context"]
+        },
+        {
+          "$schema": "http://json-schema.org/draft-04/schema#",
+          "title": "'An Annotation should have exactly 1 id' (Section 3.1)",
+          "assertionType": "should",
+          "expectedResult": "valid",
+          "errorMessage": "Warning: The Annotation is not identified using the id key (Section 3.1).",
+          "type": "object",
+          "properties": {
+            "id": {}
+          },
+          "required": ["id"]
+        }
+        ]
+      }
+
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/examples/exampleContext.json
@@ -0,0 +1,31 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "title": "Check @context value",
+  "description": "'http://www.w3.org/ns/anno.jsonld must be' an @context value (Section 3.1)",
+  "assertionType": "must",
+  "expectedResult": "valid",
+  "errorMessage": "Error: 'http://www.w3.org/ns/anno.jsonld' is not an @context value.",
+  "type": "object",
+  "properties": {
+    "@context": {
+      "oneOf": [
+        { "type": "string",
+          "$ref": "#/definitions/contextValue" },
+        { "type": "array",
+          "$ref": "#/definitions/contextArray" }
+      ]
+    }
+  },
+  "definitions": {
+    "contextValue":
+       { "enum": [ "http://www.w3.org/ns/anno.jsonld" ] },
+    "contextArray":
+       { "not":
+          { "items":
+             { "not":
+                { "type": "string",
+                  "$ref": "#/definitions/contextValue" } }
+           }
+     }
+  }
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/examples/exampleTarget.json
@@ -0,0 +1,13 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "title": "Check if target feature implemented",
+  "description": "'There must be 1 or more target relationships associated with an Annotation.' (Section 3.1)",
+  "assertionType": "must",
+  "expectedResult": "valid",
+  "errorMessage": "Error: Annotation has no target relationships - at least 1 is required. (Section 3.1)",
+  "type": "object",
+  "properties": {
+    "target": { "type": ["string", "array", "object"] }
+  },
+  "required": ["target"]
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/scripts/JSONtest.js
@@ -0,0 +1,702 @@
+/* globals add_completion_callback, Promise, done, assert_true, Ajv, on_event */
+
+/**
+ * Creates a JSONtest object.  If the parameters are supplied
+ * it also loads a referenced testFile, processes that file, loads any
+ * referenced external assertions, and sets up event listeners to process the
+ * user's test data.  The loading is done asynchronously via Promises.  The test
+ * button's text is changed to Loading while it is processing, and to "Check
+ * JSON" once the data is loaded.
+ *
+ * @constructor
+ * @param {object} params
+ * @param {string} [params.test] - object containing JSON test definition
+ * @param {string} [params.testFile] - URI of a file with JSON test definition
+ * @param {string} params.runTest - IDREF of an element that when clicked will run the test
+ * @param {string} params.testInput - IDREF of an element that contains the JSON(-LD) to evaluate against the assertions in the test / testFile
+ * @event DOMContentLoaded Calls init once DOM is fully loaded
+ * @returns {object} Reference to the new object
+ */
+
+function JSONtest(params) {
+  'use strict';
+
+  this.Assertions = [];     // object that will contain the assertions to process
+  this.AssertionText = "";  // string that holds the titles of all the assertions in use
+  this.DescriptionText = "";
+  this.Base = null;         // URI "base" for the test suite being run
+  this.TestDir = null;      // URI "base" for the test case being run
+  this.Params = null;       // paramaters passed in
+  this.Properties = null;   // testharness_properties from the opening window
+  this.Test = null;         // test being run
+  this.AssertionCounter = 0;// keeps track of which assertion is being processed
+
+  this._assertionText = []; // Array of text or nested arrays of assertions
+  this._assertionCache = [];// Array to put loaded assertions into
+  this._loading = true;
+
+  var pending = [] ;
+
+  // set up in case DOM finishes loading early
+  pending.push(new Promise(function(resolve) {
+    on_event(document, "DOMContentLoaded", function() {
+        resolve(true);
+    }.bind(this));
+  }.bind(this)));
+
+  // create an ajv object that will stay around so that caching
+  // of schema that are compiled just works
+  this.ajv = new Ajv({allErrors: true, validateSchema: false}) ;
+
+  // determine the base URI for the test collection.  This is
+  // the top level folder in the test "document.location"
+
+  var l = document.location;
+  var p = l.pathname;
+  this.TestDir = p.substr(0, 1+p.lastIndexOf('/'));
+  this.Base = p.substr(0, 1+p.indexOf('/', 1));
+
+  // if we are under runner, then there are props in the parent window
+  //
+  // if "output" is set in that, then pause at the end of running so the output
+  // can be analyzed. @@@TODO@@@
+  if (window && window.opener && window.opener.testharness_properties) {
+    this.Properties = window.opener.testharness_properties;
+  }
+
+  this.Params = params;
+
+  // if there is a list of definitions in the params,
+  // include them
+  if (this.Params.schemaDefs) {
+    var defPromise = new Promise(function(resolve, reject) {
+      var promisedSchema = this.Params.schemaDefs.map(function(item) {
+        return this.loadDefinition(item);
+      }.bind(this));
+
+      // Once all the loadAssertion promises resolve...
+      Promise.all(promisedSchema)
+      .then(function (schemaContents) {
+        this.ajv.addSchema(schemaContents);
+        resolve(true);
+      }.bind(this))
+      .catch(function(err) {
+        reject(err);
+      }.bind(this));
+    }.bind(this));
+    // these schema need to load up too
+    pending.push(defPromise) ;
+  }
+
+  // start by loading the test (it might be inline, but
+  // loadTest deals with that
+  pending.push(this.loadTest(params)
+    .then(function(test) {
+      // if the test is NOT an object, turn it into one
+      if (typeof test === 'string') {
+        test = JSON.parse(test) ;
+      }
+
+      this.Test = test;
+
+      // Test should have information that we can put in the template
+
+      if (test.description) {
+        this.DescriptionText = test.description;
+      }
+
+      return new Promise(function(resolve, reject) {
+        if (test.assertions &&
+            typeof test.assertions === "object") {
+          // we have at least one assertion
+          // get the inline contents and the references to external files
+          var assertFiles = this._assertionRefs(test.assertions);
+
+          var promisedAsserts = assertFiles.map(function(item) {
+            return this.loadAssertion(item);
+          }.bind(this));
+
+          // Once all the loadAssertion promises resolve...
+          Promise.all(promisedAsserts)
+          .then(function (assertContents) {
+            // assertContents has assertions in document order
+
+            var assertIdx = 0;
+
+            // populate the display of assertions that are being exercised
+            // returns the list of top level assertions to walk through
+
+            var buildList = function(assertions, level) {
+              if (level === undefined) {
+                level = 1;
+              }
+
+              // accumulate the assertions - but only when level is 0
+              var list = [] ;
+
+              if (assertions) {
+                if (typeof assertions === "object" && assertions.hasOwnProperty('assertions')) {
+                  // this is a conditionObject
+                  if (level === 0) {
+                    list.push(assertContents[assertIdx]);
+                  }
+
+                  this.AssertionText += "<li>" + assertContents[assertIdx++].title;
+                  this.AssertionText += "<ol>";
+                  buildList(assertions.assertions, level+1) ;
+                  this.AssertionText += "</ol></li>\n";
+                } else {
+                  // it is NOT a conditionObject - must be an array
+                  assertions.forEach( function(assert) {
+                    if (typeof assert === "object" && Array.isArray(assert)) {
+                      this.AssertionText += "<ol>";
+                      // it is a nested list - recurse
+                      buildList(assert, level+1) ;
+                      this.AssertionText += "</ol>\n";
+                    } else if (typeof assert === "object" && !Array.isArray(assert) && assert.hasOwnProperty('assertions')) {
+                      if (level === 0) {
+                        list.push(assertContents[assertIdx]);
+                      }
+                      // there is a condition object in the array
+                      this.AssertionText += "<li>" + assertContents[assertIdx++].title;
+                      this.AssertionText += "<ol>";
+                      buildList(assert, level+1) ; // capture the children too
+                      this.AssertionText += "</ol></li>\n";
+                    } else {
+                      if (level === 0) {
+                        list.push(assertContents[assertIdx]);
+                      }
+                      this.AssertionText += "<li>" + assertContents[assertIdx++].title + "</li>\n";
+                    }
+                  }.bind(this));
+                }
+              }
+              return list;
+            }.bind(this);
+
+            // Assertions will ONLY contain the top level assertions
+            this.Assertions = buildList(test.assertions, 0);
+            resolve(true);
+          }.bind(this))
+          .catch(function(err) {
+            reject(err);
+          }.bind(this));
+        } else {
+          if (!test.assertions) {
+            reject("Test has no assertion property");
+          } else {
+            reject("Test assertion property is not an Array");
+          }
+        }
+      }.bind(this));
+    }.bind(this)));
+
+  // once the DOM and the test / assertions are loaded... set us up
+  Promise.all(pending)
+  .then(function() {
+    this.loading = false;
+    this.init();
+  }.bind(this))
+  .catch(function(err) {
+    // loading the components failed somehow - report the errors and mark the test failed
+    test( function() {
+      assert_true(false, "Loading of test components failed: " +JSON.stringify(err)) ;
+    }, "Loading test components");
+    done() ;
+    return ;
+  }.bind(this));
+
+  return this;
+}
+
+JSONtest.prototype = {
+
+  /**
+   * @listens click
+   */
+  init: function() {
+    'use strict';
+    // set up a handler
+    var runButton = document.getElementById(this.Params.runTest) ;
+    var closeButton = document.getElementById(this.Params.closeWindow) ;
+    var testInput  = document.getElementById(this.Params.testInput) ;
+    var assertion  = document.getElementById("assertion") ;
+    var desc  = document.getElementById("testDescription") ;
+
+    if (!this.loading) {
+      runButton.disabled = false;
+      runButton.value = "Check JSON";
+      if (desc) {
+        desc.innerHTML = this.DescriptionText;
+      }
+      if (assertion) {
+        assertion.innerHTML = "<ol>" + this.AssertionText + "</ol>\n";
+      }
+    } else {
+      window.alert("Loading did not finish before init handler was called!");
+    }
+
+    // @@@TODO@@@ implement the output showing handler
+    if (0 && this.Properties && this.Properties.output && closeButton) {
+      // set up a callback
+      add_completion_callback( function() {
+        var p = new Promise(function(resolve) {
+          closeButton.style.display = "inline";
+          closeButton.disabled = false;
+          on_event(closeButton, "click", function() {
+            resolve(true);
+          });
+        }.bind(this));
+        p.then();
+      }.bind(this));
+    }
+
+    on_event(runButton, "click", function() {
+      // user clicked
+      var content = testInput.value;
+      runButton.disabled = true;
+
+      // make sure content is an object
+      if (typeof content === "string") {
+        try {
+          content = JSON.parse(content) ;
+        } catch(err) {
+          // if the parsing failed, create a special test and mark it failed
+          test( function() {
+            assert_true(false, "Parse of JSON failed: " + err) ;
+          }, "Parsing submitted input");
+          // and just give up
+          done();
+          return ;
+        }
+      }
+
+      // iterate over all of the tests for this instance
+      this.runTests(this.Assertions, content);
+
+      // explicitly tell the test framework we are done
+      done();
+    }.bind(this));
+  },
+
+  // runTests - process tests
+  /**
+   * @param {object} assertions - List of assertions to process
+   * @param {string} content - JSON(-LD) to be evaluated
+   * @param {string} [testAction='continue'] - state of test processing (in parent when recursing)
+   * @param {integer} [level=0] - depth of recursion since assertion lists can nest
+   * @param {string} [compareWith='and'] - the way the results of the referenced assertions should be compared
+   * @returns {string} - the testAction resulting from evaluating all of the assertions
+   */
+  runTests: function(assertions, content, testAction, level, compareWith) {
+    'use strict';
+
+    // level
+    if (level === undefined) {
+      level = 1;
+    }
+
+    // testAction
+    if (testAction === undefined) {
+      testAction = 'continue';
+    }
+
+    // compareWith
+    if (compareWith === undefined) {
+      compareWith = 'and';
+    }
+
+    // for each assertion (in order) load the external json schema if
+    // one is referenced, or use the inline schema if supplied
+    // validate content against the referenced schema
+
+    var theResults = [] ;
+
+    if (assertions) {
+
+      assertions.forEach( function(assert, num) {
+
+        var expected = assert.hasOwnProperty('expectedResult') ? assert.expectedResult : 'valid' ;
+        var message = assert.hasOwnProperty('message') ? assert.message : "Result was not " + expected;
+
+        // first - what is the type of the assert
+        if (typeof assert === "object" && !Array.isArray(assert)) {
+          if (assert.hasOwnProperty("compareWith") && assert.hasOwnProperty("assertions") && Array.isArray(assert.assertions) ) {
+            // this is a comparisonObject
+            var r = this.runTests(assert.assertions, content, testAction, level+1, assert.compareWith);
+            // r is an object that contains, among other things, an array of results from the child assertions
+            testAction = r.action;
+
+            // evaluate the results against the compareWith setting
+            var result = true;
+            var data = r.results ;
+            var i;
+
+            if (assert.compareWith === "or") {
+              result = false;
+              for(i = 0; i < data.length; i++) {
+                if (data[i]) {
+                  result = true;
+                }
+              }
+            } else {
+              for(i = 0; i < data.length; i++) {
+                if (!data[i]) {
+                  result = false;
+                }
+              }
+            }
+
+            // create a test and push the result
+            test(function() {
+              var newAction = this.determineAction(assert, result) ;
+              // next time around we will use this action
+              testAction = newAction;
+
+              var err = ";";
+
+              if (testAction === 'abort') {
+                err += "; Aborting execution of remaining assertions;";
+              } else if (testAction === 'skip') {
+                err += "; Skipping execution of remaining assertions at level " + level + ";";
+              }
+
+              if (result === false) {
+                // test result was unexpected; use message
+                assert_true(result, message + err);
+              } else {
+                assert_true(result, err) ;
+              }
+            }.bind(this), "" + level + ":" + (num+1) + " " + assert.title);
+            // we are going to return out of this
+            return;
+          }
+        } else if (typeof assert === "object" && Array.isArray(assert)) {
+          // it is a nested list - recurse
+          var o = this.runTests(assert, content, testAction, level+1);
+          if (o.result && o.result === 'abort') {
+            // we are bailing out
+            testAction = 'abort';
+          }
+        }
+
+        if (testAction === 'abort') {
+          return {action: 'abort' };
+        }
+
+        var schemaName = "inline " + level + ":" + (num+1);
+
+        if (typeof assert === "string") {
+          // the assertion passed in is a file name; find it in the cache
+          if (this._assertionCache[assert]) {
+            assert = this._assertionCache[assert];
+          } else {
+            test( function() {
+              assert_true(false, "Reference to assertion " + assert + " at level " + level + ":" + (num+1) + " unresolved") ;
+            }, "Processing " + assert);
+            return ;
+          }
+        }
+
+        if (assert.assertionFile) {
+          schemaName = "external file " + assert.assertionFile + " " + level + ":" + (num+1);
+        }
+
+        var validate = null;
+
+        try {
+          validate = this.ajv.compile(assert);
+        }
+        catch(err) {
+          test( function() {
+            assert_true(false, "Compilation of schema " + level + ":" + (num+1) + " failed: " + err) ;
+          }, "Compiling " + schemaName);
+          return ;
+        }
+
+        if (testAction !== 'continue') {
+          // a previous test told us to not run this test; skip it
+          test(function() { }, "SKIPPED: " + assert.title);
+        } else {
+          // start an actual sub-test
+          test(function() {
+            var valid = validate(content) ;
+
+            var result = this.determineResult(assert, valid) ;
+
+            // remember the result
+            theResults.push(result);
+
+            var newAction = this.determineAction(assert, result) ;
+            // next time around we will use this action
+            testAction = newAction;
+
+            var err = ";";
+            if (validate.errors !== null) {
+              err = "; Errors: " + this.ajv.errorsText(validate.errors) + ";" ;
+            }
+            if (testAction === 'abort') {
+              err += "; Aborting execution of remaining assertions;";
+            } else if (testAction === 'skip') {
+              err += "; Skipping execution of remaining assertions at level " + level + ";";
+            }
+            if (result === false) {
+              // test result was unexpected; use message
+              assert_true(result, message + err);
+            } else {
+              assert_true(result, err) ;
+            }
+          }.bind(this), "" + level + ":" + (num+1) + " " + assert.title);
+        }
+      }.bind(this));
+    }
+
+    return { action: testAction, results: theResults} ;
+  },
+
+  determineResult: function(schema, valid) {
+    'use strict';
+    var r = 'valid' ;
+    if (schema.hasOwnProperty('expectedResult')) {
+      r = schema.expectedResult;
+    }
+
+    if (r === 'valid' && valid || r === 'invalid' && !valid) {
+      return true;
+    } else {
+      return false;
+    }
+  },
+
+  determineAction: function(schema, result) {
+    'use strict';
+    // mapping from results to actions
+    var mapping = {
+      'failAndContinue' : 'continue',
+      'failAndSkip'    : 'skip',
+      'failAndAbort'   : 'abort',
+      'passAndContinue': 'continue',
+      'passAndSkip'    : 'skip',
+      'passAndAbort'   : 'abort'
+    };
+
+    // if the result was as expected, then just keep going
+    if (result) {
+      return 'continue';
+    }
+
+    var a = 'failAndContinue';
+
+    if (schema.hasOwnProperty('onUnexpectedResult')) {
+      a = schema.onUnexpectedResult;
+    }
+
+    if (mapping[a]) {
+      return mapping[a];
+    } else {
+      return 'continue';
+    }
+  },
+
+  // loadAssertion - load an Assertion from an external JSON file
+  //
+  // returns a promise that resolves with the contents of the assertion file
+
+  loadAssertion: function(afile) {
+    'use strict';
+    if (typeof(afile) === 'string') {
+      var theFile = this._parseURI(afile);
+      // it is a file reference - load it
+      return new Promise(function(resolve, reject) {
+        this._loadFile("GET", theFile, true)
+          .then(function(data) {
+            data.assertionFile = afile;
+            this._assertionCache[afile] = data;
+            resolve(data);
+          }.bind(this))
+          .catch(function(err) {
+            if (typeof err === "object") {
+              err.theFile = theFile;
+            }
+            reject(err);
+          });
+        }.bind(this));
+      }
+      else if (afile.hasOwnProperty("assertionFile")) {
+      // this object is referecing an external assertion
+      return new Promise(function(resolve, reject) {
+        var theFile = this._parseURI(afile.assertionFile);
+        this._loadFile("GET", theFile, true)
+        .then(function(external) {
+          // okay - we have an external object
+          Object.keys(afile).forEach(function(key) {
+            if (key !== 'assertionFile') {
+              external[key] = afile[key];
+            }
+          });
+          resolve(external);
+        }.bind(this))
+        .catch(function(err) {
+          if (typeof err === "object") {
+            err.theFile = theFile;
+          }
+          reject(err);
+        });
+      }.bind(this));
+    } else {
+      // it is already a loaded assertion - just use it
+      return new Promise(function(resolve) {
+        resolve(afile);
+      });
+    }
+  },
+
+  // loadDefinition - load a JSON Schema definition from an external JSON file
+  //
+  // returns a promise that resolves with the contents of the definition file
+
+  loadDefinition: function(dfile) {
+    'use strict';
+    return new Promise(function(resolve, reject) {
+      this._loadFile("GET", this._parseURI(dfile), true)
+        .then(function(data) {
+          resolve(data);
+        }.bind(this))
+        .catch(function(err) {
+          reject(err);
+        });
+      }.bind(this));
+  },
+
+
+  // loadTest - load a test from an external JSON file
+  //
+  // returns a promise that resolves with the contents of the
+  // test
+
+  loadTest: function(params) {
+    'use strict';
+
+    if (params.hasOwnProperty('testFile')) {
+      // the test is referred to by a file name
+      return this._loadFile("GET", params.testFile);
+    } // else
+    return new Promise(function(resolve, reject) {
+      if (params.hasOwnProperty('test')) {
+        resolve(params.test);
+      } else {
+        reject("Must supply a 'test' or 'testFile' parameter");
+      }
+    });
+  },
+
+  _parseURI: function(theURI) {
+    'use strict';
+    // determine what the top level URI should be
+    if (theURI.indexOf('/') === -1) {
+      // no slash - it's relative to where we are
+      // so just use it
+      return this.TestDir + theURI;
+    } else if (theURI.indexOf('/') === 0 || theURI.indexOf('http:') === 0 || theURI.indexOf('https:') === 0) {
+      // it is an absolute URI so just use it
+      return theURI;
+    } else {
+      // it is relative and contains a slash.
+      // make it relative to the current test root
+      return this.Base + theURI;
+    }
+  },
+
+  /**
+   * return a list of all inline assertions or references
+   *
+   * @param {array} assertions list of assertions to examine
+   */
+
+  _assertionRefs: function(assertions) {
+    'use strict';
+    var ret = [] ;
+
+    // when the reference is to an object that has an array of assertions in it (a conditionObject)
+    // then remember that one and loop over its embedded assertions
+    if (typeof(assertions) === "object" && !Array.isArray(assertions) && assertions.hasOwnProperty('assertions')) {
+      ret.push(assertions) ;
+      assertions = assertions.assertions;
+    }
+    if (typeof(assertions) === "object" && Array.isArray(assertions)) {
+      assertions.forEach( function(assert) {
+        // first - what is the type of the assert
+        if (typeof assert === "object" && Array.isArray(assert)) {
+          // it is a nested list - recurse
+          this._assertionRefs(assert).forEach( function(item) {
+            ret.push(item);
+          }.bind(this));
+        } else if (typeof assert === "object") {
+          ret.push(assert) ;
+          if (assert.hasOwnProperty("assertions")) {
+            // there are embedded assertions; get those too
+            ret.concat(this._assertionRefs(assert.assertions));
+          }
+        } else {
+          // it is a file name
+          ret.push(assert) ;
+        }
+      }.bind(this));
+    }
+    return ret;
+  },
+
+  // _loadFile - return a promise loading a file
+  //
+  _loadFile: function(method, url, parse) {
+    'use strict';
+    if (parse === undefined) {
+      parse = true;
+    }
+
+    return new Promise(function (resolve, reject) {
+      if (document.location.search) {
+        var s = document.location.search;
+        s = s.replace(/^\?/, '');
+        if (url.indexOf('?') !== -1) {
+          url += "&" + s;
+        } else {
+          url += "?" + s;
+        }
+      }
+      var xhr = new XMLHttpRequest();
+      xhr.open(method, url);
+      xhr.onload = function () {
+        if (this.status >= 200 && this.status < 300) {
+          var d = xhr.response;
+          if (parse) {
+            try {
+              d = JSON.parse(d);
+              resolve(d);
+            }
+            catch(err) {
+              reject({ status: this.status,
+                       statusText: "Parsing of " + url + " failed: " + err }
+                   );
+            }
+          } else {
+            resolve(d);
+          }
+        } else {
+          reject({
+            status: this.status,
+            statusText: xhr.statusText
+          });
+        }
+      };
+      xhr.onerror = function () {
+        reject({
+          status: this.status,
+          statusText: xhr.statusText
+        });
+      };
+      xhr.send();
+    });
+  },
+
+};
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/scripts/ajv.min.js
@@ -0,0 +1,6 @@
+/* ajv 4.0.4: Another JSON Schema Validator */
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var r;r="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,r.Ajv=e()}}(function(){var define,module,exports;return function e(r,t,a){function s(i,n){if(!t[i]){if(!r[i]){var l="function"==typeof require&&require;if(!n&&l)return l(i,!0);if(o)return o(i,!0);var c=new Error("Cannot find module '"+i+"'");throw c.code="MODULE_NOT_FOUND",c}var h=t[i]={exports:{}};r[i][0].call(h.exports,function(e){var t=r[i][1][e];return s(t?t:e)},h,h.exports,e,r,t,a)}return t[i].exports}for(var o="function"==typeof require&&require,i=0;a.length>i;i++)s(a[i]);return s}({1:[function(require,module,exports){"use strict";function setupAsync(e,r){r!==!1&&(r=!0);var t,a=e.async,s=e.transpile;switch(typeof s){case"string":var o=TRANSPILE[s];if(!o)throw new Error("bad transpiler: "+s);return e._transpileFunc=o(e,r);case"undefined":case"boolean":if("string"==typeof a){if(t=ASYNC[a],!t)throw new Error("bad async mode: "+a);return e.transpile=t(e,r)}for(var i=0;MODES.length>i;i++){var n=MODES[i];if(setupAsync(n,!1))return util.copy(n,e),e.transpile}throw new Error("generators, nodent and regenerator are not available");case"function":return e._transpileFunc=e.transpile;default:throw new Error("bad transpiler: "+s)}}function checkGenerators(opts,required){try{return eval("(function*(){})()"),!0}catch(e){if(required)throw new Error("generators not supported")}}function checkAsyncFunction(opts,required){try{return eval("(async function(){})()"),!0}catch(e){if(required)throw new Error("es7 async functions not supported")}}function getRegenerator(e,r){try{return regenerator||(regenerator=require("regenerator"),regenerator.runtime()),e.async&&e.async!==!0||(e.async="es7"),regeneratorTranspile}catch(t){if(r)throw new Error("regenerator not available")}}function regeneratorTranspile(e){return regenerator.compile(e).code}function getNodent(e,r){try{return nodent||(nodent=require("nodent")({log:!1,dontInstallRequireHook:!0})),"es7"!=e.async&&(e.async&&e.async!==!0&&console.warn("nodent transpiles only es7 async functions"),e.async="es7"),nodentTranspile}catch(t){if(r)throw new Error("nodent not available")}}function nodentTranspile(e){return nodent.compile(e,"",{promises:!0,sourcemap:!1}).code}function compileAsync(e,r){function t(e,r,a){function o(a){function o(a,o){if(a)return r(a);if(!s._refs[i]&&!s._schemas[i])try{s.addSchema(o,i)}catch(n){return void r(n)}t(e,r)}var i=a.missingSchema;if(s._refs[i]||s._schemas[i])return r(new Error("Schema "+i+" is loaded but"+a.missingRef+"cannot be resolved"));var n=s._loadingSchemas[i];n?"function"==typeof n?s._loadingSchemas[i]=[n,o]:n[n.length]=o:(s._loadingSchemas[i]=o,s._opts.loadSchema(i,function(e,r){var t=s._loadingSchemas[i];if(delete s._loadingSchemas[i],"function"==typeof t)t(e,r);else for(var a=0;t.length>a;a++)t[a](e,r)}))}function i(e,t){return a?void setTimeout(function(){r(e,t)}):r(e,t)}var n;try{n=s.compile(e)}catch(l){return void(l.missingSchema?o(l):i(l))}i(null,n)}var a,s=this;try{a=this._addSchema(e)}catch(o){return void setTimeout(function(){r(o)})}if(a.validate)setTimeout(function(){r(null,a.validate)});else{if("function"!=typeof this._opts.loadSchema)throw new Error("options.loadSchema should be a function");t(e,r,!0)}}module.exports={setup:setupAsync,compile:compileAsync};var util=require("./compile/util"),ASYNC={"*":checkGenerators,"co*":checkGenerators,es7:checkAsyncFunction},TRANSPILE={nodent:getNodent,regenerator:getRegenerator},MODES=[{async:"co*"},{async:"es7",transpile:"nodent"},{async:"co*",transpile:"regenerator"}],regenerator,nodent},{"./compile/util":10}],2:[function(e,r,t){"use strict";var a=r.exports=function(){this._cache={}};a.prototype.put=function(e,r){this._cache[e]=r},a.prototype.get=function(e){return this._cache[e]},a.prototype.del=function(e){delete this._cache[e]},a.prototype.clear=function(){this._cache={}}},{}],3:[function(e,r,t){"use strict";r.exports={$ref:e("../dotjs/ref"),allOf:e("../dotjs/allOf"),anyOf:e("../dotjs/anyOf"),dependencies:e("../dotjs/dependencies"),"enum":e("../dotjs/enum"),format:e("../dotjs/format"),items:e("../dotjs/items"),maximum:e("../dotjs/_limit"),minimum:e("../dotjs/_limit"),maxItems:e("../dotjs/_limitItems"),minItems:e("../dotjs/_limitItems"),maxLength:e("../dotjs/_limitLength"),minLength:e("../dotjs/_limitLength"),maxProperties:e("../dotjs/_limitProperties"),minProperties:e("../dotjs/_limitProperties"),multipleOf:e("../dotjs/multipleOf"),not:e("../dotjs/not"),oneOf:e("../dotjs/oneOf"),pattern:e("../dotjs/pattern"),properties:e("../dotjs/properties"),required:e("../dotjs/required"),uniqueItems:e("../dotjs/uniqueItems"),validate:e("../dotjs/validate")}},{"../dotjs/_limit":13,"../dotjs/_limitItems":14,"../dotjs/_limitLength":15,"../dotjs/_limitProperties":16,"../dotjs/allOf":17,"../dotjs/anyOf":18,"../dotjs/dependencies":20,"../dotjs/enum":21,"../dotjs/format":22,"../dotjs/items":23,"../dotjs/multipleOf":24,"../dotjs/not":25,"../dotjs/oneOf":26,"../dotjs/pattern":27,"../dotjs/properties":29,"../dotjs/ref":30,"../dotjs/required":31,"../dotjs/uniqueItems":33,"../dotjs/validate":34}],4:[function(e,r,t){"use strict";r.exports=function a(e,r){if(e===r)return!0;var t,s=Array.isArray(e),o=Array.isArray(r);if(s&&o){if(e.length!=r.length)return!1;for(t=0;e.length>t;t++)if(!a(e[t],r[t]))return!1;return!0}if(s!=o)return!1;if(e&&r&&"object"==typeof e&&"object"==typeof r){var i=Object.keys(e);if(i.length!==Object.keys(r).length)return!1;for(t=0;i.length>t;t++)if(void 0===r[i[t]])return!1;for(t=0;i.length>t;t++)if(!a(e[i[t]],r[i[t]]))return!1;return!0}return!1}},{}],5:[function(e,r,t){"use strict";function a(e){e="full"==e?"full":"fast";var r=d.copy(a[e]);for(var t in a.compare)r[t]={validate:r[t],compare:a.compare[t]};return r}function s(e){var r=e.match(p);if(!r)return!1;var t=+r[1],a=+r[2];return t>=1&&12>=t&&a>=1&&m[t]>=a}function o(e,r){var t=e.match(v);if(!t)return!1;var a=t[1],s=t[2],o=t[3],i=t[5];return 23>=a&&59>=s&&59>=o&&(!r||i)}function i(e){var r=e.split(w);return s(r[0])&&o(r[1],!0)}function n(e){return 255>=e.length&&y.test(e)}function l(e){return j.test(e)&&g.test(e)}function c(e){try{return new RegExp(e),!0}catch(r){return!1}}function h(e,r){return e&&r?e>r?1:r>e?-1:e===r?0:void 0:void 0}function u(e,r){return e&&r&&(e=e.match(v),r=r.match(v),e&&r)?(e=e[1]+e[2]+e[3]+(e[4]||""),r=r[1]+r[2]+r[3]+(r[4]||""),e>r?1:r>e?-1:e===r?0:void 0):void 0}function f(e,r){if(e&&r){e=e.split(w),r=r.split(w);var t=h(e[0],r[0]);if(void 0!==t)return t||u(e[1],r[1])}}var d=e("./util"),p=/^\d\d\d\d-(\d\d)-(\d\d)$/,m=[0,31,29,31,30,31,30,31,31,30,31,30,31],v=/^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d:\d\d)?$/i,y=/^[a-z](?:(?:[-0-9a-z]{0,61})?[0-9a-z])?(\.[a-z](?:(?:[-0-9a-z]{0,61})?[0-9a-z])?)*$/i,g=/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@\/?]|%[0-9a-f]{2})*)?(?:\#(?:[a-z0-9\-._~!$&'()*+,;=:@\/?]|%[0-9a-f]{2})*)?$/i,P=/^(?:urn\:uuid\:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,E=/^(?:\/(?:[^~\/]|~0|~1)+)*(?:\/)?$|^\#(?:\/(?:[a-z0-9_\-\.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)+)*(?:\/)?$/i,b=/^(?:0|[1-9][0-9]*)(?:\#|(?:\/(?:[^~\/]|~0|~1)+)*(?:\/)?)$/;r.exports=a,a.fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s][0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i,uri:/^(?:[a-z][a-z0-9+-.]*)?(?:\:|\/)\/?[^\s]*$/i,email:/^[a-z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:y,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:c,uuid:P,"json-pointer":E,"relative-json-pointer":b},a.full={date:s,time:o,"date-time":i,uri:l,email:/^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:n,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:c,uuid:P,"json-pointer":E,"relative-json-pointer":b},a.compare={date:h,time:u,"date-time":f};var w=/t|\s/i,j=/\/|\:/},{"./util":10}],6:[function(require,module,exports){"use strict";function compile(schema,root,localRefs,baseId){function localCompile(_schema,_root,localRefs,baseId){var isRoot=!_root||_root&&_root.schema==_schema;if(_root.schema!=root.schema)return compile.call(self,_schema,_root,localRefs,baseId);var $async=_schema.$async===!0;$async&&!opts.transpile&&async.setup(opts);var sourceCode=validateGenerator({isTop:!0,schema:_schema,isRoot:isRoot,baseId:baseId,root:_root,schemaPath:"",errSchemaPath:"#",errorPath:'""',RULES:RULES,validate:validateGenerator,util:util,resolve:resolve,resolveRef:resolveRef,usePattern:usePattern,useDefault:useDefault,useCustomRule:useCustomRule,opts:opts,formats:formats,self:self});sourceCode=vars(refVal,refValCode)+vars(patterns,patternCode)+vars(defaults,defaultCode)+vars(customRules,customRuleCode)+sourceCode,opts.beautify&&(beautify?sourceCode=beautify(sourceCode,opts.beautify):console.error('"npm install js-beautify" to use beautify option'));var validate,validateCode,transpile=opts._transpileFunc;try{validateCode=$async&&transpile?transpile(sourceCode):sourceCode,eval(validateCode),refVal[0]=validate}catch(e){throw console.error("Error compiling schema, function code:",validateCode),e}return validate.schema=_schema,validate.errors=null,validate.refs=refs,validate.refVal=refVal,validate.root=isRoot?validate:_root,$async&&(validate.$async=!0),validate.sourceCode=sourceCode,validate}function resolveRef(e,r,t){r=resolve.url(e,r);var a,s,o=refs[r];if(void 0!==o)return a=refVal[o],s="refVal["+o+"]",resolvedRef(a,s);if(!t){var i=root.refs[r];if(void 0!==i)return a=root.refVal[i],s=addLocalRef(r,a),resolvedRef(a,s)}s=addLocalRef(r);var n=resolve.call(self,localCompile,root,r);if(!n){var l=localRefs&&localRefs[r];l&&(n=resolve.inlineRef(l,opts.inlineRefs)?l:compile.call(self,l,root,localRefs,e))}return n?(replaceLocalRef(r,n),resolvedRef(n,s)):void 0}function addLocalRef(e,r){var t=refVal.length;return refVal[t]=r,refs[e]=t,"refVal"+t}function replaceLocalRef(e,r){var t=refs[e];refVal[t]=r}function resolvedRef(e,r){return"object"==typeof e?{code:r,schema:e,inline:!0}:{code:r,$async:e&&e.$async}}function usePattern(e){var r=patternsHash[e];return void 0===r&&(r=patternsHash[e]=patterns.length,patterns[r]=e),"pattern"+r}function useDefault(e){switch(typeof e){case"boolean":case"number":return""+e;case"string":return util.toQuotedString(e);case"object":if(null===e)return"null";var r=stableStringify(e),t=defaultsHash[r];return void 0===t&&(t=defaultsHash[r]=defaults.length,defaults[t]=e),"default"+t}}function useCustomRule(e,r,t,a){var s,o=e.definition.compile,i=e.definition.inline,n=e.definition.macro;o?s=o.call(self,r,t):n?(s=n.call(self,r,t),opts.validateSchema!==!1&&self.validateSchema(s,!0)):s=i?i.call(self,a,e.keyword,r,t):e.definition.validate;var l=customRules.length;return customRules[l]=s,{code:"customRule"+l,validate:s}}var self=this,opts=this._opts,refVal=[void 0],refs={},patterns=[],patternsHash={},defaults=[],defaultsHash={},customRules=[];root=root||{schema:schema,refVal:refVal,refs:refs};var formats=this._formats,RULES=this.RULES;return localCompile(schema,root,localRefs,baseId)}function patternCode(e,r){return"var pattern"+e+" = new RegExp("+util.toQuotedString(r[e])+");"}function defaultCode(e){return"var default"+e+" = defaults["+e+"];"}function refValCode(e,r){return r[e]?"var refVal"+e+" = refVal["+e+"];":""}function customRuleCode(e){return"var customRule"+e+" = customRules["+e+"];"}function vars(e,r){if(!e.length)return"";for(var t="",a=0;e.length>a;a++)t+=r(a,e);return t}var resolve=require("./resolve"),util=require("./util"),stableStringify=require("json-stable-stringify"),async=require("../async"),beautify=function(){try{return require("js-beautify").js_beautify}catch(e){}}(),validateGenerator=require("../dotjs/validate");module.exports=compile;var co=require("co"),ucs2length=util.ucs2length,equal=require("./equal"),ValidationError=require("./validation_error")},{"../async":1,"../dotjs/validate":34,"./equal":4,"./resolve":7,"./util":10,"./validation_error":11,co:39,"json-stable-stringify":40}],7:[function(e,r,t){"use strict";function a(e,r,t){var o=this._refs[t];if("string"==typeof o){if(!this._refs[o])return a.call(this,e,r,o);o=this._refs[o]}if(o=o||this._schemas[t],o instanceof g)return n(o.schema,this._opts.inlineRefs)?o.schema:o.validate||this._compile(o);var i,l,c,h=s.call(this,r,t);return h&&(i=h.schema,r=h.root,c=h.baseId),i instanceof g?l=i.validate||e.call(this,i.schema,r,void 0,c):i&&(l=n(i,this._opts.inlineRefs)?i:e.call(this,i,r,void 0,c)),l}function s(e,r){var t=m.parse(r,!1,!0),a=u(t),s=h(e.schema.id);if(a!==s){var n=f(a),l=this._refs[n];if("string"==typeof l)return o.call(this,e,l,t);if(l instanceof g)l.validate||this._compile(l),e=l;else if(l=this._schemas[n],l instanceof g){if(l.validate||this._compile(l),n==f(r))return{schema:l,root:e,baseId:s};e=l}if(!e.schema)return;s=h(e.schema.id)}return i.call(this,t,s,e.schema,e)}function o(e,r,t){var a=s.call(this,e,r);if(a){var o=a.schema,n=a.baseId;return e=a.root,o.id&&(n=d(n,o.id)),i.call(this,t,n,o,e)}}function i(e,r,t,a){if(e.hash=e.hash||"","#/"==e.hash.slice(0,2)){for(var o=e.hash.split("/"),i=1;o.length>i;i++){var n=o[i];if(n){if(n=y.unescapeFragment(n),t=t[n],!t)break;if(t.id&&!P[n]&&(r=d(r,t.id)),t.$ref){var l=d(r,t.$ref),c=s.call(this,a,l);c&&(t=c.schema,a=c.root,r=c.baseId)}}}return t&&t!=a.schema?{schema:t,root:a,baseId:r}:void 0}}function n(e,r){return r===!1?!1:void 0===r||r===!0?l(e):r?c(e)<=r:void 0}function l(e){var r;if(Array.isArray(e)){for(var t=0;e.length>t;t++)if(r=e[t],"object"==typeof r&&!l(r))return!1}else for(var a in e){if("$ref"==a)return!1;if(r=e[a],"object"==typeof r&&!l(r))return!1}return!0}function c(e){var r,t=0;if(Array.isArray(e)){for(var a=0;e.length>a;a++)if(r=e[a],"object"==typeof r&&(t+=c(r)),t==1/0)return 1/0}else for(var s in e){if("$ref"==s)return 1/0;if(E[s])t++;else if(r=e[s],"object"==typeof r&&(t+=c(r)+1),t==1/0)return 1/0}return t}function h(e,r){r!==!1&&(e=f(e));var t=m.parse(e,!1,!0);return u(t)}function u(e){return(e.protocol||"")+(e.protocol?"//":"")+(e.host||"")+(e.path||"")+"#"}function f(e){return e?e.replace(b,""):""}function d(e,r){return r=f(r),m.resolve(e,r)}function p(e){function r(e,t,s){if(Array.isArray(e))for(var o=0;e.length>o;o++)r.call(this,e[o],t+"/"+o,s);else if(e&&"object"==typeof e){if("string"==typeof e.id){var i=s=s?m.resolve(s,e.id):e.id;i=f(i);var n=this._refs[i];if("string"==typeof n&&(n=this._refs[n]),n&&n.schema){if(!v(e,n.schema))throw new Error('id "'+i+'" resolves to more than one schema')}else if(i!=f(t))if("#"==i[0]){if(a[i]&&!v(e,a[i]))throw new Error('id "'+i+'" resolves to more than one schema');a[i]=e}else this._refs[i]=t}for(var l in e)r.call(this,e[l],t+"/"+y.escapeFragment(l),s)}}var t=f(e.id),a={};return r.call(this,e,h(t,!1),t),a}var m=e("url"),v=e("./equal"),y=e("./util"),g=e("./schema_obj");r.exports=a,a.normalizeId=f,a.fullPath=h,a.url=d,a.ids=p,a.inlineRef=n;var P=y.toHash(["properties","patternProperties","enum","dependencies","definitions"]),E=y.toHash(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum"]),b=/#\/?$/},{"./equal":4,"./schema_obj":9,"./util":10,url:48}],8:[function(e,r,t){"use strict";var a=e("./_rules"),s=e("./util");r.exports=function(){var e=[{type:"number",rules:["maximum","minimum","multipleOf"]},{type:"string",rules:["maxLength","minLength","pattern","format"]},{type:"array",rules:["maxItems","minItems","uniqueItems","items"]},{type:"object",rules:["maxProperties","minProperties","required","dependencies","properties"]},{rules:["$ref","enum","not","anyOf","oneOf","allOf"]}];return e.all=["type","additionalProperties","patternProperties"],e.keywords=["additionalItems","$schema","id","title","description","default"],e.types=["number","integer","string","array","object","boolean","null"],e.forEach(function(r){r.rules=r.rules.map(function(r){return e.all.push(r),{keyword:r,code:a[r]}})}),e.keywords=s.toHash(e.all.concat(e.keywords)),e.all=s.toHash(e.all),e.types=s.toHash(e.types),e}},{"./_rules":3,"./util":10}],9:[function(e,r,t){"use strict";function a(e){s.copy(e,this)}var s=e("./util");r.exports=a},{"./util":10}],10:[function(e,r,t){"use strict";function a(e,r){r=r||{};for(var t in e)r[t]=e[t];return r}function s(e,r,t){var a=t?" !== ":" === ",s=t?" || ":" && ",o=t?"!":"",i=t?"":"!";switch(e){case"null":return r+a+"null";case"array":return o+"Array.isArray("+r+")";case"object":return"("+o+r+s+"typeof "+r+a+'"object"'+s+i+"Array.isArray("+r+"))";case"integer":return"(typeof "+r+a+'"number"'+s+i+"("+r+" % 1))";default:return"typeof "+r+a+'"'+e+'"'}}function o(e,r){switch(e.length){case 1:return s(e[0],r,!0);default:var t="",a=n(e);a.array&&a.object&&(t=a["null"]?"(":"(!"+r+" || ",t+="typeof "+r+' !== "object")',delete a["null"],delete a.array,delete a.object),a.number&&delete a.integer;for(var o in a)t+=(t?" && ":"")+s(o,r,!0);return t}}function i(e){if(Array.isArray(e)){for(var r=[],t=0;e.length>t;t++){var a=e[t];x[a]&&(r[r.length]=a)}if(r.length)return r}else if(x[e])return[e]}function n(e){for(var r={},t=0;e.length>t;t++)r[e[t]]=!0;return r}function l(e){return"number"==typeof e?"["+e+"]":S.test(e)?"."+e:"['"+e.replace(_,"\\$&")+"']"}function c(e){return e.replace(_,"\\$&")}function h(e){for(var r,t=0,a=e.length,s=0;a>s;)t++,r=e.charCodeAt(s++),r>=55296&&56319>=r&&a>s&&(r=e.charCodeAt(s),56320==(64512&r)&&s++);return t}function u(e,r){r+="[^0-9]";var t=e.match(new RegExp(r,"g"));return t?t.length:0}function f(e,r,t){return r+="([^0-9])",t=t.replace(/\$/g,"$$$$"),e.replace(new RegExp(r,"g"),t+"$1")}function d(e){return e.replace(R,"").replace(O,"").replace(I,"if (!($1))")}function p(e,r){var t=e.match(k);return t&&2===t.length?r?e.replace(q,"").replace(D,V):e.replace(A,"").replace(L,C):e}function m(e,r){for(var t in e)if(r[t])return!0}function v(e){return"'"+c(e)+"'"}function y(e,r,t,a){var s=t?"'/' + "+r+(a?"":".replace(/~/g, '~0').replace(/\\//g, '~1')"):a?"'[' + "+r+" + ']'":"'[\\'' + "+r+" + '\\']'";return E(e,s)}function g(e,r,t){var a=v(t?"/"+j(r):l(r));return E(e,a)}function P(e,r,t){var a=e.match(U);if(!a)throw new Error("Invalid relative JSON-pointer: "+e);var s=+a[1],o=a[2];if("#"==o){if(s>=r)throw new Error("Cannot access property/index "+s+" levels up, current level is "+r);return t[r-s]}if(s>r)throw new Error("Cannot access data "+s+" levels up, current level is "+r);var i="data"+(r-s||"");if(!o)return i;for(var n=i,c=o.split("/"),h=0;c.length>h;h++){var u=c[h];u&&(i+=l($(u)),n+=" && "+i)}return n}function E(e,r){return'""'==e?r:(e+" + "+r).replace(/' \+ '/g,"")}function b(e){return $(decodeURIComponent(e))}function w(e){return encodeURIComponent(j(e))}function j(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function $(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}r.exports={copy:a,checkDataType:s,checkDataTypes:o,coerceToTypes:i,toHash:n,getProperty:l,escapeQuotes:c,ucs2length:h,varOccurences:u,varReplace:f,cleanUpCode:d,cleanUpVarErrors:p,schemaHasRules:m,stableStringify:e("json-stable-stringify"),toQuotedString:v,getPathExpr:y,getPath:g,getData:P,unescapeFragment:b,escapeFragment:w,escapeJsonPointer:j};var x=n(["string","number","integer","boolean","null"]),S=/^[a-z$_][a-z$_0-9]*$/i,_=/'|\\/g,R=/else\s*{\s*}/g,O=/if\s*\([^)]+\)\s*\{\s*\}(?!\s*else)/g,I=/if\s*\(([^)]+)\)\s*\{\s*\}\s*else(?!\s*if)/g,k=/[^v\.]errors/g,A=/var errors = 0;|var vErrors = null;|validate.errors = vErrors;/g,q=/var errors = 0;|var vErrors = null;/g,L="return errors === 0;",C="validate.errors = null; return true;",D=/if \(errors === 0\) return true;\s*else throw new ValidationError\(vErrors\);/,V="return true;",U=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/},{"json-stable-stringify":40}],11:[function(e,r,t){"use strict";function a(e){this.message="validation failed",this.errors=e,this.ajv=this.validation=!0}r.exports=a,a.prototype=Object.create(Error.prototype),a.prototype.constructor=a},{}],12:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+s;if(a+="var "+u+" = undefined;",e.opts.format===!1)return a+=" "+u+" = true; ";var f=e.schema.format,d=e.opts.v5&&f.$data,p="";if(d){var m=e.util.getData(f.$data,o,e.dataPathArr),v="format"+s,y="compare"+s;a+=" var "+v+" = formats["+m+"] , "+y+" = "+v+" && "+v+".compare;"}else{var v=e.formats[f];if(!v||!v.compare)return a+="  "+u+" = true; ";var y="formats"+e.util.getProperty(f)+".compare"}var g="formatMaximum"==r,P="formatExclusive"+(g?"Maximum":"Minimum"),E=e.schema[P],b=e.opts.v5&&E&&E.$data,w=g?"<":">",j="result"+s,$=e.opts.v5&&i.$data,x=$?e.util.getData(i.$data,o,e.dataPathArr):i;if($&&(a+=" var schema"+s+" = "+x+"; ",x="schema"+s),b){var S=e.util.getData(E.$data,o,e.dataPathArr),_="exclusive"+s,R="op"+s,O="' + "+R+" + '";a+=" var schemaExcl"+s+" = "+S+"; ",S="schemaExcl"+s,a+=" if (typeof "+S+" != 'boolean' && "+S+" !== undefined) { "+u+" = false; ";var t=P,I=I||[];I.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"_formatExclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: {} ',e.opts.messages!==!1&&(a+=" , message: '"+P+" should be boolean' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var k=a;a=I.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+k+"]); ":" validate.errors = ["+k+"]; return false; ":" var err = "+k+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" }  ",c&&(p+="}",a+=" else { "),$&&(a+=" if ("+x+" === undefined) "+u+" = true; else if (typeof "+x+" != 'string') "+u+" = false; else { ",p+="}"),d&&(a+=" if (!"+y+") "+u+" = true; else { ",p+="}"),a+=" var "+j+" = "+y+"("+h+",  ",a+=$?""+x:""+e.util.toQuotedString(i),a+=" ); if ("+j+" === undefined) "+u+" = false; var "+_+" = "+S+" === true; if ("+u+" === undefined) { "+u+" = "+_+" ? "+j+" "+w+" 0 : "+j+" "+w+"= 0; } if (!"+u+") var op"+s+" = "+_+" ? '"+w+"' : '"+w+"=';"}else{var _=E===!0,O=w;_||(O+="=");var R="'"+O+"'";$&&(a+=" if ("+x+" === undefined) "+u+" = true; else if (typeof "+x+" != 'string') "+u+" = false; else { ",p+="}"),d&&(a+=" if (!"+y+") "+u+" = true; else { ",p+="}"),a+=" var "+j+" = "+y+"("+h+",  ",a+=$?""+x:""+e.util.toQuotedString(i),a+=" ); if ("+j+" === undefined) "+u+" = false; if ("+u+" === undefined) "+u+" = "+j+" "+w,_||(a+="="),a+=" 0;"}a+=""+p+"if (!"+u+") { ";var t=r,I=I||[];I.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"_formatLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: { comparison: '+R+", limit:  ",a+=$?""+x:""+e.util.toQuotedString(i),a+=" , exclusive: "+_+" } ",e.opts.messages!==!1&&(a+=" , message: 'should be "+O+' "',a+=$?"' + "+x+" + '":""+e.util.escapeQuotes(i),a+="\"' "),e.opts.verbose&&(a+=" , schema:  ",a+=$?"validate.schema"+n:""+e.util.toQuotedString(i),a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var k=a;return a=I.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+k+"]); ":" validate.errors = ["+k+"]; return false; ":" var err = "+k+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="}"}},{}],13:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u=e.opts.v5&&i.$data,f=u?e.util.getData(i.$data,o,e.dataPathArr):i;u&&(a+=" var schema"+s+" = "+f+"; ",f="schema"+s);var d="maximum"==r,p=d?"exclusiveMaximum":"exclusiveMinimum",m=e.schema[p],v=e.opts.v5&&m&&m.$data,y=d?"<":">",g=d?">":"<";if(v){var P=e.util.getData(m.$data,o,e.dataPathArr),E="exclusive"+s,b="op"+s,w="' + "+b+" + '";a+=" var schemaExcl"+s+" = "+P+"; ",P="schemaExcl"+s,a+=" var exclusive"+s+"; if (typeof "+P+" != 'boolean' && typeof "+P+" != 'undefined') { ";var t=p,j=j||[];j.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: {} ',e.opts.messages!==!1&&(a+=" , message: '"+p+" should be boolean' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var $=a;a=j.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+$+"]); ":" validate.errors = ["+$+"]; return false; ":" var err = "+$+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } else if( ",u&&(a+=" ("+f+" !== undefined && typeof "+f+" != 'number') || "),a+=" ((exclusive"+s+" = "+P+" === true) ? "+h+" "+g+"= "+f+" : "+h+" "+g+" "+f+")) { var op"+s+" = exclusive"+s+" ? '"+y+"' : '"+y+"=';"}else{var E=m===!0,w=y;E||(w+="=");var b="'"+w+"'";a+=" if ( ",u&&(a+=" ("+f+" !== undefined && typeof "+f+" != 'number') || "),a+=" "+h+" "+g,E&&(a+="="),a+=" "+f+") {"}var t=r,j=j||[];j.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"_limit")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: { comparison: '+b+", limit: "+f+", exclusive: "+E+" } ",e.opts.messages!==!1&&(a+=" , message: 'should be "+w+" ",a+=u?"' + "+f:""+i+"'"),e.opts.verbose&&(a+=" , schema:  ",a+=u?"validate.schema"+n:""+i,a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var $=a;return a=j.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+$+"]); ":" validate.errors = ["+$+"]; return false; ":" var err = "+$+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",c&&(a+=" else { "),a}},{}],14:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u=e.opts.v5&&i.$data,f=u?e.util.getData(i.$data,o,e.dataPathArr):i;u&&(a+=" var schema"+s+" = "+f+"; ",f="schema"+s);var d="maxItems"==r?">":"<";a+="if ( ",u&&(a+=" ("+f+" !== undefined && typeof "+f+" != 'number') || "),a+=" "+h+".length "+d+" "+f+") { ";var t=r,p=p||[];p.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"_limitItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: { limit: '+f+" } ",e.opts.messages!==!1&&(a+=" , message: 'should NOT have ",a+="maxItems"==r?"more":"less",a+=" than ",a+=u?"' + "+f+" + '":""+i,a+=" items' "),e.opts.verbose&&(a+=" , schema:  ",a+=u?"validate.schema"+n:""+i,a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var m=a;return a=p.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],15:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u=e.opts.v5&&i.$data,f=u?e.util.getData(i.$data,o,e.dataPathArr):i;u&&(a+=" var schema"+s+" = "+f+"; ",f="schema"+s);var d="maxLength"==r?">":"<";a+="if ( ",u&&(a+=" ("+f+" !== undefined && typeof "+f+" != 'number') || "),a+=e.opts.unicode===!1?" "+h+".length ":" ucs2length("+h+") ",a+=" "+d+" "+f+") { ";var t=r,p=p||[];p.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"_limitLength")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: { limit: '+f+" } ",e.opts.messages!==!1&&(a+=" , message: 'should NOT be ",a+="maxLength"==r?"longer":"shorter",a+=" than ",a+=u?"' + "+f+" + '":""+i,a+=" characters' "),e.opts.verbose&&(a+=" , schema:  ",a+=u?"validate.schema"+n:""+i,a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var m=a;return a=p.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],16:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u=e.opts.v5&&i.$data,f=u?e.util.getData(i.$data,o,e.dataPathArr):i;
+u&&(a+=" var schema"+s+" = "+f+"; ",f="schema"+s);var d="maxProperties"==r?">":"<";a+="if ( ",u&&(a+=" ("+f+" !== undefined && typeof "+f+" != 'number') || "),a+=" Object.keys("+h+").length "+d+" "+f+") { ";var t=r,p=p||[];p.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"_limitProperties")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: { limit: '+f+" } ",e.opts.messages!==!1&&(a+=" , message: 'should NOT have ",a+="maxProperties"==r?"more":"less",a+=" than ",a+=u?"' + "+f+" + '":""+i,a+=" properties' "),e.opts.verbose&&(a+=" , schema:  ",a+=u?"validate.schema"+n:""+i,a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var m=a;return a=p.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],17:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.schema[r],s=e.schemaPath+"."+r,o=e.errSchemaPath+"/"+r,i=!e.opts.allErrors,n=e.util.copy(e),l="";n.level++;var c=n.baseId,h=a;if(h)for(var u,f=-1,d=h.length-1;d>f;)u=h[f+=1],e.util.schemaHasRules(u,e.RULES.all)&&(n.schema=u,n.schemaPath=s+"["+f+"]",n.errSchemaPath=o+"/"+f,t+="  "+e.validate(n)+" ",n.baseId=c,i&&(t+=" if (valid"+n.level+") { ",l+="}"));return i&&(t+=" "+l.slice(0,-1)),t=e.util.cleanUpCode(t)}},{}],18:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+s,f="errs__"+s,d=e.util.copy(e),p="";d.level++;var m=i.every(function(r){return e.util.schemaHasRules(r,e.RULES.all)});if(m){var v=d.baseId;a+=" var "+f+" = errors; var "+u+" = false;  ";var y=e.compositeRule;e.compositeRule=d.compositeRule=!0;var g=i;if(g)for(var P,E=-1,b=g.length-1;b>E;)P=g[E+=1],d.schema=P,d.schemaPath=n+"["+E+"]",d.errSchemaPath=l+"/"+E,a+="  "+e.validate(d)+" ",d.baseId=v,a+=" "+u+" = "+u+" || valid"+d.level+"; if (!"+u+") { ",p+="}";e.compositeRule=d.compositeRule=y,a+=" "+p+" if (!"+u+") {  var err =   ",e.createErrors!==!1?(a+=" { keyword: '"+(t||"anyOf")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: {} ',e.opts.messages!==!1&&(a+=" , message: 'should match some schema in anyOf' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ",a+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else {  errors = "+f+"; if (vErrors !== null) { if ("+f+") vErrors.length = "+f+"; else vErrors = null; } ",e.opts.allErrors&&(a+=" } "),a=e.util.cleanUpCode(a)}else c&&(a+=" if (true) { ");return a}},{}],19:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+s,f=e.opts.v5&&i.$data,d=f?e.util.getData(i.$data,o,e.dataPathArr):i;f&&(a+=" var schema"+s+" = "+d+"; ",d="schema"+s),f||(a+=" var schema"+s+" = validate.schema"+n+";"),a+="var "+u+" = equal("+h+", schema"+s+"); if (!"+u+") {   ";var p=p||[];p.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"constant")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: {} ',e.opts.messages!==!1&&(a+=" , message: 'should be equal to constant' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var m=a;return a=p.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" }"}},{}],20:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u="errs__"+s,f=e.util.copy(e),d="";f.level++;var p={},m={};for(P in i){var v=i[P],y=Array.isArray(v)?m:p;y[P]=v}a+="var "+u+" = errors;";var g=e.errorPath;a+="var missing"+s+";";for(var P in m){if(y=m[P],a+=" if ("+h+e.util.getProperty(P)+" !== undefined ",c){a+=" && ( ";var E=y;if(E)for(var b,w=-1,j=E.length-1;j>w;){b=E[w+=1],w&&(a+=" || ");var $=e.util.getProperty(b);a+=" ( "+h+$+" === undefined && (missing"+s+" = "+e.util.toQuotedString(e.opts.jsonPointers?b:$)+") ) "}a+=")) {  ";var x="missing"+s,S="' + "+x+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.opts.jsonPointers?e.util.getPathExpr(g,x,!0):g+" + "+x);var _=_||[];_.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"dependencies")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { property: '"+e.util.escapeQuotes(P)+"', missingProperty: '"+S+"', depsCount: "+y.length+", deps: '"+e.util.escapeQuotes(1==y.length?y[0]:y.join(", "))+"' } ",e.opts.messages!==!1&&(a+=" , message: 'should have ",a+=1==y.length?"property "+e.util.escapeQuotes(y[0]):"properties "+e.util.escapeQuotes(y.join(", ")),a+=" when property "+e.util.escapeQuotes(P)+" is present' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var R=a;a=_.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+R+"]); ":" validate.errors = ["+R+"]; return false; ":" var err = "+R+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}else{a+=" ) { ";var O=y;if(O)for(var I,k=-1,A=O.length-1;A>k;){I=O[k+=1];var $=e.util.getProperty(I),S=e.util.escapeQuotes(I);e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPath(g,I,e.opts.jsonPointers)),a+=" if ("+h+$+" === undefined) {  var err =   ",e.createErrors!==!1?(a+=" { keyword: '"+(t||"dependencies")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { property: '"+e.util.escapeQuotes(P)+"', missingProperty: '"+S+"', depsCount: "+y.length+", deps: '"+e.util.escapeQuotes(1==y.length?y[0]:y.join(", "))+"' } ",e.opts.messages!==!1&&(a+=" , message: 'should have ",a+=1==y.length?"property "+e.util.escapeQuotes(y[0]):"properties "+e.util.escapeQuotes(y.join(", ")),a+=" when property "+e.util.escapeQuotes(P)+" is present' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ",a+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } "}}a+=" }   ",c&&(d+="}",a+=" else { ")}e.errorPath=g;var q=f.baseId;for(var P in p){var v=p[P];e.util.schemaHasRules(v,e.RULES.all)&&(a+=" valid"+f.level+" = true; if ("+h+"['"+P+"'] !== undefined) { ",f.schema=v,f.schemaPath=n+e.util.getProperty(P),f.errSchemaPath=l+"/"+e.util.escapeFragment(P),a+="  "+e.validate(f)+" ",f.baseId=q,a+=" }  ",c&&(a+=" if (valid"+f.level+") { ",d+="}"))}return c&&(a+="   "+d+" if ("+u+" == errors) {"),a=e.util.cleanUpCode(a)}},{}],21:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+s,f=e.opts.v5&&i.$data,d=f?e.util.getData(i.$data,o,e.dataPathArr):i;f&&(a+=" var schema"+s+" = "+d+"; ",d="schema"+s);var p="i"+s;f||(a+=" var schema"+s+" = validate.schema"+n+";"),a+="var "+u+";",f&&(a+=" if (schema"+s+" === undefined) "+u+" = true; else if (!Array.isArray(schema"+s+")) "+u+" = false; else {"),a+=""+u+" = false;for (var "+p+"=0; "+p+"<schema"+s+".length; "+p+"++) if (equal("+h+", schema"+s+"["+p+"])) { "+u+" = true; break; }",f&&(a+="  }  "),a+=" if (!"+u+") {   ";var m=m||[];m.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"enum")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: {} ',e.opts.messages!==!1&&(a+=" , message: 'should be equal to one of the allowed values' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var v=a;return a=m.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+v+"]); ":" validate.errors = ["+v+"]; return false; ":" var err = "+v+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" }",c&&(a+=" else { "),a}},{}],22:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||"");if(e.opts.format===!1)return c&&(a+=" if (true) { "),a;var u=e.opts.v5&&i.$data,f=u?e.util.getData(i.$data,o,e.dataPathArr):i;if(u&&(a+=" var schema"+s+" = "+f+"; ",f="schema"+s),u){var d="format"+s;a+=" var "+d+" = formats["+f+"]; var isObject"+s+" = typeof "+d+" == 'object' && !("+d+" instanceof RegExp) && "+d+".validate; if (isObject"+s+") { var async"+s+" = "+d+".async; "+d+" = "+d+".validate; } if (  ",u&&(a+=" ("+f+" !== undefined && typeof "+f+" != 'string') || "),a+=" ("+d+" && !(typeof "+d+" == 'function' ? ",a+=e.async?" (async"+s+" ? "+e.yieldAwait+" "+d+"("+h+") : "+d+"("+h+")) ":" "+d+"("+h+") ",a+=" : "+d+".test("+h+")))) {"}else{var d=e.formats[i];if(!d)return c&&(a+=" if (true) { "),a;var p="object"==typeof d&&!(d instanceof RegExp)&&d.validate;if(p){var m=d.async===!0;d=d.validate}if(m){if(!e.async)throw new Error("async format in sync schema");var v="formats"+e.util.getProperty(i)+".validate";a+=" if (!("+e.yieldAwait+" "+v+"("+h+"))) { "}else{a+=" if (! ";var v="formats"+e.util.getProperty(i);p&&(v+=".validate"),a+="function"==typeof d?" "+v+"("+h+") ":" "+v+".test("+h+") ",a+=") { "}}var y=y||[];y.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"format")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: { format:  ',a+=u?""+f:""+e.util.toQuotedString(i),a+="  } ",e.opts.messages!==!1&&(a+=" , message: 'should match format \"",a+=u?"' + "+f+" + '":""+e.util.escapeQuotes(i),a+="\"' "),e.opts.verbose&&(a+=" , schema:  ",a+=u?"validate.schema"+n:""+e.util.toQuotedString(i),a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var g=a;return a=y.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+g+"]); ":" validate.errors = ["+g+"]; return false; ":" var err = "+g+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",c&&(a+=" else { "),a}},{}],23:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+s,f="errs__"+s,d=e.util.copy(e),p="";d.level++;var m=d.dataLevel=e.dataLevel+1,v="data"+m,y=e.baseId;if(a+="var "+f+" = errors;var "+u+";",Array.isArray(i)){var g=e.schema.additionalItems;if(g===!1){a+=" "+u+" = "+h+".length <= "+i.length+"; ";var P=l;l=e.errSchemaPath+"/additionalItems",a+="  if (!"+u+") {   ";var E=E||[];E.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"additionalItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: { limit: '+i.length+" } ",e.opts.messages!==!1&&(a+=" , message: 'should NOT have more than "+i.length+" items' "),e.opts.verbose&&(a+=" , schema: false , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var b=a;a=E.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+b+"]); ":" validate.errors = ["+b+"]; return false; ":" var err = "+b+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",l=P,c&&(p+="}",a+=" else { ")}var w=i;if(w)for(var j,$=-1,x=w.length-1;x>$;)if(j=w[$+=1],e.util.schemaHasRules(j,e.RULES.all)){a+=" valid"+d.level+" = true; if ("+h+".length > "+$+") { ";var S=h+"["+$+"]";d.schema=j,d.schemaPath=n+"["+$+"]",d.errSchemaPath=l+"/"+$,d.errorPath=e.util.getPathExpr(e.errorPath,$,e.opts.jsonPointers,!0),d.dataPathArr[m]=$;var _=e.validate(d);d.baseId=y,a+=e.util.varOccurences(_,v)<2?" "+e.util.varReplace(_,v,S)+" ":" var "+v+" = "+S+"; "+_+" ",a+=" }  ",c&&(a+=" if (valid"+d.level+") { ",p+="}")}if("object"==typeof g&&e.util.schemaHasRules(g,e.RULES.all)){d.schema=g,d.schemaPath=e.schemaPath+".additionalItems",d.errSchemaPath=e.errSchemaPath+"/additionalItems",a+=" valid"+d.level+" = true; if ("+h+".length > "+i.length+") {  for (var i"+s+" = "+i.length+"; i"+s+" < "+h+".length; i"+s+"++) { ",d.errorPath=e.util.getPathExpr(e.errorPath,"i"+s,e.opts.jsonPointers,!0);var S=h+"[i"+s+"]";d.dataPathArr[m]="i"+s;var _=e.validate(d);d.baseId=y,a+=e.util.varOccurences(_,v)<2?" "+e.util.varReplace(_,v,S)+" ":" var "+v+" = "+S+"; "+_+" ",c&&(a+=" if (!valid"+d.level+") break; "),a+=" } }  ",c&&(a+=" if (valid"+d.level+") { ",p+="}")}}else if(e.util.schemaHasRules(i,e.RULES.all)){d.schema=i,d.schemaPath=n,d.errSchemaPath=l,a+="  for (var i"+s+" = 0; i"+s+" < "+h+".length; i"+s+"++) { ",d.errorPath=e.util.getPathExpr(e.errorPath,"i"+s,e.opts.jsonPointers,!0);var S=h+"[i"+s+"]";d.dataPathArr[m]="i"+s;var _=e.validate(d);d.baseId=y,a+=e.util.varOccurences(_,v)<2?" "+e.util.varReplace(_,v,S)+" ":" var "+v+" = "+S+"; "+_+" ",c&&(a+=" if (!valid"+d.level+") break; "),a+=" }  ",c&&(a+=" if (valid"+d.level+") { ",p+="}")}return c&&(a+=" "+p+" if ("+f+" == errors) {"),a=e.util.cleanUpCode(a)}},{}],24:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u=e.opts.v5&&i.$data,f=u?e.util.getData(i.$data,o,e.dataPathArr):i;u&&(a+=" var schema"+s+" = "+f+"; ",f="schema"+s),a+="var division"+s+";if (",u&&(a+=" "+f+" !== undefined && ( typeof "+f+" != 'number' || "),a+=" (division"+s+" = "+h+" / "+f+", ",a+=e.opts.multipleOfPrecision?" Math.abs(Math.round(division"+s+") - division"+s+") > 1e-"+e.opts.multipleOfPrecision+" ":" division"+s+" !== parseInt(division"+s+") ",a+=" ) ",u&&(a+="  )  "),a+=" ) {   ";var d=d||[];d.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"multipleOf")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: { multipleOf: '+f+" } ",e.opts.messages!==!1&&(a+=" , message: 'should be multiple of ",a+=u?"' + "+f:""+i+"'"),e.opts.verbose&&(a+=" , schema:  ",a+=u?"validate.schema"+n:""+i,a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var p=a;return a=d.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+p+"]); ":" validate.errors = ["+p+"]; return false; ":" var err = "+p+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],25:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u="errs__"+s,f=e.util.copy(e);if(f.level++,e.util.schemaHasRules(i,e.RULES.all)){f.schema=i,f.schemaPath=n,f.errSchemaPath=l,a+=" var "+u+" = errors;  ";var d=e.compositeRule;e.compositeRule=f.compositeRule=!0,f.createErrors=!1;var p;f.opts.allErrors&&(p=f.opts.allErrors,f.opts.allErrors=!1),a+=" "+e.validate(f)+" ",f.createErrors=!0,p&&(f.opts.allErrors=p),e.compositeRule=f.compositeRule=d,a+=" if (valid"+f.level+") {   ";var m=m||[];m.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"not")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: {} ',e.opts.messages!==!1&&(a+=" , message: 'should NOT be valid' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var v=a;a=m.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+v+"]); ":" validate.errors = ["+v+"]; return false; ":" var err = "+v+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } else {  errors = "+u+"; if (vErrors !== null) { if ("+u+") vErrors.length = "+u+"; else vErrors = null; } ",e.opts.allErrors&&(a+=" } ")}else a+="  var err =   ",e.createErrors!==!1?(a+=" { keyword: '"+(t||"not")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: {} ',e.opts.messages!==!1&&(a+=" , message: 'should NOT be valid' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ",a+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",c&&(a+=" if (false) { ");return a}},{}],26:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+s,f="errs__"+s,d=e.util.copy(e),p="";d.level++,a+="var "+f+" = errors;var prevValid"+s+" = false;var "+u+" = false;";var m=d.baseId,v=e.compositeRule;e.compositeRule=d.compositeRule=!0;var y=i;if(y)for(var g,P=-1,E=y.length-1;E>P;)g=y[P+=1],e.util.schemaHasRules(g,e.RULES.all)?(d.schema=g,d.schemaPath=n+"["+P+"]",d.errSchemaPath=l+"/"+P,a+="  "+e.validate(d)+" ",d.baseId=m):a+=" var valid"+d.level+" = true; ",P&&(a+=" if (valid"+d.level+" && prevValid"+s+") "+u+" = false; else { ",p+="}"),a+=" if (valid"+d.level+") "+u+" = prevValid"+s+" = true;";e.compositeRule=d.compositeRule=v,a+=""+p+"if (!"+u+") {   ";var b=b||[];b.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"oneOf")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: {} ',e.opts.messages!==!1&&(a+=" , message: 'should match exactly one schema in oneOf' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var w=a;return a=b.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+w+"]); ":" validate.errors = ["+w+"]; return false; ":" var err = "+w+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} else {  errors = "+f+"; if (vErrors !== null) { if ("+f+") vErrors.length = "+f+"; else vErrors = null; }",e.opts.allErrors&&(a+=" } "),a}},{}],27:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u=e.opts.v5&&i.$data,f=u?e.util.getData(i.$data,o,e.dataPathArr):i;u&&(a+=" var schema"+s+" = "+f+"; ",f="schema"+s);var d=u?"(new RegExp("+f+"))":e.usePattern(i);a+="if ( ",u&&(a+=" ("+f+" !== undefined && typeof "+f+" != 'string') || "),a+=" !"+d+".test("+h+") ) {   ";var p=p||[];p.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"pattern")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: { pattern:  ',a+=u?""+f:""+e.util.toQuotedString(i),a+="  } ",e.opts.messages!==!1&&(a+=" , message: 'should match pattern \"",a+=u?"' + "+f+" + '":""+e.util.escapeQuotes(i),a+="\"' "),e.opts.verbose&&(a+=" , schema:  ",a+=u?"validate.schema"+n:""+e.util.toQuotedString(i),a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var m=a;return a=p.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",c&&(a+=" else { "),a}},{}],28:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+s,f="key"+s,d="patternMatched"+s,p="";a+="var "+u+" = true;";var m=i;if(m)for(var v,y=-1,g=m.length-1;g>y;){v=m[y+=1],a+=" var "+d+" = false; for (var "+f+" in "+h+") { "+d+" = "+e.usePattern(v)+".test("+f+"); if ("+d+") break; } ";var P=e.util.escapeQuotes(v);a+=" if (!"+d+") { "+u+" = false;  var err =   ",e.createErrors!==!1?(a+=" { keyword: '"+(t||"patternRequired")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { missingPattern: '"+P+"' } ",e.opts.messages!==!1&&(a+=" , message: 'should have property matching pattern \\'"+P+"\\'' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ",a+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; }   ",c&&(p+="}",a+=" else { ")}return a+=""+p}},{}],29:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+s,f="errs__"+s,d=e.util.copy(e),p="";d.level++;var m=d.dataLevel=e.dataLevel+1,v="data"+m,y=Object.keys(i||{}),g=e.schema.patternProperties||{},P=Object.keys(g),E=e.schema.additionalProperties,b=y.length||P.length,w=E===!1,j="object"==typeof E&&Object.keys(E).length,$=e.opts.removeAdditional,x=w||j||$,S=e.baseId,_=e.schema.required;if(_&&(!e.opts.v5||!_.$data)&&e.opts.loopRequired>_.length)var R=e.util.toHash(_);if(e.opts.v5)var O=e.schema.patternGroups||{},I=Object.keys(O);if(a+="var "+f+" = errors;var valid"+d.level+" = true;",x){if(a+=" for (var key"+s+" in "+h+") { ",b){if(a+=" var isAdditional"+s+" = !(false ",y.length)if(y.length>5)a+=" || validate.schema"+n+"[key"+s+"] ";else{var k=y;if(k)for(var A,q=-1,L=k.length-1;L>q;)A=k[q+=1],a+=" || key"+s+" == "+e.util.toQuotedString(A)+" "}if(P.length){var C=P;if(C)for(var D,V=-1,U=C.length-1;U>V;)D=C[V+=1],a+=" || "+e.usePattern(D)+".test(key"+s+") "}if(e.opts.v5&&I&&I.length){var z=I;if(z)for(var T,V=-1,M=z.length-1;M>V;)T=z[V+=1],a+=" || "+e.usePattern(T)+".test(key"+s+") "}a+=" ); if (isAdditional"+s+") { "}if("all"==$)a+=" delete "+h+"[key"+s+"]; ";else{var Q=e.errorPath,N="' + key"+s+" + '";if(e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(e.errorPath,"key"+s,e.opts.jsonPointers)),w)if($)a+=" delete "+h+"[key"+s+"]; ";else{a+=" valid"+d.level+" = false; ";var H=l;l=e.errSchemaPath+"/additionalProperties";var F=F||[];F.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"additionalProperties")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { additionalProperty: '"+N+"' } ",e.opts.messages!==!1&&(a+=" , message: 'should NOT have additional properties' "),e.opts.verbose&&(a+=" , schema: false , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var G=a;a=F.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+G+"]); ":" validate.errors = ["+G+"]; return false; ":" var err = "+G+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l=H,c&&(a+=" break; ")}else if(j)if("failing"==$){a+=" var "+f+" = errors;  ";var J=e.compositeRule;e.compositeRule=d.compositeRule=!0,d.schema=E,d.schemaPath=e.schemaPath+".additionalProperties",d.errSchemaPath=e.errSchemaPath+"/additionalProperties",d.errorPath=e.opts._errorDataPathProperty?e.errorPath:e.util.getPathExpr(e.errorPath,"key"+s,e.opts.jsonPointers);var K=h+"[key"+s+"]";d.dataPathArr[m]="key"+s;var B=e.validate(d);d.baseId=S,a+=e.util.varOccurences(B,v)<2?" "+e.util.varReplace(B,v,K)+" ":" var "+v+" = "+K+"; "+B+" ",a+=" if (!valid"+d.level+") { errors = "+f+"; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete "+h+"[key"+s+"]; }  ",e.compositeRule=d.compositeRule=J}else{d.schema=E,d.schemaPath=e.schemaPath+".additionalProperties",d.errSchemaPath=e.errSchemaPath+"/additionalProperties",d.errorPath=e.opts._errorDataPathProperty?e.errorPath:e.util.getPathExpr(e.errorPath,"key"+s,e.opts.jsonPointers);var K=h+"[key"+s+"]";d.dataPathArr[m]="key"+s;var B=e.validate(d);d.baseId=S,a+=e.util.varOccurences(B,v)<2?" "+e.util.varReplace(B,v,K)+" ":" var "+v+" = "+K+"; "+B+" ",c&&(a+=" if (!valid"+d.level+") break; ")}e.errorPath=Q}b&&(a+=" } "),a+=" }  ",c&&(a+=" if (valid"+d.level+") { ",p+="}")}var Y=e.opts.useDefaults&&!e.compositeRule;if(y.length){var Z=y;if(Z)for(var A,W=-1,X=Z.length-1;X>W;){A=Z[W+=1];var ee=i[A];if(e.util.schemaHasRules(ee,e.RULES.all)){var re=e.util.getProperty(A),K=h+re,te=Y&&void 0!==ee["default"];d.schema=ee,d.schemaPath=n+re,d.errSchemaPath=l+"/"+e.util.escapeFragment(A),d.errorPath=e.util.getPath(e.errorPath,A,e.opts.jsonPointers),d.dataPathArr[m]=e.util.toQuotedString(A);var B=e.validate(d);if(d.baseId=S,e.util.varOccurences(B,v)<2){B=e.util.varReplace(B,v,K);var ae=K}else{var ae=v;a+=" var "+v+" = "+K+"; "}if(te)a+=" "+B+" ";else{if(R&&R[A]){a+=" if ("+ae+" === undefined) { valid"+d.level+" = false; ";var Q=e.errorPath,H=l,se=e.util.escapeQuotes(A);e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPath(Q,A,e.opts.jsonPointers)),l=e.errSchemaPath+"/required";var F=F||[];F.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"required")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { missingProperty: '"+se+"' } ",e.opts.messages!==!1&&(a+=" , message: '",a+=e.opts._errorDataPathProperty?"is a required property":"should have required property \\'"+se+"\\'",a+="' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var G=a;a=F.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+G+"]); ":" validate.errors = ["+G+"]; return false; ":" var err = "+G+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l=H,e.errorPath=Q,a+=" } else { "}else a+=c?" if ("+ae+" === undefined) { valid"+d.level+" = true; } else { ":" if ("+ae+" !== undefined) { ";a+=" "+B+" } "}}c&&(a+=" if (valid"+d.level+") { ",p+="}")}}var oe=P;if(oe)for(var D,ie=-1,ne=oe.length-1;ne>ie;){D=oe[ie+=1];var ee=g[D];if(e.util.schemaHasRules(ee,e.RULES.all)){d.schema=ee,d.schemaPath=e.schemaPath+".patternProperties"+e.util.getProperty(D),d.errSchemaPath=e.errSchemaPath+"/patternProperties/"+e.util.escapeFragment(D),a+=" for (var key"+s+" in "+h+") { if ("+e.usePattern(D)+".test(key"+s+")) { ",d.errorPath=e.util.getPathExpr(e.errorPath,"key"+s,e.opts.jsonPointers);var K=h+"[key"+s+"]";d.dataPathArr[m]="key"+s;var B=e.validate(d);d.baseId=S,a+=e.util.varOccurences(B,v)<2?" "+e.util.varReplace(B,v,K)+" ":" var "+v+" = "+K+"; "+B+" ",c&&(a+=" if (!valid"+d.level+") break; "),a+=" } ",c&&(a+=" else valid"+d.level+" = true; "),a+=" }  ",c&&(a+=" if (valid"+d.level+") { ",p+="}")}}if(e.opts.v5){var le=I;if(le)for(var T,ce=-1,he=le.length-1;he>ce;){T=le[ce+=1];var ue=O[T],ee=ue.schema;if(e.util.schemaHasRules(ee,e.RULES.all)){d.schema=ee,d.schemaPath=e.schemaPath+".patternGroups"+e.util.getProperty(T)+".schema",d.errSchemaPath=e.errSchemaPath+"/patternGroups/"+e.util.escapeFragment(T)+"/schema",a+=" var pgPropCount"+s+" = 0; for (var key"+s+" in "+h+") { if ("+e.usePattern(T)+".test(key"+s+")) { pgPropCount"+s+"++; ",d.errorPath=e.util.getPathExpr(e.errorPath,"key"+s,e.opts.jsonPointers);var K=h+"[key"+s+"]";d.dataPathArr[m]="key"+s;var B=e.validate(d);d.baseId=S,a+=e.util.varOccurences(B,v)<2?" "+e.util.varReplace(B,v,K)+" ":" var "+v+" = "+K+"; "+B+" ",c&&(a+=" if (!valid"+d.level+") break; "),a+=" } ",c&&(a+=" else valid"+d.level+" = true; "),a+=" }  ",c&&(a+=" if (valid"+d.level+") { ",p+="}");var fe=ue.minimum,de=ue.maximum;if(void 0!==fe||void 0!==de){a+=" var "+u+" = true; ";var H=l;if(void 0!==fe){var pe=fe,me="minimum",ve="less";a+=" "+u+" = pgPropCount"+s+" >= "+fe+"; ",l=e.errSchemaPath+"/patternGroups/minimum",a+="  if (!"+u+") {   ";var F=F||[];F.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"patternGroups")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { reason: '"+me+"', limit: "+pe+", pattern: '"+e.util.escapeQuotes(T)+"' } ",e.opts.messages!==!1&&(a+=" , message: 'should NOT have "+ve+" than "+pe+' properties matching pattern "'+e.util.escapeQuotes(T)+"\"' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var G=a;a=F.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+G+"]); ":" validate.errors = ["+G+"]; return false; ":" var err = "+G+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",void 0!==de&&(a+=" else ")}if(void 0!==de){var pe=de,me="maximum",ve="more";a+=" "+u+" = pgPropCount"+s+" <= "+de+"; ",l=e.errSchemaPath+"/patternGroups/maximum",a+="  if (!"+u+") {   ";var F=F||[];F.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"patternGroups")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { reason: '"+me+"', limit: "+pe+", pattern: '"+e.util.escapeQuotes(T)+"' } ",e.opts.messages!==!1&&(a+=" , message: 'should NOT have "+ve+" than "+pe+' properties matching pattern "'+e.util.escapeQuotes(T)+"\"' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var G=a;a=F.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+G+"]); ":" validate.errors = ["+G+"]; return false; ":" var err = "+G+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } "}l=H,c&&(a+=" if ("+u+") { ",p+="}")}}}}return c&&(a+=" "+p+" if ("+f+" == errors) {"),a=e.util.cleanUpCode(a)}},{}],30:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a,s,o=" ",i=e.level,n=e.dataLevel,l=e.schema[r],c=e.errSchemaPath+"/"+r,h=!e.opts.allErrors,u="data"+(n||""),f="valid"+i;if("#"==l||"#/"==l)e.isRoot?(a=e.async,s="validate"):(a=e.root.schema.$async===!0,s="root.refVal[0]");else{var d=e.resolveRef(e.baseId,l,e.isRoot);if(void 0===d){var p="can't resolve reference "+l+" from id "+e.baseId;if("fail"==e.opts.missingRefs){console.log(p);var m=m||[];m.push(o),o="",e.createErrors!==!1?(o+=" { keyword: '"+(t||"$ref")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+c+"\" , params: { ref: '"+e.util.escapeQuotes(l)+"' } ",e.opts.messages!==!1&&(o+=" , message: 'can\\'t resolve reference "+e.util.escapeQuotes(l)+"' "),e.opts.verbose&&(o+=" , schema: "+e.util.toQuotedString(l)+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),o+=" } "):o+=" {} ";var v=o;o=m.pop(),o+=!e.compositeRule&&h?e.async?" throw new ValidationError(["+v+"]); ":" validate.errors = ["+v+"]; return false; ":" var err = "+v+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",h&&(o+=" if (false) { ")}else{if("ignore"!=e.opts.missingRefs){var y=new Error(p);throw y.missingRef=e.resolve.url(e.baseId,l),y.missingSchema=e.resolve.normalizeId(e.resolve.fullPath(y.missingRef)),y}console.log(p),h&&(o+=" if (true) { ")}}else if(d.inline){var g=e.util.copy(e);g.level++,g.schema=d.schema,g.schemaPath="",g.errSchemaPath=l;var P=e.validate(g).replace(/validate\.schema/g,d.code);o+=" "+P+" ",h&&(o+=" if (valid"+g.level+") { ")}else a=d.$async===!0,s=d.code}if(s){var m=m||[];m.push(o),o="",o+=e.opts.passContext?" "+s+".call(this, ":" "+s+"( ",o+=" "+u+", (dataPath || '')",'""'!=e.errorPath&&(o+=" + "+e.errorPath),o+=n?" , data"+(n-1||"")+" , "+e.dataPathArr[n]+" ":" , parentData , parentDataProperty ",o+=")  ";var E=o;if(o=m.pop(),a){if(!e.async)throw new Error("async schema referenced by sync schema");o+=" try { ",h&&(o+="var "+f+" ="),o+=" "+e.yieldAwait+" "+E+"; } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; } ",h&&(o+=" if ("+f+") { ")}else o+=" if (!"+E+") { if (vErrors === null) vErrors = "+s+".errors; else vErrors = vErrors.concat("+s+".errors); errors = vErrors.length; } ",h&&(o+=" else { ")}return o}},{}],31:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+s,f=e.opts.v5&&i.$data,d=f?e.util.getData(i.$data,o,e.dataPathArr):i;
+if(f&&(a+=" var schema"+s+" = "+d+"; ",d="schema"+s),!f)if(e.opts.loopRequired>i.length&&e.schema.properties&&Object.keys(e.schema.properties).length){var p=[],m=i;if(m)for(var v,y=-1,g=m.length-1;g>y;){v=m[y+=1];var P=e.schema.properties[v];P&&e.util.schemaHasRules(P,e.RULES.all)||(p[p.length]=v)}}else var p=i;if(f||p.length){var E=e.errorPath,b=f||p.length>=e.opts.loopRequired;if(c)if(a+=" var missing"+s+"; ",b){f||(a+=" var schema"+s+" = validate.schema"+n+"; ");var w="i"+s,j="schema"+s+"["+w+"]",$="' + "+j+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(E,j,e.opts.jsonPointers)),a+=" var "+u+" = true; ",f&&(a+=" if (schema"+s+" === undefined) "+u+" = true; else if (!Array.isArray(schema"+s+")) "+u+" = false; else {"),a+=" for (var "+w+" = 0; "+w+" < schema"+s+".length; "+w+"++) { "+u+" = "+h+"[schema"+s+"["+w+"]] !== undefined; if (!"+u+") break; } ",f&&(a+="  }  "),a+="  if (!"+u+") {   ";var x=x||[];x.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"required")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { missingProperty: '"+$+"' } ",e.opts.messages!==!1&&(a+=" , message: '",a+=e.opts._errorDataPathProperty?"is a required property":"should have required property \\'"+$+"\\'",a+="' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var S=a;a=x.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+S+"]); ":" validate.errors = ["+S+"]; return false; ":" var err = "+S+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } else { "}else{a+=" if ( ";var _=p;if(_)for(var R,w=-1,O=_.length-1;O>w;){R=_[w+=1],w&&(a+=" || ");var I=e.util.getProperty(R);a+=" ( "+h+I+" === undefined && (missing"+s+" = "+e.util.toQuotedString(e.opts.jsonPointers?R:I)+") ) "}a+=") {  ";var j="missing"+s,$="' + "+j+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.opts.jsonPointers?e.util.getPathExpr(E,j,!0):E+" + "+j);var x=x||[];x.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"required")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { missingProperty: '"+$+"' } ",e.opts.messages!==!1&&(a+=" , message: '",a+=e.opts._errorDataPathProperty?"is a required property":"should have required property \\'"+$+"\\'",a+="' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var S=a;a=x.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+S+"]); ":" validate.errors = ["+S+"]; return false; ":" var err = "+S+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } else { "}else if(b){f||(a+=" var schema"+s+" = validate.schema"+n+"; ");var w="i"+s,j="schema"+s+"["+w+"]",$="' + "+j+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(E,j,e.opts.jsonPointers)),f&&(a+=" if (schema"+s+" && !Array.isArray(schema"+s+")) {  var err =   ",e.createErrors!==!1?(a+=" { keyword: '"+(t||"required")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { missingProperty: '"+$+"' } ",e.opts.messages!==!1&&(a+=" , message: '",a+=e.opts._errorDataPathProperty?"is a required property":"should have required property \\'"+$+"\\'",a+="' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ",a+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (schema"+s+" !== undefined) { "),a+=" for (var "+w+" = 0; "+w+" < schema"+s+".length; "+w+"++) { if ("+h+"[schema"+s+"["+w+"]] === undefined) {  var err =   ",e.createErrors!==!1?(a+=" { keyword: '"+(t||"required")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { missingProperty: '"+$+"' } ",e.opts.messages!==!1&&(a+=" , message: '",a+=e.opts._errorDataPathProperty?"is a required property":"should have required property \\'"+$+"\\'",a+="' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ",a+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ",f&&(a+="  }  ")}else{var k=p;if(k)for(var A,q=-1,L=k.length-1;L>q;){A=k[q+=1];var I=e.util.getProperty(A),$=e.util.escapeQuotes(A);e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPath(E,A,e.opts.jsonPointers)),a+=" if ("+h+I+" === undefined) {  var err =   ",e.createErrors!==!1?(a+=" { keyword: '"+(t||"required")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+"\" , params: { missingProperty: '"+$+"' } ",e.opts.messages!==!1&&(a+=" , message: '",a+=e.opts._errorDataPathProperty?"is a required property":"should have required property \\'"+$+"\\'",a+="' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ",a+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } "}}e.errorPath=E}else c&&(a+=" if (true) {");return a}},{}],32:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+s,f="errs__"+s,d=e.util.copy(e),p="";d.level++;var m,v="ifPassed"+e.level,y=d.baseId;a+="var "+v+";";var g=i;if(g)for(var P,E=-1,b=g.length-1;b>E;){if(P=g[E+=1],E&&!m&&(a+=" if (!"+v+") { ",p+="}"),P["if"]&&e.util.schemaHasRules(P["if"],e.RULES.all)){a+=" var "+f+" = errors;   ";var w=e.compositeRule;if(e.compositeRule=d.compositeRule=!0,d.createErrors=!1,d.schema=P["if"],d.schemaPath=n+"["+E+"].if",d.errSchemaPath=l+"/"+E+"/if",a+="  "+e.validate(d)+" ",d.baseId=y,d.createErrors=!0,e.compositeRule=d.compositeRule=w,a+=" "+v+" = valid"+d.level+"; if ("+v+") {  ","boolean"==typeof P.then){if(P.then===!1){var j=j||[];j.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"switch")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: { caseIndex: '+E+" } ",e.opts.messages!==!1&&(a+=" , message: 'should pass \"switch\" keyword validation' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var $=a;a=j.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+$+"]); ":" validate.errors = ["+$+"]; return false; ":" var err = "+$+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+=" var valid"+d.level+" = "+P.then+"; "}else d.schema=P.then,d.schemaPath=n+"["+E+"].then",d.errSchemaPath=l+"/"+E+"/then",a+="  "+e.validate(d)+" ",d.baseId=y;a+="  } else {  errors = "+f+"; if (vErrors !== null) { if ("+f+") vErrors.length = "+f+"; else vErrors = null; } } "}else if(a+=" "+v+" = true;  ","boolean"==typeof P.then){if(P.then===!1){var j=j||[];j.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"switch")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: { caseIndex: '+E+" } ",e.opts.messages!==!1&&(a+=" , message: 'should pass \"switch\" keyword validation' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var $=a;a=j.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+$+"]); ":" validate.errors = ["+$+"]; return false; ":" var err = "+$+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}a+=" var valid"+d.level+" = "+P.then+"; "}else d.schema=P.then,d.schemaPath=n+"["+E+"].then",d.errSchemaPath=l+"/"+E+"/then",a+="  "+e.validate(d)+" ",d.baseId=y;m=P["continue"]}return a+=""+p+"var "+u+" = valid"+d.level+"; ",a=e.util.cleanUpCode(a)}},{}],33:[function(e,r,t){"use strict";r.exports=function(e,r){var t,a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+"."+r,l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,h="data"+(o||""),u="valid"+s,f=e.opts.v5&&i.$data,d=f?e.util.getData(i.$data,o,e.dataPathArr):i;if(f&&(a+=" var schema"+s+" = "+d+"; ",d="schema"+s),(i||f)&&e.opts.uniqueItems!==!1){f&&(a+=" var "+u+"; if ("+d+" === false || "+d+" === undefined) "+u+" = true; else if (typeof "+d+" != 'boolean') "+u+" = false; else { "),a+=" var "+u+" = true; if ("+h+".length > 1) { var i = "+h+".length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal("+h+"[i], "+h+"[j])) { "+u+" = false; break outer; } } } } ",f&&(a+="  }  "),a+=" if (!"+u+") {   ";var p=p||[];p.push(a),a="",e.createErrors!==!1?(a+=" { keyword: '"+(t||"uniqueItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+l+'" , params: { i: i, j: j } ',e.opts.messages!==!1&&(a+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),e.opts.verbose&&(a+=" , schema:  ",a+=f?"validate.schema"+n:""+i,a+="         , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),a+=" } "):a+=" {} ";var m=a;a=p.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",c&&(a+=" else { ")}else c&&(a+=" if (true) { ");return a}},{}],34:[function(e,r,t){"use strict";r.exports=function(e,r){function t(e){for(var r=0;e.rules.length>r;r++)if(a(e.rules[r]))return!0}function a(r){return void 0!==e.schema[r.keyword]||"properties"==r.keyword&&(e.schema.additionalProperties===!1||"object"==typeof e.schema.additionalProperties||e.schema.patternProperties&&Object.keys(e.schema.patternProperties).length||e.opts.v5&&e.schema.patternGroups&&Object.keys(e.schema.patternGroups).length)}var s="",o=e.schema.$async===!0;if(e.isTop){var i=e.isTop,n=e.level=0,l=e.dataLevel=0,c="data";if(e.rootId=e.resolve.fullPath(e.root.schema.id),e.baseId=e.baseId||e.rootId,o){e.async=!0;var h="es7"==e.opts.async;e.yieldAwait=h?"await":"yield"}delete e.isTop,e.dataPathArr=[void 0],s+=" validate = ",o?h?s+=" (async function ":("co*"==e.opts.async&&(s+="co.wrap"),s+="(function* "):s+=" (function ",s+=" (data, dataPath, parentData, parentDataProperty) { 'use strict'; var vErrors = null; ",s+=" var errors = 0;     "}else{var n=e.level,l=e.dataLevel,c="data"+(l||"");if(e.schema.id&&(e.baseId=e.resolve.url(e.baseId,e.schema.id)),o&&!e.async)throw new Error("async schema in sync schema");s+=" var errs_"+n+" = errors;"}var u,f="valid"+n,d=!e.opts.allErrors,p="",m="",v=e.schema.type,y=Array.isArray(v);if(v&&e.opts.coerceTypes){var g=e.util.coerceToTypes(v);if(g){var P=e.schemaPath+".type",E=e.errSchemaPath+"/type",b=y?"checkDataTypes":"checkDataType";s+=" if ("+e.util[b](v,c,!0)+") {  ";var w="dataType"+n,j="coerced"+n;s+=" var "+w+" = typeof "+c+"; var "+j+" = undefined; ";var $="",x=g;if(x)for(var S,_=-1,R=x.length-1;R>_;)S=x[_+=1],_&&(s+=" if ("+j+" === undefined) { ",$+="}"),"string"==S?s+=" if ("+w+" == 'number' || "+w+" == 'boolean') "+j+" = '' + "+c+"; else if ("+c+" === null) "+j+" = ''; ":"number"==S||"integer"==S?(s+=" if ("+w+" == 'boolean' || "+c+" === null || ("+w+" == 'string' && "+c+" && "+c+" == +"+c+" ","integer"==S&&(s+=" && !("+c+" % 1)"),s+=")) "+j+" = +"+c+"; "):"boolean"==S?s+=" if ("+c+" === 'false' || "+c+" === 0 || "+c+" === null) "+j+" = false; else if ("+c+" === 'true' || "+c+" === 1) "+j+" = true; ":"null"==S&&(s+=" if ("+c+" === '' || "+c+" === 0 || "+c+" === false) "+j+" = null; ");s+=" "+$+" if ("+j+" === undefined) {   ";var O=O||[];O.push(s),s="",e.createErrors!==!1?(s+=" { keyword: '"+(u||"type")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+E+"\" , params: { type: '",s+=y?""+v.join(","):""+v,s+="' } ",e.opts.messages!==!1&&(s+=" , message: 'should be ",s+=y?""+v.join(","):""+v,s+="' "),e.opts.verbose&&(s+=" , schema: validate.schema"+P+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),s+=" } "):s+=" {} ";var I=s;if(s=O.pop(),s+=!e.compositeRule&&d?e.async?" throw new ValidationError(["+I+"]); ":" validate.errors = ["+I+"]; return false; ":" var err = "+I+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+=" } else { ",l){var k="data"+(l-1||""),A=e.dataPathArr[l];s+=" "+c+" = "+k+"["+A+"] = "+j+"; "}else s+=" data = "+j+"; if (parentData !== undefined) parentData[parentDataProperty] = "+j+"; ";s+=" } } "}}var q=e.RULES;if(q)for(var L,C=-1,D=q.length-1;D>C;)if(L=q[C+=1],t(L)){if(L.type&&(s+=" if ("+e.util.checkDataType(L.type,c)+") { "),e.opts.useDefaults&&!e.compositeRule)if("object"==L.type&&e.schema.properties){var V=e.schema.properties,U=Object.keys(V),z=U;if(z)for(var T,M=-1,Q=z.length-1;Q>M;){T=z[M+=1];var N=V[T];if(void 0!==N["default"]){var H=c+e.util.getProperty(T);s+="  if ("+H+" === undefined) "+H+" = ",s+="shared"==e.opts.useDefaults?" "+e.useDefault(N["default"])+" ":" "+JSON.stringify(N["default"])+" ",s+="; "}}}else if("array"==L.type&&Array.isArray(e.schema.items)){var F=e.schema.items;if(F)for(var N,_=-1,G=F.length-1;G>_;)if(N=F[_+=1],void 0!==N["default"]){var H=c+"["+_+"]";s+="  if ("+H+" === undefined) "+H+" = ",s+="shared"==e.opts.useDefaults?" "+e.useDefault(N["default"])+" ":" "+JSON.stringify(N["default"])+" ",s+="; "}}var J=L.rules;if(J)for(var K,B=-1,Y=J.length-1;Y>B;)if(K=J[B+=1],a(K)){if(K.custom){var V=e.schema[K.keyword],Z=e.useCustomRule(K,V,e.schema,e),W=Z.code+".errors",P=e.schemaPath+"."+K.keyword,E=e.errSchemaPath+"/"+K.keyword,X="errs"+n,_="i"+n,ee="ruleErr"+n,re=K.definition,te=re.async,ae=re.inline,se=re.macro;if(te&&!e.async)throw new Error("async keyword in sync schema");if(ae||se||(s+=""+W+" = null;"),s+="var "+X+" = errors;var valid"+n+";",ae&&re.statements)s+=" "+Z.validate;else if(se){var oe=e.util.copy(e);oe.level++,oe.schema=Z.validate,oe.schemaPath="";var ie=e.compositeRule;e.compositeRule=oe.compositeRule=!0;var ne=e.validate(oe).replace(/validate\.schema/g,Z.code);e.compositeRule=oe.compositeRule=ie,s+=" "+ne}else if(re.compile||re.validate){var O=O||[];O.push(s),s="",s+="  "+Z.code+".call( ",s+=e.opts.passContext?"this":"self",s+=re.compile||re.schema===!1?" , "+c+" ":" , validate.schema"+P+" , "+c+" , validate.schema"+e.schemaPath+" ",s+=" , (dataPath || '')",'""'!=e.errorPath&&(s+=" + "+e.errorPath),s+=l?" , data"+(l-1||"")+" , "+e.dataPathArr[l]+" ":" , parentData , parentDataProperty ",s+=" )  ";var le=s;s=O.pop(),re.errors!==!1&&(te?(W="customErrors"+n,s+=" var "+W+" = null; try { valid"+n+" = "+e.yieldAwait+le+"; } catch (e) { valid"+n+" = false; if (e instanceof ValidationError) "+W+" = e.errors; else throw e; } "):s+=" "+Z.code+".errors = null; ")}s+="if (! ",s+=ae?re.statements?" valid"+n+" ":" ("+Z.validate+") ":se?" valid"+oe.level+" ":te?re.errors===!1?" ("+e.yieldAwait+le+") ":" valid"+n+" ":" "+le+" ",s+=") { ",u=K.keyword;var O=O||[];O.push(s),s="";var O=O||[];O.push(s),s="",e.createErrors!==!1?(s+=" { keyword: '"+(u||"custom")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+E+"\" , params: { keyword: '"+K.keyword+"' } ",e.opts.messages!==!1&&(s+=" , message: 'should pass \""+K.keyword+"\" keyword validation' "),e.opts.verbose&&(s+=" , schema: validate.schema"+P+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),s+=" } "):s+=" {} ";var I=s;s=O.pop(),s+=!e.compositeRule&&d?e.async?" throw new ValidationError(["+I+"]); ":" validate.errors = ["+I+"]; return false; ":" var err = "+I+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";var ce=s;s=O.pop(),ae?re.errors?"full"!=re.errors&&(s+="  for (var "+_+"="+X+"; "+_+"<errors; "+_+"++) { var "+ee+" = vErrors["+_+"]; if ("+ee+".dataPath === undefined) { "+ee+".dataPath = (dataPath || '') + "+e.errorPath+"; } if ("+ee+".schemaPath === undefined) { "+ee+'.schemaPath = "'+E+'"; } ',e.opts.verbose&&(s+=" "+ee+".schema = validate.schema"+P+"; "+ee+".data = "+c+"; "),s+=" } "):re.errors===!1?s+=" "+ce+" ":(s+=" if ("+X+" == errors) { "+ce+" } else {  for (var "+_+"="+X+"; "+_+"<errors; "+_+"++) { var "+ee+" = vErrors["+_+"]; if ("+ee+".dataPath === undefined) { "+ee+".dataPath = (dataPath || '') + "+e.errorPath+"; } if ("+ee+".schemaPath === undefined) { "+ee+'.schemaPath = "'+E+'"; } ',e.opts.verbose&&(s+=" "+ee+".schema = validate.schema"+P+"; "+ee+".data = "+c+"; "),s+=" } } "):se?(s+="   var err =   ",e.createErrors!==!1?(s+=" { keyword: '"+(u||"custom")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+E+"\" , params: { keyword: '"+K.keyword+"' } ",e.opts.messages!==!1&&(s+=" , message: 'should pass \""+K.keyword+"\" keyword validation' "),e.opts.verbose&&(s+=" , schema: validate.schema"+P+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),s+=" } "):s+=" {} ",s+=";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&d&&(s+=e.async?" throw new ValidationError(vErrors); ":" validate.errors = vErrors; return false ")):re.errors===!1?s+=" "+ce+" ":(s+=" if (Array.isArray("+W+")) { if (vErrors === null) vErrors = "+W+"; else vErrors.concat("+W+"); errors = vErrors.length;  for (var "+_+"="+X+"; "+_+"<errors; "+_+"++) { var "+ee+" = vErrors["+_+"];  "+ee+".dataPath = (dataPath || '') + "+e.errorPath+";   "+ee+'.schemaPath = "'+E+'";  ',e.opts.verbose&&(s+=" "+ee+".schema = validate.schema"+P+"; "+ee+".data = "+c+"; "),s+=" } } else { "+ce+" } "),u=void 0,s+=" } ",d&&(s+=" else { ")}else s+=" "+K.code(e,K.keyword)+" ";d&&(p+="}")}if(d&&(s+=" "+p+" ",p=""),L.type&&(s+=" } ",v&&v===L.type)){var he=!0;s+=" else { ";var P=e.schemaPath+".type",E=e.errSchemaPath+"/type",O=O||[];O.push(s),s="",e.createErrors!==!1?(s+=" { keyword: '"+(u||"type")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+E+"\" , params: { type: '",s+=y?""+v.join(","):""+v,s+="' } ",e.opts.messages!==!1&&(s+=" , message: 'should be ",s+=y?""+v.join(","):""+v,s+="' "),e.opts.verbose&&(s+=" , schema: validate.schema"+P+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),s+=" } "):s+=" {} ";var I=s;s=O.pop(),s+=!e.compositeRule&&d?e.async?" throw new ValidationError(["+I+"]); ":" validate.errors = ["+I+"]; return false; ":" var err = "+I+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+=" } "}d&&(s+=" if (errors === ",s+=i?"0":"errs_"+n,s+=") { ",m+="}")}if(v&&!he&&(!e.opts.coerceTypes||!g)){var P=e.schemaPath+".type",E=e.errSchemaPath+"/type",b=y?"checkDataTypes":"checkDataType";s+=" if ("+e.util[b](v,c,!0)+") {   ";var O=O||[];O.push(s),s="",e.createErrors!==!1?(s+=" { keyword: '"+(u||"type")+"' , dataPath: (dataPath || '') + "+e.errorPath+' , schemaPath: "'+E+"\" , params: { type: '",s+=y?""+v.join(","):""+v,s+="' } ",e.opts.messages!==!1&&(s+=" , message: 'should be ",s+=y?""+v.join(","):""+v,s+="' "),e.opts.verbose&&(s+=" , schema: validate.schema"+P+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),s+=" } "):s+=" {} ";var I=s;s=O.pop(),s+=!e.compositeRule&&d?e.async?" throw new ValidationError(["+I+"]); ":" validate.errors = ["+I+"]; return false; ":" var err = "+I+";  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+=" }"}return d&&(s+=" "+m+" "),i?(o?(s+=" if (errors === 0) return true;           ",s+=" else throw new ValidationError(vErrors); "):(s+=" validate.errors = vErrors; ",s+=" return errors === 0;       "),s+=" });"):s+=" var "+f+" = errors === errs_"+n+";",s=e.util.cleanUpCode(s),i&&d&&(s=e.util.cleanUpVarErrors(s,o)),s}},{}],35:[function(e,r,t){"use strict";var a=/^[a-z_$][a-z0-9_$]*$/i;r.exports=function(e,r){function t(e,r,t){for(var a,s=0;o.RULES.length>s;s++){var i=o.RULES[s];if(i.type==r){a=i;break}}a||(a={type:r,rules:[]},o.RULES.push(a));var n={keyword:e,definition:t,custom:!0};a.rules.push(n)}function s(e){if(!o.RULES.types[e])throw new Error("Unknown type "+e)}var o=this;if(this.RULES.keywords[e])throw new Error("Keyword "+e+" is already defined");if(!a.test(e))throw new Error("Keyword "+e+" is not a valid identifier");if(r){var i=r.type;if(Array.isArray(i)){var n,l=i.length;for(n=0;l>n;n++)s(i[n]);for(n=0;l>n;n++)t(e,i[n],r)}else i&&s(i),t(e,i,r)}this.RULES.keywords[e]=!0,this.RULES.all[e]=!0}},{}],36:[function(e,r,t){r.exports={id:"http://json-schema.org/draft-04/schema#",$schema:"http://json-schema.org/draft-04/schema#",description:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},positiveInteger:{type:"integer",minimum:0},positiveIntegerDefault0:{allOf:[{$ref:"#/definitions/positiveInteger"},{"default":0}]},simpleTypes:{"enum":["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},minItems:1,uniqueItems:!0}},type:"object",properties:{id:{type:"string",format:"uri"},$schema:{type:"string",format:"uri"},title:{type:"string"},description:{type:"string"},"default":{},multipleOf:{type:"number",minimum:0,exclusiveMinimum:!0},maximum:{type:"number"},exclusiveMaximum:{type:"boolean","default":!1},minimum:{type:"number"},exclusiveMinimum:{type:"boolean","default":!1},maxLength:{$ref:"#/definitions/positiveInteger"},minLength:{$ref:"#/definitions/positiveIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{anyOf:[{type:"boolean"},{$ref:"#"}],"default":{}},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],"default":{}},maxItems:{$ref:"#/definitions/positiveInteger"},minItems:{$ref:"#/definitions/positiveIntegerDefault0"},uniqueItems:{type:"boolean","default":!1},maxProperties:{$ref:"#/definitions/positiveInteger"},minProperties:{$ref:"#/definitions/positiveIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#"}],"default":{}},definitions:{type:"object",additionalProperties:{$ref:"#"},"default":{}},properties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},"enum":{type:"array",minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},dependencies:{exclusiveMaximum:["maximum"],exclusiveMinimum:["minimum"]},"default":{}}},{}],37:[function(e,r,t){r.exports={id:"https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json#",$schema:"http://json-schema.org/draft-04/schema#",description:"Core schema meta-schema (v5 proposals)",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},positiveInteger:{type:"integer",minimum:0},positiveIntegerDefault0:{allOf:[{$ref:"#/definitions/positiveInteger"},{"default":0}]},simpleTypes:{"enum":["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},minItems:1,uniqueItems:!0},$data:{type:"object",required:["$data"],properties:{$data:{type:"string",format:"relative-json-pointer"}},additionalProperties:!1}},type:"object",properties:{id:{type:"string",format:"uri"},$schema:{type:"string",format:"uri"},title:{type:"string"},description:{type:"string"},"default":{},multipleOf:{anyOf:[{type:"number",minimum:0,exclusiveMinimum:!0},{$ref:"#/definitions/$data"}]},maximum:{anyOf:[{type:"number"},{$ref:"#/definitions/$data"}]},exclusiveMaximum:{anyOf:[{type:"boolean","default":!1},{$ref:"#/definitions/$data"}]},minimum:{anyOf:[{type:"number"},{$ref:"#/definitions/$data"}]},exclusiveMinimum:{anyOf:[{type:"boolean","default":!1},{$ref:"#/definitions/$data"}]},maxLength:{anyOf:[{$ref:"#/definitions/positiveInteger"},{$ref:"#/definitions/$data"}]},minLength:{anyOf:[{$ref:"#/definitions/positiveIntegerDefault0"},{$ref:"#/definitions/$data"}]},pattern:{anyOf:[{type:"string",format:"regex"},{$ref:"#/definitions/$data"}]},additionalItems:{anyOf:[{type:"boolean"},{$ref:"#"},{$ref:"#/definitions/$data"}],"default":{}},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],"default":{}},maxItems:{anyOf:[{$ref:"#/definitions/positiveInteger"},{$ref:"#/definitions/$data"}]},minItems:{anyOf:[{$ref:"#/definitions/positiveIntegerDefault0"},{$ref:"#/definitions/$data"}]},uniqueItems:{anyOf:[{type:"boolean","default":!1},{$ref:"#/definitions/$data"}]},maxProperties:{anyOf:[{$ref:"#/definitions/positiveInteger"},{$ref:"#/definitions/$data"}]},minProperties:{anyOf:[{$ref:"#/definitions/positiveIntegerDefault0"},{$ref:"#/definitions/$data"}]},required:{anyOf:[{$ref:"#/definitions/stringArray"},{$ref:"#/definitions/$data"}]},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#"},{$ref:"#/definitions/$data"}],"default":{}},definitions:{type:"object",additionalProperties:{$ref:"#"},"default":{}},properties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},"default":{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},"enum":{anyOf:[{type:"array",minItems:1,uniqueItems:!0},{$ref:"#/definitions/$data"}]},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"},format:{anyOf:[{type:"string"},{$ref:"#/definitions/$data"}]},formatMaximum:{anyOf:[{type:"string"},{$ref:"#/definitions/$data"}]},formatMinimum:{anyOf:[{type:"string"},{$ref:"#/definitions/$data"}]},formatExclusiveMaximum:{anyOf:[{type:"boolean","default":!1},{$ref:"#/definitions/$data"}]},formatExclusiveMinimum:{anyOf:[{type:"boolean","default":!1},{$ref:"#/definitions/$data"}]},constant:{anyOf:[{},{$ref:"#/definitions/$data"}]},contains:{$ref:"#"},patternGroups:{type:"object",additionalProperties:{type:"object",required:["schema"],properties:{maximum:{anyOf:[{$ref:"#/definitions/positiveInteger"},{$ref:"#/definitions/$data"}]},minimum:{anyOf:[{$ref:"#/definitions/positiveIntegerDefault0"},{$ref:"#/definitions/$data"}]},schema:{$ref:"#"}},additionalProperties:!1},"default":{}},"switch":{type:"array",items:{required:["then"],properties:{"if":{$ref:"#"},then:{anyOf:[{type:"boolean"},{$ref:"#"}]},"continue":{type:"boolean"}},additionalProperties:!1,dependencies:{"continue":["if"]}}}},dependencies:{exclusiveMaximum:["maximum"],exclusiveMinimum:["minimum"],formatMaximum:["format"],formatMinimum:["format"],formatExclusiveMaximum:["formatMaximum"],formatExclusiveMinimum:["formatMinimum"]},"default":{}}},{}],38:[function(e,r,t){"use strict";function a(r){function t(e,t,s){var o={inline:s||a[e],statements:!0,errors:"full"};t&&(o.type=t),r.addKeyword(e,o)}var a={"switch":e("./dotjs/switch"),constant:e("./dotjs/constant"),_formatLimit:e("./dotjs/_formatLimit"),patternRequired:e("./dotjs/patternRequired")};if(r._opts.meta!==!1){var i=e("./refs/json-schema-v5.json");r.addMetaSchema(i,o)}t("constant"),r.addKeyword("contains",{type:"array",macro:s}),t("formatMaximum","string",a._formatLimit),t("formatMinimum","string",a._formatLimit),r.addKeyword("formatExclusiveMaximum"),r.addKeyword("formatExclusiveMinimum"),r.addKeyword("patternGroups"),t("patternRequired","object"),t("switch")}function s(e){return{not:{items:{not:e}}}}var o="https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json";r.exports={enable:a,META_SCHEMA_ID:o}},{"./dotjs/_formatLimit":12,"./dotjs/constant":19,"./dotjs/patternRequired":28,"./dotjs/switch":32,"./refs/json-schema-v5.json":37}],39:[function(e,r,t){function a(e){var r=this,t=f.call(arguments,1);return new Promise(function(a,o){function i(r){var t;try{t=e.next(r)}catch(a){return o(a)}c(t)}function n(r){var t;try{t=e["throw"](r)}catch(a){return o(a)}c(t)}function c(e){if(e.done)return a(e.value);var t=s.call(r,e.value);return t&&l(t)?t.then(i,n):n(new TypeError('You may only yield a function, promise, generator, array, or object, but the following object was passed: "'+String(e.value)+'"'))}return"function"==typeof e&&(e=e.apply(r,t)),e&&"function"==typeof e.next?void i():a(e)})}function s(e){return e?l(e)?e:h(e)||c(e)?a.call(this,e):"function"==typeof e?o.call(this,e):Array.isArray(e)?i.call(this,e):u(e)?n.call(this,e):e:e}function o(e){var r=this;return new Promise(function(t,a){e.call(r,function(e,r){return e?a(e):(arguments.length>2&&(r=f.call(arguments,1)),void t(r))})})}function i(e){return Promise.all(e.map(s,this))}function n(e){function r(e,r){t[r]=void 0,o.push(e.then(function(e){t[r]=e}))}for(var t=new e.constructor,a=Object.keys(e),o=[],i=0;a.length>i;i++){var n=a[i],c=s.call(this,e[n]);c&&l(c)?r(c,n):t[n]=e[n]}return Promise.all(o).then(function(){return t})}function l(e){return"function"==typeof e.then}function c(e){return"function"==typeof e.next&&"function"==typeof e["throw"]}function h(e){var r=e.constructor;return r?"GeneratorFunction"===r.name||"GeneratorFunction"===r.displayName?!0:c(r.prototype):!1}function u(e){return Object==e.constructor}var f=Array.prototype.slice;r.exports=a["default"]=a.co=a,a.wrap=function(e){function r(){return a.call(this,e.apply(this,arguments))}return r.__generatorFunction__=e,r}},{}],40:[function(e,r,t){var a="undefined"!=typeof JSON?JSON:e("jsonify");r.exports=function(e,r){r||(r={}),"function"==typeof r&&(r={cmp:r});var t=r.space||"";"number"==typeof t&&(t=Array(t+1).join(" "));var i="boolean"==typeof r.cycles?r.cycles:!1,n=r.replacer||function(e,r){return r},l=r.cmp&&function(e){return function(r){return function(t,a){var s={key:t,value:r[t]},o={key:a,value:r[a]};return e(s,o)}}}(r.cmp),c=[];return function h(e,r,u,f){var d=t?"\n"+new Array(f+1).join(t):"",p=t?": ":":";if(u&&u.toJSON&&"function"==typeof u.toJSON&&(u=u.toJSON()),u=n.call(e,r,u),void 0!==u){if("object"!=typeof u||null===u)return a.stringify(u);if(s(u)){for(var m=[],v=0;u.length>v;v++){var y=h(u,v,u[v],f+1)||a.stringify(null);m.push(d+t+y)}return"["+m.join(",")+d+"]"}if(-1!==c.indexOf(u)){if(i)return a.stringify("__cycle__");throw new TypeError("Converting circular structure to JSON")}c.push(u);for(var g=o(u).sort(l&&l(u)),m=[],v=0;g.length>v;v++){var r=g[v],P=h(u,r,u[r],f+1);if(P){var E=a.stringify(r)+p+P;m.push(d+t+E)}}return c.splice(c.indexOf(u),1),"{"+m.join(",")+d+"}"}}({"":e},"",e,0)};var s=Array.isArray||function(e){return"[object Array]"==={}.toString.call(e)},o=Object.keys||function(e){var r=Object.prototype.hasOwnProperty||function(){return!0},t=[];for(var a in e)r.call(e,a)&&t.push(a);return t}},{jsonify:41}],41:[function(e,r,t){t.parse=e("./lib/parse"),t.stringify=e("./lib/stringify")},{"./lib/parse":42,"./lib/stringify":43}],42:[function(e,r,t){var a,s,o,i,n={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"	"},l=function(e){throw{name:"SyntaxError",message:e,at:a,text:o}},c=function(e){return e&&e!==s&&l("Expected '"+e+"' instead of '"+s+"'"),s=o.charAt(a),a+=1,s},h=function(){var e,r="";for("-"===s&&(r="-",c("-"));s>="0"&&"9">=s;)r+=s,c();if("."===s)for(r+=".";c()&&s>="0"&&"9">=s;)r+=s;if("e"===s||"E"===s)for(r+=s,c(),"-"!==s&&"+"!==s||(r+=s,c());s>="0"&&"9">=s;)r+=s,c();return e=+r,isFinite(e)?e:void l("Bad number")},u=function(){var e,r,t,a="";if('"'===s)for(;c();){if('"'===s)return c(),a;if("\\"===s)if(c(),"u"===s){for(t=0,r=0;4>r&&(e=parseInt(c(),16),isFinite(e));r+=1)t=16*t+e;a+=String.fromCharCode(t)}else{if("string"!=typeof n[s])break;a+=n[s]}else a+=s}l("Bad string")},f=function(){for(;s&&" ">=s;)c()},d=function(){switch(s){case"t":return c("t"),c("r"),c("u"),c("e"),!0;case"f":return c("f"),c("a"),c("l"),c("s"),c("e"),!1;case"n":return c("n"),c("u"),c("l"),c("l"),null}l("Unexpected '"+s+"'")},p=function(){var e=[];if("["===s){if(c("["),f(),"]"===s)return c("]"),e;for(;s;){if(e.push(i()),f(),"]"===s)return c("]"),e;c(","),f()}}l("Bad array")},m=function(){var e,r={};
+if("{"===s){if(c("{"),f(),"}"===s)return c("}"),r;for(;s;){if(e=u(),f(),c(":"),Object.hasOwnProperty.call(r,e)&&l('Duplicate key "'+e+'"'),r[e]=i(),f(),"}"===s)return c("}"),r;c(","),f()}}l("Bad object")};i=function(){switch(f(),s){case"{":return m();case"[":return p();case'"':return u();case"-":return h();default:return s>="0"&&"9">=s?h():d()}},r.exports=function(e,r){var t;return o=e,a=0,s=" ",t=i(),f(),s&&l("Syntax error"),"function"==typeof r?function n(e,t){var a,s,o=e[t];if(o&&"object"==typeof o)for(a in o)Object.prototype.hasOwnProperty.call(o,a)&&(s=n(o,a),void 0!==s?o[a]=s:delete o[a]);return r.call(e,t,o)}({"":t},""):t}},{}],43:[function(e,r,t){function a(e){return l.lastIndex=0,l.test(e)?'"'+e.replace(l,function(e){var r=c[e];return"string"==typeof r?r:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}function s(e,r){var t,l,c,h,u,f=o,d=r[e];switch(d&&"object"==typeof d&&"function"==typeof d.toJSON&&(d=d.toJSON(e)),"function"==typeof n&&(d=n.call(r,e,d)),typeof d){case"string":return a(d);case"number":return isFinite(d)?String(d):"null";case"boolean":case"null":return String(d);case"object":if(!d)return"null";if(o+=i,u=[],"[object Array]"===Object.prototype.toString.apply(d)){for(h=d.length,t=0;h>t;t+=1)u[t]=s(t,d)||"null";return c=0===u.length?"[]":o?"[\n"+o+u.join(",\n"+o)+"\n"+f+"]":"["+u.join(",")+"]",o=f,c}if(n&&"object"==typeof n)for(h=n.length,t=0;h>t;t+=1)l=n[t],"string"==typeof l&&(c=s(l,d),c&&u.push(a(l)+(o?": ":":")+c));else for(l in d)Object.prototype.hasOwnProperty.call(d,l)&&(c=s(l,d),c&&u.push(a(l)+(o?": ":":")+c));return c=0===u.length?"{}":o?"{\n"+o+u.join(",\n"+o)+"\n"+f+"}":"{"+u.join(",")+"}",o=f,c}}var o,i,n,l=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,c={"\b":"\\b","	":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};r.exports=function(e,r,t){var a;if(o="",i="","number"==typeof t)for(a=0;t>a;a+=1)i+=" ";else"string"==typeof t&&(i=t);if(n=r,r&&"function"!=typeof r&&("object"!=typeof r||"number"!=typeof r.length))throw new Error("JSON.stringify");return s("",{"":e})}},{}],44:[function(e,r,t){(function(e){!function(a){function s(e){throw new RangeError(q[e])}function o(e,r){for(var t=e.length,a=[];t--;)a[t]=r(e[t]);return a}function i(e,r){var t=e.split("@"),a="";t.length>1&&(a=t[0]+"@",e=t[1]),e=e.replace(A,".");var s=e.split("."),i=o(s,r).join(".");return a+i}function n(e){for(var r,t,a=[],s=0,o=e.length;o>s;)r=e.charCodeAt(s++),r>=55296&&56319>=r&&o>s?(t=e.charCodeAt(s++),56320==(64512&t)?a.push(((1023&r)<<10)+(1023&t)+65536):(a.push(r),s--)):a.push(r);return a}function l(e){return o(e,function(e){var r="";return e>65535&&(e-=65536,r+=D(e>>>10&1023|55296),e=56320|1023&e),r+=D(e)}).join("")}function c(e){return 10>e-48?e-22:26>e-65?e-65:26>e-97?e-97:w}function h(e,r){return e+22+75*(26>e)-((0!=r)<<5)}function u(e,r,t){var a=0;for(e=t?C(e/S):e>>1,e+=C(e/r);e>L*$>>1;a+=w)e=C(e/L);return C(a+(L+1)*e/(e+x))}function f(e){var r,t,a,o,i,n,h,f,d,p,m=[],v=e.length,y=0,g=R,P=_;for(t=e.lastIndexOf(O),0>t&&(t=0),a=0;t>a;++a)e.charCodeAt(a)>=128&&s("not-basic"),m.push(e.charCodeAt(a));for(o=t>0?t+1:0;v>o;){for(i=y,n=1,h=w;o>=v&&s("invalid-input"),f=c(e.charCodeAt(o++)),(f>=w||f>C((b-y)/n))&&s("overflow"),y+=f*n,d=P>=h?j:h>=P+$?$:h-P,!(d>f);h+=w)p=w-d,n>C(b/p)&&s("overflow"),n*=p;r=m.length+1,P=u(y-i,r,0==i),C(y/r)>b-g&&s("overflow"),g+=C(y/r),y%=r,m.splice(y++,0,g)}return l(m)}function d(e){var r,t,a,o,i,l,c,f,d,p,m,v,y,g,P,E=[];for(e=n(e),v=e.length,r=R,t=0,i=_,l=0;v>l;++l)m=e[l],128>m&&E.push(D(m));for(a=o=E.length,o&&E.push(O);v>a;){for(c=b,l=0;v>l;++l)m=e[l],m>=r&&c>m&&(c=m);for(y=a+1,c-r>C((b-t)/y)&&s("overflow"),t+=(c-r)*y,r=c,l=0;v>l;++l)if(m=e[l],r>m&&++t>b&&s("overflow"),m==r){for(f=t,d=w;p=i>=d?j:d>=i+$?$:d-i,!(p>f);d+=w)P=f-p,g=w-p,E.push(D(h(p+P%g,0))),f=C(P/g);E.push(D(h(f,0))),i=u(t,y,a==o),t=0,++a}++t,++r}return E.join("")}function p(e){return i(e,function(e){return I.test(e)?f(e.slice(4).toLowerCase()):e})}function m(e){return i(e,function(e){return k.test(e)?"xn--"+d(e):e})}var v="object"==typeof t&&t&&!t.nodeType&&t,y="object"==typeof r&&r&&!r.nodeType&&r,g="object"==typeof e&&e;g.global!==g&&g.window!==g&&g.self!==g||(a=g);var P,E,b=2147483647,w=36,j=1,$=26,x=38,S=700,_=72,R=128,O="-",I=/^xn--/,k=/[^\x20-\x7E]/,A=/[\x2E\u3002\uFF0E\uFF61]/g,q={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},L=w-j,C=Math.floor,D=String.fromCharCode;if(P={version:"1.4.1",ucs2:{decode:n,encode:l},decode:f,encode:d,toASCII:m,toUnicode:p},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define("punycode",function(){return P});else if(v&&y)if(r.exports==v)y.exports=P;else for(E in P)P.hasOwnProperty(E)&&(v[E]=P[E]);else a.punycode=P}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],45:[function(e,r,t){"use strict";function a(e,r){return Object.prototype.hasOwnProperty.call(e,r)}r.exports=function(e,r,t,o){r=r||"&",t=t||"=";var i={};if("string"!=typeof e||0===e.length)return i;var n=/\+/g;e=e.split(r);var l=1e3;o&&"number"==typeof o.maxKeys&&(l=o.maxKeys);var c=e.length;l>0&&c>l&&(c=l);for(var h=0;c>h;++h){var u,f,d,p,m=e[h].replace(n,"%20"),v=m.indexOf(t);v>=0?(u=m.substr(0,v),f=m.substr(v+1)):(u=m,f=""),d=decodeURIComponent(u),p=decodeURIComponent(f),a(i,d)?s(i[d])?i[d].push(p):i[d]=[i[d],p]:i[d]=p}return i};var s=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],46:[function(e,r,t){"use strict";function a(e,r){if(e.map)return e.map(r);for(var t=[],a=0;e.length>a;a++)t.push(r(e[a],a));return t}var s=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};r.exports=function(e,r,t,n){return r=r||"&",t=t||"=",null===e&&(e=void 0),"object"==typeof e?a(i(e),function(i){var n=encodeURIComponent(s(i))+t;return o(e[i])?a(e[i],function(e){return n+encodeURIComponent(s(e))}).join(r):n+encodeURIComponent(s(e[i]))}).join(r):n?encodeURIComponent(s(n))+t+encodeURIComponent(s(e)):""};var o=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},i=Object.keys||function(e){var r=[];for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&r.push(t);return r}},{}],47:[function(e,r,t){"use strict";t.decode=t.parse=e("./decode"),t.encode=t.stringify=e("./encode")},{"./decode":45,"./encode":46}],48:[function(e,r,t){"use strict";function a(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function s(e,r,t){if(e&&c.isObject(e)&&e instanceof a)return e;var s=new a;return s.parse(e,r,t),s}function o(e){return c.isString(e)&&(e=s(e)),e instanceof a?e.format():a.prototype.format.call(e)}function i(e,r){return s(e,!1,!0).resolve(r)}function n(e,r){return e?s(e,!1,!0).resolveObject(r):r}var l=e("punycode"),c=e("./util");t.parse=s,t.resolve=i,t.resolveObject=n,t.format=o,t.Url=a;var h=/^([a-z0-9.+-]+:)/i,u=/:[0-9]*$/,f=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,d=["<",">",'"',"`"," ","\r","\n","	"],p=["{","}","|","\\","^","`"].concat(d),m=["'"].concat(p),v=["%","/","?",";","#"].concat(m),y=["/","?","#"],g=255,P=/^[+a-z0-9A-Z_-]{0,63}$/,E=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,b={javascript:!0,"javascript:":!0},w={javascript:!0,"javascript:":!0},j={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},$=e("querystring");a.prototype.parse=function(e,r,t){if(!c.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var a=e.indexOf("?"),s=-1!==a&&a<e.indexOf("#")?"?":"#",o=e.split(s),i=/\\/g;o[0]=o[0].replace(i,"/"),e=o.join(s);var n=e;if(n=n.trim(),!t&&1===e.split("#").length){var u=f.exec(n);if(u)return this.path=n,this.href=n,this.pathname=u[1],u[2]?(this.search=u[2],this.query=r?$.parse(this.search.substr(1)):this.search.substr(1)):r&&(this.search="",this.query={}),this}var d=h.exec(n);if(d){d=d[0];var p=d.toLowerCase();this.protocol=p,n=n.substr(d.length)}if(t||d||n.match(/^\/\/[^@\/]+@[^@\/]+/)){var x="//"===n.substr(0,2);!x||d&&w[d]||(n=n.substr(2),this.slashes=!0)}if(!w[d]&&(x||d&&!j[d])){for(var S=-1,_=0;y.length>_;_++){var R=n.indexOf(y[_]);-1!==R&&(-1===S||S>R)&&(S=R)}var O,I;I=-1===S?n.lastIndexOf("@"):n.lastIndexOf("@",S),-1!==I&&(O=n.slice(0,I),n=n.slice(I+1),this.auth=decodeURIComponent(O)),S=-1;for(var _=0;v.length>_;_++){var R=n.indexOf(v[_]);-1!==R&&(-1===S||S>R)&&(S=R)}-1===S&&(S=n.length),this.host=n.slice(0,S),n=n.slice(S),this.parseHost(),this.hostname=this.hostname||"";var k="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!k)for(var A=this.hostname.split(/\./),_=0,q=A.length;q>_;_++){var L=A[_];if(L&&!L.match(P)){for(var C="",D=0,V=L.length;V>D;D++)C+=L.charCodeAt(D)>127?"x":L[D];if(!C.match(P)){var U=A.slice(0,_),z=A.slice(_+1),T=L.match(E);T&&(U.push(T[1]),z.unshift(T[2])),z.length&&(n="/"+z.join(".")+n),this.hostname=U.join(".");break}}}this.hostname=this.hostname.length>g?"":this.hostname.toLowerCase(),k||(this.hostname=l.toASCII(this.hostname));var M=this.port?":"+this.port:"",Q=this.hostname||"";this.host=Q+M,this.href+=this.host,k&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==n[0]&&(n="/"+n))}if(!b[p])for(var _=0,q=m.length;q>_;_++){var N=m[_];if(-1!==n.indexOf(N)){var H=encodeURIComponent(N);H===N&&(H=escape(N)),n=n.split(N).join(H)}}var F=n.indexOf("#");-1!==F&&(this.hash=n.substr(F),n=n.slice(0,F));var G=n.indexOf("?");if(-1!==G?(this.search=n.substr(G),this.query=n.substr(G+1),r&&(this.query=$.parse(this.query)),n=n.slice(0,G)):r&&(this.search="",this.query={}),n&&(this.pathname=n),j[p]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var M=this.pathname||"",J=this.search||"";this.path=M+J}return this.href=this.format(),this},a.prototype.format=function(){var e=this.auth||"";e&&(e=encodeURIComponent(e),e=e.replace(/%3A/i,":"),e+="@");var r=this.protocol||"",t=this.pathname||"",a=this.hash||"",s=!1,o="";this.host?s=e+this.host:this.hostname&&(s=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(s+=":"+this.port)),this.query&&c.isObject(this.query)&&Object.keys(this.query).length&&(o=$.stringify(this.query));var i=this.search||o&&"?"+o||"";return r&&":"!==r.substr(-1)&&(r+=":"),this.slashes||(!r||j[r])&&s!==!1?(s="//"+(s||""),t&&"/"!==t.charAt(0)&&(t="/"+t)):s||(s=""),a&&"#"!==a.charAt(0)&&(a="#"+a),i&&"?"!==i.charAt(0)&&(i="?"+i),t=t.replace(/[?#]/g,function(e){return encodeURIComponent(e)}),i=i.replace("#","%23"),r+s+t+i+a},a.prototype.resolve=function(e){return this.resolveObject(s(e,!1,!0)).format()},a.prototype.resolveObject=function(e){if(c.isString(e)){var r=new a;r.parse(e,!1,!0),e=r}for(var t=new a,s=Object.keys(this),o=0;s.length>o;o++){var i=s[o];t[i]=this[i]}if(t.hash=e.hash,""===e.href)return t.href=t.format(),t;if(e.slashes&&!e.protocol){for(var n=Object.keys(e),l=0;n.length>l;l++){var h=n[l];"protocol"!==h&&(t[h]=e[h])}return j[t.protocol]&&t.hostname&&!t.pathname&&(t.path=t.pathname="/"),t.href=t.format(),t}if(e.protocol&&e.protocol!==t.protocol){if(!j[e.protocol]){for(var u=Object.keys(e),f=0;u.length>f;f++){var d=u[f];t[d]=e[d]}return t.href=t.format(),t}if(t.protocol=e.protocol,e.host||w[e.protocol])t.pathname=e.pathname;else{for(var p=(e.pathname||"").split("/");p.length&&!(e.host=p.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==p[0]&&p.unshift(""),2>p.length&&p.unshift(""),t.pathname=p.join("/")}if(t.search=e.search,t.query=e.query,t.host=e.host||"",t.auth=e.auth,t.hostname=e.hostname||e.host,t.port=e.port,t.pathname||t.search){var m=t.pathname||"",v=t.search||"";t.path=m+v}return t.slashes=t.slashes||e.slashes,t.href=t.format(),t}var y=t.pathname&&"/"===t.pathname.charAt(0),g=e.host||e.pathname&&"/"===e.pathname.charAt(0),P=g||y||t.host&&e.pathname,E=P,b=t.pathname&&t.pathname.split("/")||[],p=e.pathname&&e.pathname.split("/")||[],$=t.protocol&&!j[t.protocol];if($&&(t.hostname="",t.port=null,t.host&&(""===b[0]?b[0]=t.host:b.unshift(t.host)),t.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===p[0]?p[0]=e.host:p.unshift(e.host)),e.host=null),P=P&&(""===p[0]||""===b[0])),g)t.host=e.host||""===e.host?e.host:t.host,t.hostname=e.hostname||""===e.hostname?e.hostname:t.hostname,t.search=e.search,t.query=e.query,b=p;else if(p.length)b||(b=[]),b.pop(),b=b.concat(p),t.search=e.search,t.query=e.query;else if(!c.isNullOrUndefined(e.search)){if($){t.hostname=t.host=b.shift();var x=t.host&&t.host.indexOf("@")>0?t.host.split("@"):!1;x&&(t.auth=x.shift(),t.host=t.hostname=x.shift())}return t.search=e.search,t.query=e.query,c.isNull(t.pathname)&&c.isNull(t.search)||(t.path=(t.pathname?t.pathname:"")+(t.search?t.search:"")),t.href=t.format(),t}if(!b.length)return t.pathname=null,t.path=t.search?"/"+t.search:null,t.href=t.format(),t;for(var S=b.slice(-1)[0],_=(t.host||e.host||b.length>1)&&("."===S||".."===S)||""===S,R=0,O=b.length;O>=0;O--)S=b[O],"."===S?b.splice(O,1):".."===S?(b.splice(O,1),R++):R&&(b.splice(O,1),R--);if(!P&&!E)for(;R--;R)b.unshift("..");!P||""===b[0]||b[0]&&"/"===b[0].charAt(0)||b.unshift(""),_&&"/"!==b.join("/").substr(-1)&&b.push("");var I=""===b[0]||b[0]&&"/"===b[0].charAt(0);if($){t.hostname=t.host=I?"":b.length?b.shift():"";var x=t.host&&t.host.indexOf("@")>0?t.host.split("@"):!1;x&&(t.auth=x.shift(),t.host=t.hostname=x.shift())}return P=P||t.host&&b.length,P&&!I&&b.unshift(""),b.length?t.pathname=b.join("/"):(t.pathname=null,t.path=null),c.isNull(t.pathname)&&c.isNull(t.search)||(t.path=(t.pathname?t.pathname:"")+(t.search?t.search:"")),t.auth=e.auth||t.auth,t.slashes=t.slashes||e.slashes,t.href=t.format(),t},a.prototype.parseHost=function(){var e=this.host,r=u.exec(e);r&&(r=r[0],":"!==r&&(this.port=r.substr(1)),e=e.substr(0,e.length-r.length)),e&&(this.hostname=e)}},{"./util":49,punycode:44,querystring:47}],49:[function(e,r,t){"use strict";r.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},{}],ajv:[function(e,r,t){"use strict";function a(e){return v.test(e)}function Ajv(r){function t(e,r){var t;if("string"==typeof e){if(t=j(e),!t)throw new Error('no schema with key or ref "'+e+'"')}else{var a=_(e);t=a.validate||R(a)}var s=t(r);return t.$async===!0?"*"==C._opts.async?p(s):s:(C.errors=t.errors,s)}function g(e){var r=_(e);return r.validate||R(r)}function P(e,r,t,a){if(Array.isArray(e))for(var s=0;e.length>s;s++)P(e[s],void 0,t,a);else{r=o.normalizeId(r||e.id),q(r);var i=C._schemas[r]=_(e,t,!0);i.meta=a}}function E(e,r,t){P(e,r,t,!0)}function b(e,r){var s=e.$schema||C._opts.defaultMeta||w(),o=C._formats.uri;C._formats.uri="function"==typeof o?a:v;var i=t(s,e);if(C._formats.uri=o,!i&&r){var n="schema is invalid:"+O();if("log"!=C._opts.validateSchema)throw new Error(n);console.error(n)}return i}function w(){var e=C._opts.meta;return C._opts.defaultMeta="object"==typeof e?e.id||e:C._opts.v5?u.META_SCHEMA_ID:m}function j(e){var r=$(e);switch(typeof r){case"object":return r.validate||R(r);case"string":return j(r)}}function $(e){return e=o.normalizeId(e),C._schemas[e]||C._refs[e]}function x(e){if(e instanceof RegExp)return S(C._schemas,e),void S(C._refs,e);switch(typeof e){case"undefined":return S(C._schemas),S(C._refs),void C._cache.clear();case"string":var r=$(e);return r&&C._cache.del(r.jsonStr),delete C._schemas[e],void delete C._refs[e];case"object":var t=l(e);C._cache.del(t);var a=e.id;a&&(a=o.normalizeId(a),delete C._schemas[a],delete C._refs[a])}}function S(e,r){for(var t in e){var a=e[t];a.meta||r&&!r.test(t)||(C._cache.del(a.jsonStr),delete e[t])}}function _(e,r,t){if("object"!=typeof e)throw new Error("schema should be object");var a=l(e),s=C._cache.get(a);if(s)return s;t=t||C._opts.addUsedSchema!==!1;var i=o.normalizeId(e.id);i&&t&&q(i),C._opts.validateSchema===!1||r||b(e,!0);var c=o.ids.call(C,e),h=new n({id:i,schema:e,localRefs:c,jsonStr:a});return"#"!=i[0]&&t&&(C._refs[i]=h),C._cache.put(a,h),h}function R(e,r){function t(){var r=e.validate,a=r.apply(null,arguments);return t.errors=r.errors,a}if(e.compiling)return e.validate=t,t.schema=e.schema,t.errors=null,t.root=r?r:t,e.schema.$async===!0&&(t.$async=!0),t;e.compiling=!0;var a;e.meta&&(a=C._opts,C._opts=C._metaOpts);var o;try{o=s.call(C,e.schema,r,e.localRefs)}finally{e.compiling=!1,e.meta&&(C._opts=a)}return e.validate=o,e.refs=o.refs,e.refVal=o.refVal,e.root=o.root,o}function O(e,r){if(e=e||C.errors,!e)return"No errors";r=r||{};for(var t=void 0===r.separator?", ":r.separator,a=void 0===r.dataVar?"data":r.dataVar,s="",o=0;e.length>o;o++){var i=e[o];i&&(s+=a+i.dataPath+" "+i.message+t)}return s.slice(0,-t.length)}function I(e,r){"string"==typeof r&&(r=new RegExp(r)),C._formats[e]=r}function k(){if(C._opts.meta!==!1){var r=e("./refs/json-schema-draft-04.json");E(r,m,!0),C._refs["http://json-schema.org/schema"]=m}var t=C._opts.schemas;if(t)if(Array.isArray(t))P(t);else for(var a in t)P(t[a],a)}function A(){for(var e in C._opts.formats){var r=C._opts.formats[e];I(e,r)}}function q(e){if(C._schemas[e]||C._refs[e])throw new Error('schema with key or id "'+e+'" already exists')}function L(){for(var e=f.copy(C._opts),r=0;y.length>r;r++)delete e[y[r]];return e}if(!(this instanceof Ajv))return new Ajv(r);var C=this;r=this._opts=f.copy(r)||{},this._schemas={},this._refs={},this._formats=c(r.format),this._cache=r.cache||new i,this._loadingSchemas={},this.RULES=h(),this.validate=t,this.compile=g,this.addSchema=P,this.addMetaSchema=E,this.validateSchema=b,this.getSchema=j,this.removeSchema=x,this.addFormat=I,this.errorsText=O,this._addSchema=_,this._compile=R,r.loopRequired=r.loopRequired||1/0,(r.async||r.transpile)&&d.setup(r),r.beautify===!0&&(r.beautify={indent_size:2}),"property"==r.errorDataPath&&(r._errorDataPathProperty=!0),this._metaOpts=L(),k(),r.formats&&A(),r.v5&&u.enable(this),"object"==typeof r.meta&&E(r.meta)}var s=e("./compile"),o=e("./compile/resolve"),i=e("./cache"),n=e("./compile/schema_obj"),l=e("json-stable-stringify"),c=e("./compile/formats"),h=e("./compile/rules"),u=e("./v5"),f=e("./compile/util"),d=e("./async"),p=e("co");r.exports=Ajv,Ajv.prototype.compileAsync=d.compile,Ajv.prototype.addKeyword=e("./keyword"),Ajv.ValidationError=e("./compile/validation_error");var m="http://json-schema.org/draft-04/schema",v=/^(?:(?:[a-z][a-z0-9+-.]*:)?\/\/)?[^\s]*$/i,y=["removeAdditional","useDefaults","coerceTypes"]},{"./async":1,"./cache":2,"./compile":6,"./compile/formats":5,"./compile/resolve":7,"./compile/rules":8,"./compile/schema_obj":9,"./compile/util":10,"./compile/validation_error":11,"./keyword":35,"./refs/json-schema-draft-04.json":36,"./v5":38,co:39,"json-stable-stringify":40}]},{},[])("ajv")});
+//# sourceMappingURL=dist/ajv.min.js.map
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/scripts/ajv.min.js.map
@@ -0,0 +1,1 @@
+{"version":3,"sources":["dist/ajv.bundle.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Ajv","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","setupAsync","opts","required","check","async","transpile","get","TRANSPILE","_transpileFunc","ASYNC","MODES","_opts","util","copy","checkGenerators","eval","checkAsyncFunction","getRegenerator","regenerator","runtime","regeneratorTranspile","compile","getNodent","nodent","log","dontInstallRequireHook","console","warn","nodentTranspile","promises","sourcemap","compileAsync","schema","callback","_compileAsync","firstCall","loadMissingSchema","schemaLoaded","err","sch","_refs","ref","_schemas","addSchema","missingSchema","missingRef","_callbacks","_loadingSchemas","loadSchema","deferCallback","validate","setTimeout","schemaObj","_addSchema","setup","*","co*","es7","./compile/util","2","Cache","_cache","prototype","put","key","value","del","clear","3","$ref","allOf","anyOf","dependencies","enum","format","items","maximum","minimum","maxItems","minItems","maxLength","minLength","maxProperties","minProperties","multipleOf","not","oneOf","pattern","properties","uniqueItems","../dotjs/_limit","../dotjs/_limitItems","../dotjs/_limitLength","../dotjs/_limitProperties","../dotjs/allOf","../dotjs/anyOf","../dotjs/dependencies","../dotjs/enum","../dotjs/format","../dotjs/items","../dotjs/multipleOf","../dotjs/not","../dotjs/oneOf","../dotjs/pattern","../dotjs/properties","../dotjs/ref","../dotjs/required","../dotjs/uniqueItems","../dotjs/validate","4","equal","b","arrA","Array","isArray","arrB","keys","Object","undefined","5","formats","mode","formatDefs","fName","compare","date","str","matches","match","DATE","month","day","DAYS","time","full","TIME","hour","minute","second","timeZone","date_time","dateTime","split","DATE_TIME_SEPARATOR","hostname","HOSTNAME","test","uri","NOT_URI_FRAGMENT","URI","regex","RegExp","compareDate","d1","d2","compareTime","t1","t2","compareDateTime","dt1","dt2","res","UUID","JSON_POINTER","RELATIVE_JSON_POINTER","fast","date-time","email","ipv4","ipv6","uuid","json-pointer","relative-json-pointer","./util","6","root","localRefs","baseId","localCompile","_schema","_root","isRoot","$async","sourceCode","validateGenerator","isTop","schemaPath","errSchemaPath","errorPath","RULES","resolve","resolveRef","usePattern","useDefault","useCustomRule","vars","refVal","refValCode","patterns","patternCode","defaults","defaultCode","customRules","customRuleCode","beautify","error","validateCode","errors","refs","url","_refVal","refCode","refIndex","resolvedRef","rootRefId","addLocalRef","v","localSchema","inlineRef","inlineRefs","replaceLocalRef","refId","inline","regexStr","index","patternsHash","toQuotedString","valueStr","stableStringify","defaultsHash","rule","parentSchema","it","definition","macro","validateSchema","keyword","_formats","arr","statement","js_beautify","co","ucs2length","ValidationError","../async","./equal","./resolve","./validation_error","json-stable-stringify","7","SchemaObject","_compile","_resolve","p","parse","refPath","_getFullPath","getFullPath","id","normalizeId","resolveRecursive","getJsonPointer","parsedRef","resolveUrl","hash","slice","parts","part","unescapeFragment","PREVENT_SCOPE_CHANGE","limit","checkNoRef","countKeys","item","count","Infinity","SIMPLE_INLINED","normalize","protocol","host","path","replace","TRAILING_SLASH_HASH","resolveIds","_resolveIds","fullPath","escapeFragment","ids","toHash","./schema_obj","8","ruleModules","type","rules","all","keywords","types","forEach","group","map","push","concat","./_rules","9","obj","10","to","checkDataType","dataType","data","negate","EQUAL","AND","OK","NOT","checkDataTypes","dataTypes","array","object","number","integer","coerceToTypes","COERCE_TO_TYPES","getProperty","IDENTIFIER","SINGLE_QUOTE","escapeQuotes","len","pos","charCodeAt","varOccurences","dataVar","varReplace","expr","cleanUpCode","out","EMPTY_ELSE","EMPTY_IF_NO_ELSE","EMPTY_IF_WITH_ELSE","cleanUpVarErrors","ERRORS_REGEXP","REMOVE_ERRORS_ASYNC","RETURN_ASYNC","RETURN_TRUE_ASYNC","REMOVE_ERRORS","RETURN_VALID","RETURN_TRUE","schemaHasRules","getPathExpr","currentPath","jsonPointers","isNumber","joinPaths","getPath","prop","escapeJsonPointer","getData","$data","lvl","paths","up","jsonPointer","segments","segment","unescapeJsonPointer","decodeURIComponent","encodeURIComponent","11","message","ajv","validation","create","constructor","12","$keyword","$errorKeyword","$lvl","level","$dataLvl","dataLevel","$schema","$schemaPath","$errSchemaPath","$breakOnError","allErrors","$valid","$schemaFormat","$isDataFormat","v5","$closingBraces","$schemaValueFormat","dataPathArr","$format","$compare","$isMax","$exclusiveKeyword","$schemaExcl","$isDataExcl","$op","$result","$isData","$schemaValue","$schemaValueExcl","$exclusive","$opExpr","$opStr","$$outStack","createErrors","messages","verbose","__err","pop","compositeRule","13","$notOp","14","15","unicode","16","17","$it","$currentBaseId","arr1","$sch","$i","l1","18","$errs","$noEmptySchema","every","$wasComposite","19","20","$schemaDeps","$propertyDeps","$property","$deps","$currentErrorPath","_$property","$prop","$propertyPath","$missingProperty","_errorDataPathProperty","join","arr2","$reqProperty","i2","l2","21","22","$isObject","$formatRef","23","$dataNxt","$nextData","$additionalItems","additionalItems","$currErrSchemaPath","$passData","$code","24","multipleOfPrecision","25","$allErrorsOption","26","27","$regexp","28","$key","$matched","$pProperty","i1","$missingPattern","29","$schemaKeys","$pProperties","patternProperties","$pPropertyKeys","$aProperties","additionalProperties","$someProperties","$noAdditional","$additionalIsSchema","$removeAdditional","removeAdditional","$checkAdditional","$required","loopRequired","$requiredHash","$pgProperties","patternGroups","$pgPropertyKeys","$propertyKey","arr3","$pgProperty","l3","$additionalProperty","$useDefaults","useDefaults","arr4","i4","l4","$hasDefault","$useData","arr5","i5","l5","arr6","i6","l6","$pgSchema","$pgMin","$pgMax","$limit","$reason","$moreOrLess","30","$refCode","$refVal","$message","missingRefs","$error","passContext","__callValidate","31","$propertySch","$loopRequired","i3","32","$shouldContinue","$ifPassed","$caseIndex","then","33","34","$shouldUseGroup","$rulesGroup","$shouldUseRule","$rule","$top","rootId","$es7","yieldAwait","$closingBraces1","$closingBraces2","$typeSchema","$typeIsArray","coerceTypes","$coerceToTypes","$method","$dataType","$coerced","$bracesCoercion","$type","$parentData","$dataProperty","JSON","stringify","custom","$ruleValidate","$ruleErrs","$ruleErr","$rDef","$asyncKeyword","$inline","$macro","statements","def_callRuleValidate","def_customError","$typeChecked","35","_addRule","ruleGroup","rg","36","description","definitions","schemaArray","positiveInteger","positiveIntegerDefault0","default","simpleTypes","stringArray","title","exclusiveMinimum","exclusiveMaximum","37","formatMaximum","formatMinimum","formatExclusiveMaximum","formatExclusiveMinimum","constant","contains","switch","if","continue","38","enableV5","_addKeyword","inlineFunc","inlineFunctions","addKeyword","_formatLimit","patternRequired","meta","metaSchema","addMetaSchema","META_SCHEMA_ID","containsMacro","enable","./dotjs/_formatLimit","./dotjs/constant","./dotjs/patternRequired","./dotjs/switch","./refs/json-schema-v5.json","39","gen","ctx","args","arguments","Promise","reject","onFulfilled","ret","next","onRejected","done","toPromise","isPromise","TypeError","String","apply","isGeneratorFunction","isGenerator","thunkToPromise","arrayToPromise","isObject","objectToPromise","fn","defer","promise","results","name","displayName","val","wrap","createPromise","__generatorFunction__","40","json","cmp","space","cycles","replacer","node","aobj","bobj","seen","parent","indent","colonSeparator","toJSON","indexOf","objectKeys","sort","keyValue","splice","","x","toString","has","hasOwnProperty","jsonify","41","./lib/parse","./lib/stringify","42","at","ch","text","escapee","\"","\\","/","m","c","charAt","string","isFinite","hex","uffff","parseInt","fromCharCode","white","word","source","reviver","result","walk","holder","k","43","quote","escapable","lastIndex","partial","mind","gap","rep","\b","\t","\n","\f","\r","44","RangeError","mapDomain","regexSeparators","labels","encoded","ucs2decode","extra","output","counter","ucs2encode","stringFromCharCode","basicToDigit","codePoint","base","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","floor","damp","baseMinusTMin","tMax","skew","decode","input","basic","j","oldi","w","baseMinusT","inputLength","initialN","bias","initialBias","lastIndexOf","delimiter","maxInt","tMin","encode","handledCPCount","basicLength","q","currentValue","handledCPCountPlusOne","qMinusT","toUnicode","regexPunycode","toLowerCase","toASCII","regexNonASCII","freeExports","nodeType","freeModule","freeGlobal","punycode","overflow","not-basic","invalid-input","Math","version","ucs2","45","qs","sep","eq","options","regexp","maxKeys","kstr","vstr","idx","substr","xs","46","stringifyPrimitive","ks","47","./decode","./encode","48","Url","slashes","auth","port","search","query","pathname","href","urlParse","parseQueryString","slashesDenoteHost","urlFormat","isString","urlResolve","relative","urlResolveObject","resolveObject","protocolPattern","portPattern","simplePathPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","querystring","queryIndex","splitter","uSplit","slashRegex","rest","trim","simplePath","exec","proto","lowerProto","hostEnd","hec","atSign","parseHost","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","unshift","h","ae","esc","escape","qm","rel","tkeys","tk","tkey","rkeys","rk","rkey","relPath","shift","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","isNullOrUndefined","authInHost","isNull","last","hasTrailingSlash","isAbsolute","49","arg","SCHEMA_URI_FORMAT_FUNC","SCHEMA_URI_FORMAT","schemaKeyRef","getSchema","valid","_skipValidation","_meta","checkUnique","skipValidation","throwOrLogError","defaultMeta","currentUriFormat","errorsText","keyRef","_getSchemaObj","removeSchema","_removeAllSchemas","jsonStr","schemas","shouldAddSchema","cached","addUsedSchema","callValidate","_validate","compiling","currentOpts","_metaOpts","compileSchema","separator","dataPath","addFormat","addInitialSchemas","optsSchemas","addInitialFormats","getMetaSchemaOptions","metaOpts","META_IGNORE_OPTIONS","cache","indent_size","errorDataPath","./async","./cache","./compile","./compile/formats","./compile/resolve","./compile/rules","./compile/schema_obj","./compile/validation_error","./keyword","./refs/json-schema-draft-04.json","./v5"],"mappings":"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","file":"dist/ajv.min.js"}
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/tools/make_tests.py
@@ -0,0 +1,87 @@
+# Copyright (c) 2016 W3C
+# Released under the W3C Test Suite License: see LICENSE.txt
+
+# This tool creates .html test files for the WPT harness from corresponding .text
+# files that it finds in the tree for this test collection.
+
+
+import re
+import time
+import json
+import fnmatch
+import os
+import shutil
+import sys
+import argparse
+
+TESTTREE = '..'
+DEFDIR   = '../definitions'
+TEMPLATE = 'template'
+
+
+parser = argparse.ArgumentParser()
+
+parser.add_argument('--examples', action="store_const", const=1)
+
+args = parser.parse_args()
+
+# pull in the template
+
+template = open(TEMPLATE, "r").read()
+
+defList = []
+defnames = ""
+
+# find all of the definitions
+for curdir, subdirList, fileList in os.walk(DEFDIR, topdown=True):
+  for file in fnmatch.filter(fileList, "*.json"):
+    theFile = os.path.join(curdir, file)
+    try:
+      testJSON = json.load(open(theFile, "r"))
+    except ValueError as e:
+      print "parse of " + theFile + " failed: " + e[0]
+    else:
+      theFile = re.sub("\.\./", "", theFile)
+      defList.append(theFile)
+
+if (len(defList)):
+    defNames = '"' + '",\n  "'.join(defList) + '"'
+
+
+# iterate over the folders looking for .test files
+
+for curdir, subdirList, fileList in os.walk(TESTTREE, topdown=True):
+  # sjip the definitions directory
+  subdirList[:] = [d for d in subdirList if d != "definitions"]
+  # skip the examples directory
+  if args.examples != 1:
+    subdirList[:] = [d for d in subdirList if d != "examples"]
+
+  for file in fnmatch.filter(fileList, "*.test"):
+# for each .test file, create a corresponding .html file using template
+    theFile = os.path.join(curdir, file)
+    try:
+      testJSON = json.load(open(theFile, "r"))
+    except ValueError as e:
+      print "parse of " + theFile + " failed: " + e[0]
+    else:
+      rfile = re.sub("\.\./", "", file)
+      # interesting pattern is {{TESTFILE}}
+      tcopy = re.sub("{{TESTFILE}}", rfile, template)
+
+      tcopy = re.sub("{{SCHEMADEFS}}", defNames, tcopy)
+
+      if testJSON['name']:
+        tcopy = re.sub("{{TESTTITLE}}", testJSON['name'], tcopy)
+
+      # target file is basename of theFile + '-manual.html'
+      target = re.sub("\.test","-manual.html", theFile)
+
+      try:
+        out = open(target, "w")
+        out.write(tcopy)
+        out.close()
+      except:
+        print("Failed to create "+target)
+      else:
+        print("Created " + target)
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/tools/template
@@ -0,0 +1,42 @@
+<!doctype html>
+<html>
+<head>
+<title>{{TESTTITLE}}</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/annotation-model/scripts/ajv.min.js"></script>
+<script src="/annotation-model/scripts/JSONtest.js"></script>
+<script>
+setup({explicit_timeout: true, explicit_done: true });
+
+var theDefinitions=[
+  {{SCHEMADEFS}}
+];
+
+var theTestFile="{{TESTFILE}}";
+
+var runningTest = new JSONtest( {
+    "testInput"   : "annotation-input",
+    "runTest"     : "annotation-run",
+    "closeWindow" : "annotation-close",
+    "schemaDefs"  : theDefinitions,
+    "testFile"    : theTestFile
+} ) ;
+
+</script>
+</head>
+<body>
+<p>Fill the textarea below with  JSON output from your annotation client
+implementation that supports the following criteria:</p>
+<div id="testDescription"></div>
+<p>Specifically, the following assertions will be evaluated:</p>
+<div id="assertion"></div>
+<form name="annotation" id="annotation">
+    <textarea name="annotation-input" id="annotation-input" style="width: 90%; height: 10em" >
+    </textarea>
+    <p><input type="button" id="annotation-run" name="Loading..." value="Loading...">
+       <input style="display: none" type="button" id="annotation-close"
+       name="Close" value="Close"></p>
+</form>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/annotation-model/tools/tests/README.md
@@ -0,0 +1,10 @@
+Tree to Test the Tests
+======================
+
+This folder is meant to contain a collection of .jsonld files that mirror the
+structure of the top level folders and subfolders with .test files.  A script
+(@@@TODO@@@) will walk this tree, taking each folder and running it through the
+corresponding .test file to ensure that the test is working as expected.  An
+argument to that script will report on any .jsonld files that do not have a
+corresponding .test file, and vice versa.
+
--- a/testing/web-platform/tests/custom-elements/custom-elements-registry/define.html
+++ b/testing/web-platform/tests/custom-elements/custom-elements-registry/define.html
@@ -51,17 +51,36 @@
   ].forEach(t =>  {
     test(() =>  {
       assert_throws(expectTypeError, () =>  {
         customElements.define(`test-define-constructor-${t[0]}`, t[1]);
       });
     }, `If constructor is ${t[0]}, should throw a TypeError`);
   });
 
-  // 2. If name is not a valid custom element name,
+  // 2. If constructor is an interface object or named constructor whose corresponding
+  // interface either is HTMLElement or has HTMLElement in its set of inherited interfaces,
+  // throw a TypeError and abort these steps.
+  [
+    [ 'HTMLElement', HTMLElement ],
+    [ 'HTMLButtonElement', HTMLButtonElement ],
+    [ 'HTMLImageElement', HTMLImageElement ],
+    [ 'HTMLMediaElement', HTMLMediaElement ],
+    [ 'Image' , Image ],
+    [ 'Audio' , Audio ],
+    [ 'Option', Option ],
+  ].forEach(t => {
+    test(() => {
+      assert_throws(expectTypeError, () => {
+        customElements.define(`test-define-constructor-${t[0]}`, t[1]);
+      });
+    }, `If constructor is ${t[0]}, should throw a TypeError`);
+  });
+
+  // 3. If name is not a valid custom element name,
   // then throw a SyntaxError and abort these steps.
   let validCustomElementNames = [
     // [a-z] (PCENChar)* '-' (PCENChar)*
     // https://html.spec.whatwg.org/multipage/scripting.html#valid-custom-element-name
     'a-',
     'a-a',
     'aa-',
     'aa-a',
@@ -105,46 +124,46 @@
   invalidCustomElementNames.forEach(name =>  {
     test(() =>  {
       assert_throws(expectSyntaxError, () =>  {
         customElements.define(name, class {});
       });
     }, `Element names: defining an element named ${name} should throw a SyntaxError`);
   });
 
-  // 3. If this CustomElementsRegistry contains an entry with name name,
+  // 4. If this CustomElementsRegistry contains an entry with name name,
   // then throw a NotSupportedError and abort these steps.
   test(() =>  {
     customElements.define('test-define-dup-name', class {});
     assert_throws(expectNotSupportedError, () =>  {
       customElements.define('test-define-dup-name', class {});
     });
   }, 'If the name is already defined, should throw a NotSupportedError');
 
-  // 4. If this CustomElementsRegistry contains an entry with constructor constructor,
+  // 6. If this CustomElementsRegistry contains an entry with constructor constructor,
   // then throw a NotSupportedError and abort these steps.
   test(() =>  {
     class TestDupConstructor {};
     customElements.define('test-define-dup-constructor', TestDupConstructor);
     assert_throws(expectNotSupportedError, () =>  {
       customElements.define('test-define-dup-ctor2', TestDupConstructor);
     });
   }, 'If the constructor is already defined, should throw a NotSupportedError');
 
-  // 7.1. If extends is a valid custom element name,
+  // 10.1. If extends is a valid custom element name,
   // then throw a NotSupportedError.
   validCustomElementNames.forEach(name =>  {
     test(() =>  {
       assert_throws(expectNotSupportedError, () =>  {
         customElements.define('test-define-extend-valid-name', class {}, { extends: name });
       });
     }, `If extends is ${name}, should throw a NotSupportedError`);
   });
 
-  // 7.2. If the element interface for extends and the HTML namespace is HTMLUnknownElement
+  // 10.2. If the element interface for extends and the HTML namespace is HTMLUnknownElement
   // (e.g., if extends does not indicate an element definition in this specification),
   // then throw a NotSupportedError.
   [
     // https://html.spec.whatwg.org/multipage/dom.html#elements-in-the-dom:htmlunknownelement
     'bgsound',
     'blink',
     'isindex',
     'multicol',
@@ -154,29 +173,17 @@
   ].forEach(name =>  {
     test(() =>  {
       assert_throws(expectNotSupportedError, () =>  {
         customElements.define('test-define-extend-' + name, class {}, { extends: name });
       });
     }, `If extends is ${name}, should throw a NotSupportedError`);
   });
 
-  // 8. Let observedAttributesIterable be Get(constructor, "observedAttributes").
-  // Rethrow any exceptions.
-  test(() => {
-    class C {
-      static get observedAttributes() { throw_rethrown_error(); }
-      attributeChangedCallback() {}
-    }
-    assert_rethrown(() => {
-      customElements.define('test-define-observedattributes-rethrow', C);
-    });
-  }, 'If constructor.observedAttributes throws, should rethrow');
-
-  // 10. Let prototype be Get(constructor, "prototype"). Rethrow any exceptions.
+  // 13.1. Let prototype be Get(constructor, "prototype"). Rethrow any exceptions.
   function assert_rethrown(func, description) {
     assert_throws({ name: 'rethrown' }, func, description);
   }
   function throw_rethrown_error() {
     const e = new Error('check this is rethrown');
     e.name = 'rethrown';
     throw e;
   }
@@ -185,41 +192,48 @@
     const BadConstructor = (function () { }).bind({});
     Object.defineProperty(BadConstructor, 'prototype', {
       get() { throw_rethrown_error(); }
     });
     assert_rethrown(() =>  {
       customElements.define('test-define-constructor-prototype-rethrow', BadConstructor);
     });
   }, 'If constructor.prototype throws, should rethrow');
-  // 11. If Type(prototype) is not Object,
+
+  // 13.2. If Type(prototype) is not Object,
   // then throw a TypeError exception.
   test(() =>  {
     const c = (function () { }).bind({}); // prototype is undefined.
     assert_throws(expectTypeError, () =>  {
       customElements.define('test-define-constructor-prototype-undefined', c);
     });
   }, 'If Type(constructor.prototype) is undefined, should throw a TypeError');
   test(() =>  {
     function c() {};
     c.prototype = 'string';
     assert_throws(expectTypeError, () =>  {
       customElements.define('test-define-constructor-prototype-string', c);
     });
   }, 'If Type(constructor.prototype) is string, should throw a TypeError');
 
-  // 12. Let connectedCallback be Get(prototype, "connectedCallback"). Rethrow any exceptions.
-  // 13. If connectedCallback is not undefined, and IsCallable(connectedCallback) is false,
-  // then throw a TypeError exception.
-  // 14. Let disconnectedCallback be Get(prototype, "disconnectedCallback"). Rethrow any exceptions.
-  // 15. If disconnectedCallback is not undefined, and IsCallable(disconnectedCallback) is false,
-  // then throw a TypeError exception.
-  // 16. Let attributeChangedCallback be Get(prototype, "attributeChangedCallback"). Rethrow any exceptions.
-  // 17. If attributeChangedCallback is not undefined, and IsCallable(attributeChangedCallback) is false,
-  // then throw a TypeError exception.
+  // 13.4. Let connectedCallbackValue be Get(prototype, "connectedCallback").
+  // Rethrow any exceptions.
+  // 13.5. If connectedCallbackValue is not undefined, then set connectedCallback
+  // to the result of converting connectedCallbackValue to the Web IDL Function callback type.
+  // Rethrow any exceptions.
+  // 13.6. Let disconnectedCallbackValue be Get(prototype, "disconnectedCallback").
+  // Rethrow any exceptions.
+  // 13.7. If disconnectedCallbackValue is not undefined, then set disconnectedCallback
+  // to the result of converting disconnectedCallbackValue to the Web IDL Function callback type.
+  // Rethrow any exceptions.
+  // 13.8. Let attributeChangedCallbackValue be Get(prototype, "attributeChangedCallback").
+  // Rethrow any exceptions.
+  // 13.9. If attributeChangedCallbackValue is not undefined, then set attributeChangedCallback
+  // to the result of converting attributeChangedCallbackValue to the Web IDL Function callback type.
+  // Rethrow any exceptions.
   [
     'connectedCallback',
     'disconnectedCallback',
     'attributeChangedCallback',
   ].forEach(name => {
     test(() => {
       class C {
         get [name]() { throw_rethrown_error(); }
--- a/testing/web-platform/tests/docs/test-format-guidelines.md
+++ b/testing/web-platform/tests/docs/test-format-guidelines.md
@@ -188,29 +188,50 @@ in particular are common:
 ### Standalone workers tests
 
 Tests that only require assertions in a dedicated worker scope can use
 standalone workers tests. In this case, the test is a JavaScript file
 with extension `.worker.js` that imports `testharness.js`. The test can
 then use all the usual APIs, and can be run from the path to the
 JavaScript file with the `.js` removed.
 
-For example, one could write a test for the `Blob` constructor by
-creating a `FileAPI/Blob-constructor.worker.js` as follows:
+For example, one could write a test for the `FileReaderSync` API by
+creating a `FileAPI/FileReaderSync.worker.js` as follows:
 
     importScripts("/resources/testharness.js");
     test(function () {
+      var blob = new Blob(["Hello"]);
+      var fr = new FileReaderSync();
+      assert_equals(fr.readAsText(blob), "Hello");
+    }, "FileReaderSync#readAsText.");
+    done();
+
+This test could then be run from `FileAPI/FileReaderSync.worker`.
+
+### Multi-global tests
+
+Tests for features that exist in multiple global scopes can be written in a way
+that they are automatically run in a window scope as well as a dedicated worker
+scope.
+In this case, the test is a JavaScript file with extension `.any.js`.
+The test can then use all the usual APIs, and can be run from the path to the
+JavaScript file with the `.js` replaced by `.worker` or `.html`.
+
+For example, one could write a test for the `Blob` constructor by
+creating a `FileAPI/Blob-constructor.any.js` as follows:
+
+    test(function () {
       var blob = new Blob();
       assert_equals(blob.size, 0);
       assert_equals(blob.type, "");
       assert_false(blob.isClosed);
     }, "The Blob constructor.");
-    done();
 
-This test could then be run from `FileAPI/Blob-constructor.worker`.
+This test could then be run from `FileAPI/Blob-constructor.any.worker` as well
+as `FileAPI/Blob-constructor.any.html`.
 
 ### Tests Involving Multiple Origins
 
 In the test environment, five subdomains are available; `www`, `www1`,
 `www2`, `天気の良い日` and `élève`. These must be used for
 cross-origin tests. In addition two ports are available for http and
 one for websockets. Tests must not hardcode the hostname of the server
 that they expect to be running on or the port numbers, as these are
--- a/testing/web-platform/tests/domparsing/DOMParser-parseFromString-html.html
+++ b/testing/web-platform/tests/domparsing/DOMParser-parseFromString-html.html
@@ -46,16 +46,20 @@ test(function() {
     var url = document.URL;
     assert_equals(doc.documentURI, url,
                   'The document must have a URL value equal to the URL of the active document.');
     assert_equals(doc.URL, url,
                   'The document must have a URL value equal to the URL of the active document.');
 }, 'URL value');
 
 test(function() {
+    assert_equals(doc.baseURI, document.URL);
+}, 'baseURI value');
+
+test(function() {
     assert_equals(doc.location, null,
                   'The document must have a location value of null.');
 }, 'Location value');
 
 test(function() {
     var soup = "<!DOCTYPE foo></><foo></multiple></>";
     var htmldoc = new DOMParser().parseFromString(soup, "text/html");
     assert_equals(htmldoc.documentElement.localName, "html");
--- a/testing/web-platform/tests/domparsing/DOMParser-parseFromString-xml.html
+++ b/testing/web-platform/tests/domparsing/DOMParser-parseFromString-xml.html
@@ -4,16 +4,17 @@
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
 <script>
 function checkMetadata(doc, contentType) {
   assert_true(doc instanceof Document, "Should be Document");
   assert_equals(doc.URL, document.URL, "URL");
   assert_equals(doc.documentURI, document.URL, "documentURI");
+  assert_equals(doc.baseURI, document.URL, "baseURI");
   assert_equals(doc.characterSet, "UTF-8", "characterSet");
   assert_equals(doc.charset, "UTF-8", "charset");
   assert_equals(doc.inputEncoding, "UTF-8", "inputEncoding");
   assert_equals(doc.contentType, contentType, "contentType");
   assert_equals(doc.location, null, "location");
 }
 
 var allowedTypes = ["text/xml", "application/xml", "application/xhtml+xml", "image/svg+xml"];
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/encrypted-media/EncryptedMediaExtensions.idl
@@ -0,0 +1,118 @@
+// Encrypted Media Extensions WebIDL
+//
+// NOTE: Please update the link below to the specification version from
+//       which this IDL was extracted.
+//
+// https://www.w3.org/TR/2016/WD-encrypted-media-20160610/
+//
+
+partial interface Navigator {
+    Promise<MediaKeySystemAccess> requestMediaKeySystemAccess (DOMString keySystem, sequence<MediaKeySystemConfiguration> supportedConfigurations);
+};
+
+enum MediaKeysRequirement {
+    "required",
+    "optional",
+    "not-allowed"
+};
+
+dictionary MediaKeySystemConfiguration {
+             DOMString                               label = "";
+             sequence<DOMString>                     initDataTypes = [];
+             sequence<MediaKeySystemMediaCapability> audioCapabilities = [];
+             sequence<MediaKeySystemMediaCapability> videoCapabilities = [];
+             MediaKeysRequirement                    distinctiveIdentifier = "optional";
+             MediaKeysRequirement                    persistentState = "optional";
+             sequence<DOMString>                     sessionTypes;
+};
+
+dictionary MediaKeySystemMediaCapability {
+             DOMString contentType = "";
+             DOMString robustness = "";
+};
+
+interface MediaKeySystemAccess {
+    readonly        attribute DOMString keySystem;
+    MediaKeySystemConfiguration getConfiguration ();
+    Promise<MediaKeys>          createMediaKeys ();
+};
+
+enum MediaKeySessionType {
+    "temporary",
+    "persistent-usage-record",
+    "persistent-license"
+};
+
+interface MediaKeys {
+    MediaKeySession  createSession (optional MediaKeySessionType sessionType = "temporary");
+    Promise<boolean> setServerCertificate (BufferSource serverCertificate);
+};
+
+interface MediaKeySession : EventTarget {
+    readonly        attribute DOMString           sessionId;
+    readonly        attribute unrestricted double expiration;
+    readonly        attribute Promise<void>       closed;
+    readonly        attribute MediaKeyStatusMap   keyStatuses;
+                    attribute EventHandler        onkeystatuseschange;
+                    attribute EventHandler        onmessage;
+    Promise<void>    generateRequest (DOMString initDataType, BufferSource initData);
+    Promise<boolean> load (DOMString sessionId);
+    Promise<void>    update (BufferSource response);
+    Promise<void>    close ();
+    Promise<void>    remove ();
+};
+
+interface MediaKeyStatusMap {
+    iterable<BufferSource,MediaKeyStatus>;
+    readonly        attribute unsigned long size;
+    boolean has (BufferSource keyId);
+    any     get (BufferSource keyId);
+};
+
+enum MediaKeyStatus {
+    "usable",
+    "expired",
+    "released",
+    "output-restricted",
+    "output-downscaled",
+    "status-pending",
+    "internal-error"
+};
+
+enum MediaKeyMessageType {
+    "license-request",
+    "license-renewal",
+    "license-release",
+    "individualization-request"
+};
+
+[ Constructor (DOMString type, optional MediaKeyMessageEventInit eventInitDict)]
+interface MediaKeyMessageEvent : Event {
+    readonly        attribute MediaKeyMessageType messageType;
+    readonly        attribute ArrayBuffer         message;
+};
+
+dictionary MediaKeyMessageEventInit : EventInit {
+             MediaKeyMessageType messageType = "license-request";
+             ArrayBuffer         message;
+};
+
+// partial interface HTMLMediaElement : EventTarget {
+partial interface HTMLMediaElement {
+    readonly        attribute MediaKeys?   mediaKeys;
+                    attribute EventHandler onencrypted;
+                    attribute EventHandler onwaitingforkey;
+    Promise<void> setMediaKeys (MediaKeys? mediaKeys);
+};
+
+[ Constructor (DOMString type, optional MediaEncryptedEventInit eventInitDict)]
+interface MediaEncryptedEvent : Event {
+    readonly        attribute DOMString    initDataType;
+    readonly        attribute ArrayBuffer? initData;
+};
+
+dictionary MediaEncryptedEventInit : EventInit {
+             DOMString    initDataType = "";
+             ArrayBuffer? initData = null;
+};
+
--- a/testing/web-platform/tests/encrypted-media/Google/encrypted-media-async-creation-with-gc.html
+++ b/testing/web-platform/tests/encrypted-media/Google/encrypted-media-async-creation-with-gc.html
@@ -1,33 +1,31 @@
 <!DOCTYPE html>
 <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
 <html>
     <head>
         <title>Test asynchronous creation of MediaKeys and MediaKeySession while running garbage collection</title>
         <script src="encrypted-media-utils.js"></script>
-        <script src="../../resources/testharness.js"></script>
-        <script src="../../resources/testharnessreport.js"></script>
+        <script src="/resources/testharness.js"></script>
+        <script src="/resources/testharnessreport.js"></script>
     </head>
     <body>
         <div id="log"></div>
         <script>
             async_test(function(test)
             {
                 // Run garbage collection often.
                 setInterval(asyncGC, 0);
 
                 var initDataType;
                 var initData;
                 var mediaKeySession;
-                getSupportedInitDataType().then(function(type) {
-                    initDataType = type;
+                navigator.requestMediaKeySystemAccess('org.w3.clearkey', getSimpleConfiguration()).then(function(access) {
+                    initDataType = access.getConfiguration().initDataTypes[0];
                     initData = getInitData(initDataType);
-                    return navigator.requestMediaKeySystemAccess('org.w3.clearkey', [{}]);
-                }).then(function(access) {
                     return access.createMediaKeys();
                 }).then(function(mediaKeys) {
                     mediaKeySession = mediaKeys.createSession();
                     return mediaKeySession.generateRequest(initDataType, initData);
                 }).then(function() {
                     return mediaKeySession.close();
                 }).then(function(result) {
                     test.done();
--- a/testing/web-platform/tests/encrypted-media/Google/encrypted-media-async-setcert-with-gc.html
+++ b/testing/web-platform/tests/encrypted-media/Google/encrypted-media-async-setcert-with-gc.html
@@ -1,26 +1,26 @@
 <!DOCTYPE html>
 <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
 <html>
     <head>
         <title>Test asynchronous setServerCertificate while running garbage collection</title>
         <script src="encrypted-media-utils.js"></script>
-        <script src="../../resources/testharness.js"></script>
-        <script src="../../resources/testharnessreport.js"></script>
+        <script src="/resources/testharness.js"></script>
+        <script src="/resources/testharnessreport.js"></script>
     </head>
     <body>
         <div id="log"></div>
         <script>
             // Run garbage collection continuously.
             setInterval(asyncGC, 0);
 
             promise_test(function(test)
             {
-                return navigator.requestMediaKeySystemAccess('org.w3.clearkey', [{}]).then(function(access) {
+                return navigator.requestMediaKeySystemAccess('org.w3.clearkey', getSimpleConfiguration()).then(function(access) {
                     return access.createMediaKeys();
                 }).then(function(mediaKeys) {
                     var cert = new Uint8Array(200);
                     return mediaKeys.setServerCertificate(cert);
                 }).then(function(result) {
                     assert_false(result);
                 });
             }, 'Test asynchronous setServerCertificate while running garbage collection.');
--- a/testing/web-platform/tests/encrypted-media/Google/encrypted-media-check-init-data-type.html
+++ b/testing/web-platform/tests/encrypted-media/Google/encrypted-media-check-init-data-type.html
@@ -1,29 +1,28 @@
 <!DOCTYPE html>
 <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
 <html>
     <head>
         <title>Test support of different initDataTypes.</title>
         <script src="encrypted-media-utils.js"></script>
-        <script src="../../resources/testharness.js"></script>
-        <script src="../../resources/testharnessreport.js"></script>
+        <script src="/resources/testharness.js"></script>
+        <script src="/resources/testharnessreport.js"></script>
     </head>
     <body>
         <div id="log"></div>
         <script>
             function checkInitDataType(initDataType)
             {
                 return isInitDataTypeSupported(initDataType).then(function(result) {
                     // If |initDataType| is not supported, simply succeed.
                     if (!result)
                         return Promise.resolve('Not supported');
 
-                    var options = [ { initDataTypes: [initDataType] } ];
-                    return navigator.requestMediaKeySystemAccess('org.w3.clearkey', options)
+                    return navigator.requestMediaKeySystemAccess('org.w3.clearkey', getSimpleConfigurationForInitDataType(initDataType))
                         .then(function(access) {
                             return access.createMediaKeys();
                         }).then(function(mediaKeys) {
                             var mediaKeySession = mediaKeys.createSession();
                             var initData = getInitData(initDataType);
                             return mediaKeySession.generateRequest(initDataType, initData);
                         });
                 });
--- a/testing/web-platform/tests/encrypted-media/Google/encrypted-media-clear-key-invalid-license.html
+++ b/testing/web-platform/tests/encrypted-media/Google/encrypted-media-clear-key-invalid-license.html
@@ -1,16 +1,16 @@
 <!DOCTYPE html>
 <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
 <html>
     <head>
         <title>Invalid Clear Key License.</title>
         <script src="encrypted-media-utils.js"></script>
-        <script src="../../resources/testharness.js"></script>
-        <script src="../../resources/testharnessreport.js"></script>
+        <script src="/resources/testharness.js"></script>
+        <script src="/resources/testharnessreport.js"></script>
     </head>
     <body>
         <div id="log"></div>
         <script>
             async_test(function(test)
             {
                 var initDataType;
                 var initData;
@@ -22,21 +22,19 @@
                         assert_unreached('Error: update() succeeded unexpectedly.');
                         test.done();
                     }).catch(function(error) {
                         assert_equals(error.name, 'InvalidAccessError');
                         test.done();
                     });
                 }
 
-                getSupportedInitDataType().then(function(type) {
-                    initDataType = type;
+                navigator.requestMediaKeySystemAccess('org.w3.clearkey', getSimpleConfiguration()).then(function(access) {
+                    initDataType = access.getConfiguration().initDataTypes[0];
                     initData = getInitData(initDataType);
-                    return navigator.requestMediaKeySystemAccess('org.w3.clearkey', [{}]);
-                }).then(function(access) {
                     return access.createMediaKeys();
                 }).then(function(mediaKeys) {
                     var keySession = mediaKeys.createSession();
                     keySession.addEventListener('message', handleMessage, false);
                     keySession.generateRequest(initDataType, initData);
                 }).catch(function(error) {
                     forceTestFailureFromPromise(test, error);
                 });
--- a/testing/web-platform/tests/encrypted-media/Google/encrypted-media-clearkey-update-non-ascii-input.html
+++ b/testing/web-platform/tests/encrypted-media/Google/encrypted-media-clearkey-update-non-ascii-input.html
@@ -1,26 +1,27 @@
 <!DOCTYPE html>
 <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
 <html>
     <head>
         <title>Test Clear Key handling of non-ASCII responses for update().</title>
         <script src="encrypted-media-utils.js"></script>
-        <script src="../../resources/testharness.js"></script>
-        <script src="../../resources/testharnessreport.js"></script>
+        <script src="/resources/testharness.js"></script>
+        <script src="/resources/testharnessreport.js"></script>
     </head>
     <body>
         <div id="log"></div>
         <script>
             // This test passes |response| to update() as a JSON Web Key Set.
             // CDMs other than Clear Key won't expect |response| in this format.
 
             async_test(function(test)
             {
                 var initDataType;
+                var initData;
                 var mediaKeySession;
 
                 function processMessage(event)
                 {
                     // |jwkSet| includes some non-ASCII characters.
                     var jwkSet = '{"keys":[{'
                                +     '"kty":"oct\uDC00\uD800",'
                                +     '"k":"MDEyMzQ1Njc4OTAxMjM0NQ",'
@@ -29,22 +30,21 @@
                     mediaKeySession.update(stringToUint8Array(jwkSet)).then(function() {
                         forceTestFailureFromPromise(test, 'Error: update() succeeded');
                     }, function(error) {
                         assert_equals(error.name, 'InvalidAccessError');
                         test.done();
                     });
                 }
 
-                getSupportedInitDataType().then(function(type) {
-                    initDataType = type;
-                    return navigator.requestMediaKeySystemAccess('org.w3.clearkey', [{}]);
-                }).then(function(access) {
+                navigator.requestMediaKeySystemAccess('org.w3.clearkey', getSimpleConfiguration()).then(function(access) {
+                    initDataType = access.getConfiguration().initDataTypes[0];
+                    initData = getInitData(initDataType);
                     return access.createMediaKeys();
                 }).then(function(mediaKeys) {
                     mediaKeySession = mediaKeys.createSession();
                     waitForEventAndRunStep('message', mediaKeySession, processMessage, test);
-                    return mediaKeySession.generateRequest(initDataType, getInitData(initDataType));
+                    return mediaKeySession.generateRequest(initDataType, initData);
                 });
             }, 'Clear Key update() with non-ASCII response.');
         </script>
     </body>
 </html>
--- a/testing/web-platform/tests/encrypted-media/Google/encrypted-media-events.html
+++ b/testing/web-platform/tests/encrypted-media/Google/encrypted-media-events.html
@@ -1,16 +1,16 @@
 <!DOCTYPE html>
 <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
 <html>
     <head>
         <title>Verify v2 events</title>
         <script src="encrypted-media-utils.js"></script>
-        <script src="../../resources/testharness.js"></script>
-        <script src="../../resources/testharnessreport.js"></script>
+        <script src="/resources/testharness.js"></script>
+        <script src="/resources/testharnessreport.js"></script>
     </head>
     <body>
         <div id="log"></div>
         <script>
             // Currently Clear Key only generates aynchronous "message" and
             // "keychange" events.
             async_test(function(test)
             {
@@ -40,21 +40,19 @@
                 function processKeyStatusesChange(event)
                 {
                     assert_true(event instanceof Event);
                     assert_equals(event.target, mediaKeySession);
                     assert_equals(event.type, 'keystatuseschange');
                     test.done();
                 }
 
-                getSupportedInitDataType().then(function(type) {
-                    initDataType = type;
+                navigator.requestMediaKeySystemAccess('org.w3.clearkey', getSimpleConfiguration()).then(function(access) {
+                    initDataType = access.getConfiguration().initDataTypes[0];
                     initData = getInitData(initDataType);
-                    return navigator.requestMediaKeySystemAccess('org.w3.clearkey', [{}]);
-                }).then(function(access) {
                     return access.createMediaKeys();
                 }).then(test.step_func(function(mediaKeys) {
                     mediaKeySession = mediaKeys.createSession();
                     waitForEventAndRunStep('message', mediaKeySession, test.step_func(processMessage), test);
                     return mediaKeySession.generateRequest(initDataType, initData);
                 })).catch(test.step_func(function(error) {
                     forceTestFailureFromPromise(test, error);